public BpsMng() { uartMngObj = UartMng.GetUartMngInstance(); // bpsRecvHandler = BPSRecvIdleHandler; bpsErrorHandler = BPSErrorIdleHandler; bpsSendDebugHandler = null; bpsRecvDebugHandler = null; serialDataReceivedEvent = new SerialDataReceivedEventHandler(UartDataeceivedCallback); uartMngObj.ReadCallbackAdd(serialDataReceivedEvent); serialErrorEvent = new SerialErrorReceivedEventHandler(UartErrorCallback); uartMngObj.ErrorCallbackAdd(serialErrorEvent); RecvBuffer = new List <byte>(); BpsHeaderClear(); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_HEADER; remainLength = 0; }
public bool UartOpen(string port, int baudrate) { bool ret = false; try { enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_HEADER; BpsHeaderClear(); uartMngObj.Baudrate = baudrate; ret = uartMngObj.Open(port); } catch (Exception e) { ret = false; } return(ret); }
private bool BpsParseGeneral(List <Byte> msg, ref int index) { bool ret = false; int i; for (i = index; i < msg.Count; i++) { index = i + 1; byte dataTmp = msg[i]; switch (enBPSParseStep) { case EnBPSParseStep.EN_BPS_PARSE_HEADER: if (RecvBuffer[0] == BpsUtils.BPSHeader[0] && dataTmp == BpsUtils.BPSHeader[1]) { RecvBuffer.Add(dataTmp); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_VERSION; } else { RecvBuffer[0] = dataTmp; } break; case EnBPSParseStep.EN_BPS_PARSE_VERSION: if (dataTmp <= BpsUtils.BPSVersion[0]) { RecvBuffer.Add(dataTmp); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_ADDR; } else { BpsHeaderClear(); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_HEADER; } break; case EnBPSParseStep.EN_BPS_PARSE_ADDR: RecvBuffer.Add(dataTmp); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_RMN_LEN1; break; case EnBPSParseStep.EN_BPS_PARSE_RMN_LEN1: RecvBuffer.Add(dataTmp); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_RMN_LEN2; break; case EnBPSParseStep.EN_BPS_PARSE_RMN_LEN2: RecvBuffer.Add(dataTmp); remainLength = ((RecvBuffer[RecvBuffer.Count - 2] & 0xFF) << 8) + (dataTmp & 0xFF); if (remainLength < BpsUtils.BPS_CMD_WORD_SIZE) { BpsHeaderClear(); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_HEADER; } else { enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_DATA; } break; case EnBPSParseStep.EN_BPS_PARSE_DATA: RecvBuffer.Add(dataTmp); if (0 == --remainLength) { enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_CHKSUM; } break; case EnBPSParseStep.EN_BPS_PARSE_CHKSUM: RecvBuffer.Add(dataTmp); if (IsBPSChksumOK(RecvBuffer)) { ret = true; enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_HEADER; return(ret); } BpsHeaderClear(); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_HEADER; break; default: BpsHeaderClear(); enBPSParseStep = EnBPSParseStep.EN_BPS_PARSE_HEADER; break; } } return(ret); }