diff --git a/src/hfp.c b/src/hfp.c index d5f64e463..045a978e7 100644 --- a/src/hfp.c +++ b/src/hfp.c @@ -536,8 +536,10 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){ break; case HFP_CMD_AVAILABLE_CODECS: // printf("Received codec %s\n", context->line_buffer); - context->remote_codecs[context->remote_codecs_nr] = (uint16_t)atoi((char*)context->line_buffer); - context->remote_codecs_nr++; + // context->remote_codecs[context->remote_codecs_nr] = (uint16_t)atoi((char*)context->line_buffer); + context->remote_codecs[context->parser_item_index] = (uint16_t)atoi((char*)context->line_buffer); + context->parser_item_index++; + context->remote_codecs_nr = context->parser_item_index; break; case HFP_CMD_INDICATOR_STATUS: // printf("Indicator %d with status: %s\n", context->parser_item_index+1, context->line_buffer); @@ -560,9 +562,9 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){ context->remote_call_services_nr++; break; case HFP_CMD_GENERIC_STATUS_INDICATOR: - - context->generic_status_indicators[context->generic_status_indicators_nr].uuid = (uint16_t)atoi((char*)context->line_buffer); - context->generic_status_indicators_nr++; + context->generic_status_indicators[context->parser_item_index].uuid = (uint16_t)atoi((char*)context->line_buffer); + context->parser_item_index++; + context->generic_status_indicators_nr = context->parser_item_index; break; case HFP_CMD_GENERIC_STATUS_INDICATOR_STATE: // HF parses inital AG gen. ind. state @@ -628,8 +630,8 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){ context->line_buffer[context->line_size] = 0; context->line_size = 0; //printf("Indicator %d: %s (", context->ag_indicators_nr+1, context->line_buffer); - strcpy((char *)context->ag_indicators[context->ag_indicators_nr].name, (char *)context->line_buffer); - context->ag_indicators[context->ag_indicators_nr].index = context->ag_indicators_nr+1; + strcpy((char *)context->ag_indicators[context->parser_item_index].name, (char *)context->line_buffer); + context->ag_indicators[context->parser_item_index].index = context->parser_item_index+1; break; } if (byte == '('){ // parse indicator range @@ -643,7 +645,7 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){ context->parser_state = HFP_PARSER_CMD_INDICATOR_MAX_RANGE; context->line_buffer[context->line_size] = 0; //printf("%d, ", atoi((char *)&context->line_buffer[0])); - context->ag_indicators[context->ag_indicators_nr].min_range = atoi((char *)context->line_buffer); + context->ag_indicators[context->parser_item_index].min_range = atoi((char *)context->line_buffer); context->line_size = 0; break; } @@ -655,9 +657,10 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){ context->parser_state = HFP_PARSER_CMD_SEQUENCE; context->line_buffer[context->line_size] = 0; //printf("%d)\n", atoi((char *)&context->line_buffer[0])); - context->ag_indicators[context->ag_indicators_nr].max_range = atoi((char *)context->line_buffer); + context->ag_indicators[context->parser_item_index].max_range = atoi((char *)context->line_buffer); context->line_size = 0; - context->ag_indicators_nr++; + context->parser_item_index++; + context->ag_indicators_nr = context->parser_item_index; break; } diff --git a/test/hfp/hfp_ag_parser_test.c b/test/hfp/hfp_ag_parser_test.c index f4280ddd6..a7fe21dc2 100644 --- a/test/hfp/hfp_ag_parser_test.c +++ b/test/hfp/hfp_ag_parser_test.c @@ -71,7 +71,7 @@ TEST_GROUP(HFPParser){ memset(packet,0, sizeof(packet)); } }; -/* + TEST(HFPParser, HFP_AG_SUPPORTED_FEATURES){ sprintf(packet, "\r\nAT%s=0000001111101111\r\n", HFP_SUPPORTED_FEATURES); for (pos = 0; pos < strlen(packet); pos++){ @@ -97,7 +97,7 @@ TEST(HFPParser, HFP_AG_AVAILABLE_CODECS){ TEST(HFPParser, HFP_AG_GENERIC_STATUS_INDICATOR){ sprintf(packet, "\r\nAT%s=0,1\r\n", HFP_GENERIC_STATUS_INDICATOR); context.sent_command = HFP_CMD_GENERIC_STATUS_INDICATOR; - + for (pos = 0; pos < strlen(packet); pos++){ hfp_parse(&context, packet[pos]); } @@ -118,11 +118,14 @@ TEST(HFPParser, HFP_AG_ENABLE_INDICATOR_STATUS_UPDATE){ CHECK_EQUAL(HFP_CMD_ENABLE_INDICATOR_STATUS_UPDATE, context.command); CHECK_EQUAL(1, context.enable_status_update_for_ag_indicators); } -*/ + + + TEST(HFPParser, HFP_AG_ENABLE_INDIVIDUAL_INDICATOR_STATUS_UPDATE){ set_hfp_generic_status_indicators((hfp_generic_status_indicators_t *)&hf_indicators, hf_indicators_nr); context.generic_status_indicators_nr = hf_indicators_nr; memcpy(context.generic_status_indicators, hf_indicators, hf_indicators_nr * sizeof(hfp_generic_status_indicators_t)); + for (pos = 0; pos < hf_indicators_nr; pos++){ CHECK_EQUAL(get_hfp_generic_status_indicators()[pos].uuid, hf_indicators[pos].uuid); CHECK_EQUAL(get_hfp_generic_status_indicators()[pos].state, hf_indicators[pos].state); diff --git a/test/hfp/hfp_hf_parser_test.c b/test/hfp/hfp_hf_parser_test.c index 24e12a308..e42691b3c 100644 --- a/test/hfp/hfp_hf_parser_test.c +++ b/test/hfp/hfp_hf_parser_test.c @@ -101,8 +101,7 @@ TEST(HFPParser, HFP_HF_INDICATORS){ offset += snprintf(packet+offset, sizeof(packet)-offset, "\"%s\", (%d, %d)\r\n", ag_indicators[pos].name, ag_indicators[pos].min_range, ag_indicators[pos].max_range); context.sent_command = HFP_CMD_INDICATOR; - context.ag_indicators_nr = 0; - + for (pos = 0; pos < strlen(packet); pos++){ hfp_parse(&context, packet[pos]); }