Esempio n. 1
0
 /// <summary>
 /// Raise tag lost event
 /// </summary>
 /// <param name="nfcTagType">NFC tag type</param>
 /// <param name="conn">Connection instance to NFC tag</param>
 private void OnTagLost(NfcTagType nfcTagType, NfcTagConnection conn)
 {
     TagLost?.Invoke(this, new NfcTagEventArgs(nfcTagType, conn));
 }
Esempio n. 2
0
        protected void Poller()
        {
            SCW.SCARD_READERSTATE[] State = new SCW.SCARD_READERSTATE[1];
            State[0].RdrName      = this.Name;
            State[0].UserData     = IntPtr.Zero;
            State[0].RdrCurrState = SCW.SCARD_STATE_UNKNOWN;

            int retCode;

            retCode = SCW.SCardGetStatusChange(hContext, 100, State, 1);
            if (retCode != SCW.SCARD_S_SUCCESS)
            {
                throw new Exception("Failed initial get status change: " + SCW.GetScardErrMsg(retCode));
            }

            State[0].RdrCurrState = State[0].RdrEventState;

            while (!stopPollingSignal)
            {
                retCode = SCW.SCardGetStatusChange(hContext, 1000, State, 1);

                if (retCode == SCW.SCARD_E_TIMEOUT)
                {
                    continue;
                }
                if (retCode != SCW.SCARD_S_SUCCESS)
                {
                    throw new Exception("Failed cycling get status change: " + SCW.GetScardErrMsg(retCode));
                }

                if (((State[0].RdrEventState & SCW.SCARD_STATE_PRESENT) == SCW.SCARD_STATE_PRESENT) &&
                    ((State[0].RdrEventState & SCW.SCARD_STATE_CHANGED) == SCW.SCARD_STATE_CHANGED))
                {
                    try {
                        NFCTag tag = Connect();
                        foreach (Delegate d in TagFound.GetInvocationList())
                        {
                            ISynchronizeInvoke syncer = d.Target as ISynchronizeInvoke;
                            if (syncer != null)
                            {
                                syncer.BeginInvoke(d, new NFCTag[] { tag });
                            }
                            else
                            {
                                d.DynamicInvoke(tag);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine("Connect failed:" + ex.ToString());
                    }
                }
                else if (((State[0].RdrEventState & SCW.SCARD_STATE_EMPTY) == SCW.SCARD_STATE_EMPTY) &&
                         ((State[0].RdrEventState & SCW.SCARD_STATE_CHANGED) == SCW.SCARD_STATE_CHANGED))
                {
                    foreach (Delegate d in TagLost.GetInvocationList())
                    {
                        ISynchronizeInvoke syncer = d.Target as ISynchronizeInvoke;
                        if (syncer != null)
                        {
                            syncer.BeginInvoke(d, null);
                        }
                        else
                        {
                            d.DynamicInvoke();
                        }
                    }
                }

                State[0].RdrCurrState = State[0].RdrEventState;
            }
        }