diff options
Diffstat (limited to 'btif/src/btif_hf.c')
-rw-r--r-- | btif/src/btif_hf.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/btif/src/btif_hf.c b/btif/src/btif_hf.c index 866655b..a9c4561 100644 --- a/btif/src/btif_hf.c +++ b/btif/src/btif_hf.c @@ -142,7 +142,7 @@ static btif_hf_cb_t btif_hf_cb; *******************************************************************************/ static BOOLEAN is_connected(bt_bdaddr_t *bd_addr) { - if ((btif_hf_cb.state == BTHF_CONNECTION_STATE_CONNECTED) && + if (((btif_hf_cb.state == BTHF_CONNECTION_STATE_CONNECTED) || (btif_hf_cb.state == BTHF_CONNECTION_STATE_SLC_CONNECTED))&& ((bd_addr == NULL) || (bdcmp(bd_addr->address, btif_hf_cb.connected_bda.address) == 0))) return TRUE; else @@ -214,6 +214,13 @@ static void send_indicator_update (UINT16 indicator, UINT16 value) BTA_AgResult(BTA_AG_HANDLE_ALL, BTA_AG_IND_RES, &ag_res); } +void clear_phone_state() +{ + btif_hf_cb.call_setup_state = BTHF_CALL_STATE_IDLE; + btif_hf_cb.num_active = btif_hf_cb.num_held = 0; +} + + /***************************************************************************** ** Section name (Group of functions) *****************************************************************************/ @@ -257,6 +264,7 @@ static void btif_hf_upstreams_evt(UINT16 event, char* p_param) bdcpy(btif_hf_cb.connected_bda.address, p_data->open.bd_addr); btif_hf_cb.state = BTHF_CONNECTION_STATE_CONNECTED; btif_hf_cb.peer_feat = 0; + clear_phone_state(); } else if (btif_hf_cb.state == BTHF_CONNECTION_STATE_CONNECTING) { @@ -271,19 +279,27 @@ static void btif_hf_upstreams_evt(UINT16 event, char* p_param) CHECK_CALL_CBACK(bt_hf_callbacks, connection_state_cb, btif_hf_cb.state, &btif_hf_cb.connected_bda); - if (p_data->open.status != BTA_AG_SUCCESS) + if (btif_hf_cb.state == BTHF_CONNECTION_STATE_DISCONNECTED) bdsetany(btif_hf_cb.connected_bda.address); break; case BTA_AG_CLOSE_EVT: btif_hf_cb.state = BTHF_CONNECTION_STATE_DISCONNECTED; CHECK_CALL_CBACK(bt_hf_callbacks, connection_state_cb, btif_hf_cb.state, &btif_hf_cb.connected_bda); + bdsetany(btif_hf_cb.connected_bda.address); btif_hf_cb.peer_feat = 0; + clear_phone_state(); + break; case BTA_AG_CONN_EVT: btif_hf_cb.peer_feat = p_data->conn.peer_feat; + btif_hf_cb.state = BTHF_CONNECTION_STATE_SLC_CONNECTED; + + CHECK_CALL_CBACK(bt_hf_callbacks, connection_state_cb, btif_hf_cb.state, + &btif_hf_cb.connected_bda); + break; case BTA_AG_AUDIO_OPEN_EVT: |