Esempio n. 1
0
        //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);
        }
Esempio n. 2
0
        //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);
            }
        }