} //function private void TO_RXBuffer(byte DATA) { if (this.RXptn < RX_Buffer.Length) { this.RX_Buffer[this.RXptn++] = DATA; } else { this.RX_Status = enumRX_Status.WAITING_STX_1; } }
//private bool STX_01_ctrl, STX_02_ctrl, ETX_01_ctrl, ETX_02_ctrl; public SerialPort_Control() { mySerialPort = new SerialPort(); mySerialPort.BaudRate = 250000; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; mySerialPort.ReadTimeout = 50; mySerialPort.ReadBufferSize = 200000; mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); this.RX_Buffer = new byte[CONST.BUFFER_SIZE_RX]; this.RXptn = 0; this.RX_COMMAND = new sCOMMAND(); this.RX_COMMAND.Processed = true; this.RX_INFO = new sCOMMAND(); this.RX_INFO.Processed = true; this.RX_Status = enumRX_Status.WAITING_STX_1; this.m_PortOpened = false; }
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; byte[] indata = Encoding.ASCII.GetBytes(sp.ReadExisting()); for (int ii = 0; ii < indata.Length; ii++) { switch (this.RX_Status) { //STX_1 case enumRX_Status.WAITING_STX_1: if (indata[ii] == CONST.STX_1) { this.RX_Status = enumRX_Status.WAITING_STX_2; } break; //STX_2 case enumRX_Status.WAITING_STX_2: if (indata[ii] == CONST.STX_2) { this.RX_COMMAND.Processed = true; this.RXptn = 0; this.RX_Buffer = new byte[CONST.BUFFER_SIZE_RX]; TO_RXBuffer(CONST.STX_1); TO_RXBuffer(indata[ii]); this.RX_Status = enumRX_Status.WAITING_PARAM; } else if (indata[ii] == CONST.STX_2) { this.RX_Status = enumRX_Status.WAITING_STX_2; } else { this.RX_Status = enumRX_Status.WAITING_STX_1; } break; //PARAM case enumRX_Status.WAITING_PARAM: if (indata[ii] == CONST.ETX_1) { this.RX_Status = enumRX_Status.WAITING_ETX_2; } TO_RXBuffer(indata[ii]); break; //ETX_2 case enumRX_Status.WAITING_ETX_2: if (indata[ii] == CONST.ETX_2) { TO_RXBuffer(indata[ii]); if (this.CheckRXBufferData()) { if (this.IsInfoPacket()) { this.RXBuffer_to_RX_INFO(); } else { this.RXBuffer_to_RXCommand(); } } else { MessageBox.Show("RXBuffer DATA ERROR!!!"); } this.RX_Status = enumRX_Status.WAITING_STX_1; } else { TO_RXBuffer(indata[ii]); this.RX_Status = enumRX_Status.WAITING_PARAM; } break; } } // for } //function
public void Reset_RX_STATUS() { this.RX_Status = enumRX_Status.WAITING_STX_1; }