예제 #1
0
        private string getcardUID() //only for mifare 1k cards
        {
            string cardUID = "";

            byte[] receivedUID            = new byte[256];
            Card.SCARD_IO_REQUEST request = new Card.SCARD_IO_REQUEST();
            request.dwProtocol  = Card.SCARD_PROTOCOL_T1;
            request.cbPciLength = System.Runtime.InteropServices.Marshal.SizeOf(typeof(Card.SCARD_IO_REQUEST));
            byte[] sendBytes = new byte[] { 0xFF, 0xCA, 0x00, 0x00, 0x00 }; //get UID command for Mifare cards
            int    outBytes  = receivedUID.Length;
            int    status    = Card.SCardTransmit(hCard, ref request, ref sendBytes[0], sendBytes.Length, ref request, ref receivedUID[0], ref outBytes);

            if (status != Card.SCARD_S_SUCCESS)
            {
                cardUID = "Error";
                string msg = "Error get UID";
                printMessage(2, msg);
            }
            else
            {
                cardUID = BitConverter.ToString(receivedUID.Take(4).ToArray()).Replace("-", string.Empty).ToLower();
            }

            return(cardUID);
        }
예제 #2
0
    public string GetCardUID()
    {
        string cardUID = "";

        byte[] receivedUID            = new byte[256];
        Card.SCARD_IO_REQUEST request = new Card.SCARD_IO_REQUEST();
        request.dwProtocol  = Card.SCARD_PROTOCOL_T1;
        request.cbPciLength = System.Runtime.InteropServices.Marshal.SizeOf(typeof(Card.SCARD_IO_REQUEST));
        byte[] sendBytes = new byte[] { 0xFF, 0xCA, 0x00, 0x00, 0x00 };
        int    outBytes  = receivedUID.Length;
        int    status    = Card.SCardTransmit(hCard, ref request, ref sendBytes[0], sendBytes.Length, ref request, ref receivedUID[0], ref outBytes);

        if (status != Card.SCARD_S_SUCCESS)
        {
            cardUID = "";
        }
        else
        {
            cardUID = BitConverter.ToString(receivedUID.Take(4).ToArray()).Replace("-", string.Empty).ToLower();
        }
        return(cardUID);
    }
예제 #3
0
        private void WaitChangeStatus(object sender, DoWorkEventArgs e)
        {
            while (!e.Cancel)
            {
                int result;

                lock (this)
                {
                    if (!this._contextState)
                    {
                        return;
                    }

                    result = Card.SCardGetStatusChange(this._context, 1000, ref this._state, this._readerCount);
                    //Console.WriteLine(this._state.RdrEventState);
                    //Console.WriteLine(Card.SCARD_STATE_CHANGED);

                    string cardUID                = "";
                    byte[] receivedUID            = new byte[256];
                    Card.SCARD_IO_REQUEST request = new Card.SCARD_IO_REQUEST();
                    request.dwProtocol  = Card.SCARD_PROTOCOL_T1;
                    request.cbPciLength = System.Runtime.InteropServices.Marshal.SizeOf(typeof(Card.SCARD_IO_REQUEST));
                    byte[] sendBytes = new byte[] { 0xFF, 0xCA, 0x00, 0x00, 0x00 }; //get UID command for Mifare cards
                    int    outBytes  = receivedUID.Length;
                    int    status    = Card.SCardTransmit(this._context, ref request, ref sendBytes[0], sendBytes.Length, ref request, ref receivedUID[0], ref outBytes);

                    if (status != Card.SCARD_S_SUCCESS)
                    {
                        cardUID = "Error";
                    }
                    else
                    {
                        cardUID = BitConverter.ToString(receivedUID.Take(4).ToArray()).Replace("-", string.Empty).ToLower();
                    }

                    Console.WriteLine(cardUID);
                }

                if (result == Card.SCARD_E_TIMEOUT)
                {
                    continue;
                }

                if ((this._state.RdrEventState & Card.SCARD_STATE_CHANGED) == Card.SCARD_STATE_CHANGED)
                {
                    int state = 0;
                    if ((this._state.RdrEventState & Card.SCARD_STATE_PRESENT) == Card.SCARD_STATE_PRESENT &&
                        (this._state.RdrEventState & Card.SCARD_STATE_PRESENT) != Card.SCARD_STATE_PRESENT)
                    {
                        state = 1;
                    }
                    else if ((this._state.RdrEventState & Card.SCARD_STATE_EMPTY) == Card.SCARD_STATE_EMPTY &&
                             (this._state.RdrEventState & Card.SCARD_STATE_EMPTY) != Card.SCARD_STATE_EMPTY)
                    {
                        state = 2;
                    }
                    if (state != 0 && this._state.RdrCurrState != 0)
                    {
                        switch (state)
                        {
                        case 1:
                        {
                            MessageBox.Show("Card inserted");
                            break;
                        }

                        case 2:
                        {
                            MessageBox.Show("Card ejected");
                            break;
                        }

                        default:
                        {
                            MessageBox.Show("Some other state...");
                            break;
                        }
                        }
                    }
                    this._state.RdrCurrState = this._state.RdrEventState;
                }
            }
        }