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); }
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; }