//Done public static TransmittedData ReceiveData(SerialPort serialPort) { TransmittedData recievedData = new TransmittedData(0, 0, new byte[5000000]); HeaderFormat header; BodyFormat body; while (true) { Thread.Sleep(10); try { header = ReceiveHeader(serialPort); } catch (Exception) { serialPort.DiscardInBuffer(); Debug.WriteLine("Wrong format Header"); continue; } if (!HeaderFormat.CheckHeaderCrc(header)) { serialPort.DiscardInBuffer(); Debug.WriteLine("Wrong CRC Header"); continue; } if (header.PacketNum + 1 == TransmittedData.packetCounter) { serialPort.DiscardInBuffer(); Debug.WriteLine("Packet Number is invalid"); Send.SendACK(serialPort, TransmittedData.packetCounter); } Send.SendACK(serialPort, TransmittedData.packetCounter + 1); if (header.Length == 0) { recievedData.MessageCode = header.MessageCode; recievedData.Length = header.Length; return(recievedData); } break; } while (true) { HeaderFormat recievedHeader; try { body = ReceiveFullBody(serialPort, header.Length); recievedHeader = new HeaderFormat(headerByteArrayCrutch); } catch (Exception) { serialPort.DiscardInBuffer(); Debug.WriteLine("Wrong format Header"); continue; } if (!BodyFormat.CheckBodyCrc(body.Data, body.Crc)) { serialPort.DiscardInBuffer(); Debug.WriteLine("When receiving Full Data package, Header CRC is invalid"); continue; } if (recievedHeader.PacketNum + 1 == TransmittedData.packetCounter) { serialPort.DiscardInBuffer(); Debug.WriteLine("Packet Number is invalid"); Send.SendACK(serialPort, TransmittedData.packetCounter); } if (recievedHeader.Length == 0 || !BodyFormat.CheckBodyCrc(body.Data, body.Crc)) { serialPort.DiscardInBuffer(); Debug.WriteLine("CRC of Full Body is invalid"); continue; } Send.SendACK(serialPort, TransmittedData.packetCounter + 1); recievedData.MessageCode = recievedHeader.MessageCode; recievedData.Length = recievedHeader.Length; recievedData.Data = body.Data; break; } TransmittedData.packetCounter++; return(recievedData); }
//dOnE public static bool SendData(SerialPort serialPort, int transmissionCode, int length, byte[] body, int timeout = 1000) { HeaderFormat header; serialPort.WriteTimeout = timeout; while (true) { //bruh Thread.Sleep(10); //bruh SendHeader(serialPort, transmissionCode, length, TransmittedData.packetCounter, timeout); try { header = Receive.ReceiveHeader(serialPort); } catch (Exception) { serialPort.DiscardInBuffer(); Debug.WriteLine("Error occured, retrying in sendinng data Header"); continue; } if (!(HeaderFormat.CheckHeaderCrc(header))) { serialPort.DiscardInBuffer(); Debug.WriteLine("Header CRC is invalid"); continue; } if (header.PacketNum + 1 == TransmittedData.packetCounter) { serialPort.DiscardInBuffer(); Debug.WriteLine("Packet Number is invalid"); continue; } break; } TransmittedData.packetCounter++; if (length == 0) { return(true); } while (true) { SendFullBody(serialPort, HeaderFormat.HeaderByteFormat(transmissionCode, length, TransmittedData.packetCounter), body); try { header = Receive.ReceiveHeader(serialPort); } catch (Exception) { serialPort.DiscardInBuffer(); Debug.WriteLine("Error occured, retrying in sendinng Full Data"); continue; } if (!(HeaderFormat.CheckHeaderCrc(header))) { serialPort.DiscardInBuffer(); Debug.WriteLine("When receiving Full Data package, Header CRC is invalid"); continue; } if (header.PacketNum + 1 == TransmittedData.packetCounter) { serialPort.DiscardInBuffer(); Debug.WriteLine("Packet Number is invalid"); continue; } TransmittedData.packetCounter++; return(true); } }