Ejemplo n.º 1
0
 public StatusChangeEventArgs(string ReaderName, SCRState LastState, SCRState NewState, byte[] Atr)
 {
     this.ReaderName = ReaderName;
     this.LastState = LastState;
     this.NewState = NewState;
     this.ATR = Atr;
 }
Ejemplo n.º 2
0
 public StatusChangeEventArgs(string ReaderName, SCRState LastState, SCRState NewState, byte[] Atr)
 {
     this.ReaderName = ReaderName;
     this.LastState  = LastState;
     this.NewState   = NewState;
     this.ATR        = Atr;
 }
Ejemplo n.º 3
0
        private void OnCardInserted(byte[] atr, string readerName, SCRState newState)
        {
            var handler = CardInserted;

            if (handler == null)
            {
                return;
            }

            var args = new CardStatusEventArgs(
                readerName,
                newState,
                atr);

            handler(this, args);
        }
Ejemplo n.º 4
0
        private void OnInitialized(byte[] atr, string readerName, SCRState initState)
        {
            var handler = Initialized;

            if (handler == null)
            {
                return;
            }

            var args = new CardStatusEventArgs(
                readerName,
                initState,
                atr);

            handler(this, args);
        }
Ejemplo n.º 5
0
    private void RaisePcScEvent(SCRState state, string readerName)
    {
        bool doRaiseEvent = true;
        var  eventargs    = new NfcEventArgs();

        eventargs.ReaderName = readerName;
        eventargs.Data       = $"New State for {readerName}: {state.ToString()}";
        switch (state)
        {
        case SCRState.Changed:
            eventargs.Type = NfcEventType.StatusChanged;
            break;

        case SCRState.Empty:
        case SCRState.Unavailable:
            eventargs.Type = NfcEventType.Disconnected;
            lastUniqueId   = null;
            break;

        case SCRState.Present:
            eventargs.Type         = NfcEventType.Connected;
            eventargs.UniqueCardID = state.CardIsPresent() ? GetUid(readerName) : null;
            if (eventargs.UniqueCardID == lastUniqueId)
            {
                doRaiseEvent = false;
            }
            break;

        case SCRState.Unknown:
            eventargs.Type = NfcEventType.Unknown;
            break;

        default:
            doRaiseEvent = false;
            break;
        }
        if (doRaiseEvent && lastEventType != eventargs.Type)
        {
            string debugText = $"PcscWrapper: {eventargs.Type.ToString()} UID: ";
            debugText += eventargs.UniqueCardID ?? "N/A";
            Debug.WriteLine(debugText);
            System.Threading.Thread.Sleep(200);
            PcScNfcEventReceived?.Invoke(this, eventargs);
            lastUniqueId  = eventargs.UniqueCardID;
            lastEventType = eventargs.Type;
        }
    }
Ejemplo n.º 6
0
        private void OnStatusChanged(byte[] atr, string readerName, SCRState previousState, SCRState newState)
        {
            var handler = StatusChanged;

            if (handler == null)
            {
                return;
            }

            var args = new StatusChangeEventArgs(
                readerName,
                previousState,
                newState,
                atr);

            handler(this, args);
        }
