protected SiDriverState RetrieveDataMessages(SiMessageQueue queue, ICommWriter writer, SiHandler siHandler, SiMessage[] readoutCommands, int nbPunchesIndex, String timeoutMessage) { try { GecoSiLogger.StateChanged(GetType().Name); SiMessage readoutCommand = readoutCommands[0]; writer.Write(readoutCommand); SiMessage firstDataBlock = PollAnswer(queue, readoutCommand.CommandByte()); int nbDataBlocks = (nbPunchesIndex == -1) ? readoutCommands.Length : ExtractNumberOfDataBlocks(firstDataBlock, nbPunchesIndex); var dataMessages = new SiMessage[nbDataBlocks]; dataMessages[0] = firstDataBlock; for (int i = 1; i < nbDataBlocks; i++) { readoutCommand = readoutCommands[i]; writer.Write(readoutCommand); dataMessages[i] = PollAnswer(queue, readoutCommand.CommandByte()); } siHandler.Notify(CreateDataFrame(dataMessages)); return(ACK_READ.Send(writer, siHandler)); } catch (TimeoutException e) { return(ErrorFallback(siHandler, timeoutMessage)); } catch (InvalidMessage e) { return(ErrorFallback(siHandler, "Invalid message: " + e.ReceivedMessage())); } }
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); }
private SiDriverState StartupBootstrap() { try { siHandler.Notify(CommStatus.Starting); siPort.SetupHighSpeed(); return(Startup()); } catch (TimeoutException e) { try { siPort.SetupLowSpeed(); return(Startup()); } catch (TimeoutException e1) { return(SiDriverState.STARTUP_TIMEOUT); } } }
public override SiDriverState Send(ICommWriter writer, SiHandler siHandler) { writer.Write(SiMessage.BEEP_TWICE); siHandler.Notify(CommStatus.On); return(DISPATCH_READY); }
protected SiDriverState ErrorFallback(SiHandler siHandler, String errorMessage) { GecoSiLogger.Error(errorMessage); siHandler.Notify(CommStatus.ProcessingError); return(DISPATCH_READY); }