示例#1
0
            public override SiDriverState Receive(SiMessageQueue queue, ICommWriter writer, SiHandler siHandler)
            {
                siHandler.Notify(CommStatus.Ready);
                SiMessage message = queue.Take();

                siHandler.Notify(CommStatus.Processing);

                if (!message.Valid())
                {
                    return(DISPATCH_READY);
                }

                if (message.CommandByte() == SiMessage.SI_CARD_5_DETECTED ||
                    message.CommandByte() == SiMessage.SI_CARD_6_PLUS_DETECTED ||
                    message.CommandByte() == SiMessage.SI_CARD_8_PLUS_DETECTED)
                {
                    var bytes = new ByteFrame(message.Data());
                    if (!siHandler.OnEcardDown(bytes.Block3At(5).ToString()))
                    {
                        return(ACK_READ.Send(writer, siHandler));
                    }
                }

                switch (message.CommandByte())
                {
                case SiMessage.SI_CARD_5_DETECTED:
                    return(RETRIEVE_SICARD_5_DATA.Retrieve(queue, writer, siHandler));

                case SiMessage.SI_CARD_6_PLUS_DETECTED:
                    return(RETRIEVE_SICARD_6_DATA.Retrieve(queue, writer, siHandler));

                case SiMessage.SI_CARD_8_PLUS_DETECTED:
                    return(DispatchSicard8Plus(message, queue, writer, siHandler));

                case SiMessage.BEEP:
                    break;

                case SiMessage.SI_CARD_REMOVED:
                    GecoSiLogger.Debug("Late removal " + message);
                    break;

                default:
                    GecoSiLogger.Debug("Unexpected message " + message);
                    break;
                }
                return(DISPATCH_READY);
            }