Ejemplo n.º 7
0
 /// <summary>
 ///     Creates a new instance.
 /// </summary>
 /// <param name="readerName">Name of the smard card reader</param>
 /// <param name="state">The reader's state</param>
 /// <param name="atr">The card's ATR.</param>
 public CardStatusEventArgs(string readerName, SCRState state, byte[] atr)
     : base(readerName, atr)
 {
     State = state;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="StatusChangeEventArgs"/> class.
 /// </summary>
 /// <param name="readerName">Name of the reader.</param>
 /// <param name="lastState">The last state.</param>
 /// <param name="newState">The new state.</param>
 /// <param name="atr">The card's ATR.</param>
 public StatusChangeEventArgs(string readerName, SCRState lastState, SCRState newState, byte[] atr)
     : base(readerName, atr)
 {
     LastState = lastState;
     NewState  = newState;
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Checks if a card is absent
 /// </summary>
 /// <param name="state">State to check</param>
 /// <returns><c>true</c> if the card is absent</returns>
 public static bool CardIsAbsent(this SCRState state)
 {
     return((state & SCRState.Empty) == SCRState.Empty);
 }
Ejemplo n.º 10
0
        private void StartMonitor()
        {
            monitoring = true;

            SCardReaderState[] state = new SCardReaderState[readernames.Length];

            for (int i = 0; i < readernames.Length; i++)
            {
                state[i]              = new SCardReaderState();
                state[i].ReaderName   = readernames[i];
                state[i].CurrentState = SCRState.Unaware; /* force SCardGetStatusChange to return
                                                           * immediately with the current reader state */
            }

            SCardError rc = context.GetStatusChange(IntPtr.Zero, state);

            if (rc == SCardError.Success)
            {
                // initialize event
                if (Initialized != null)
                {
                    for (int i = 0; i < state.Length; i++)
                    {
                        Initialized(this,
                                    new CardStatusEventArgs(readernames[i],
                                                            (state[i].EventState & (~(SCRState.Changed))),
                                                            state[i].ATR));
                        previousState[i]      = state[i].EventState & (~(SCRState.Changed)); // remove "Changed"
                        previousStateValue[i] = state[i].EventStateValue;
                    }
                }

                while (true)
                {
                    for (int i = 0; i < state.Length; i++)
                    {
                        state[i].CurrentStateValue = previousStateValue[i];
                    }

                    // block until status change occurs
                    rc = context.GetStatusChange(SCardReader.Infinite, state);

                    // Cancel?
                    if (rc != SCardError.Success)
                    {
                        break;
                    }

                    for (int i = 0; i < state.Length; i++)
                    {
                        SCRState newState = state[i].EventState;
                        newState &= (~(SCRState.Changed)); // remove "Changed"

                        byte[] Atr = state[i].ATR;

                        // Status change
                        if (StatusChanged != null &&
                            (previousState[i] != newState))
                        {
                            StatusChanged(this,
                                          new StatusChangeEventArgs(readernames[i],
                                                                    previousState[i],
                                                                    newState,
                                                                    Atr));
                        }

                        // Card inserted
                        if (((newState & SCRState.Present) == SCRState.Present) &&
                            ((previousState[i] & SCRState.Empty) == SCRState.Empty))
                        {
                            if (CardInserted != null)
                            {
                                CardInserted(this,
                                             new CardStatusEventArgs(readernames[i],
                                                                     newState,
                                                                     Atr));
                            }
                        }

                        // Card removed
                        if (((newState & SCRState.Empty) == SCRState.Empty) &&
                            ((previousState[i] & SCRState.Present) == SCRState.Present))
                        {
                            if (CardRemoved != null)
                            {
                                CardRemoved(this,
                                            new CardStatusEventArgs(readernames[i],
                                                                    newState,
                                                                    Atr));
                            }
                        }

                        previousState[i]      = newState;
                        previousStateValue[i] = state[i].EventStateValue;
                    }
                }
            }

            monitoring = false;

            if (rc != SCardError.Cancelled)
            {
                if (MonitorException != null)
                {
                    MonitorException(this, new PCSCException(rc,
                                                             "An error occured during SCardGetStatusChange(..)."));
                }
            }
        }
Ejemplo n.º 11
0
        private void OnStatusChanged(byte[] atr, string readerName, SCRState previousState, SCRState newState)
        {
            var handler = StatusChanged;

            if (handler == null) {
                return;
            }

            var args = new StatusChangeEventArgs(
                readerName,
                previousState,
                newState,
                atr);

            handler(this, args);
        }
Ejemplo n.º 12
0
        private void OnInitialized(byte[] atr, string readerName, SCRState initState)
        {
            var handler = Initialized;

            if (handler == null) {
                return;
            }

            var args = new CardStatusEventArgs(
                readerName,
                initState,
                atr);

            handler(this, args);
        }
Ejemplo n.º 13
0
        private void OnCardRemoved(byte[] atr, string readerName, SCRState newState)
        {
            var handler = CardRemoved;

            if (handler == null) {
                return;
            }

            var args = new CardStatusEventArgs(
                readerName,
                newState,
                atr);

            handler(this, args);
        }
Ejemplo n.º 14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StatusChangeEventArgs"/> class.
 /// </summary>
 /// <param name="readerName">Name of the reader.</param>
 /// <param name="lastState">The last state.</param>
 /// <param name="newState">The new state.</param>
 /// <param name="atr">The card's ATR.</param>
 public StatusChangeEventArgs(string readerName, SCRState lastState, SCRState newState, byte[] atr)
     : base(readerName, atr) {
     LastState = lastState;
     NewState = newState;
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Creates a new MonitorCardInfoEvent instance
 /// </summary>
 /// <param name="readerName">Name of the smard card reader</param>
 /// <param name="atr">The card's ATR</param>
 /// <param name="state">The reader's state</param>
 protected MonitorCardInfoEvent(string readerName, byte[] atr, SCRState state)
     : base(readerName, atr)
 {
     State = state;
 }
Ejemplo n.º 16
0
 public CardStatusEventArgs(string ReaderName, SCRState State, byte[] Atr)
 {
     this.ReaderName = ReaderName;
     this.State = State;
     this.Atr = Atr;
 }
Ejemplo n.º 17
0
 public CardStatusEventArgs(string ReaderName, SCRState State, byte[] Atr)
 {
     this.ReaderName = ReaderName;
     this.State      = State;
     this.Atr        = Atr;
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Checks if a card is present
 /// </summary>
 /// <param name="state">State to check</param>
 /// <returns><c>true</c> if a card is present</returns>
 public static bool CardIsPresent(this SCRState state)
 {
     return((state & SCRState.Present) == SCRState.Present);
 }
 /// <summary>
 /// Creates a new MonitorInitialized instance
 /// </summary>
 /// <param name="readerName">Name of the smard card reader</param>
 /// <param name="atr">The card's ATR</param>
 /// <param name="state">The reader's state</param>
 public MonitorInitialized(string readerName, byte[] atr, SCRState state)
     : base(readerName, atr, state)
 {
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Creates a new CardStatusChanged instance
 /// </summary>
 /// <param name="readerName">Name of the reader</param>
 /// <param name="atr">The card's ATR</param>
 /// <param name="previousState">The previous state</param>
 /// <param name="newState">The new state</param>
 public CardStatusChanged(string readerName, byte[] atr, SCRState previousState, SCRState newState)
     : base(readerName, atr)
 {
     PreviousState = previousState;
     NewState      = newState;
 }
Ejemplo n.º 21
0
 /// <summary>
 ///     Creates a new instance.
 /// </summary>
 /// <param name="readerName">Name of the smard card reader</param>
 /// <param name="state">The reader's state</param>
 /// <param name="atr">The card's ATR.</param>
 public CardStatusEventArgs(string readerName, SCRState state, byte[] atr)
     : base(readerName, atr) {
     State = state;
 }
Ejemplo n.º 22
0
 /// <summary>
 /// Creates an CardInserted instance
 /// </summary>
 /// <param name="readerName">Name of the reader</param>
 /// <param name="atr">The card's ATR</param>
 /// <param name="state">The reader's state</param>
 public CardInserted(string readerName, byte[] atr, SCRState state)
     : base(readerName, atr, state)
 {
 }
 private bool IsExclusiveState(SCRState state)
 {
     return(state.ToString().Contains(SCRState.Exclusive.ToString()));
 }