Example #1
0
        public static CID DecodeCID(byte[] response)
        {
            if (response?.Length != 16)
            {
                return(null);
            }

            CID cid = new CID
            {
                Manufacturer        = response[0],
                DeviceType          = (byte)(response[1] & 0x03),
                ProductRevision     = response[9],
                ProductSerialNumber = BitConverter.ToUInt32(response, 10),
                ManufacturingDate   = response[14],
                CRC = (byte)((response[15] & 0xFE) >> 1)
            };

            byte[] tmp = new byte[6];
            Array.Copy(response, 3, tmp, 0, 6);
            cid.ProductName = StringHandlers.CToString(tmp);

            return(cid);
        }
Example #2
0
        public static string PrettifyCID(CID cid)
        {
            if (cid == null)
            {
                return(null);
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("MultiMediaCard Device Identification Register:");
            sb.AppendFormat("\tManufacturer: {0}", VendorString.Prettify(cid.Manufacturer)).AppendLine();
            switch (cid.DeviceType)
            {
            case 0:
                sb.AppendLine("\tRemovable device");
                break;

            case 1:
                sb.AppendLine("\tBGA device");
                break;

            case 2:
                sb.AppendLine("\tPOP device");
                break;
            }

            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();
            string year = "";

            switch (cid.ManufacturingDate & 0x0F)
            {
            case 0:
                year = "1997 or 2013";
                break;

            case 1:
                year = "1998 or 2014";
                break;

            case 2:
                year = "1999 or 2015";
                break;

            case 3:
                year = "2000 or 2016";
                break;

            case 4:
                year = "2001 or 2017";
                break;

            case 5:
                year = "2002 or 2018";
                break;

            case 6:
                year = "2003 or 2019";
                break;

            case 7:
                year = "2004 or 2020";
                break;

            case 8:
                year = "2005 or 2021";
                break;

            case 9:
                year = "2006 or 2022";
                break;

            case 10:
                year = "2007 or 2023";
                break;

            case 11:
                year = "2008 or 2024";
                break;

            case 12:
                year = "2009 or 2025";
                break;

            case 13:
                year = "2010";
                break;

            case 14:
                year = "2011";
                break;

            case 15:
                year = "2012";
                break;
            }

            sb.AppendFormat("\tDevice manufactured month {0} of {1}", (cid.ManufacturingDate & 0xF0) >> 4, year)
            .AppendLine();
            sb.AppendFormat("\tCID CRC: 0x{0:X2}", cid.CRC).AppendLine();

            return(sb.ToString());
        }