public StatusChangeEventArgs(string ReaderName, SCRState LastState, SCRState NewState, byte[] Atr) { this.ReaderName = ReaderName; this.LastState = LastState; this.NewState = NewState; this.ATR = Atr; }
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); }
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); }
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; } }
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); }
/// <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; }
/// <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); }
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(..).")); } } }
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); }
/// <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; }
public CardStatusEventArgs(string ReaderName, SCRState State, byte[] Atr) { this.ReaderName = ReaderName; this.State = State; this.Atr = Atr; }
/// <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) { }
/// <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; }
/// <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())); }