/* * Unpacks SerialCommand object to vars_buf[var_num]. * 'var_num' specifies the buffer capacity. * On return, 'var_num' will be set to actual number of received variables. * Returns 0 on success, PARSER_ERROR_XX code on fail. */ uint8_t SBGC_cmd_set_adj_vars_unpack(SBGC_cmd_set_adj_vars_var_t vars_buf[], uint8_t &vars_num, SerialCommand &cmd) { uint8_t num = cmd.readByte(); // actual number of variables if(num <= vars_num) { vars_num = num; #ifdef SBGC_CMD_STRUCT_ALIGNED cmd.readBuf(vars_buf, sizeof(SBGC_cmd_set_adj_vars_var_t)*vars_num); #else for(uint8_t i=0; i<num; i++) { vars_buf[i].id = cmd.readByte(); vars_buf[i].val = cmd.readLong(); } #endif if(cmd.checkLimit()) return 0; else return PARSER_ERROR_WRONG_DATA_SIZE; } else { return PARSER_ERROR_BUFFER_IS_FULL; } }