void serial_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte c; while (serial.BytesToRead > 0) { bool acceptByte = false; c = (byte)serial.ReadByte(); switch (serialState) { case SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE: if (APP_MAGIC_SYMBOL == c) { serialState = SerialReceiverState.USART_RECEIVER_SOF_RX_STATE; currentMessage.Clear(); CheckSum = 0; } break; case SerialReceiverState.USART_RECEIVER_SOF_RX_STATE: if (SOF[1] == c) { serialState = SerialReceiverState.USART_RECEIVER_DATA_RX_STATE; } else { serialState = SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE; } break; case SerialReceiverState.USART_RECEIVER_DATA_RX_STATE: if (APP_MAGIC_SYMBOL == c) { serialState = SerialReceiverState.USART_RECEIVER_MAGIC_RX_STATE; } else { acceptByte = true; } break; case SerialReceiverState.USART_RECEIVER_MAGIC_RX_STATE: if (APP_MAGIC_SYMBOL == c) { serialState = SerialReceiverState.USART_RECEIVER_DATA_RX_STATE; acceptByte = true; } else if (EOF[1] == c) { serialState = SerialReceiverState.USART_RECEIVER_EOF_RX_STATE; } else { serialState = SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE; PrintMessage("TRAMA DEFECTUOSA"); } break; case SerialReceiverState.USART_RECEIVER_EOF_RX_STATE: if (CheckSum == c) { serialState = SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE; InputMessage inputMessage = new InputMessage(); inputMessage.FromBinary(currentMessage.ToArray()); if (inputMessage.Content.Args != null) OnOperationReceived(inputMessage); } else { serialState = SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE; PrintMessage("CHECKSUM INCORRECTO"); } break; default: break; } CheckSum += c; if (acceptByte) { currentMessage.Add(c); } } }
void serial_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte c; while (serial.BytesToRead > 0) { bool acceptByte = false; c = (byte)serial.ReadByte(); switch (serialState) { case SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE: if (APP_MAGIC_SYMBOL == c) { serialState = SerialReceiverState.USART_RECEIVER_SOF_RX_STATE; currentMessage.Clear(); CheckSum = 0; } break; case SerialReceiverState.USART_RECEIVER_SOF_RX_STATE: if (SOF[1] == c) { serialState = SerialReceiverState.USART_RECEIVER_DATA_RX_STATE; } else { serialState = SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE; } break; case SerialReceiverState.USART_RECEIVER_DATA_RX_STATE: if (APP_MAGIC_SYMBOL == c) { serialState = SerialReceiverState.USART_RECEIVER_MAGIC_RX_STATE; } else { acceptByte = true; } break; case SerialReceiverState.USART_RECEIVER_MAGIC_RX_STATE: if (APP_MAGIC_SYMBOL == c) { serialState = SerialReceiverState.USART_RECEIVER_DATA_RX_STATE; acceptByte = true; } else if (EOF[1] == c) { serialState = SerialReceiverState.USART_RECEIVER_EOF_RX_STATE; } else { serialState = SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE; PrintMessage("TRAMA DEFECTUOSA"); } break; case SerialReceiverState.USART_RECEIVER_EOF_RX_STATE: if (CheckSum == c) { serialState = SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE; InputMessage inputMessage = new InputMessage(); inputMessage.FromBinary(currentMessage.ToArray()); if (inputMessage.Content.Args != null) { OnOperationReceived(inputMessage); } } else { serialState = SerialReceiverState.USART_RECEIVER_IDLE_RX_STATE; PrintMessage("CHECKSUM INCORRECTO"); } break; default: break; } CheckSum += c; if (acceptByte) { currentMessage.Add(c); } } }