public cFlowTEX() { TheSerialPort = new SerialPort(); RequestMState = eRequestMState.eFLOW; bActive = false; RequestStatus = eRequestStatus.eSTANDBY; SerialMode = eSerialMode.eCLOSED; flow = 0; temperature = 0; }
void poll() { int data = -1; try { if (TheSerialPort.IsOpen) { do { try { if (TheSerialPort.BytesToRead > 0) { data = TheSerialPort.ReadByte(); } else { data = -1; } } catch { data = -1; } finally { TexNET.messagePoll(data); TexNET.process(); byte[] bufferTX = TexNET.getDataToSend(); if ((bufferTX != null) && (bufferTX.Length > 0)) { TheSerialPort.Write(bufferTX, 0, bufferTX.Length); TexNET.dataSent(); } } }while((data >= 0) && (TheSerialPort.IsOpen)); } } catch { } if ((bError) && (RequestStatus == eRequestStatus.eNEW_REQUEST)) { RequestStatus = eRequestStatus.eFAIL; } if (TheSerialPort.IsOpen) { switch (RequestMState) { default: case eRequestMState.eFLOW: { TexNET.sendRequest(cMTDOpcodes.OPC_READ_FLOW, null); RequestMState = eRequestMState.eFLOW_ANSWER; break; } case eRequestMState.eFLOW_ANSWER: { if (!TexNET.isWaitingAnswer()) { if (TexNET.getAnswer(out byte opcode, out byte[] msg, out int length)) { if ((opcode == cMTDOpcodes.OPC_READ_FLOW) && (length >= 8)) { flow = BitConverter.ToSingle(msg, 0); temperature = BitConverter.ToSingle(msg, 4); bError = false; } } else { if (SerialMode != eSerialMode.eCLOSED) { portOpenRetry = 3; SerialMode = eSerialMode.eSETUP; bError = true; } } if (RequestStatus == eRequestStatus.eNEW_REQUEST) { RequestMState = eRequestMState.eUSER_REQUEST; } else { RequestMState = eRequestMState.eFLOW; } } break; } case eRequestMState.eUSER_REQUEST: { TexNET.sendRequest(NewRequest.Opcode, NewRequest.Msg); RequestStatus = eRequestStatus.eWAITTING; RequestMState = eRequestMState.eUSER_ANSWER; break; } case eRequestMState.eUSER_ANSWER: { if (!TexNET.isWaitingAnswer()) { if (TexNET.getAnswer(out byte opcode, out byte[] msg, out int length)) { if (opcode == NewRequest.Opcode) { NewRequest.Opcode = opcode; NewRequest.Msg = msg; NewRequest.Length = (byte)length; RequestStatus = eRequestStatus.eSUCCESS; bError = false; } else { RequestStatus = eRequestStatus.eFAIL; if (SerialMode != eSerialMode.eCLOSED) { portOpenRetry = 3; SerialMode = eSerialMode.eSETUP; bError = true; } } } else { RequestStatus = eRequestStatus.eFAIL; if (SerialMode != eSerialMode.eCLOSED) { portOpenRetry = 3; SerialMode = eSerialMode.eSETUP; bError = true; } } RequestMState = eRequestMState.eFLOW; } break; } } } }