mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-31 19:20:26 +00:00
hfp: remove indicato, indicator_status flag
This commit is contained in:
parent
ba7fd8c4e5
commit
b2bcc92ed3
71
src/hfp.c
71
src/hfp.c
@ -263,9 +263,6 @@ void hfp_reset_context_flags(hfp_connection_t * context){
|
|||||||
|
|
||||||
context->keep_separator = 0;
|
context->keep_separator = 0;
|
||||||
|
|
||||||
context->retrieve_ag_indicators = 0; // HFP_CMD_INDICATOR, check if needed
|
|
||||||
context->retrieve_ag_indicators_status = 0;
|
|
||||||
|
|
||||||
context->list_generic_status_indicators = 0; // HFP_CMD_LIST_GENERIC_STATUS_INDICATOR
|
context->list_generic_status_indicators = 0; // HFP_CMD_LIST_GENERIC_STATUS_INDICATOR
|
||||||
context->retrieve_generic_status_indicators = 0; // HFP_CMD_GENERIC_STATUS_INDICATOR
|
context->retrieve_generic_status_indicators = 0; // HFP_CMD_GENERIC_STATUS_INDICATOR
|
||||||
context->retrieve_generic_status_indicators_state = 0; // HFP_CMD_GENERIC_STATUS_INDICATOR_STATE
|
context->retrieve_generic_status_indicators_state = 0; // HFP_CMD_GENERIC_STATUS_INDICATOR_STATE
|
||||||
@ -617,7 +614,6 @@ void hfp_handle_hci_event(hfp_callback_t callback, uint8_t packet_type, uint8_t
|
|||||||
static void process_command(hfp_connection_t * context){
|
static void process_command(hfp_connection_t * context){
|
||||||
if (context->line_size < 2) return;
|
if (context->line_size < 2) return;
|
||||||
// printf("process_command %s\n", context->line_buffer);
|
// printf("process_command %s\n", context->line_buffer);
|
||||||
context->command = HFP_CMD_NONE;
|
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
int isHandsFree = 1;
|
int isHandsFree = 1;
|
||||||
|
|
||||||
@ -648,16 +644,12 @@ static void process_command(hfp_connection_t * context){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (strncmp((char *)context->line_buffer+offset, HFP_INDICATOR, strlen(HFP_INDICATOR)) == 0){
|
if (strncmp((char *)context->line_buffer+offset, HFP_INDICATOR, strlen(HFP_INDICATOR)) == 0){
|
||||||
//printf("parsed HFP_INDICATOR \n");
|
|
||||||
context->command = HFP_CMD_INDICATOR;
|
|
||||||
if (isHandsFree) return;
|
|
||||||
|
|
||||||
if (strncmp((char *)context->line_buffer+strlen(HFP_INDICATOR)+offset, "?", 1) == 0){
|
if (strncmp((char *)context->line_buffer+strlen(HFP_INDICATOR)+offset, "?", 1) == 0){
|
||||||
context->retrieve_ag_indicators_status = 1;
|
context->command = HFP_CMD_RETRIEVE_AG_INDICATORS_STATUS;
|
||||||
context->retrieve_ag_indicators = 0;
|
}
|
||||||
} else {
|
|
||||||
context->retrieve_ag_indicators = 1;
|
if (strncmp((char *)context->line_buffer+strlen(HFP_INDICATOR)+offset, "=?", 2) == 0){
|
||||||
context->retrieve_ag_indicators_status = 0;
|
context->command = HFP_CMD_RETRIEVE_AG_INDICATORS;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -760,7 +752,7 @@ static void process_command(hfp_connection_t * context){
|
|||||||
context->command = HFP_CMD_NONE;
|
context->command = HFP_CMD_NONE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
context->command = HFP_CMD_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -816,11 +808,8 @@ static void hfp_parser_next_state(hfp_connection_t * context, uint8_t byte){
|
|||||||
case HFP_CMD_QUERY_OPERATOR_SELECTION:
|
case HFP_CMD_QUERY_OPERATOR_SELECTION:
|
||||||
context->parser_state = HFP_PARSER_SECOND_ITEM;
|
context->parser_state = HFP_PARSER_SECOND_ITEM;
|
||||||
break;
|
break;
|
||||||
case HFP_CMD_INDICATOR:
|
case HFP_CMD_RETRIEVE_AG_INDICATORS:
|
||||||
if (context->retrieve_ag_indicators == 1){
|
context->parser_state = HFP_PARSER_SECOND_ITEM;
|
||||||
context->parser_state = HFP_PARSER_SECOND_ITEM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case HFP_CMD_GENERIC_STATUS_INDICATOR:
|
case HFP_CMD_GENERIC_STATUS_INDICATOR:
|
||||||
if (context->retrieve_generic_status_indicators_state == 1){
|
if (context->retrieve_generic_status_indicators_state == 1){
|
||||||
@ -836,7 +825,7 @@ static void hfp_parser_next_state(hfp_connection_t * context, uint8_t byte){
|
|||||||
context->parser_state = HFP_PARSER_THIRD_ITEM;
|
context->parser_state = HFP_PARSER_THIRD_ITEM;
|
||||||
break;
|
break;
|
||||||
case HFP_PARSER_THIRD_ITEM:
|
case HFP_PARSER_THIRD_ITEM:
|
||||||
if (context->command == HFP_CMD_INDICATOR && context->retrieve_ag_indicators){
|
if (context->command == HFP_CMD_RETRIEVE_AG_INDICATORS){
|
||||||
context->parser_state = HFP_PARSER_CMD_SEQUENCE;
|
context->parser_state = HFP_PARSER_CMD_SEQUENCE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -903,19 +892,15 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){
|
|||||||
context->parser_item_index++;
|
context->parser_item_index++;
|
||||||
context->remote_codecs_nr = context->parser_item_index;
|
context->remote_codecs_nr = context->parser_item_index;
|
||||||
break;
|
break;
|
||||||
case HFP_CMD_INDICATOR:
|
case HFP_CMD_RETRIEVE_AG_INDICATORS:
|
||||||
if (context->retrieve_ag_indicators == 1){
|
strcpy((char *)context->ag_indicators[context->parser_item_index].name, (char *)context->line_buffer);
|
||||||
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;
|
||||||
context->ag_indicators[context->parser_item_index].index = context->parser_item_index+1;
|
log_info("Indicator %d: %s (", context->ag_indicators_nr+1, context->line_buffer);
|
||||||
log_info("Indicator %d: %s (", context->ag_indicators_nr+1, context->line_buffer);
|
break;
|
||||||
}
|
case HFP_CMD_RETRIEVE_AG_INDICATORS_STATUS:
|
||||||
|
log_info("Parsed Indicator %d with status: %s\n", context->parser_item_index+1, context->line_buffer);
|
||||||
if (context->retrieve_ag_indicators_status == 1){
|
context->ag_indicators[context->parser_item_index].status = atoi((char *) context->line_buffer);
|
||||||
log_info("Parsed Indicator %d with status: %s\n", context->parser_item_index+1, context->line_buffer);
|
context->parser_item_index++;
|
||||||
context->ag_indicators[context->parser_item_index].status = atoi((char *) context->line_buffer);
|
|
||||||
context->parser_item_index++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case HFP_CMD_ENABLE_INDICATOR_STATUS_UPDATE:
|
case HFP_CMD_ENABLE_INDICATOR_STATUS_UPDATE:
|
||||||
context->parser_item_index++;
|
context->parser_item_index++;
|
||||||
@ -1018,11 +1003,9 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){
|
|||||||
context->ag_indicators[context->parser_item_index].status = (uint8_t)atoi((char*)context->line_buffer);
|
context->ag_indicators[context->parser_item_index].status = (uint8_t)atoi((char*)context->line_buffer);
|
||||||
context->ag_indicators[context->parser_item_index].status_changed = 1;
|
context->ag_indicators[context->parser_item_index].status_changed = 1;
|
||||||
break;
|
break;
|
||||||
case HFP_CMD_INDICATOR:
|
case HFP_CMD_RETRIEVE_AG_INDICATORS:
|
||||||
if (context->retrieve_ag_indicators == 1){
|
context->ag_indicators[context->parser_item_index].min_range = atoi((char *)context->line_buffer);
|
||||||
context->ag_indicators[context->parser_item_index].min_range = atoi((char *)context->line_buffer);
|
log_info("%s, ", context->line_buffer);
|
||||||
log_info("%s, ", context->line_buffer);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1037,13 +1020,11 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){
|
|||||||
log_info("name %s\n", context->line_buffer);
|
log_info("name %s\n", context->line_buffer);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HFP_CMD_INDICATOR:
|
case HFP_CMD_RETRIEVE_AG_INDICATORS:
|
||||||
if (context->retrieve_ag_indicators == 1){
|
context->ag_indicators[context->parser_item_index].max_range = atoi((char *)context->line_buffer);
|
||||||
context->ag_indicators[context->parser_item_index].max_range = atoi((char *)context->line_buffer);
|
context->parser_item_index++;
|
||||||
context->parser_item_index++;
|
context->ag_indicators_nr = context->parser_item_index;
|
||||||
context->ag_indicators_nr = context->parser_item_index;
|
log_info("%s)\n", context->line_buffer);
|
||||||
log_info("%s)\n", context->line_buffer);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -131,7 +131,10 @@ typedef enum {
|
|||||||
HFP_CMD_OK,
|
HFP_CMD_OK,
|
||||||
HFP_CMD_SUPPORTED_FEATURES,
|
HFP_CMD_SUPPORTED_FEATURES,
|
||||||
HFP_CMD_AVAILABLE_CODECS,
|
HFP_CMD_AVAILABLE_CODECS,
|
||||||
HFP_CMD_INDICATOR, // 5
|
|
||||||
|
HFP_CMD_RETRIEVE_AG_INDICATORS,
|
||||||
|
HFP_CMD_RETRIEVE_AG_INDICATORS_STATUS,
|
||||||
|
|
||||||
HFP_CMD_ENABLE_INDICATOR_STATUS_UPDATE,
|
HFP_CMD_ENABLE_INDICATOR_STATUS_UPDATE,
|
||||||
HFP_CMD_ENABLE_INDIVIDUAL_AG_INDICATOR_STATUS_UPDATE,
|
HFP_CMD_ENABLE_INDIVIDUAL_AG_INDICATOR_STATUS_UPDATE,
|
||||||
HFP_CMD_SUPPORT_CALL_HOLD_AND_MULTIPARTY_SERVICES,
|
HFP_CMD_SUPPORT_CALL_HOLD_AND_MULTIPARTY_SERVICES,
|
||||||
@ -375,9 +378,6 @@ typedef struct hfp_connection {
|
|||||||
|
|
||||||
uint8_t keep_separator;
|
uint8_t keep_separator;
|
||||||
|
|
||||||
uint8_t retrieve_ag_indicators; // HFP_CMD_INDICATOR, check if needed
|
|
||||||
uint8_t retrieve_ag_indicators_status;
|
|
||||||
|
|
||||||
uint8_t list_generic_status_indicators; // HFP_CMD_LIST_GENERIC_STATUS_INDICATOR
|
uint8_t list_generic_status_indicators; // HFP_CMD_LIST_GENERIC_STATUS_INDICATOR
|
||||||
uint8_t retrieve_generic_status_indicators; // HFP_CMD_GENERIC_STATUS_INDICATOR
|
uint8_t retrieve_generic_status_indicators; // HFP_CMD_GENERIC_STATUS_INDICATOR
|
||||||
uint8_t retrieve_generic_status_indicators_state; // HFP_CMD_GENERIC_STATUS_INDICATOR_STATE
|
uint8_t retrieve_generic_status_indicators_state; // HFP_CMD_GENERIC_STATUS_INDICATOR_STATE
|
||||||
|
29
src/hfp_ag.c
29
src/hfp_ag.c
@ -462,24 +462,19 @@ static int hfp_ag_run_for_context_service_level_connection(hfp_connection_t * co
|
|||||||
context->state = HFP_W4_RETRIEVE_INDICATORS;
|
context->state = HFP_W4_RETRIEVE_INDICATORS;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HFP_CMD_INDICATOR:
|
case HFP_CMD_RETRIEVE_AG_INDICATORS:
|
||||||
switch(context->state){
|
if (context->state != HFP_W4_RETRIEVE_INDICATORS) break;
|
||||||
case HFP_W4_RETRIEVE_INDICATORS:
|
context->state = HFP_W4_RETRIEVE_INDICATORS_STATUS;
|
||||||
if (context->retrieve_ag_indicators == 0) break;
|
done = 1;
|
||||||
hfp_ag_retrieve_indicators_cmd(context->rfcomm_cid, context);
|
hfp_ag_retrieve_indicators_cmd(context->rfcomm_cid, context);
|
||||||
done = 1;
|
|
||||||
context->state = HFP_W4_RETRIEVE_INDICATORS_STATUS;
|
|
||||||
break;
|
|
||||||
case HFP_W4_RETRIEVE_INDICATORS_STATUS:
|
|
||||||
if (context->retrieve_ag_indicators_status == 0) break;
|
|
||||||
hfp_ag_retrieve_indicators_status_cmd(context->rfcomm_cid);
|
|
||||||
done = 1;
|
|
||||||
context->state = HFP_W4_ENABLE_INDICATORS_STATUS_UPDATE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
case HFP_CMD_RETRIEVE_AG_INDICATORS_STATUS:
|
||||||
|
if (context->state != HFP_W4_RETRIEVE_INDICATORS_STATUS) break;
|
||||||
|
context->state = HFP_W4_ENABLE_INDICATORS_STATUS_UPDATE;
|
||||||
|
done = 1;
|
||||||
|
hfp_ag_retrieve_indicators_status_cmd(context->rfcomm_cid);
|
||||||
|
break;
|
||||||
|
|
||||||
case HFP_CMD_ENABLE_INDICATOR_STATUS_UPDATE:
|
case HFP_CMD_ENABLE_INDICATOR_STATUS_UPDATE:
|
||||||
switch(context->state){
|
switch(context->state){
|
||||||
case HFP_W4_ENABLE_INDICATORS_STATUS_UPDATE:
|
case HFP_W4_ENABLE_INDICATORS_STATUS_UPDATE:
|
||||||
|
@ -269,15 +269,13 @@ static int hfp_hf_run_for_context_service_level_connection(hfp_connection_t * co
|
|||||||
hfp_hf_cmd_retrieve_indicators(context->rfcomm_cid);
|
hfp_hf_cmd_retrieve_indicators(context->rfcomm_cid);
|
||||||
done = 1;
|
done = 1;
|
||||||
context->state = HFP_W4_RETRIEVE_INDICATORS;
|
context->state = HFP_W4_RETRIEVE_INDICATORS;
|
||||||
context->retrieve_ag_indicators = 1;
|
context->command = HFP_CMD_RETRIEVE_AG_INDICATORS;
|
||||||
context->retrieve_ag_indicators_status = 0;
|
|
||||||
break;
|
break;
|
||||||
case HFP_RETRIEVE_INDICATORS_STATUS:
|
case HFP_RETRIEVE_INDICATORS_STATUS:
|
||||||
hfp_hf_cmd_retrieve_indicators_status(context->rfcomm_cid);
|
hfp_hf_cmd_retrieve_indicators_status(context->rfcomm_cid);
|
||||||
done = 1;
|
done = 1;
|
||||||
context->state = HFP_W4_RETRIEVE_INDICATORS_STATUS;
|
context->state = HFP_W4_RETRIEVE_INDICATORS_STATUS;
|
||||||
context->retrieve_ag_indicators_status = 1;
|
context->command = HFP_CMD_RETRIEVE_AG_INDICATORS;
|
||||||
context->retrieve_ag_indicators = 0;
|
|
||||||
break;
|
break;
|
||||||
case HFP_ENABLE_INDICATORS_STATUS_UPDATE:
|
case HFP_ENABLE_INDICATORS_STATUS_UPDATE:
|
||||||
hfp_hf_cmd_activate_status_update_for_all_ag_indicators(context->rfcomm_cid, 1);
|
hfp_hf_cmd_activate_status_update_for_all_ag_indicators(context->rfcomm_cid, 1);
|
||||||
@ -336,12 +334,10 @@ static void hfp_hf_handle_ok_service_level_connection_establishment(hfp_connecti
|
|||||||
|
|
||||||
case HFP_W4_RETRIEVE_INDICATORS:
|
case HFP_W4_RETRIEVE_INDICATORS:
|
||||||
context->state = HFP_RETRIEVE_INDICATORS_STATUS;
|
context->state = HFP_RETRIEVE_INDICATORS_STATUS;
|
||||||
context->retrieve_ag_indicators = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HFP_W4_RETRIEVE_INDICATORS_STATUS:
|
case HFP_W4_RETRIEVE_INDICATORS_STATUS:
|
||||||
context->state = HFP_ENABLE_INDICATORS_STATUS_UPDATE;
|
context->state = HFP_ENABLE_INDICATORS_STATUS_UPDATE;
|
||||||
context->retrieve_ag_indicators_status = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HFP_W4_ENABLE_INDICATORS_STATUS_UPDATE:
|
case HFP_W4_ENABLE_INDICATORS_STATUS_UPDATE:
|
||||||
|
@ -107,8 +107,7 @@ TEST(HFPParser, HFP_HF_INDICATORS){
|
|||||||
}
|
}
|
||||||
offset += snprintf(packet+offset, sizeof(packet)-offset, "\"%s\", (%d, %d)\r\n\r\nOK\r\n", hfp_ag_indicators[pos].name, hfp_ag_indicators[pos].min_range, hfp_ag_indicators[pos].max_range);
|
offset += snprintf(packet+offset, sizeof(packet)-offset, "\"%s\", (%d, %d)\r\n\r\nOK\r\n", hfp_ag_indicators[pos].name, hfp_ag_indicators[pos].min_range, hfp_ag_indicators[pos].max_range);
|
||||||
|
|
||||||
context.retrieve_ag_indicators = 1;
|
context.command = HFP_CMD_RETRIEVE_AG_INDICATORS;
|
||||||
context.retrieve_ag_indicators_status = 0;
|
|
||||||
|
|
||||||
for (pos = 0; pos < strlen(packet); pos++){
|
for (pos = 0; pos < strlen(packet); pos++){
|
||||||
hfp_parse(&context, packet[pos]);
|
hfp_parse(&context, packet[pos]);
|
||||||
@ -132,10 +131,8 @@ TEST(HFPParser, HFP_HF_INDICATOR_STATUS){
|
|||||||
}
|
}
|
||||||
offset += snprintf(packet+offset, sizeof(packet)-offset, "%d\r\n\r\nOK\r\n", hfp_ag_indicators[pos].status);
|
offset += snprintf(packet+offset, sizeof(packet)-offset, "%d\r\n\r\nOK\r\n", hfp_ag_indicators[pos].status);
|
||||||
|
|
||||||
context.command = HFP_CMD_INDICATOR;
|
context.command = HFP_CMD_RETRIEVE_AG_INDICATORS_STATUS;
|
||||||
context.retrieve_ag_indicators_status = 1;
|
|
||||||
context.retrieve_ag_indicators = 0;
|
|
||||||
|
|
||||||
for (pos = 0; pos < strlen(packet); pos++){
|
for (pos = 0; pos < strlen(packet); pos++){
|
||||||
hfp_parse(&context, packet[pos]);
|
hfp_parse(&context, packet[pos]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user