public void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = (byte)(c << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += (byte)(c << 0);
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = (byte)(c << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength = (byte)(c << 0);
                if (msgDecodedPayloadLength == 0)
                {
                    rcvState = StateReception.CheckSum;
                }
                else if (msgDecodedPayloadLength >= 1024)
                {
                    rcvState = StateReception.Waiting;
                }
                else
                {
                    rcvState               = StateReception.Payload;
                    msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                    msgDecodedPayloadIndex = 0;
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex] = c;
                msgDecodedPayloadIndex++;
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                if (calculatedChecksum == c)
                {
                    textBoxReception.Text = textBoxReception.Text + "Success, on a un message valide" + "\n";
                }
                else
                {
                    textBoxReception.Text = textBoxReception.Text + "Sorry ! Try again !" + "\n";
                }
                rcvState = StateReception.Waiting;
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
Example #2
0
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = (int)(c << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += (int)(c << 0);
                rcvState            = StateReception.PayLoadLengthMSB;
                break;

            case StateReception.PayLoadLengthMSB:
                msgDecodedPayloadLength = (int)(c << 8);
                rcvState = StateReception.PayLoadLengthLSB;
                break;

            case StateReception.PayLoadLengthLSB:
                msgDecodedPayloadLength += (int)(c << 0);
                if (msgDecodedPayloadLength == 0)
                {
                    rcvState = StateReception.Checksum;
                }
                else if (msgDecodedPayloadLength > 512)
                {
                    rcvState = StateReception.Waiting;
                }
                else
                {
                    rcvState = StateReception.Payload;
                    msgDecodedPayloadIndex = 0;
                    msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex++] = c;
                if (msgDecodedPayloadIndex == msgDecodedPayloadLength)
                {
                    rcvState = StateReception.Checksum;
                }
                break;

            case StateReception.Checksum:

                byte receivedChecksum   = c;
                byte calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                if (calculatedChecksum == receivedChecksum)
                {
                    iscorrectChecksum = true;
                    ProcessDecodedMessage(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                }
                else
                {
                    iscorrectChecksum = false;
                }
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
Example #3
0
        private void DecodeMessage(byte c)
        {
            Console.Write("0x" + c.ToString("X2") + " ");
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = (UInt16)(c << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += c;
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = (UInt16)(c << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += c;
                if (msgDecodedPayloadLength == 0)
                {
                    rcvState = StateReception.CheckSum;
                }
                else if (msgDecodedPayloadLength < 1024)
                {
                    msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                    msgDecodedPayloadIndex = 0;
                    rcvState = StateReception.Payload;
                }
                else
                {
                    rcvState = StateReception.Waiting;
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex++] = c;
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                msgDecodedChecksum    = c;
                msgCalculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                //Console.WriteLine("CHECKSUM : " + msgCalculatedChecksum.ToString("X2"));
                if (msgDecodedChecksum == msgCalculatedChecksum)
                {
                    robot.messageQueue.Enqueue(new Message(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload));
                    isChecksumOk = 1;
                    MessageProcessor(msgDecodedFunction, msgDecodedPayload, 24);     //msgDecodedPayloadLength
                }
                else
                {
                    //Console.WriteLine("Wrong Message Checksum");
                    isChecksumOk = 0;
                }
                rcvState = StateReception.Waiting;
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:

                if (c == 0xFE)
                {
                    rcvState = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:

                msgDecodedFunction = (UInt16)(c << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:

                msgDecodedFunction += c;
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:

                msgDecodedPayloadLength = (UInt16)(c << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:

                msgDecodedPayloadLength += c;
                if (msgDecodedPayloadLength == 0)
                {
                    rcvState = StateReception.CheckSum;
                }
                else if (msgDecodedPayloadLength < 1024)
                {
                    rcvState               = StateReception.Payload;
                    msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                    msgDecodedPayloadIndex = 0;
                }
                else
                {
                    rcvState = StateReception.Waiting;
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex++] = c;
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:

                byte calculatedChecksum = CalculateChecksum((ushort)msgDecodedFunction, (ushort)msgDecodedPayloadLength, msgDecodedPayload);
                byte receivedChecksum   = c;

                if (calculatedChecksum == receivedChecksum)
                {
                    // Success , on a un message valide
                    robot.MessageQueue.Enqueue(new Message(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload));
                }
                else
                {
                    Console.WriteLine("Erreur de décodage de message");
                }
                rcvState = StateReception.Waiting;

                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState           = StateReception.FunctionMSB;
                    msgDecodedFunction = 0;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = c << 8;
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += c << 0;
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = c << 8;
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += c << 0;
                if (msgDecodedPayloadLength == 0)
                {
                    rcvState = StateReception.Waiting;
                }
                else
                {
                    rcvState               = StateReception.Payload;
                    msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                    msgDecodedPayloadIndex = 0;
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex++] = c;
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                byte receivedChecksum   = c;
                if (calculatedChecksum == receivedChecksum)
                {
                    //textBoxReception.Text += "Message valide" + "\n";
                    Dispatcher.Invoke(delegate { ProcessDecodedMessage(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload); });
                }
                else
                {
                    Dispatcher.Invoke(delegate { textBoxReception.Text += "Message invalide \n"; });
                }
                rcvState = StateReception.Waiting;
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
Example #6
0
        private void DecodeMessage(byte c)
        {
            rcvBefore = rcvState;
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    // Message begin
                    rcvState = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = (ushort)(c << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += (ushort)(c << 0);
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = (ushort)(c << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += (ushort)(c << 0);
                if (msgDecodedPayloadLength > 0)
                {
                    msgDecodedPayload = new byte[msgDecodedPayloadLength];
                    rcvState          = StateReception.Payload;
                }
                else
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex] = c;
                msgDecodedPayloadIndex++;
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte calculatedChecksum, receivedChecksum = c;
                calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                if (calculatedChecksum == receivedChecksum)
                {
                    // Success, on a un message
                    Console.WriteLine("Message is Correct");
                    msgIsWrong = false;
                }
                else
                {
                    Console.WriteLine("Message has an error");
                    msgIsWrong = true;
                }
                rcvState                = StateReception.Waiting;
                msgDecodedFunction      = 0;
                msgDecodedPayloadLength = 0;
                msgDecodedPayloadIndex  = 0;
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
Example #7
0
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState = StateReception.FunctionMSB;
                }
                msgDecodedFunction      = 0;
                msgDecodedPayloadIndex  = 0;
                msgDecodedPayloadLength = 0;
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = (byte)(c << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += (byte)(c << 0);
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = (byte)(c << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += (byte)(c << 0);
                if (msgDecodedPayloadLength != 0)
                {
                    msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                    msgDecodedPayloadIndex = 0;
                    rcvState = StateReception.Payload;
                }
                else
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex] = c;
                msgDecodedPayloadIndex++;
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte calculatedChecksum, receivedChecksum;
                receivedChecksum   = c;
                calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                if (calculatedChecksum == receivedChecksum)
                {
                    CheckBoxMessage.IsChecked  = true;   //Success, on a un message valide
                    CheckBoxMessage.Background = Brushes.Green;
                    CheckBoxMessage.Foreground = Brushes.Green;
                    CheckBoxMessage.Content    = " Message Correct";
                    ProcessDecodedMessage(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                }
                else
                {
                    CheckBoxMessage.IsChecked  = false;
                    CheckBoxMessage.Background = Brushes.Red;
                    CheckBoxMessage.Foreground = Brushes.Red;
                    CheckBoxMessage.Content    = " /!\\ Message Corrompu";
                    TextBoxReception.Text     += "\n\r/!\\ Attention, message corrompu. fonctions: " + "0x" + msgDecodedFunction.ToString("X4");
                }
                rcvState = StateReception.Waiting;
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
Example #8
0
        public void DecodeMessage(byte b)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (b == ConstsProtocol.START_OF_FRAME)
                {
                    rcvState = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = (ushort)(b << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += (ushort)(b << 0);
                if (IsFunctionExist(msgDecodedFunction))
                {
                    rcvState = StateReception.PayloadLengthMSB;
                }
                else
                {
                    OnUnknowFunction(msgDecodedFunction);
                }
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLenght = (ushort)(b << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLenght += (ushort)(b << 0);
                if (!IsPayloadExist(msgDecodedPayloadLenght))
                {
                    OnNoPayload();
                }
                if (!IsLessThanMaximalLenghtSize(msgDecodedFunction))
                {
                    OnOverLengthSize();
                }
                if (!IsPayloadLengthCorrect(msgDecodedFunction, msgDecodedPayloadLenght))
                {
                    OnWrongPayloadLenght();
                }
                else
                {
                    rcvState = StateReception.Payload;
                    msg_decoded_payload_index = 0;
                    msgDecodedPayload         = new byte[msgDecodedPayloadLenght];
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msg_decoded_payload_index++] = b;
                if (msg_decoded_payload_index == msgDecodedPayloadLenght)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte receivedChecksum = b;
                if (receivedChecksum == CalculateChecksum(msgDecodedFunction,
                                                          msgDecodedPayloadLenght, msgDecodedPayload))
                {
                    OnMessageDecoded(msgDecodedFunction, msgDecodedPayloadLenght, msgDecodedPayload);
                }
                else
                {
                    OnMessageDecodedError(msgDecodedFunction, msgDecodedPayloadLenght, msgDecodedPayload);
                }
                rcvState = StateReception.Waiting;
                break;
            }
        }
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState = StateReception.FunctionMSB;
                    msgDecodedPayloadLength = 0;
                    msgDecodedFunction      = 0;
                    msgDecodedPayloadIndex  = 0;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = (c << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += c;
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = (c << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += c;
                if (msgDecodedPayloadLength > 1500)
                {
                    rcvState = StateReception.Waiting;
                }
                rcvState          = StateReception.Payload;
                msgDecodedPayload = new byte[msgDecodedPayloadLength];
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex] = c;
                msgDecodedPayloadIndex++;
                if (msgDecodedPayloadIndex == msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                receivedChecksum   = c;
                calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                if (calculatedChecksum == receivedChecksum)
                {
                    // TextBoxReception.Text += "youpi\n";
                    ProcessDecodedMessage(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                }
                else
                {
                    TextBoxReception.Text += "snif\n";
                    nb_snif++;
                    TextTest.Text          = nb_snif.ToString();
                    TextBoxReception.Text += msgDecodedFunction.ToString() + " " + msgDecodedPayloadLength.ToString() + " " + msgDecodedPayload + "\n";
                }
                rcvState = StateReception.Waiting;
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
Example #10
0
        private void decodeMsg(byte c)
        {
            switch (rcv_state)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcv_state = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:
                msg_decoded_func  += c;
                msg_decoded_func <<= 8;
                rcv_state          = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msg_decoded_func += c;
                rcv_state         = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msg_decoded_payload_length  += c;
                msg_decoded_payload_length <<= 8;
                rcv_state = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msg_decoded_payload_length += c;
                msg_decoded_payload         = new byte[msg_decoded_payload_length];
                if (msg_decoded_payload_length == 0)
                {
                    rcv_state = StateReception.CheckSum;
                }
                else
                {
                    rcv_state = StateReception.Payload;
                }
                break;

            case StateReception.Payload:
                msg_decoded_payload[msg_decoded_payload_index++] = c;
                if (msg_decoded_payload_index == msg_decoded_payload_length)
                {
                    rcv_state = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:     // Contrôle d'erreur à rajouter
                if (calcChecksum(msg_decoded_func, msg_decoded_payload_length, msg_decoded_payload) == c)
                {
                    processDecodedMessage(msg_decoded_func, msg_decoded_payload_length, msg_decoded_payload);
                }

                msg_decoded_func           = 0;
                msg_decoded_payload_length = 0;
                msg_decoded_payload        = new byte[0];
                msg_decoded_payload_index  = 0;

                rcv_state = StateReception.Waiting;
                break;

            default:
                rcv_state = StateReception.Waiting;
                break;
            }
        }
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = c << 8;
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += c << 0;
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = c << 8;
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += c << 0;
                msgDecodedPayload        = new byte[msgDecodedPayloadLength];
                msgDecodedPayloadIndex   = 0;
                rcvState = StateReception.Payload;
                break;

            case StateReception.Payload:
                if (msgDecodedPayloadIndex < msgDecodedPayloadLength)
                {
                    msgDecodedPayload[msgDecodedPayloadIndex] = c;
                    msgDecodedPayloadIndex++;
                }
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte receivedChecksum   = c;
                byte calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                if (calculatedChecksum == receivedChecksum)
                {
                    ProcessDecodedMessage(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                }
                else
                {
                    robot.flagChecksum = true;
                }
                rcvState = StateReception.Waiting;
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
Example #12
0
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState = StateReception.FunctionMSB;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = (Int16)(c << 8);
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += (Int16)(c << 0);
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = (Int16)(c << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += (Int16)(c << 0);
                if (msgDecodedPayloadLength > 0)
                {
                    if (msgDecodedPayloadLength < 1024)
                    {
                        msgDecodedPayloadIndex = 0;
                        msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                        rcvState = StateReception.Payload;
                    }
                    else
                    {
                        rcvState = StateReception.Waiting;
                    }
                }
                else
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex++] = c;
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                byte receivedChecksum   = c;
                if (calculatedChecksum == receivedChecksum)
                {
                    //Lance l'event de fin de decodage
                    OnMessageDecoded(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                }
                else
                {
                    OnMessageDecodedError(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                }
                rcvState = StateReception.Waiting;
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
        //DecodeMessage input event
        public void DecodeMessage(object sender, DataReceivedArgs e)
        {
            foreach (byte c in e.Data)
            {
                if (rcvState == StateReception.Waiting)
                {
                    messageAvailable = false;
                }

                switch (rcvState)
                {
                case StateReception.Waiting:
                    if (c == 0xFE)
                    {
                        rcvState = StateReception.FunctionMSB;
                    }
                    break;

                case StateReception.FunctionMSB:
                    msgDecodedFunction = (ushort)(c << 8);
                    rcvState           = StateReception.FunctionLSB;
                    break;

                case StateReception.FunctionLSB:
                    msgDecodedFunction += (ushort)(c << 0);
                    rcvState            = StateReception.PayloadLengthMSB;
                    break;

                case StateReception.PayloadLengthMSB:
                    msgDecodedPayloadLength = (ushort)(c << 8);
                    rcvState = StateReception.PayloadLengthLSB;
                    break;

                case StateReception.PayloadLengthLSB:
                    msgDecodedPayloadLength += (ushort)(c << 0);

                    if (msgDecodedPayloadLength > 0)
                    {
                        msgDecodedPayloadIndex = 0;
                        msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                        rcvState = StateReception.Payload;
                    }
                    else
                    {
                        rcvState = StateReception.CheckSum;     //if no payload, skip to CheckSum state
                    }
                    break;

                case StateReception.Payload:

                    if (msgDecodedPayloadIndex < msgDecodedPayloadLength)
                    {
                        msgDecodedPayload[msgDecodedPayloadIndex] = c;
                        msgDecodedPayloadIndex++;
                        if (msgDecodedPayloadIndex == msgDecodedPayloadLength)
                        {
                            rcvState = StateReception.CheckSum;
                        }
                    }

                    break;

                case StateReception.CheckSum:
                    receivedCheckSum   = c;
                    calculatedCheckSum = mesEncoder.CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                    messageAvailable   = true;
                    if (calculatedCheckSum == receivedCheckSum)
                    {
                        //Console.WriteLine("checksum ok received: " + receivedCheckSum.ToString("X2") +
                        //                  " calculated: " + calculatedCheckSum.ToString("X2"));
                        CheckSumErrorOccured = false;
                    }
                    else
                    {
                        // Console.WriteLine("checksum error received: " + receivedCheckSum.ToString("X2") +
                        //                   " calculated: " + calculatedCheckSum.ToString("X2"));
                        CheckSumErrorOccured = true;
                    }

                    OnDataDecoded(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload, receivedCheckSum, CheckSumErrorOccured);

                    rcvState = StateReception.Waiting;

                    break;

                default:
                    rcvState = StateReception.Waiting;
                    break;
                }
            }
        }
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState           = StateReception.FunctionMSB;
                    msgDecodedFunction = 0;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = c << 8;
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += c << 0;
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = c << 8;
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += c << 0;
                if (msgDecodedPayloadLength == 0)
                {
                    rcvState = StateReception.CheckSum;
                }
                else if (msgDecodedPayloadLength >= 1024)
                {
                    rcvState = StateReception.Waiting;
                }
                else
                {
                    rcvState               = StateReception.Payload;
                    msgDecodedPayload      = new byte[msgDecodedPayloadLength];
                    msgDecodedPayloadIndex = 0;
                }
                break;

            case StateReception.Payload:
                msgDecodedPayload[msgDecodedPayloadIndex++] = c;
                if (msgDecodedPayloadIndex >= msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                byte receivedChecksum   = c;
                if (calculatedChecksum == receivedChecksum)
                {
                    //Success, on a un message valide
                    textBoxRéception.Text += "Pas d'erreur";
                }
                else
                {
                    textBoxRéception.Text += "Erreur les amis :')" + "\n";
                }
                rcvState = StateReception.Waiting;

                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
Example #15
0
        private void DecodeMessage(byte c)
        {
            Message DecMsg;

            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState   = StateReception.FunctionMSB;
                    isValidSOF = true;
                }
                else
                {
                    isValidSOF      = false;
                    lastInvalidChar = c;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = c * 0x100;
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += c;
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = c * 0x100;
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += c;
                rcvState = StateReception.Payload;
                break;

            case StateReception.Payload:
                if (msgDecodedPayloadIndex < msgDecodedPayloadLength - 1 && msgDecodedPayloadLength < 256)
                {
                    msgDecodedPayload[msgDecodedPayloadIndex++] = c;
                }
                else
                {
                    msgDecodedPayload[msgDecodedPayloadIndex] = c;    //caca
                    rcvState = StateReception.CheckSum;
                    msgDecodedPayloadIndex = 0;
                }
                break;

            case StateReception.CheckSum:
                receivedChecksum = c;
                if (msgDecodedPayloadLength < 256)
                {
                    calculatedChecksum = CalculateCheckSum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                }
                if (calculatedChecksum == receivedChecksum)
                {
                    isValidChecksum = true;    // Success ,  on a un message  valide
                }
                else
                {
                    isValidChecksum = false;
                }
                decodeFinishedFlag = true;
                rcvState           = StateReception.Waiting;

                DecMsg.msgDecodedFunction      = msgDecodedFunction;
                DecMsg.msgDecodedPayloadLength = msgDecodedPayloadLength;
                DecMsg.msgDecodedPayload       = msgDecodedPayload;
                DecMsg.isValidChecksum         = isValidChecksum;

                Messages.Enqueue(DecMsg);
                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }
        private void DecodeMessage(byte c)
        {
            switch (rcvState)
            {
            case StateReception.Waiting:
                if (c == 0xFE)
                {
                    rcvState                = StateReception.FunctionMSB;
                    msgDecodedFunction      = 0;
                    msgDecodedPayloadLength = 0;
                    //msgDecodedPayload;
                    msgDecodedPayloadIndex = 0;
                }
                break;

            case StateReception.FunctionMSB:
                msgDecodedFunction = c;
                msgDecodedFunction = msgDecodedFunction << 8;
                rcvState           = StateReception.FunctionLSB;
                break;

            case StateReception.FunctionLSB:
                msgDecodedFunction += c;
                rcvState            = StateReception.PayloadLengthMSB;
                break;

            case StateReception.PayloadLengthMSB:
                msgDecodedPayloadLength = c;
                msgDecodedPayloadLength = (msgDecodedPayloadLength << 8);
                rcvState = StateReception.PayloadLengthLSB;
                break;

            case StateReception.PayloadLengthLSB:
                msgDecodedPayloadLength += c;
                if (msgDecodedPayloadLength == 0)
                {
                    rcvState = StateReception.Waiting;
                }
                else
                {
                    rcvState = StateReception.Payload;
                }
                msgDecodedPayload = new byte[msgDecodedPayloadLength];
                break;

            case StateReception.Payload:
                msgDecodedPayload [msgDecodedPayloadIndex] = (byte)c;
                msgDecodedPayloadIndex++;

                if (msgDecodedPayloadIndex == msgDecodedPayloadLength)
                {
                    rcvState = StateReception.CheckSum;
                }
                break;

            case StateReception.CheckSum:
                byte calculatedChecksum = CalculateChecksum(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                byte receivedChecksum   = c;
                if (calculatedChecksum == receivedChecksum)
                {
                    //textBoxReception.Text += "ouiiii!!!" + "\n";
                    ProcessDecodeMessage(msgDecodedFunction, msgDecodedPayloadLength, msgDecodedPayload);
                    rcvState = StateReception.Waiting;
                }
                else
                {
                    textBoxReception.Text += "nooooon!!!!" + "\n";
                }

                break;

            default:
                rcvState = StateReception.Waiting;
                break;
            }
        }