public static CID DecodeCID(byte[] response) { if (response?.Length != 16) { return(null); } CID cid = new CID { Manufacturer = response[0], ProductRevision = response[8], ProductSerialNumber = BitConverter.ToUInt32(response, 9), ManufacturingDate = (ushort)(((response[13] & 0x0F) << 4) + response[14]), CRC = (byte)((response[15] & 0xFE) >> 1) }; byte[] tmp = new byte[2]; Array.Copy(response, 1, tmp, 0, 2); cid.ApplicationID = StringHandlers.CToString(tmp); tmp = new byte[5]; Array.Copy(response, 3, tmp, 0, 5); cid.ProductName = StringHandlers.CToString(tmp); return(cid); }
public static string PrettifyCID(CID cid) { if (cid == null) { return(null); } StringBuilder sb = new StringBuilder(); sb.AppendLine("SecureDigital Device Identification Register:"); sb.AppendFormat("\tManufacturer: {0}", VendorString.Prettify(cid.Manufacturer)).AppendLine(); sb.AppendFormat("\tApplication ID: {0}", cid.ApplicationID).AppendLine(); sb.AppendFormat("\tProduct name: {0}", cid.ProductName).AppendLine(); sb.AppendFormat("\tProduct revision: {0:X2}.{1:X2}", (cid.ProductRevision & 0xF0) >> 4, cid.ProductRevision & 0x0F).AppendLine(); sb.AppendFormat("\tProduct serial number: {0}", cid.ProductSerialNumber).AppendLine(); sb.AppendFormat("\tDevice manufactured month {0} of {1}", (cid.ManufacturingDate & 0xF00) >> 8, (cid.ManufacturingDate & 0xFF) + 2000).AppendLine(); sb.AppendFormat("\tCID CRC: 0x{0:X2}", cid.CRC).AppendLine(); return(sb.ToString()); }