update hfp ag call status indicator by general ag sm

This commit is contained in:
Milanka Ringwald 2015-11-20 11:27:59 +01:00
parent 314a4aca8d
commit 6bad9c81ae
2 changed files with 49 additions and 13 deletions

View File

@ -218,8 +218,8 @@ typedef enum {
typedef enum { typedef enum {
HFP_AG_INCOMING_CALL, HFP_AG_INCOMING_CALL,
HFP_AG_INCOMING_CALL_ACCEPETED_BY_AG, HFP_AG_INCOMING_CALL_ACCEPTED_BY_AG,
HFP_AG_INCOMING_CALL_ACCEPETED_BY_HF, HFP_AG_INCOMING_CALL_ACCEPTED_BY_HF,
HFP_AG_TERMINATE_CALL_BY_AG, HFP_AG_TERMINATE_CALL_BY_AG,
HFP_AG_TERMINATE_CALL_BY_HF, HFP_AG_TERMINATE_CALL_BY_HF,
HFP_AG_CALL_DROPPED, HFP_AG_CALL_DROPPED,

View File

@ -692,8 +692,6 @@ static int incoming_call_state_machine(hfp_connection_t * context){
//printf(" HFP_CALL_TRIGGER_AUDIO_CONNECTION \n"); //printf(" HFP_CALL_TRIGGER_AUDIO_CONNECTION \n");
indicator = get_ag_indicator_for_name("callsetup"); indicator = get_ag_indicator_for_name("callsetup");
if (!indicator) return 0; if (!indicator) return 0;
indicator->status = HFP_CALLSETUP_STATUS_INCOMING_CALL_SETUP_IN_PROGRESS;
hfp_ag_transfer_ag_indicators_status_cmd(context->rfcomm_cid, indicator); hfp_ag_transfer_ag_indicators_status_cmd(context->rfcomm_cid, indicator);
hfp_timeout_start(context); hfp_timeout_start(context);
@ -730,7 +728,6 @@ static int incoming_call_state_machine(hfp_connection_t * context){
if (context->command == HFP_CMD_AG_ANSWER_CALL) { if (context->command == HFP_CMD_AG_ANSWER_CALL) {
context->call_state = HFP_CALL_TRANSFER_CALLSETUP_STATUS; context->call_state = HFP_CALL_TRANSFER_CALLSETUP_STATUS;
indicator = get_ag_indicator_for_name("call"); indicator = get_ag_indicator_for_name("call");
indicator->status = HFP_CALL_STATUS_ACTIVE_OR_HELD_CALL_IS_PRESENT;
hfp_ag_transfer_ag_indicators_status_cmd(context->rfcomm_cid, indicator); hfp_ag_transfer_ag_indicators_status_cmd(context->rfcomm_cid, indicator);
return 1; return 1;
} }
@ -816,6 +813,15 @@ static void hfp_ag_trigger_terminate_call(void){
} }
} }
static void hfp_ag_set_callsetup_state(hfp_callsetup_status_t state){
hfp_ag_callsetup_state = state;
hfp_ag_indicator_t * indicator = get_ag_indicator_for_name("callsetup");
if (!indicator){
log_error("hfp_ag_set_callsetup_state: callsetup indicator is missing");
};
indicator->status = state;
}
static void hfp_ag_call_sm(hfp_ag_call_event_t event){ static void hfp_ag_call_sm(hfp_ag_call_event_t event){
switch (event){ switch (event){
case HFP_AG_INCOMING_CALL: case HFP_AG_INCOMING_CALL:
@ -823,7 +829,7 @@ static void hfp_ag_call_sm(hfp_ag_call_event_t event){
case HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS: case HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS:
switch (hfp_ag_callsetup_state){ switch (hfp_ag_callsetup_state){
case HFP_CALLSETUP_STATUS_NO_CALL_SETUP_IN_PROGRESS: case HFP_CALLSETUP_STATUS_NO_CALL_SETUP_IN_PROGRESS:
hfp_ag_callsetup_state = HFP_CALLSETUP_STATUS_INCOMING_CALL_SETUP_IN_PROGRESS; hfp_ag_set_callsetup_state(HFP_CALLSETUP_STATUS_INCOMING_CALL_SETUP_IN_PROGRESS);
hfp_ag_trigger_incoming_call(); hfp_ag_trigger_incoming_call();
printf("TODO AG rings\n"); printf("TODO AG rings\n");
break; break;
@ -837,15 +843,33 @@ static void hfp_ag_call_sm(hfp_ag_call_event_t event){
} }
break; break;
case HFP_AG_INCOMING_CALL_ACCEPETED_BY_AG: case HFP_AG_INCOMING_CALL_ACCEPTED_BY_AG:
switch (hfp_ag_call_state){ switch (hfp_ag_call_state){
case HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS: case HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS:
switch (hfp_ag_callsetup_state){ switch (hfp_ag_callsetup_state){
case HFP_CALLSETUP_STATUS_INCOMING_CALL_SETUP_IN_PROGRESS: case HFP_CALLSETUP_STATUS_INCOMING_CALL_SETUP_IN_PROGRESS:
hfp_ag_callsetup_state = HFP_CALLSETUP_STATUS_NO_CALL_SETUP_IN_PROGRESS; hfp_ag_set_callsetup_state(HFP_CALLSETUP_STATUS_NO_CALL_SETUP_IN_PROGRESS);
hfp_ag_call_state = HFP_CALL_STATUS_ACTIVE_OR_HELD_CALL_IS_PRESENT; hfp_ag_call_state = HFP_CALL_STATUS_ACTIVE_OR_HELD_CALL_IS_PRESENT;
hfp_ag_trigger_answer_incoming_call(); hfp_ag_trigger_answer_incoming_call();
printf("TODO AG answers call\n"); printf("TODO AG answers call, accept call by GSM\n");
break;
default:
break;
}
break;
default:
break;
}
break;
case HFP_AG_INCOMING_CALL_ACCEPTED_BY_HF:
switch (hfp_ag_call_state){
case HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS:
switch (hfp_ag_callsetup_state){
case HFP_CALLSETUP_STATUS_INCOMING_CALL_SETUP_IN_PROGRESS:
hfp_ag_set_callsetup_state(HFP_CALLSETUP_STATUS_NO_CALL_SETUP_IN_PROGRESS);
hfp_ag_call_state = HFP_CALL_STATUS_ACTIVE_OR_HELD_CALL_IS_PRESENT;
// hfp_ag_trigger_answer_incoming_call();
printf("TODO HF answers call, accept call by GSM\n");
break; break;
default: default:
break; break;
@ -856,18 +880,30 @@ static void hfp_ag_call_sm(hfp_ag_call_event_t event){
} }
break; break;
case HFP_AG_TERMINATE_CALL_BY_AG: case HFP_AG_TERMINATE_CALL_BY_AG:
case HFP_AG_CALL_DROPPED:
switch (hfp_ag_call_state){ switch (hfp_ag_call_state){
case HFP_CALL_STATUS_ACTIVE_OR_HELD_CALL_IS_PRESENT: case HFP_CALL_STATUS_ACTIVE_OR_HELD_CALL_IS_PRESENT:
hfp_ag_callsetup_state = HFP_CALLSETUP_STATUS_NO_CALL_SETUP_IN_PROGRESS; hfp_ag_set_callsetup_state(HFP_CALLSETUP_STATUS_NO_CALL_SETUP_IN_PROGRESS);
hfp_ag_call_state = HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS; hfp_ag_call_state = HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS;
hfp_ag_trigger_terminate_call(); hfp_ag_trigger_terminate_call();
printf("TODO AG terminate or drop call\n"); printf("TODO AG terminate call\n");
break; break;
default: default:
break; break;
} }
break; break;
case HFP_AG_CALL_DROPPED:
switch (hfp_ag_call_state){
case HFP_CALL_STATUS_ACTIVE_OR_HELD_CALL_IS_PRESENT:
hfp_ag_set_callsetup_state(HFP_CALLSETUP_STATUS_NO_CALL_SETUP_IN_PROGRESS);
hfp_ag_call_state = HFP_CALL_STATUS_NO_HELD_OR_ACTIVE_CALLS;
hfp_ag_trigger_terminate_call();
printf("TODO AG notify call dropped\n");
break;
default:
break;
}
break;
default: default:
break; break;
} }
@ -1105,7 +1141,7 @@ void hfp_ag_call_dropped(void){
// call from AG UI // call from AG UI
void hfp_ag_answer_incoming_call(void){ void hfp_ag_answer_incoming_call(void){
hfp_ag_call_sm(HFP_AG_INCOMING_CALL_ACCEPETED_BY_AG); hfp_ag_call_sm(HFP_AG_INCOMING_CALL_ACCEPTED_BY_AG);
} }
void hfp_ag_terminate_call(void){ void hfp_ag_terminate_call(void){