private void StopWorker()
 {
     if (workerThread != null && !stopWorker)
     {
         stopWorker = true;
         workerThread.Interrupt();
         workerThread.Join();
         stopWorker   = false;
         workerThread = null;
         CurrentCard  = null;
         AppendOutput("\n===============", true);
     }
 }
Exemple #2
0
 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);
            }
        }