private void StopWorker() { if (workerThread != null && !stopWorker) { stopWorker = true; workerThread.Interrupt(); workerThread.Join(); stopWorker = false; workerThread = null; CurrentCard = null; AppendOutput("\n===============", true); } }
protected void UpdateCard(ProgrammerCardChangedEventArgs args) { cardModel = args.NewCard; if (cardModel != null) { Id = cardModel.Id; Content = cardModel.Content != null?Encoding.ASCII.GetString(cardModel.Content) : null; } else { Id = null; Content = null; } RaisePropertyChanged(nameof(CardReady)); RaisePropertyChanged(nameof(AccessChangedCardReady)); }
public ProgrammerCardChangedEventArgs(IRfidCard newCard) { NewCard = newCard; }
internal void HandleSerialInput(byte[] line) { var lineStr = Encoding.ASCII.GetString(line); var ev = line.Length > 0 ? (ProgrammerEvent)lineStr[0] : ProgrammerEvent.Nothing; if (stateMachine.CurrentState == ProgrammerState.Connecting) { if (ev != ProgrammerEvent.InitComplete) { return; // ignore all before init } else { stateMachine.MoveNextOrFail(ev); } } AppendOutput(lineStr); if (ev == ProgrammerEvent.Nothing || ev == ProgrammerEvent.InitComplete) { return; } if (!Enum.IsDefined(typeof(ProgrammerEvent), ev) || ev == ProgrammerEvent.Failure) { AppendOutput("^--- ERROR: This is an invalid message!", true); stateMachine.MoveNextOrFail(ProgrammerEvent.Failure); return; } line = line.Skip(1).ToArray(); stateMachine.MoveNextOrFail(ev); // move state machine if (ev == ProgrammerEvent.CardChange) { if (line.Length > 0) { CurrentCard = rfidFactory.CreateRfidCard(line); } else { CurrentCard = null; } } else if (stateMachine.CurrentState == ProgrammerState.ErrorChecking) { var answer = line.SequenceEqual(lastCmd) ? ServiceEvent.Ack : ServiceEvent.Nack; stateMachine.MoveNextOrFail(answer); SerialWriteLine(Encoding.ASCII.GetBytes(((char)answer).ToString())); } else if (ev == ProgrammerEvent.ErrorCheck) { // not in ErrorChecking state -> User operation AppendOutput(line.SequenceEqual(lastCmd) ? "^--- Command matches" : "^--- Command differs", true); } else if (ev == ProgrammerEvent.PartialResult) { if (result == null) { result = new List <byte>(); } result.AddRange(line); } }