// Start is called before the first frame update void Start() { serialport = this.gameObject.GetComponent <Virtual_SerialPort>(); Start_Decodage_Task(); }
private void Start() { serialport = this.gameObject.GetComponent <Virtual_SerialPort>(); }
/* Reception des octets reçus et transformation en une trame brute */ public static Communication.Communication_Message ReadTrame(Virtual_SerialPort _SerialPort) { Communication.Communication_Message received_message = new Communication.Communication_Message(); byte API_start = 0, API_LENGTH_HIGH = 0, API_LENGTH_LOW = 0, API_DUMMY, API_FRAME_TYPE = 0; short API_LENGTH = 0; short crc = 0; byte index = 0, rx_crc = 0; //reception de l'heure de la trame received_message.Heure = DateTime.Now; //Reception En-tête API byte boucle = 0; while (API_start != 0x7E) { _SerialPort.ReadRemoveInputByte(out API_start); boucle++; if (boucle > 5) { Debug.Log("API_start != 0x7E"); return(null); } } //Le start byte est recu, on demarre la lecture de la trame _SerialPort.ReadRemoveInputByte(out API_LENGTH_HIGH); _SerialPort.ReadRemoveInputByte(out API_LENGTH_LOW); API_LENGTH = API_LENGTH_HIGH; API_LENGTH <<= 8; API_LENGTH += API_LENGTH_LOW; if (API_LENGTH > Communication.COMMUNICATION_TRAME_MAX_DATA + 11) { Debug.Log("API_LENGTH > Communication.COMMUNICATION_TRAME_MAX_DATA + 11"); return(null); } //Packet Type _SerialPort.ReadRemoveInputByte(out API_FRAME_TYPE); crc += API_FRAME_TYPE; if (API_FRAME_TYPE == 0x89) { //Tx status _SerialPort.ReadRemoveInputByte(out API_DUMMY); crc += API_DUMMY; _SerialPort.ReadRemoveInputByte(out API_DUMMY); crc += API_DUMMY; if (API_DUMMY == 00) { //Mess tx succes //RxXbeeAck = OK; } //API CRC _SerialPort.ReadRemoveInputByte(out rx_crc); return(null); } boucle = 0; while (_SerialPort.Number_Byte_To_Read() < API_LENGTH - 1) { boucle++; if (boucle > 50) { Debug.Log($"_SerialPort.InputBuffer.Count < API_LENGTH - 1; boucle {_SerialPort.Number_Byte_To_Read()}/{API_LENGTH + 1}"); return(null); } Task.Delay(1); } //Tx Address _SerialPort.ReadRemoveInputByte(out API_DUMMY); crc += API_DUMMY; _SerialPort.ReadRemoveInputByte(out API_DUMMY); crc += API_DUMMY; //RSSI _SerialPort.ReadRemoveInputByte(out API_DUMMY); crc += API_DUMMY; //Option _SerialPort.ReadRemoveInputByte(out API_DUMMY); crc += API_DUMMY; //Reception datas //Instruction _SerialPort.ReadRemoveInputByte(out API_DUMMY); received_message.Trame.Instruction = (Communication.Com_Instruction)(API_DUMMY); crc += (byte)received_message.Trame.Instruction; //Slave Address _SerialPort.ReadRemoveInputByte(out API_DUMMY); received_message.Trame.Slave_Adresse = (Communication.Slave_Adresses)(API_DUMMY); crc += (byte)received_message.Trame.Slave_Adresse; //Trame length received_message.Trame.Length = (byte)(API_LENGTH - 7); if (received_message.Trame.Length > Communication.COMMUNICATION_TRAME_MAX_DATA) { Debug.Log("received_message.Trame.Length > Communication.COMMUNICATION_TRAME_MAX_DATA"); return(null); } boucle = 0; while (_SerialPort.Number_Byte_To_Read() < received_message.Trame.Length + 1) { boucle++; if (boucle > 50) { Debug.Log("SerialPort.InputBuffer.Count < received_message.Trame.Length + 1; boucle"); return(null); } Task.Delay(1); } //Reception des data for (index = 0; index < received_message.Trame.Length; index++) { _SerialPort.ReadRemoveInputByte(out received_message.Trame.Data[index]); crc += (byte)(received_message.Trame.Data[index]); } //API CRC _SerialPort.ReadRemoveInputByte(out rx_crc); //Contrôle CRC crc &= 0xFF; crc = (byte)(0xFF - crc); //Vérifie le CRC if (crc == rx_crc) { return(received_message); } else { if (index == 0) { Debug.Log($"Error Comm CRC: {crc}/RX crc: {rx_crc}; previous: {(byte)received_message.Trame.Slave_Adresse}, instruction: {received_message.Trame.Instruction}"); } else { Debug.Log($"Error Comm CRC: {crc}/RX crc: {rx_crc}; previous: {received_message.Trame.Data[index - 1]}, instruction: {received_message.Trame.Instruction}"); } return(null); } }