mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-01 13:20:50 +00:00
update hfp ag call status indicator by general ag sm
This commit is contained in:
parent
314a4aca8d
commit
6bad9c81ae
@ -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,
|
||||||
|
58
src/hfp_ag.c
58
src/hfp_ag.c
@ -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){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user