Esempio n. 1
0
        private bool parse(uint8_t temp)
        {
            switch (gsof_state)
            {
            case gsof_msg_parser_t.STARTTX:
                if (temp == GSOF_STX)
                {
                    gsof_msg.starttx      = temp;
                    gsof_state            = gsof_msg_parser_t.STATUS;
                    gsof_msg.read         = 0;
                    gsof_msg.checksumcalc = 0;
                }

                break;

            case gsof_msg_parser_t.STATUS:
                gsof_msg.status        = temp;
                gsof_state             = gsof_msg_parser_t.PACKETTYPE;
                gsof_msg.checksumcalc += temp;
                break;

            case gsof_msg_parser_t.PACKETTYPE:
                gsof_msg.packettype    = temp;
                gsof_state             = gsof_msg_parser_t.LENGTH;
                gsof_msg.checksumcalc += temp;
                break;

            case gsof_msg_parser_t.LENGTH:
                gsof_msg.length        = temp;
                gsof_state             = gsof_msg_parser_t.DATA;
                gsof_msg.checksumcalc += temp;
                break;

            case gsof_msg_parser_t.DATA:
                gsof_msg.data[gsof_msg.read] = temp;
                gsof_msg.read++;
                gsof_msg.checksumcalc += temp;
                if (gsof_msg.read >= gsof_msg.length)
                {
                    gsof_state = gsof_msg_parser_t.CHECKSUM;
                }
                break;

            case gsof_msg_parser_t.CHECKSUM:
                gsof_msg.checksum = temp;
                gsof_state        = gsof_msg_parser_t.ENDTX;
                if (gsof_msg.checksum == gsof_msg.checksumcalc)
                {
                    return(process_message());
                }
                break;

            case gsof_msg_parser_t.ENDTX:
                gsof_msg.endtx = temp;
                gsof_state     = gsof_msg_parser_t.STARTTX;
                break;
            }

            return(false);
        }
Esempio n. 2
0
        private bool parse(uint8_t temp)
        {
            switch (gsof_state)
            {
                case gsof_msg_parser_t.STARTTX:
                    if (temp == GSOF_STX)
                    {
                        gsof_msg.starttx = temp;
                        gsof_state = gsof_msg_parser_t.STATUS;
                        gsof_msg.read = 0;
                        gsof_msg.checksumcalc = 0;
                    }

                    break;
                case gsof_msg_parser_t.STATUS:
                    gsof_msg.status = temp;
                    gsof_state = gsof_msg_parser_t.PACKETTYPE;
                    gsof_msg.checksumcalc += temp;
                    break;
                case gsof_msg_parser_t.PACKETTYPE:
                    gsof_msg.packettype = temp;
                    gsof_state = gsof_msg_parser_t.LENGTH;
                    gsof_msg.checksumcalc += temp;
                    break;
                case gsof_msg_parser_t.LENGTH:
                    gsof_msg.length = temp;
                    gsof_state = gsof_msg_parser_t.DATA;
                    gsof_msg.checksumcalc += temp;
                    break;
                case gsof_msg_parser_t.DATA:
                    gsof_msg.data[gsof_msg.read] = temp;
                    gsof_msg.read++;
                    gsof_msg.checksumcalc += temp;
                    if (gsof_msg.read >= gsof_msg.length)
                    {
                        gsof_state = gsof_msg_parser_t.CHECKSUM;
                    }
                    break;
                case gsof_msg_parser_t.CHECKSUM:
                    gsof_msg.checksum = temp;
                    gsof_state = gsof_msg_parser_t.ENDTX;
                    if (gsof_msg.checksum == gsof_msg.checksumcalc)
                    {
                        return process_message();
                    }
                    break;
                case gsof_msg_parser_t.ENDTX:
                    gsof_msg.endtx = temp;
                    gsof_state = gsof_msg_parser_t.STARTTX;
                    break;
            }

            return false;
        }