Esempio n. 1
0
        private void HandleMifareStandard(ICardReader reader)
        {
            var mifare = new PcscSdk.MifareStandard.AccessHandler(reader);

            StatusMessage?.Invoke("Handling as Mifare Standard 1K");

            byte[] uid = mifare.GetUid();
            StatusMessage?.Invoke("UID: " + BitConverter.ToString(uid));
            Array.Resize(ref uid, uid.Length + 1);
            uid[uid.Length - 1] = 0xBB;
            NewTagUid?.Invoke(uid);

            byte gpByte = InitAndGetGPMifareStandard(mifare);

            bool usesMad    = (gpByte & 0x80) != 0;
            bool multiApp   = (gpByte & 0x40) != 0;
            int  madVersion = gpByte & 0x03;

            StatusMessage?.Invoke("Uses MAD: " + usesMad + "; Multi App: " + multiApp + "; Version: " + madVersion);

            if (ndefDataToWrite != null)
            {
                WriteNdefToMifareStandard(mifare, ndefDataToWrite);
                ndefDataToWrite = null;
            }
            else
            {
                if (!usesMad)
                {
                    throw new NfcHandlerException("No MAD in use");
                }
                if (madVersion != 1)
                {
                    throw new NfcHandlerException("Unsupported MAD version: " + madVersion + " (Only version 1 is supported)");
                }

                byte[] data = DumpMifareStandard(mifare);
                ParseTLVData(data);
            }
        }