From 8dfd1ea0a2894f83c2cdc0fdbd8734d9aacfed19 Mon Sep 17 00:00:00 2001 From: Myles Watson Date: Wed, 9 Nov 2016 13:17:43 -0800 Subject: [PATCH] bta: Apply clang-format clang-format -i --style=file bta/*/* (twice) Test: mma -j32 Change-Id: Ib118b1dfb6a34f9a5bfe153d65841e9041165264 --- system/bta/ag/bta_ag_act.cc | 1125 ++-- system/bta/ag/bta_ag_api.cc | 201 +- system/bta/ag/bta_ag_at.cc | 258 +- system/bta/ag/bta_ag_at.h | 61 +- system/bta/ag/bta_ag_cfg.cc | 52 +- system/bta/ag/bta_ag_ci.cc | 55 +- system/bta/ag/bta_ag_cmd.cc | 2804 ++++---- system/bta/ag/bta_ag_int.h | 539 +- system/bta/ag/bta_ag_main.cc | 1202 ++-- system/bta/ag/bta_ag_rfc.cc | 419 +- system/bta/ag/bta_ag_sco.cc | 2308 ++++--- system/bta/ag/bta_ag_sdp.cc | 622 +- system/bta/ar/bta_ar.cc | 316 +- system/bta/ar/bta_ar_int.h | 28 +- system/bta/av/bta_av_aact.cc | 4038 ++++++------ system/bta/av/bta_av_act.cc | 3374 +++++----- system/bta/av/bta_av_api.cc | 536 +- system/bta/av/bta_av_cfg.cc | 248 +- system/bta/av/bta_av_ci.cc | 55 +- system/bta/av/bta_av_int.h | 1023 ++- system/bta/av/bta_av_main.cc | 1773 +++-- system/bta/av/bta_av_ssm.cc | 938 +-- system/bta/closure/bta_closure.cc | 10 +- system/bta/closure/bta_closure_int.h | 2 +- system/bta/dm/bta_dm_act.cc | 6796 ++++++++++---------- system/bta/dm/bta_dm_api.cc | 1498 +++-- system/bta/dm/bta_dm_cfg.cc | 846 +-- system/bta/dm/bta_dm_ci.cc | 56 +- system/bta/dm/bta_dm_int.h | 1452 ++--- system/bta/dm/bta_dm_main.cc | 427 +- system/bta/dm/bta_dm_pm.cc | 1586 +++-- system/bta/dm/bta_dm_sco.cc | 743 ++- system/bta/gatt/bta_gattc_act.cc | 2212 +++---- system/bta/gatt/bta_gattc_api.cc | 640 +- system/bta/gatt/bta_gattc_cache.cc | 2032 +++--- system/bta/gatt/bta_gattc_int.h | 727 ++- system/bta/gatt/bta_gattc_main.cc | 739 ++- system/bta/gatt/bta_gattc_utils.cc | 878 ++- system/bta/gatt/bta_gatts_act.cc | 874 ++- system/bta/gatt/bta_gatts_api.cc | 271 +- system/bta/gatt/bta_gatts_int.h | 246 +- system/bta/gatt/bta_gatts_main.cc | 142 +- system/bta/gatt/bta_gatts_utils.cc | 219 +- system/bta/hf_client/bta_hf_client_act.cc | 671 +- system/bta/hf_client/bta_hf_client_api.cc | 173 +- system/bta/hf_client/bta_hf_client_at.cc | 2527 ++++---- system/bta/hf_client/bta_hf_client_at.h | 114 +- system/bta/hf_client/bta_hf_client_cmd.cc | 125 +- system/bta/hf_client/bta_hf_client_int.h | 312 +- system/bta/hf_client/bta_hf_client_main.cc | 823 +-- system/bta/hf_client/bta_hf_client_rfc.cc | 266 +- system/bta/hf_client/bta_hf_client_sco.cc | 937 ++- system/bta/hf_client/bta_hf_client_sdp.cc | 452 +- system/bta/hh/bta_hh_act.cc | 1585 +++-- system/bta/hh/bta_hh_api.cc | 309 +- system/bta/hh/bta_hh_cfg.cc | 27 +- system/bta/hh/bta_hh_int.h | 509 +- system/bta/hh/bta_hh_le.cc | 2990 ++++----- system/bta/hh/bta_hh_main.cc | 674 +- system/bta/hh/bta_hh_utils.cc | 558 +- system/bta/hl/bta_hl_act.cc | 3497 +++++----- system/bta/hl/bta_hl_api.cc | 409 +- system/bta/hl/bta_hl_ci.cc | 91 +- system/bta/hl/bta_hl_int.h | 1378 ++-- system/bta/hl/bta_hl_main.cc | 3052 ++++----- system/bta/hl/bta_hl_sdp.cc | 963 ++- system/bta/hl/bta_hl_utils.cc | 4245 ++++++------ system/bta/include/bta_ag_api.h | 576 +- system/bta/include/bta_ag_ci.h | 7 +- system/bta/include/bta_ag_co.h | 21 +- system/bta/include/bta_api.h | 1828 +++--- system/bta/include/bta_ar_api.h | 23 +- system/bta/include/bta_av_api.h | 698 +- system/bta/include/bta_av_ci.h | 9 +- system/bta/include/bta_av_co.h | 39 +- system/bta/include/bta_dm_ci.h | 6 +- system/bta/include/bta_dm_co.h | 112 +- system/bta/include/bta_gatt_api.h | 965 +-- system/bta/include/bta_gatts_co.h | 23 +- system/bta/include/bta_hf_client_api.h | 290 +- system/bta/include/bta_hh_api.h | 407 +- system/bta/include/bta_hh_co.h | 43 +- system/bta/include/bta_hl_api.h | 829 ++- system/bta/include/bta_hl_ci.h | 23 +- system/bta/include/bta_hl_co.h | 73 +- system/bta/include/bta_jv_api.h | 592 +- system/bta/include/bta_jv_co.h | 15 +- system/bta/include/bta_mce_api.h | 56 +- system/bta/include/bta_op_api.h | 34 +- system/bta/include/bta_pan_api.h | 99 +- system/bta/include/bta_pan_ci.h | 24 +- system/bta/include/bta_pan_co.h | 45 +- system/bta/include/bta_sdp_api.h | 55 +- system/bta/include/utl.h | 50 +- system/bta/jv/bta_jv_act.cc | 3642 +++++------ system/bta/jv/bta_jv_api.cc | 1021 ++- system/bta/jv/bta_jv_cfg.cc | 26 +- system/bta/jv/bta_jv_int.h | 602 +- system/bta/jv/bta_jv_main.cc | 79 +- system/bta/mce/bta_mce_act.cc | 178 +- system/bta/mce/bta_mce_api.cc | 71 +- system/bta/mce/bta_mce_cfg.cc | 15 +- system/bta/mce/bta_mce_int.h | 62 +- system/bta/mce/bta_mce_main.cc | 36 +- system/bta/pan/bta_pan_act.cc | 825 ++- system/bta/pan/bta_pan_api.cc | 156 +- system/bta/pan/bta_pan_ci.cc | 207 +- system/bta/pan/bta_pan_int.h | 227 +- system/bta/pan/bta_pan_main.cc | 408 +- system/bta/pb/bta_pbs_int.h | 31 +- system/bta/sdp/bta_sdp.cc | 39 +- system/bta/sdp/bta_sdp_act.cc | 894 ++- system/bta/sdp/bta_sdp_api.cc | 108 +- system/bta/sdp/bta_sdp_cfg.cc | 12 +- system/bta/sdp/bta_sdp_int.h | 84 +- system/bta/sys/bta_sys.h | 256 +- system/bta/sys/bta_sys_conn.cc | 374 +- system/bta/sys/bta_sys_int.h | 76 +- system/bta/sys/bta_sys_main.cc | 664 +- system/bta/sys/utl.cc | 247 +- system/bta/test/bta_closure_test.cc | 12 +- 121 files changed, 42084 insertions(+), 46268 deletions(-) diff --git a/system/bta/ag/bta_ag_act.cc b/system/bta/ag/bta_ag_act.cc index 14567f74597..8cd2616b01e 100644 --- a/system/bta/ag/bta_ag_act.cc +++ b/system/bta/ag/bta_ag_act.cc @@ -24,59 +24,45 @@ #include -#include "bta_api.h" -#include "bta_sys.h" #include "bta_ag_api.h" #include "bta_ag_co.h" #include "bta_ag_int.h" +#include "bta_api.h" #include "bta_dm_api.h" +#include "bta_sys.h" +#include "l2c_api.h" #include "osi/include/osi.h" #include "port_api.h" #include "utl.h" -#include "l2c_api.h" /***************************************************************************** * Constants ****************************************************************************/ /* maximum length of data to read from RFCOMM */ -#define BTA_AG_RFC_READ_MAX 512 +#define BTA_AG_RFC_READ_MAX 512 /* maximum AT command length */ -#define BTA_AG_CMD_MAX 512 - -const uint16_t bta_ag_uuid[BTA_AG_NUM_IDX] = -{ - UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY, - UUID_SERVCLASS_AG_HANDSFREE -}; - -const uint8_t bta_ag_sec_id[BTA_AG_NUM_IDX] = -{ - BTM_SEC_SERVICE_HEADSET_AG, - BTM_SEC_SERVICE_AG_HANDSFREE -}; - -const tBTA_SERVICE_ID bta_ag_svc_id[BTA_AG_NUM_IDX] = -{ - BTA_HSP_SERVICE_ID, - BTA_HFP_SERVICE_ID -}; - -const tBTA_SERVICE_MASK bta_ag_svc_mask[BTA_AG_NUM_IDX] = -{ - BTA_HSP_SERVICE_MASK, - BTA_HFP_SERVICE_MASK -}; - -typedef void (*tBTA_AG_ATCMD_CBACK)(tBTA_AG_SCB *p_scb, uint16_t cmd, uint8_t arg_type, - char *p_arg, int16_t int_arg); - -const tBTA_AG_ATCMD_CBACK bta_ag_at_cback_tbl[BTA_AG_NUM_IDX] = -{ - bta_ag_at_hsp_cback, - bta_ag_at_hfp_cback -}; +#define BTA_AG_CMD_MAX 512 + +const uint16_t bta_ag_uuid[BTA_AG_NUM_IDX] = { + UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY, UUID_SERVCLASS_AG_HANDSFREE}; + +const uint8_t bta_ag_sec_id[BTA_AG_NUM_IDX] = {BTM_SEC_SERVICE_HEADSET_AG, + BTM_SEC_SERVICE_AG_HANDSFREE}; + +const tBTA_SERVICE_ID bta_ag_svc_id[BTA_AG_NUM_IDX] = {BTA_HSP_SERVICE_ID, + BTA_HFP_SERVICE_ID}; + +const tBTA_SERVICE_MASK bta_ag_svc_mask[BTA_AG_NUM_IDX] = { + BTA_HSP_SERVICE_MASK, BTA_HFP_SERVICE_MASK}; + +typedef void (*tBTA_AG_ATCMD_CBACK)(tBTA_AG_SCB* p_scb, uint16_t cmd, + uint8_t arg_type, char* p_arg, + int16_t int_arg); + +const tBTA_AG_ATCMD_CBACK bta_ag_at_cback_tbl[BTA_AG_NUM_IDX] = { + bta_ag_at_hsp_cback, bta_ag_at_hfp_cback}; /******************************************************************************* * @@ -88,26 +74,24 @@ const tBTA_AG_ATCMD_CBACK bta_ag_at_cback_tbl[BTA_AG_NUM_IDX] = * Returns void * ******************************************************************************/ -static void bta_ag_cback_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data, tBTA_AG_STATUS status) -{ - tBTA_AG_OPEN open; - - /* call app callback with open event */ - open.hdr.handle = bta_ag_scb_to_idx(p_scb); - open.hdr.app_id = p_scb->app_id; - open.status = status; - open.service_id = bta_ag_svc_id[p_scb->conn_service]; - if(p_data) - { - /* if p_data is provided then we need to pick the bd address from the open api structure */ - bdcpy(open.bd_addr, p_data->api_open.bd_addr); - } - else - { - bdcpy(open.bd_addr, p_scb->peer_addr); - } - - (*bta_ag_cb.p_cback)(BTA_AG_OPEN_EVT, (tBTA_AG *) &open); +static void bta_ag_cback_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data, + tBTA_AG_STATUS status) { + tBTA_AG_OPEN open; + + /* call app callback with open event */ + open.hdr.handle = bta_ag_scb_to_idx(p_scb); + open.hdr.app_id = p_scb->app_id; + open.status = status; + open.service_id = bta_ag_svc_id[p_scb->conn_service]; + if (p_data) { + /* if p_data is provided then we need to pick the bd address from the open + * api structure */ + bdcpy(open.bd_addr, p_data->api_open.bd_addr); + } else { + bdcpy(open.bd_addr, p_scb->peer_addr); + } + + (*bta_ag_cb.p_cback)(BTA_AG_OPEN_EVT, (tBTA_AG*)&open); } /******************************************************************************* @@ -121,27 +105,26 @@ static void bta_ag_cback_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data, tBTA_AG_ * Returns void * ******************************************************************************/ -void bta_ag_register(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - tBTA_AG_REGISTER reg; - - /* initialize control block */ - p_scb->reg_services = p_data->api_register.services; - p_scb->serv_sec_mask = p_data->api_register.sec_mask; - p_scb->features = p_data->api_register.features; - p_scb->app_id = p_data->api_register.app_id; - - /* create SDP records */ - bta_ag_create_records(p_scb, p_data); - - /* start RFCOMM servers */ - bta_ag_start_servers(p_scb, p_scb->reg_services); - - /* call app callback with register event */ - reg.hdr.handle = bta_ag_scb_to_idx(p_scb); - reg.hdr.app_id = p_scb->app_id; - reg.status = BTA_AG_SUCCESS; - (*bta_ag_cb.p_cback)(BTA_AG_REGISTER_EVT, (tBTA_AG *) ®); +void bta_ag_register(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + tBTA_AG_REGISTER reg; + + /* initialize control block */ + p_scb->reg_services = p_data->api_register.services; + p_scb->serv_sec_mask = p_data->api_register.sec_mask; + p_scb->features = p_data->api_register.features; + p_scb->app_id = p_data->api_register.app_id; + + /* create SDP records */ + bta_ag_create_records(p_scb, p_data); + + /* start RFCOMM servers */ + bta_ag_start_servers(p_scb, p_scb->reg_services); + + /* call app callback with register event */ + reg.hdr.handle = bta_ag_scb_to_idx(p_scb); + reg.hdr.app_id = p_scb->app_id; + reg.status = BTA_AG_SUCCESS; + (*bta_ag_cb.p_cback)(BTA_AG_REGISTER_EVT, (tBTA_AG*)®); } /******************************************************************************* @@ -155,19 +138,18 @@ void bta_ag_register(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_deregister(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - /* set dealloc */ - p_scb->dealloc = true; +void bta_ag_deregister(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + /* set dealloc */ + p_scb->dealloc = true; - /* remove sdp records */ - bta_ag_del_records(p_scb, p_data); + /* remove sdp records */ + bta_ag_del_records(p_scb, p_data); - /* remove rfcomm servers */ - bta_ag_close_servers(p_scb, p_scb->reg_services); + /* remove rfcomm servers */ + bta_ag_close_servers(p_scb, p_scb->reg_services); - /* dealloc */ - bta_ag_scb_dealloc(p_scb); + /* dealloc */ + bta_ag_scb_dealloc(p_scb); } /******************************************************************************* @@ -180,13 +162,12 @@ void bta_ag_deregister(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_start_dereg(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - /* set dealloc */ - p_scb->dealloc = true; +void bta_ag_start_dereg(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + /* set dealloc */ + p_scb->dealloc = true; - /* remove sdp records */ - bta_ag_del_records(p_scb, p_data); + /* remove sdp records */ + bta_ag_del_records(p_scb, p_data); } /******************************************************************************* @@ -199,36 +180,33 @@ void bta_ag_start_dereg(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_start_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - BD_ADDR pending_bd_addr; - - /* store parameters */ - if (p_data) - { - bdcpy(p_scb->peer_addr, p_data->api_open.bd_addr); - p_scb->open_services = p_data->api_open.services; - p_scb->cli_sec_mask = p_data->api_open.sec_mask; - } - - /* Check if RFCOMM has any incoming connection to avoid collision. */ - if (PORT_IsOpening (pending_bd_addr)) - { - /* Let the incoming connection goes through. */ - /* Issue collision for this scb for now. */ - /* We will decide what to do when we find incoming connetion later. */ - bta_ag_collision_cback (0, BTA_ID_AG, 0, p_scb->peer_addr); - return; - } - - /* close servers */ - bta_ag_close_servers(p_scb, p_scb->reg_services); - - /* set role */ - p_scb->role = BTA_AG_INT; - - /* do service search */ - bta_ag_do_disc(p_scb, p_scb->open_services); +void bta_ag_start_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + BD_ADDR pending_bd_addr; + + /* store parameters */ + if (p_data) { + bdcpy(p_scb->peer_addr, p_data->api_open.bd_addr); + p_scb->open_services = p_data->api_open.services; + p_scb->cli_sec_mask = p_data->api_open.sec_mask; + } + + /* Check if RFCOMM has any incoming connection to avoid collision. */ + if (PORT_IsOpening(pending_bd_addr)) { + /* Let the incoming connection goes through. */ + /* Issue collision for this scb for now. */ + /* We will decide what to do when we find incoming connetion later. */ + bta_ag_collision_cback(0, BTA_ID_AG, 0, p_scb->peer_addr); + return; + } + + /* close servers */ + bta_ag_close_servers(p_scb, p_scb->reg_services); + + /* set role */ + p_scb->role = BTA_AG_INT; + + /* do service search */ + bta_ag_do_disc(p_scb, p_scb->open_services); } /******************************************************************************* @@ -241,62 +219,51 @@ void bta_ag_start_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_disc_int_res(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - uint16_t event = BTA_AG_DISC_FAIL_EVT; - - APPL_TRACE_DEBUG ("bta_ag_disc_int_res: Status: %d", p_data->disc_result.status); - - /* if found service */ - if (p_data->disc_result.status == SDP_SUCCESS || - p_data->disc_result.status == SDP_DB_FULL) - { - /* get attributes */ - if (bta_ag_sdp_find_attr(p_scb, p_scb->open_services)) - { - /* set connected service */ - p_scb->conn_service = bta_ag_service_to_idx(p_scb->open_services); - - /* send ourselves sdp ok event */ - event = BTA_AG_DISC_OK_EVT; - } - } - - /* free discovery db */ - bta_ag_free_db(p_scb, p_data); - - /* if service not found check if we should search for other service */ - if ((event == BTA_AG_DISC_FAIL_EVT) && - (p_data->disc_result.status == SDP_SUCCESS || - p_data->disc_result.status == SDP_DB_FULL || - p_data->disc_result.status == SDP_NO_RECS_MATCH)) - { - if ((p_scb->open_services & BTA_HFP_SERVICE_MASK) && - (p_scb->open_services & BTA_HSP_SERVICE_MASK)) - { - /* search for HSP */ - p_scb->open_services &= ~BTA_HFP_SERVICE_MASK; - bta_ag_do_disc(p_scb, p_scb->open_services); - } - else if ((p_scb->open_services & BTA_HSP_SERVICE_MASK) && - (p_scb->hsp_version == HSP_VERSION_1_2)) - { - /* search for UUID_SERVCLASS_HEADSET for HSP 1.0 device */ - p_scb->hsp_version = HSP_VERSION_1_0; - bta_ag_do_disc(p_scb, p_scb->open_services); - } - else - { - /* send ourselves sdp ok/fail event */ - bta_ag_sm_execute(p_scb, event, p_data); - } +void bta_ag_disc_int_res(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + uint16_t event = BTA_AG_DISC_FAIL_EVT; + + APPL_TRACE_DEBUG("bta_ag_disc_int_res: Status: %d", + p_data->disc_result.status); + + /* if found service */ + if (p_data->disc_result.status == SDP_SUCCESS || + p_data->disc_result.status == SDP_DB_FULL) { + /* get attributes */ + if (bta_ag_sdp_find_attr(p_scb, p_scb->open_services)) { + /* set connected service */ + p_scb->conn_service = bta_ag_service_to_idx(p_scb->open_services); + + /* send ourselves sdp ok event */ + event = BTA_AG_DISC_OK_EVT; } - else - { - /* send ourselves sdp ok/fail event */ - bta_ag_sm_execute(p_scb, event, p_data); + } + + /* free discovery db */ + bta_ag_free_db(p_scb, p_data); + + /* if service not found check if we should search for other service */ + if ((event == BTA_AG_DISC_FAIL_EVT) && + (p_data->disc_result.status == SDP_SUCCESS || + p_data->disc_result.status == SDP_DB_FULL || + p_data->disc_result.status == SDP_NO_RECS_MATCH)) { + if ((p_scb->open_services & BTA_HFP_SERVICE_MASK) && + (p_scb->open_services & BTA_HSP_SERVICE_MASK)) { + /* search for HSP */ + p_scb->open_services &= ~BTA_HFP_SERVICE_MASK; + bta_ag_do_disc(p_scb, p_scb->open_services); + } else if ((p_scb->open_services & BTA_HSP_SERVICE_MASK) && + (p_scb->hsp_version == HSP_VERSION_1_2)) { + /* search for UUID_SERVCLASS_HEADSET for HSP 1.0 device */ + p_scb->hsp_version = HSP_VERSION_1_0; + bta_ag_do_disc(p_scb, p_scb->open_services); + } else { + /* send ourselves sdp ok/fail event */ + bta_ag_sm_execute(p_scb, event, p_data); } - + } else { + /* send ourselves sdp ok/fail event */ + bta_ag_sm_execute(p_scb, event, p_data); + } } /******************************************************************************* @@ -309,18 +276,16 @@ void bta_ag_disc_int_res(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_disc_acp_res(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - /* if found service */ - if (p_data->disc_result.status == SDP_SUCCESS || - p_data->disc_result.status == SDP_DB_FULL) - { - /* get attributes */ - bta_ag_sdp_find_attr(p_scb, bta_ag_svc_mask[p_scb->conn_service]); - } - - /* free discovery db */ - bta_ag_free_db(p_scb, p_data); +void bta_ag_disc_acp_res(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + /* if found service */ + if (p_data->disc_result.status == SDP_SUCCESS || + p_data->disc_result.status == SDP_DB_FULL) { + /* get attributes */ + bta_ag_sdp_find_attr(p_scb, bta_ag_svc_mask[p_scb->conn_service]); + } + + /* free discovery db */ + bta_ag_free_db(p_scb, p_data); } /******************************************************************************* @@ -333,19 +298,17 @@ void bta_ag_disc_acp_res(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_disc_fail(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - /* reopen registered servers */ - bta_ag_start_servers(p_scb, p_scb->reg_services); +void bta_ag_disc_fail(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + /* reopen registered servers */ + bta_ag_start_servers(p_scb, p_scb->reg_services); - /* reinitialize stuff */ + /* reinitialize stuff */ - /* clear the remote BD address */ - bdcpy(p_scb->peer_addr, bd_addr_null); + /* clear the remote BD address */ + bdcpy(p_scb->peer_addr, bd_addr_null); - /* call open cback w. failure */ - bta_ag_cback_open(p_scb, NULL, BTA_AG_FAIL_SDP); + /* call open cback w. failure */ + bta_ag_cback_open(p_scb, NULL, BTA_AG_FAIL_SDP); } /******************************************************************************* @@ -358,10 +321,9 @@ void bta_ag_disc_fail(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_open_fail(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - /* call open cback w. failure */ - bta_ag_cback_open(p_scb, p_data, BTA_AG_FAIL_RESOURCES); +void bta_ag_open_fail(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + /* call open cback w. failure */ + bta_ag_cback_open(p_scb, p_data, BTA_AG_FAIL_RESOURCES); } /******************************************************************************* @@ -374,27 +336,26 @@ void bta_ag_open_fail(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_rfc_fail(tBTA_AG_SCB *p_scb, UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - /* reinitialize stuff */ - p_scb->conn_handle = 0; - p_scb->conn_service = 0; - p_scb->peer_features = 0; +void bta_ag_rfc_fail(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + /* reinitialize stuff */ + p_scb->conn_handle = 0; + p_scb->conn_service = 0; + p_scb->peer_features = 0; #if (BTM_WBS_INCLUDED == TRUE) - p_scb->peer_codecs = BTA_AG_CODEC_CVSD; - p_scb->sco_codec = BTA_AG_CODEC_CVSD; + p_scb->peer_codecs = BTA_AG_CODEC_CVSD; + p_scb->sco_codec = BTA_AG_CODEC_CVSD; #endif - p_scb->role = 0; - p_scb->svc_conn = false; - p_scb->hsp_version = HSP_VERSION_1_2; - /*Clear the BD address*/ - bdcpy(p_scb->peer_addr, bd_addr_null); + p_scb->role = 0; + p_scb->svc_conn = false; + p_scb->hsp_version = HSP_VERSION_1_2; + /*Clear the BD address*/ + bdcpy(p_scb->peer_addr, bd_addr_null); - /* reopen registered servers */ - bta_ag_start_servers(p_scb, p_scb->reg_services); + /* reopen registered servers */ + bta_ag_start_servers(p_scb, p_scb->reg_services); - /* call open cback w. failure */ - bta_ag_cback_open(p_scb, NULL, BTA_AG_FAIL_RFCOMM); + /* call open cback w. failure */ + bta_ag_cback_open(p_scb, NULL, BTA_AG_FAIL_RFCOMM); } /******************************************************************************* @@ -407,90 +368,83 @@ void bta_ag_rfc_fail(tBTA_AG_SCB *p_scb, UNUSED_ATTR tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_rfc_close(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - tBTA_AG_CLOSE close; - tBTA_SERVICE_MASK services; - int i, num_active_conn = 0; - - /* reinitialize stuff */ - p_scb->conn_service = 0; - p_scb->peer_features = 0; +void bta_ag_rfc_close(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + tBTA_AG_CLOSE close; + tBTA_SERVICE_MASK services; + int i, num_active_conn = 0; + + /* reinitialize stuff */ + p_scb->conn_service = 0; + p_scb->peer_features = 0; #if (BTM_WBS_INCLUDED == TRUE) - p_scb->peer_codecs = BTA_AG_CODEC_CVSD; - p_scb->sco_codec = BTA_AG_CODEC_CVSD; - /* Clear these flags upon SLC teardown */ - p_scb->codec_updated = false; - p_scb->codec_fallback = false; - p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; + p_scb->peer_codecs = BTA_AG_CODEC_CVSD; + p_scb->sco_codec = BTA_AG_CODEC_CVSD; + /* Clear these flags upon SLC teardown */ + p_scb->codec_updated = false; + p_scb->codec_fallback = false; + p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; #endif - p_scb->role = 0; - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - p_scb->svc_conn = false; - p_scb->hsp_version = HSP_VERSION_1_2; - bta_ag_at_reinit(&p_scb->at_cb); + p_scb->role = 0; + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + p_scb->svc_conn = false; + p_scb->hsp_version = HSP_VERSION_1_2; + bta_ag_at_reinit(&p_scb->at_cb); - memset(&(p_scb->peer_hf_indicators), 0, sizeof(p_scb->peer_hf_indicators)); - memset(&(p_scb->local_hf_indicators), 0, sizeof(p_scb->local_hf_indicators)); + memset(&(p_scb->peer_hf_indicators), 0, sizeof(p_scb->peer_hf_indicators)); + memset(&(p_scb->local_hf_indicators), 0, sizeof(p_scb->local_hf_indicators)); - /* stop timers */ - alarm_cancel(p_scb->ring_timer); + /* stop timers */ + alarm_cancel(p_scb->ring_timer); #if (BTM_WBS_INCLUDED == TRUE) - alarm_cancel(p_scb->codec_negotiation_timer); + alarm_cancel(p_scb->codec_negotiation_timer); #endif - close.hdr.handle = bta_ag_scb_to_idx(p_scb); - close.hdr.app_id = p_scb->app_id; - bdcpy(close.bd_addr, p_scb->peer_addr); - - bta_sys_conn_close(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - - /* call close call-out */ - bta_ag_co_data_close(close.hdr.handle); + close.hdr.handle = bta_ag_scb_to_idx(p_scb); + close.hdr.app_id = p_scb->app_id; + bdcpy(close.bd_addr, p_scb->peer_addr); - /* call close cback */ - (*bta_ag_cb.p_cback)(BTA_AG_CLOSE_EVT, (tBTA_AG *) &close); + bta_sys_conn_close(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - /* if not deregistering (deallocating) reopen registered servers */ - if (p_scb->dealloc == false) - { - /* Clear peer bd_addr so instance can be reused */ - bdcpy(p_scb->peer_addr, bd_addr_null); + /* call close call-out */ + bta_ag_co_data_close(close.hdr.handle); - /* start only unopened server */ - services = p_scb->reg_services; - for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++) - { - if(p_scb->serv_handle[i]) - services &= ~((tBTA_SERVICE_MASK)1 << (BTA_HSP_SERVICE_ID + i)); - } - bta_ag_start_servers(p_scb, services); + /* call close cback */ + (*bta_ag_cb.p_cback)(BTA_AG_CLOSE_EVT, (tBTA_AG*)&close); - p_scb->conn_handle = 0; + /* if not deregistering (deallocating) reopen registered servers */ + if (p_scb->dealloc == false) { + /* Clear peer bd_addr so instance can be reused */ + bdcpy(p_scb->peer_addr, bd_addr_null); - /* Make sure SCO state is BTA_AG_SCO_SHUTDOWN_ST */ - bta_ag_sco_shutdown(p_scb, NULL); + /* start only unopened server */ + services = p_scb->reg_services; + for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++) { + if (p_scb->serv_handle[i]) + services &= ~((tBTA_SERVICE_MASK)1 << (BTA_HSP_SERVICE_ID + i)); + } + bta_ag_start_servers(p_scb, services); - /* Check if all the SLCs are down */ - for (i = 0; i < BTA_AG_NUM_SCB; i++) - { - if (bta_ag_cb.scb[i].in_use && bta_ag_cb.scb[i].svc_conn) - num_active_conn++; - } + p_scb->conn_handle = 0; - if(!num_active_conn) - { - bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } + /* Make sure SCO state is BTA_AG_SCO_SHUTDOWN_ST */ + bta_ag_sco_shutdown(p_scb, NULL); + /* Check if all the SLCs are down */ + for (i = 0; i < BTA_AG_NUM_SCB; i++) { + if (bta_ag_cb.scb[i].in_use && bta_ag_cb.scb[i].svc_conn) + num_active_conn++; } - /* else close port and deallocate scb */ - else - { - RFCOMM_RemoveServer(p_scb->conn_handle); - bta_ag_scb_dealloc(p_scb); + + if (!num_active_conn) { + bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); } + + } + /* else close port and deallocate scb */ + else { + RFCOMM_RemoveServer(p_scb->conn_handle); + bta_ag_scb_dealloc(p_scb); + } } /******************************************************************************* @@ -503,38 +457,40 @@ void bta_ag_rfc_close(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_rfc_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - /* initialize AT feature variables */ - p_scb->clip_enabled = false; - p_scb->ccwa_enabled = false; - p_scb->cmer_enabled = false; - p_scb->cmee_enabled = false; - p_scb->inband_enabled = ((p_scb->features & BTA_AG_FEAT_INBAND) == BTA_AG_FEAT_INBAND); - - /* set up AT command interpreter */ - p_scb->at_cb.p_at_tbl = (tBTA_AG_AT_CMD *) bta_ag_at_tbl[p_scb->conn_service]; - p_scb->at_cb.p_cmd_cback = (tBTA_AG_AT_CMD_CBACK *) bta_ag_at_cback_tbl[p_scb->conn_service]; - p_scb->at_cb.p_err_cback = (tBTA_AG_AT_ERR_CBACK *) bta_ag_at_err_cback; - p_scb->at_cb.p_user = p_scb; - p_scb->at_cb.cmd_max_len = BTA_AG_CMD_MAX; - bta_ag_at_init(&p_scb->at_cb); - - /* call app open call-out */ - bta_ag_co_data_open(bta_ag_scb_to_idx(p_scb), bta_ag_svc_id[p_scb->conn_service]); - - bta_sys_conn_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - - bta_ag_cback_open(p_scb, NULL, BTA_AG_SUCCESS); - - if (p_scb->conn_service == BTA_AG_HFP) { - /* if hfp start timer for service level conn */ - bta_sys_start_timer(p_scb->ring_timer, p_bta_ag_cfg->conn_tout, - BTA_AG_SVC_TIMEOUT_EVT, bta_ag_scb_to_idx(p_scb)); - } else { - /* else service level conn is open */ - bta_ag_svc_conn_open(p_scb, p_data); - } +void bta_ag_rfc_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + /* initialize AT feature variables */ + p_scb->clip_enabled = false; + p_scb->ccwa_enabled = false; + p_scb->cmer_enabled = false; + p_scb->cmee_enabled = false; + p_scb->inband_enabled = + ((p_scb->features & BTA_AG_FEAT_INBAND) == BTA_AG_FEAT_INBAND); + + /* set up AT command interpreter */ + p_scb->at_cb.p_at_tbl = (tBTA_AG_AT_CMD*)bta_ag_at_tbl[p_scb->conn_service]; + p_scb->at_cb.p_cmd_cback = + (tBTA_AG_AT_CMD_CBACK*)bta_ag_at_cback_tbl[p_scb->conn_service]; + p_scb->at_cb.p_err_cback = (tBTA_AG_AT_ERR_CBACK*)bta_ag_at_err_cback; + p_scb->at_cb.p_user = p_scb; + p_scb->at_cb.cmd_max_len = BTA_AG_CMD_MAX; + bta_ag_at_init(&p_scb->at_cb); + + /* call app open call-out */ + bta_ag_co_data_open(bta_ag_scb_to_idx(p_scb), + bta_ag_svc_id[p_scb->conn_service]); + + bta_sys_conn_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + + bta_ag_cback_open(p_scb, NULL, BTA_AG_SUCCESS); + + if (p_scb->conn_service == BTA_AG_HFP) { + /* if hfp start timer for service level conn */ + bta_sys_start_timer(p_scb->ring_timer, p_bta_ag_cfg->conn_tout, + BTA_AG_SVC_TIMEOUT_EVT, bta_ag_scb_to_idx(p_scb)); + } else { + /* else service level conn is open */ + bta_ag_svc_conn_open(p_scb, p_data); + } } /******************************************************************************* @@ -547,86 +503,79 @@ void bta_ag_rfc_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_rfc_acp_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - uint16_t lcid; - int i; - tBTA_AG_SCB *ag_scb, *other_scb; - BD_ADDR dev_addr; - int status; - - /* set role */ - p_scb->role = BTA_AG_ACP; - - APPL_TRACE_DEBUG ("bta_ag_rfc_acp_open: serv_handle0 = %d serv_handle1 = %d", - p_scb->serv_handle[0], p_scb->serv_handle[1]); - - /* get bd addr of peer */ - if (PORT_SUCCESS != (status=PORT_CheckConnection(p_data->rfc.port_handle, dev_addr, &lcid))) - { - APPL_TRACE_DEBUG ("bta_ag_rfc_acp_open error PORT_CheckConnection returned status %d", status); - } - - /* Collision Handling */ - for (i = 0, ag_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; i++, ag_scb++) - { - if (ag_scb->in_use && alarm_is_scheduled(ag_scb->collision_timer)) - { - alarm_cancel(ag_scb->collision_timer); - - if (bdcmp (dev_addr, ag_scb->peer_addr) == 0) - { - /* If incoming and outgoing device are same, nothing more to do. */ - /* Outgoing conn will be aborted because we have successful incoming conn. */ - } - else - { - /* Resume outgoing connection. */ - other_scb = bta_ag_get_other_idle_scb (p_scb); - if (other_scb) - { - bdcpy(other_scb->peer_addr, ag_scb->peer_addr); - other_scb->open_services = ag_scb->open_services; - other_scb->cli_sec_mask = ag_scb->cli_sec_mask; - - bta_ag_resume_open (other_scb); - } - } - - break; +void bta_ag_rfc_acp_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + uint16_t lcid; + int i; + tBTA_AG_SCB *ag_scb, *other_scb; + BD_ADDR dev_addr; + int status; + + /* set role */ + p_scb->role = BTA_AG_ACP; + + APPL_TRACE_DEBUG("bta_ag_rfc_acp_open: serv_handle0 = %d serv_handle1 = %d", + p_scb->serv_handle[0], p_scb->serv_handle[1]); + + /* get bd addr of peer */ + if (PORT_SUCCESS != (status = PORT_CheckConnection(p_data->rfc.port_handle, + dev_addr, &lcid))) { + APPL_TRACE_DEBUG( + "bta_ag_rfc_acp_open error PORT_CheckConnection returned status %d", + status); + } + + /* Collision Handling */ + for (i = 0, ag_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; i++, ag_scb++) { + if (ag_scb->in_use && alarm_is_scheduled(ag_scb->collision_timer)) { + alarm_cancel(ag_scb->collision_timer); + + if (bdcmp(dev_addr, ag_scb->peer_addr) == 0) { + /* If incoming and outgoing device are same, nothing more to do. */ + /* Outgoing conn will be aborted because we have successful incoming + * conn. */ + } else { + /* Resume outgoing connection. */ + other_scb = bta_ag_get_other_idle_scb(p_scb); + if (other_scb) { + bdcpy(other_scb->peer_addr, ag_scb->peer_addr); + other_scb->open_services = ag_scb->open_services; + other_scb->cli_sec_mask = ag_scb->cli_sec_mask; + + bta_ag_resume_open(other_scb); } - } - - bdcpy (p_scb->peer_addr, dev_addr); + } - /* determine connected service from port handle */ - for (i = 0; i < BTA_AG_NUM_IDX; i++) - { - APPL_TRACE_DEBUG ("bta_ag_rfc_acp_open: i = %d serv_handle = %d port_handle = %d", - i, p_scb->serv_handle[i], p_data->rfc.port_handle); - - if (p_scb->serv_handle[i] == p_data->rfc.port_handle) - { - p_scb->conn_service = i; - p_scb->conn_handle = p_data->rfc.port_handle; - break; - } + break; } + } - APPL_TRACE_DEBUG ("bta_ag_rfc_acp_open: conn_service = %d conn_handle = %d", - p_scb->conn_service, p_scb->conn_handle); + bdcpy(p_scb->peer_addr, dev_addr); - /* close any unopened server */ - bta_ag_close_servers(p_scb, (p_scb->reg_services & ~bta_ag_svc_mask[p_scb->conn_service])); + /* determine connected service from port handle */ + for (i = 0; i < BTA_AG_NUM_IDX; i++) { + APPL_TRACE_DEBUG( + "bta_ag_rfc_acp_open: i = %d serv_handle = %d port_handle = %d", i, + p_scb->serv_handle[i], p_data->rfc.port_handle); - /* do service discovery to get features */ - bta_ag_do_disc(p_scb, bta_ag_svc_mask[p_scb->conn_service]); + if (p_scb->serv_handle[i] == p_data->rfc.port_handle) { + p_scb->conn_service = i; + p_scb->conn_handle = p_data->rfc.port_handle; + break; + } + } - /* continue with common open processing */ - bta_ag_rfc_open(p_scb, p_data); + APPL_TRACE_DEBUG("bta_ag_rfc_acp_open: conn_service = %d conn_handle = %d", + p_scb->conn_service, p_scb->conn_handle); + /* close any unopened server */ + bta_ag_close_servers( + p_scb, (p_scb->reg_services & ~bta_ag_svc_mask[p_scb->conn_service])); + /* do service discovery to get features */ + bta_ag_do_disc(p_scb, bta_ag_svc_mask[p_scb->conn_service]); + /* continue with common open processing */ + bta_ag_rfc_open(p_scb, p_data); } /******************************************************************************* @@ -639,48 +588,43 @@ void bta_ag_rfc_acp_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_rfc_data(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - uint16_t len; - char buf[BTA_AG_RFC_READ_MAX]; - - memset(buf, 0, BTA_AG_RFC_READ_MAX); - - APPL_TRACE_DEBUG("%s", __func__); - - /* do the following */ - for(;;) - { - /* read data from rfcomm; if bad status, we're done */ - if (PORT_ReadData(p_scb->conn_handle, buf, BTA_AG_RFC_READ_MAX, &len) != PORT_SUCCESS) - { - break; - } +void bta_ag_rfc_data(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + uint16_t len; + char buf[BTA_AG_RFC_READ_MAX]; - /* if no data, we're done */ - if (len == 0) - { - break; - } + memset(buf, 0, BTA_AG_RFC_READ_MAX); - /* run AT command interpreter on data */ - bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - bta_ag_at_parse(&p_scb->at_cb, buf, len); - if ((p_scb->sco_idx != BTM_INVALID_SCO_INDEX) && bta_ag_sco_is_open(p_scb)) - { - APPL_TRACE_DEBUG ("%s change link policy for SCO", __func__); - bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } else { - bta_sys_idle(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } + APPL_TRACE_DEBUG("%s", __func__); - /* no more data to read, we're done */ - if (len < BTA_AG_RFC_READ_MAX) - { - break; - } + /* do the following */ + for (;;) { + /* read data from rfcomm; if bad status, we're done */ + if (PORT_ReadData(p_scb->conn_handle, buf, BTA_AG_RFC_READ_MAX, &len) != + PORT_SUCCESS) { + break; + } + + /* if no data, we're done */ + if (len == 0) { + break; + } + + /* run AT command interpreter on data */ + bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + bta_ag_at_parse(&p_scb->at_cb, buf, len); + if ((p_scb->sco_idx != BTM_INVALID_SCO_INDEX) && + bta_ag_sco_is_open(p_scb)) { + APPL_TRACE_DEBUG("%s change link policy for SCO", __func__); + bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + } else { + bta_sys_idle(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + } + + /* no more data to read, we're done */ + if (len < BTA_AG_RFC_READ_MAX) { + break; } + } } /******************************************************************************* @@ -693,25 +637,21 @@ void bta_ag_rfc_data(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_start_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - /* Take the link out of sniff and set L2C idle time to 0 */ - bta_dm_pm_active(p_scb->peer_addr); - L2CA_SetIdleTimeoutByBdAddr(p_scb->peer_addr, 0, BT_TRANSPORT_BR_EDR); - - /* if SCO is open close SCO and wait on RFCOMM close */ - if (bta_ag_sco_is_open(p_scb)) - { - p_scb->post_sco = BTA_AG_POST_SCO_CLOSE_RFC; - } - else - { - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - bta_ag_rfc_do_close(p_scb, p_data); - } +void bta_ag_start_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + /* Take the link out of sniff and set L2C idle time to 0 */ + bta_dm_pm_active(p_scb->peer_addr); + L2CA_SetIdleTimeoutByBdAddr(p_scb->peer_addr, 0, BT_TRANSPORT_BR_EDR); + + /* if SCO is open close SCO and wait on RFCOMM close */ + if (bta_ag_sco_is_open(p_scb)) { + p_scb->post_sco = BTA_AG_POST_SCO_CLOSE_RFC; + } else { + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + bta_ag_rfc_do_close(p_scb, p_data); + } - /* always do SCO shutdown to handle all SCO corner cases */ - bta_ag_sco_shutdown(p_scb, p_data); + /* always do SCO shutdown to handle all SCO corner cases */ + bta_ag_sco_shutdown(p_scb, p_data); } /******************************************************************************* @@ -724,23 +664,21 @@ void bta_ag_start_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_post_sco_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - switch (p_scb->post_sco) - { - case BTA_AG_POST_SCO_RING: - bta_ag_send_ring(p_scb, p_data); - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - break; - - case BTA_AG_POST_SCO_CALL_CONN: - bta_ag_send_call_inds(p_scb, BTA_AG_IN_CALL_CONN_RES); - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - break; - - default: - break; - } +void bta_ag_post_sco_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + switch (p_scb->post_sco) { + case BTA_AG_POST_SCO_RING: + bta_ag_send_ring(p_scb, p_data); + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + break; + + case BTA_AG_POST_SCO_CALL_CONN: + bta_ag_send_call_inds(p_scb, BTA_AG_IN_CALL_CONN_RES); + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + break; + + default: + break; + } } /******************************************************************************* @@ -753,51 +691,47 @@ void bta_ag_post_sco_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_post_sco_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - switch (p_scb->post_sco) - { - case BTA_AG_POST_SCO_CLOSE_RFC: - bta_ag_rfc_do_close(p_scb, p_data); - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - break; - - case BTA_AG_POST_SCO_CALL_CONN: - bta_ag_send_call_inds(p_scb, BTA_AG_IN_CALL_CONN_RES); - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - break; - - case BTA_AG_POST_SCO_CALL_ORIG: - bta_ag_send_call_inds(p_scb, BTA_AG_OUT_CALL_ORIG_RES); - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - break; - - case BTA_AG_POST_SCO_CALL_END: - bta_ag_send_call_inds(p_scb, BTA_AG_END_CALL_RES); - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - break; - - case BTA_AG_POST_SCO_CALL_END_INCALL: - bta_ag_send_call_inds(p_scb, BTA_AG_END_CALL_RES); - - /* Sending callsetup IND and Ring were defered to after SCO close. */ - bta_ag_send_call_inds(p_scb, BTA_AG_IN_CALL_RES); - - if (bta_ag_inband_enabled(p_scb) && !(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - p_scb->post_sco = BTA_AG_POST_SCO_RING; - bta_ag_sco_open(p_scb, p_data); - } - else - { - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - bta_ag_send_ring(p_scb, p_data); - } - break; - - default: - break; - } +void bta_ag_post_sco_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + switch (p_scb->post_sco) { + case BTA_AG_POST_SCO_CLOSE_RFC: + bta_ag_rfc_do_close(p_scb, p_data); + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + break; + + case BTA_AG_POST_SCO_CALL_CONN: + bta_ag_send_call_inds(p_scb, BTA_AG_IN_CALL_CONN_RES); + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + break; + + case BTA_AG_POST_SCO_CALL_ORIG: + bta_ag_send_call_inds(p_scb, BTA_AG_OUT_CALL_ORIG_RES); + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + break; + + case BTA_AG_POST_SCO_CALL_END: + bta_ag_send_call_inds(p_scb, BTA_AG_END_CALL_RES); + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + break; + + case BTA_AG_POST_SCO_CALL_END_INCALL: + bta_ag_send_call_inds(p_scb, BTA_AG_END_CALL_RES); + + /* Sending callsetup IND and Ring were defered to after SCO close. */ + bta_ag_send_call_inds(p_scb, BTA_AG_IN_CALL_RES); + + if (bta_ag_inband_enabled(p_scb) && + !(p_scb->features & BTA_AG_FEAT_NOSCO)) { + p_scb->post_sco = BTA_AG_POST_SCO_RING; + bta_ag_sco_open(p_scb, p_data); + } else { + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + bta_ag_send_ring(p_scb, p_data); + } + break; + + default: + break; + } } /******************************************************************************* @@ -810,38 +744,35 @@ void bta_ag_post_sco_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_svc_conn_open(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - tBTA_AG_CONN evt; - - if (!p_scb->svc_conn) - { - /* set state variable */ - p_scb->svc_conn = true; - - /* Clear AT+BIA mask from previous SLC if any. */ - p_scb->bia_masked_out = 0; - - alarm_cancel(p_scb->ring_timer); - - /* call callback */ - evt.hdr.handle = bta_ag_scb_to_idx(p_scb); - evt.hdr.app_id = p_scb->app_id; - evt.peer_feat = p_scb->peer_features; - bdcpy(evt.bd_addr, p_scb->peer_addr); +void bta_ag_svc_conn_open(tBTA_AG_SCB* p_scb, + UNUSED_ATTR tBTA_AG_DATA* p_data) { + tBTA_AG_CONN evt; + + if (!p_scb->svc_conn) { + /* set state variable */ + p_scb->svc_conn = true; + + /* Clear AT+BIA mask from previous SLC if any. */ + p_scb->bia_masked_out = 0; + + alarm_cancel(p_scb->ring_timer); + + /* call callback */ + evt.hdr.handle = bta_ag_scb_to_idx(p_scb); + evt.hdr.app_id = p_scb->app_id; + evt.peer_feat = p_scb->peer_features; + bdcpy(evt.bd_addr, p_scb->peer_addr); #if (BTM_WBS_INCLUDED == TRUE) - evt.peer_codec = p_scb->peer_codecs; + evt.peer_codec = p_scb->peer_codecs; #endif - if ((p_scb->call_ind != BTA_AG_CALL_INACTIVE) || - (p_scb->callsetup_ind != BTA_AG_CALLSETUP_NONE)) - { - bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } - - (*bta_ag_cb.p_cback)(BTA_AG_CONN_EVT, (tBTA_AG *) &evt); + if ((p_scb->call_ind != BTA_AG_CALL_INACTIVE) || + (p_scb->callsetup_ind != BTA_AG_CALLSETUP_NONE)) { + bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); } + + (*bta_ag_cb.p_cback)(BTA_AG_CONN_EVT, (tBTA_AG*)&evt); + } } /******************************************************************************* @@ -853,25 +784,22 @@ void bta_ag_svc_conn_open(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_ci_rx_data(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - uint16_t len; - tBTA_AG_CI_RX_WRITE *p_rx_write_msg = (tBTA_AG_CI_RX_WRITE *)p_data; - char *p_data_area = (char *)(p_rx_write_msg+1); /* Point to data area after header */ - - APPL_TRACE_DEBUG("bta_ag_ci_rx_data:"); - /* send to RFCOMM */ - bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - PORT_WriteData(p_scb->conn_handle, p_data_area, strlen(p_data_area), &len); - if ((p_scb->sco_idx != BTM_INVALID_SCO_INDEX) && bta_ag_sco_is_open(p_scb)) - { - APPL_TRACE_DEBUG ("bta_ag_rfc_data, change link policy for SCO"); - bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } - else - { - bta_sys_idle(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } +void bta_ag_ci_rx_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + uint16_t len; + tBTA_AG_CI_RX_WRITE* p_rx_write_msg = (tBTA_AG_CI_RX_WRITE*)p_data; + char* p_data_area = + (char*)(p_rx_write_msg + 1); /* Point to data area after header */ + + APPL_TRACE_DEBUG("bta_ag_ci_rx_data:"); + /* send to RFCOMM */ + bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + PORT_WriteData(p_scb->conn_handle, p_data_area, strlen(p_data_area), &len); + if ((p_scb->sco_idx != BTM_INVALID_SCO_INDEX) && bta_ag_sco_is_open(p_scb)) { + APPL_TRACE_DEBUG("bta_ag_rfc_data, change link policy for SCO"); + bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + } else { + bta_sys_idle(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + } } /******************************************************************************* @@ -883,16 +811,16 @@ void bta_ag_ci_rx_data(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_rcvd_slc_ready(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - APPL_TRACE_DEBUG("bta_ag_rcvd_slc_ready: handle = %d", bta_ag_scb_to_idx(p_scb)); - - if (bta_ag_cb.parse_mode == BTA_AG_PASS_THROUGH) - { - /* In pass-through mode, BTA knows that SLC is ready only through call-in. */ - bta_ag_svc_conn_open(p_scb, NULL); - } +void bta_ag_rcvd_slc_ready(tBTA_AG_SCB* p_scb, + UNUSED_ATTR tBTA_AG_DATA* p_data) { + APPL_TRACE_DEBUG("bta_ag_rcvd_slc_ready: handle = %d", + bta_ag_scb_to_idx(p_scb)); + + if (bta_ag_cb.parse_mode == BTA_AG_PASS_THROUGH) { + /* In pass-through mode, BTA knows that SLC is ready only through call-in. + */ + bta_ag_svc_conn_open(p_scb, NULL); + } } /******************************************************************************* @@ -905,41 +833,36 @@ void bta_ag_rcvd_slc_ready(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_setcodec(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ +void bta_ag_setcodec(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { #if (BTM_WBS_INCLUDED == TRUE) - tBTA_AG_PEER_CODEC codec_type = p_data->api_setcodec.codec; - tBTA_AG_VAL val; - - /* Check if the requested codec type is valid */ - if((codec_type != BTA_AG_CODEC_NONE) && - (codec_type != BTA_AG_CODEC_CVSD) && - (codec_type != BTA_AG_CODEC_MSBC)) - { - val.num = codec_type; - val.hdr.status = BTA_AG_FAIL_RESOURCES; - APPL_TRACE_ERROR("bta_ag_setcodec error: unsupported codec type %d", codec_type); - (*bta_ag_cb.p_cback)(BTA_AG_WBS_EVT, (tBTA_AG *) &val); - return; - } - - if((p_scb->peer_codecs & codec_type) || (codec_type == BTA_AG_CODEC_NONE) || - (codec_type == BTA_AG_CODEC_CVSD)) - { - p_scb->sco_codec = codec_type; - p_scb->codec_updated = true; - val.num = codec_type; - val.hdr.status = BTA_AG_SUCCESS; - APPL_TRACE_DEBUG("bta_ag_setcodec: Updated codec type %d", codec_type); - } - else - { - val.num = codec_type; - val.hdr.status = BTA_AG_FAIL_RESOURCES; - APPL_TRACE_ERROR("bta_ag_setcodec error: unsupported codec type %d", codec_type); - } - - (*bta_ag_cb.p_cback)(BTA_AG_WBS_EVT, (tBTA_AG *) &val); + tBTA_AG_PEER_CODEC codec_type = p_data->api_setcodec.codec; + tBTA_AG_VAL val; + + /* Check if the requested codec type is valid */ + if ((codec_type != BTA_AG_CODEC_NONE) && (codec_type != BTA_AG_CODEC_CVSD) && + (codec_type != BTA_AG_CODEC_MSBC)) { + val.num = codec_type; + val.hdr.status = BTA_AG_FAIL_RESOURCES; + APPL_TRACE_ERROR("bta_ag_setcodec error: unsupported codec type %d", + codec_type); + (*bta_ag_cb.p_cback)(BTA_AG_WBS_EVT, (tBTA_AG*)&val); + return; + } + + if ((p_scb->peer_codecs & codec_type) || (codec_type == BTA_AG_CODEC_NONE) || + (codec_type == BTA_AG_CODEC_CVSD)) { + p_scb->sco_codec = codec_type; + p_scb->codec_updated = true; + val.num = codec_type; + val.hdr.status = BTA_AG_SUCCESS; + APPL_TRACE_DEBUG("bta_ag_setcodec: Updated codec type %d", codec_type); + } else { + val.num = codec_type; + val.hdr.status = BTA_AG_FAIL_RESOURCES; + APPL_TRACE_ERROR("bta_ag_setcodec error: unsupported codec type %d", + codec_type); + } + + (*bta_ag_cb.p_cback)(BTA_AG_WBS_EVT, (tBTA_AG*)&val); #endif } - diff --git a/system/bta/ag/bta_ag_api.cc b/system/bta/ag/bta_ag_api.cc index a0f39ac06aa..6df3a1e4178 100644 --- a/system/bta/ag/bta_ag_api.cc +++ b/system/bta/ag/bta_ag_api.cc @@ -24,22 +24,18 @@ * ******************************************************************************/ -#include "bta_api.h" -#include "bta_sys.h" #include "bta_ag_api.h" -#include "bta_ag_int.h" -#include "bt_common.h" #include +#include "bt_common.h" +#include "bta_ag_int.h" +#include "bta_api.h" +#include "bta_sys.h" /***************************************************************************** * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_ag_reg = -{ - bta_ag_hdl_event, - BTA_AgDisable -}; +static const tBTA_SYS_REG bta_ag_reg = {bta_ag_hdl_event, BTA_AgDisable}; /******************************************************************************* * @@ -54,28 +50,28 @@ static const tBTA_SYS_REG bta_ag_reg = * Returns BTA_SUCCESS if OK, BTA_FAILURE otherwise. * ******************************************************************************/ -tBTA_STATUS BTA_AgEnable(tBTA_AG_PARSE_MODE parse_mode, tBTA_AG_CBACK *p_cback) -{ - /* Error if AG is already enabled, or AG is in the middle of disabling. */ - for (int idx = 0; idx < BTA_AG_NUM_SCB; idx++) { - if (bta_ag_cb.scb[idx].in_use) { - APPL_TRACE_ERROR ("BTA_AgEnable: FAILED, AG already enabled."); - return BTA_FAILURE; - } +tBTA_STATUS BTA_AgEnable(tBTA_AG_PARSE_MODE parse_mode, + tBTA_AG_CBACK* p_cback) { + /* Error if AG is already enabled, or AG is in the middle of disabling. */ + for (int idx = 0; idx < BTA_AG_NUM_SCB; idx++) { + if (bta_ag_cb.scb[idx].in_use) { + APPL_TRACE_ERROR("BTA_AgEnable: FAILED, AG already enabled."); + return BTA_FAILURE; } + } - /* register with BTA system manager */ - bta_sys_register(BTA_ID_AG, &bta_ag_reg); + /* register with BTA system manager */ + bta_sys_register(BTA_ID_AG, &bta_ag_reg); - tBTA_AG_API_ENABLE *p_buf = - (tBTA_AG_API_ENABLE *)osi_malloc(sizeof(tBTA_AG_API_ENABLE)); - p_buf->hdr.event = BTA_AG_API_ENABLE_EVT; - p_buf->parse_mode = parse_mode; - p_buf->p_cback = p_cback; + tBTA_AG_API_ENABLE* p_buf = + (tBTA_AG_API_ENABLE*)osi_malloc(sizeof(tBTA_AG_API_ENABLE)); + p_buf->hdr.event = BTA_AG_API_ENABLE_EVT; + p_buf->parse_mode = parse_mode; + p_buf->p_cback = p_cback; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); - return BTA_SUCCESS; + return BTA_SUCCESS; } /******************************************************************************* @@ -88,13 +84,12 @@ tBTA_STATUS BTA_AgEnable(tBTA_AG_PARSE_MODE parse_mode, tBTA_AG_CBACK *p_cback) * Returns void * ******************************************************************************/ -void BTA_AgDisable(void) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AgDisable(void) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AG_API_DISABLE_EVT; + p_buf->event = BTA_AG_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -107,25 +102,25 @@ void BTA_AgDisable(void) * Returns void * ******************************************************************************/ -void BTA_AgRegister(tBTA_SERVICE_MASK services, tBTA_SEC sec_mask,tBTA_AG_FEAT features, - const char * p_service_names[], uint8_t app_id) -{ - tBTA_AG_API_REGISTER *p_buf = - (tBTA_AG_API_REGISTER *)osi_malloc(sizeof(tBTA_AG_API_REGISTER)); - - p_buf->hdr.event = BTA_AG_API_REGISTER_EVT; - p_buf->features = features; - p_buf->sec_mask = sec_mask; - p_buf->services = services; - p_buf->app_id = app_id; - for (int i = 0; i < BTA_AG_NUM_IDX; i++) { - if (p_service_names[i]) - strlcpy(p_buf->p_name[i], p_service_names[i], BTA_SERVICE_NAME_LEN); - else - p_buf->p_name[i][0] = 0; - } - - bta_sys_sendmsg(p_buf); +void BTA_AgRegister(tBTA_SERVICE_MASK services, tBTA_SEC sec_mask, + tBTA_AG_FEAT features, const char* p_service_names[], + uint8_t app_id) { + tBTA_AG_API_REGISTER* p_buf = + (tBTA_AG_API_REGISTER*)osi_malloc(sizeof(tBTA_AG_API_REGISTER)); + + p_buf->hdr.event = BTA_AG_API_REGISTER_EVT; + p_buf->features = features; + p_buf->sec_mask = sec_mask; + p_buf->services = services; + p_buf->app_id = app_id; + for (int i = 0; i < BTA_AG_NUM_IDX; i++) { + if (p_service_names[i]) + strlcpy(p_buf->p_name[i], p_service_names[i], BTA_SERVICE_NAME_LEN); + else + p_buf->p_name[i][0] = 0; + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -138,14 +133,13 @@ void BTA_AgRegister(tBTA_SERVICE_MASK services, tBTA_SEC sec_mask,tBTA_AG_FEAT f * Returns void * ******************************************************************************/ -void BTA_AgDeregister(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AgDeregister(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AG_API_DEREGISTER_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_AG_API_DEREGISTER_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -161,18 +155,18 @@ void BTA_AgDeregister(uint16_t handle) * Returns void * ******************************************************************************/ -void BTA_AgOpen(uint16_t handle, BD_ADDR bd_addr, tBTA_SEC sec_mask, tBTA_SERVICE_MASK services) -{ - tBTA_AG_API_OPEN *p_buf = - (tBTA_AG_API_OPEN *)osi_malloc(sizeof(tBTA_AG_API_OPEN)); - - p_buf->hdr.event = BTA_AG_API_OPEN_EVT; - p_buf->hdr.layer_specific = handle; - bdcpy(p_buf->bd_addr, bd_addr); - p_buf->services = services; - p_buf->sec_mask = sec_mask; - - bta_sys_sendmsg(p_buf); +void BTA_AgOpen(uint16_t handle, BD_ADDR bd_addr, tBTA_SEC sec_mask, + tBTA_SERVICE_MASK services) { + tBTA_AG_API_OPEN* p_buf = + (tBTA_AG_API_OPEN*)osi_malloc(sizeof(tBTA_AG_API_OPEN)); + + p_buf->hdr.event = BTA_AG_API_OPEN_EVT; + p_buf->hdr.layer_specific = handle; + bdcpy(p_buf->bd_addr, bd_addr); + p_buf->services = services; + p_buf->sec_mask = sec_mask; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -186,14 +180,13 @@ void BTA_AgOpen(uint16_t handle, BD_ADDR bd_addr, tBTA_SEC sec_mask, tBTA_SERVIC * Returns void * ******************************************************************************/ -void BTA_AgClose(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AgClose(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AG_API_CLOSE_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_AG_API_CLOSE_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -207,14 +200,13 @@ void BTA_AgClose(uint16_t handle) * Returns void * ******************************************************************************/ -void BTA_AgAudioOpen(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AgAudioOpen(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AG_API_AUDIO_OPEN_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_AG_API_AUDIO_OPEN_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -228,14 +220,13 @@ void BTA_AgAudioOpen(uint16_t handle) * Returns void * ******************************************************************************/ -void BTA_AgAudioClose(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AgAudioClose(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AG_API_AUDIO_CLOSE_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_AG_API_AUDIO_CLOSE_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -250,18 +241,17 @@ void BTA_AgAudioClose(uint16_t handle) * Returns void * ******************************************************************************/ -void BTA_AgResult(uint16_t handle, tBTA_AG_RES result, tBTA_AG_RES_DATA *p_data) -{ - tBTA_AG_API_RESULT *p_buf = - (tBTA_AG_API_RESULT *)osi_malloc(sizeof(tBTA_AG_API_RESULT)); - - p_buf->hdr.event = BTA_AG_API_RESULT_EVT; - p_buf->hdr.layer_specific = handle; - p_buf->result = result; - if (p_data) - memcpy(&p_buf->data, p_data, sizeof(p_buf->data)); - - bta_sys_sendmsg(p_buf); +void BTA_AgResult(uint16_t handle, tBTA_AG_RES result, + tBTA_AG_RES_DATA* p_data) { + tBTA_AG_API_RESULT* p_buf = + (tBTA_AG_API_RESULT*)osi_malloc(sizeof(tBTA_AG_API_RESULT)); + + p_buf->hdr.event = BTA_AG_API_RESULT_EVT; + p_buf->hdr.layer_specific = handle; + p_buf->result = result; + if (p_data) memcpy(&p_buf->data, p_data, sizeof(p_buf->data)); + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -276,14 +266,13 @@ void BTA_AgResult(uint16_t handle, tBTA_AG_RES result, tBTA_AG_RES_DATA *p_data) * Returns void * ******************************************************************************/ -void BTA_AgSetCodec(uint16_t handle, tBTA_AG_PEER_CODEC codec) -{ - tBTA_AG_API_SETCODEC *p_buf = - (tBTA_AG_API_SETCODEC *)osi_malloc(sizeof(tBTA_AG_API_SETCODEC)); +void BTA_AgSetCodec(uint16_t handle, tBTA_AG_PEER_CODEC codec) { + tBTA_AG_API_SETCODEC* p_buf = + (tBTA_AG_API_SETCODEC*)osi_malloc(sizeof(tBTA_AG_API_SETCODEC)); - p_buf->hdr.event = BTA_AG_API_SETCODEC_EVT; - p_buf->hdr.layer_specific = handle; - p_buf->codec = codec; + p_buf->hdr.event = BTA_AG_API_SETCODEC_EVT; + p_buf->hdr.layer_specific = handle; + p_buf->codec = codec; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } diff --git a/system/bta/ag/bta_ag_at.cc b/system/bta/ag/bta_ag_at.cc index ccd21a375fc..3e4868bff1f 100644 --- a/system/bta/ag/bta_ag_at.cc +++ b/system/bta/ag/bta_ag_at.cc @@ -24,7 +24,6 @@ #include -#include "bta_ag_at.h" #include "bt_common.h" #include "bta_ag_at.h" #include "utl.h" @@ -43,10 +42,9 @@ * Returns void * *****************************************************************************/ -void bta_ag_at_init(tBTA_AG_AT_CB *p_cb) -{ - p_cb->p_cmd_buf = NULL; - p_cb->cmd_pos = 0; +void bta_ag_at_init(tBTA_AG_AT_CB* p_cb) { + p_cb->p_cmd_buf = NULL; + p_cb->cmd_pos = 0; } /****************************************************************************** @@ -61,10 +59,9 @@ void bta_ag_at_init(tBTA_AG_AT_CB *p_cb) * Returns void * *****************************************************************************/ -void bta_ag_at_reinit(tBTA_AG_AT_CB *p_cb) -{ - osi_free_and_reset((void **)&p_cb->p_cmd_buf); - p_cb->cmd_pos = 0; +void bta_ag_at_reinit(tBTA_AG_AT_CB* p_cb) { + osi_free_and_reset((void**)&p_cb->p_cmd_buf); + p_cb->cmd_pos = 0; } /****************************************************************************** @@ -79,101 +76,78 @@ void bta_ag_at_reinit(tBTA_AG_AT_CB *p_cb) * Returns void * *****************************************************************************/ -void bta_ag_process_at(tBTA_AG_AT_CB *p_cb) -{ - uint16_t idx; - uint8_t arg_type; - char *p_arg; - int16_t int_arg = 0; - /* loop through at command table looking for match */ - for (idx = 0; p_cb->p_at_tbl[idx].p_cmd[0] != 0; idx++) - { - if (!utl_strucmp(p_cb->p_at_tbl[idx].p_cmd, p_cb->p_cmd_buf)) - { - break; - } +void bta_ag_process_at(tBTA_AG_AT_CB* p_cb) { + uint16_t idx; + uint8_t arg_type; + char* p_arg; + int16_t int_arg = 0; + /* loop through at command table looking for match */ + for (idx = 0; p_cb->p_at_tbl[idx].p_cmd[0] != 0; idx++) { + if (!utl_strucmp(p_cb->p_at_tbl[idx].p_cmd, p_cb->p_cmd_buf)) { + break; } + } - /* if there is a match; verify argument type */ - if (p_cb->p_at_tbl[idx].p_cmd[0] != 0) - { - /* start of argument is p + strlen matching command */ - p_arg = p_cb->p_cmd_buf + strlen(p_cb->p_at_tbl[idx].p_cmd); + /* if there is a match; verify argument type */ + if (p_cb->p_at_tbl[idx].p_cmd[0] != 0) { + /* start of argument is p + strlen matching command */ + p_arg = p_cb->p_cmd_buf + strlen(p_cb->p_at_tbl[idx].p_cmd); - /* if no argument */ - if (p_arg[0] == 0) - { - arg_type = BTA_AG_AT_NONE; - } - /* else if arg is '?' and it is last character */ - else if (p_arg[0] == '?' && p_arg[1] == 0) - { - /* we have a read */ - arg_type = BTA_AG_AT_READ; - } - /* else if arg is '=' */ - else if (p_arg[0] == '=' && p_arg[1] != 0) - { - if (p_arg[1] == '?' && p_arg[2] == 0) - { - /* we have a test */ - arg_type = BTA_AG_AT_TEST; - } - else - { - /* we have a set */ - arg_type = BTA_AG_AT_SET; - - /* skip past '=' */ - p_arg++; - } - } - else - /* else it is freeform argument */ - { - arg_type = BTA_AG_AT_FREE; - } + /* if no argument */ + if (p_arg[0] == 0) { + arg_type = BTA_AG_AT_NONE; + } + /* else if arg is '?' and it is last character */ + else if (p_arg[0] == '?' && p_arg[1] == 0) { + /* we have a read */ + arg_type = BTA_AG_AT_READ; + } + /* else if arg is '=' */ + else if (p_arg[0] == '=' && p_arg[1] != 0) { + if (p_arg[1] == '?' && p_arg[2] == 0) { + /* we have a test */ + arg_type = BTA_AG_AT_TEST; + } else { + /* we have a set */ + arg_type = BTA_AG_AT_SET; + + /* skip past '=' */ + p_arg++; + } + } else + /* else it is freeform argument */ + { + arg_type = BTA_AG_AT_FREE; + } - /* if arguments match command capabilities */ - if ((arg_type & p_cb->p_at_tbl[idx].arg_type) != 0) - { - /* if it's a set integer check max, min range */ - if (arg_type == BTA_AG_AT_SET && - p_cb->p_at_tbl[idx].fmt == BTA_AG_AT_INT) - { - int_arg = utl_str2int(p_arg); - if (int_arg < (int16_t) p_cb->p_at_tbl[idx].min || - int_arg > (int16_t) p_cb->p_at_tbl[idx].max) - { - /* arg out of range; error */ - (*p_cb->p_err_cback)(p_cb->p_user, false, NULL); - } - else - { - - (*p_cb->p_cmd_cback)(p_cb->p_user, - p_cb->p_at_tbl[idx].command_id, - arg_type, p_arg, int_arg); - } - } - else - { - (*p_cb->p_cmd_cback)(p_cb->p_user, - p_cb->p_at_tbl[idx].command_id, - arg_type, p_arg, int_arg); - } - } - /* else error */ - else - { - (*p_cb->p_err_cback)(p_cb->p_user, false, NULL); + /* if arguments match command capabilities */ + if ((arg_type & p_cb->p_at_tbl[idx].arg_type) != 0) { + /* if it's a set integer check max, min range */ + if (arg_type == BTA_AG_AT_SET && + p_cb->p_at_tbl[idx].fmt == BTA_AG_AT_INT) { + int_arg = utl_str2int(p_arg); + if (int_arg < (int16_t)p_cb->p_at_tbl[idx].min || + int_arg > (int16_t)p_cb->p_at_tbl[idx].max) { + /* arg out of range; error */ + (*p_cb->p_err_cback)(p_cb->p_user, false, NULL); + } else { + (*p_cb->p_cmd_cback)(p_cb->p_user, p_cb->p_at_tbl[idx].command_id, + arg_type, p_arg, int_arg); } + } else { + (*p_cb->p_cmd_cback)(p_cb->p_user, p_cb->p_at_tbl[idx].command_id, + arg_type, p_arg, int_arg); + } } - /* else no match call error callback */ - else - { - (*p_cb->p_err_cback)(p_cb->p_user, true, p_cb->p_cmd_buf); + /* else error */ + else { + (*p_cb->p_err_cback)(p_cb->p_user, false, NULL); } + } + /* else no match call error callback */ + else { + (*p_cb->p_err_cback)(p_cb->p_user, true, p_cb->p_cmd_buf); + } } /****************************************************************************** @@ -188,58 +162,48 @@ void bta_ag_process_at(tBTA_AG_AT_CB *p_cb) * Returns void * *****************************************************************************/ -void bta_ag_at_parse(tBTA_AG_AT_CB *p_cb, char *p_buf, uint16_t len) -{ - int i = 0; - char* p_save; +void bta_ag_at_parse(tBTA_AG_AT_CB* p_cb, char* p_buf, uint16_t len) { + int i = 0; + char* p_save; - if (p_cb->p_cmd_buf == NULL) { - p_cb->p_cmd_buf = (char *)osi_malloc(p_cb->cmd_max_len); - p_cb->cmd_pos = 0; - } - - for (i = 0; i < len;) - { - while (p_cb->cmd_pos < p_cb->cmd_max_len-1 && i < len) - { - /* Skip null characters between AT commands. */ - if ((p_cb->cmd_pos == 0) && (p_buf[i] == 0)) - { - i++; - continue; - } - - p_cb->p_cmd_buf[p_cb->cmd_pos] = p_buf[i++]; - if ( p_cb->p_cmd_buf[p_cb->cmd_pos] == '\r' || p_cb->p_cmd_buf[p_cb->cmd_pos] == '\n') - { - p_cb->p_cmd_buf[p_cb->cmd_pos] = 0; - if ((p_cb->cmd_pos > 2) && - (p_cb->p_cmd_buf[0] == 'A' || p_cb->p_cmd_buf[0] == 'a') && - (p_cb->p_cmd_buf[1] == 'T' || p_cb->p_cmd_buf[1] == 't')) - { - p_save = p_cb->p_cmd_buf; - p_cb->p_cmd_buf += 2; - bta_ag_process_at(p_cb); - p_cb->p_cmd_buf = p_save; - } - - p_cb->cmd_pos = 0; - - } - else if( p_cb->p_cmd_buf[p_cb->cmd_pos] == 0x1A || p_cb->p_cmd_buf[p_cb->cmd_pos] == 0x1B ) - { - p_cb->p_cmd_buf[++p_cb->cmd_pos] = 0; - (*p_cb->p_err_cback)(p_cb->p_user, true, p_cb->p_cmd_buf); - p_cb->cmd_pos = 0; - } - else - { - ++p_cb->cmd_pos; - } + if (p_cb->p_cmd_buf == NULL) { + p_cb->p_cmd_buf = (char*)osi_malloc(p_cb->cmd_max_len); + p_cb->cmd_pos = 0; + } + + for (i = 0; i < len;) { + while (p_cb->cmd_pos < p_cb->cmd_max_len - 1 && i < len) { + /* Skip null characters between AT commands. */ + if ((p_cb->cmd_pos == 0) && (p_buf[i] == 0)) { + i++; + continue; + } + + p_cb->p_cmd_buf[p_cb->cmd_pos] = p_buf[i++]; + if (p_cb->p_cmd_buf[p_cb->cmd_pos] == '\r' || + p_cb->p_cmd_buf[p_cb->cmd_pos] == '\n') { + p_cb->p_cmd_buf[p_cb->cmd_pos] = 0; + if ((p_cb->cmd_pos > 2) && + (p_cb->p_cmd_buf[0] == 'A' || p_cb->p_cmd_buf[0] == 'a') && + (p_cb->p_cmd_buf[1] == 'T' || p_cb->p_cmd_buf[1] == 't')) { + p_save = p_cb->p_cmd_buf; + p_cb->p_cmd_buf += 2; + bta_ag_process_at(p_cb); + p_cb->p_cmd_buf = p_save; } - if (i < len) - p_cb->cmd_pos = 0; + p_cb->cmd_pos = 0; + + } else if (p_cb->p_cmd_buf[p_cb->cmd_pos] == 0x1A || + p_cb->p_cmd_buf[p_cb->cmd_pos] == 0x1B) { + p_cb->p_cmd_buf[++p_cb->cmd_pos] = 0; + (*p_cb->p_err_cback)(p_cb->p_user, true, p_cb->p_cmd_buf); + p_cb->cmd_pos = 0; + } else { + ++p_cb->cmd_pos; + } } -} + if (i < len) p_cb->cmd_pos = 0; + } +} diff --git a/system/bta/ag/bta_ag_at.h b/system/bta/ag/bta_ag_at.h index c75a9663159..f5636e0e0ea 100644 --- a/system/bta/ag/bta_ag_at.h +++ b/system/bta/ag/bta_ag_at.h @@ -33,49 +33,48 @@ extern "C" { ****************************************************************************/ /* AT command argument capabilities */ -#define BTA_AG_AT_NONE 0x01 /* no argument */ -#define BTA_AG_AT_SET 0x02 /* set value */ -#define BTA_AG_AT_READ 0x04 /* read value */ -#define BTA_AG_AT_TEST 0x08 /* test value range */ -#define BTA_AG_AT_FREE 0x10 /* freeform argument */ +#define BTA_AG_AT_NONE 0x01 /* no argument */ +#define BTA_AG_AT_SET 0x02 /* set value */ +#define BTA_AG_AT_READ 0x04 /* read value */ +#define BTA_AG_AT_TEST 0x08 /* test value range */ +#define BTA_AG_AT_FREE 0x10 /* freeform argument */ /* AT command argument format */ -#define BTA_AG_AT_STR 0 /* string */ -#define BTA_AG_AT_INT 1 /* integer */ +#define BTA_AG_AT_STR 0 /* string */ +#define BTA_AG_AT_INT 1 /* integer */ /***************************************************************************** * Data types ****************************************************************************/ /* AT command table element */ -typedef struct -{ - const char *p_cmd; /* AT command string */ - size_t command_id; /* passed to the callback on p_cmd match */ - uint8_t arg_type; /* allowable argument type syntax */ - uint8_t fmt; /* whether arg is int or string */ - uint8_t min; /* minimum value for int arg */ - int16_t max; /* maximum value for int arg */ +typedef struct { + const char* p_cmd; /* AT command string */ + size_t command_id; /* passed to the callback on p_cmd match */ + uint8_t arg_type; /* allowable argument type syntax */ + uint8_t fmt; /* whether arg is int or string */ + uint8_t min; /* minimum value for int arg */ + int16_t max; /* maximum value for int arg */ } tBTA_AG_AT_CMD; /* callback function executed when command is parsed */ -typedef void (tBTA_AG_AT_CMD_CBACK)(void *p_user, uint16_t command_id, uint8_t arg_type, - char *p_arg, int16_t int_arg); +typedef void(tBTA_AG_AT_CMD_CBACK)(void* p_user, uint16_t command_id, + uint8_t arg_type, char* p_arg, + int16_t int_arg); /* callback function executed to send "ERROR" result code */ -typedef void (tBTA_AG_AT_ERR_CBACK)(void *p_user, bool unknown, char *p_arg); +typedef void(tBTA_AG_AT_ERR_CBACK)(void* p_user, bool unknown, char* p_arg); /* AT command parsing control block */ -typedef struct -{ - tBTA_AG_AT_CMD *p_at_tbl; /* AT command table */ - tBTA_AG_AT_CMD_CBACK *p_cmd_cback; /* command callback */ - tBTA_AG_AT_ERR_CBACK *p_err_cback; /* error callback */ - void *p_user; /* user-defined data */ - char *p_cmd_buf; /* temp parsing buffer */ - uint16_t cmd_pos; /* position in temp buffer */ - uint16_t cmd_max_len; /* length of temp buffer to allocate */ - uint8_t state; /* parsing state */ +typedef struct { + tBTA_AG_AT_CMD* p_at_tbl; /* AT command table */ + tBTA_AG_AT_CMD_CBACK* p_cmd_cback; /* command callback */ + tBTA_AG_AT_ERR_CBACK* p_err_cback; /* error callback */ + void* p_user; /* user-defined data */ + char* p_cmd_buf; /* temp parsing buffer */ + uint16_t cmd_pos; /* position in temp buffer */ + uint16_t cmd_max_len; /* length of temp buffer to allocate */ + uint8_t state; /* parsing state */ } tBTA_AG_AT_CB; /***************************************************************************** @@ -92,7 +91,7 @@ typedef struct * Returns void * ****************************************************************************/ -extern void bta_ag_at_init(tBTA_AG_AT_CB *p_cb); +extern void bta_ag_at_init(tBTA_AG_AT_CB* p_cb); /***************************************************************************** * @@ -106,7 +105,7 @@ extern void bta_ag_at_init(tBTA_AG_AT_CB *p_cb); * Returns void * ****************************************************************************/ -extern void bta_ag_at_reinit(tBTA_AG_AT_CB *p_cb); +extern void bta_ag_at_reinit(tBTA_AG_AT_CB* p_cb); /***************************************************************************** * @@ -120,7 +119,7 @@ extern void bta_ag_at_reinit(tBTA_AG_AT_CB *p_cb); * Returns void * ****************************************************************************/ -extern void bta_ag_at_parse(tBTA_AG_AT_CB *p_cb, char *p_buf, uint16_t len); +extern void bta_ag_at_parse(tBTA_AG_AT_CB* p_cb, char* p_buf, uint16_t len); #ifdef __cplusplus } diff --git a/system/bta/ag/bta_ag_cfg.cc b/system/bta/ag/bta_ag_cfg.cc index 9c43da03fd2..9a1c8799b8e 100644 --- a/system/bta/ag/bta_ag_cfg.cc +++ b/system/bta/ag/bta_ag_cfg.cc @@ -24,57 +24,55 @@ ******************************************************************************/ #include "bt_common.h" -#include "bta_api.h" #include "bta_ag_api.h" #include "bta_ag_int.h" +#include "bta_api.h" #ifndef BTA_AG_CIND_INFO -#define BTA_AG_CIND_INFO "(\"call\",(0,1)),(\"callsetup\",(0-3)),(\"service\",(0-3)),(\"signal\",(0-6)),(\"roam\",(0,1)),(\"battchg\",(0-5)),(\"callheld\",(0-2)),(\"bearer\",(0-7))" +#define BTA_AG_CIND_INFO \ + "(\"call\",(0,1)),(\"callsetup\",(0-3)),(\"service\",(0-3)),(\"signal\",(0-" \ + "6)),(\"roam\",(0,1)),(\"battchg\",(0-5)),(\"callheld\",(0-2)),(\"bearer\"," \ + "(0-7))" #endif #ifndef BTA_AG_CHLD_VAL_ECC -#define BTA_AG_CHLD_VAL_ECC "(0,1,1x,2,2x,3,4)" +#define BTA_AG_CHLD_VAL_ECC "(0,1,1x,2,2x,3,4)" #endif #ifndef BTA_AG_CHLD_VAL -#define BTA_AG_CHLD_VAL "(0,1,2,3,4)" +#define BTA_AG_CHLD_VAL "(0,1,2,3,4)" #endif #ifndef BTA_AG_CONN_TIMEOUT -#define BTA_AG_CONN_TIMEOUT 5000 +#define BTA_AG_CONN_TIMEOUT 5000 #endif #ifndef BTA_AG_SCO_PKT_TYPES /* S1 packet type setting from HFP 1.5 spec */ -#define BTA_AG_SCO_PKT_TYPES /* BTM_SCO_LINK_ALL_PKT_MASK */ (BTM_SCO_LINK_ONLY_MASK | \ - BTM_SCO_PKT_TYPES_MASK_EV3 | \ - BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | \ - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | \ - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5) +#define BTA_AG_SCO_PKT_TYPES /* BTM_SCO_LINK_ALL_PKT_MASK */ \ + (BTM_SCO_LINK_ONLY_MASK | BTM_SCO_PKT_TYPES_MASK_EV3 | \ + BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | \ + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5) #endif #ifndef BTA_AG_BIND_INFO #define BTA_AG_BIND_INFO "(1)" #endif -const tBTA_AG_HF_IND bta_ag_local_hf_ind_cfg[] = -{ - /* The first row contains the number of indicators. Need to be updated accordingly */ - {BTA_AG_NUM_LOCAL_HF_IND, 0, 0, 0, 0}, +const tBTA_AG_HF_IND bta_ag_local_hf_ind_cfg[] = { + /* The first row contains the number of indicators. Need to be updated + accordingly */ + {BTA_AG_NUM_LOCAL_HF_IND, 0, 0, 0, 0}, - {1, 1, 1, 0, 1}, /* Enhanced Driver Status, supported, enabled, range 0 ~ 1 */ - {2, 1, 1, 0, 100} /* Battery Level Status, supported, enabled, range 0 ~ 100 */ + {1, 1, 1, 0, + 1}, /* Enhanced Driver Status, supported, enabled, range 0 ~ 1 */ + {2, 1, 1, 0, + 100} /* Battery Level Status, supported, enabled, range 0 ~ 100 */ }; -const tBTA_AG_CFG bta_ag_cfg = -{ - BTA_AG_CIND_INFO, - BTA_AG_BIND_INFO, - BTA_AG_NUM_LOCAL_HF_IND, - BTA_AG_CONN_TIMEOUT, - BTA_AG_SCO_PKT_TYPES, - BTA_AG_CHLD_VAL_ECC, - BTA_AG_CHLD_VAL -}; +const tBTA_AG_CFG bta_ag_cfg = {BTA_AG_CIND_INFO, BTA_AG_BIND_INFO, + BTA_AG_NUM_LOCAL_HF_IND, BTA_AG_CONN_TIMEOUT, + BTA_AG_SCO_PKT_TYPES, BTA_AG_CHLD_VAL_ECC, + BTA_AG_CHLD_VAL}; -tBTA_AG_CFG *p_bta_ag_cfg = (tBTA_AG_CFG *) &bta_ag_cfg; +tBTA_AG_CFG* p_bta_ag_cfg = (tBTA_AG_CFG*)&bta_ag_cfg; diff --git a/system/bta/ag/bta_ag_ci.cc b/system/bta/ag/bta_ag_ci.cc index b5959d32d3b..1fde9d84afb 100644 --- a/system/bta/ag/bta_ag_ci.cc +++ b/system/bta/ag/bta_ag_ci.cc @@ -24,11 +24,11 @@ #include -#include "bta_api.h" +#include "bt_common.h" #include "bta_ag_api.h" -#include "bta_ag_int.h" #include "bta_ag_ci.h" -#include "bt_common.h" +#include "bta_ag_int.h" +#include "bta_api.h" /****************************************************************************** * @@ -41,32 +41,30 @@ * Returns void * *****************************************************************************/ -void bta_ag_ci_rx_write(uint16_t handle, char *p_data, uint16_t len) -{ - uint16_t len_remaining = len; - char *p_data_area; +void bta_ag_ci_rx_write(uint16_t handle, char* p_data, uint16_t len) { + uint16_t len_remaining = len; + char* p_data_area; - if (len > (RFCOMM_DATA_BUF_SIZE - sizeof(tBTA_AG_CI_RX_WRITE) - 1)) - len = RFCOMM_DATA_BUF_SIZE - sizeof(tBTA_AG_CI_RX_WRITE) - 1; + if (len > (RFCOMM_DATA_BUF_SIZE - sizeof(tBTA_AG_CI_RX_WRITE) - 1)) + len = RFCOMM_DATA_BUF_SIZE - sizeof(tBTA_AG_CI_RX_WRITE) - 1; - while (len_remaining) { - if (len_remaining < len) - len = len_remaining; + while (len_remaining) { + if (len_remaining < len) len = len_remaining; - tBTA_AG_CI_RX_WRITE *p_buf = - (tBTA_AG_CI_RX_WRITE *)osi_malloc(sizeof(tBTA_AG_CI_RX_WRITE) + len + 1); - p_buf->hdr.event = BTA_AG_CI_RX_WRITE_EVT; - p_buf->hdr.layer_specific = handle; + tBTA_AG_CI_RX_WRITE* p_buf = + (tBTA_AG_CI_RX_WRITE*)osi_malloc(sizeof(tBTA_AG_CI_RX_WRITE) + len + 1); + p_buf->hdr.event = BTA_AG_CI_RX_WRITE_EVT; + p_buf->hdr.layer_specific = handle; - p_data_area = (char *)(p_buf+1); /* Point to data area after header */ - strncpy(p_data_area, p_data, len); - p_data_area[len] = 0; + p_data_area = (char*)(p_buf + 1); /* Point to data area after header */ + strncpy(p_data_area, p_data, len); + p_data_area[len] = 0; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); - len_remaining -= len; - p_data += len; - } + len_remaining -= len; + p_data += len; + } } /****************************************************************************** @@ -80,12 +78,11 @@ void bta_ag_ci_rx_write(uint16_t handle, char *p_data, uint16_t len) * Returns void * *****************************************************************************/ -void bta_ag_ci_slc_ready(uint16_t handle) -{ - tBTA_AG_DATA *p_buf = (tBTA_AG_DATA *)osi_malloc(sizeof(tBTA_AG_DATA)); +void bta_ag_ci_slc_ready(uint16_t handle) { + tBTA_AG_DATA* p_buf = (tBTA_AG_DATA*)osi_malloc(sizeof(tBTA_AG_DATA)); - p_buf->hdr.event = BTA_AG_CI_SLC_READY_EVT; - p_buf->hdr.layer_specific = handle; + p_buf->hdr.event = BTA_AG_CI_SLC_READY_EVT; + p_buf->hdr.layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } diff --git a/system/bta/ag/bta_ag_cmd.cc b/system/bta/ag/bta_ag_cmd.cc index 5a78cb03aa4..faa7de62a72 100644 --- a/system/bta/ag/bta_ag_cmd.cc +++ b/system/bta/ag/bta_ag_cmd.cc @@ -22,6 +22,7 @@ #include #include +#include "bt_common.h" #include "bt_target.h" #include "bt_types.h" #include "bta_ag_api.h" @@ -29,189 +30,176 @@ #include "bta_ag_int.h" #include "bta_api.h" #include "bta_sys.h" -#include "bt_common.h" -#include "osi/include/osi.h" #include "osi/include/log.h" +#include "osi/include/osi.h" #include "port_api.h" #include "utl.h" - /***************************************************************************** * Constants ****************************************************************************/ /* Ring timeout */ -#define BTA_AG_RING_TIMEOUT_MS (5 * 1000) /* 5 seconds */ +#define BTA_AG_RING_TIMEOUT_MS (5 * 1000) /* 5 seconds */ -#define BTA_AG_CMD_MAX_VAL 32767 /* Maximum value is signed 16-bit value */ +#define BTA_AG_CMD_MAX_VAL 32767 /* Maximum value is signed 16-bit value */ /* Invalid Chld command */ -#define BTA_AG_INVALID_CHLD 255 +#define BTA_AG_INVALID_CHLD 255 /* clip type constants */ -#define BTA_AG_CLIP_TYPE_MIN 128 -#define BTA_AG_CLIP_TYPE_MAX 175 -#define BTA_AG_CLIP_TYPE_DEFAULT 129 -#define BTA_AG_CLIP_TYPE_VOIP 255 +#define BTA_AG_CLIP_TYPE_MIN 128 +#define BTA_AG_CLIP_TYPE_MAX 175 +#define BTA_AG_CLIP_TYPE_DEFAULT 129 +#define BTA_AG_CLIP_TYPE_VOIP 255 -#define COLON_IDX_4_VGSVGM 4 +#define COLON_IDX_4_VGSVGM 4 /* Local events which will not trigger a higher layer callback */ -enum -{ - BTA_AG_LOCAL_EVT_FIRST = 0x100, - BTA_AG_LOCAL_EVT_CCWA, - BTA_AG_LOCAL_EVT_CLIP, - BTA_AG_LOCAL_EVT_CMER, - BTA_AG_LOCAL_EVT_BRSF, - BTA_AG_LOCAL_EVT_CMEE, - BTA_AG_LOCAL_EVT_BIA, - BTA_AG_LOCAL_EVT_BCC, +enum { + BTA_AG_LOCAL_EVT_FIRST = 0x100, + BTA_AG_LOCAL_EVT_CCWA, + BTA_AG_LOCAL_EVT_CLIP, + BTA_AG_LOCAL_EVT_CMER, + BTA_AG_LOCAL_EVT_BRSF, + BTA_AG_LOCAL_EVT_CMEE, + BTA_AG_LOCAL_EVT_BIA, + BTA_AG_LOCAL_EVT_BCC, }; /* AT command interpreter table for HSP */ -const tBTA_AG_AT_CMD bta_ag_hsp_cmd[] = -{ - {"+CKPD", BTA_AG_AT_CKPD_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 200, 200}, - {"+VGS", BTA_AG_SPK_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 15}, - {"+VGM", BTA_AG_MIC_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 15}, +const tBTA_AG_AT_CMD bta_ag_hsp_cmd[] = { + {"+CKPD", BTA_AG_AT_CKPD_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 200, 200}, + {"+VGS", BTA_AG_SPK_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 15}, + {"+VGM", BTA_AG_MIC_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 15}, /* End-of-table marker used to stop lookup iteration */ - {"", 0, 0, 0, 0, 0} -}; + {"", 0, 0, 0, 0, 0}}; /* AT command interpreter table for HFP */ -const tBTA_AG_AT_CMD bta_ag_hfp_cmd[] = -{ - {"A", BTA_AG_AT_A_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, - {"D", BTA_AG_AT_D_EVT, BTA_AG_AT_NONE | BTA_AG_AT_FREE, BTA_AG_AT_STR, 0, 0}, - {"+VGS", BTA_AG_SPK_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 15}, - {"+VGM", BTA_AG_MIC_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 15}, - {"+CCWA", BTA_AG_LOCAL_EVT_CCWA, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 1}, +const tBTA_AG_AT_CMD bta_ag_hfp_cmd[] = { + {"A", BTA_AG_AT_A_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, + {"D", BTA_AG_AT_D_EVT, BTA_AG_AT_NONE | BTA_AG_AT_FREE, BTA_AG_AT_STR, 0, + 0}, + {"+VGS", BTA_AG_SPK_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 15}, + {"+VGM", BTA_AG_MIC_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 15}, + {"+CCWA", BTA_AG_LOCAL_EVT_CCWA, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 1}, /* Consider CHLD as str to take care of indexes for ECC */ - {"+CHLD", BTA_AG_AT_CHLD_EVT, BTA_AG_AT_SET | BTA_AG_AT_TEST, BTA_AG_AT_STR, 0, 4}, - {"+CHUP", BTA_AG_AT_CHUP_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, - {"+CIND", BTA_AG_AT_CIND_EVT, BTA_AG_AT_READ | BTA_AG_AT_TEST, BTA_AG_AT_STR, 0, 0}, - {"+CLIP", BTA_AG_LOCAL_EVT_CLIP, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 1}, - {"+CMER", BTA_AG_LOCAL_EVT_CMER, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, - {"+VTS", BTA_AG_AT_VTS_EVT, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, - {"+BINP", BTA_AG_AT_BINP_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 1, 1}, - {"+BLDN", BTA_AG_AT_BLDN_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, - {"+BVRA", BTA_AG_AT_BVRA_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 1}, - {"+BRSF", BTA_AG_LOCAL_EVT_BRSF, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, BTA_AG_CMD_MAX_VAL}, - {"+NREC", BTA_AG_AT_NREC_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 0}, - {"+CNUM", BTA_AG_AT_CNUM_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, - {"+BTRH", BTA_AG_AT_BTRH_EVT, BTA_AG_AT_READ | BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 2}, - {"+CLCC", BTA_AG_AT_CLCC_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, - {"+COPS", BTA_AG_AT_COPS_EVT, BTA_AG_AT_READ | BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, - {"+CMEE", BTA_AG_LOCAL_EVT_CMEE, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 1}, - {"+BIA", BTA_AG_LOCAL_EVT_BIA, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 20}, - {"+CBC", BTA_AG_AT_CBC_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 100}, - {"+BCC", BTA_AG_LOCAL_EVT_BCC, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, - {"+BCS", BTA_AG_AT_BCS_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, BTA_AG_CMD_MAX_VAL}, - {"+BIND", BTA_AG_AT_BIND_EVT, BTA_AG_AT_SET | BTA_AG_AT_READ | BTA_AG_AT_TEST, BTA_AG_AT_STR, 0, 0}, - {"+BIEV", BTA_AG_AT_BIEV_EVT, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, - {"+BAC", BTA_AG_AT_BAC_EVT, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, + {"+CHLD", BTA_AG_AT_CHLD_EVT, BTA_AG_AT_SET | BTA_AG_AT_TEST, BTA_AG_AT_STR, + 0, 4}, + {"+CHUP", BTA_AG_AT_CHUP_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, + {"+CIND", BTA_AG_AT_CIND_EVT, BTA_AG_AT_READ | BTA_AG_AT_TEST, + BTA_AG_AT_STR, 0, 0}, + {"+CLIP", BTA_AG_LOCAL_EVT_CLIP, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 1}, + {"+CMER", BTA_AG_LOCAL_EVT_CMER, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, + {"+VTS", BTA_AG_AT_VTS_EVT, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, + {"+BINP", BTA_AG_AT_BINP_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 1, 1}, + {"+BLDN", BTA_AG_AT_BLDN_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, + {"+BVRA", BTA_AG_AT_BVRA_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 1}, + {"+BRSF", BTA_AG_LOCAL_EVT_BRSF, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, + BTA_AG_CMD_MAX_VAL}, + {"+NREC", BTA_AG_AT_NREC_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 0}, + {"+CNUM", BTA_AG_AT_CNUM_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, + {"+BTRH", BTA_AG_AT_BTRH_EVT, BTA_AG_AT_READ | BTA_AG_AT_SET, BTA_AG_AT_INT, + 0, 2}, + {"+CLCC", BTA_AG_AT_CLCC_EVT, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, + {"+COPS", BTA_AG_AT_COPS_EVT, BTA_AG_AT_READ | BTA_AG_AT_SET, BTA_AG_AT_STR, + 0, 0}, + {"+CMEE", BTA_AG_LOCAL_EVT_CMEE, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 1}, + {"+BIA", BTA_AG_LOCAL_EVT_BIA, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 20}, + {"+CBC", BTA_AG_AT_CBC_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, 100}, + {"+BCC", BTA_AG_LOCAL_EVT_BCC, BTA_AG_AT_NONE, BTA_AG_AT_STR, 0, 0}, + {"+BCS", BTA_AG_AT_BCS_EVT, BTA_AG_AT_SET, BTA_AG_AT_INT, 0, + BTA_AG_CMD_MAX_VAL}, + {"+BIND", BTA_AG_AT_BIND_EVT, + BTA_AG_AT_SET | BTA_AG_AT_READ | BTA_AG_AT_TEST, BTA_AG_AT_STR, 0, 0}, + {"+BIEV", BTA_AG_AT_BIEV_EVT, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, + {"+BAC", BTA_AG_AT_BAC_EVT, BTA_AG_AT_SET, BTA_AG_AT_STR, 0, 0}, /* End-of-table marker used to stop lookup iteration */ - {"", 0, 0, 0, 0, 0} -}; + {"", 0, 0, 0, 0, 0}}; /* AT result code table element */ -typedef struct -{ - const char *result_string; /* AT result string */ - size_t result_id; /* Local or BTA result id */ - uint8_t arg_type; /* whether argument is int or string */ +typedef struct { + const char* result_string; /* AT result string */ + size_t result_id; /* Local or BTA result id */ + uint8_t arg_type; /* whether argument is int or string */ } tBTA_AG_RESULT; /* AT result code argument types */ -enum -{ - BTA_AG_RES_FMT_NONE, /* no argument */ - BTA_AG_RES_FMT_INT, /* integer argument */ - BTA_AG_RES_FMT_STR /* string argument */ +enum { + BTA_AG_RES_FMT_NONE, /* no argument */ + BTA_AG_RES_FMT_INT, /* integer argument */ + BTA_AG_RES_FMT_STR /* string argument */ }; /* Local AT command result codes not defined in bta_ag_api.h */ -enum -{ - BTA_AG_LOCAL_RES_FIRST = 0x0100, - BTA_AG_LOCAL_RES_OK, - BTA_AG_LOCAL_RES_ERROR, - BTA_AG_LOCAL_RES_RING, - BTA_AG_LOCAL_RES_CLIP, - BTA_AG_LOCAL_RES_BRSF, - BTA_AG_LOCAL_RES_CMEE, - BTA_AG_LOCAL_RES_BCS +enum { + BTA_AG_LOCAL_RES_FIRST = 0x0100, + BTA_AG_LOCAL_RES_OK, + BTA_AG_LOCAL_RES_ERROR, + BTA_AG_LOCAL_RES_RING, + BTA_AG_LOCAL_RES_CLIP, + BTA_AG_LOCAL_RES_BRSF, + BTA_AG_LOCAL_RES_CMEE, + BTA_AG_LOCAL_RES_BCS }; /* AT result code constant table */ -const tBTA_AG_RESULT bta_ag_result_tbl[] = -{ - {"OK", BTA_AG_LOCAL_RES_OK, BTA_AG_RES_FMT_NONE}, - {"ERROR", BTA_AG_LOCAL_RES_ERROR, BTA_AG_RES_FMT_NONE}, - {"RING", BTA_AG_LOCAL_RES_RING, BTA_AG_RES_FMT_NONE}, - {"+VGS: ", BTA_AG_SPK_RES, BTA_AG_RES_FMT_INT}, - {"+VGM: ", BTA_AG_MIC_RES, BTA_AG_RES_FMT_INT}, - {"+CCWA: ", BTA_AG_CALL_WAIT_RES, BTA_AG_RES_FMT_STR}, - {"+CHLD: ", BTA_AG_IN_CALL_HELD_RES,BTA_AG_RES_FMT_STR}, - {"+CIND: ", BTA_AG_CIND_RES, BTA_AG_RES_FMT_STR}, - {"+CLIP: ", BTA_AG_LOCAL_RES_CLIP, BTA_AG_RES_FMT_STR}, - {"+CIEV: ", BTA_AG_IND_RES, BTA_AG_RES_FMT_STR}, - {"+BINP: ", BTA_AG_BINP_RES, BTA_AG_RES_FMT_STR}, - {"+BVRA: ", BTA_AG_BVRA_RES, BTA_AG_RES_FMT_INT}, - {"+BRSF: ", BTA_AG_LOCAL_RES_BRSF, BTA_AG_RES_FMT_INT}, +const tBTA_AG_RESULT bta_ag_result_tbl[] = { + {"OK", BTA_AG_LOCAL_RES_OK, BTA_AG_RES_FMT_NONE}, + {"ERROR", BTA_AG_LOCAL_RES_ERROR, BTA_AG_RES_FMT_NONE}, + {"RING", BTA_AG_LOCAL_RES_RING, BTA_AG_RES_FMT_NONE}, + {"+VGS: ", BTA_AG_SPK_RES, BTA_AG_RES_FMT_INT}, + {"+VGM: ", BTA_AG_MIC_RES, BTA_AG_RES_FMT_INT}, + {"+CCWA: ", BTA_AG_CALL_WAIT_RES, BTA_AG_RES_FMT_STR}, + {"+CHLD: ", BTA_AG_IN_CALL_HELD_RES, BTA_AG_RES_FMT_STR}, + {"+CIND: ", BTA_AG_CIND_RES, BTA_AG_RES_FMT_STR}, + {"+CLIP: ", BTA_AG_LOCAL_RES_CLIP, BTA_AG_RES_FMT_STR}, + {"+CIEV: ", BTA_AG_IND_RES, BTA_AG_RES_FMT_STR}, + {"+BINP: ", BTA_AG_BINP_RES, BTA_AG_RES_FMT_STR}, + {"+BVRA: ", BTA_AG_BVRA_RES, BTA_AG_RES_FMT_INT}, + {"+BRSF: ", BTA_AG_LOCAL_RES_BRSF, BTA_AG_RES_FMT_INT}, {"+BSIR: ", BTA_AG_INBAND_RING_RES, BTA_AG_RES_FMT_INT}, - {"+CNUM: ", BTA_AG_CNUM_RES, BTA_AG_RES_FMT_STR}, - {"+BTRH: ", BTA_AG_BTRH_RES, BTA_AG_RES_FMT_INT}, - {"+CLCC: ", BTA_AG_CLCC_RES, BTA_AG_RES_FMT_STR}, - {"+COPS: ", BTA_AG_COPS_RES, BTA_AG_RES_FMT_STR}, + {"+CNUM: ", BTA_AG_CNUM_RES, BTA_AG_RES_FMT_STR}, + {"+BTRH: ", BTA_AG_BTRH_RES, BTA_AG_RES_FMT_INT}, + {"+CLCC: ", BTA_AG_CLCC_RES, BTA_AG_RES_FMT_STR}, + {"+COPS: ", BTA_AG_COPS_RES, BTA_AG_RES_FMT_STR}, {"+CME ERROR: ", BTA_AG_LOCAL_RES_CMEE, BTA_AG_RES_FMT_INT}, - {"+BCS: ", BTA_AG_LOCAL_RES_BCS, BTA_AG_RES_FMT_INT}, - {"+BIND: ", BTA_AG_BIND_RES, BTA_AG_RES_FMT_STR}, - {"", BTA_AG_UNAT_RES, BTA_AG_RES_FMT_STR} -}; - -static const tBTA_AG_RESULT* bta_ag_result_by_code(size_t code) -{ - for (size_t i = 0; i != sizeof(bta_ag_result_tbl) / - sizeof(bta_ag_result_tbl[0]); ++i) - { - if (code == bta_ag_result_tbl[i].result_id) - return &bta_ag_result_tbl[i]; - } - return 0; + {"+BCS: ", BTA_AG_LOCAL_RES_BCS, BTA_AG_RES_FMT_INT}, + {"+BIND: ", BTA_AG_BIND_RES, BTA_AG_RES_FMT_STR}, + {"", BTA_AG_UNAT_RES, BTA_AG_RES_FMT_STR}}; + +static const tBTA_AG_RESULT* bta_ag_result_by_code(size_t code) { + for (size_t i = 0; + i != sizeof(bta_ag_result_tbl) / sizeof(bta_ag_result_tbl[0]); ++i) { + if (code == bta_ag_result_tbl[i].result_id) return &bta_ag_result_tbl[i]; + } + return 0; } -const tBTA_AG_AT_CMD *bta_ag_at_tbl[BTA_AG_NUM_IDX] = -{ - bta_ag_hsp_cmd, - bta_ag_hfp_cmd -}; +const tBTA_AG_AT_CMD* bta_ag_at_tbl[BTA_AG_NUM_IDX] = {bta_ag_hsp_cmd, + bta_ag_hfp_cmd}; -typedef struct -{ - size_t result_code; - size_t indicator; +typedef struct { + size_t result_code; + size_t indicator; } tBTA_AG_INDICATOR_MAP; /* callsetup indicator value lookup table */ -const tBTA_AG_INDICATOR_MAP callsetup_indicator_map[] = -{ - {BTA_AG_IN_CALL_RES, BTA_AG_CALLSETUP_INCOMING}, - {BTA_AG_CALL_WAIT_RES, BTA_AG_CALLSETUP_INCOMING}, - {BTA_AG_OUT_CALL_ORIG_RES, BTA_AG_CALLSETUP_OUTGOING}, - {BTA_AG_OUT_CALL_ALERT_RES, BTA_AG_CALLSETUP_ALERTING} -}; - -static size_t bta_ag_indicator_by_result_code(size_t code) -{ - for (size_t i = 0; i != sizeof(callsetup_indicator_map) / - sizeof(callsetup_indicator_map[0]); ++i) - { - if (code == callsetup_indicator_map[i].result_code) - return callsetup_indicator_map[i].indicator; - } - return BTA_AG_CALLSETUP_NONE; +const tBTA_AG_INDICATOR_MAP callsetup_indicator_map[] = { + {BTA_AG_IN_CALL_RES, BTA_AG_CALLSETUP_INCOMING}, + {BTA_AG_CALL_WAIT_RES, BTA_AG_CALLSETUP_INCOMING}, + {BTA_AG_OUT_CALL_ORIG_RES, BTA_AG_CALLSETUP_OUTGOING}, + {BTA_AG_OUT_CALL_ALERT_RES, BTA_AG_CALLSETUP_ALERTING}}; + +static size_t bta_ag_indicator_by_result_code(size_t code) { + for (size_t i = 0; + i != + sizeof(callsetup_indicator_map) / sizeof(callsetup_indicator_map[0]); + ++i) { + if (code == callsetup_indicator_map[i].result_code) + return callsetup_indicator_map[i].indicator; + } + return BTA_AG_CALLSETUP_NONE; } /******************************************************************************* @@ -224,62 +212,55 @@ static size_t bta_ag_indicator_by_result_code(size_t code) * Returns void * ******************************************************************************/ -static void bta_ag_send_result(tBTA_AG_SCB *p_scb, size_t code, const char *p_arg, - int16_t int_arg) -{ - const tBTA_AG_RESULT *result = bta_ag_result_by_code(code); - if (result == 0) - { - LOG_ERROR(LOG_TAG, "%s Unable to lookup result for code %zu", __func__, code); - return; - } - - char buf[BTA_AG_AT_MAX_LEN + 16]; - char *p = buf; - memset(buf, 0, sizeof(buf)); - - /* init with \r\n */ - *p++ = '\r'; - *p++ = '\n'; - - /* copy result code string */ - strlcpy(p, result->result_string, sizeof(buf) - 2); - - if (p_scb->conn_service == BTA_AG_HSP) - { - /* If HSP then ":"symbol should be changed as "=" for HSP compatibility */ - switch(code) - { - case BTA_AG_SPK_RES: - case BTA_AG_MIC_RES: - if(*(p+COLON_IDX_4_VGSVGM) == ':') - { - *(p+COLON_IDX_4_VGSVGM) = '='; - } - break; +static void bta_ag_send_result(tBTA_AG_SCB* p_scb, size_t code, + const char* p_arg, int16_t int_arg) { + const tBTA_AG_RESULT* result = bta_ag_result_by_code(code); + if (result == 0) { + LOG_ERROR(LOG_TAG, "%s Unable to lookup result for code %zu", __func__, + code); + return; + } + + char buf[BTA_AG_AT_MAX_LEN + 16]; + char* p = buf; + memset(buf, 0, sizeof(buf)); + + /* init with \r\n */ + *p++ = '\r'; + *p++ = '\n'; + + /* copy result code string */ + strlcpy(p, result->result_string, sizeof(buf) - 2); + + if (p_scb->conn_service == BTA_AG_HSP) { + /* If HSP then ":"symbol should be changed as "=" for HSP compatibility */ + switch (code) { + case BTA_AG_SPK_RES: + case BTA_AG_MIC_RES: + if (*(p + COLON_IDX_4_VGSVGM) == ':') { + *(p + COLON_IDX_4_VGSVGM) = '='; } + break; } + } - p += strlen(result->result_string); + p += strlen(result->result_string); - /* copy argument if any */ - if (result->arg_type == BTA_AG_RES_FMT_INT) - { - p += utl_itoa((uint16_t) int_arg, p); - } - else if (result->arg_type == BTA_AG_RES_FMT_STR) - { - strcpy(p, p_arg); - p += strlen(p_arg); - } + /* copy argument if any */ + if (result->arg_type == BTA_AG_RES_FMT_INT) { + p += utl_itoa((uint16_t)int_arg, p); + } else if (result->arg_type == BTA_AG_RES_FMT_STR) { + strcpy(p, p_arg); + p += strlen(p_arg); + } - /* finish with \r\n */ - *p++ = '\r'; - *p++ = '\n'; + /* finish with \r\n */ + *p++ = '\r'; + *p++ = '\n'; - /* send to RFCOMM */ - uint16_t len = 0; - PORT_WriteData(p_scb->conn_handle, buf, (uint16_t) (p - buf), &len); + /* send to RFCOMM */ + uint16_t len = 0; + PORT_WriteData(p_scb->conn_handle, buf, (uint16_t)(p - buf), &len); } /******************************************************************************* @@ -292,9 +273,8 @@ static void bta_ag_send_result(tBTA_AG_SCB *p_scb, size_t code, const char *p_ar * Returns void * ******************************************************************************/ -static void bta_ag_send_ok(tBTA_AG_SCB *p_scb) -{ - bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_OK, NULL, 0); +static void bta_ag_send_ok(tBTA_AG_SCB* p_scb) { + bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_OK, NULL, 0); } /******************************************************************************* @@ -308,13 +288,12 @@ static void bta_ag_send_ok(tBTA_AG_SCB *p_scb) * Returns void * ******************************************************************************/ -static void bta_ag_send_error(tBTA_AG_SCB *p_scb, int16_t errcode) -{ - /* If HFP and extended audio gateway error codes are enabled */ - if (p_scb->conn_service == BTA_AG_HFP && p_scb->cmee_enabled) - bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_CMEE, NULL, errcode); - else - bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_ERROR, NULL, 0); +static void bta_ag_send_error(tBTA_AG_SCB* p_scb, int16_t errcode) { + /* If HFP and extended audio gateway error codes are enabled */ + if (p_scb->conn_service == BTA_AG_HFP && p_scb->cmee_enabled) + bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_CMEE, NULL, errcode); + else + bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_ERROR, NULL, 0); } /******************************************************************************* @@ -327,80 +306,66 @@ static void bta_ag_send_error(tBTA_AG_SCB *p_scb, int16_t errcode) * Returns void * ******************************************************************************/ -static void bta_ag_send_ind(tBTA_AG_SCB *p_scb, uint16_t id, uint16_t value, bool on_demand) -{ - char str[12]; - char *p = str; - - /* If the indicator is masked out, just return */ - /* Mandatory indicators can not be masked out. */ - if ((p_scb->bia_masked_out & ((uint32_t)1 << id)) && - ((id != BTA_AG_IND_CALL) && (id != BTA_AG_IND_CALLSETUP) && (id != BTA_AG_IND_CALLHELD))) - return; +static void bta_ag_send_ind(tBTA_AG_SCB* p_scb, uint16_t id, uint16_t value, + bool on_demand) { + char str[12]; + char* p = str; + + /* If the indicator is masked out, just return */ + /* Mandatory indicators can not be masked out. */ + if ((p_scb->bia_masked_out & ((uint32_t)1 << id)) && + ((id != BTA_AG_IND_CALL) && (id != BTA_AG_IND_CALLSETUP) && + (id != BTA_AG_IND_CALLHELD))) + return; - /* Ensure we do not send duplicate indicators if not requested by app */ - /* If it was requested by app, transmit CIEV even if it is duplicate. */ - if (id == BTA_AG_IND_CALL) - { - if ((value == p_scb->call_ind) && (on_demand == false)) - return; + /* Ensure we do not send duplicate indicators if not requested by app */ + /* If it was requested by app, transmit CIEV even if it is duplicate. */ + if (id == BTA_AG_IND_CALL) { + if ((value == p_scb->call_ind) && (on_demand == false)) return; - p_scb->call_ind = (uint8_t)value; - } + p_scb->call_ind = (uint8_t)value; + } - if ((id == BTA_AG_IND_CALLSETUP) && (on_demand == false)) - { - if (value == p_scb->callsetup_ind) - return; + if ((id == BTA_AG_IND_CALLSETUP) && (on_demand == false)) { + if (value == p_scb->callsetup_ind) return; - p_scb->callsetup_ind = (uint8_t)value; - } + p_scb->callsetup_ind = (uint8_t)value; + } - if ((id == BTA_AG_IND_SERVICE) && (on_demand == false)) - { - if (value == p_scb->service_ind) - return; + if ((id == BTA_AG_IND_SERVICE) && (on_demand == false)) { + if (value == p_scb->service_ind) return; - p_scb->service_ind = (uint8_t)value; - } - if ((id == BTA_AG_IND_SIGNAL) && (on_demand == false)) - { - if (value == p_scb->signal_ind) - return; + p_scb->service_ind = (uint8_t)value; + } + if ((id == BTA_AG_IND_SIGNAL) && (on_demand == false)) { + if (value == p_scb->signal_ind) return; - p_scb->signal_ind = (uint8_t)value; - } - if ((id == BTA_AG_IND_ROAM) && (on_demand == false)) - { - if (value == p_scb->roam_ind) - return; + p_scb->signal_ind = (uint8_t)value; + } + if ((id == BTA_AG_IND_ROAM) && (on_demand == false)) { + if (value == p_scb->roam_ind) return; - p_scb->roam_ind = (uint8_t)value; - } - if ((id == BTA_AG_IND_BATTCHG) && (on_demand == false)) - { - if (value == p_scb->battchg_ind) - return; + p_scb->roam_ind = (uint8_t)value; + } + if ((id == BTA_AG_IND_BATTCHG) && (on_demand == false)) { + if (value == p_scb->battchg_ind) return; - p_scb->battchg_ind = (uint8_t)value; - } + p_scb->battchg_ind = (uint8_t)value; + } - if ((id == BTA_AG_IND_CALLHELD) && (on_demand == false)) - { - /* call swap could result in sending callheld=1 multiple times */ - if ((value != 1) && (value == p_scb->callheld_ind)) - return; + if ((id == BTA_AG_IND_CALLHELD) && (on_demand == false)) { + /* call swap could result in sending callheld=1 multiple times */ + if ((value != 1) && (value == p_scb->callheld_ind)) return; - p_scb->callheld_ind = (uint8_t)value; - } + p_scb->callheld_ind = (uint8_t)value; + } - if (p_scb->cmer_enabled) - { - p += utl_itoa(id, p); - *p++ = ','; - utl_itoa(value, p); - bta_ag_send_result(p_scb, BTA_AG_IND_RES, str, 0); - } + if (p_scb->cmer_enabled) { + p += utl_itoa(id, p); + *p++ = ','; + utl_itoa(value, p); + bta_ag_send_result(p_scb, BTA_AG_IND_RES, str, 0); + } } /******************************************************************************* @@ -413,39 +378,35 @@ static void bta_ag_send_ind(tBTA_AG_SCB *p_scb, uint16_t id, uint16_t value, boo * Returns true if parsed ok, false otherwise. * ******************************************************************************/ -static bool bta_ag_parse_cmer(char *p_s, bool *p_enabled) -{ - int16_t n[4] = {-1, -1, -1, -1}; - int i; - char *p; - - for (i = 0; i < 4; i++) - { - /* skip to comma delimiter */ - for (p = p_s; *p != ',' && *p != 0; p++); - - /* get integer value */ - *p = 0; - n[i] = utl_str2int(p_s); - p_s = p + 1; - if (p_s == 0) - { - break; - } +static bool bta_ag_parse_cmer(char* p_s, bool* p_enabled) { + int16_t n[4] = {-1, -1, -1, -1}; + int i; + char* p; + + for (i = 0; i < 4; i++) { + /* skip to comma delimiter */ + for (p = p_s; *p != ',' && *p != 0; p++) + ; + + /* get integer value */ + *p = 0; + n[i] = utl_str2int(p_s); + p_s = p + 1; + if (p_s == 0) { + break; } + } - /* process values */ - if (n[0] < 0 || n[3] < 0) - { - return false; - } + /* process values */ + if (n[0] < 0 || n[3] < 0) { + return false; + } - if ((n[0] == 3) && ((n[3] == 1) || (n[3] == 0))) - { - *p_enabled = (bool) n[3]; - } + if ((n[0] == 3) && ((n[3] == 1) || (n[3] == 0))) { + *p_enabled = (bool)n[3]; + } - return true; + return true; } /******************************************************************************* @@ -455,35 +416,31 @@ static bool bta_ag_parse_cmer(char *p_s, bool *p_enabled) * Description Parse AT+CHLD parameter string. * * - * Returns Returns idx (1-7), 0 if ECC not enabled or BTA_AG_INVALID_CHLD - if idx doesn't exist/1st character of argument is not a digit + * Returns Returns idx (1-7), 0 if ECC not enabled or + BTA_AG_INVALID_CHLD + if idx doesn't exist/1st character of argument is not a + digit * ******************************************************************************/ -static uint8_t bta_ag_parse_chld(UNUSED_ATTR tBTA_AG_SCB *p_scb, char *p_s) -{ - uint8_t retval = 0; - int16_t idx = -1; - - if (!isdigit(p_s[0])) - { - return BTA_AG_INVALID_CHLD; +static uint8_t bta_ag_parse_chld(UNUSED_ATTR tBTA_AG_SCB* p_scb, char* p_s) { + uint8_t retval = 0; + int16_t idx = -1; + + if (!isdigit(p_s[0])) { + return BTA_AG_INVALID_CHLD; + } + + if (p_s[1] != 0) { + /* p_idxstr++; point to beginning of call number */ + idx = utl_str2int(&p_s[1]); + if (idx != -1 && idx < 255) { + retval = (uint8_t)idx; + } else { + retval = BTA_AG_INVALID_CHLD; } + } - if (p_s[1] != 0) - { - /* p_idxstr++; point to beginning of call number */ - idx = utl_str2int(&p_s[1]); - if (idx != -1 && idx < 255) - { - retval = (uint8_t)idx; - } - else - { - retval = BTA_AG_INVALID_CHLD; - } - } - - return (retval); + return (retval); } #if (BTM_WBS_INCLUDED == TRUE) @@ -496,44 +453,44 @@ static uint8_t bta_ag_parse_chld(UNUSED_ATTR tBTA_AG_SCB *p_scb, char *p_s) * Returns Returns bitmap of supported codecs. * ******************************************************************************/ -static tBTA_AG_PEER_CODEC bta_ag_parse_bac(tBTA_AG_SCB *p_scb, char *p_s) -{ - tBTA_AG_PEER_CODEC retval = BTA_AG_CODEC_NONE; - uint16_t uuid_codec; - bool cont = false; /* Continue processing */ - char *p; - - while(p_s) - { - /* skip to comma delimiter */ - for(p = p_s; *p != ',' && *p != 0; p++); - - /* get integre value */ - if (*p != 0) - { - *p = 0; - cont = true; - } - else - cont = false; - - uuid_codec = utl_str2int(p_s); - switch(uuid_codec) - { - case UUID_CODEC_CVSD: retval |= BTA_AG_CODEC_CVSD; break; - case UUID_CODEC_MSBC: retval |= BTA_AG_CODEC_MSBC; break; - default: - APPL_TRACE_ERROR("Unknown Codec UUID(%d) received", uuid_codec); - break; - } - - if (cont) - p_s = p + 1; - else - break; +static tBTA_AG_PEER_CODEC bta_ag_parse_bac(tBTA_AG_SCB* p_scb, char* p_s) { + tBTA_AG_PEER_CODEC retval = BTA_AG_CODEC_NONE; + uint16_t uuid_codec; + bool cont = false; /* Continue processing */ + char* p; + + while (p_s) { + /* skip to comma delimiter */ + for (p = p_s; *p != ',' && *p != 0; p++) + ; + + /* get integre value */ + if (*p != 0) { + *p = 0; + cont = true; + } else + cont = false; + + uuid_codec = utl_str2int(p_s); + switch (uuid_codec) { + case UUID_CODEC_CVSD: + retval |= BTA_AG_CODEC_CVSD; + break; + case UUID_CODEC_MSBC: + retval |= BTA_AG_CODEC_MSBC; + break; + default: + APPL_TRACE_ERROR("Unknown Codec UUID(%d) received", uuid_codec); + break; } - return (retval); + if (cont) + p_s = p + 1; + else + break; + } + + return (retval); } #endif @@ -541,7 +498,8 @@ static tBTA_AG_PEER_CODEC bta_ag_parse_bac(tBTA_AG_SCB *p_scb, char *p_s) * * Function bta_ag_process_unat_res * - * Description Process the unat response data and remove extra carriage return + * Description Process the unat response data and remove extra carriage + *return * and line feed * * @@ -549,47 +507,38 @@ static tBTA_AG_PEER_CODEC bta_ag_parse_bac(tBTA_AG_SCB *p_scb, char *p_s) * ******************************************************************************/ -static void bta_ag_process_unat_res(char *unat_result) -{ - uint8_t str_leng; - uint8_t i = 0; - uint8_t j = 0; - uint8_t pairs_of_nl_cr; - char trim_data[BTA_AG_AT_MAX_LEN]; - - - - str_leng = strlen(unat_result); - - /* If no extra CR and LF, just return */ - if(str_leng < 4) - return; - - /* Remove the carriage return and left feed */ - while(unat_result[0] =='\r' && unat_result[1] =='\n' - && unat_result[str_leng-2] =='\r' && unat_result[str_leng-1] =='\n') - { - pairs_of_nl_cr = 1; - for (i=0;i<(str_leng-4*pairs_of_nl_cr);i++) - { - trim_data[j++] = unat_result[i+pairs_of_nl_cr*2]; - } - /* Add EOF */ - trim_data[j] = '\0'; - str_leng = str_leng - 4; - strlcpy(unat_result, trim_data, str_leng+1); - i=0; - j=0; - - if(str_leng <4) - return; - - +static void bta_ag_process_unat_res(char* unat_result) { + uint8_t str_leng; + uint8_t i = 0; + uint8_t j = 0; + uint8_t pairs_of_nl_cr; + char trim_data[BTA_AG_AT_MAX_LEN]; + + str_leng = strlen(unat_result); + + /* If no extra CR and LF, just return */ + if (str_leng < 4) return; + + /* Remove the carriage return and left feed */ + while (unat_result[0] == '\r' && unat_result[1] == '\n' && + unat_result[str_leng - 2] == '\r' && + unat_result[str_leng - 1] == '\n') { + pairs_of_nl_cr = 1; + for (i = 0; i < (str_leng - 4 * pairs_of_nl_cr); i++) { + trim_data[j++] = unat_result[i + pairs_of_nl_cr * 2]; } - return; + /* Add EOF */ + trim_data[j] = '\0'; + str_leng = str_leng - 4; + strlcpy(unat_result, trim_data, str_leng + 1); + i = 0; + j = 0; + + if (str_leng < 4) return; + } + return; } - /******************************************************************************* * * Function bta_ag_inband_enabled @@ -600,17 +549,13 @@ static void bta_ag_process_unat_res(char *unat_result) * Returns void * ******************************************************************************/ -bool bta_ag_inband_enabled(tBTA_AG_SCB *p_scb) -{ - /* if feature is enabled and no other scbs connected */ - if (p_scb->inband_enabled && !bta_ag_other_scb_open(p_scb)) - { - return true; - } - else - { - return false; - } +bool bta_ag_inband_enabled(tBTA_AG_SCB* p_scb) { + /* if feature is enabled and no other scbs connected */ + if (p_scb->inband_enabled && !bta_ag_other_scb_open(p_scb)) { + return true; + } else { + return false; + } } /******************************************************************************* @@ -623,30 +568,25 @@ bool bta_ag_inband_enabled(tBTA_AG_SCB *p_scb) * Returns void * ******************************************************************************/ -void bta_ag_send_call_inds(tBTA_AG_SCB *p_scb, tBTA_AG_RES result) -{ - uint8_t call = p_scb->call_ind; - - /* set new call and callsetup values based on BTA_AgResult */ - size_t callsetup = bta_ag_indicator_by_result_code(result); - - if (result == BTA_AG_END_CALL_RES) - { - call = BTA_AG_CALL_INACTIVE; - } - else if (result == BTA_AG_IN_CALL_CONN_RES || result == BTA_AG_OUT_CALL_CONN_RES - || result == BTA_AG_IN_CALL_HELD_RES) - { - call = BTA_AG_CALL_ACTIVE; - } - else - { - call = p_scb->call_ind; - } - - /* Send indicator function tracks if the values have actually changed */ - bta_ag_send_ind(p_scb, BTA_AG_IND_CALL, call, false); - bta_ag_send_ind(p_scb, BTA_AG_IND_CALLSETUP, callsetup, false); +void bta_ag_send_call_inds(tBTA_AG_SCB* p_scb, tBTA_AG_RES result) { + uint8_t call = p_scb->call_ind; + + /* set new call and callsetup values based on BTA_AgResult */ + size_t callsetup = bta_ag_indicator_by_result_code(result); + + if (result == BTA_AG_END_CALL_RES) { + call = BTA_AG_CALL_INACTIVE; + } else if (result == BTA_AG_IN_CALL_CONN_RES || + result == BTA_AG_OUT_CALL_CONN_RES || + result == BTA_AG_IN_CALL_HELD_RES) { + call = BTA_AG_CALL_ACTIVE; + } else { + call = p_scb->call_ind; + } + + /* Send indicator function tracks if the values have actually changed */ + bta_ag_send_ind(p_scb, BTA_AG_IND_CALL, call, false); + bta_ag_send_ind(p_scb, BTA_AG_IND_CALLSETUP, callsetup, false); } /******************************************************************************* @@ -659,22 +599,21 @@ void bta_ag_send_call_inds(tBTA_AG_SCB *p_scb, tBTA_AG_RES result) * Returns void * ******************************************************************************/ -void bta_ag_at_hsp_cback(tBTA_AG_SCB *p_scb, uint16_t command_id, uint8_t arg_type, - char *p_arg, int16_t int_arg) -{ - APPL_TRACE_DEBUG("AT cmd:%d arg_type:%d arg:%d arg:%s", command_id, arg_type, - int_arg, p_arg); +void bta_ag_at_hsp_cback(tBTA_AG_SCB* p_scb, uint16_t command_id, + uint8_t arg_type, char* p_arg, int16_t int_arg) { + APPL_TRACE_DEBUG("AT cmd:%d arg_type:%d arg:%d arg:%s", command_id, arg_type, + int_arg, p_arg); - bta_ag_send_ok(p_scb); + bta_ag_send_ok(p_scb); - tBTA_AG_VAL val; - val.hdr.handle = bta_ag_scb_to_idx(p_scb); - val.hdr.app_id = p_scb->app_id; - val.num = (uint16_t) int_arg; - strlcpy(val.str, p_arg, sizeof(val.str)); + tBTA_AG_VAL val; + val.hdr.handle = bta_ag_scb_to_idx(p_scb); + val.hdr.app_id = p_scb->app_id; + val.num = (uint16_t)int_arg; + strlcpy(val.str, p_arg, sizeof(val.str)); - /* call callback with event */ - (*bta_ag_cb.p_cback)(command_id, (tBTA_AG *) &val); + /* call callback with event */ + (*bta_ag_cb.p_cback)(command_id, (tBTA_AG*)&val); } /******************************************************************************* @@ -689,18 +628,14 @@ void bta_ag_at_hsp_cback(tBTA_AG_SCB *p_scb, uint16_t command_id, uint8_t arg_ty * is available. * ******************************************************************************/ -static int bta_ag_find_empty_hf_ind(tBTA_AG_SCB *p_scb) -{ - for (int index = 0; index < BTA_AG_MAX_NUM_PEER_HF_IND; index++) - { - if (p_scb->peer_hf_indicators[index].ind_id == 0) - return index; - } +static int bta_ag_find_empty_hf_ind(tBTA_AG_SCB* p_scb) { + for (int index = 0; index < BTA_AG_MAX_NUM_PEER_HF_IND; index++) { + if (p_scb->peer_hf_indicators[index].ind_id == 0) return index; + } - return -1; + return -1; } - /******************************************************************************* * * Function bta_ag_find_hf_ind_by_id @@ -713,15 +648,13 @@ static int bta_ag_find_empty_hf_ind(tBTA_AG_SCB *p_scb) * was not found. * ******************************************************************************/ -static int bta_ag_find_hf_ind_by_id(tBTA_AG_HF_IND *p_hf_ind, int size, uint32_t ind_id) -{ - for (int index = 0; index < size; index++) - { - if (p_hf_ind[index].ind_id == ind_id) - return index; - } +static int bta_ag_find_hf_ind_by_id(tBTA_AG_HF_IND* p_hf_ind, int size, + uint32_t ind_id) { + for (int index = 0; index < size; index++) { + if (p_hf_ind[index].ind_id == ind_id) return index; + } - return -1; + return -1; } /******************************************************************************* @@ -733,29 +666,25 @@ static int bta_ag_find_hf_ind_by_id(tBTA_AG_HF_IND *p_hf_ind, int size, uint32_t * Returns true if successful * ******************************************************************************/ -static bool bta_ag_parse_bind_set(tBTA_AG_SCB *p_scb, tBTA_AG_VAL val) -{ - char *p_token = strtok(val.str, ","); - if (p_token == NULL) - return false; - - while (p_token != NULL) - { - uint16_t rcv_ind_id = atoi(p_token); - int index = bta_ag_find_empty_hf_ind(p_scb); - if (index == -1) - { - APPL_TRACE_WARNING("%s Can't save more indicators", __func__); - return false; - } - - p_scb->peer_hf_indicators[index].ind_id = rcv_ind_id; - APPL_TRACE_DEBUG("%s peer_hf_ind[%d] = %d", __func__, index, rcv_ind_id); +static bool bta_ag_parse_bind_set(tBTA_AG_SCB* p_scb, tBTA_AG_VAL val) { + char* p_token = strtok(val.str, ","); + if (p_token == NULL) return false; - p_token = strtok(NULL, ","); + while (p_token != NULL) { + uint16_t rcv_ind_id = atoi(p_token); + int index = bta_ag_find_empty_hf_ind(p_scb); + if (index == -1) { + APPL_TRACE_WARNING("%s Can't save more indicators", __func__); + return false; } - return true; + p_scb->peer_hf_indicators[index].ind_id = rcv_ind_id; + APPL_TRACE_DEBUG("%s peer_hf_ind[%d] = %d", __func__, index, rcv_ind_id); + + p_token = strtok(NULL, ","); + } + + return true; } /******************************************************************************* @@ -768,77 +697,71 @@ static bool bta_ag_parse_bind_set(tBTA_AG_SCB *p_scb, tBTA_AG_VAL val) * Returns Void * ******************************************************************************/ -static void bta_ag_bind_response(tBTA_AG_SCB *p_scb, uint8_t arg_type) -{ - char buffer[BTA_AG_AT_MAX_LEN]; - memset(buffer, 0, BTA_AG_AT_MAX_LEN); - - if (arg_type == BTA_AG_AT_TEST) - { - int index = 0; - buffer[index++] = '('; +static void bta_ag_bind_response(tBTA_AG_SCB* p_scb, uint8_t arg_type) { + char buffer[BTA_AG_AT_MAX_LEN]; + memset(buffer, 0, BTA_AG_AT_MAX_LEN); + + if (arg_type == BTA_AG_AT_TEST) { + int index = 0; + buffer[index++] = '('; + + for (uint32_t i = 0; i < bta_ag_local_hf_ind_cfg[0].ind_id; i++) { + if (bta_ag_local_hf_ind_cfg[i + 1].is_supported) { + /* Add ',' from second indicator */ + if (index > 1) buffer[index++] = ','; + snprintf(&buffer[index++], 1, "%d", + bta_ag_local_hf_ind_cfg[i + 1].ind_id); + } + } - for (uint32_t i = 0; i < bta_ag_local_hf_ind_cfg[0].ind_id; i++) - { - if (bta_ag_local_hf_ind_cfg[i+1].is_supported) - { - /* Add ',' from second indicator */ - if (index > 1) buffer[index++] = ','; - snprintf(&buffer[index++], 1, "%d", - bta_ag_local_hf_ind_cfg[i+1].ind_id); - } - } + buffer[index++] = ')'; - buffer[index++] = ')'; + bta_ag_send_result(p_scb, BTA_AG_BIND_RES, buffer, 0); + bta_ag_send_ok(p_scb); + } else if (arg_type == BTA_AG_AT_READ) { + char* p = buffer; + + /* bta_ag_local_hf_ind_cfg[0].ind_id is used as BTA_AG_NUM_LOCAL_HF_IND */ + for (uint32_t i = 0; i < bta_ag_local_hf_ind_cfg[0].ind_id; i++) { + if (i == BTA_AG_MAX_NUM_LOCAL_HF_IND) { + APPL_TRACE_WARNING("%s No space for more HF indicators", __func__); + break; + } + + p_scb->local_hf_indicators[i].ind_id = + bta_ag_local_hf_ind_cfg[i + 1].ind_id; + p_scb->local_hf_indicators[i].is_supported = + bta_ag_local_hf_ind_cfg[i + 1].is_supported; + p_scb->local_hf_indicators[i].is_enable = + bta_ag_local_hf_ind_cfg[i + 1].is_enable; + + int peer_index = bta_ag_find_hf_ind_by_id( + p_scb->peer_hf_indicators, BTA_AG_MAX_NUM_PEER_HF_IND, + p_scb->local_hf_indicators[i].ind_id); + + /* Check whether local and peer sides support this indicator */ + if (p_scb->local_hf_indicators[i].is_supported == true && + peer_index != -1) { + /* In the format of ind, state */ + p += utl_itoa((uint16_t)p_scb->local_hf_indicators[i].ind_id, p); + *p++ = ','; + p += utl_itoa((uint16_t)p_scb->local_hf_indicators[i].is_enable, p); bta_ag_send_result(p_scb, BTA_AG_BIND_RES, buffer, 0); - bta_ag_send_ok(p_scb); - } - else if (arg_type == BTA_AG_AT_READ) - { - char *p = buffer; - /* bta_ag_local_hf_ind_cfg[0].ind_id is used as BTA_AG_NUM_LOCAL_HF_IND */ - for (uint32_t i = 0; i < bta_ag_local_hf_ind_cfg[0].ind_id; i++) - { - if (i == BTA_AG_MAX_NUM_LOCAL_HF_IND) - { - APPL_TRACE_WARNING("%s No space for more HF indicators", __func__); - break; - } - - p_scb->local_hf_indicators[i].ind_id = bta_ag_local_hf_ind_cfg[i+1].ind_id; - p_scb->local_hf_indicators[i].is_supported = bta_ag_local_hf_ind_cfg[i+1].is_supported; - p_scb->local_hf_indicators[i].is_enable = bta_ag_local_hf_ind_cfg[i+1].is_enable; - - int peer_index = bta_ag_find_hf_ind_by_id(p_scb->peer_hf_indicators, - BTA_AG_MAX_NUM_PEER_HF_IND, - p_scb->local_hf_indicators[i].ind_id); - - /* Check whether local and peer sides support this indicator */ - if (p_scb->local_hf_indicators[i].is_supported == true && peer_index != -1) - { - /* In the format of ind, state */ - p += utl_itoa((uint16_t) p_scb->local_hf_indicators[i].ind_id, p); - *p++ = ','; - p += utl_itoa((uint16_t) p_scb->local_hf_indicators[i].is_enable, p); - - bta_ag_send_result(p_scb, BTA_AG_BIND_RES, buffer, 0); - - memset(buffer, 0, sizeof(buffer)); - p = buffer; - } else { - /* If indicator is not supported, also set it to disable */ - p_scb->local_hf_indicators[i].is_enable = false; - } - } + memset(buffer, 0, sizeof(buffer)); + p = buffer; + } else { + /* If indicator is not supported, also set it to disable */ + p_scb->local_hf_indicators[i].is_enable = false; + } + } - bta_ag_send_ok(p_scb); + bta_ag_send_ok(p_scb); - /* If the service level connection wan't already open, now it's open */ - if (!p_scb->svc_conn) - bta_ag_svc_conn_open(p_scb, NULL); - } + /* If the service level connection wan't already open, now it's open */ + if (!p_scb->svc_conn) bta_ag_svc_conn_open(p_scb, NULL); + } } /******************************************************************************* @@ -851,46 +774,45 @@ static void bta_ag_bind_response(tBTA_AG_SCB *p_scb, uint8_t arg_type) * Returns true if the response was parsed successfully * ******************************************************************************/ -static bool bta_ag_parse_biev_response(tBTA_AG_SCB *p_scb, tBTA_AG_VAL *val) -{ - char *p_token = strtok(val->str, ","); - uint16_t rcv_ind_id = atoi(p_token); - - p_token = strtok(NULL, ","); - uint16_t rcv_ind_val = atoi(p_token); - - APPL_TRACE_DEBUG("%s BIEV indicator id %d, value %d", __func__, rcv_ind_id, rcv_ind_val); - - /* Check whether indicator ID is valid or not */ - if (rcv_ind_id > BTA_AG_NUM_LOCAL_HF_IND) - { - APPL_TRACE_WARNING("%s received invalid indicator id %d", __func__, rcv_ind_id); - return false; - } - - /* Check this indicator is support or not and enabled or not */ - int local_index = bta_ag_find_hf_ind_by_id(p_scb->local_hf_indicators, - BTA_AG_MAX_NUM_LOCAL_HF_IND, rcv_ind_id); - if (local_index == -1 || - p_scb->local_hf_indicators[local_index].is_supported != true || - p_scb->local_hf_indicators[local_index].is_enable != true) - { - APPL_TRACE_WARNING("%s indicator id %d not supported or disabled", __func__, rcv_ind_id); - return false; - } - - /* For each indicator ID, check whether the indicator value is in range */ - if (rcv_ind_val < bta_ag_local_hf_ind_cfg[rcv_ind_id].ind_min_val || - rcv_ind_val > bta_ag_local_hf_ind_cfg[rcv_ind_id].ind_max_val) - { - APPL_TRACE_WARNING("%s invalid ind_val %d", __func__, rcv_ind_val); - return false; - } - - val->lidx = rcv_ind_id; - val->num = rcv_ind_val; - - return true; +static bool bta_ag_parse_biev_response(tBTA_AG_SCB* p_scb, tBTA_AG_VAL* val) { + char* p_token = strtok(val->str, ","); + uint16_t rcv_ind_id = atoi(p_token); + + p_token = strtok(NULL, ","); + uint16_t rcv_ind_val = atoi(p_token); + + APPL_TRACE_DEBUG("%s BIEV indicator id %d, value %d", __func__, rcv_ind_id, + rcv_ind_val); + + /* Check whether indicator ID is valid or not */ + if (rcv_ind_id > BTA_AG_NUM_LOCAL_HF_IND) { + APPL_TRACE_WARNING("%s received invalid indicator id %d", __func__, + rcv_ind_id); + return false; + } + + /* Check this indicator is support or not and enabled or not */ + int local_index = bta_ag_find_hf_ind_by_id( + p_scb->local_hf_indicators, BTA_AG_MAX_NUM_LOCAL_HF_IND, rcv_ind_id); + if (local_index == -1 || + p_scb->local_hf_indicators[local_index].is_supported != true || + p_scb->local_hf_indicators[local_index].is_enable != true) { + APPL_TRACE_WARNING("%s indicator id %d not supported or disabled", __func__, + rcv_ind_id); + return false; + } + + /* For each indicator ID, check whether the indicator value is in range */ + if (rcv_ind_val < bta_ag_local_hf_ind_cfg[rcv_ind_id].ind_min_val || + rcv_ind_val > bta_ag_local_hf_ind_cfg[rcv_ind_id].ind_max_val) { + APPL_TRACE_WARNING("%s invalid ind_val %d", __func__, rcv_ind_val); + return false; + } + + val->lidx = rcv_ind_id; + val->num = rcv_ind_val; + + return true; } /******************************************************************************* @@ -903,481 +825,437 @@ static bool bta_ag_parse_biev_response(tBTA_AG_SCB *p_scb, tBTA_AG_VAL *val) * Returns void * ******************************************************************************/ -void bta_ag_at_hfp_cback(tBTA_AG_SCB *p_scb, uint16_t cmd, uint8_t arg_type, - char *p_arg, int16_t int_arg) -{ - tBTA_AG_VAL val; - tBTA_AG_SCB *ag_scb; - uint32_t i, ind_id; - uint32_t bia_masked_out; -#if (BTM_WBS_INCLUDED == TRUE ) - tBTA_AG_PEER_CODEC codec_type, codec_sent; +void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, uint8_t arg_type, + char* p_arg, int16_t int_arg) { + tBTA_AG_VAL val; + tBTA_AG_SCB* ag_scb; + uint32_t i, ind_id; + uint32_t bia_masked_out; +#if (BTM_WBS_INCLUDED == TRUE) + tBTA_AG_PEER_CODEC codec_type, codec_sent; #endif - if (p_arg == NULL) - { - APPL_TRACE_ERROR("%s: p_arg is null, send error and return", __func__); - bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR); - return; - } + if (p_arg == NULL) { + APPL_TRACE_ERROR("%s: p_arg is null, send error and return", __func__); + bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR); + return; + } + + APPL_TRACE_DEBUG("HFP AT cmd:%d arg_type:%d arg:%d arg:%s", cmd, arg_type, + int_arg, p_arg); + + memset(&val, 0, sizeof(tBTA_AG_VAL)); + val.hdr.handle = bta_ag_scb_to_idx(p_scb); + val.hdr.app_id = p_scb->app_id; + val.hdr.status = BTA_AG_SUCCESS; + val.num = int_arg; + bdcpy(val.bd_addr, p_scb->peer_addr); + strlcpy(val.str, p_arg, sizeof(val.str)); + + /** + * Unless this this is a local event, by default we'll forward + * the event code to the application. + * If |event| is 0 at the end of this function, the application + * callback is NOT invoked. + */ + tBTA_AG_EVT event = 0; + if (cmd < BTA_AG_LOCAL_EVT_FIRST) event = cmd; + + switch (cmd) { + case BTA_AG_AT_A_EVT: + case BTA_AG_SPK_EVT: + case BTA_AG_MIC_EVT: + case BTA_AG_AT_CHUP_EVT: + case BTA_AG_AT_CBC_EVT: + /* send OK */ + bta_ag_send_ok(p_scb); + break; + + case BTA_AG_AT_BLDN_EVT: + /* Do not send OK, App will send error or OK depending on + ** last dial number enabled or not */ + break; + + case BTA_AG_AT_D_EVT: + /* Do not send OK for Dial cmds + ** Let application decide whether to send OK or ERROR*/ + + /* if mem dial cmd, make sure string contains only digits */ + if (p_arg[0] == '>') { + if (!utl_isintstr(p_arg + 1)) { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_DSTR); + } + } else if (p_arg[0] == 'V') /* ATDV : Dial VoIP Call */ + { + /* We do not check string. Code will be added later if needed. */ + if (!((p_scb->peer_features & BTA_AG_PEER_FEAT_VOIP) && + (p_scb->features & BTA_AG_FEAT_VOIP))) { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + } + } + /* If dial cmd, make sure string contains only dial digits + ** Dial digits are 0-9, A-C, *, #, + */ + else { + if (!utl_isdialstr(p_arg)) { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_DSTR); + } + } + break; + + case BTA_AG_LOCAL_EVT_CCWA: + /* store setting */ + p_scb->ccwa_enabled = (bool)int_arg; + + /* send OK */ + bta_ag_send_ok(p_scb); + break; + + case BTA_AG_AT_CHLD_EVT: + if (arg_type == BTA_AG_AT_TEST) { + /* don't call callback */ + event = 0; + + /* send CHLD string */ + /* Form string based on supported 1.5 feature */ + if ((p_scb->peer_version >= HFP_VERSION_1_5) && + (p_scb->features & BTA_AG_FEAT_ECC) && + (p_scb->peer_features & BTA_AG_PEER_FEAT_ECC)) + bta_ag_send_result(p_scb, BTA_AG_IN_CALL_HELD_RES, + p_bta_ag_cfg->chld_val_ecc, 0); + else + bta_ag_send_result(p_scb, BTA_AG_IN_CALL_HELD_RES, + p_bta_ag_cfg->chld_val, 0); - APPL_TRACE_DEBUG("HFP AT cmd:%d arg_type:%d arg:%d arg:%s", cmd, arg_type, - int_arg, p_arg); + /* send OK */ + bta_ag_send_ok(p_scb); - memset(&val, 0, sizeof(tBTA_AG_VAL)); - val.hdr.handle = bta_ag_scb_to_idx(p_scb); - val.hdr.app_id = p_scb->app_id; - val.hdr.status = BTA_AG_SUCCESS; - val.num = int_arg; - bdcpy(val.bd_addr, p_scb->peer_addr); - strlcpy(val.str, p_arg, sizeof(val.str)); + /* if service level conn. not already open, now it's open */ + bta_ag_svc_conn_open(p_scb, NULL); + } else { + val.idx = bta_ag_parse_chld(p_scb, val.str); - /** - * Unless this this is a local event, by default we'll forward - * the event code to the application. - * If |event| is 0 at the end of this function, the application - * callback is NOT invoked. - */ - tBTA_AG_EVT event = 0; - if (cmd < BTA_AG_LOCAL_EVT_FIRST) - event = cmd; - - switch (cmd) - { - case BTA_AG_AT_A_EVT: - case BTA_AG_SPK_EVT: - case BTA_AG_MIC_EVT: - case BTA_AG_AT_CHUP_EVT: - case BTA_AG_AT_CBC_EVT: - /* send OK */ - bta_ag_send_ok(p_scb); - break; - - case BTA_AG_AT_BLDN_EVT: - /* Do not send OK, App will send error or OK depending on - ** last dial number enabled or not */ - break; - - case BTA_AG_AT_D_EVT: - /* Do not send OK for Dial cmds - ** Let application decide whether to send OK or ERROR*/ - - /* if mem dial cmd, make sure string contains only digits */ - if(p_arg[0] == '>') - { - if(!utl_isintstr(p_arg+1)) - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_DSTR); - } - } - else if (p_arg[0] == 'V') /* ATDV : Dial VoIP Call */ - { - /* We do not check string. Code will be added later if needed. */ - if(!((p_scb->peer_features & BTA_AG_PEER_FEAT_VOIP) && (p_scb->features & BTA_AG_FEAT_VOIP))) - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - } - } - /* If dial cmd, make sure string contains only dial digits - ** Dial digits are 0-9, A-C, *, #, + */ - else - { - if(!utl_isdialstr(p_arg)) - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_DSTR); - } - } - break; - - case BTA_AG_LOCAL_EVT_CCWA: - /* store setting */ - p_scb->ccwa_enabled = (bool) int_arg; - - /* send OK */ - bta_ag_send_ok(p_scb); - break; - - case BTA_AG_AT_CHLD_EVT: - if (arg_type == BTA_AG_AT_TEST) - { - /* don't call callback */ - event = 0; - - /* send CHLD string */ - /* Form string based on supported 1.5 feature */ - if ((p_scb->peer_version >= HFP_VERSION_1_5) && - (p_scb->features & BTA_AG_FEAT_ECC) && - (p_scb->peer_features & BTA_AG_PEER_FEAT_ECC)) - bta_ag_send_result(p_scb, BTA_AG_IN_CALL_HELD_RES, - p_bta_ag_cfg->chld_val_ecc, 0); - else - bta_ag_send_result(p_scb, BTA_AG_IN_CALL_HELD_RES, - p_bta_ag_cfg->chld_val, 0); - - /* send OK */ - bta_ag_send_ok(p_scb); - - /* if service level conn. not already open, now it's open */ - bta_ag_svc_conn_open(p_scb, NULL); - } - else - { - val.idx = bta_ag_parse_chld(p_scb, val.str); - - if (val.idx == BTA_AG_INVALID_CHLD) - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - break; - } - if(val.idx && !((p_scb->features & BTA_AG_FEAT_ECC) && (p_scb->peer_features & BTA_AG_PEER_FEAT_ECC))) - { - /* we do not support ECC, but HF is sending us a CHLD with call index*/ - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - - } - else - { - - /* If it is swap between calls, set call held indicator to 3(out of valid 0-2) - ** Application will set it back to 1 - ** callheld indicator will be sent across to the peer. */ - if(val.str[0] == '2') - { - for (i = 0, ag_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; i++, ag_scb++) - { - if (ag_scb->in_use) - { - if((ag_scb->call_ind == BTA_AG_CALL_ACTIVE) - && (ag_scb->callsetup_ind == BTA_AG_CALLSETUP_NONE)) - ag_scb->callheld_ind = BTA_AG_CALLHELD_NOACTIVE + 1; - } - } - } - } - - /* Do not send OK. Let app decide after parsing the val str */ - /* bta_ag_send_ok(p_scb); */ - } - break; - - case BTA_AG_AT_BIND_EVT: - APPL_TRACE_DEBUG("%s BTA_AG_AT_BIND_EVT arg_type: %d", __func__, arg_type); - if (arg_type == BTA_AG_AT_SET) - { - if (bta_ag_parse_bind_set(p_scb, val)) - { - bta_ag_send_ok(p_scb); - } else { - event = 0;/* don't call callback */ - bta_ag_send_error(p_scb, BTA_AG_ERR_INVALID_INDEX); - } - } else { - bta_ag_bind_response(p_scb, arg_type); - - /* Need not pass this command beyond BTIF.*/ - /* Stack handles it internally */ - event = 0;/* don't call callback */ - } - break; - - case BTA_AG_AT_BIEV_EVT: - if (bta_ag_parse_biev_response(p_scb, &val)) - { - bta_ag_send_ok(p_scb); - } else { - bta_ag_send_error(p_scb, BTA_AG_ERR_INVALID_INDEX); - /* don't call callback receiving invalid indicator */ - event = 0; + if (val.idx == BTA_AG_INVALID_CHLD) { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + break; + } + if (val.idx && + !((p_scb->features & BTA_AG_FEAT_ECC) && + (p_scb->peer_features & BTA_AG_PEER_FEAT_ECC))) { + /* we do not support ECC, but HF is sending us a CHLD with call + * index*/ + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + + } else { + /* If it is swap between calls, set call held indicator to 3(out of + *valid 0-2) + ** Application will set it back to 1 + ** callheld indicator will be sent across to the peer. */ + if (val.str[0] == '2') { + for (i = 0, ag_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; + i++, ag_scb++) { + if (ag_scb->in_use) { + if ((ag_scb->call_ind == BTA_AG_CALL_ACTIVE) && + (ag_scb->callsetup_ind == BTA_AG_CALLSETUP_NONE)) + ag_scb->callheld_ind = BTA_AG_CALLHELD_NOACTIVE + 1; + } } - break; + } + } - case BTA_AG_AT_CIND_EVT: - if (arg_type == BTA_AG_AT_TEST) - { - /* don't call callback */ - event = 0; + /* Do not send OK. Let app decide after parsing the val str */ + /* bta_ag_send_ok(p_scb); */ + } + break; + + case BTA_AG_AT_BIND_EVT: + APPL_TRACE_DEBUG("%s BTA_AG_AT_BIND_EVT arg_type: %d", __func__, + arg_type); + if (arg_type == BTA_AG_AT_SET) { + if (bta_ag_parse_bind_set(p_scb, val)) { + bta_ag_send_ok(p_scb); + } else { + event = 0; /* don't call callback */ + bta_ag_send_error(p_scb, BTA_AG_ERR_INVALID_INDEX); + } + } else { + bta_ag_bind_response(p_scb, arg_type); - /* send CIND string, send OK */ - bta_ag_send_result(p_scb, BTA_AG_CIND_RES, p_bta_ag_cfg->cind_info, 0); - bta_ag_send_ok(p_scb); - } - break; - - case BTA_AG_LOCAL_EVT_CLIP: - /* store setting, send OK */ - p_scb->clip_enabled = (bool) int_arg; - bta_ag_send_ok(p_scb); - break; - - case BTA_AG_LOCAL_EVT_CMER: - /* if parsed ok store setting, send OK */ - if (bta_ag_parse_cmer(p_arg, &p_scb->cmer_enabled)) - { - bta_ag_send_ok(p_scb); - - /* if service level conn. not already open and our features and - ** peer features do not have 3-way, service level conn. now open - */ - if (!p_scb->svc_conn && - !((p_scb->features & BTA_AG_FEAT_3WAY) && (p_scb->peer_features & BTA_AG_PEER_FEAT_3WAY))) - { - bta_ag_svc_conn_open(p_scb, NULL); - } - } - else - { - bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR); - } - break; + /* Need not pass this command beyond BTIF.*/ + /* Stack handles it internally */ + event = 0; /* don't call callback */ + } + break; - case BTA_AG_AT_VTS_EVT: - /* check argument */ - if (strlen(p_arg) == 1) - { - bta_ag_send_ok(p_scb); - } - else - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR); - } - break; - - case BTA_AG_AT_BINP_EVT: - /* if feature not set don't call callback, send ERROR */ - if (!(p_scb->features & BTA_AG_FEAT_VTAG)) - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - } - break; - - case BTA_AG_AT_BVRA_EVT: - /* if feature not supported don't call callback, send ERROR. App will send OK */ - if (!(p_scb->features & BTA_AG_FEAT_VREC)) - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - } - break; + case BTA_AG_AT_BIEV_EVT: + if (bta_ag_parse_biev_response(p_scb, &val)) { + bta_ag_send_ok(p_scb); + } else { + bta_ag_send_error(p_scb, BTA_AG_ERR_INVALID_INDEX); + /* don't call callback receiving invalid indicator */ + event = 0; + } + break; + + case BTA_AG_AT_CIND_EVT: + if (arg_type == BTA_AG_AT_TEST) { + /* don't call callback */ + event = 0; + + /* send CIND string, send OK */ + bta_ag_send_result(p_scb, BTA_AG_CIND_RES, p_bta_ag_cfg->cind_info, 0); + bta_ag_send_ok(p_scb); + } + break; + + case BTA_AG_LOCAL_EVT_CLIP: + /* store setting, send OK */ + p_scb->clip_enabled = (bool)int_arg; + bta_ag_send_ok(p_scb); + break; + + case BTA_AG_LOCAL_EVT_CMER: + /* if parsed ok store setting, send OK */ + if (bta_ag_parse_cmer(p_arg, &p_scb->cmer_enabled)) { + bta_ag_send_ok(p_scb); - case BTA_AG_LOCAL_EVT_BRSF: - { - /* store peer features */ - p_scb->peer_features = (uint16_t) int_arg; + /* if service level conn. not already open and our features and + ** peer features do not have 3-way, service level conn. now open + */ + if (!p_scb->svc_conn && + !((p_scb->features & BTA_AG_FEAT_3WAY) && + (p_scb->peer_features & BTA_AG_PEER_FEAT_3WAY))) { + bta_ag_svc_conn_open(p_scb, NULL); + } + } else { + bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR); + } + break; - tBTA_AG_FEAT features = p_scb->features; - if (p_scb->peer_version < HFP_VERSION_1_7) - { - features &= HFP_1_6_FEAT_MASK; - } + case BTA_AG_AT_VTS_EVT: + /* check argument */ + if (strlen(p_arg) == 1) { + bta_ag_send_ok(p_scb); + } else { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR); + } + break; - APPL_TRACE_DEBUG("%s BRSF HF: 0x%x, phone: 0x%x", __func__, - p_scb->peer_features, features); + case BTA_AG_AT_BINP_EVT: + /* if feature not set don't call callback, send ERROR */ + if (!(p_scb->features & BTA_AG_FEAT_VTAG)) { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + } + break; + + case BTA_AG_AT_BVRA_EVT: + /* if feature not supported don't call callback, send ERROR. App will send + * OK */ + if (!(p_scb->features & BTA_AG_FEAT_VREC)) { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + } + break; - /* send BRSF, send OK */ - bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_BRSF, NULL, (int16_t) features); - bta_ag_send_ok(p_scb); - break; - } + case BTA_AG_LOCAL_EVT_BRSF: { + /* store peer features */ + p_scb->peer_features = (uint16_t)int_arg; - case BTA_AG_AT_NREC_EVT: - /* if feature send OK, else don't call callback, send ERROR */ - if (p_scb->features & BTA_AG_FEAT_ECNR) - { - bta_ag_send_ok(p_scb); - } - else - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - } - break; - - case BTA_AG_AT_BTRH_EVT: - /* if feature send BTRH, send OK:, else don't call callback, send ERROR */ - if (p_scb->features & BTA_AG_FEAT_BTRH) - { - /* If set command; send response and notify app */ - if (arg_type == BTA_AG_AT_SET) - { - for (i = 0, ag_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; i++, ag_scb++) - { - if (ag_scb->in_use) - { - bta_ag_send_result(ag_scb, BTA_AG_BTRH_RES, NULL, int_arg); - } - } - bta_ag_send_ok(p_scb); - } - else /* Read Command */ - { - val.num = BTA_AG_BTRH_READ; - } - } - else - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - } - break; + tBTA_AG_FEAT features = p_scb->features; + if (p_scb->peer_version < HFP_VERSION_1_7) { + features &= HFP_1_6_FEAT_MASK; + } - case BTA_AG_AT_COPS_EVT: - if (arg_type == BTA_AG_AT_SET) - { - /* don't call callback */ - event = 0; + APPL_TRACE_DEBUG("%s BRSF HF: 0x%x, phone: 0x%x", __func__, + p_scb->peer_features, features); - /* send OK */ - bta_ag_send_ok(p_scb); + /* send BRSF, send OK */ + bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_BRSF, NULL, (int16_t)features); + bta_ag_send_ok(p_scb); + break; + } + + case BTA_AG_AT_NREC_EVT: + /* if feature send OK, else don't call callback, send ERROR */ + if (p_scb->features & BTA_AG_FEAT_ECNR) { + bta_ag_send_ok(p_scb); + } else { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + } + break; + + case BTA_AG_AT_BTRH_EVT: + /* if feature send BTRH, send OK:, else don't call callback, send ERROR */ + if (p_scb->features & BTA_AG_FEAT_BTRH) { + /* If set command; send response and notify app */ + if (arg_type == BTA_AG_AT_SET) { + for (i = 0, ag_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; + i++, ag_scb++) { + if (ag_scb->in_use) { + bta_ag_send_result(ag_scb, BTA_AG_BTRH_RES, NULL, int_arg); } - break; + } + bta_ag_send_ok(p_scb); + } else /* Read Command */ + { + val.num = BTA_AG_BTRH_READ; + } + } else { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + } + break; - case BTA_AG_LOCAL_EVT_CMEE: - if (p_scb->features & BTA_AG_FEAT_EXTERR) - { - /* store setting */ - p_scb->cmee_enabled = (bool) int_arg; + case BTA_AG_AT_COPS_EVT: + if (arg_type == BTA_AG_AT_SET) { + /* don't call callback */ + event = 0; - /* send OK */ - bta_ag_send_ok(p_scb); - } - else - { - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - } - /* don't call callback */ - event = 0; - break; - - case BTA_AG_LOCAL_EVT_BIA: - /* don't call callback */ - event = 0; - - bia_masked_out = p_scb->bia_masked_out; - - /* Parse the indicator mask */ - for (i = 0, ind_id = 1; (val.str[i] != 0) && (ind_id <= 20); i++, ind_id++) - { - if (val.str[i] == ',') - continue; - - if (val.str[i] == '0') - bia_masked_out |= ((uint32_t)1 << ind_id); - else if (val.str[i] == '1') - bia_masked_out &= ~((uint32_t)1 << ind_id); - else - break; - - i++; - if ((val.str[i] == 0) || (val.str[i] != ',')) - break; - } - if (val.str[i] == 0) - { - p_scb->bia_masked_out = bia_masked_out; - bta_ag_send_ok (p_scb); - } - else - bta_ag_send_error (p_scb, BTA_AG_ERR_INVALID_INDEX); - break; - - case BTA_AG_AT_CNUM_EVT: - break; - - case BTA_AG_AT_CLCC_EVT: - if(!(p_scb->features & BTA_AG_FEAT_ECS)) - { - event = 0; - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - } - break; - -#if (BTM_WBS_INCLUDED == TRUE ) - case BTA_AG_AT_BAC_EVT: - bta_ag_send_ok(p_scb); - - /* store available codecs from the peer */ - if((p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC) && (p_scb->features & BTA_AG_FEAT_CODEC)) - { - p_scb->peer_codecs = bta_ag_parse_bac(p_scb, p_arg); - p_scb->codec_updated = true; - - if (p_scb->peer_codecs & BTA_AG_CODEC_MSBC) - { - p_scb->sco_codec = UUID_CODEC_MSBC; - APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to MSBC"); - } - else - { - p_scb->sco_codec = UUID_CODEC_CVSD; - APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to CVSD"); - } - /* The above logic sets the stack preferred codec based on local and peer codec - capabilities. This can be overridden by the application depending on its preference - using the bta_ag_setcodec API. We send the peer_codecs to the application. */ - val.num = p_scb->peer_codecs; - /* Received BAC while in codec negotiation. */ - if ((bta_ag_cb.sco.state == BTA_AG_SCO_CODEC_ST) && (bta_ag_cb.sco.p_curr_scb == p_scb)) - { - bta_ag_codec_negotiate (p_scb); - } - } - else - { - p_scb->peer_codecs = BTA_AG_CODEC_CVSD; - APPL_TRACE_ERROR("Unexpected CMD:AT+BAC, Codec Negotiation is not supported"); - } - break; - - case BTA_AG_AT_BCS_EVT: - bta_ag_send_ok(p_scb); - alarm_cancel(p_scb->codec_negotiation_timer); - - switch(int_arg) - { - case UUID_CODEC_CVSD: codec_type = BTA_AG_CODEC_CVSD; break; - case UUID_CODEC_MSBC: codec_type = BTA_AG_CODEC_MSBC; break; - default: - APPL_TRACE_ERROR("Unknown codec_uuid %d", int_arg); - codec_type = 0xFFFF; - break; - } + /* send OK */ + bta_ag_send_ok(p_scb); + } + break; - if (p_scb->codec_fallback) - codec_sent = BTA_AG_CODEC_CVSD; - else - codec_sent = p_scb->sco_codec; + case BTA_AG_LOCAL_EVT_CMEE: + if (p_scb->features & BTA_AG_FEAT_EXTERR) { + /* store setting */ + p_scb->cmee_enabled = (bool)int_arg; - if(codec_type == codec_sent) - bta_ag_sco_codec_nego(p_scb, true); - else - bta_ag_sco_codec_nego(p_scb, false); + /* send OK */ + bta_ag_send_ok(p_scb); + } else { + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + } + /* don't call callback */ + event = 0; + break; + + case BTA_AG_LOCAL_EVT_BIA: + /* don't call callback */ + event = 0; + + bia_masked_out = p_scb->bia_masked_out; + + /* Parse the indicator mask */ + for (i = 0, ind_id = 1; (val.str[i] != 0) && (ind_id <= 20); + i++, ind_id++) { + if (val.str[i] == ',') continue; + + if (val.str[i] == '0') + bia_masked_out |= ((uint32_t)1 << ind_id); + else if (val.str[i] == '1') + bia_masked_out &= ~((uint32_t)1 << ind_id); + else + break; - /* send final codec info to callback */ - val.num = codec_sent; - break; + i++; + if ((val.str[i] == 0) || (val.str[i] != ',')) break; + } + if (val.str[i] == 0) { + p_scb->bia_masked_out = bia_masked_out; + bta_ag_send_ok(p_scb); + } else + bta_ag_send_error(p_scb, BTA_AG_ERR_INVALID_INDEX); + break; - case BTA_AG_LOCAL_EVT_BCC: - bta_ag_send_ok(p_scb); - bta_ag_sco_open(p_scb, NULL); - break; -#endif + case BTA_AG_AT_CNUM_EVT: + break; + case BTA_AG_AT_CLCC_EVT: + if (!(p_scb->features & BTA_AG_FEAT_ECS)) { + event = 0; + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + } + break; + +#if (BTM_WBS_INCLUDED == TRUE) + case BTA_AG_AT_BAC_EVT: + bta_ag_send_ok(p_scb); + + /* store available codecs from the peer */ + if ((p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC) && + (p_scb->features & BTA_AG_FEAT_CODEC)) { + p_scb->peer_codecs = bta_ag_parse_bac(p_scb, p_arg); + p_scb->codec_updated = true; + + if (p_scb->peer_codecs & BTA_AG_CODEC_MSBC) { + p_scb->sco_codec = UUID_CODEC_MSBC; + APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to MSBC"); + } else { + p_scb->sco_codec = UUID_CODEC_CVSD; + APPL_TRACE_DEBUG("Received AT+BAC, updating sco codec to CVSD"); + } + /* The above logic sets the stack preferred codec based on local and + peer codec + capabilities. This can be overridden by the application depending on its + preference + using the bta_ag_setcodec API. We send the peer_codecs to the + application. */ + val.num = p_scb->peer_codecs; + /* Received BAC while in codec negotiation. */ + if ((bta_ag_cb.sco.state == BTA_AG_SCO_CODEC_ST) && + (bta_ag_cb.sco.p_curr_scb == p_scb)) { + bta_ag_codec_negotiate(p_scb); + } + } else { + p_scb->peer_codecs = BTA_AG_CODEC_CVSD; + APPL_TRACE_ERROR( + "Unexpected CMD:AT+BAC, Codec Negotiation is not supported"); + } + break; + + case BTA_AG_AT_BCS_EVT: + bta_ag_send_ok(p_scb); + alarm_cancel(p_scb->codec_negotiation_timer); + + switch (int_arg) { + case UUID_CODEC_CVSD: + codec_type = BTA_AG_CODEC_CVSD; + break; + case UUID_CODEC_MSBC: + codec_type = BTA_AG_CODEC_MSBC; + break; default: - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - break; - } + APPL_TRACE_ERROR("Unknown codec_uuid %d", int_arg); + codec_type = 0xFFFF; + break; + } + + if (p_scb->codec_fallback) + codec_sent = BTA_AG_CODEC_CVSD; + else + codec_sent = p_scb->sco_codec; + + if (codec_type == codec_sent) + bta_ag_sco_codec_nego(p_scb, true); + else + bta_ag_sco_codec_nego(p_scb, false); + + /* send final codec info to callback */ + val.num = codec_sent; + break; + + case BTA_AG_LOCAL_EVT_BCC: + bta_ag_send_ok(p_scb); + bta_ag_sco_open(p_scb, NULL); + break; +#endif - /* call callback */ - if (event != 0) - { - (*bta_ag_cb.p_cback)(event, (tBTA_AG *) &val); - } + default: + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + break; + } + + /* call callback */ + if (event != 0) { + (*bta_ag_cb.p_cback)(event, (tBTA_AG*)&val); + } } /******************************************************************************* @@ -1390,31 +1268,26 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB *p_scb, uint16_t cmd, uint8_t arg_type, * Returns void * ******************************************************************************/ -void bta_ag_at_err_cback(tBTA_AG_SCB *p_scb, bool unknown, char *p_arg) -{ - tBTA_AG_VAL val; +void bta_ag_at_err_cback(tBTA_AG_SCB* p_scb, bool unknown, char* p_arg) { + tBTA_AG_VAL val; - if(unknown && (!strlen(p_arg))) - { - APPL_TRACE_DEBUG("Empty AT cmd string received"); - bta_ag_send_ok(p_scb); - return; - } + if (unknown && (!strlen(p_arg))) { + APPL_TRACE_DEBUG("Empty AT cmd string received"); + bta_ag_send_ok(p_scb); + return; + } - /* if unknown AT command and configured to pass these to app */ - if (unknown && (p_scb->features & BTA_AG_FEAT_UNAT)) - { - val.hdr.handle = bta_ag_scb_to_idx(p_scb); - val.hdr.app_id = p_scb->app_id; - val.hdr.status = BTA_AG_SUCCESS; - val.num = 0; - strlcpy(val.str, p_arg, sizeof(val.str)); - (*bta_ag_cb.p_cback)(BTA_AG_AT_UNAT_EVT, (tBTA_AG *) &val); - } - else - { - bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); - } + /* if unknown AT command and configured to pass these to app */ + if (unknown && (p_scb->features & BTA_AG_FEAT_UNAT)) { + val.hdr.handle = bta_ag_scb_to_idx(p_scb); + val.hdr.app_id = p_scb->app_id; + val.hdr.status = BTA_AG_SUCCESS; + val.num = 0; + strlcpy(val.str, p_arg, sizeof(val.str)); + (*bta_ag_cb.p_cback)(BTA_AG_AT_UNAT_EVT, (tBTA_AG*)&val); + } else { + bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_SUPPORTED); + } } /******************************************************************************* @@ -1427,104 +1300,89 @@ void bta_ag_at_err_cback(tBTA_AG_SCB *p_scb, bool unknown, char *p_arg) * Returns void * ******************************************************************************/ -void bta_ag_hsp_result(tBTA_AG_SCB *p_scb, tBTA_AG_API_RESULT *p_result) -{ - APPL_TRACE_DEBUG("bta_ag_hsp_result : res = %d", p_result->result); - - switch(p_result->result) - { - case BTA_AG_SPK_RES: - case BTA_AG_MIC_RES: - bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.num); - break; - - case BTA_AG_IN_CALL_RES: - /* tell sys to stop av if any */ - bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - - /* if sco already opened or no inband ring send ring now */ - if (bta_ag_sco_is_open(p_scb) || !bta_ag_inband_enabled(p_scb) || - (p_scb->features & BTA_AG_FEAT_NOSCO)) - { - bta_ag_send_ring(p_scb, (tBTA_AG_DATA *) p_result); - } - /* else open sco, send ring after sco opened */ - else - { - /* HSPv1.2: AG shall not send RING if using in-band ring tone. */ - if (p_scb->hsp_version >= HSP_VERSION_1_2) - p_scb->post_sco = BTA_AG_POST_SCO_NONE; - else - p_scb->post_sco = BTA_AG_POST_SCO_RING; - - bta_ag_sco_open(p_scb, (tBTA_AG_DATA *) p_result); - } - break; - - case BTA_AG_IN_CALL_CONN_RES: - case BTA_AG_OUT_CALL_ORIG_RES: - /* if incoming call connected stop ring timer */ - if (p_result->result == BTA_AG_IN_CALL_CONN_RES) - { - alarm_cancel(p_scb->ring_timer); - } - - if (!(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - /* if audio connected to this scb open sco */ - if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb)) - { - bta_ag_sco_open(p_scb, (tBTA_AG_DATA *) p_result); - } - /* else if no audio at call close sco */ - else if (p_result->data.audio_handle == BTA_AG_HANDLE_NONE) - { - bta_ag_sco_close(p_scb, (tBTA_AG_DATA *) p_result); - } - } - break; - - case BTA_AG_END_CALL_RES: - alarm_cancel(p_scb->ring_timer); +void bta_ag_hsp_result(tBTA_AG_SCB* p_scb, tBTA_AG_API_RESULT* p_result) { + APPL_TRACE_DEBUG("bta_ag_hsp_result : res = %d", p_result->result); + + switch (p_result->result) { + case BTA_AG_SPK_RES: + case BTA_AG_MIC_RES: + bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.num); + break; + + case BTA_AG_IN_CALL_RES: + /* tell sys to stop av if any */ + bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + + /* if sco already opened or no inband ring send ring now */ + if (bta_ag_sco_is_open(p_scb) || !bta_ag_inband_enabled(p_scb) || + (p_scb->features & BTA_AG_FEAT_NOSCO)) { + bta_ag_send_ring(p_scb, (tBTA_AG_DATA*)p_result); + } + /* else open sco, send ring after sco opened */ + else { + /* HSPv1.2: AG shall not send RING if using in-band ring tone. */ + if (p_scb->hsp_version >= HSP_VERSION_1_2) + p_scb->post_sco = BTA_AG_POST_SCO_NONE; + else + p_scb->post_sco = BTA_AG_POST_SCO_RING; + + bta_ag_sco_open(p_scb, (tBTA_AG_DATA*)p_result); + } + break; + + case BTA_AG_IN_CALL_CONN_RES: + case BTA_AG_OUT_CALL_ORIG_RES: + /* if incoming call connected stop ring timer */ + if (p_result->result == BTA_AG_IN_CALL_CONN_RES) { + alarm_cancel(p_scb->ring_timer); + } + + if (!(p_scb->features & BTA_AG_FEAT_NOSCO)) { + /* if audio connected to this scb open sco */ + if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb)) { + bta_ag_sco_open(p_scb, (tBTA_AG_DATA*)p_result); + } + /* else if no audio at call close sco */ + else if (p_result->data.audio_handle == BTA_AG_HANDLE_NONE) { + bta_ag_sco_close(p_scb, (tBTA_AG_DATA*)p_result); + } + } + break; + + case BTA_AG_END_CALL_RES: + alarm_cancel(p_scb->ring_timer); + + /* close sco */ + if ((bta_ag_sco_is_open(p_scb) || bta_ag_sco_is_opening(p_scb)) && + !(p_scb->features & BTA_AG_FEAT_NOSCO)) { + bta_ag_sco_close(p_scb, (tBTA_AG_DATA*)p_result); + } else { + /* if av got suspended by this call, let it resume. */ + bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + } + break; + + case BTA_AG_INBAND_RING_RES: + p_scb->inband_enabled = p_result->data.state; + APPL_TRACE_DEBUG("inband_enabled set to %d", p_scb->inband_enabled); + break; + + case BTA_AG_UNAT_RES: + if (p_result->data.ok_flag != BTA_AG_OK_ERROR) { + if (p_result->data.str[0] != 0) { + bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); + } - /* close sco */ - if ((bta_ag_sco_is_open(p_scb) || bta_ag_sco_is_opening(p_scb)) && !(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - bta_ag_sco_close(p_scb, (tBTA_AG_DATA *) p_result); - } - else - { - /* if av got suspended by this call, let it resume. */ - bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } - break; - - case BTA_AG_INBAND_RING_RES: - p_scb->inband_enabled = p_result->data.state; - APPL_TRACE_DEBUG("inband_enabled set to %d", p_scb->inband_enabled); - break; - - case BTA_AG_UNAT_RES: - if (p_result->data.ok_flag != BTA_AG_OK_ERROR) - { - if (p_result->data.str[0] != 0) - { - bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); - } - - if (p_result->data.ok_flag == BTA_AG_OK_DONE) - bta_ag_send_ok(p_scb); - } - else - { - bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR); - } - break; + if (p_result->data.ok_flag == BTA_AG_OK_DONE) bta_ag_send_ok(p_scb); + } else { + bta_ag_send_error(p_scb, BTA_AG_ERR_INV_CHAR_IN_TSTR); + } + break; - default: - /* ignore all others */ - break; - } + default: + /* ignore all others */ + break; + } } /******************************************************************************* @@ -1537,309 +1395,275 @@ void bta_ag_hsp_result(tBTA_AG_SCB *p_scb, tBTA_AG_API_RESULT *p_result) * Returns void * ******************************************************************************/ -void bta_ag_hfp_result(tBTA_AG_SCB *p_scb, tBTA_AG_API_RESULT *p_result) -{ - APPL_TRACE_DEBUG("bta_ag_hfp_result : res = %d", p_result->result); - - switch(p_result->result) - { - case BTA_AG_SPK_RES: - case BTA_AG_MIC_RES: - bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.num); - break; - - case BTA_AG_IN_CALL_RES: - /* tell sys to stop av if any */ - bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - - /* store caller id string. - * append type info at the end. - * make sure a valid type info is passed. - * otherwise add 129 as default type */ - if ((p_result->data.num < BTA_AG_CLIP_TYPE_MIN) || (p_result->data.num > BTA_AG_CLIP_TYPE_MAX)) - { - if (p_result->data.num != BTA_AG_CLIP_TYPE_VOIP) - p_result->data.num = BTA_AG_CLIP_TYPE_DEFAULT; - } - - APPL_TRACE_DEBUG("CLIP type :%d", p_result->data.num); - p_scb->clip[0] = 0; - if (p_result->data.str[0] != 0) - snprintf(p_scb->clip, sizeof(p_scb->clip), "%s,%d", p_result->data.str, p_result->data.num); - - /* send callsetup indicator */ - if (p_scb->post_sco == BTA_AG_POST_SCO_CALL_END) - { - /* Need to sent 2 callsetup IND's(Call End and Incoming call) after SCO close. */ - p_scb->post_sco = BTA_AG_POST_SCO_CALL_END_INCALL; - } - else - { - bta_ag_send_call_inds(p_scb, p_result->result); - - /* if sco already opened or no inband ring send ring now */ - if (bta_ag_sco_is_open(p_scb) || !bta_ag_inband_enabled(p_scb) || - (p_scb->features & BTA_AG_FEAT_NOSCO)) - { - bta_ag_send_ring(p_scb, (tBTA_AG_DATA *) p_result); - } - /* else open sco, send ring after sco opened */ - else - { - p_scb->post_sco = BTA_AG_POST_SCO_RING; - bta_ag_sco_open(p_scb, (tBTA_AG_DATA *) p_result); - } - } - break; - - case BTA_AG_IN_CALL_CONN_RES: - alarm_cancel(p_scb->ring_timer); - - /* if sco not opened and we need to open it, send indicators first - ** then open sco. - */ - bta_ag_send_call_inds(p_scb, p_result->result); - - if (!(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb)) - { - bta_ag_sco_open(p_scb, (tBTA_AG_DATA *) p_result); - } - else if ((p_result->data.audio_handle == BTA_AG_HANDLE_NONE) && - bta_ag_sco_is_open(p_scb)) - { - bta_ag_sco_close(p_scb, (tBTA_AG_DATA *) p_result); - } - } - break; - - case BTA_AG_IN_CALL_HELD_RES: - alarm_cancel(p_scb->ring_timer); - - bta_ag_send_call_inds(p_scb, p_result->result); - - break; - - case BTA_AG_OUT_CALL_ORIG_RES: - bta_ag_send_call_inds(p_scb, p_result->result); - if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb) && - !(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - bta_ag_sco_open(p_scb, (tBTA_AG_DATA *) p_result); - } - break; - - case BTA_AG_OUT_CALL_ALERT_RES: - /* send indicators */ - bta_ag_send_call_inds(p_scb, p_result->result); - if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb) && - !(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - bta_ag_sco_open(p_scb, (tBTA_AG_DATA *) p_result); - } - break; - - case BTA_AG_MULTI_CALL_RES: - /* open SCO at SLC for this three way call */ - APPL_TRACE_DEBUG("Headset Connected in three way call"); - if (!(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb)) - bta_ag_sco_open(p_scb, (tBTA_AG_DATA *) p_result); - else if (p_result->data.audio_handle == BTA_AG_HANDLE_NONE) - bta_ag_sco_close(p_scb, (tBTA_AG_DATA *) p_result); - } - break; - - case BTA_AG_OUT_CALL_CONN_RES: - /* send indicators */ - bta_ag_send_call_inds(p_scb, p_result->result); - - /* open or close sco */ - if (!(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb)) - { - bta_ag_sco_open(p_scb, (tBTA_AG_DATA *) p_result); - } - else if (p_result->data.audio_handle == BTA_AG_HANDLE_NONE) - { - bta_ag_sco_close(p_scb, (tBTA_AG_DATA *) p_result); - } - } - break; - - case BTA_AG_CALL_CANCEL_RES: - /* send indicators */ - bta_ag_send_call_inds(p_scb, p_result->result); - break; - - case BTA_AG_END_CALL_RES: - alarm_cancel(p_scb->ring_timer); - - /* if sco open, close sco then send indicator values */ - if ((bta_ag_sco_is_open(p_scb) || bta_ag_sco_is_opening(p_scb)) && !(p_scb->features & BTA_AG_FEAT_NOSCO)) - { - p_scb->post_sco = BTA_AG_POST_SCO_CALL_END; - bta_ag_sco_close(p_scb, (tBTA_AG_DATA *) p_result); - } - else if (p_scb->post_sco == BTA_AG_POST_SCO_CALL_END_INCALL) - { - /* sco closing for outgoing call because of incoming call */ - /* Send only callsetup end indicator after sco close */ - p_scb->post_sco = BTA_AG_POST_SCO_CALL_END; - } - else - { - bta_ag_send_call_inds(p_scb, p_result->result); - - /* if av got suspended by this call, let it resume. */ - bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } - break; - - case BTA_AG_INBAND_RING_RES: - p_scb->inband_enabled = p_result->data.state; - APPL_TRACE_DEBUG("inband_enabled set to %d", p_scb->inband_enabled); - bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.state); - break; - - case BTA_AG_CIND_RES: - /* store local values */ - p_scb->call_ind = p_result->data.str[0] - '0'; - p_scb->callsetup_ind = p_result->data.str[2] - '0'; - p_scb->service_ind = p_result->data.str[4] - '0'; - p_scb->signal_ind = p_result->data.str[6] - '0'; - p_scb->roam_ind = p_result->data.str[8] - '0'; - p_scb->battchg_ind = p_result->data.str[10] - '0'; - p_scb->callheld_ind = p_result->data.str[12] - '0'; - APPL_TRACE_DEBUG("cind call:%d callsetup:%d", p_scb->call_ind, p_scb->callsetup_ind); - - bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); - bta_ag_send_ok(p_scb); - break; - - case BTA_AG_BINP_RES: - case BTA_AG_CNUM_RES: - case BTA_AG_CLCC_RES: - case BTA_AG_COPS_RES: - if (p_result->data.ok_flag != BTA_AG_OK_ERROR) - { - if (p_result->data.str[0] != 0) - { - bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); - } - - if (p_result->data.ok_flag == BTA_AG_OK_DONE) - bta_ag_send_ok(p_scb); - } - else - { - bta_ag_send_error(p_scb, p_result->data.errcode); - } - break; - - - case BTA_AG_UNAT_RES: - if (p_result->data.ok_flag != BTA_AG_OK_ERROR) - { - if (p_result->data.str[0] != 0) - { - bta_ag_process_unat_res(p_result->data.str); - APPL_TRACE_DEBUG("BTA_AG_RES :%s",p_result->data.str); - bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); - } - - if (p_result->data.ok_flag == BTA_AG_OK_DONE) - bta_ag_send_ok(p_scb); - } - else - { - bta_ag_send_error(p_scb, p_result->data.errcode); - } - break; - - case BTA_AG_CALL_WAIT_RES: - if (p_scb->ccwa_enabled) - { - bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); - } - bta_ag_send_call_inds(p_scb, p_result->result); - break; - - case BTA_AG_IND_RES: - bta_ag_send_ind(p_scb, p_result->data.ind.id, p_result->data.ind.value, false); - break; - - case BTA_AG_BVRA_RES: - bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.state); - break; - - case BTA_AG_BTRH_RES: - if (p_result->data.ok_flag != BTA_AG_OK_ERROR) - { - /* Don't respond to read if not in response & hold state */ - if (p_result->data.num != BTA_AG_BTRH_NO_RESP) - { - bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.num); - } - - /* In case of a response to a read request we need to send OK */ - if (p_result->data.ok_flag == BTA_AG_OK_DONE) - bta_ag_send_ok(p_scb); - } - else - { - bta_ag_send_error(p_scb, p_result->data.errcode); - } - break; +void bta_ag_hfp_result(tBTA_AG_SCB* p_scb, tBTA_AG_API_RESULT* p_result) { + APPL_TRACE_DEBUG("bta_ag_hfp_result : res = %d", p_result->result); + + switch (p_result->result) { + case BTA_AG_SPK_RES: + case BTA_AG_MIC_RES: + bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.num); + break; + + case BTA_AG_IN_CALL_RES: + /* tell sys to stop av if any */ + bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + + /* store caller id string. + * append type info at the end. + * make sure a valid type info is passed. + * otherwise add 129 as default type */ + if ((p_result->data.num < BTA_AG_CLIP_TYPE_MIN) || + (p_result->data.num > BTA_AG_CLIP_TYPE_MAX)) { + if (p_result->data.num != BTA_AG_CLIP_TYPE_VOIP) + p_result->data.num = BTA_AG_CLIP_TYPE_DEFAULT; + } + + APPL_TRACE_DEBUG("CLIP type :%d", p_result->data.num); + p_scb->clip[0] = 0; + if (p_result->data.str[0] != 0) + snprintf(p_scb->clip, sizeof(p_scb->clip), "%s,%d", p_result->data.str, + p_result->data.num); + + /* send callsetup indicator */ + if (p_scb->post_sco == BTA_AG_POST_SCO_CALL_END) { + /* Need to sent 2 callsetup IND's(Call End and Incoming call) after SCO + * close. */ + p_scb->post_sco = BTA_AG_POST_SCO_CALL_END_INCALL; + } else { + bta_ag_send_call_inds(p_scb, p_result->result); + + /* if sco already opened or no inband ring send ring now */ + if (bta_ag_sco_is_open(p_scb) || !bta_ag_inband_enabled(p_scb) || + (p_scb->features & BTA_AG_FEAT_NOSCO)) { + bta_ag_send_ring(p_scb, (tBTA_AG_DATA*)p_result); + } + /* else open sco, send ring after sco opened */ + else { + p_scb->post_sco = BTA_AG_POST_SCO_RING; + bta_ag_sco_open(p_scb, (tBTA_AG_DATA*)p_result); + } + } + break; + + case BTA_AG_IN_CALL_CONN_RES: + alarm_cancel(p_scb->ring_timer); + + /* if sco not opened and we need to open it, send indicators first + ** then open sco. + */ + bta_ag_send_call_inds(p_scb, p_result->result); + + if (!(p_scb->features & BTA_AG_FEAT_NOSCO)) { + if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb)) { + bta_ag_sco_open(p_scb, (tBTA_AG_DATA*)p_result); + } else if ((p_result->data.audio_handle == BTA_AG_HANDLE_NONE) && + bta_ag_sco_is_open(p_scb)) { + bta_ag_sco_close(p_scb, (tBTA_AG_DATA*)p_result); + } + } + break; + + case BTA_AG_IN_CALL_HELD_RES: + alarm_cancel(p_scb->ring_timer); + + bta_ag_send_call_inds(p_scb, p_result->result); + + break; + + case BTA_AG_OUT_CALL_ORIG_RES: + bta_ag_send_call_inds(p_scb, p_result->result); + if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb) && + !(p_scb->features & BTA_AG_FEAT_NOSCO)) { + bta_ag_sco_open(p_scb, (tBTA_AG_DATA*)p_result); + } + break; + + case BTA_AG_OUT_CALL_ALERT_RES: + /* send indicators */ + bta_ag_send_call_inds(p_scb, p_result->result); + if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb) && + !(p_scb->features & BTA_AG_FEAT_NOSCO)) { + bta_ag_sco_open(p_scb, (tBTA_AG_DATA*)p_result); + } + break; + + case BTA_AG_MULTI_CALL_RES: + /* open SCO at SLC for this three way call */ + APPL_TRACE_DEBUG("Headset Connected in three way call"); + if (!(p_scb->features & BTA_AG_FEAT_NOSCO)) { + if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb)) + bta_ag_sco_open(p_scb, (tBTA_AG_DATA*)p_result); + else if (p_result->data.audio_handle == BTA_AG_HANDLE_NONE) + bta_ag_sco_close(p_scb, (tBTA_AG_DATA*)p_result); + } + break; + + case BTA_AG_OUT_CALL_CONN_RES: + /* send indicators */ + bta_ag_send_call_inds(p_scb, p_result->result); + + /* open or close sco */ + if (!(p_scb->features & BTA_AG_FEAT_NOSCO)) { + if (p_result->data.audio_handle == bta_ag_scb_to_idx(p_scb)) { + bta_ag_sco_open(p_scb, (tBTA_AG_DATA*)p_result); + } else if (p_result->data.audio_handle == BTA_AG_HANDLE_NONE) { + bta_ag_sco_close(p_scb, (tBTA_AG_DATA*)p_result); + } + } + break; + + case BTA_AG_CALL_CANCEL_RES: + /* send indicators */ + bta_ag_send_call_inds(p_scb, p_result->result); + break; + + case BTA_AG_END_CALL_RES: + alarm_cancel(p_scb->ring_timer); + + /* if sco open, close sco then send indicator values */ + if ((bta_ag_sco_is_open(p_scb) || bta_ag_sco_is_opening(p_scb)) && + !(p_scb->features & BTA_AG_FEAT_NOSCO)) { + p_scb->post_sco = BTA_AG_POST_SCO_CALL_END; + bta_ag_sco_close(p_scb, (tBTA_AG_DATA*)p_result); + } else if (p_scb->post_sco == BTA_AG_POST_SCO_CALL_END_INCALL) { + /* sco closing for outgoing call because of incoming call */ + /* Send only callsetup end indicator after sco close */ + p_scb->post_sco = BTA_AG_POST_SCO_CALL_END; + } else { + bta_ag_send_call_inds(p_scb, p_result->result); + + /* if av got suspended by this call, let it resume. */ + bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + } + break; + + case BTA_AG_INBAND_RING_RES: + p_scb->inband_enabled = p_result->data.state; + APPL_TRACE_DEBUG("inband_enabled set to %d", p_scb->inband_enabled); + bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.state); + break; + + case BTA_AG_CIND_RES: + /* store local values */ + p_scb->call_ind = p_result->data.str[0] - '0'; + p_scb->callsetup_ind = p_result->data.str[2] - '0'; + p_scb->service_ind = p_result->data.str[4] - '0'; + p_scb->signal_ind = p_result->data.str[6] - '0'; + p_scb->roam_ind = p_result->data.str[8] - '0'; + p_scb->battchg_ind = p_result->data.str[10] - '0'; + p_scb->callheld_ind = p_result->data.str[12] - '0'; + APPL_TRACE_DEBUG("cind call:%d callsetup:%d", p_scb->call_ind, + p_scb->callsetup_ind); + + bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); + bta_ag_send_ok(p_scb); + break; + + case BTA_AG_BINP_RES: + case BTA_AG_CNUM_RES: + case BTA_AG_CLCC_RES: + case BTA_AG_COPS_RES: + if (p_result->data.ok_flag != BTA_AG_OK_ERROR) { + if (p_result->data.str[0] != 0) { + bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); + } - case BTA_AG_BIND_RES: - { - /* Find whether ind_id is supported by local device or not */ - int local_index = bta_ag_find_hf_ind_by_id(p_scb->local_hf_indicators, - BTA_AG_MAX_NUM_LOCAL_HF_IND, p_result->data.ind.id); - if (local_index == -1) - { - APPL_TRACE_WARNING("%s Invalid HF Indicator ID %d", __func__, - p_result->data.ind.id); - return; - } + if (p_result->data.ok_flag == BTA_AG_OK_DONE) bta_ag_send_ok(p_scb); + } else { + bta_ag_send_error(p_scb, p_result->data.errcode); + } + break; + + case BTA_AG_UNAT_RES: + if (p_result->data.ok_flag != BTA_AG_OK_ERROR) { + if (p_result->data.str[0] != 0) { + bta_ag_process_unat_res(p_result->data.str); + APPL_TRACE_DEBUG("BTA_AG_RES :%s", p_result->data.str); + bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); + } - /* Find whether ind_id is supported by peer device or not */ - int peer_index = bta_ag_find_hf_ind_by_id(p_scb->peer_hf_indicators, - BTA_AG_MAX_NUM_PEER_HF_IND, p_result->data.ind.id); - if (peer_index == -1) - { - APPL_TRACE_WARNING("%s Invalid HF Indicator ID %d", __func__, - p_result->data.ind.id); - return; - } else { - /* If the current state is different from the one upper layer request - change current state and send out the result */ - if (p_scb->local_hf_indicators[local_index].is_enable != p_result->data.ind.on_demand) - { - char buffer[BTA_AG_AT_MAX_LEN] = {0}; - char *p = buffer; - - p_scb->local_hf_indicators[local_index].is_enable = p_result->data.ind.on_demand; - p += utl_itoa(p_result->data.ind.id, p); - *p++ = ','; - p += utl_itoa(p_scb->local_hf_indicators[local_index].is_enable, p); - - bta_ag_send_result(p_scb, p_result->result, buffer, 0); - } else { - APPL_TRACE_DEBUG("%s HF Indicator %d already %s", p_result->data.ind.id, - (p_result->data.ind.on_demand == true) ? "Enabled" : "Disabled"); - } - } - break; + if (p_result->data.ok_flag == BTA_AG_OK_DONE) bta_ag_send_ok(p_scb); + } else { + bta_ag_send_error(p_scb, p_result->data.errcode); + } + break; + + case BTA_AG_CALL_WAIT_RES: + if (p_scb->ccwa_enabled) { + bta_ag_send_result(p_scb, p_result->result, p_result->data.str, 0); + } + bta_ag_send_call_inds(p_scb, p_result->result); + break; + + case BTA_AG_IND_RES: + bta_ag_send_ind(p_scb, p_result->data.ind.id, p_result->data.ind.value, + false); + break; + + case BTA_AG_BVRA_RES: + bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.state); + break; + + case BTA_AG_BTRH_RES: + if (p_result->data.ok_flag != BTA_AG_OK_ERROR) { + /* Don't respond to read if not in response & hold state */ + if (p_result->data.num != BTA_AG_BTRH_NO_RESP) { + bta_ag_send_result(p_scb, p_result->result, NULL, p_result->data.num); } - default: - break; + /* In case of a response to a read request we need to send OK */ + if (p_result->data.ok_flag == BTA_AG_OK_DONE) bta_ag_send_ok(p_scb); + } else { + bta_ag_send_error(p_scb, p_result->data.errcode); + } + break; + + case BTA_AG_BIND_RES: { + /* Find whether ind_id is supported by local device or not */ + int local_index = bta_ag_find_hf_ind_by_id(p_scb->local_hf_indicators, + BTA_AG_MAX_NUM_LOCAL_HF_IND, + p_result->data.ind.id); + if (local_index == -1) { + APPL_TRACE_WARNING("%s Invalid HF Indicator ID %d", __func__, + p_result->data.ind.id); + return; + } + + /* Find whether ind_id is supported by peer device or not */ + int peer_index = bta_ag_find_hf_ind_by_id(p_scb->peer_hf_indicators, + BTA_AG_MAX_NUM_PEER_HF_IND, + p_result->data.ind.id); + if (peer_index == -1) { + APPL_TRACE_WARNING("%s Invalid HF Indicator ID %d", __func__, + p_result->data.ind.id); + return; + } else { + /* If the current state is different from the one upper layer request + change current state and send out the result */ + if (p_scb->local_hf_indicators[local_index].is_enable != + p_result->data.ind.on_demand) { + char buffer[BTA_AG_AT_MAX_LEN] = {0}; + char* p = buffer; + + p_scb->local_hf_indicators[local_index].is_enable = + p_result->data.ind.on_demand; + p += utl_itoa(p_result->data.ind.id, p); + *p++ = ','; + p += utl_itoa(p_scb->local_hf_indicators[local_index].is_enable, p); + + bta_ag_send_result(p_scb, p_result->result, buffer, 0); + } else { + APPL_TRACE_DEBUG( + "%s HF Indicator %d already %s", p_result->data.ind.id, + (p_result->data.ind.on_demand == true) ? "Enabled" : "Disabled"); + } + } + break; } + + default: + break; + } } /******************************************************************************* @@ -1852,16 +1676,12 @@ void bta_ag_hfp_result(tBTA_AG_SCB *p_scb, tBTA_AG_API_RESULT *p_result) * Returns void * ******************************************************************************/ -void bta_ag_result(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - if (p_scb->conn_service == BTA_AG_HSP) - { - bta_ag_hsp_result(p_scb, &p_data->api_result); - } - else - { - bta_ag_hfp_result(p_scb, &p_data->api_result); - } +void bta_ag_result(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + if (p_scb->conn_service == BTA_AG_HSP) { + bta_ag_hsp_result(p_scb, &p_data->api_result); + } else { + bta_ag_hfp_result(p_scb, &p_data->api_result); + } } #if (BTM_WBS_INCLUDED == TRUE) @@ -1874,32 +1694,33 @@ void bta_ag_result(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_send_bcs(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - uint16_t codec_uuid; - - if (p_scb->codec_fallback) - { +void bta_ag_send_bcs(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + uint16_t codec_uuid; + + if (p_scb->codec_fallback) { + codec_uuid = UUID_CODEC_CVSD; + } else { + switch (p_scb->sco_codec) { + case BTA_AG_CODEC_NONE: codec_uuid = UUID_CODEC_CVSD; + break; + case BTA_AG_CODEC_CVSD: + codec_uuid = UUID_CODEC_CVSD; + break; + case BTA_AG_CODEC_MSBC: + codec_uuid = UUID_CODEC_MSBC; + break; + default: + APPL_TRACE_ERROR("bta_ag_send_bcs: unknown codec %d, use CVSD", + p_scb->sco_codec); + codec_uuid = UUID_CODEC_CVSD; + break; } - else - { - switch(p_scb->sco_codec) - { - case BTA_AG_CODEC_NONE: codec_uuid = UUID_CODEC_CVSD; break; - case BTA_AG_CODEC_CVSD: codec_uuid = UUID_CODEC_CVSD; break; - case BTA_AG_CODEC_MSBC: codec_uuid = UUID_CODEC_MSBC; break; - default: - APPL_TRACE_ERROR("bta_ag_send_bcs: unknown codec %d, use CVSD", p_scb->sco_codec); - codec_uuid = UUID_CODEC_CVSD; - break; - } - } - - /* send +BCS */ - APPL_TRACE_DEBUG("send +BCS codec is %d", codec_uuid); - bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_BCS, NULL, codec_uuid); + } + /* send +BCS */ + APPL_TRACE_DEBUG("send +BCS codec is %d", codec_uuid); + bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_BCS, NULL, codec_uuid); } #endif @@ -1913,17 +1734,16 @@ void bta_ag_send_bcs(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_send_ring(tBTA_AG_SCB *p_scb, UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - /* send RING */ - bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_RING, NULL, 0); - - /* if HFP and clip enabled and clip data send CLIP */ - if (p_scb->conn_service == BTA_AG_HFP && p_scb->clip_enabled && p_scb->clip[0] != 0) - { - bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_CLIP, p_scb->clip, 0); - } - - bta_sys_start_timer(p_scb->ring_timer, BTA_AG_RING_TIMEOUT_MS, - BTA_AG_RING_TIMEOUT_EVT, bta_ag_scb_to_idx(p_scb)); +void bta_ag_send_ring(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + /* send RING */ + bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_RING, NULL, 0); + + /* if HFP and clip enabled and clip data send CLIP */ + if (p_scb->conn_service == BTA_AG_HFP && p_scb->clip_enabled && + p_scb->clip[0] != 0) { + bta_ag_send_result(p_scb, BTA_AG_LOCAL_RES_CLIP, p_scb->clip, 0); + } + + bta_sys_start_timer(p_scb->ring_timer, BTA_AG_RING_TIMEOUT_MS, + BTA_AG_RING_TIMEOUT_EVT, bta_ag_scb_to_idx(p_scb)); } diff --git a/system/bta/ag/bta_ag_int.h b/system/bta/ag/bta_ag_int.h index 870d9feca66..c52f364ee24 100644 --- a/system/bta/ag/bta_ag_int.h +++ b/system/bta/ag/bta_ag_int.h @@ -24,10 +24,10 @@ #ifndef BTA_AG_INT_H #define BTA_AG_INT_H -#include "bta_sys.h" -#include "bta_api.h" #include "bta_ag_api.h" #include "bta_ag_at.h" +#include "bta_api.h" +#include "bta_sys.h" #ifdef __cplusplus extern "C" { @@ -38,104 +38,101 @@ extern "C" { ****************************************************************************/ /* Number of SCBs (AG service instances that can be registered) */ #ifndef BTA_AG_NUM_SCB -#define BTA_AG_NUM_SCB 2 +#define BTA_AG_NUM_SCB 2 #endif /* Time to wait for retry in case of collision */ #ifndef BTA_AG_COLLISION_TIMEOUT_MS -#define BTA_AG_COLLISION_TIMEOUT_MS (2 * 1000) /* 2 seconds */ +#define BTA_AG_COLLISION_TIMEOUT_MS (2 * 1000) /* 2 seconds */ #endif /* RFCOMM MTU SIZE */ -#define BTA_AG_MTU 256 +#define BTA_AG_MTU 256 /* Max number of peer and local HF indicators */ -#define BTA_AG_MAX_NUM_PEER_HF_IND 20 -#define BTA_AG_MAX_NUM_LOCAL_HF_IND 4 +#define BTA_AG_MAX_NUM_PEER_HF_IND 20 +#define BTA_AG_MAX_NUM_LOCAL_HF_IND 4 /* Internal profile indexes */ -#define BTA_AG_HSP 0 /* index for HSP */ -#define BTA_AG_HFP 1 /* index for HFP */ -#define BTA_AG_NUM_IDX 2 /* number of profile indexes */ +#define BTA_AG_HSP 0 /* index for HSP */ +#define BTA_AG_HFP 1 /* index for HFP */ +#define BTA_AG_NUM_IDX 2 /* number of profile indexes */ /* profile role for connection */ -#define BTA_AG_ACP 0 /* accepted connection */ -#define BTA_AG_INT 1 /* initiating connection */ +#define BTA_AG_ACP 0 /* accepted connection */ +#define BTA_AG_INT 1 /* initiating connection */ /* feature mask that matches spec */ -#define BTA_AG_BSRF_FEAT_SPEC (BTA_AG_FEAT_3WAY | BTA_AG_FEAT_ECNR | \ - BTA_AG_FEAT_VREC | BTA_AG_FEAT_INBAND | \ - BTA_AG_FEAT_VTAG | BTA_AG_FEAT_REJECT | \ - BTA_AG_FEAT_ECS | BTA_AG_FEAT_ECC | \ - BTA_AG_FEAT_EXTERR | BTA_AG_FEAT_CODEC | \ - BTA_AG_FEAT_HF_IND | BTA_AG_FEAT_ESCO | \ - BTA_AG_FEAT_VOIP) - -#define BTA_AG_SDP_FEAT_SPEC (BTA_AG_FEAT_3WAY | BTA_AG_FEAT_ECNR | \ - BTA_AG_FEAT_VREC | BTA_AG_FEAT_INBAND | \ - BTA_AG_FEAT_VTAG) - -enum -{ - /* these events are handled by the state machine */ - BTA_AG_API_REGISTER_EVT = BTA_SYS_EVT_START(BTA_ID_AG), - BTA_AG_API_DEREGISTER_EVT, - BTA_AG_API_OPEN_EVT, - BTA_AG_API_CLOSE_EVT, - BTA_AG_API_AUDIO_OPEN_EVT, - BTA_AG_API_AUDIO_CLOSE_EVT, - BTA_AG_API_RESULT_EVT, - BTA_AG_API_SETCODEC_EVT, - BTA_AG_RFC_OPEN_EVT, - BTA_AG_RFC_CLOSE_EVT, - BTA_AG_RFC_SRV_CLOSE_EVT, - BTA_AG_RFC_DATA_EVT, - BTA_AG_SCO_OPEN_EVT, - BTA_AG_SCO_CLOSE_EVT, - BTA_AG_DISC_ACP_RES_EVT, - BTA_AG_DISC_INT_RES_EVT, - BTA_AG_DISC_OK_EVT, - BTA_AG_DISC_FAIL_EVT, - BTA_AG_CI_RX_WRITE_EVT, - BTA_AG_RING_TIMEOUT_EVT, - BTA_AG_SVC_TIMEOUT_EVT, - BTA_AG_CI_SCO_DATA_EVT, - BTA_AG_CI_SLC_READY_EVT, - BTA_AG_MAX_EVT, - - /* these events are handled outside of the state machine */ - BTA_AG_API_ENABLE_EVT, - BTA_AG_API_DISABLE_EVT +#define BTA_AG_BSRF_FEAT_SPEC \ + (BTA_AG_FEAT_3WAY | BTA_AG_FEAT_ECNR | BTA_AG_FEAT_VREC | \ + BTA_AG_FEAT_INBAND | BTA_AG_FEAT_VTAG | BTA_AG_FEAT_REJECT | \ + BTA_AG_FEAT_ECS | BTA_AG_FEAT_ECC | BTA_AG_FEAT_EXTERR | \ + BTA_AG_FEAT_CODEC | BTA_AG_FEAT_HF_IND | BTA_AG_FEAT_ESCO | \ + BTA_AG_FEAT_VOIP) + +#define BTA_AG_SDP_FEAT_SPEC \ + (BTA_AG_FEAT_3WAY | BTA_AG_FEAT_ECNR | BTA_AG_FEAT_VREC | \ + BTA_AG_FEAT_INBAND | BTA_AG_FEAT_VTAG) + +enum { + /* these events are handled by the state machine */ + BTA_AG_API_REGISTER_EVT = BTA_SYS_EVT_START(BTA_ID_AG), + BTA_AG_API_DEREGISTER_EVT, + BTA_AG_API_OPEN_EVT, + BTA_AG_API_CLOSE_EVT, + BTA_AG_API_AUDIO_OPEN_EVT, + BTA_AG_API_AUDIO_CLOSE_EVT, + BTA_AG_API_RESULT_EVT, + BTA_AG_API_SETCODEC_EVT, + BTA_AG_RFC_OPEN_EVT, + BTA_AG_RFC_CLOSE_EVT, + BTA_AG_RFC_SRV_CLOSE_EVT, + BTA_AG_RFC_DATA_EVT, + BTA_AG_SCO_OPEN_EVT, + BTA_AG_SCO_CLOSE_EVT, + BTA_AG_DISC_ACP_RES_EVT, + BTA_AG_DISC_INT_RES_EVT, + BTA_AG_DISC_OK_EVT, + BTA_AG_DISC_FAIL_EVT, + BTA_AG_CI_RX_WRITE_EVT, + BTA_AG_RING_TIMEOUT_EVT, + BTA_AG_SVC_TIMEOUT_EVT, + BTA_AG_CI_SCO_DATA_EVT, + BTA_AG_CI_SLC_READY_EVT, + BTA_AG_MAX_EVT, + + /* these events are handled outside of the state machine */ + BTA_AG_API_ENABLE_EVT, + BTA_AG_API_DISABLE_EVT }; /* Actions to perform after a SCO event */ -enum -{ - BTA_AG_POST_SCO_NONE, /* no action */ - BTA_AG_POST_SCO_CLOSE_RFC, /* close RFCOMM channel after SCO closes */ - BTA_AG_POST_SCO_RING, /* send RING result code after SCO opens */ - BTA_AG_POST_SCO_CALL_CONN, /* send call indicators after SCO opens/closes */ - BTA_AG_POST_SCO_CALL_ORIG, /* send call indicators after SCO closes */ - BTA_AG_POST_SCO_CALL_END, /* send call indicators after SCO closes */ - BTA_AG_POST_SCO_CALL_END_INCALL /* send call indicators for end call & incoming call after SCO closes */ +enum { + BTA_AG_POST_SCO_NONE, /* no action */ + BTA_AG_POST_SCO_CLOSE_RFC, /* close RFCOMM channel after SCO closes */ + BTA_AG_POST_SCO_RING, /* send RING result code after SCO opens */ + BTA_AG_POST_SCO_CALL_CONN, /* send call indicators after SCO opens/closes */ + BTA_AG_POST_SCO_CALL_ORIG, /* send call indicators after SCO closes */ + BTA_AG_POST_SCO_CALL_END, /* send call indicators after SCO closes */ + BTA_AG_POST_SCO_CALL_END_INCALL /* send call indicators for end call & + incoming call after SCO closes */ }; /* sco states */ -enum -{ - BTA_AG_SCO_SHUTDOWN_ST, /* no sco listening, all sco connections closed */ - BTA_AG_SCO_LISTEN_ST, /* sco listening */ +enum { + BTA_AG_SCO_SHUTDOWN_ST, /* no sco listening, all sco connections closed */ + BTA_AG_SCO_LISTEN_ST, /* sco listening */ #if (BTM_WBS_INCLUDED == TRUE) - BTA_AG_SCO_CODEC_ST, /* sco codec negotiation */ + BTA_AG_SCO_CODEC_ST, /* sco codec negotiation */ #endif - BTA_AG_SCO_OPENING_ST, /* sco connection opening */ - BTA_AG_SCO_OPEN_CL_ST, /* opening sco connection being closed */ - BTA_AG_SCO_OPEN_XFER_ST, /* opening sco connection being transferred */ - BTA_AG_SCO_OPEN_ST, /* sco open */ - BTA_AG_SCO_CLOSING_ST, /* sco closing */ - BTA_AG_SCO_CLOSE_OP_ST, /* closing sco being opened */ - BTA_AG_SCO_CLOSE_XFER_ST, /* closing sco being transferred */ - BTA_AG_SCO_SHUTTING_ST /* sco shutting down */ + BTA_AG_SCO_OPENING_ST, /* sco connection opening */ + BTA_AG_SCO_OPEN_CL_ST, /* opening sco connection being closed */ + BTA_AG_SCO_OPEN_XFER_ST, /* opening sco connection being transferred */ + BTA_AG_SCO_OPEN_ST, /* sco open */ + BTA_AG_SCO_CLOSING_ST, /* sco closing */ + BTA_AG_SCO_CLOSE_OP_ST, /* closing sco being opened */ + BTA_AG_SCO_CLOSE_XFER_ST, /* closing sco being transferred */ + BTA_AG_SCO_SHUTTING_ST /* sco shutting down */ }; /***************************************************************************** @@ -143,180 +140,169 @@ enum ****************************************************************************/ /* data type for BTA_AG_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_AG_PARSE_MODE parse_mode; - tBTA_AG_CBACK *p_cback; +typedef struct { + BT_HDR hdr; + tBTA_AG_PARSE_MODE parse_mode; + tBTA_AG_CBACK* p_cback; } tBTA_AG_API_ENABLE; /* data type for BTA_AG_API_REGISTER_EVT */ -typedef struct -{ - BT_HDR hdr; - char p_name[2][BTA_SERVICE_NAME_LEN+1]; - tBTA_SERVICE_MASK services; - tBTA_SEC sec_mask; - tBTA_AG_FEAT features; - uint8_t app_id; +typedef struct { + BT_HDR hdr; + char p_name[2][BTA_SERVICE_NAME_LEN + 1]; + tBTA_SERVICE_MASK services; + tBTA_SEC sec_mask; + tBTA_AG_FEAT features; + uint8_t app_id; } tBTA_AG_API_REGISTER; /* data type for BTA_AG_API_OPEN_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_SERVICE_MASK services; - tBTA_SEC sec_mask; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_SERVICE_MASK services; + tBTA_SEC sec_mask; } tBTA_AG_API_OPEN; /* data type for BTA_AG_API_RESULT_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_AG_RES result; - tBTA_AG_RES_DATA data; +typedef struct { + BT_HDR hdr; + tBTA_AG_RES result; + tBTA_AG_RES_DATA data; } tBTA_AG_API_RESULT; /* data type for BTA_AG_API_SETCODEC_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_AG_PEER_CODEC codec; +typedef struct { + BT_HDR hdr; + tBTA_AG_PEER_CODEC codec; } tBTA_AG_API_SETCODEC; /* data type for BTA_AG_DISC_RESULT_EVT */ -typedef struct -{ - BT_HDR hdr; - uint16_t status; +typedef struct { + BT_HDR hdr; + uint16_t status; } tBTA_AG_DISC_RESULT; /* data type for RFCOMM events */ -typedef struct -{ - BT_HDR hdr; - uint16_t port_handle; +typedef struct { + BT_HDR hdr; + uint16_t port_handle; } tBTA_AG_RFC; /* data type for BTA_AG_CI_RX_WRITE_EVT */ -typedef struct -{ - BT_HDR hdr; -// char p_data[BTA_AG_MTU+1]; +typedef struct { + BT_HDR hdr; + // char p_data[BTA_AG_MTU+1]; } tBTA_AG_CI_RX_WRITE; /* union of all event datatypes */ -typedef union -{ - BT_HDR hdr; - tBTA_AG_API_ENABLE api_enable; - tBTA_AG_API_REGISTER api_register; - tBTA_AG_API_OPEN api_open; - tBTA_AG_API_RESULT api_result; +typedef union { + BT_HDR hdr; + tBTA_AG_API_ENABLE api_enable; + tBTA_AG_API_REGISTER api_register; + tBTA_AG_API_OPEN api_open; + tBTA_AG_API_RESULT api_result; #if (BTM_WBS_INCLUDED == TRUE) - tBTA_AG_API_SETCODEC api_setcodec; + tBTA_AG_API_SETCODEC api_setcodec; #endif - tBTA_AG_DISC_RESULT disc_result; - tBTA_AG_RFC rfc; - tBTA_AG_CI_RX_WRITE ci_rx_write; + tBTA_AG_DISC_RESULT disc_result; + tBTA_AG_RFC rfc; + tBTA_AG_CI_RX_WRITE ci_rx_write; } tBTA_AG_DATA; /* type for each profile */ -typedef struct -{ - uint32_t sdp_handle; - uint8_t scn; +typedef struct { + uint32_t sdp_handle; + uint8_t scn; } tBTA_AG_PROFILE; #if (BTM_WBS_INCLUDED == TRUE) -typedef enum -{ - BTA_AG_SCO_MSBC_SETTINGS_T2 = 0, /* preferred/default when codec is mSBC */ - BTA_AG_SCO_MSBC_SETTINGS_T1, +typedef enum { + BTA_AG_SCO_MSBC_SETTINGS_T2 = 0, /* preferred/default when codec is mSBC */ + BTA_AG_SCO_MSBC_SETTINGS_T1, } tBTA_AG_SCO_MSBC_SETTINGS; #endif /* type for each service control block */ -typedef struct -{ - char clip[BTA_AG_AT_MAX_LEN+1]; /* number string used for CLIP */ - uint16_t serv_handle[BTA_AG_NUM_IDX]; /* RFCOMM server handles */ - tBTA_AG_AT_CB at_cb; /* AT command interpreter */ - BD_ADDR peer_addr; /* peer bd address */ - tSDP_DISCOVERY_DB *p_disc_db; /* pointer to discovery database */ - tBTA_SERVICE_MASK reg_services; /* services specified in register API */ - tBTA_SERVICE_MASK open_services; /* services specified in open API */ - uint16_t conn_handle; /* RFCOMM handle of connected service */ - tBTA_SEC serv_sec_mask; /* server security mask */ - tBTA_SEC cli_sec_mask; /* client security mask */ - tBTA_AG_FEAT features; /* features registered by application */ - tBTA_AG_PEER_FEAT peer_features; /* peer device features */ - uint16_t peer_version; /* profile version of peer device */ - uint16_t hsp_version; /* HSP profile version */ - uint16_t sco_idx; /* SCO handle */ - bool in_use; /* scb in use */ - bool dealloc; /* true if service shutting down */ - bool clip_enabled; /* set to true if HF enables CLIP reporting */ - bool ccwa_enabled; /* set to true if HF enables CCWA reporting */ - bool cmer_enabled; /* set to true if HF enables CMER reporting */ - bool cmee_enabled; /* set to true if HF enables CME ERROR reporting */ - bool inband_enabled; /* set to true if inband ring enabled */ - bool svc_conn; /* set to true when service level connection up */ - uint8_t state; /* state machine state */ - uint8_t conn_service; /* connected service */ - uint8_t peer_scn; /* peer scn */ - uint8_t app_id; /* application id */ - uint8_t role; /* initiator/acceptor role */ - uint8_t post_sco; /* action to perform after sco event */ - uint8_t call_ind; /* CIEV call indicator value */ - uint8_t callsetup_ind; /* CIEV callsetup indicator value */ - uint8_t service_ind; /* CIEV service indicator value */ - uint8_t signal_ind; /* CIEV signal indicator value */ - uint8_t roam_ind; /* CIEV roam indicator value */ - uint8_t battchg_ind; /* CIEV battery charge indicator value */ - uint8_t callheld_ind; /* CIEV call held indicator value */ - bool retry_with_sco_only; /* indicator to try with SCO only when eSCO fails */ - uint32_t bia_masked_out; /* indicators HF does not want us to send */ - alarm_t *collision_timer; - alarm_t *ring_timer; +typedef struct { + char clip[BTA_AG_AT_MAX_LEN + 1]; /* number string used for CLIP */ + uint16_t serv_handle[BTA_AG_NUM_IDX]; /* RFCOMM server handles */ + tBTA_AG_AT_CB at_cb; /* AT command interpreter */ + BD_ADDR peer_addr; /* peer bd address */ + tSDP_DISCOVERY_DB* p_disc_db; /* pointer to discovery database */ + tBTA_SERVICE_MASK reg_services; /* services specified in register API */ + tBTA_SERVICE_MASK open_services; /* services specified in open API */ + uint16_t conn_handle; /* RFCOMM handle of connected service */ + tBTA_SEC serv_sec_mask; /* server security mask */ + tBTA_SEC cli_sec_mask; /* client security mask */ + tBTA_AG_FEAT features; /* features registered by application */ + tBTA_AG_PEER_FEAT peer_features; /* peer device features */ + uint16_t peer_version; /* profile version of peer device */ + uint16_t hsp_version; /* HSP profile version */ + uint16_t sco_idx; /* SCO handle */ + bool in_use; /* scb in use */ + bool dealloc; /* true if service shutting down */ + bool clip_enabled; /* set to true if HF enables CLIP reporting */ + bool ccwa_enabled; /* set to true if HF enables CCWA reporting */ + bool cmer_enabled; /* set to true if HF enables CMER reporting */ + bool cmee_enabled; /* set to true if HF enables CME ERROR reporting */ + bool inband_enabled; /* set to true if inband ring enabled */ + bool svc_conn; /* set to true when service level connection up */ + uint8_t state; /* state machine state */ + uint8_t conn_service; /* connected service */ + uint8_t peer_scn; /* peer scn */ + uint8_t app_id; /* application id */ + uint8_t role; /* initiator/acceptor role */ + uint8_t post_sco; /* action to perform after sco event */ + uint8_t call_ind; /* CIEV call indicator value */ + uint8_t callsetup_ind; /* CIEV callsetup indicator value */ + uint8_t service_ind; /* CIEV service indicator value */ + uint8_t signal_ind; /* CIEV signal indicator value */ + uint8_t roam_ind; /* CIEV roam indicator value */ + uint8_t battchg_ind; /* CIEV battery charge indicator value */ + uint8_t callheld_ind; /* CIEV call held indicator value */ + bool retry_with_sco_only; /* indicator to try with SCO only when eSCO fails */ + uint32_t bia_masked_out; /* indicators HF does not want us to send */ + alarm_t* collision_timer; + alarm_t* ring_timer; #if (BTM_WBS_INCLUDED == TRUE) - alarm_t *codec_negotiation_timer; - tBTA_AG_PEER_CODEC peer_codecs; /* codecs for eSCO supported by the peer */ - tBTA_AG_PEER_CODEC sco_codec; /* codec to be used for eSCO connection */ - tBTA_AG_PEER_CODEC inuse_codec; /* codec being used for the current SCO connection */ - bool codec_updated; /* set to true whenever the app updates codec type */ - bool codec_fallback; /* If sco nego fails for mSBC, fallback to CVSD */ - tBTA_AG_SCO_MSBC_SETTINGS codec_msbc_settings; /* settings to be used for the impending eSCO */ + alarm_t* codec_negotiation_timer; + tBTA_AG_PEER_CODEC peer_codecs; /* codecs for eSCO supported by the peer */ + tBTA_AG_PEER_CODEC sco_codec; /* codec to be used for eSCO connection */ + tBTA_AG_PEER_CODEC + inuse_codec; /* codec being used for the current SCO connection */ + bool codec_updated; /* set to true whenever the app updates codec type */ + bool codec_fallback; /* If sco nego fails for mSBC, fallback to CVSD */ + tBTA_AG_SCO_MSBC_SETTINGS + codec_msbc_settings; /* settings to be used for the impending eSCO */ #endif - tBTA_AG_HF_IND peer_hf_indicators[BTA_AG_MAX_NUM_PEER_HF_IND]; /* Peer supported - HF indicators */ - tBTA_AG_HF_IND local_hf_indicators[BTA_AG_MAX_NUM_LOCAL_HF_IND]; /* Local supported - HF indicators */ + tBTA_AG_HF_IND + peer_hf_indicators[BTA_AG_MAX_NUM_PEER_HF_IND]; /* Peer supported + HF indicators */ + tBTA_AG_HF_IND + local_hf_indicators[BTA_AG_MAX_NUM_LOCAL_HF_IND]; /* Local supported + HF indicators */ } tBTA_AG_SCB; /* type for sco data */ -typedef struct -{ - tBTM_ESCO_CONN_REQ_EVT_DATA conn_data; /* SCO data for pending conn request */ - tBTA_AG_SCB *p_curr_scb; /* SCB associated with SCO connection */ - tBTA_AG_SCB *p_xfer_scb; /* SCB associated with SCO transfer */ - uint16_t cur_idx; /* SCO handle */ - uint8_t state; /* SCO state variable */ - bool param_updated; /* if params were updated to non-default */ - tBTM_ESCO_PARAMS params; /* ESCO parameters */ +typedef struct { + tBTM_ESCO_CONN_REQ_EVT_DATA conn_data; /* SCO data for pending conn request */ + tBTA_AG_SCB* p_curr_scb; /* SCB associated with SCO connection */ + tBTA_AG_SCB* p_xfer_scb; /* SCB associated with SCO transfer */ + uint16_t cur_idx; /* SCO handle */ + uint8_t state; /* SCO state variable */ + bool param_updated; /* if params were updated to non-default */ + tBTM_ESCO_PARAMS params; /* ESCO parameters */ } tBTA_AG_SCO_CB; - /* type for AG control block */ -typedef struct -{ - tBTA_AG_SCB scb[BTA_AG_NUM_SCB]; /* service control blocks */ - tBTA_AG_PROFILE profile[BTA_AG_NUM_IDX]; /* profile-specific data */ - tBTA_AG_SCO_CB sco; /* SCO data */ - tBTA_AG_CBACK *p_cback; /* application callback */ - tBTA_AG_PARSE_MODE parse_mode; /* parse/pass-through mode */ +typedef struct { + tBTA_AG_SCB scb[BTA_AG_NUM_SCB]; /* service control blocks */ + tBTA_AG_PROFILE profile[BTA_AG_NUM_IDX]; /* profile-specific data */ + tBTA_AG_SCO_CB sco; /* SCO data */ + tBTA_AG_CBACK* p_cback; /* application callback */ + tBTA_AG_PARSE_MODE parse_mode; /* parse/pass-through mode */ } tBTA_AG_CB; /***************************************************************************** @@ -326,13 +312,13 @@ typedef struct /* constant lookup tables */ extern const uint16_t bta_ag_uuid[BTA_AG_NUM_IDX]; extern const uint8_t bta_ag_sec_id[BTA_AG_NUM_IDX]; -extern const tBTA_AG_AT_CMD *bta_ag_at_tbl[BTA_AG_NUM_IDX]; +extern const tBTA_AG_AT_CMD* bta_ag_at_tbl[BTA_AG_NUM_IDX]; /* control block declaration */ extern tBTA_AG_CB bta_ag_cb; /* config struct */ -extern tBTA_AG_CFG *p_bta_ag_cfg; +extern tBTA_AG_CFG* p_bta_ag_cfg; extern const tBTA_AG_HF_IND bta_ag_local_hf_ind_cfg[]; /***************************************************************************** @@ -340,88 +326,93 @@ extern const tBTA_AG_HF_IND bta_ag_local_hf_ind_cfg[]; ****************************************************************************/ /* main functions */ -extern void bta_ag_scb_dealloc(tBTA_AG_SCB *p_scb); -extern uint16_t bta_ag_scb_to_idx(tBTA_AG_SCB *p_scb); -extern tBTA_AG_SCB *bta_ag_scb_by_idx(uint16_t idx); +extern void bta_ag_scb_dealloc(tBTA_AG_SCB* p_scb); +extern uint16_t bta_ag_scb_to_idx(tBTA_AG_SCB* p_scb); +extern tBTA_AG_SCB* bta_ag_scb_by_idx(uint16_t idx); extern uint8_t bta_ag_service_to_idx(tBTA_SERVICE_MASK services); extern uint16_t bta_ag_idx_by_bdaddr(BD_ADDR peer_addr); -extern bool bta_ag_other_scb_open(tBTA_AG_SCB *p_curr_scb); -extern bool bta_ag_scb_open(tBTA_AG_SCB *p_curr_scb); -extern tBTA_AG_SCB *bta_ag_get_other_idle_scb (tBTA_AG_SCB *p_curr_scb); -extern void bta_ag_sm_execute(tBTA_AG_SCB *p_scb, uint16_t event, tBTA_AG_DATA *p_data); -extern bool bta_ag_hdl_event(BT_HDR *p_msg); -extern void bta_ag_collision_cback (tBTA_SYS_CONN_STATUS status, uint8_t id, - uint8_t app_id, BD_ADDR peer_addr); -extern void bta_ag_resume_open (tBTA_AG_SCB *p_scb); +extern bool bta_ag_other_scb_open(tBTA_AG_SCB* p_curr_scb); +extern bool bta_ag_scb_open(tBTA_AG_SCB* p_curr_scb); +extern tBTA_AG_SCB* bta_ag_get_other_idle_scb(tBTA_AG_SCB* p_curr_scb); +extern void bta_ag_sm_execute(tBTA_AG_SCB* p_scb, uint16_t event, + tBTA_AG_DATA* p_data); +extern bool bta_ag_hdl_event(BT_HDR* p_msg); +extern void bta_ag_collision_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr); +extern void bta_ag_resume_open(tBTA_AG_SCB* p_scb); /* SDP functions */ -extern bool bta_ag_add_record(uint16_t service_uuid, char *p_service_name, uint8_t scn, - tBTA_AG_FEAT features, uint32_t sdp_handle); -extern void bta_ag_create_records(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_del_records(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern bool bta_ag_sdp_find_attr(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK service); -extern void bta_ag_do_disc(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK service); -extern void bta_ag_free_db(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); +extern bool bta_ag_add_record(uint16_t service_uuid, char* p_service_name, + uint8_t scn, tBTA_AG_FEAT features, + uint32_t sdp_handle); +extern void bta_ag_create_records(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_del_records(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service); +extern void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service); +extern void bta_ag_free_db(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); /* RFCOMM functions */ -extern void bta_ag_start_servers(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK services); -extern void bta_ag_close_servers(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK services); -extern bool bta_ag_is_server_closed (tBTA_AG_SCB *p_scb); -extern void bta_ag_rfc_do_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_rfc_do_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); +extern void bta_ag_start_servers(tBTA_AG_SCB* p_scb, + tBTA_SERVICE_MASK services); +extern void bta_ag_close_servers(tBTA_AG_SCB* p_scb, + tBTA_SERVICE_MASK services); +extern bool bta_ag_is_server_closed(tBTA_AG_SCB* p_scb); +extern void bta_ag_rfc_do_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_rfc_do_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); /* SCO functions */ -extern bool bta_ag_sco_is_open(tBTA_AG_SCB *p_scb); -extern bool bta_ag_sco_is_opening(tBTA_AG_SCB *p_scb); -extern void bta_ag_sco_conn_rsp(tBTA_AG_SCB *p_scb, tBTM_ESCO_CONN_REQ_EVT_DATA *p_data); +extern bool bta_ag_sco_is_open(tBTA_AG_SCB* p_scb); +extern bool bta_ag_sco_is_opening(tBTA_AG_SCB* p_scb); +extern void bta_ag_sco_conn_rsp(tBTA_AG_SCB* p_scb, + tBTM_ESCO_CONN_REQ_EVT_DATA* p_data); /* AT command functions */ -extern void bta_ag_at_hsp_cback(tBTA_AG_SCB *p_scb, uint16_t cmd, uint8_t arg_type, - char *p_arg, int16_t int_arg); -extern void bta_ag_at_hfp_cback(tBTA_AG_SCB *p_scb, uint16_t cmd, uint8_t arg_type, - char *p_arg, int16_t int_arg); -extern void bta_ag_at_err_cback(tBTA_AG_SCB *p_scb, bool unknown, char *p_arg); -extern bool bta_ag_inband_enabled(tBTA_AG_SCB *p_scb); -extern void bta_ag_send_call_inds(tBTA_AG_SCB *p_scb, tBTA_AG_RES result); +extern void bta_ag_at_hsp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, + uint8_t arg_type, char* p_arg, int16_t int_arg); +extern void bta_ag_at_hfp_cback(tBTA_AG_SCB* p_scb, uint16_t cmd, + uint8_t arg_type, char* p_arg, int16_t int_arg); +extern void bta_ag_at_err_cback(tBTA_AG_SCB* p_scb, bool unknown, char* p_arg); +extern bool bta_ag_inband_enabled(tBTA_AG_SCB* p_scb); +extern void bta_ag_send_call_inds(tBTA_AG_SCB* p_scb, tBTA_AG_RES result); /* Action functions */ -extern void bta_ag_register(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_deregister(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_start_dereg(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_start_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_start_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_disc_int_res(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_disc_acp_res(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_disc_fail(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_open_fail(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_rfc_fail(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_rfc_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_rfc_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_rfc_acp_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_rfc_data(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_sco_listen(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_sco_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_sco_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); +extern void bta_ag_register(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_deregister(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_start_dereg(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_start_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_start_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_disc_int_res(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_disc_acp_res(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_disc_fail(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_open_fail(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_rfc_fail(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_rfc_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_rfc_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_rfc_acp_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_rfc_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_sco_listen(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_sco_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_sco_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); #if (BTM_WBS_INCLUDED == TRUE) -extern void bta_ag_sco_codec_nego(tBTA_AG_SCB *p_scb, bool result); -extern void bta_ag_codec_negotiate (tBTA_AG_SCB *p_scb); +extern void bta_ag_sco_codec_nego(tBTA_AG_SCB* p_scb, bool result); +extern void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb); #endif -extern void bta_ag_sco_shutdown(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_sco_conn_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_sco_conn_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_post_sco_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_post_sco_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_svc_conn_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_result(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_setcodec(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); +extern void bta_ag_sco_shutdown(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_sco_conn_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_sco_conn_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_post_sco_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_post_sco_close(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_svc_conn_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_result(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_setcodec(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); #if (BTM_WBS_INCLUDED == TRUE) -extern void bta_ag_send_bcs(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); +extern void bta_ag_send_bcs(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); #endif -extern void bta_ag_send_ring(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_ci_sco_data(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_set_esco_param(bool set_reset, tBTM_ESCO_PARAMS *param); -extern void bta_ag_ci_rx_data(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); -extern void bta_ag_rcvd_slc_ready(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); +extern void bta_ag_send_ring(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_ci_sco_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_set_esco_param(bool set_reset, tBTM_ESCO_PARAMS* param); +extern void bta_ag_ci_rx_data(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); +extern void bta_ag_rcvd_slc_ready(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); #ifdef __cplusplus } diff --git a/system/bta/ag/bta_ag_main.cc b/system/bta/ag/bta_ag_main.cc index 4c4fd6a34ea..44965eafb74 100644 --- a/system/bta/ag/bta_ag_main.cc +++ b/system/bta/ag/bta_ag_main.cc @@ -24,10 +24,10 @@ #include -#include "bta_api.h" -#include "bta_sys.h" #include "bta_ag_co.h" #include "bta_ag_int.h" +#include "bta_api.h" +#include "bta_sys.h" #include "osi/include/osi.h" #include "utl.h" @@ -38,241 +38,207 @@ #define BTA_AG_DEBUG FALSE #endif -extern fixed_queue_t *btu_bta_alarm_queue; +extern fixed_queue_t* btu_bta_alarm_queue; #if (BTA_AG_DEBUG == TRUE) -static char *bta_ag_evt_str(uint16_t event, tBTA_AG_RES result); -static char *bta_ag_state_str(uint8_t state); +static char* bta_ag_evt_str(uint16_t event, tBTA_AG_RES result); +static char* bta_ag_state_str(uint8_t state); #endif /* state machine states */ -enum -{ - BTA_AG_INIT_ST, - BTA_AG_OPENING_ST, - BTA_AG_OPEN_ST, - BTA_AG_CLOSING_ST -}; +enum { BTA_AG_INIT_ST, BTA_AG_OPENING_ST, BTA_AG_OPEN_ST, BTA_AG_CLOSING_ST }; /* state machine action enumeration list */ -enum -{ - BTA_AG_REGISTER, - BTA_AG_DEREGISTER, - BTA_AG_START_OPEN, - BTA_AG_RFC_DO_OPEN, - BTA_AG_RFC_DO_CLOSE, - BTA_AG_START_DEREG, - BTA_AG_START_CLOSE, - BTA_AG_RFC_OPEN, - BTA_AG_OPEN_FAIL, - BTA_AG_RFC_ACP_OPEN, - BTA_AG_RFC_CLOSE, - BTA_AG_RFC_FAIL, - BTA_AG_RFC_DATA, - BTA_AG_DISC_INT_RES, - BTA_AG_DISC_FAIL, - BTA_AG_DISC_ACP_RES, - BTA_AG_FREE_DB, - BTA_AG_SCO_CONN_OPEN, - BTA_AG_SCO_CONN_CLOSE, - BTA_AG_SCO_LISTEN, - BTA_AG_SCO_OPEN, - BTA_AG_SCO_CLOSE, - BTA_AG_SCO_SHUTDOWN, - BTA_AG_POST_SCO_OPEN, - BTA_AG_POST_SCO_CLOSE, - BTA_AG_SVC_CONN_OPEN, - BTA_AG_RESULT, - BTA_AG_SETCODEC, - BTA_AG_SEND_RING, - BTA_AG_CI_SCO_DATA, - BTA_AG_CI_RX_DATA, - BTA_AG_RCVD_SLC_READY, - BTA_AG_NUM_ACTIONS +enum { + BTA_AG_REGISTER, + BTA_AG_DEREGISTER, + BTA_AG_START_OPEN, + BTA_AG_RFC_DO_OPEN, + BTA_AG_RFC_DO_CLOSE, + BTA_AG_START_DEREG, + BTA_AG_START_CLOSE, + BTA_AG_RFC_OPEN, + BTA_AG_OPEN_FAIL, + BTA_AG_RFC_ACP_OPEN, + BTA_AG_RFC_CLOSE, + BTA_AG_RFC_FAIL, + BTA_AG_RFC_DATA, + BTA_AG_DISC_INT_RES, + BTA_AG_DISC_FAIL, + BTA_AG_DISC_ACP_RES, + BTA_AG_FREE_DB, + BTA_AG_SCO_CONN_OPEN, + BTA_AG_SCO_CONN_CLOSE, + BTA_AG_SCO_LISTEN, + BTA_AG_SCO_OPEN, + BTA_AG_SCO_CLOSE, + BTA_AG_SCO_SHUTDOWN, + BTA_AG_POST_SCO_OPEN, + BTA_AG_POST_SCO_CLOSE, + BTA_AG_SVC_CONN_OPEN, + BTA_AG_RESULT, + BTA_AG_SETCODEC, + BTA_AG_SEND_RING, + BTA_AG_CI_SCO_DATA, + BTA_AG_CI_RX_DATA, + BTA_AG_RCVD_SLC_READY, + BTA_AG_NUM_ACTIONS }; -#define BTA_AG_IGNORE BTA_AG_NUM_ACTIONS +#define BTA_AG_IGNORE BTA_AG_NUM_ACTIONS /* type for action functions */ -typedef void (*tBTA_AG_ACTION)(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); +typedef void (*tBTA_AG_ACTION)(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data); /* action functions */ -const tBTA_AG_ACTION bta_ag_action[] = -{ - bta_ag_register, - bta_ag_deregister, - bta_ag_start_open, - bta_ag_rfc_do_open, - bta_ag_rfc_do_close, - bta_ag_start_dereg, - bta_ag_start_close, - bta_ag_rfc_open, - bta_ag_open_fail, - bta_ag_rfc_acp_open, - bta_ag_rfc_close, - bta_ag_rfc_fail, - bta_ag_rfc_data, - bta_ag_disc_int_res, - bta_ag_disc_fail, - bta_ag_disc_acp_res, - bta_ag_free_db, - bta_ag_sco_conn_open, - bta_ag_sco_conn_close, - bta_ag_sco_listen, - bta_ag_sco_open, - bta_ag_sco_close, - bta_ag_sco_shutdown, - bta_ag_post_sco_open, - bta_ag_post_sco_close, - bta_ag_svc_conn_open, - bta_ag_result, - bta_ag_setcodec, - bta_ag_send_ring, - bta_ag_ci_sco_data, - bta_ag_ci_rx_data, - bta_ag_rcvd_slc_ready -}; +const tBTA_AG_ACTION bta_ag_action[] = { + bta_ag_register, bta_ag_deregister, bta_ag_start_open, + bta_ag_rfc_do_open, bta_ag_rfc_do_close, bta_ag_start_dereg, + bta_ag_start_close, bta_ag_rfc_open, bta_ag_open_fail, + bta_ag_rfc_acp_open, bta_ag_rfc_close, bta_ag_rfc_fail, + bta_ag_rfc_data, bta_ag_disc_int_res, bta_ag_disc_fail, + bta_ag_disc_acp_res, bta_ag_free_db, bta_ag_sco_conn_open, + bta_ag_sco_conn_close, bta_ag_sco_listen, bta_ag_sco_open, + bta_ag_sco_close, bta_ag_sco_shutdown, bta_ag_post_sco_open, + bta_ag_post_sco_close, bta_ag_svc_conn_open, bta_ag_result, + bta_ag_setcodec, bta_ag_send_ring, bta_ag_ci_sco_data, + bta_ag_ci_rx_data, bta_ag_rcvd_slc_ready}; /* state table information */ -#define BTA_AG_ACTIONS 2 /* number of actions */ -#define BTA_AG_NEXT_STATE 2 /* position of next state */ -#define BTA_AG_NUM_COLS 3 /* number of columns in state tables */ +#define BTA_AG_ACTIONS 2 /* number of actions */ +#define BTA_AG_NEXT_STATE 2 /* position of next state */ +#define BTA_AG_NUM_COLS 3 /* number of columns in state tables */ /* state table for init state */ -const uint8_t bta_ag_st_init[][BTA_AG_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* API_REGISTER_EVT */ {BTA_AG_REGISTER, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* API_DEREGISTER_EVT */ {BTA_AG_DEREGISTER, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* API_OPEN_EVT */ {BTA_AG_START_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* API_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* RFC_OPEN_EVT */ {BTA_AG_RFC_ACP_OPEN, BTA_AG_SCO_LISTEN, BTA_AG_OPEN_ST}, -/* RFC_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* DISC_ACP_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* DISC_INT_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST} -}; +const uint8_t bta_ag_st_init[][BTA_AG_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* API_REGISTER_EVT */ {BTA_AG_REGISTER, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* API_DEREGISTER_EVT */ {BTA_AG_DEREGISTER, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* API_OPEN_EVT */ {BTA_AG_START_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* API_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* RFC_OPEN_EVT */ {BTA_AG_RFC_ACP_OPEN, BTA_AG_SCO_LISTEN, BTA_AG_OPEN_ST}, + /* RFC_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* DISC_ACP_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* DISC_INT_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}}; /* state table for opening state */ -const uint8_t bta_ag_st_opening[][BTA_AG_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* API_DEREGISTER_EVT */ {BTA_AG_RFC_DO_CLOSE, BTA_AG_START_DEREG, BTA_AG_CLOSING_ST}, -/* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* API_CLOSE_EVT */ {BTA_AG_RFC_DO_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* RFC_OPEN_EVT */ {BTA_AG_RFC_OPEN, BTA_AG_SCO_LISTEN, BTA_AG_OPEN_ST}, -/* RFC_CLOSE_EVT */ {BTA_AG_RFC_FAIL, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* DISC_ACP_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* DISC_INT_RES_EVT */ {BTA_AG_DISC_INT_RES, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* DISC_OK_EVT */ {BTA_AG_RFC_DO_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* DISC_FAIL_EVT */ {BTA_AG_DISC_FAIL, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, -/* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST} -}; +const uint8_t bta_ag_st_opening[][BTA_AG_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* API_DEREGISTER_EVT */ {BTA_AG_RFC_DO_CLOSE, BTA_AG_START_DEREG, + BTA_AG_CLOSING_ST}, + /* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* API_CLOSE_EVT */ {BTA_AG_RFC_DO_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* RFC_OPEN_EVT */ {BTA_AG_RFC_OPEN, BTA_AG_SCO_LISTEN, BTA_AG_OPEN_ST}, + /* RFC_CLOSE_EVT */ {BTA_AG_RFC_FAIL, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_IGNORE, + BTA_AG_OPENING_ST}, + /* DISC_ACP_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* DISC_INT_RES_EVT */ {BTA_AG_DISC_INT_RES, BTA_AG_IGNORE, + BTA_AG_OPENING_ST}, + /* DISC_OK_EVT */ {BTA_AG_RFC_DO_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* DISC_FAIL_EVT */ {BTA_AG_DISC_FAIL, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, + /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}}; /* state table for open state */ -const uint8_t bta_ag_st_open[][BTA_AG_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* API_DEREGISTER_EVT */ {BTA_AG_START_CLOSE, BTA_AG_START_DEREG, BTA_AG_CLOSING_ST}, -/* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* API_CLOSE_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_AUDIO_OPEN_EVT */ {BTA_AG_SCO_OPEN, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* API_AUDIO_CLOSE_EVT */ {BTA_AG_SCO_CLOSE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* API_RESULT_EVT */ {BTA_AG_RESULT, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* API_SETCODEC_EVT */ {BTA_AG_SETCODEC, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* RFC_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* RFC_CLOSE_EVT */ {BTA_AG_RFC_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* RFC_DATA_EVT */ {BTA_AG_RFC_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_POST_SCO_OPEN, BTA_AG_OPEN_ST}, -/* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE, BTA_AG_OPEN_ST}, -/* DISC_ACP_RES_EVT */ {BTA_AG_DISC_ACP_RES, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* DISC_INT_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* CI_RX_WRITE_EVT */ {BTA_AG_CI_RX_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* RING_TOUT_EVT */ {BTA_AG_SEND_RING, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* SVC_TOUT_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* CI_SCO_DATA_EVT */ {BTA_AG_CI_SCO_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, -/* CI_SLC_READY_EVT */ {BTA_AG_RCVD_SLC_READY, BTA_AG_IGNORE, BTA_AG_OPEN_ST} -}; +const uint8_t bta_ag_st_open[][BTA_AG_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* API_DEREGISTER_EVT */ {BTA_AG_START_CLOSE, BTA_AG_START_DEREG, + BTA_AG_CLOSING_ST}, + /* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* API_CLOSE_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* API_AUDIO_OPEN_EVT */ {BTA_AG_SCO_OPEN, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* API_AUDIO_CLOSE_EVT */ {BTA_AG_SCO_CLOSE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* API_RESULT_EVT */ {BTA_AG_RESULT, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* API_SETCODEC_EVT */ {BTA_AG_SETCODEC, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* RFC_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* RFC_CLOSE_EVT */ {BTA_AG_RFC_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* RFC_DATA_EVT */ {BTA_AG_RFC_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_POST_SCO_OPEN, + BTA_AG_OPEN_ST}, + /* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE, + BTA_AG_OPEN_ST}, + /* DISC_ACP_RES_EVT */ {BTA_AG_DISC_ACP_RES, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* DISC_INT_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* CI_RX_WRITE_EVT */ {BTA_AG_CI_RX_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* RING_TOUT_EVT */ {BTA_AG_SEND_RING, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* SVC_TOUT_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* CI_SCO_DATA_EVT */ {BTA_AG_CI_SCO_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, + /* CI_SLC_READY_EVT */ {BTA_AG_RCVD_SLC_READY, BTA_AG_IGNORE, + BTA_AG_OPEN_ST}}; /* state table for closing state */ -const uint8_t bta_ag_st_closing[][BTA_AG_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_DEREGISTER_EVT */ {BTA_AG_START_DEREG, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* RFC_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* RFC_CLOSE_EVT */ {BTA_AG_RFC_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE, BTA_AG_CLOSING_ST}, -/* DISC_ACP_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* DISC_INT_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_INIT_ST}, -/* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, -/* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST} -}; +const uint8_t bta_ag_st_closing[][BTA_AG_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* API_DEREGISTER_EVT */ {BTA_AG_START_DEREG, BTA_AG_IGNORE, + BTA_AG_CLOSING_ST}, + /* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* API_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* RFC_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* RFC_CLOSE_EVT */ {BTA_AG_RFC_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE, + BTA_AG_CLOSING_ST}, + /* DISC_ACP_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* DISC_INT_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_INIT_ST}, + /* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, + /* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}}; /* type for state table */ typedef const uint8_t (*tBTA_AG_ST_TBL)[BTA_AG_NUM_COLS]; /* state table */ -const tBTA_AG_ST_TBL bta_ag_st_tbl[] = -{ - bta_ag_st_init, - bta_ag_st_opening, - bta_ag_st_open, - bta_ag_st_closing -}; +const tBTA_AG_ST_TBL bta_ag_st_tbl[] = {bta_ag_st_init, bta_ag_st_opening, + bta_ag_st_open, bta_ag_st_closing}; /***************************************************************************** * Global data ****************************************************************************/ /* AG control block */ -tBTA_AG_CB bta_ag_cb; +tBTA_AG_CB bta_ag_cb; /******************************************************************************* * @@ -284,44 +250,40 @@ tBTA_AG_CB bta_ag_cb; * Returns pointer to the scb, or NULL if none could be allocated. * ******************************************************************************/ -static tBTA_AG_SCB *bta_ag_scb_alloc(void) -{ - tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; - int i; - - for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) - { - if (!p_scb->in_use) - { - /* initialize variables */ - p_scb->in_use = true; - p_scb->sco_idx = BTM_INVALID_SCO_INDEX; +static tBTA_AG_SCB* bta_ag_scb_alloc(void) { + tBTA_AG_SCB* p_scb = &bta_ag_cb.scb[0]; + int i; + + for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) { + if (!p_scb->in_use) { + /* initialize variables */ + p_scb->in_use = true; + p_scb->sco_idx = BTM_INVALID_SCO_INDEX; #if (BTM_WBS_INCLUDED == TRUE) - p_scb->codec_updated = false; - p_scb->peer_codecs = BTA_AG_CODEC_CVSD; - p_scb->sco_codec = BTA_AG_CODEC_CVSD; + p_scb->codec_updated = false; + p_scb->peer_codecs = BTA_AG_CODEC_CVSD; + p_scb->sco_codec = BTA_AG_CODEC_CVSD; #endif - /* set up timers */ - p_scb->ring_timer = alarm_new("bta_ag.scb_ring_timer"); - p_scb->collision_timer = alarm_new("bta_ag.scb_collision_timer"); + /* set up timers */ + p_scb->ring_timer = alarm_new("bta_ag.scb_ring_timer"); + p_scb->collision_timer = alarm_new("bta_ag.scb_collision_timer"); #if (BTM_WBS_INCLUDED == TRUE) - p_scb->codec_negotiation_timer = - alarm_new("bta_ag.scb_codec_negotiation_timer"); - /* set eSCO mSBC setting to T2 as the preferred */ - p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; + p_scb->codec_negotiation_timer = + alarm_new("bta_ag.scb_codec_negotiation_timer"); + /* set eSCO mSBC setting to T2 as the preferred */ + p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; #endif - APPL_TRACE_DEBUG("bta_ag_scb_alloc %d", bta_ag_scb_to_idx(p_scb)); - break; - } - } - - if (i == BTA_AG_NUM_SCB) - { - /* out of scbs */ - p_scb = NULL; - APPL_TRACE_WARNING("Out of ag scbs"); + APPL_TRACE_DEBUG("bta_ag_scb_alloc %d", bta_ag_scb_to_idx(p_scb)); + break; } - return p_scb; + } + + if (i == BTA_AG_NUM_SCB) { + /* out of scbs */ + p_scb = NULL; + APPL_TRACE_WARNING("Out of ag scbs"); + } + return p_scb; } /******************************************************************************* @@ -334,42 +296,36 @@ static tBTA_AG_SCB *bta_ag_scb_alloc(void) * Returns void * ******************************************************************************/ -void bta_ag_scb_dealloc(tBTA_AG_SCB *p_scb) -{ - uint8_t idx; - bool allocated = false; +void bta_ag_scb_dealloc(tBTA_AG_SCB* p_scb) { + uint8_t idx; + bool allocated = false; - APPL_TRACE_DEBUG("bta_ag_scb_dealloc %d", bta_ag_scb_to_idx(p_scb)); + APPL_TRACE_DEBUG("bta_ag_scb_dealloc %d", bta_ag_scb_to_idx(p_scb)); - /* stop and free timers */ - alarm_free(p_scb->ring_timer); + /* stop and free timers */ + alarm_free(p_scb->ring_timer); #if (BTM_WBS_INCLUDED == TRUE) - alarm_free(p_scb->codec_negotiation_timer); + alarm_free(p_scb->codec_negotiation_timer); #endif - alarm_free(p_scb->collision_timer); - - /* initialize control block */ - memset(p_scb, 0, sizeof(tBTA_AG_SCB)); - p_scb->sco_idx = BTM_INVALID_SCO_INDEX; - - /* If all scbs are deallocated, callback with disable event */ - if (!bta_sys_is_register (BTA_ID_AG)) - { - for (idx = 0; idx < BTA_AG_NUM_SCB; idx++) - { - if (bta_ag_cb.scb[idx].in_use) - { - allocated = true; - break; - } - } - - if (!allocated) - { - (*bta_ag_cb.p_cback)(BTA_AG_DISABLE_EVT, NULL); - } + alarm_free(p_scb->collision_timer); + + /* initialize control block */ + memset(p_scb, 0, sizeof(tBTA_AG_SCB)); + p_scb->sco_idx = BTM_INVALID_SCO_INDEX; + + /* If all scbs are deallocated, callback with disable event */ + if (!bta_sys_is_register(BTA_ID_AG)) { + for (idx = 0; idx < BTA_AG_NUM_SCB; idx++) { + if (bta_ag_cb.scb[idx].in_use) { + allocated = true; + break; + } } + if (!allocated) { + (*bta_ag_cb.p_cback)(BTA_AG_DISABLE_EVT, NULL); + } + } } /******************************************************************************* @@ -382,10 +338,9 @@ void bta_ag_scb_dealloc(tBTA_AG_SCB *p_scb) * Returns Index of scb. * ******************************************************************************/ -uint16_t bta_ag_scb_to_idx(tBTA_AG_SCB *p_scb) -{ - /* use array arithmetic to determine index */ - return ((uint16_t) (p_scb - bta_ag_cb.scb)) + 1; +uint16_t bta_ag_scb_to_idx(tBTA_AG_SCB* p_scb) { + /* use array arithmetic to determine index */ + return ((uint16_t)(p_scb - bta_ag_cb.scb)) + 1; } /******************************************************************************* @@ -398,26 +353,21 @@ uint16_t bta_ag_scb_to_idx(tBTA_AG_SCB *p_scb) * Returns Pointer to scb or NULL if not allocated. * ******************************************************************************/ -tBTA_AG_SCB *bta_ag_scb_by_idx(uint16_t idx) -{ - tBTA_AG_SCB *p_scb; - - /* verify index */ - if (idx > 0 && idx <= BTA_AG_NUM_SCB) - { - p_scb = &bta_ag_cb.scb[idx - 1]; - if (!p_scb->in_use) - { - p_scb = NULL; - APPL_TRACE_WARNING("ag scb idx %d not allocated", idx); - } +tBTA_AG_SCB* bta_ag_scb_by_idx(uint16_t idx) { + tBTA_AG_SCB* p_scb; + + /* verify index */ + if (idx > 0 && idx <= BTA_AG_NUM_SCB) { + p_scb = &bta_ag_cb.scb[idx - 1]; + if (!p_scb->in_use) { + p_scb = NULL; + APPL_TRACE_WARNING("ag scb idx %d not allocated", idx); } - else - { - p_scb = NULL; - APPL_TRACE_DEBUG("ag scb idx %d out of range", idx); - } - return p_scb; + } else { + p_scb = NULL; + APPL_TRACE_DEBUG("ag scb idx %d out of range", idx); + } + return p_scb; } /******************************************************************************* @@ -430,16 +380,12 @@ tBTA_AG_SCB *bta_ag_scb_by_idx(uint16_t idx) * Returns Profile ndex of scb. * ******************************************************************************/ -uint8_t bta_ag_service_to_idx(tBTA_SERVICE_MASK services) -{ - if (services & BTA_HFP_SERVICE_MASK) - { - return BTA_AG_HFP; - } - else - { - return BTA_AG_HSP; - } +uint8_t bta_ag_service_to_idx(tBTA_SERVICE_MASK services) { + if (services & BTA_HFP_SERVICE_MASK) { + return BTA_AG_HFP; + } else { + return BTA_AG_HSP; + } } /******************************************************************************* @@ -452,25 +398,21 @@ uint8_t bta_ag_service_to_idx(tBTA_SERVICE_MASK services) * Returns Index of SCB or zero if none found. * ******************************************************************************/ -uint16_t bta_ag_idx_by_bdaddr(BD_ADDR peer_addr) -{ - tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; - uint16_t i; - - if (peer_addr != NULL) - { - for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) - { - if (p_scb->in_use && !bdcmp(peer_addr, p_scb->peer_addr)) - { - return (i + 1); - } - } +uint16_t bta_ag_idx_by_bdaddr(BD_ADDR peer_addr) { + tBTA_AG_SCB* p_scb = &bta_ag_cb.scb[0]; + uint16_t i; + + if (peer_addr != NULL) { + for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) { + if (p_scb->in_use && !bdcmp(peer_addr, p_scb->peer_addr)) { + return (i + 1); + } } + } - /* no scb found */ - APPL_TRACE_WARNING("No ag scb for peer addr"); - return 0; + /* no scb found */ + APPL_TRACE_WARNING("No ag scb for peer addr"); + return 0; } /******************************************************************************* @@ -483,22 +425,20 @@ uint16_t bta_ag_idx_by_bdaddr(BD_ADDR peer_addr) * Returns true if another scb is in open state, false otherwise. * ******************************************************************************/ -bool bta_ag_other_scb_open(tBTA_AG_SCB *p_curr_scb) -{ - tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; - int i; - - for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) - { - if (p_scb->in_use && p_scb != p_curr_scb && p_scb->state == BTA_AG_OPEN_ST) - { - return true; - } +bool bta_ag_other_scb_open(tBTA_AG_SCB* p_curr_scb) { + tBTA_AG_SCB* p_scb = &bta_ag_cb.scb[0]; + int i; + + for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) { + if (p_scb->in_use && p_scb != p_curr_scb && + p_scb->state == BTA_AG_OPEN_ST) { + return true; } + } - /* no other scb found */ - APPL_TRACE_DEBUG("No other ag scb open"); - return false; + /* no other scb found */ + APPL_TRACE_DEBUG("No other ag scb open"); + return false; } /******************************************************************************* @@ -511,14 +451,12 @@ bool bta_ag_other_scb_open(tBTA_AG_SCB *p_curr_scb) * Returns true if scb is in open state, false otherwise. * ******************************************************************************/ -bool bta_ag_scb_open(tBTA_AG_SCB *p_curr_scb) -{ - if (p_curr_scb && p_curr_scb->in_use && p_curr_scb->state == BTA_AG_OPEN_ST) - { - return true; - } +bool bta_ag_scb_open(tBTA_AG_SCB* p_curr_scb) { + if (p_curr_scb && p_curr_scb->in_use && p_curr_scb->state == BTA_AG_OPEN_ST) { + return true; + } - return false; + return false; } /******************************************************************************* @@ -531,22 +469,20 @@ bool bta_ag_scb_open(tBTA_AG_SCB *p_curr_scb) * Returns Pointer to other scb if INIT st, NULL otherwise. * ******************************************************************************/ -tBTA_AG_SCB *bta_ag_get_other_idle_scb (tBTA_AG_SCB *p_curr_scb) -{ - tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; - uint8_t xx; - - for (xx = 0; xx < BTA_AG_NUM_SCB; xx++, p_scb++) - { - if (p_scb->in_use && (p_scb != p_curr_scb) && (p_scb->state == BTA_AG_INIT_ST)) - { - return p_scb; - } +tBTA_AG_SCB* bta_ag_get_other_idle_scb(tBTA_AG_SCB* p_curr_scb) { + tBTA_AG_SCB* p_scb = &bta_ag_cb.scb[0]; + uint8_t xx; + + for (xx = 0; xx < BTA_AG_NUM_SCB; xx++, p_scb++) { + if (p_scb->in_use && (p_scb != p_curr_scb) && + (p_scb->state == BTA_AG_INIT_ST)) { + return p_scb; } + } - /* no other scb found */ - APPL_TRACE_DEBUG("bta_ag_get_other_idle_scb: No idle AG scb"); - return NULL; + /* no other scb found */ + APPL_TRACE_DEBUG("bta_ag_get_other_idle_scb: No idle AG scb"); + return NULL; } /******************************************************************************* @@ -559,15 +495,14 @@ tBTA_AG_SCB *bta_ag_get_other_idle_scb (tBTA_AG_SCB *p_curr_scb) * Returns void * ******************************************************************************/ -static void bta_ag_collision_timer_cback(void *data) -{ - tBTA_AG_SCB *p_scb = (tBTA_AG_SCB *)data; +static void bta_ag_collision_timer_cback(void* data) { + tBTA_AG_SCB* p_scb = (tBTA_AG_SCB*)data; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - /* If the peer haven't opened AG connection */ - /* we will restart opening process. */ - bta_ag_resume_open(p_scb); + /* If the peer haven't opened AG connection */ + /* we will restart opening process. */ + bta_ag_resume_open(p_scb); } /******************************************************************************* @@ -580,50 +515,44 @@ static void bta_ag_collision_timer_cback(void *data) * Returns void * ******************************************************************************/ -void bta_ag_collision_cback (UNUSED_ATTR tBTA_SYS_CONN_STATUS status, uint8_t id, - UNUSED_ATTR uint8_t app_id, BD_ADDR peer_addr) -{ - uint16_t handle; - tBTA_AG_SCB *p_scb; +void bta_ag_collision_cback(UNUSED_ATTR tBTA_SYS_CONN_STATUS status, uint8_t id, + UNUSED_ATTR uint8_t app_id, BD_ADDR peer_addr) { + uint16_t handle; + tBTA_AG_SCB* p_scb; - /* Check if we have opening scb for the peer device. */ - handle = bta_ag_idx_by_bdaddr (peer_addr); - p_scb = bta_ag_scb_by_idx (handle); + /* Check if we have opening scb for the peer device. */ + handle = bta_ag_idx_by_bdaddr(peer_addr); + p_scb = bta_ag_scb_by_idx(handle); - if (p_scb && (p_scb->state == BTA_AG_OPENING_ST)) + if (p_scb && (p_scb->state == BTA_AG_OPENING_ST)) { + if (id == BTA_ID_SYS) /* ACL collision */ + { + APPL_TRACE_WARNING("AG found collision (ACL) ..."); + } else if (id == BTA_ID_AG) /* RFCOMM collision */ { - if (id == BTA_ID_SYS) /* ACL collision */ - { - APPL_TRACE_WARNING ("AG found collision (ACL) ..."); - } - else if (id == BTA_ID_AG) /* RFCOMM collision */ - { - APPL_TRACE_WARNING ("AG found collision (RFCOMM) ..."); - } - else - { - APPL_TRACE_WARNING ("AG found collision (\?\?\?) ..."); - } - - p_scb->state = BTA_AG_INIT_ST; - - /* Cancel SDP if it had been started. */ - if(p_scb->p_disc_db) - { - (void)SDP_CancelServiceSearch (p_scb->p_disc_db); - bta_ag_free_db(p_scb, NULL); - } - - /* reopen registered servers */ - /* Collision may be detected before or after we close servers. */ - if (bta_ag_is_server_closed (p_scb)) - bta_ag_start_servers(p_scb, p_scb->reg_services); - - /* Start timer to han */ - alarm_set_on_queue(p_scb->collision_timer, BTA_AG_COLLISION_TIMEOUT_MS, - bta_ag_collision_timer_cback, p_scb, - btu_bta_alarm_queue); + APPL_TRACE_WARNING("AG found collision (RFCOMM) ..."); + } else { + APPL_TRACE_WARNING("AG found collision (\?\?\?) ..."); } + + p_scb->state = BTA_AG_INIT_ST; + + /* Cancel SDP if it had been started. */ + if (p_scb->p_disc_db) { + (void)SDP_CancelServiceSearch(p_scb->p_disc_db); + bta_ag_free_db(p_scb, NULL); + } + + /* reopen registered servers */ + /* Collision may be detected before or after we close servers. */ + if (bta_ag_is_server_closed(p_scb)) + bta_ag_start_servers(p_scb, p_scb->reg_services); + + /* Start timer to han */ + alarm_set_on_queue(p_scb->collision_timer, BTA_AG_COLLISION_TIMEOUT_MS, + bta_ag_collision_timer_cback, p_scb, + btu_bta_alarm_queue); + } } /******************************************************************************* @@ -636,23 +565,19 @@ void bta_ag_collision_cback (UNUSED_ATTR tBTA_SYS_CONN_STATUS status, uint8_t id * Returns void * ******************************************************************************/ -void bta_ag_resume_open (tBTA_AG_SCB *p_scb) -{ - if (p_scb) - { - APPL_TRACE_DEBUG ("bta_ag_resume_open, Handle(%d)", bta_ag_scb_to_idx(p_scb)); - - /* resume opening process. */ - if (p_scb->state == BTA_AG_INIT_ST) - { - p_scb->state = BTA_AG_OPENING_ST; - bta_ag_start_open (p_scb, NULL); - } - } - else - { - APPL_TRACE_ERROR ("bta_ag_resume_open, Null p_scb"); +void bta_ag_resume_open(tBTA_AG_SCB* p_scb) { + if (p_scb) { + APPL_TRACE_DEBUG("bta_ag_resume_open, Handle(%d)", + bta_ag_scb_to_idx(p_scb)); + + /* resume opening process. */ + if (p_scb->state == BTA_AG_INIT_ST) { + p_scb->state = BTA_AG_OPENING_ST; + bta_ag_start_open(p_scb, NULL); } + } else { + APPL_TRACE_ERROR("bta_ag_resume_open, Null p_scb"); + } } /******************************************************************************* @@ -665,29 +590,28 @@ void bta_ag_resume_open (tBTA_AG_SCB *p_scb) * Returns void * ******************************************************************************/ -static void bta_ag_api_enable(tBTA_AG_DATA *p_data) -{ - /* initialize control block */ - for (size_t i = 0; i < BTA_AG_NUM_SCB; i++) { - alarm_free(bta_ag_cb.scb[i].ring_timer); +static void bta_ag_api_enable(tBTA_AG_DATA* p_data) { + /* initialize control block */ + for (size_t i = 0; i < BTA_AG_NUM_SCB; i++) { + alarm_free(bta_ag_cb.scb[i].ring_timer); #if (BTM_WBS_INCLUDED == TRUE) - alarm_free(bta_ag_cb.scb[i].codec_negotiation_timer); + alarm_free(bta_ag_cb.scb[i].codec_negotiation_timer); #endif - alarm_free(bta_ag_cb.scb[i].collision_timer); - } - memset(&bta_ag_cb, 0, sizeof(tBTA_AG_CB)); + alarm_free(bta_ag_cb.scb[i].collision_timer); + } + memset(&bta_ag_cb, 0, sizeof(tBTA_AG_CB)); - /* store callback function */ - bta_ag_cb.p_cback = p_data->api_enable.p_cback; - bta_ag_cb.parse_mode = p_data->api_enable.parse_mode; + /* store callback function */ + bta_ag_cb.p_cback = p_data->api_enable.p_cback; + bta_ag_cb.parse_mode = p_data->api_enable.parse_mode; - /* call init call-out */ - bta_ag_co_init(); + /* call init call-out */ + bta_ag_co_init(); - bta_sys_collision_register (BTA_ID_AG, bta_ag_collision_cback); + bta_sys_collision_register(BTA_ID_AG, bta_ag_collision_cback); - /* call callback with enable event */ - (*bta_ag_cb.p_cback)(BTA_AG_ENABLE_EVT, NULL); + /* call callback with enable event */ + (*bta_ag_cb.p_cback)(BTA_AG_ENABLE_EVT, NULL); } /******************************************************************************* @@ -700,38 +624,33 @@ static void bta_ag_api_enable(tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_ag_api_disable(tBTA_AG_DATA *p_data) -{ - /* deregister all scbs in use */ - tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; - bool do_dereg = false; - int i; - - if (!bta_sys_is_register (BTA_ID_AG)) - { - APPL_TRACE_ERROR("BTA AG is already disabled, ignoring ..."); - return; +static void bta_ag_api_disable(tBTA_AG_DATA* p_data) { + /* deregister all scbs in use */ + tBTA_AG_SCB* p_scb = &bta_ag_cb.scb[0]; + bool do_dereg = false; + int i; + + if (!bta_sys_is_register(BTA_ID_AG)) { + APPL_TRACE_ERROR("BTA AG is already disabled, ignoring ..."); + return; + } + + /* De-register with BTA system manager */ + bta_sys_deregister(BTA_ID_AG); + + for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) { + if (p_scb->in_use) { + bta_ag_sm_execute(p_scb, BTA_AG_API_DEREGISTER_EVT, p_data); + do_dereg = true; } + } - /* De-register with BTA system manager */ - bta_sys_deregister(BTA_ID_AG); + if (!do_dereg) { + /* Done, send callback evt to app */ + (*bta_ag_cb.p_cback)(BTA_AG_DISABLE_EVT, NULL); + } - for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) - { - if (p_scb->in_use) - { - bta_ag_sm_execute(p_scb, BTA_AG_API_DEREGISTER_EVT, p_data); - do_dereg = true; - } - } - - if (!do_dereg) - { - /* Done, send callback evt to app */ - (*bta_ag_cb.p_cback)(BTA_AG_DISABLE_EVT, NULL); - } - - bta_sys_collision_register (BTA_ID_AG, NULL); + bta_sys_collision_register(BTA_ID_AG, NULL); } /******************************************************************************* @@ -744,22 +663,18 @@ static void bta_ag_api_disable(tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_ag_api_register(tBTA_AG_DATA *p_data) -{ - tBTA_AG_SCB *p_scb; - tBTA_AG_REGISTER reg; - - /* allocate an scb */ - if ((p_scb = bta_ag_scb_alloc()) != NULL) - { - APPL_TRACE_DEBUG("bta_ag_api_register: p_scb 0x%08x ", p_scb); - bta_ag_sm_execute(p_scb, p_data->hdr.event, p_data); - } - else - { - reg.status = BTA_AG_FAIL_RESOURCES; - (*bta_ag_cb.p_cback)(BTA_AG_REGISTER_EVT, (tBTA_AG *) ®); - } +static void bta_ag_api_register(tBTA_AG_DATA* p_data) { + tBTA_AG_SCB* p_scb; + tBTA_AG_REGISTER reg; + + /* allocate an scb */ + if ((p_scb = bta_ag_scb_alloc()) != NULL) { + APPL_TRACE_DEBUG("bta_ag_api_register: p_scb 0x%08x ", p_scb); + bta_ag_sm_execute(p_scb, p_data->hdr.event, p_data); + } else { + reg.status = BTA_AG_FAIL_RESOURCES; + (*bta_ag_cb.p_cback)(BTA_AG_REGISTER_EVT, (tBTA_AG*)®); + } } /******************************************************************************* @@ -772,30 +687,23 @@ static void bta_ag_api_register(tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_ag_api_result(tBTA_AG_DATA *p_data) -{ - tBTA_AG_SCB *p_scb; - int i; - - if (p_data->hdr.layer_specific != BTA_AG_HANDLE_ALL) - { - if ((p_scb = bta_ag_scb_by_idx(p_data->hdr.layer_specific)) != NULL) - { - APPL_TRACE_DEBUG("bta_ag_api_result: p_scb 0x%08x ", p_scb); - bta_ag_sm_execute(p_scb, BTA_AG_API_RESULT_EVT, p_data); - } +static void bta_ag_api_result(tBTA_AG_DATA* p_data) { + tBTA_AG_SCB* p_scb; + int i; + + if (p_data->hdr.layer_specific != BTA_AG_HANDLE_ALL) { + if ((p_scb = bta_ag_scb_by_idx(p_data->hdr.layer_specific)) != NULL) { + APPL_TRACE_DEBUG("bta_ag_api_result: p_scb 0x%08x ", p_scb); + bta_ag_sm_execute(p_scb, BTA_AG_API_RESULT_EVT, p_data); } - else - { - for (i = 0, p_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; i++, p_scb++) - { - if (p_scb->in_use && p_scb->svc_conn) - { - APPL_TRACE_DEBUG("bta_ag_api_result p_scb 0x%08x ", p_scb); - bta_ag_sm_execute(p_scb, BTA_AG_API_RESULT_EVT, p_data); - } - } + } else { + for (i = 0, p_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; i++, p_scb++) { + if (p_scb->in_use && p_scb->svc_conn) { + APPL_TRACE_DEBUG("bta_ag_api_result p_scb 0x%08x ", p_scb); + bta_ag_sm_execute(p_scb, BTA_AG_API_RESULT_EVT, p_data); + } } + } } /******************************************************************************* @@ -808,62 +716,55 @@ static void bta_ag_api_result(tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_sm_execute(tBTA_AG_SCB *p_scb, uint16_t event, tBTA_AG_DATA *p_data) -{ - tBTA_AG_ST_TBL state_table; - uint8_t action; - int i; +void bta_ag_sm_execute(tBTA_AG_SCB* p_scb, uint16_t event, + tBTA_AG_DATA* p_data) { + tBTA_AG_ST_TBL state_table; + uint8_t action; + int i; #if (BTA_AG_DEBUG == TRUE) - uint16_t in_event = event; - uint8_t in_state = p_scb->state; - - /* Ignore displaying of AT results when not connected (Ignored in state machine) */ - if (in_event != BTA_AG_API_RESULT_EVT || p_scb->state == BTA_AG_OPEN_ST) - { - APPL_TRACE_EVENT("AG evt (hdl 0x%04x): State %d (%s), Event 0x%04x (%s)", - bta_ag_scb_to_idx(p_scb), - p_scb->state, bta_ag_state_str(p_scb->state), - event, bta_ag_evt_str(event, p_data->api_result.result)); - } + uint16_t in_event = event; + uint8_t in_state = p_scb->state; + + /* Ignore displaying of AT results when not connected (Ignored in state + * machine) */ + if (in_event != BTA_AG_API_RESULT_EVT || p_scb->state == BTA_AG_OPEN_ST) { + APPL_TRACE_EVENT("AG evt (hdl 0x%04x): State %d (%s), Event 0x%04x (%s)", + bta_ag_scb_to_idx(p_scb), p_scb->state, + bta_ag_state_str(p_scb->state), event, + bta_ag_evt_str(event, p_data->api_result.result)); + } #else - APPL_TRACE_EVENT("AG evt (hdl 0x%04x): State %d, Event 0x%04x", - bta_ag_scb_to_idx(p_scb), p_scb->state, event); + APPL_TRACE_EVENT("AG evt (hdl 0x%04x): State %d, Event 0x%04x", + bta_ag_scb_to_idx(p_scb), p_scb->state, event); #endif - event &= 0x00FF; - if (event >= (BTA_AG_MAX_EVT & 0x00FF)) - { - APPL_TRACE_ERROR("AG evt out of range, ignoring..."); - return; - } + event &= 0x00FF; + if (event >= (BTA_AG_MAX_EVT & 0x00FF)) { + APPL_TRACE_ERROR("AG evt out of range, ignoring..."); + return; + } - /* look up the state table for the current state */ - state_table = bta_ag_st_tbl[p_scb->state]; + /* look up the state table for the current state */ + state_table = bta_ag_st_tbl[p_scb->state]; - /* set next state */ - p_scb->state = state_table[event][BTA_AG_NEXT_STATE]; + /* set next state */ + p_scb->state = state_table[event][BTA_AG_NEXT_STATE]; - /* execute action functions */ - for (i = 0; i < BTA_AG_ACTIONS; i++) - { - if ((action = state_table[event][i]) != BTA_AG_IGNORE) - { - (*bta_ag_action[action])(p_scb, p_data); - } - else - { - break; - } + /* execute action functions */ + for (i = 0; i < BTA_AG_ACTIONS; i++) { + if ((action = state_table[event][i]) != BTA_AG_IGNORE) { + (*bta_ag_action[action])(p_scb, p_data); + } else { + break; } + } #if (BTA_AG_DEBUG == TRUE) - if (p_scb->state != in_state) - { - APPL_TRACE_EVENT("BTA AG State Change: [%s] -> [%s] after Event [%s]", - bta_ag_state_str(in_state), - bta_ag_state_str(p_scb->state), - bta_ag_evt_str(in_event, p_data->api_result.result)); - } + if (p_scb->state != in_state) { + APPL_TRACE_EVENT("BTA AG State Change: [%s] -> [%s] after Event [%s]", + bta_ag_state_str(in_state), bta_ag_state_str(p_scb->state), + bta_ag_evt_str(in_event, p_data->api_result.result)); + } #endif } @@ -877,143 +778,156 @@ void bta_ag_sm_execute(tBTA_AG_SCB *p_scb, uint16_t event, tBTA_AG_DATA *p_data) * Returns bool * ******************************************************************************/ -bool bta_ag_hdl_event(BT_HDR *p_msg) -{ - tBTA_AG_SCB *p_scb; +bool bta_ag_hdl_event(BT_HDR* p_msg) { + tBTA_AG_SCB* p_scb; - APPL_TRACE_DEBUG("bta_ag_hdl_event: Event 0x%04x ", p_msg->event); - switch (p_msg->event) - { - /* handle enable event */ - case BTA_AG_API_ENABLE_EVT: - bta_ag_api_enable((tBTA_AG_DATA *) p_msg); - break; - - /* handle disable event */ - case BTA_AG_API_DISABLE_EVT: - bta_ag_api_disable((tBTA_AG_DATA *) p_msg); - break; - - /* handle register event */ - case BTA_AG_API_REGISTER_EVT: - bta_ag_api_register((tBTA_AG_DATA *) p_msg); - break; - - /* handle result event */ - case BTA_AG_API_RESULT_EVT: - bta_ag_api_result((tBTA_AG_DATA *) p_msg); - break; - - /* all others reference scb by handle */ - default: - if ((p_scb = bta_ag_scb_by_idx(p_msg->layer_specific)) != NULL) - { - APPL_TRACE_DEBUG("bta_ag_hdl_event: p_scb 0x%08x ", p_scb); - bta_ag_sm_execute(p_scb, p_msg->event, (tBTA_AG_DATA *) p_msg); - } - break; - } - return true; + APPL_TRACE_DEBUG("bta_ag_hdl_event: Event 0x%04x ", p_msg->event); + switch (p_msg->event) { + /* handle enable event */ + case BTA_AG_API_ENABLE_EVT: + bta_ag_api_enable((tBTA_AG_DATA*)p_msg); + break; + + /* handle disable event */ + case BTA_AG_API_DISABLE_EVT: + bta_ag_api_disable((tBTA_AG_DATA*)p_msg); + break; + + /* handle register event */ + case BTA_AG_API_REGISTER_EVT: + bta_ag_api_register((tBTA_AG_DATA*)p_msg); + break; + + /* handle result event */ + case BTA_AG_API_RESULT_EVT: + bta_ag_api_result((tBTA_AG_DATA*)p_msg); + break; + + /* all others reference scb by handle */ + default: + if ((p_scb = bta_ag_scb_by_idx(p_msg->layer_specific)) != NULL) { + APPL_TRACE_DEBUG("bta_ag_hdl_event: p_scb 0x%08x ", p_scb); + bta_ag_sm_execute(p_scb, p_msg->event, (tBTA_AG_DATA*)p_msg); + } + break; + } + return true; } #if (BTA_AG_DEBUG == TRUE) -static char *bta_ag_evt_str(uint16_t event, tBTA_AG_RES result) -{ - switch (event) - { +static char* bta_ag_evt_str(uint16_t event, tBTA_AG_RES result) { + switch (event) { case BTA_AG_API_REGISTER_EVT: - return "Register Request"; + return "Register Request"; case BTA_AG_API_DEREGISTER_EVT: - return "Deregister Request"; + return "Deregister Request"; case BTA_AG_API_OPEN_EVT: - return "Open SLC Request"; + return "Open SLC Request"; case BTA_AG_API_CLOSE_EVT: - return "Close SLC Request"; + return "Close SLC Request"; case BTA_AG_API_AUDIO_OPEN_EVT: - return "Open Audio Request"; + return "Open Audio Request"; case BTA_AG_API_AUDIO_CLOSE_EVT: - return "Close Audio Request"; + return "Close Audio Request"; case BTA_AG_API_RESULT_EVT: - switch (result) - { - case BTA_AG_SPK_RES: return ("AT Result BTA_AG_SPK_RES"); - case BTA_AG_MIC_RES: return ("AT Result BTA_AG_MIC_RES"); - case BTA_AG_INBAND_RING_RES: return ("AT Result BTA_AG_INBAND_RING_RES"); - case BTA_AG_CIND_RES: return ("AT Result BTA_AG_CIND_RES"); - case BTA_AG_BINP_RES: return ("AT Result BTA_AG_BINP_RES"); - case BTA_AG_IND_RES: return ("AT Result BTA_AG_IND_RES"); - case BTA_AG_BVRA_RES: return ("AT Result BTA_AG_BVRA_RES"); - case BTA_AG_CNUM_RES: return ("AT Result BTA_AG_CNUM_RES"); - case BTA_AG_BTRH_RES: return ("AT Result BTA_AG_BTRH_RES"); - case BTA_AG_CLCC_RES: return ("AT Result BTA_AG_CLCC_RES"); - case BTA_AG_COPS_RES: return ("AT Result BTA_AG_COPS_RES"); - case BTA_AG_IN_CALL_RES: return ("AT Result BTA_AG_IN_CALL_RES"); - case BTA_AG_IN_CALL_CONN_RES: return ("AT Result BTA_AG_IN_CALL_CONN_RES"); - case BTA_AG_CALL_WAIT_RES: return ("AT Result BTA_AG_CALL_WAIT_RES"); - case BTA_AG_OUT_CALL_ORIG_RES: return ("AT Result BTA_AG_OUT_CALL_ORIG_RES"); - case BTA_AG_OUT_CALL_ALERT_RES: return ("AT Result BTA_AG_OUT_CALL_ALERT_RES"); - case BTA_AG_OUT_CALL_CONN_RES: return ("AT Result BTA_AG_OUT_CALL_CONN_RES"); - case BTA_AG_CALL_CANCEL_RES: return ("AT Result BTA_AG_CALL_CANCEL_RES"); - case BTA_AG_END_CALL_RES: return ("AT Result BTA_AG_END_CALL_RES"); - case BTA_AG_UNAT_RES: return ("AT Result BTA_AG_UNAT_RES"); - default: return ("Unknown AG Result"); - } + switch (result) { + case BTA_AG_SPK_RES: + return ("AT Result BTA_AG_SPK_RES"); + case BTA_AG_MIC_RES: + return ("AT Result BTA_AG_MIC_RES"); + case BTA_AG_INBAND_RING_RES: + return ("AT Result BTA_AG_INBAND_RING_RES"); + case BTA_AG_CIND_RES: + return ("AT Result BTA_AG_CIND_RES"); + case BTA_AG_BINP_RES: + return ("AT Result BTA_AG_BINP_RES"); + case BTA_AG_IND_RES: + return ("AT Result BTA_AG_IND_RES"); + case BTA_AG_BVRA_RES: + return ("AT Result BTA_AG_BVRA_RES"); + case BTA_AG_CNUM_RES: + return ("AT Result BTA_AG_CNUM_RES"); + case BTA_AG_BTRH_RES: + return ("AT Result BTA_AG_BTRH_RES"); + case BTA_AG_CLCC_RES: + return ("AT Result BTA_AG_CLCC_RES"); + case BTA_AG_COPS_RES: + return ("AT Result BTA_AG_COPS_RES"); + case BTA_AG_IN_CALL_RES: + return ("AT Result BTA_AG_IN_CALL_RES"); + case BTA_AG_IN_CALL_CONN_RES: + return ("AT Result BTA_AG_IN_CALL_CONN_RES"); + case BTA_AG_CALL_WAIT_RES: + return ("AT Result BTA_AG_CALL_WAIT_RES"); + case BTA_AG_OUT_CALL_ORIG_RES: + return ("AT Result BTA_AG_OUT_CALL_ORIG_RES"); + case BTA_AG_OUT_CALL_ALERT_RES: + return ("AT Result BTA_AG_OUT_CALL_ALERT_RES"); + case BTA_AG_OUT_CALL_CONN_RES: + return ("AT Result BTA_AG_OUT_CALL_CONN_RES"); + case BTA_AG_CALL_CANCEL_RES: + return ("AT Result BTA_AG_CALL_CANCEL_RES"); + case BTA_AG_END_CALL_RES: + return ("AT Result BTA_AG_END_CALL_RES"); + case BTA_AG_UNAT_RES: + return ("AT Result BTA_AG_UNAT_RES"); + default: + return ("Unknown AG Result"); + } case BTA_AG_API_SETCODEC_EVT: - return "Set Codec Request"; + return "Set Codec Request"; case BTA_AG_RFC_OPEN_EVT: - return "RFC Opened"; + return "RFC Opened"; case BTA_AG_RFC_CLOSE_EVT: - return "RFC Closed"; + return "RFC Closed"; case BTA_AG_RFC_SRV_CLOSE_EVT: - return "RFC SRV Closed"; + return "RFC SRV Closed"; case BTA_AG_RFC_DATA_EVT: - return "RFC Data"; + return "RFC Data"; case BTA_AG_SCO_OPEN_EVT: - return "Audio Opened"; + return "Audio Opened"; case BTA_AG_SCO_CLOSE_EVT: - return "Audio Closed"; + return "Audio Closed"; case BTA_AG_DISC_ACP_RES_EVT: - return "Discovery ACP Result"; + return "Discovery ACP Result"; case BTA_AG_DISC_INT_RES_EVT: - return "Discovery INT Result"; + return "Discovery INT Result"; case BTA_AG_DISC_OK_EVT: - return "Discovery OK"; + return "Discovery OK"; case BTA_AG_DISC_FAIL_EVT: - return "Discovery Failed"; + return "Discovery Failed"; case BTA_AG_CI_RX_WRITE_EVT: - return "CI RX Write"; + return "CI RX Write"; case BTA_AG_RING_TIMEOUT_EVT: - return "Ring Timeout"; + return "Ring Timeout"; case BTA_AG_SVC_TIMEOUT_EVT: - return "Service Timeout"; + return "Service Timeout"; case BTA_AG_API_ENABLE_EVT: - return "Enable AG"; + return "Enable AG"; case BTA_AG_API_DISABLE_EVT: - return "Disable AG"; + return "Disable AG"; case BTA_AG_CI_SCO_DATA_EVT: - return "SCO data Callin"; + return "SCO data Callin"; case BTA_AG_CI_SLC_READY_EVT: - return "SLC Ready Callin"; + return "SLC Ready Callin"; default: - return "Unknown AG Event"; - } + return "Unknown AG Event"; + } } -static char *bta_ag_state_str(uint8_t state) -{ - switch (state) - { +static char* bta_ag_state_str(uint8_t state) { + switch (state) { case BTA_AG_INIT_ST: - return "Initial"; + return "Initial"; case BTA_AG_OPENING_ST: - return "Opening"; + return "Opening"; case BTA_AG_OPEN_ST: - return "Open"; + return "Open"; case BTA_AG_CLOSING_ST: - return "Closing"; + return "Closing"; default: - return "Unknown AG State"; - } + return "Unknown AG State"; + } } #endif diff --git a/system/bta/ag/bta_ag_rfc.cc b/system/bta/ag/bta_ag_rfc.cc index 2dc9bf28bdc..22be8031ed0 100644 --- a/system/bta/ag/bta_ag_rfc.cc +++ b/system/bta/ag/bta_ag_rfc.cc @@ -25,20 +25,20 @@ #include -#include "bta_api.h" -#include "bta_sys.h" +#include "bt_common.h" #include "bta_ag_api.h" -#include "bta_ag_int.h" #include "bta_ag_co.h" +#include "bta_ag_int.h" +#include "bta_api.h" +#include "bta_sys.h" #include "btm_api.h" #include "osi/include/osi.h" #include "port_api.h" #include "rfcdefs.h" -#include "bt_common.h" #include "utl.h" /* Event mask for RfCOMM port callback */ -#define BTA_AG_PORT_EV_MASK PORT_EV_RXCHAR +#define BTA_AG_PORT_EV_MASK PORT_EV_RXCHAR /* each scb has its own rfcomm callbacks */ void bta_ag_port_cback_1(uint32_t code, uint16_t port_handle); @@ -49,33 +49,21 @@ void bta_ag_mgmt_cback_1(uint32_t code, uint16_t port_handle); void bta_ag_mgmt_cback_2(uint32_t code, uint16_t port_handle); void bta_ag_mgmt_cback_3(uint32_t code, uint16_t port_handle); -int bta_ag_data_cback_1(uint16_t port_handle, void *p_data, uint16_t len); -int bta_ag_data_cback_2(uint16_t port_handle, void *p_data, uint16_t len); -int bta_ag_data_cback_3(uint16_t port_handle, void *p_data, uint16_t len); +int bta_ag_data_cback_1(uint16_t port_handle, void* p_data, uint16_t len); +int bta_ag_data_cback_2(uint16_t port_handle, void* p_data, uint16_t len); +int bta_ag_data_cback_3(uint16_t port_handle, void* p_data, uint16_t len); /* rfcomm callback function tables */ -typedef tPORT_CALLBACK *tBTA_AG_PORT_CBACK; -const tBTA_AG_PORT_CBACK bta_ag_port_cback_tbl[] = -{ - bta_ag_port_cback_1, - bta_ag_port_cback_2, - bta_ag_port_cback_3 -}; - -const tBTA_AG_PORT_CBACK bta_ag_mgmt_cback_tbl[] = -{ - bta_ag_mgmt_cback_1, - bta_ag_mgmt_cback_2, - bta_ag_mgmt_cback_3 -}; - -typedef tPORT_DATA_CALLBACK *tBTA_AG_DATA_CBACK; -const tBTA_AG_DATA_CBACK bta_ag_data_cback_tbl[] = -{ - bta_ag_data_cback_1, - bta_ag_data_cback_2, - bta_ag_data_cback_3 -}; +typedef tPORT_CALLBACK* tBTA_AG_PORT_CBACK; +const tBTA_AG_PORT_CBACK bta_ag_port_cback_tbl[] = { + bta_ag_port_cback_1, bta_ag_port_cback_2, bta_ag_port_cback_3}; + +const tBTA_AG_PORT_CBACK bta_ag_mgmt_cback_tbl[] = { + bta_ag_mgmt_cback_1, bta_ag_mgmt_cback_2, bta_ag_mgmt_cback_3}; + +typedef tPORT_DATA_CALLBACK* tBTA_AG_DATA_CBACK; +const tBTA_AG_DATA_CBACK bta_ag_data_cback_tbl[] = { + bta_ag_data_cback_1, bta_ag_data_cback_2, bta_ag_data_cback_3}; /******************************************************************************* * @@ -88,25 +76,23 @@ const tBTA_AG_DATA_CBACK bta_ag_data_cback_tbl[] = * ******************************************************************************/ static void bta_ag_port_cback(UNUSED_ATTR uint32_t code, uint16_t port_handle, - uint16_t handle) -{ - tBTA_AG_SCB *p_scb; - - if ((p_scb = bta_ag_scb_by_idx(handle)) != NULL) - { - /* ignore port events for port handles other than connected handle */ - if (port_handle != p_scb->conn_handle) - { - APPL_TRACE_DEBUG("ag_port_cback ignoring handle:%d conn_handle = %d other handle = %d", - port_handle, p_scb->conn_handle, handle); - return; - } - - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AG_RFC_DATA_EVT; - p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + uint16_t handle) { + tBTA_AG_SCB* p_scb; + + if ((p_scb = bta_ag_scb_by_idx(handle)) != NULL) { + /* ignore port events for port handles other than connected handle */ + if (port_handle != p_scb->conn_handle) { + APPL_TRACE_DEBUG( + "ag_port_cback ignoring handle:%d conn_handle = %d other handle = %d", + port_handle, p_scb->conn_handle, handle); + return; } + + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->event = BTA_AG_RFC_DATA_EVT; + p_buf->layer_specific = handle; + bta_sys_sendmsg(p_buf); + } } /******************************************************************************* @@ -119,65 +105,56 @@ static void bta_ag_port_cback(UNUSED_ATTR uint32_t code, uint16_t port_handle, * Returns void * ******************************************************************************/ -static void bta_ag_mgmt_cback(uint32_t code, uint16_t port_handle, uint16_t handle) -{ - tBTA_AG_SCB *p_scb; - uint16_t event; - uint8_t i; - bool found_handle = false; - - APPL_TRACE_DEBUG("ag_mgmt_cback : code = %d, port_handle = %d, handle = %d", - code, port_handle, handle); +static void bta_ag_mgmt_cback(uint32_t code, uint16_t port_handle, + uint16_t handle) { + tBTA_AG_SCB* p_scb; + uint16_t event; + uint8_t i; + bool found_handle = false; + + APPL_TRACE_DEBUG("ag_mgmt_cback : code = %d, port_handle = %d, handle = %d", + code, port_handle, handle); + + if ((p_scb = bta_ag_scb_by_idx(handle)) != NULL) { + /* ignore close event for port handles other than connected handle */ + if ((code != PORT_SUCCESS) && (port_handle != p_scb->conn_handle)) { + APPL_TRACE_DEBUG("ag_mgmt_cback ignoring handle:%d", port_handle); + return; + } - if ((p_scb = bta_ag_scb_by_idx(handle)) != NULL) - { - /* ignore close event for port handles other than connected handle */ - if ((code != PORT_SUCCESS) && (port_handle != p_scb->conn_handle)) - { - APPL_TRACE_DEBUG("ag_mgmt_cback ignoring handle:%d", port_handle); - return; + if (code == PORT_SUCCESS) { + if (p_scb->conn_handle) /* Outgoing connection */ + { + if (port_handle == p_scb->conn_handle) found_handle = true; + } else /* Incoming connection */ + { + for (i = 0; i < BTA_AG_NUM_IDX; i++) { + if (port_handle == p_scb->serv_handle[i]) found_handle = true; } + } - if (code == PORT_SUCCESS) - { - if (p_scb->conn_handle) /* Outgoing connection */ - { - if (port_handle == p_scb->conn_handle) - found_handle = true; - } - else /* Incoming connection */ - { - for (i = 0; i < BTA_AG_NUM_IDX; i++) - { - if (port_handle == p_scb->serv_handle[i]) - found_handle = true; - } - } - - if (!found_handle) - { - APPL_TRACE_ERROR ("bta_ag_mgmt_cback: PORT_SUCCESS, ignoring handle = %d", port_handle); - return; - } - - event = BTA_AG_RFC_OPEN_EVT; - } - /* distinguish server close events */ - else if (port_handle == p_scb->conn_handle) - { - event = BTA_AG_RFC_CLOSE_EVT; - } - else - { - event = BTA_AG_RFC_SRV_CLOSE_EVT; - } + if (!found_handle) { + APPL_TRACE_ERROR( + "bta_ag_mgmt_cback: PORT_SUCCESS, ignoring handle = %d", + port_handle); + return; + } - tBTA_AG_RFC *p_buf = (tBTA_AG_RFC *)osi_malloc(sizeof(tBTA_AG_RFC)); - p_buf->hdr.event = event; - p_buf->hdr.layer_specific = handle; - p_buf->port_handle = port_handle; - bta_sys_sendmsg(p_buf); + event = BTA_AG_RFC_OPEN_EVT; } + /* distinguish server close events */ + else if (port_handle == p_scb->conn_handle) { + event = BTA_AG_RFC_CLOSE_EVT; + } else { + event = BTA_AG_RFC_SRV_CLOSE_EVT; + } + + tBTA_AG_RFC* p_buf = (tBTA_AG_RFC*)osi_malloc(sizeof(tBTA_AG_RFC)); + p_buf->hdr.event = event; + p_buf->hdr.layer_specific = handle; + p_buf->port_handle = port_handle; + bta_sys_sendmsg(p_buf); + } } /******************************************************************************* @@ -190,12 +167,11 @@ static void bta_ag_mgmt_cback(uint32_t code, uint16_t port_handle, uint16_t hand * Returns void * ******************************************************************************/ -static int bta_ag_data_cback(UNUSED_ATTR uint16_t port_handle, void *p_data, - uint16_t len, uint16_t handle) -{ - /* call data call-out directly */ - bta_ag_co_tx_write(handle, (uint8_t *) p_data, len); - return 0; +static int bta_ag_data_cback(UNUSED_ATTR uint16_t port_handle, void* p_data, + uint16_t len, uint16_t handle) { + /* call data call-out directly */ + bta_ag_co_tx_write(handle, (uint8_t*)p_data, len); + return 0; } /******************************************************************************* @@ -210,12 +186,24 @@ static int bta_ag_data_cback(UNUSED_ATTR uint16_t port_handle, void *p_data, * Returns void * ******************************************************************************/ -void bta_ag_mgmt_cback_1(uint32_t code, uint16_t handle) {bta_ag_mgmt_cback(code, handle, 1);} -void bta_ag_mgmt_cback_2(uint32_t code, uint16_t handle) {bta_ag_mgmt_cback(code, handle, 2);} -void bta_ag_mgmt_cback_3(uint32_t code, uint16_t handle) {bta_ag_mgmt_cback(code, handle, 3);} -void bta_ag_port_cback_1(uint32_t code, uint16_t handle) {bta_ag_port_cback(code, handle, 1);} -void bta_ag_port_cback_2(uint32_t code, uint16_t handle) {bta_ag_port_cback(code, handle, 2);} -void bta_ag_port_cback_3(uint32_t code, uint16_t handle) {bta_ag_port_cback(code, handle, 3);} +void bta_ag_mgmt_cback_1(uint32_t code, uint16_t handle) { + bta_ag_mgmt_cback(code, handle, 1); +} +void bta_ag_mgmt_cback_2(uint32_t code, uint16_t handle) { + bta_ag_mgmt_cback(code, handle, 2); +} +void bta_ag_mgmt_cback_3(uint32_t code, uint16_t handle) { + bta_ag_mgmt_cback(code, handle, 3); +} +void bta_ag_port_cback_1(uint32_t code, uint16_t handle) { + bta_ag_port_cback(code, handle, 1); +} +void bta_ag_port_cback_2(uint32_t code, uint16_t handle) { + bta_ag_port_cback(code, handle, 2); +} +void bta_ag_port_cback_3(uint32_t code, uint16_t handle) { + bta_ag_port_cback(code, handle, 3); +} /******************************************************************************* * @@ -228,17 +216,14 @@ void bta_ag_port_cback_3(uint32_t code, uint16_t handle) {bta_ag_port_cback(code * Returns void * ******************************************************************************/ -int bta_ag_data_cback_1(uint16_t port_handle, void *p_data, uint16_t len) -{ - return bta_ag_data_cback(port_handle, p_data, len, 1); +int bta_ag_data_cback_1(uint16_t port_handle, void* p_data, uint16_t len) { + return bta_ag_data_cback(port_handle, p_data, len, 1); } -int bta_ag_data_cback_2(uint16_t port_handle, void *p_data, uint16_t len) -{ - return bta_ag_data_cback(port_handle, p_data, len, 2); +int bta_ag_data_cback_2(uint16_t port_handle, void* p_data, uint16_t len) { + return bta_ag_data_cback(port_handle, p_data, len, 2); } -int bta_ag_data_cback_3(uint16_t port_handle, void *p_data, uint16_t len) -{ - return bta_ag_data_cback(port_handle, p_data, len, 3); +int bta_ag_data_cback_3(uint16_t port_handle, void* p_data, uint16_t len) { + return bta_ag_data_cback(port_handle, p_data, len, 3); } /******************************************************************************* @@ -251,18 +236,16 @@ int bta_ag_data_cback_3(uint16_t port_handle, void *p_data, uint16_t len) * Returns void * ******************************************************************************/ -void bta_ag_setup_port(tBTA_AG_SCB *p_scb, uint16_t handle) -{ - uint16_t i = bta_ag_scb_to_idx(p_scb) - 1; +void bta_ag_setup_port(tBTA_AG_SCB* p_scb, uint16_t handle) { + uint16_t i = bta_ag_scb_to_idx(p_scb) - 1; - /* set up data callback if using pass through mode */ - if (bta_ag_cb.parse_mode == BTA_AG_PASS_THROUGH) - { - PORT_SetDataCallback(handle, bta_ag_data_cback_tbl[i]); - } + /* set up data callback if using pass through mode */ + if (bta_ag_cb.parse_mode == BTA_AG_PASS_THROUGH) { + PORT_SetDataCallback(handle, bta_ag_data_cback_tbl[i]); + } - PORT_SetEventMask(handle, BTA_AG_PORT_EV_MASK); - PORT_SetEventCallback(handle, bta_ag_port_cback_tbl[i]); + PORT_SetEventMask(handle, BTA_AG_PORT_EV_MASK); + PORT_SetEventCallback(handle, bta_ag_port_cback_tbl[i]); } /******************************************************************************* @@ -275,35 +258,33 @@ void bta_ag_setup_port(tBTA_AG_SCB *p_scb, uint16_t handle) * Returns void * ******************************************************************************/ -void bta_ag_start_servers(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK services) -{ - int i; - int bta_ag_port_status; - - services >>= BTA_HSP_SERVICE_ID; - for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++, services >>= 1) - { - /* if service is set in mask */ - if (services & 1) - { - BTM_SetSecurityLevel(false, "", bta_ag_sec_id[i], p_scb->serv_sec_mask, - BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, bta_ag_cb.profile[i].scn); - - bta_ag_port_status = RFCOMM_CreateConnection(bta_ag_uuid[i], bta_ag_cb.profile[i].scn, - true, BTA_AG_MTU, (uint8_t *) bd_addr_any, &(p_scb->serv_handle[i]), - bta_ag_mgmt_cback_tbl[bta_ag_scb_to_idx(p_scb) - 1]); - - if( bta_ag_port_status == PORT_SUCCESS ) - { - bta_ag_setup_port(p_scb, p_scb->serv_handle[i]); - } - else - { - /* TODO: CR#137125 to handle to error properly */ - APPL_TRACE_DEBUG("bta_ag_start_servers: RFCOMM_CreateConnection returned error:%d", bta_ag_port_status); - } - } +void bta_ag_start_servers(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK services) { + int i; + int bta_ag_port_status; + + services >>= BTA_HSP_SERVICE_ID; + for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++, services >>= 1) { + /* if service is set in mask */ + if (services & 1) { + BTM_SetSecurityLevel(false, "", bta_ag_sec_id[i], p_scb->serv_sec_mask, + BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, + bta_ag_cb.profile[i].scn); + + bta_ag_port_status = RFCOMM_CreateConnection( + bta_ag_uuid[i], bta_ag_cb.profile[i].scn, true, BTA_AG_MTU, + (uint8_t*)bd_addr_any, &(p_scb->serv_handle[i]), + bta_ag_mgmt_cback_tbl[bta_ag_scb_to_idx(p_scb) - 1]); + + if (bta_ag_port_status == PORT_SUCCESS) { + bta_ag_setup_port(p_scb, p_scb->serv_handle[i]); + } else { + /* TODO: CR#137125 to handle to error properly */ + APPL_TRACE_DEBUG( + "bta_ag_start_servers: RFCOMM_CreateConnection returned error:%d", + bta_ag_port_status); + } } + } } /******************************************************************************* @@ -316,20 +297,17 @@ void bta_ag_start_servers(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK services) * Returns void * ******************************************************************************/ -void bta_ag_close_servers(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK services) -{ - int i; - - services >>= BTA_HSP_SERVICE_ID; - for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++, services >>= 1) - { - /* if service is set in mask */ - if (services & 1) - { - RFCOMM_RemoveServer(p_scb->serv_handle[i]); - p_scb->serv_handle[i] = 0; - } +void bta_ag_close_servers(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK services) { + int i; + + services >>= BTA_HSP_SERVICE_ID; + for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++, services >>= 1) { + /* if service is set in mask */ + if (services & 1) { + RFCOMM_RemoveServer(p_scb->serv_handle[i]); + p_scb->serv_handle[i] = 0; } + } } /******************************************************************************* @@ -342,18 +320,15 @@ void bta_ag_close_servers(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK services) * Returns true if all servers are closed, false otherwise * ******************************************************************************/ -bool bta_ag_is_server_closed (tBTA_AG_SCB *p_scb) -{ - uint8_t xx; - bool is_closed = true; +bool bta_ag_is_server_closed(tBTA_AG_SCB* p_scb) { + uint8_t xx; + bool is_closed = true; - for (xx = 0; xx < BTA_AG_NUM_IDX; xx++) - { - if (p_scb->serv_handle[xx] != 0) - is_closed = false; - } + for (xx = 0; xx < BTA_AG_NUM_IDX; xx++) { + if (p_scb->serv_handle[xx] != 0) is_closed = false; + } - return is_closed; + return is_closed; } /******************************************************************************* @@ -366,23 +341,24 @@ bool bta_ag_is_server_closed (tBTA_AG_SCB *p_scb) * Returns void * ******************************************************************************/ -void bta_ag_rfc_do_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - BTM_SetSecurityLevel(true, "", bta_ag_sec_id[p_scb->conn_service], - p_scb->cli_sec_mask, BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, p_scb->peer_scn); - - if (RFCOMM_CreateConnection(bta_ag_uuid[p_scb->conn_service], p_scb->peer_scn, - false, BTA_AG_MTU, p_scb->peer_addr, &(p_scb->conn_handle), - bta_ag_mgmt_cback_tbl[bta_ag_scb_to_idx(p_scb) - 1]) == PORT_SUCCESS) - { - bta_ag_setup_port(p_scb, p_scb->conn_handle); - APPL_TRACE_DEBUG("bta_ag_rfc_do_open : conn_handle = %d", p_scb->conn_handle); - } - /* RFCOMM create connection failed; send ourselves RFCOMM close event */ - else - { - bta_ag_sm_execute(p_scb, BTA_AG_RFC_CLOSE_EVT, p_data); - } +void bta_ag_rfc_do_open(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + BTM_SetSecurityLevel(true, "", bta_ag_sec_id[p_scb->conn_service], + p_scb->cli_sec_mask, BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, + p_scb->peer_scn); + + if (RFCOMM_CreateConnection( + bta_ag_uuid[p_scb->conn_service], p_scb->peer_scn, false, BTA_AG_MTU, + p_scb->peer_addr, &(p_scb->conn_handle), + bta_ag_mgmt_cback_tbl[bta_ag_scb_to_idx(p_scb) - 1]) == + PORT_SUCCESS) { + bta_ag_setup_port(p_scb, p_scb->conn_handle); + APPL_TRACE_DEBUG("bta_ag_rfc_do_open : conn_handle = %d", + p_scb->conn_handle); + } + /* RFCOMM create connection failed; send ourselves RFCOMM close event */ + else { + bta_ag_sm_execute(p_scb, BTA_AG_RFC_CLOSE_EVT, p_data); + } } /******************************************************************************* @@ -395,27 +371,24 @@ void bta_ag_rfc_do_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_rfc_do_close(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - if (p_scb->conn_handle) { - RFCOMM_RemoveConnection(p_scb->conn_handle); - } else { - /* Close API was called while AG is in Opening state. */ - /* Need to trigger the state machine to send callback to the app */ - /* and move back to INIT state. */ - tBTA_AG_RFC *p_buf = (tBTA_AG_RFC *)osi_malloc(sizeof(tBTA_AG_RFC)); - p_buf->hdr.event = BTA_AG_RFC_CLOSE_EVT; - p_buf->hdr.layer_specific = bta_ag_scb_to_idx(p_scb); - bta_sys_sendmsg(p_buf); - - /* Cancel SDP if it had been started. */ - /* - if(p_scb->p_disc_db) - { - (void)SDP_CancelServiceSearch (p_scb->p_disc_db); - } - */ +void bta_ag_rfc_do_close(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + if (p_scb->conn_handle) { + RFCOMM_RemoveConnection(p_scb->conn_handle); + } else { + /* Close API was called while AG is in Opening state. */ + /* Need to trigger the state machine to send callback to the app */ + /* and move back to INIT state. */ + tBTA_AG_RFC* p_buf = (tBTA_AG_RFC*)osi_malloc(sizeof(tBTA_AG_RFC)); + p_buf->hdr.event = BTA_AG_RFC_CLOSE_EVT; + p_buf->hdr.layer_specific = bta_ag_scb_to_idx(p_scb); + bta_sys_sendmsg(p_buf); + + /* Cancel SDP if it had been started. */ + /* + if(p_scb->p_disc_db) + { + (void)SDP_CancelServiceSearch (p_scb->p_disc_db); } + */ + } } - diff --git a/system/bta/ag/bta_ag_sco.cc b/system/bta/ag/bta_ag_sco.cc index 17bbba25b53..9fa81ea3640 100644 --- a/system/bta/ag/bta_ag_sco.cc +++ b/system/bta/ag/bta_ag_sco.cc @@ -24,15 +24,15 @@ #include -#include "bta_api.h" #include "bta_ag_api.h" #include "bta_ag_co.h" +#include "bta_api.h" #if (BTM_SCO_HCI_INCLUDED == TRUE) #include "bta_dm_co.h" #endif +#include "bt_common.h" #include "bta_ag_int.h" #include "btm_api.h" -#include "bt_common.h" #include "osi/include/osi.h" #include "utl.h" @@ -42,105 +42,91 @@ /* Codec negotiation timeout */ #ifndef BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS -#define BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS (3 * 1000) /* 3 seconds */ +#define BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS (3 * 1000) /* 3 seconds */ #endif -extern fixed_queue_t *btu_bta_alarm_queue; +extern fixed_queue_t* btu_bta_alarm_queue; #if (BTA_AG_SCO_DEBUG == TRUE) -static char *bta_ag_sco_evt_str(uint8_t event); -static char *bta_ag_sco_state_str(uint8_t state); +static char* bta_ag_sco_evt_str(uint8_t event); +static char* bta_ag_sco_state_str(uint8_t state); #endif -#define BTA_AG_NO_EDR_ESCO (BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | \ - BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | \ - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | \ - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5) +#define BTA_AG_NO_EDR_ESCO \ + (BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | \ + BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | BTM_SCO_PKT_TYPES_MASK_NO_3_EV5) /* sco events */ -enum -{ - BTA_AG_SCO_LISTEN_E, /* listen request */ - BTA_AG_SCO_OPEN_E, /* open request */ - BTA_AG_SCO_XFER_E, /* transfer request */ +enum { + BTA_AG_SCO_LISTEN_E, /* listen request */ + BTA_AG_SCO_OPEN_E, /* open request */ + BTA_AG_SCO_XFER_E, /* transfer request */ #if (BTM_WBS_INCLUDED == TRUE) - BTA_AG_SCO_CN_DONE_E, /* codec negotiation done */ - BTA_AG_SCO_REOPEN_E, /* Retry with other codec when failed */ + BTA_AG_SCO_CN_DONE_E, /* codec negotiation done */ + BTA_AG_SCO_REOPEN_E, /* Retry with other codec when failed */ #endif - BTA_AG_SCO_CLOSE_E, /* close request */ - BTA_AG_SCO_SHUTDOWN_E, /* shutdown request */ - BTA_AG_SCO_CONN_OPEN_E, /* sco open */ - BTA_AG_SCO_CONN_CLOSE_E, /* sco closed */ - BTA_AG_SCO_CI_DATA_E /* SCO data ready */ + BTA_AG_SCO_CLOSE_E, /* close request */ + BTA_AG_SCO_SHUTDOWN_E, /* shutdown request */ + BTA_AG_SCO_CONN_OPEN_E, /* sco open */ + BTA_AG_SCO_CONN_CLOSE_E, /* sco closed */ + BTA_AG_SCO_CI_DATA_E /* SCO data ready */ }; #if (BTM_WBS_INCLUDED == TRUE) -#define BTA_AG_NUM_CODECS 3 -#define BTA_AG_ESCO_SETTING_IDX_CVSD 0 /* eSCO setting for CVSD */ -#define BTA_AG_ESCO_SETTING_IDX_T1 1 /* eSCO setting for mSBC T1 */ -#define BTA_AG_ESCO_SETTING_IDX_T2 2 /* eSCO setting for mSBC T2 */ +#define BTA_AG_NUM_CODECS 3 +#define BTA_AG_ESCO_SETTING_IDX_CVSD 0 /* eSCO setting for CVSD */ +#define BTA_AG_ESCO_SETTING_IDX_T1 1 /* eSCO setting for mSBC T1 */ +#define BTA_AG_ESCO_SETTING_IDX_T2 2 /* eSCO setting for mSBC T2 */ -static const tBTM_ESCO_PARAMS bta_ag_esco_params[BTA_AG_NUM_CODECS] = -{ +static const tBTM_ESCO_PARAMS bta_ag_esco_params[BTA_AG_NUM_CODECS] = { /* CVSD */ { - BTM_64KBITS_RATE, /* TX Bandwidth (64 kbits/sec) */ - BTM_64KBITS_RATE, /* RX Bandwidth (64 kbits/sec) */ - 0x000c, /* 12 ms (HS/HF can use EV3, 2-EV3, 3-EV3) */ - BTM_VOICE_SETTING_CVSD, /* Inp Linear, Air CVSD, 2s Comp, 16bit */ - (BTM_SCO_PKT_TYPES_MASK_HV1 + /* Packet Types */ - BTM_SCO_PKT_TYPES_MASK_HV2 + - BTM_SCO_PKT_TYPES_MASK_HV3 + - BTM_SCO_PKT_TYPES_MASK_EV3 + - BTM_SCO_PKT_TYPES_MASK_EV4 + - BTM_SCO_PKT_TYPES_MASK_EV5 + - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 + - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), - BTM_ESCO_RETRANS_QUALITY /* Retransmission effort */ + BTM_64KBITS_RATE, /* TX Bandwidth (64 kbits/sec) */ + BTM_64KBITS_RATE, /* RX Bandwidth (64 kbits/sec) */ + 0x000c, /* 12 ms (HS/HF can use EV3, 2-EV3, 3-EV3) */ + BTM_VOICE_SETTING_CVSD, /* Inp Linear, Air CVSD, 2s Comp, 16bit */ + (BTM_SCO_PKT_TYPES_MASK_HV1 + /* Packet Types */ + BTM_SCO_PKT_TYPES_MASK_HV2 + BTM_SCO_PKT_TYPES_MASK_HV3 + + BTM_SCO_PKT_TYPES_MASK_EV3 + BTM_SCO_PKT_TYPES_MASK_EV4 + + BTM_SCO_PKT_TYPES_MASK_EV5 + BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 + + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), + BTM_ESCO_RETRANS_QUALITY /* Retransmission effort */ }, /* mSBC T1 */ { - BTM_64KBITS_RATE, /* TX Bandwidth (64 kbits/sec), 8000 */ - BTM_64KBITS_RATE, /* RX Bandwidth (64 kbits/sec), 8000 */ - 8, /* 8 ms */ - BTM_VOICE_SETTING_TRANS, /* Inp Linear, Transparent, 2s Comp, 16bit */ - (BTM_SCO_PKT_TYPES_MASK_EV3 | /* Packet Types : EV3 + NO_2_EV3 */ - BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 ), - BTM_ESCO_RETRANS_QUALITY /* Retransmission effort */ + BTM_64KBITS_RATE, /* TX Bandwidth (64 kbits/sec), 8000 */ + BTM_64KBITS_RATE, /* RX Bandwidth (64 kbits/sec), 8000 */ + 8, /* 8 ms */ + BTM_VOICE_SETTING_TRANS, /* Inp Linear, Transparent, 2s Comp, 16bit */ + (BTM_SCO_PKT_TYPES_MASK_EV3 | /* Packet Types : EV3 + NO_2_EV3 */ + BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5 | BTM_SCO_PKT_TYPES_MASK_NO_2_EV3), + BTM_ESCO_RETRANS_QUALITY /* Retransmission effort */ }, /* mSBC T2*/ { - BTM_64KBITS_RATE, /* TX Bandwidth (64 kbits/sec), 8000 */ - BTM_64KBITS_RATE, /* RX Bandwidth (64 kbits/sec), 8000 */ - 13, /* 13 ms */ - BTM_VOICE_SETTING_TRANS, /* Inp Linear, Transparent, 2s Comp, 16bit */ - (BTM_SCO_PKT_TYPES_MASK_EV3 | /* Packet Types : EV3 + 2-EV3 */ - BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), - BTM_ESCO_RETRANS_QUALITY /* Retransmission effort */ - } -}; + BTM_64KBITS_RATE, /* TX Bandwidth (64 kbits/sec), 8000 */ + BTM_64KBITS_RATE, /* RX Bandwidth (64 kbits/sec), 8000 */ + 13, /* 13 ms */ + BTM_VOICE_SETTING_TRANS, /* Inp Linear, Transparent, 2s Comp, 16bit */ + (BTM_SCO_PKT_TYPES_MASK_EV3 | /* Packet Types : EV3 + 2-EV3 */ + BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), + BTM_ESCO_RETRANS_QUALITY /* Retransmission effort */ + }}; #else /* WBS not included, CVSD by default */ -static const tBTM_ESCO_PARAMS bta_ag_esco_params = -{ - BTM_64KBITS_RATE, /* TX Bandwidth (64 kbits/sec) */ - BTM_64KBITS_RATE, /* RX Bandwidth (64 kbits/sec) */ - 0x000a, /* 10 ms (HS/HF can use EV3, 2-EV3, 3-EV3) */ - 0x0060, /* Inp Linear, Air CVSD, 2s Comp, 16bit */ - (BTM_SCO_PKT_TYPES_MASK_HV1 + /* Packet Types */ - BTM_SCO_PKT_TYPES_MASK_HV2 + - BTM_SCO_PKT_TYPES_MASK_HV3 + - BTM_SCO_PKT_TYPES_MASK_EV3 + - BTM_SCO_PKT_TYPES_MASK_EV4 + - BTM_SCO_PKT_TYPES_MASK_EV5 + - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 + +static const tBTM_ESCO_PARAMS bta_ag_esco_params = { + BTM_64KBITS_RATE, /* TX Bandwidth (64 kbits/sec) */ + BTM_64KBITS_RATE, /* RX Bandwidth (64 kbits/sec) */ + 0x000a, /* 10 ms (HS/HF can use EV3, 2-EV3, 3-EV3) */ + 0x0060, /* Inp Linear, Air CVSD, 2s Comp, 16bit */ + (BTM_SCO_PKT_TYPES_MASK_HV1 + /* Packet Types */ + BTM_SCO_PKT_TYPES_MASK_HV2 + BTM_SCO_PKT_TYPES_MASK_HV3 + + BTM_SCO_PKT_TYPES_MASK_EV3 + BTM_SCO_PKT_TYPES_MASK_EV4 + + BTM_SCO_PKT_TYPES_MASK_EV5 + BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), - BTM_ESCO_RETRANS_POWER /* Retransmission effort */ + BTM_ESCO_RETRANS_POWER /* Retransmission effort */ }; #endif @@ -154,37 +140,33 @@ static const tBTM_ESCO_PARAMS bta_ag_esco_params = * Returns void * ******************************************************************************/ -static void bta_ag_sco_conn_cback(uint16_t sco_idx) -{ - uint16_t handle; - tBTA_AG_SCB *p_scb; - - /* match callback to scb; first check current sco scb */ - if (bta_ag_cb.sco.p_curr_scb != NULL && bta_ag_cb.sco.p_curr_scb->in_use) - { - handle = bta_ag_scb_to_idx(bta_ag_cb.sco.p_curr_scb); - } - /* then check for scb connected to this peer */ - else - { - /* Check if SLC is up */ - handle = bta_ag_idx_by_bdaddr(BTM_ReadScoBdAddr(sco_idx)); - p_scb = bta_ag_scb_by_idx(handle); - if(p_scb && !p_scb->svc_conn) - handle = 0; - } - - if (handle != 0) { - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AG_SCO_OPEN_EVT; - p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); - } else { - /* no match found; disconnect sco, init sco variables */ - bta_ag_cb.sco.p_curr_scb = NULL; - bta_ag_cb.sco.state = BTA_AG_SCO_SHUTDOWN_ST; - BTM_RemoveSco(sco_idx); - } +static void bta_ag_sco_conn_cback(uint16_t sco_idx) { + uint16_t handle; + tBTA_AG_SCB* p_scb; + + /* match callback to scb; first check current sco scb */ + if (bta_ag_cb.sco.p_curr_scb != NULL && bta_ag_cb.sco.p_curr_scb->in_use) { + handle = bta_ag_scb_to_idx(bta_ag_cb.sco.p_curr_scb); + } + /* then check for scb connected to this peer */ + else { + /* Check if SLC is up */ + handle = bta_ag_idx_by_bdaddr(BTM_ReadScoBdAddr(sco_idx)); + p_scb = bta_ag_scb_by_idx(handle); + if (p_scb && !p_scb->svc_conn) handle = 0; + } + + if (handle != 0) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->event = BTA_AG_SCO_OPEN_EVT; + p_buf->layer_specific = handle; + bta_sys_sendmsg(p_buf); + } else { + /* no match found; disconnect sco, init sco variables */ + bta_ag_cb.sco.p_curr_scb = NULL; + bta_ag_cb.sco.state = BTA_AG_SCO_SHUTDOWN_ST; + BTM_RemoveSco(sco_idx); + } } /******************************************************************************* @@ -197,81 +179,83 @@ static void bta_ag_sco_conn_cback(uint16_t sco_idx) * Returns void * ******************************************************************************/ -static void bta_ag_sco_disc_cback(uint16_t sco_idx) -{ - uint16_t handle = 0; - - APPL_TRACE_DEBUG ("bta_ag_sco_disc_cback(): sco_idx: 0x%x p_cur_scb: 0x%08x sco.state: %d", sco_idx, bta_ag_cb.sco.p_curr_scb, bta_ag_cb.sco.state); - - APPL_TRACE_DEBUG ("bta_ag_sco_disc_cback(): scb[0] addr: 0x%08x in_use: %u sco_idx: 0x%x sco state: %u", - &bta_ag_cb.scb[0], bta_ag_cb.scb[0].in_use, bta_ag_cb.scb[0].sco_idx, bta_ag_cb.scb[0].state); - APPL_TRACE_DEBUG ("bta_ag_sco_disc_cback(): scb[1] addr: 0x%08x in_use: %u sco_idx: 0x%x sco state: %u", - &bta_ag_cb.scb[1], bta_ag_cb.scb[1].in_use, bta_ag_cb.scb[1].sco_idx, bta_ag_cb.scb[1].state); - - /* match callback to scb */ - if (bta_ag_cb.sco.p_curr_scb != NULL && bta_ag_cb.sco.p_curr_scb->in_use) - { - /* We only care about callbacks for the active SCO */ - if (bta_ag_cb.sco.p_curr_scb->sco_idx != sco_idx) - { - if (bta_ag_cb.sco.p_curr_scb->sco_idx != 0xFFFF) - return; - } - handle = bta_ag_scb_to_idx(bta_ag_cb.sco.p_curr_scb); +static void bta_ag_sco_disc_cback(uint16_t sco_idx) { + uint16_t handle = 0; + + APPL_TRACE_DEBUG( + "bta_ag_sco_disc_cback(): sco_idx: 0x%x p_cur_scb: 0x%08x sco.state: " + "%d", + sco_idx, bta_ag_cb.sco.p_curr_scb, bta_ag_cb.sco.state); + + APPL_TRACE_DEBUG( + "bta_ag_sco_disc_cback(): scb[0] addr: 0x%08x in_use: %u sco_idx: 0x%x " + " sco state: %u", + &bta_ag_cb.scb[0], bta_ag_cb.scb[0].in_use, bta_ag_cb.scb[0].sco_idx, + bta_ag_cb.scb[0].state); + APPL_TRACE_DEBUG( + "bta_ag_sco_disc_cback(): scb[1] addr: 0x%08x in_use: %u sco_idx: 0x%x " + " sco state: %u", + &bta_ag_cb.scb[1], bta_ag_cb.scb[1].in_use, bta_ag_cb.scb[1].sco_idx, + bta_ag_cb.scb[1].state); + + /* match callback to scb */ + if (bta_ag_cb.sco.p_curr_scb != NULL && bta_ag_cb.sco.p_curr_scb->in_use) { + /* We only care about callbacks for the active SCO */ + if (bta_ag_cb.sco.p_curr_scb->sco_idx != sco_idx) { + if (bta_ag_cb.sco.p_curr_scb->sco_idx != 0xFFFF) return; } + handle = bta_ag_scb_to_idx(bta_ag_cb.sco.p_curr_scb); + } - if (handle != 0) - { + if (handle != 0) { #if (BTM_SCO_HCI_INCLUDED == TRUE) - tBTM_STATUS status = BTM_ConfigScoPath(BTM_SCO_ROUTE_PCM, NULL, NULL, true); - APPL_TRACE_DEBUG("bta_ag_sco_disc_cback sco close config status = %d", status); - /* SCO clean up here */ - bta_dm_sco_co_close(); + tBTM_STATUS status = BTM_ConfigScoPath(BTM_SCO_ROUTE_PCM, NULL, NULL, true); + APPL_TRACE_DEBUG("bta_ag_sco_disc_cback sco close config status = %d", + status); + /* SCO clean up here */ + bta_dm_sco_co_close(); #endif #if (BTM_WBS_INCLUDED == TRUE) - /* Restore settings */ - if(bta_ag_cb.sco.p_curr_scb->inuse_codec == BTA_AG_CODEC_MSBC) - { - /* set_sco_codec(BTM_SCO_CODEC_NONE); we should get a close */ - BTM_WriteVoiceSettings (BTM_VOICE_SETTING_CVSD); - - /* If SCO open was initiated by AG and failed for mSBC, then attempt - mSBC with T1 settings i.e. 'Safe Settings'. If this fails, then switch to CVSD */ - if (bta_ag_sco_is_opening (bta_ag_cb.sco.p_curr_scb)) - { - if (bta_ag_cb.sco.p_curr_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) - { - APPL_TRACE_DEBUG("Fallback to mSBC T1 settings"); - bta_ag_cb.sco.p_curr_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T1; - } - else - { - APPL_TRACE_DEBUG("Fallback to CVSD settings"); - bta_ag_cb.sco.p_curr_scb->codec_fallback = true; - } - } + /* Restore settings */ + if (bta_ag_cb.sco.p_curr_scb->inuse_codec == BTA_AG_CODEC_MSBC) { + /* set_sco_codec(BTM_SCO_CODEC_NONE); we should get a close */ + BTM_WriteVoiceSettings(BTM_VOICE_SETTING_CVSD); + + /* If SCO open was initiated by AG and failed for mSBC, then attempt + mSBC with T1 settings i.e. 'Safe Settings'. If this fails, then switch to + CVSD */ + if (bta_ag_sco_is_opening(bta_ag_cb.sco.p_curr_scb)) { + if (bta_ag_cb.sco.p_curr_scb->codec_msbc_settings == + BTA_AG_SCO_MSBC_SETTINGS_T2) { + APPL_TRACE_DEBUG("Fallback to mSBC T1 settings"); + bta_ag_cb.sco.p_curr_scb->codec_msbc_settings = + BTA_AG_SCO_MSBC_SETTINGS_T1; + } else { + APPL_TRACE_DEBUG("Fallback to CVSD settings"); + bta_ag_cb.sco.p_curr_scb->codec_fallback = true; } + } + } - bta_ag_cb.sco.p_curr_scb->inuse_codec = BTA_AG_CODEC_NONE; + bta_ag_cb.sco.p_curr_scb->inuse_codec = BTA_AG_CODEC_NONE; #endif - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AG_SCO_CLOSE_EVT; - p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); - } else { - /* no match found */ - APPL_TRACE_DEBUG("no scb for ag_sco_disc_cback"); - - /* sco could be closed after scb dealloc'ed */ - if (bta_ag_cb.sco.p_curr_scb != NULL) - { - bta_ag_cb.sco.p_curr_scb->sco_idx = BTM_INVALID_SCO_INDEX; - bta_ag_cb.sco.p_curr_scb = NULL; - bta_ag_cb.sco.state = BTA_AG_SCO_SHUTDOWN_ST; - } + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->event = BTA_AG_SCO_CLOSE_EVT; + p_buf->layer_specific = handle; + bta_sys_sendmsg(p_buf); + } else { + /* no match found */ + APPL_TRACE_DEBUG("no scb for ag_sco_disc_cback"); + + /* sco could be closed after scb dealloc'ed */ + if (bta_ag_cb.sco.p_curr_scb != NULL) { + bta_ag_cb.sco.p_curr_scb->sco_idx = BTM_INVALID_SCO_INDEX; + bta_ag_cb.sco.p_curr_scb = NULL; + bta_ag_cb.sco.state = BTA_AG_SCO_SHUTDOWN_ST; } + } } #if (BTM_SCO_HCI_INCLUDED == TRUE) /******************************************************************************* @@ -284,15 +268,14 @@ static void bta_ag_sco_disc_cback(uint16_t sco_idx) * Returns void * ******************************************************************************/ -static void bta_ag_sco_read_cback (uint16_t sco_inx, BT_HDR *p_data, tBTM_SCO_DATA_FLAG status) -{ - if (status != BTM_SCO_DATA_CORRECT) - { - APPL_TRACE_DEBUG("bta_ag_sco_read_cback: status(%d)", status); - } - - /* Callout function must free the data. */ - bta_dm_sco_co_in_data (p_data, status); +static void bta_ag_sco_read_cback(uint16_t sco_inx, BT_HDR* p_data, + tBTM_SCO_DATA_FLAG status) { + if (status != BTM_SCO_DATA_CORRECT) { + APPL_TRACE_DEBUG("bta_ag_sco_read_cback: status(%d)", status); + } + + /* Callout function must free the data. */ + bta_dm_sco_co_in_data(p_data, status); } #endif /******************************************************************************* @@ -300,42 +283,38 @@ static void bta_ag_sco_read_cback (uint16_t sco_inx, BT_HDR *p_data, tBTM_SCO_DA * Function bta_ag_remove_sco * * Description Removes the specified SCO from the system. - * If only_active is true, then SCO is only removed if connected + * If only_active is true, then SCO is only removed if + *connected * * Returns bool - true if Sco removal was started * ******************************************************************************/ -static bool bta_ag_remove_sco(tBTA_AG_SCB *p_scb, bool only_active) -{ - bool removed_started = false; - tBTM_STATUS status; +static bool bta_ag_remove_sco(tBTA_AG_SCB* p_scb, bool only_active) { + bool removed_started = false; + tBTM_STATUS status; - if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) - { - if (!only_active || p_scb->sco_idx == bta_ag_cb.sco.cur_idx) - { - status = BTM_RemoveSco(p_scb->sco_idx); - - APPL_TRACE_DEBUG("ag remove sco: inx 0x%04x, status:0x%x", p_scb->sco_idx, status); - - if (status == BTM_CMD_STARTED) - { - /* Sco is connected; set current control block */ - bta_ag_cb.sco.p_curr_scb = p_scb; - - removed_started = true; - } - /* If no connection reset the sco handle */ - else if ( (status == BTM_SUCCESS) || (status == BTM_UNKNOWN_ADDR) ) - { - p_scb->sco_idx = BTM_INVALID_SCO_INDEX; - } - } + if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) { + if (!only_active || p_scb->sco_idx == bta_ag_cb.sco.cur_idx) { + status = BTM_RemoveSco(p_scb->sco_idx); + + APPL_TRACE_DEBUG("ag remove sco: inx 0x%04x, status:0x%x", p_scb->sco_idx, + status); + + if (status == BTM_CMD_STARTED) { + /* Sco is connected; set current control block */ + bta_ag_cb.sco.p_curr_scb = p_scb; + + removed_started = true; + } + /* If no connection reset the sco handle */ + else if ((status == BTM_SUCCESS) || (status == BTM_UNKNOWN_ADDR)) { + p_scb->sco_idx = BTM_INVALID_SCO_INDEX; + } } - return removed_started; + } + return removed_started; } - /******************************************************************************* * * Function bta_ag_esco_connreq_cback @@ -346,62 +325,63 @@ static bool bta_ag_remove_sco(tBTA_AG_SCB *p_scb, bool only_active) * Returns void * ******************************************************************************/ -static void bta_ag_esco_connreq_cback(tBTM_ESCO_EVT event, tBTM_ESCO_EVT_DATA *p_data) -{ - tBTA_AG_SCB *p_scb; - uint16_t handle; - uint16_t sco_inx = p_data->conn_evt.sco_inx; - - /* Only process connection requests */ - if (event == BTM_ESCO_CONN_REQ_EVT) - { - if ((handle = bta_ag_idx_by_bdaddr(BTM_ReadScoBdAddr(sco_inx))) != 0 && - ((p_scb = bta_ag_scb_by_idx(handle)) != NULL) && p_scb->svc_conn) - { - p_scb->sco_idx = sco_inx; - - /* If no other SCO active, allow this one */ - if (!bta_ag_cb.sco.p_curr_scb) - { - APPL_TRACE_EVENT("bta_ag_esco_connreq_cback: Accept Conn Request (sco_inx 0x%04x)", sco_inx); - bta_ag_sco_conn_rsp(p_scb, &p_data->conn_evt); - - bta_ag_cb.sco.state = BTA_AG_SCO_OPENING_ST; - bta_ag_cb.sco.p_curr_scb = p_scb; - bta_ag_cb.sco.cur_idx = p_scb->sco_idx; - } - else /* Begin a transfer: Close current SCO before responding */ - { - APPL_TRACE_DEBUG("bta_ag_esco_connreq_cback: Begin XFER"); - bta_ag_cb.sco.p_xfer_scb = p_scb; - bta_ag_cb.sco.conn_data = p_data->conn_evt; - bta_ag_cb.sco.state = BTA_AG_SCO_OPEN_XFER_ST; - - if (!bta_ag_remove_sco(bta_ag_cb.sco.p_curr_scb, true)) - { - APPL_TRACE_ERROR("bta_ag_esco_connreq_cback: Nothing to remove so accept Conn Request (sco_inx 0x%04x)", sco_inx); - bta_ag_cb.sco.p_xfer_scb = NULL; - bta_ag_cb.sco.state = BTA_AG_SCO_LISTEN_ST; - - bta_ag_sco_conn_rsp(p_scb, &p_data->conn_evt); - } - } - } - /* If error occurred send reject response immediately */ - else - { - APPL_TRACE_WARNING("no scb for bta_ag_esco_connreq_cback or no resources"); - BTM_EScoConnRsp(p_data->conn_evt.sco_inx, HCI_ERR_HOST_REJECT_RESOURCES, NULL); +static void bta_ag_esco_connreq_cback(tBTM_ESCO_EVT event, + tBTM_ESCO_EVT_DATA* p_data) { + tBTA_AG_SCB* p_scb; + uint16_t handle; + uint16_t sco_inx = p_data->conn_evt.sco_inx; + + /* Only process connection requests */ + if (event == BTM_ESCO_CONN_REQ_EVT) { + if ((handle = bta_ag_idx_by_bdaddr(BTM_ReadScoBdAddr(sco_inx))) != 0 && + ((p_scb = bta_ag_scb_by_idx(handle)) != NULL) && p_scb->svc_conn) { + p_scb->sco_idx = sco_inx; + + /* If no other SCO active, allow this one */ + if (!bta_ag_cb.sco.p_curr_scb) { + APPL_TRACE_EVENT( + "bta_ag_esco_connreq_cback: Accept Conn Request (sco_inx 0x%04x)", + sco_inx); + bta_ag_sco_conn_rsp(p_scb, &p_data->conn_evt); + + bta_ag_cb.sco.state = BTA_AG_SCO_OPENING_ST; + bta_ag_cb.sco.p_curr_scb = p_scb; + bta_ag_cb.sco.cur_idx = p_scb->sco_idx; + } else /* Begin a transfer: Close current SCO before responding */ + { + APPL_TRACE_DEBUG("bta_ag_esco_connreq_cback: Begin XFER"); + bta_ag_cb.sco.p_xfer_scb = p_scb; + bta_ag_cb.sco.conn_data = p_data->conn_evt; + bta_ag_cb.sco.state = BTA_AG_SCO_OPEN_XFER_ST; + + if (!bta_ag_remove_sco(bta_ag_cb.sco.p_curr_scb, true)) { + APPL_TRACE_ERROR( + "bta_ag_esco_connreq_cback: Nothing to remove so accept Conn " + "Request (sco_inx 0x%04x)", + sco_inx); + bta_ag_cb.sco.p_xfer_scb = NULL; + bta_ag_cb.sco.state = BTA_AG_SCO_LISTEN_ST; + + bta_ag_sco_conn_rsp(p_scb, &p_data->conn_evt); } + } } - /* Received a change in the esco link */ - else if (event == BTM_ESCO_CHG_EVT) - { - APPL_TRACE_EVENT("eSCO change event (inx %d): rtrans %d, rxlen %d, txlen %d, txint %d", - p_data->chg_evt.sco_inx, - p_data->chg_evt.retrans_window, p_data->chg_evt.rx_pkt_len, - p_data->chg_evt.tx_pkt_len, p_data->chg_evt.tx_interval); + /* If error occurred send reject response immediately */ + else { + APPL_TRACE_WARNING( + "no scb for bta_ag_esco_connreq_cback or no resources"); + BTM_EScoConnRsp(p_data->conn_evt.sco_inx, HCI_ERR_HOST_REJECT_RESOURCES, + NULL); } + } + /* Received a change in the esco link */ + else if (event == BTM_ESCO_CHG_EVT) { + APPL_TRACE_EVENT( + "eSCO change event (inx %d): rtrans %d, rxlen %d, txlen %d, txint %d", + p_data->chg_evt.sco_inx, p_data->chg_evt.retrans_window, + p_data->chg_evt.rx_pkt_len, p_data->chg_evt.tx_pkt_len, + p_data->chg_evt.tx_interval); + } } /******************************************************************************* @@ -414,15 +394,14 @@ static void bta_ag_esco_connreq_cback(tBTM_ESCO_EVT event, tBTM_ESCO_EVT_DATA *p * Returns void * ******************************************************************************/ -static void bta_ag_cback_sco(tBTA_AG_SCB *p_scb, uint8_t event) -{ - tBTA_AG_HDR sco; +static void bta_ag_cback_sco(tBTA_AG_SCB* p_scb, uint8_t event) { + tBTA_AG_HDR sco; - sco.handle = bta_ag_scb_to_idx(p_scb); - sco.app_id = p_scb->app_id; + sco.handle = bta_ag_scb_to_idx(p_scb); + sco.app_id = p_scb->app_id; - /* call close cback */ - (*bta_ag_cb.p_cback)(event, (tBTA_AG *) &sco); + /* call close cback */ + (*bta_ag_cb.p_cback)(event, (tBTA_AG*)&sco); } /******************************************************************************* @@ -435,181 +414,167 @@ static void bta_ag_cback_sco(tBTA_AG_SCB *p_scb, uint8_t event) * Returns void * ******************************************************************************/ -static void bta_ag_create_sco(tBTA_AG_SCB *p_scb, bool is_orig) -{ - tBTM_STATUS status; - uint8_t *p_bd_addr = NULL; - tBTM_ESCO_PARAMS params; +static void bta_ag_create_sco(tBTA_AG_SCB* p_scb, bool is_orig) { + tBTM_STATUS status; + uint8_t* p_bd_addr = NULL; + tBTM_ESCO_PARAMS params; #if (BTM_WBS_INCLUDED == TRUE) - tBTA_AG_PEER_CODEC esco_codec = BTM_SCO_CODEC_CVSD; - int codec_index = 0; + tBTA_AG_PEER_CODEC esco_codec = BTM_SCO_CODEC_CVSD; + int codec_index = 0; #endif #if (BTM_SCO_HCI_INCLUDED == TRUE) - tBTM_SCO_ROUTE_TYPE sco_route; - tBTA_CODEC_INFO codec_info = {BTA_SCO_CODEC_PCM}; - uint32_t pcm_sample_rate; + tBTM_SCO_ROUTE_TYPE sco_route; + tBTA_CODEC_INFO codec_info = {BTA_SCO_CODEC_PCM}; + uint32_t pcm_sample_rate; #endif - /* Make sure this sco handle is not already in use */ - if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) - { - APPL_TRACE_WARNING("bta_ag_create_sco: Index 0x%04x Already In Use!", - p_scb->sco_idx); - return; - } + /* Make sure this sco handle is not already in use */ + if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) { + APPL_TRACE_WARNING("bta_ag_create_sco: Index 0x%04x Already In Use!", + p_scb->sco_idx); + return; + } #if (BTM_WBS_INCLUDED == TRUE) - if ((p_scb->sco_codec == BTM_SCO_CODEC_MSBC) && - !p_scb->codec_fallback && - !p_scb->retry_with_sco_only) - esco_codec = BTM_SCO_CODEC_MSBC; - - if (p_scb->codec_fallback) - { - p_scb->codec_fallback = false; - - /* Force AG to send +BCS for the next audio connection. */ - p_scb->codec_updated = true; - } - - /* If WBS included, use CVSD by default, index is 0 for CVSD by initialization */ - /* If eSCO codec is mSBC, index is T2 or T1 */ - if (esco_codec == BTM_SCO_CODEC_MSBC) - { - if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) - { - codec_index = BTA_AG_ESCO_SETTING_IDX_T2; - } - else - { - codec_index = BTA_AG_ESCO_SETTING_IDX_T1; - } + if ((p_scb->sco_codec == BTM_SCO_CODEC_MSBC) && !p_scb->codec_fallback && + !p_scb->retry_with_sco_only) + esco_codec = BTM_SCO_CODEC_MSBC; + + if (p_scb->codec_fallback) { + p_scb->codec_fallback = false; + + /* Force AG to send +BCS for the next audio connection. */ + p_scb->codec_updated = true; + } + + /* If WBS included, use CVSD by default, index is 0 for CVSD by initialization + */ + /* If eSCO codec is mSBC, index is T2 or T1 */ + if (esco_codec == BTM_SCO_CODEC_MSBC) { + if (p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T2) { + codec_index = BTA_AG_ESCO_SETTING_IDX_T2; + } else { + codec_index = BTA_AG_ESCO_SETTING_IDX_T1; } + } - params = bta_ag_esco_params[codec_index]; + params = bta_ag_esco_params[codec_index]; #else - /* When WBS is not included, use CVSD by default */ - params = bta_ag_esco_params; + /* When WBS is not included, use CVSD by default */ + params = bta_ag_esco_params; #endif - if(bta_ag_cb.sco.param_updated) /* If we do not use the default parameters */ - params = bta_ag_cb.sco.params; + if (bta_ag_cb.sco.param_updated) /* If we do not use the default parameters */ + params = bta_ag_cb.sco.params; - if(!bta_ag_cb.sco.param_updated) - { + if (!bta_ag_cb.sco.param_updated) { #if (BTM_WBS_INCLUDED == TRUE) - if (esco_codec == BTM_SCO_CODEC_CVSD) /* For CVSD */ + if (esco_codec == BTM_SCO_CODEC_CVSD) /* For CVSD */ #endif - { - /* Use the application packet types (5 slot EV packets not allowed) */ - params.packet_types = p_bta_ag_cfg->sco_pkt_types | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5; - } - } - - /* if initiating set current scb and peer bd addr */ - if (is_orig) { - /* Attempt to use eSCO if remote host supports HFP >= 1.5 */ - /* Need to find out from SIG if HSP can use eSCO; for now use SCO */ - if (p_scb->conn_service == BTA_AG_HFP && p_scb->peer_version >= HFP_VERSION_1_5 && !p_scb->retry_with_sco_only) - { - - BTM_SetEScoMode(BTM_LINK_TYPE_ESCO, ¶ms); - /* If ESCO or EDR ESCO, retry with SCO only in case of failure */ - if((params.packet_types & BTM_ESCO_LINK_ONLY_MASK) - ||!((params.packet_types & ~(BTM_ESCO_LINK_ONLY_MASK | BTM_SCO_LINK_ONLY_MASK)) ^ BTA_AG_NO_EDR_ESCO)) - { + /* Use the application packet types (5 slot EV packets not allowed) */ + params.packet_types = p_bta_ag_cfg->sco_pkt_types | + BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5; + } + } + + /* if initiating set current scb and peer bd addr */ + if (is_orig) { + /* Attempt to use eSCO if remote host supports HFP >= 1.5 */ + /* Need to find out from SIG if HSP can use eSCO; for now use SCO */ + if (p_scb->conn_service == BTA_AG_HFP && + p_scb->peer_version >= HFP_VERSION_1_5 && !p_scb->retry_with_sco_only) { + BTM_SetEScoMode(BTM_LINK_TYPE_ESCO, ¶ms); + /* If ESCO or EDR ESCO, retry with SCO only in case of failure */ + if ((params.packet_types & BTM_ESCO_LINK_ONLY_MASK) || + !((params.packet_types & + ~(BTM_ESCO_LINK_ONLY_MASK | BTM_SCO_LINK_ONLY_MASK)) ^ + BTA_AG_NO_EDR_ESCO)) { #if (BTM_WBS_INCLUDED == TRUE) - if (esco_codec != BTA_AG_CODEC_MSBC) - { - p_scb->retry_with_sco_only = true; - APPL_TRACE_API("Setting retry_with_sco_only to true"); - } - else /* Do not use SCO when using mSBC */ - { - p_scb->retry_with_sco_only = false; - APPL_TRACE_API("Setting retry_with_sco_only to false"); - } + if (esco_codec != BTA_AG_CODEC_MSBC) { + p_scb->retry_with_sco_only = true; + APPL_TRACE_API("Setting retry_with_sco_only to true"); + } else /* Do not use SCO when using mSBC */ + { + p_scb->retry_with_sco_only = false; + APPL_TRACE_API("Setting retry_with_sco_only to false"); + } #else - p_scb->retry_with_sco_only = true; - APPL_TRACE_API("Setting retry_with_sco_only to true"); + p_scb->retry_with_sco_only = true; + APPL_TRACE_API("Setting retry_with_sco_only to true"); #endif - } - } - else - { - if(p_scb->retry_with_sco_only) - APPL_TRACE_API("retrying with SCO only"); - p_scb->retry_with_sco_only = false; + } + } else { + if (p_scb->retry_with_sco_only) APPL_TRACE_API("retrying with SCO only"); + p_scb->retry_with_sco_only = false; - BTM_SetEScoMode(BTM_LINK_TYPE_SCO, ¶ms); - } + BTM_SetEScoMode(BTM_LINK_TYPE_SCO, ¶ms); + } - bta_ag_cb.sco.p_curr_scb = p_scb; + bta_ag_cb.sco.p_curr_scb = p_scb; - /* tell sys to stop av if any */ - bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + /* tell sys to stop av if any */ + bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); #if (BTM_WBS_INCLUDED == TRUE) - /* Allow any platform specific pre-SCO set up to take place */ - bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, SCO_STATE_SETUP, - esco_codec); - - /* This setting may not be necessary */ - /* To be verified with stable 2049 boards */ - if (esco_codec == BTA_AG_CODEC_MSBC) - BTM_WriteVoiceSettings (BTM_VOICE_SETTING_TRANS); - else - BTM_WriteVoiceSettings (BTM_VOICE_SETTING_CVSD); - /* save the current codec because sco_codec can be updated while SCO is open. */ - p_scb->inuse_codec = esco_codec; + /* Allow any platform specific pre-SCO set up to take place */ + bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, + SCO_STATE_SETUP, esco_codec); + + /* This setting may not be necessary */ + /* To be verified with stable 2049 boards */ + if (esco_codec == BTA_AG_CODEC_MSBC) + BTM_WriteVoiceSettings(BTM_VOICE_SETTING_TRANS); + else + BTM_WriteVoiceSettings(BTM_VOICE_SETTING_CVSD); + /* save the current codec because sco_codec can be updated while SCO is + * open. */ + p_scb->inuse_codec = esco_codec; #else - /* Allow any platform specific pre-SCO set up to take place */ - bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, SCO_STATE_SETUP); + /* Allow any platform specific pre-SCO set up to take place */ + bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, + SCO_STATE_SETUP); #endif #if (BTM_SCO_HCI_INCLUDED == TRUE) #if (BTM_WBS_INCLUDED == TRUE) - if (esco_codec == BTA_AG_CODEC_MSBC) - pcm_sample_rate = BTA_DM_SCO_SAMP_RATE_16K; - else + if (esco_codec == BTA_AG_CODEC_MSBC) + pcm_sample_rate = BTA_DM_SCO_SAMP_RATE_16K; + else #endif - pcm_sample_rate = BTA_DM_SCO_SAMP_RATE_8K; + pcm_sample_rate = BTA_DM_SCO_SAMP_RATE_8K; - sco_route = bta_dm_sco_co_init(pcm_sample_rate, pcm_sample_rate, &codec_info, p_scb->app_id); + sco_route = bta_dm_sco_co_init(pcm_sample_rate, pcm_sample_rate, + &codec_info, p_scb->app_id); #endif - #if (BTM_SCO_HCI_INCLUDED == TRUE) - /* initialize SCO setup, no voice setting for AG, data rate <==> sample rate */ - BTM_ConfigScoPath(sco_route, bta_ag_sco_read_cback, NULL, true); + /* initialize SCO setup, no voice setting for AG, data rate <==> sample rate + */ + BTM_ConfigScoPath(sco_route, bta_ag_sco_read_cback, NULL, true); #endif - bta_ag_cb.sco.cur_idx = p_scb->sco_idx; - } - else - p_scb->retry_with_sco_only = false; + bta_ag_cb.sco.cur_idx = p_scb->sco_idx; + } else + p_scb->retry_with_sco_only = false; - p_bd_addr = p_scb->peer_addr; + p_bd_addr = p_scb->peer_addr; - status = BTM_CreateSco(p_bd_addr, is_orig, params.packet_types, - &p_scb->sco_idx, bta_ag_sco_conn_cback, - bta_ag_sco_disc_cback); - if (status == BTM_CMD_STARTED) + status = + BTM_CreateSco(p_bd_addr, is_orig, params.packet_types, &p_scb->sco_idx, + bta_ag_sco_conn_cback, bta_ag_sco_disc_cback); + if (status == BTM_CMD_STARTED) { + if (!is_orig) { + BTM_RegForEScoEvts(p_scb->sco_idx, bta_ag_esco_connreq_cback); + } else /* Initiating the connection, set the current sco handle */ { - if (!is_orig) - { - BTM_RegForEScoEvts(p_scb->sco_idx, bta_ag_esco_connreq_cback); - } - else /* Initiating the connection, set the current sco handle */ - { - bta_ag_cb.sco.cur_idx = p_scb->sco_idx; - } + bta_ag_cb.sco.cur_idx = p_scb->sco_idx; } + } - APPL_TRACE_API("ag create sco: orig %d, inx 0x%04x, status 0x%x, pkt types 0x%04x", - is_orig, p_scb->sco_idx, status, params.packet_types); + APPL_TRACE_API( + "ag create sco: orig %d, inx 0x%04x, status 0x%x, pkt types 0x%04x", + is_orig, p_scb->sco_idx, status, params.packet_types); } #if (BTM_WBS_INCLUDED == TRUE) @@ -617,19 +582,19 @@ static void bta_ag_create_sco(tBTA_AG_SCB *p_scb, bool is_orig) * * Function bta_ag_attempt_msbc_safe_settings * - * Description Checks if ESCO connection needs to be attempted using mSBC T1(safe) settings + * Description Checks if ESCO connection needs to be attempted using mSBC + *T1(safe) settings * * * Returns true if T1 settings has to be used, false otherwise * ******************************************************************************/ -bool bta_ag_attempt_msbc_safe_settings(tBTA_AG_SCB *p_scb) -{ - if (p_scb->svc_conn && p_scb->sco_codec == BTM_SCO_CODEC_MSBC && - p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T1) - return true; - else - return false; +bool bta_ag_attempt_msbc_safe_settings(tBTA_AG_SCB* p_scb) { + if (p_scb->svc_conn && p_scb->sco_codec == BTM_SCO_CODEC_MSBC && + p_scb->codec_msbc_settings == BTA_AG_SCO_MSBC_SETTINGS_T1) + return true; + else + return false; } /******************************************************************************* @@ -642,15 +607,14 @@ bool bta_ag_attempt_msbc_safe_settings(tBTA_AG_SCB *p_scb) * Returns void * ******************************************************************************/ -static void bta_ag_codec_negotiation_timer_cback(void *data) -{ - tBTA_AG_SCB *p_scb = (tBTA_AG_SCB *)data; +static void bta_ag_codec_negotiation_timer_cback(void* data) { + tBTA_AG_SCB* p_scb = (tBTA_AG_SCB*)data; - /* Announce that codec negotiation failed. */ - bta_ag_sco_codec_nego(p_scb, false); + /* Announce that codec negotiation failed. */ + bta_ag_sco_codec_nego(p_scb, false); - /* call app callback */ - bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_CLOSE_EVT); + /* call app callback */ + bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_CLOSE_EVT); } /******************************************************************************* @@ -663,33 +627,29 @@ static void bta_ag_codec_negotiation_timer_cback(void *data) * Returns void * ******************************************************************************/ -void bta_ag_codec_negotiate(tBTA_AG_SCB *p_scb) -{ - bta_ag_cb.sco.p_curr_scb = p_scb; - - if ((p_scb->codec_updated || p_scb->codec_fallback || - bta_ag_attempt_msbc_safe_settings(p_scb)) && - (p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC)) - { - /* Change the power mode to Active until sco open is completed. */ - bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - - /* Send +BCS to the peer */ - bta_ag_send_bcs(p_scb, NULL); - - /* Start timer to handle timeout */ - alarm_set_on_queue(p_scb->codec_negotiation_timer, - BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS, - bta_ag_codec_negotiation_timer_cback, - p_scb, - btu_bta_alarm_queue); - } - else - { - /* use same codec type as previous SCO connection, skip codec negotiation */ - APPL_TRACE_DEBUG("use same codec type as previous SCO connection,skip codec negotiation"); - bta_ag_sco_codec_nego(p_scb, true); - } +void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) { + bta_ag_cb.sco.p_curr_scb = p_scb; + + if ((p_scb->codec_updated || p_scb->codec_fallback || + bta_ag_attempt_msbc_safe_settings(p_scb)) && + (p_scb->peer_features & BTA_AG_PEER_FEAT_CODEC)) { + /* Change the power mode to Active until sco open is completed. */ + bta_sys_busy(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + + /* Send +BCS to the peer */ + bta_ag_send_bcs(p_scb, NULL); + + /* Start timer to handle timeout */ + alarm_set_on_queue( + p_scb->codec_negotiation_timer, BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS, + bta_ag_codec_negotiation_timer_cback, p_scb, btu_bta_alarm_queue); + } else { + /* use same codec type as previous SCO connection, skip codec negotiation */ + APPL_TRACE_DEBUG( + "use same codec type as previous SCO connection,skip codec " + "negotiation"); + bta_ag_sco_codec_nego(p_scb, true); + } } #endif /* (BTM_WBS_INCLUDED == TRUE) */ @@ -703,581 +663,544 @@ void bta_ag_codec_negotiate(tBTA_AG_SCB *p_scb) * Returns void * ******************************************************************************/ -static void bta_ag_sco_event(tBTA_AG_SCB *p_scb, uint8_t event) -{ - tBTA_AG_SCO_CB *p_sco = &bta_ag_cb.sco; +static void bta_ag_sco_event(tBTA_AG_SCB* p_scb, uint8_t event) { + tBTA_AG_SCO_CB* p_sco = &bta_ag_cb.sco; #if (BTM_WBS_INCLUDED == TRUE) - tBTA_AG_SCB *p_cn_scb = NULL; /* For codec negotiation */ + tBTA_AG_SCB* p_cn_scb = NULL; /* For codec negotiation */ #endif #if (BTM_SCO_HCI_INCLUDED == TRUE) - BT_HDR *p_buf; + BT_HDR* p_buf; #endif #if (BTA_AG_SCO_DEBUG == TRUE) - uint8_t in_state = p_sco->state; + uint8_t in_state = p_sco->state; - APPL_TRACE_EVENT("BTA ag sco evt (hdl 0x%04x): State %d (%s), Event %d (%s)", - p_scb->sco_idx, - p_sco->state, bta_ag_sco_state_str(p_sco->state), - event, bta_ag_sco_evt_str(event)); + APPL_TRACE_EVENT("BTA ag sco evt (hdl 0x%04x): State %d (%s), Event %d (%s)", + p_scb->sco_idx, p_sco->state, + bta_ag_sco_state_str(p_sco->state), event, + bta_ag_sco_evt_str(event)); #else - APPL_TRACE_EVENT("BTA ag sco evt (hdl 0x%04x): State %d, Event %d", - p_scb->sco_idx, p_sco->state, event); + APPL_TRACE_EVENT("BTA ag sco evt (hdl 0x%04x): State %d, Event %d", + p_scb->sco_idx, p_sco->state, event); #endif #if (BTM_SCO_HCI_INCLUDED == TRUE) - if (event == BTA_AG_SCO_CI_DATA_E) - { - while (true) - { - bta_dm_sco_co_out_data(&p_buf); - if (p_buf) - { - if (p_sco->state == BTA_AG_SCO_OPEN_ST) - BTM_WriteScoData(p_sco->p_curr_scb->sco_idx, p_buf); - else - osi_free(p_buf); - } - else - break; - } - - return; + if (event == BTA_AG_SCO_CI_DATA_E) { + while (true) { + bta_dm_sco_co_out_data(&p_buf); + if (p_buf) { + if (p_sco->state == BTA_AG_SCO_OPEN_ST) + BTM_WriteScoData(p_sco->p_curr_scb->sco_idx, p_buf); + else + osi_free(p_buf); + } else + break; } + + return; + } #endif - switch (p_sco->state) - { - case BTA_AG_SCO_SHUTDOWN_ST: - switch (event) - { - case BTA_AG_SCO_LISTEN_E: - /* create sco listen connection */ - bta_ag_create_sco(p_scb, false); - p_sco->state = BTA_AG_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_SHUTDOWN_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_AG_SCO_LISTEN_ST: - switch (event) - { - case BTA_AG_SCO_LISTEN_E: - /* create sco listen connection (Additional channel) */ - bta_ag_create_sco(p_scb, false); - break; - - case BTA_AG_SCO_OPEN_E: - /* remove listening connection */ - bta_ag_remove_sco(p_scb, false); + switch (p_sco->state) { + case BTA_AG_SCO_SHUTDOWN_ST: + switch (event) { + case BTA_AG_SCO_LISTEN_E: + /* create sco listen connection */ + bta_ag_create_sco(p_scb, false); + p_sco->state = BTA_AG_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_SHUTDOWN_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_AG_SCO_LISTEN_ST: + switch (event) { + case BTA_AG_SCO_LISTEN_E: + /* create sco listen connection (Additional channel) */ + bta_ag_create_sco(p_scb, false); + break; + + case BTA_AG_SCO_OPEN_E: + /* remove listening connection */ + bta_ag_remove_sco(p_scb, false); #if (BTM_WBS_INCLUDED == TRUE) - /* start codec negotiation */ - p_sco->state = BTA_AG_SCO_CODEC_ST; - p_cn_scb = p_scb; + /* start codec negotiation */ + p_sco->state = BTA_AG_SCO_CODEC_ST; + p_cn_scb = p_scb; #else - /* create sco connection to peer */ - bta_ag_create_sco(p_scb, true); - p_sco->state = BTA_AG_SCO_OPENING_ST; + /* create sco connection to peer */ + bta_ag_create_sco(p_scb, true); + p_sco->state = BTA_AG_SCO_OPENING_ST; #endif - break; - - case BTA_AG_SCO_SHUTDOWN_E: - /* remove listening connection */ - bta_ag_remove_sco(p_scb, false); - - if (p_scb == p_sco->p_curr_scb) - p_sco->p_curr_scb = NULL; - - /* If last SCO instance then finish shutting down */ - if (!bta_ag_other_scb_open(p_scb)) - { - p_sco->state = BTA_AG_SCO_SHUTDOWN_ST; - } - break; - - case BTA_AG_SCO_CLOSE_E: - /* remove listening connection */ - /* Ignore the event. We need to keep listening SCO for the active SLC */ - APPL_TRACE_WARNING("BTA_AG_SCO_LISTEN_ST: Ignoring event %d", event); - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* sco failed; create sco listen connection */ - bta_ag_create_sco(p_scb, false); - p_sco->state = BTA_AG_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_LISTEN_ST: Ignoring event %d", event); - break; - } - break; + break; + + case BTA_AG_SCO_SHUTDOWN_E: + /* remove listening connection */ + bta_ag_remove_sco(p_scb, false); + + if (p_scb == p_sco->p_curr_scb) p_sco->p_curr_scb = NULL; + + /* If last SCO instance then finish shutting down */ + if (!bta_ag_other_scb_open(p_scb)) { + p_sco->state = BTA_AG_SCO_SHUTDOWN_ST; + } + break; + + case BTA_AG_SCO_CLOSE_E: + /* remove listening connection */ + /* Ignore the event. We need to keep listening SCO for the active SLC + */ + APPL_TRACE_WARNING("BTA_AG_SCO_LISTEN_ST: Ignoring event %d", event); + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* sco failed; create sco listen connection */ + bta_ag_create_sco(p_scb, false); + p_sco->state = BTA_AG_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_LISTEN_ST: Ignoring event %d", event); + break; + } + break; #if (BTM_WBS_INCLUDED == TRUE) - case BTA_AG_SCO_CODEC_ST: - switch (event) - { - case BTA_AG_SCO_LISTEN_E: - /* create sco listen connection (Additional channel) */ - bta_ag_create_sco(p_scb, false); - break; - - case BTA_AG_SCO_CN_DONE_E: - /* create sco connection to peer */ - bta_ag_create_sco(p_scb, true); - p_sco->state = BTA_AG_SCO_OPENING_ST; - break; - - case BTA_AG_SCO_XFER_E: - /* save xfer scb */ - p_sco->p_xfer_scb = p_scb; - p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; - break; - - case BTA_AG_SCO_SHUTDOWN_E: - /* remove listening connection */ - bta_ag_remove_sco(p_scb, false); - - if (p_scb == p_sco->p_curr_scb) - p_sco->p_curr_scb = NULL; - - /* If last SCO instance then finish shutting down */ - if (!bta_ag_other_scb_open(p_scb)) - { - p_sco->state = BTA_AG_SCO_SHUTDOWN_ST; - } - break; - - case BTA_AG_SCO_CLOSE_E: - /* sco open is not started yet. just go back to listening */ - p_sco->state = BTA_AG_SCO_LISTEN_ST; - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* sco failed; create sco listen connection */ - bta_ag_create_sco(p_scb, false); - p_sco->state = BTA_AG_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_CODEC_ST: Ignoring event %d", event); - break; - } - break; + case BTA_AG_SCO_CODEC_ST: + switch (event) { + case BTA_AG_SCO_LISTEN_E: + /* create sco listen connection (Additional channel) */ + bta_ag_create_sco(p_scb, false); + break; + + case BTA_AG_SCO_CN_DONE_E: + /* create sco connection to peer */ + bta_ag_create_sco(p_scb, true); + p_sco->state = BTA_AG_SCO_OPENING_ST; + break; + + case BTA_AG_SCO_XFER_E: + /* save xfer scb */ + p_sco->p_xfer_scb = p_scb; + p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; + break; + + case BTA_AG_SCO_SHUTDOWN_E: + /* remove listening connection */ + bta_ag_remove_sco(p_scb, false); + + if (p_scb == p_sco->p_curr_scb) p_sco->p_curr_scb = NULL; + + /* If last SCO instance then finish shutting down */ + if (!bta_ag_other_scb_open(p_scb)) { + p_sco->state = BTA_AG_SCO_SHUTDOWN_ST; + } + break; + + case BTA_AG_SCO_CLOSE_E: + /* sco open is not started yet. just go back to listening */ + p_sco->state = BTA_AG_SCO_LISTEN_ST; + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* sco failed; create sco listen connection */ + bta_ag_create_sco(p_scb, false); + p_sco->state = BTA_AG_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_CODEC_ST: Ignoring event %d", event); + break; + } + break; #endif - case BTA_AG_SCO_OPENING_ST: - switch (event) - { - case BTA_AG_SCO_LISTEN_E: - /* second headset has now joined */ - /* create sco listen connection (Additional channel) */ - if (p_scb != p_sco->p_curr_scb) - { - bta_ag_create_sco(p_scb, false); - } - break; + case BTA_AG_SCO_OPENING_ST: + switch (event) { + case BTA_AG_SCO_LISTEN_E: + /* second headset has now joined */ + /* create sco listen connection (Additional channel) */ + if (p_scb != p_sco->p_curr_scb) { + bta_ag_create_sco(p_scb, false); + } + break; #if (BTM_WBS_INCLUDED == TRUE) - case BTA_AG_SCO_REOPEN_E: - /* start codec negotiation */ - p_sco->state = BTA_AG_SCO_CODEC_ST; - p_cn_scb = p_scb; - break; + case BTA_AG_SCO_REOPEN_E: + /* start codec negotiation */ + p_sco->state = BTA_AG_SCO_CODEC_ST; + p_cn_scb = p_scb; + break; #endif - case BTA_AG_SCO_XFER_E: - /* save xfer scb */ - p_sco->p_xfer_scb = p_scb; - p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; - break; - - case BTA_AG_SCO_CLOSE_E: - p_sco->state = BTA_AG_SCO_OPEN_CL_ST; - break; - - case BTA_AG_SCO_SHUTDOWN_E: - /* If not opening scb, just close it */ - if (p_scb != p_sco->p_curr_scb) - { - /* remove listening connection */ - bta_ag_remove_sco(p_scb, false); - } - else - p_sco->state = BTA_AG_SCO_SHUTTING_ST; - - break; - - case BTA_AG_SCO_CONN_OPEN_E: - p_sco->state = BTA_AG_SCO_OPEN_ST; - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* sco failed; create sco listen connection */ - bta_ag_create_sco(p_scb, false); - p_sco->state = BTA_AG_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_OPENING_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_AG_SCO_OPEN_CL_ST: - switch (event) - { - case BTA_AG_SCO_XFER_E: - /* save xfer scb */ - p_sco->p_xfer_scb = p_scb; - - p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; - break; - - case BTA_AG_SCO_OPEN_E: - p_sco->state = BTA_AG_SCO_OPENING_ST; - break; - - case BTA_AG_SCO_SHUTDOWN_E: - /* If not opening scb, just close it */ - if (p_scb != p_sco->p_curr_scb) - { - /* remove listening connection */ - bta_ag_remove_sco(p_scb, false); - } - else - p_sco->state = BTA_AG_SCO_SHUTTING_ST; - - break; - - case BTA_AG_SCO_CONN_OPEN_E: - /* close sco connection */ - bta_ag_remove_sco(p_scb, true); - - p_sco->state = BTA_AG_SCO_CLOSING_ST; - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* sco failed; create sco listen connection */ - - p_sco->state = BTA_AG_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_OPEN_CL_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_AG_SCO_OPEN_XFER_ST: - switch (event) - { - case BTA_AG_SCO_CLOSE_E: - /* close sco connection */ - bta_ag_remove_sco(p_scb, true); - - p_sco->state = BTA_AG_SCO_CLOSING_ST; - break; - - case BTA_AG_SCO_SHUTDOWN_E: - /* remove all connection */ - bta_ag_remove_sco(p_scb, false); - p_sco->state = BTA_AG_SCO_SHUTTING_ST; - - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* closed sco; place in listen mode and - accept the transferred connection */ - bta_ag_create_sco(p_scb, false); /* Back into listen mode */ - - /* Accept sco connection with xfer scb */ - bta_ag_sco_conn_rsp(p_sco->p_xfer_scb, &p_sco->conn_data); - p_sco->state = BTA_AG_SCO_OPENING_ST; - p_sco->p_curr_scb = p_sco->p_xfer_scb; - p_sco->cur_idx = p_sco->p_xfer_scb->sco_idx; - p_sco->p_xfer_scb = NULL; - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_OPEN_XFER_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_AG_SCO_OPEN_ST: - switch (event) - { - case BTA_AG_SCO_LISTEN_E: - /* second headset has now joined */ - /* create sco listen connection (Additional channel) */ - if (p_scb != p_sco->p_curr_scb) - { - bta_ag_create_sco(p_scb, false); - } - break; - - case BTA_AG_SCO_XFER_E: - /* close current sco connection */ - bta_ag_remove_sco(p_sco->p_curr_scb, true); - - /* save xfer scb */ - p_sco->p_xfer_scb = p_scb; - - p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; - break; - - case BTA_AG_SCO_CLOSE_E: - /* close sco connection if active */ - if (bta_ag_remove_sco(p_scb, true)) - { - p_sco->state = BTA_AG_SCO_CLOSING_ST; - } - break; - - case BTA_AG_SCO_SHUTDOWN_E: - /* remove all listening connections */ - bta_ag_remove_sco(p_scb, false); - - /* If SCO was active on this scb, close it */ - if (p_scb == p_sco->p_curr_scb) - { - p_sco->state = BTA_AG_SCO_SHUTTING_ST; - } - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* peer closed sco; create sco listen connection */ - bta_ag_create_sco(p_scb, false); - p_sco->state = BTA_AG_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_OPEN_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_AG_SCO_CLOSING_ST: - switch (event) - { - case BTA_AG_SCO_LISTEN_E: - /* create sco listen connection (Additional channel) */ - if (p_scb != p_sco->p_curr_scb) - { - bta_ag_create_sco(p_scb, false); - } - break; - - case BTA_AG_SCO_OPEN_E: - p_sco->state = BTA_AG_SCO_CLOSE_OP_ST; - break; - - case BTA_AG_SCO_XFER_E: - /* save xfer scb */ - p_sco->p_xfer_scb = p_scb; - - p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; - break; - - case BTA_AG_SCO_SHUTDOWN_E: - /* If not closing scb, just close it */ - if (p_scb != p_sco->p_curr_scb) - { - /* remove listening connection */ - bta_ag_remove_sco(p_scb, false); - } - else - p_sco->state = BTA_AG_SCO_SHUTTING_ST; - - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* peer closed sco; create sco listen connection */ - bta_ag_create_sco(p_scb, false); - - p_sco->state = BTA_AG_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_CLOSING_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_AG_SCO_CLOSE_OP_ST: - switch (event) - { - case BTA_AG_SCO_CLOSE_E: - p_sco->state = BTA_AG_SCO_CLOSING_ST; - break; - - case BTA_AG_SCO_SHUTDOWN_E: - p_sco->state = BTA_AG_SCO_SHUTTING_ST; - break; - - case BTA_AG_SCO_CONN_CLOSE_E: + case BTA_AG_SCO_XFER_E: + /* save xfer scb */ + p_sco->p_xfer_scb = p_scb; + p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; + break; + + case BTA_AG_SCO_CLOSE_E: + p_sco->state = BTA_AG_SCO_OPEN_CL_ST; + break; + + case BTA_AG_SCO_SHUTDOWN_E: + /* If not opening scb, just close it */ + if (p_scb != p_sco->p_curr_scb) { + /* remove listening connection */ + bta_ag_remove_sco(p_scb, false); + } else + p_sco->state = BTA_AG_SCO_SHUTTING_ST; + + break; + + case BTA_AG_SCO_CONN_OPEN_E: + p_sco->state = BTA_AG_SCO_OPEN_ST; + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* sco failed; create sco listen connection */ + bta_ag_create_sco(p_scb, false); + p_sco->state = BTA_AG_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_OPENING_ST: Ignoring event %d", event); + break; + } + break; + + case BTA_AG_SCO_OPEN_CL_ST: + switch (event) { + case BTA_AG_SCO_XFER_E: + /* save xfer scb */ + p_sco->p_xfer_scb = p_scb; + + p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; + break; + + case BTA_AG_SCO_OPEN_E: + p_sco->state = BTA_AG_SCO_OPENING_ST; + break; + + case BTA_AG_SCO_SHUTDOWN_E: + /* If not opening scb, just close it */ + if (p_scb != p_sco->p_curr_scb) { + /* remove listening connection */ + bta_ag_remove_sco(p_scb, false); + } else + p_sco->state = BTA_AG_SCO_SHUTTING_ST; + + break; + + case BTA_AG_SCO_CONN_OPEN_E: + /* close sco connection */ + bta_ag_remove_sco(p_scb, true); + + p_sco->state = BTA_AG_SCO_CLOSING_ST; + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* sco failed; create sco listen connection */ + + p_sco->state = BTA_AG_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_OPEN_CL_ST: Ignoring event %d", event); + break; + } + break; + + case BTA_AG_SCO_OPEN_XFER_ST: + switch (event) { + case BTA_AG_SCO_CLOSE_E: + /* close sco connection */ + bta_ag_remove_sco(p_scb, true); + + p_sco->state = BTA_AG_SCO_CLOSING_ST; + break; + + case BTA_AG_SCO_SHUTDOWN_E: + /* remove all connection */ + bta_ag_remove_sco(p_scb, false); + p_sco->state = BTA_AG_SCO_SHUTTING_ST; + + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* closed sco; place in listen mode and + accept the transferred connection */ + bta_ag_create_sco(p_scb, false); /* Back into listen mode */ + + /* Accept sco connection with xfer scb */ + bta_ag_sco_conn_rsp(p_sco->p_xfer_scb, &p_sco->conn_data); + p_sco->state = BTA_AG_SCO_OPENING_ST; + p_sco->p_curr_scb = p_sco->p_xfer_scb; + p_sco->cur_idx = p_sco->p_xfer_scb->sco_idx; + p_sco->p_xfer_scb = NULL; + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_OPEN_XFER_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_AG_SCO_OPEN_ST: + switch (event) { + case BTA_AG_SCO_LISTEN_E: + /* second headset has now joined */ + /* create sco listen connection (Additional channel) */ + if (p_scb != p_sco->p_curr_scb) { + bta_ag_create_sco(p_scb, false); + } + break; + + case BTA_AG_SCO_XFER_E: + /* close current sco connection */ + bta_ag_remove_sco(p_sco->p_curr_scb, true); + + /* save xfer scb */ + p_sco->p_xfer_scb = p_scb; + + p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; + break; + + case BTA_AG_SCO_CLOSE_E: + /* close sco connection if active */ + if (bta_ag_remove_sco(p_scb, true)) { + p_sco->state = BTA_AG_SCO_CLOSING_ST; + } + break; + + case BTA_AG_SCO_SHUTDOWN_E: + /* remove all listening connections */ + bta_ag_remove_sco(p_scb, false); + + /* If SCO was active on this scb, close it */ + if (p_scb == p_sco->p_curr_scb) { + p_sco->state = BTA_AG_SCO_SHUTTING_ST; + } + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* peer closed sco; create sco listen connection */ + bta_ag_create_sco(p_scb, false); + p_sco->state = BTA_AG_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_OPEN_ST: Ignoring event %d", event); + break; + } + break; + + case BTA_AG_SCO_CLOSING_ST: + switch (event) { + case BTA_AG_SCO_LISTEN_E: + /* create sco listen connection (Additional channel) */ + if (p_scb != p_sco->p_curr_scb) { + bta_ag_create_sco(p_scb, false); + } + break; + + case BTA_AG_SCO_OPEN_E: + p_sco->state = BTA_AG_SCO_CLOSE_OP_ST; + break; + + case BTA_AG_SCO_XFER_E: + /* save xfer scb */ + p_sco->p_xfer_scb = p_scb; + + p_sco->state = BTA_AG_SCO_CLOSE_XFER_ST; + break; + + case BTA_AG_SCO_SHUTDOWN_E: + /* If not closing scb, just close it */ + if (p_scb != p_sco->p_curr_scb) { + /* remove listening connection */ + bta_ag_remove_sco(p_scb, false); + } else + p_sco->state = BTA_AG_SCO_SHUTTING_ST; + + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* peer closed sco; create sco listen connection */ + bta_ag_create_sco(p_scb, false); + + p_sco->state = BTA_AG_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_CLOSING_ST: Ignoring event %d", event); + break; + } + break; + + case BTA_AG_SCO_CLOSE_OP_ST: + switch (event) { + case BTA_AG_SCO_CLOSE_E: + p_sco->state = BTA_AG_SCO_CLOSING_ST; + break; + + case BTA_AG_SCO_SHUTDOWN_E: + p_sco->state = BTA_AG_SCO_SHUTTING_ST; + break; + + case BTA_AG_SCO_CONN_CLOSE_E: #if (BTM_WBS_INCLUDED == TRUE) - /* start codec negotiation */ - p_sco->state = BTA_AG_SCO_CODEC_ST; - p_cn_scb = p_scb; + /* start codec negotiation */ + p_sco->state = BTA_AG_SCO_CODEC_ST; + p_cn_scb = p_scb; #else - /* open sco connection */ - bta_ag_create_sco(p_scb, true); - p_sco->state = BTA_AG_SCO_OPENING_ST; + /* open sco connection */ + bta_ag_create_sco(p_scb, true); + p_sco->state = BTA_AG_SCO_OPENING_ST; #endif - break; - - case BTA_AG_SCO_LISTEN_E: - /* create sco listen connection (Additional channel) */ - if (p_scb != p_sco->p_curr_scb) - { - bta_ag_create_sco(p_scb, false); - } - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_CLOSE_OP_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_AG_SCO_CLOSE_XFER_ST: - switch (event) - { - case BTA_AG_SCO_CONN_OPEN_E: - /* close sco connection so headset can be transferred - Probably entered this state from "opening state" */ - bta_ag_remove_sco(p_scb, true); - break; - - case BTA_AG_SCO_CLOSE_E: - /* clear xfer scb */ - p_sco->p_xfer_scb = NULL; - - p_sco->state = BTA_AG_SCO_CLOSING_ST; - break; - - case BTA_AG_SCO_SHUTDOWN_E: - /* clear xfer scb */ - p_sco->p_xfer_scb = NULL; - - p_sco->state = BTA_AG_SCO_SHUTTING_ST; - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* closed sco; place old sco in listen mode, - take current sco out of listen, and - create originating sco for current */ - bta_ag_create_sco(p_scb, false); - bta_ag_remove_sco(p_sco->p_xfer_scb, false); + break; + + case BTA_AG_SCO_LISTEN_E: + /* create sco listen connection (Additional channel) */ + if (p_scb != p_sco->p_curr_scb) { + bta_ag_create_sco(p_scb, false); + } + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_CLOSE_OP_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_AG_SCO_CLOSE_XFER_ST: + switch (event) { + case BTA_AG_SCO_CONN_OPEN_E: + /* close sco connection so headset can be transferred + Probably entered this state from "opening state" */ + bta_ag_remove_sco(p_scb, true); + break; + + case BTA_AG_SCO_CLOSE_E: + /* clear xfer scb */ + p_sco->p_xfer_scb = NULL; + + p_sco->state = BTA_AG_SCO_CLOSING_ST; + break; + + case BTA_AG_SCO_SHUTDOWN_E: + /* clear xfer scb */ + p_sco->p_xfer_scb = NULL; + + p_sco->state = BTA_AG_SCO_SHUTTING_ST; + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* closed sco; place old sco in listen mode, + take current sco out of listen, and + create originating sco for current */ + bta_ag_create_sco(p_scb, false); + bta_ag_remove_sco(p_sco->p_xfer_scb, false); #if (BTM_WBS_INCLUDED == TRUE) - /* start codec negotiation */ - p_sco->state = BTA_AG_SCO_CODEC_ST; - p_cn_scb = p_sco->p_xfer_scb; - p_sco->p_xfer_scb = NULL; + /* start codec negotiation */ + p_sco->state = BTA_AG_SCO_CODEC_ST; + p_cn_scb = p_sco->p_xfer_scb; + p_sco->p_xfer_scb = NULL; #else - /* create sco connection to peer */ - bta_ag_create_sco(p_sco->p_xfer_scb, true); - p_sco->p_xfer_scb = NULL; - p_sco->state = BTA_AG_SCO_OPENING_ST; + /* create sco connection to peer */ + bta_ag_create_sco(p_sco->p_xfer_scb, true); + p_sco->p_xfer_scb = NULL; + p_sco->state = BTA_AG_SCO_OPENING_ST; #endif - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_CLOSE_XFER_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_AG_SCO_SHUTTING_ST: - switch (event) - { - case BTA_AG_SCO_CONN_OPEN_E: - /* close sco connection; wait for conn close event */ - bta_ag_remove_sco(p_scb, true); - break; - - case BTA_AG_SCO_CONN_CLOSE_E: - /* If last SCO instance then finish shutting down */ - if (!bta_ag_other_scb_open(p_scb)) - { - p_sco->state = BTA_AG_SCO_SHUTDOWN_ST; - } - else /* Other instance is still listening */ - { - p_sco->state = BTA_AG_SCO_LISTEN_ST; - } - - /* If SCO closed for other HS which is not being disconnected, - then create listen sco connection for it as scb still open */ - if (bta_ag_scb_open(p_scb)) - { - bta_ag_create_sco(p_scb, false); - p_sco->state = BTA_AG_SCO_LISTEN_ST; - } - - if (p_scb == p_sco->p_curr_scb) - { - p_sco->p_curr_scb->sco_idx = BTM_INVALID_SCO_INDEX; - p_sco->p_curr_scb = NULL; - } - break; - - case BTA_AG_SCO_LISTEN_E: - /* create sco listen connection (Additional channel) */ - if (p_scb != p_sco->p_curr_scb) - { - bta_ag_create_sco(p_scb, false); - } - break; - - case BTA_AG_SCO_SHUTDOWN_E: - if (!bta_ag_other_scb_open(p_scb)) - { - p_sco->state = BTA_AG_SCO_SHUTDOWN_ST; - } - else /* Other instance is still listening */ - { - p_sco->state = BTA_AG_SCO_LISTEN_ST; - } - - if (p_scb == p_sco->p_curr_scb) - { - p_sco->p_curr_scb->sco_idx = BTM_INVALID_SCO_INDEX; - p_sco->p_curr_scb = NULL; - } - break; - - default: - APPL_TRACE_WARNING("BTA_AG_SCO_SHUTTING_ST: Ignoring event %d", event); - break; - } - break; + break; default: - break; - } + APPL_TRACE_WARNING("BTA_AG_SCO_CLOSE_XFER_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_AG_SCO_SHUTTING_ST: + switch (event) { + case BTA_AG_SCO_CONN_OPEN_E: + /* close sco connection; wait for conn close event */ + bta_ag_remove_sco(p_scb, true); + break; + + case BTA_AG_SCO_CONN_CLOSE_E: + /* If last SCO instance then finish shutting down */ + if (!bta_ag_other_scb_open(p_scb)) { + p_sco->state = BTA_AG_SCO_SHUTDOWN_ST; + } else /* Other instance is still listening */ + { + p_sco->state = BTA_AG_SCO_LISTEN_ST; + } + + /* If SCO closed for other HS which is not being disconnected, + then create listen sco connection for it as scb still open */ + if (bta_ag_scb_open(p_scb)) { + bta_ag_create_sco(p_scb, false); + p_sco->state = BTA_AG_SCO_LISTEN_ST; + } + + if (p_scb == p_sco->p_curr_scb) { + p_sco->p_curr_scb->sco_idx = BTM_INVALID_SCO_INDEX; + p_sco->p_curr_scb = NULL; + } + break; + + case BTA_AG_SCO_LISTEN_E: + /* create sco listen connection (Additional channel) */ + if (p_scb != p_sco->p_curr_scb) { + bta_ag_create_sco(p_scb, false); + } + break; + + case BTA_AG_SCO_SHUTDOWN_E: + if (!bta_ag_other_scb_open(p_scb)) { + p_sco->state = BTA_AG_SCO_SHUTDOWN_ST; + } else /* Other instance is still listening */ + { + p_sco->state = BTA_AG_SCO_LISTEN_ST; + } + + if (p_scb == p_sco->p_curr_scb) { + p_sco->p_curr_scb->sco_idx = BTM_INVALID_SCO_INDEX; + p_sco->p_curr_scb = NULL; + } + break; + + default: + APPL_TRACE_WARNING("BTA_AG_SCO_SHUTTING_ST: Ignoring event %d", + event); + break; + } + break; + + default: + break; + } #if (BTA_AG_SCO_DEBUG == TRUE) - if (p_sco->state != in_state) - { - APPL_TRACE_EVENT("BTA AG SCO State Change: [%s] -> [%s] after Event [%s]", - bta_ag_sco_state_str(in_state), - bta_ag_sco_state_str(p_sco->state), - bta_ag_sco_evt_str(event)); - } + if (p_sco->state != in_state) { + APPL_TRACE_EVENT("BTA AG SCO State Change: [%s] -> [%s] after Event [%s]", + bta_ag_sco_state_str(in_state), + bta_ag_sco_state_str(p_sco->state), + bta_ag_sco_evt_str(event)); + } #endif #if (BTM_WBS_INCLUDED == TRUE) - if (p_cn_scb) - { - bta_ag_codec_negotiate(p_cn_scb); - } + if (p_cn_scb) { + bta_ag_codec_negotiate(p_cn_scb); + } #endif } @@ -1291,10 +1214,9 @@ static void bta_ag_sco_event(tBTA_AG_SCB *p_scb, uint8_t event) * Returns true if sco open for this scb, false otherwise. * ******************************************************************************/ -bool bta_ag_sco_is_open(tBTA_AG_SCB *p_scb) -{ - return ((bta_ag_cb.sco.state == BTA_AG_SCO_OPEN_ST) && - (bta_ag_cb.sco.p_curr_scb == p_scb)); +bool bta_ag_sco_is_open(tBTA_AG_SCB* p_scb) { + return ((bta_ag_cb.sco.state == BTA_AG_SCO_OPEN_ST) && + (bta_ag_cb.sco.p_curr_scb == p_scb)); } /******************************************************************************* @@ -1304,13 +1226,13 @@ bool bta_ag_sco_is_open(tBTA_AG_SCB *p_scb) * Description Check if sco is in Opening state. * * - * Returns true if sco is in Opening state for this scb, false otherwise. + * Returns true if sco is in Opening state for this scb, false + *otherwise. * ******************************************************************************/ -bool bta_ag_sco_is_opening(tBTA_AG_SCB *p_scb) -{ - return ((bta_ag_cb.sco.state == BTA_AG_SCO_OPENING_ST) && - (bta_ag_cb.sco.p_curr_scb == p_scb)); +bool bta_ag_sco_is_opening(tBTA_AG_SCB* p_scb) { + return ((bta_ag_cb.sco.state == BTA_AG_SCO_OPENING_ST) && + (bta_ag_cb.sco.p_curr_scb == p_scb)); } /******************************************************************************* @@ -1323,10 +1245,8 @@ bool bta_ag_sco_is_opening(tBTA_AG_SCB *p_scb) * Returns void * ******************************************************************************/ -void bta_ag_sco_listen(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - bta_ag_sco_event(p_scb, BTA_AG_SCO_LISTEN_E); +void bta_ag_sco_listen(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + bta_ag_sco_event(p_scb, BTA_AG_SCO_LISTEN_E); } /******************************************************************************* @@ -1339,23 +1259,19 @@ void bta_ag_sco_listen(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_sco_open(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - uint8_t event; - - /* if another scb using sco, this is a transfer */ - if (bta_ag_cb.sco.p_curr_scb != NULL && bta_ag_cb.sco.p_curr_scb != p_scb) - { - event = BTA_AG_SCO_XFER_E; - } - /* else it is an open */ - else - { - event = BTA_AG_SCO_OPEN_E; - } - - bta_ag_sco_event(p_scb, event); +void bta_ag_sco_open(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + uint8_t event; + + /* if another scb using sco, this is a transfer */ + if (bta_ag_cb.sco.p_curr_scb != NULL && bta_ag_cb.sco.p_curr_scb != p_scb) { + event = BTA_AG_SCO_XFER_E; + } + /* else it is an open */ + else { + event = BTA_AG_SCO_OPEN_E; + } + + bta_ag_sco_event(p_scb, event); } /******************************************************************************* @@ -1368,20 +1284,20 @@ void bta_ag_sco_open(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_sco_close(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - /* if scb is in use */ +void bta_ag_sco_close(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { +/* if scb is in use */ #if (BTM_WBS_INCLUDED == TRUE) - /* sco_idx is not allocated in SCO_CODEC_ST, we still need to move to listening state. */ - if ((p_scb->sco_idx != BTM_INVALID_SCO_INDEX) || (bta_ag_cb.sco.state == BTA_AG_SCO_CODEC_ST)) + /* sco_idx is not allocated in SCO_CODEC_ST, we still need to move to + * listening state. */ + if ((p_scb->sco_idx != BTM_INVALID_SCO_INDEX) || + (bta_ag_cb.sco.state == BTA_AG_SCO_CODEC_ST)) #else - if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) + if (p_scb->sco_idx != BTM_INVALID_SCO_INDEX) #endif - { - APPL_TRACE_DEBUG("bta_ag_sco_close: sco_inx = %d", p_scb->sco_idx); - bta_ag_sco_event(p_scb, BTA_AG_SCO_CLOSE_E); - } + { + APPL_TRACE_DEBUG("bta_ag_sco_close: sco_inx = %d", p_scb->sco_idx); + bta_ag_sco_event(p_scb, BTA_AG_SCO_CLOSE_E); + } } #if (BTM_WBS_INCLUDED == TRUE) @@ -1396,17 +1312,14 @@ void bta_ag_sco_close(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_sco_codec_nego(tBTA_AG_SCB *p_scb, bool result) -{ - if(result == true) - { - /* Subsequent sco connection will skip codec negotiation */ - p_scb->codec_updated = false; - - bta_ag_sco_event(p_scb, BTA_AG_SCO_CN_DONE_E); - } - else /* codec negotiation failed */ - bta_ag_sco_event(p_scb, BTA_AG_SCO_CLOSE_E); +void bta_ag_sco_codec_nego(tBTA_AG_SCB* p_scb, bool result) { + if (result == true) { + /* Subsequent sco connection will skip codec negotiation */ + p_scb->codec_updated = false; + + bta_ag_sco_event(p_scb, BTA_AG_SCO_CN_DONE_E); + } else /* codec negotiation failed */ + bta_ag_sco_event(p_scb, BTA_AG_SCO_CLOSE_E); } #endif @@ -1420,10 +1333,8 @@ void bta_ag_sco_codec_nego(tBTA_AG_SCB *p_scb, bool result) * Returns void * ******************************************************************************/ -void bta_ag_sco_shutdown(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - bta_ag_sco_event(p_scb, BTA_AG_SCO_SHUTDOWN_E); +void bta_ag_sco_shutdown(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + bta_ag_sco_event(p_scb, BTA_AG_SCO_SHUTDOWN_E); } /******************************************************************************* @@ -1436,32 +1347,32 @@ void bta_ag_sco_shutdown(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_sco_conn_open(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - bta_ag_sco_event(p_scb, BTA_AG_SCO_CONN_OPEN_E); +void bta_ag_sco_conn_open(tBTA_AG_SCB* p_scb, + UNUSED_ATTR tBTA_AG_DATA* p_data) { + bta_ag_sco_event(p_scb, BTA_AG_SCO_CONN_OPEN_E); - bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + bta_sys_sco_open(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); #if (BTM_WBS_INCLUDED == TRUE) - bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, SCO_STATE_ON, - p_scb->inuse_codec); + bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, SCO_STATE_ON, + p_scb->inuse_codec); #else - bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, SCO_STATE_ON); + bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, SCO_STATE_ON); #endif #if (BTM_SCO_HCI_INCLUDED == TRUE) - /* open SCO codec if SCO is routed through transport */ - bta_dm_sco_co_open(bta_ag_scb_to_idx(p_scb), BTA_SCO_OUT_PKT_SIZE, BTA_AG_CI_SCO_DATA_EVT); + /* open SCO codec if SCO is routed through transport */ + bta_dm_sco_co_open(bta_ag_scb_to_idx(p_scb), BTA_SCO_OUT_PKT_SIZE, + BTA_AG_CI_SCO_DATA_EVT); #endif - /* call app callback */ - bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_OPEN_EVT); + /* call app callback */ + bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_OPEN_EVT); - p_scb->retry_with_sco_only = false; + p_scb->retry_with_sco_only = false; #if (BTM_WBS_INCLUDED == TRUE) - /* reset to mSBC T2 settings as the preferred */ - p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; + /* reset to mSBC T2 settings as the preferred */ + p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; #endif } @@ -1475,65 +1386,62 @@ void bta_ag_sco_conn_open(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_sco_conn_close(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - uint16_t handle = bta_ag_scb_to_idx(p_scb); +void bta_ag_sco_conn_close(tBTA_AG_SCB* p_scb, + UNUSED_ATTR tBTA_AG_DATA* p_data) { + uint16_t handle = bta_ag_scb_to_idx(p_scb); - /* clear current scb */ - bta_ag_cb.sco.p_curr_scb = NULL; - p_scb->sco_idx = BTM_INVALID_SCO_INDEX; + /* clear current scb */ + bta_ag_cb.sco.p_curr_scb = NULL; + p_scb->sco_idx = BTM_INVALID_SCO_INDEX; #if (BTM_WBS_INCLUDED == TRUE) - /* codec_fallback is set when AG is initiator and connection failed for mSBC. */ - /* OR if codec is msbc and T2 settings failed, then retry Safe T1 settings */ - if ((p_scb->codec_fallback && p_scb->svc_conn) || - bta_ag_attempt_msbc_safe_settings(p_scb)) - { - bta_ag_sco_event(p_scb, BTA_AG_SCO_REOPEN_E); - } - else if (p_scb->retry_with_sco_only && p_scb->svc_conn) - { - /* retry_with_sco_only is set when AG is initiator and connection failed for eSCO */ - bta_ag_create_sco(p_scb, true); - } + /* codec_fallback is set when AG is initiator and connection failed for mSBC. + */ + /* OR if codec is msbc and T2 settings failed, then retry Safe T1 settings */ + if ((p_scb->codec_fallback && p_scb->svc_conn) || + bta_ag_attempt_msbc_safe_settings(p_scb)) { + bta_ag_sco_event(p_scb, BTA_AG_SCO_REOPEN_E); + } else if (p_scb->retry_with_sco_only && p_scb->svc_conn) { + /* retry_with_sco_only is set when AG is initiator and connection failed for + * eSCO */ + bta_ag_create_sco(p_scb, true); + } #else - /* retry_with_sco_only, will be set only when AG is initiator - ** and AG is first trying to establish an eSCO connection */ - if (p_scb->retry_with_sco_only && p_scb->svc_conn) - { - bta_ag_create_sco(p_scb, true); - } + /* retry_with_sco_only, will be set only when AG is initiator + ** and AG is first trying to establish an eSCO connection */ + if (p_scb->retry_with_sco_only && p_scb->svc_conn) { + bta_ag_create_sco(p_scb, true); + } #endif - else - { - sco_state_t sco_state = bta_ag_cb.sco.p_xfer_scb ? SCO_STATE_OFF_TRANSFER : SCO_STATE_OFF; + else { + sco_state_t sco_state = + bta_ag_cb.sco.p_xfer_scb ? SCO_STATE_OFF_TRANSFER : SCO_STATE_OFF; #if (BTM_WBS_INCLUDED == TRUE) - /* Indicate if the closing of audio is because of transfer */ - bta_ag_co_audio_state(handle, p_scb->app_id, sco_state, p_scb->inuse_codec); + /* Indicate if the closing of audio is because of transfer */ + bta_ag_co_audio_state(handle, p_scb->app_id, sco_state, p_scb->inuse_codec); #else - /* Indicate if the closing of audio is because of transfer */ - bta_ag_co_audio_state(handle, p_scb->app_id, sco_state); + /* Indicate if the closing of audio is because of transfer */ + bta_ag_co_audio_state(handle, p_scb->app_id, sco_state); #endif - bta_ag_sco_event(p_scb, BTA_AG_SCO_CONN_CLOSE_E); + bta_ag_sco_event(p_scb, BTA_AG_SCO_CONN_CLOSE_E); - bta_sys_sco_close(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + bta_sys_sco_close(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - /* if av got suspended by this call, let it resume. */ - /* In case call stays alive regardless of sco, av should not be affected. */ - if(((p_scb->call_ind == BTA_AG_CALL_INACTIVE) && (p_scb->callsetup_ind == BTA_AG_CALLSETUP_NONE)) - || (p_scb->post_sco == BTA_AG_POST_SCO_CALL_END)) - { - bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); - } + /* if av got suspended by this call, let it resume. */ + /* In case call stays alive regardless of sco, av should not be affected. */ + if (((p_scb->call_ind == BTA_AG_CALL_INACTIVE) && + (p_scb->callsetup_ind == BTA_AG_CALLSETUP_NONE)) || + (p_scb->post_sco == BTA_AG_POST_SCO_CALL_END)) { + bta_sys_sco_unuse(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + } - /* call app callback */ - bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_CLOSE_EVT); + /* call app callback */ + bta_ag_cback_sco(p_scb, BTA_AG_AUDIO_CLOSE_EVT); #if (BTM_WBS_INCLUDED == TRUE) - p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; + p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; #endif - } - p_scb->retry_with_sco_only = false; + } + p_scb->retry_with_sco_only = false; } /******************************************************************************* @@ -1546,78 +1454,73 @@ void bta_ag_sco_conn_close(tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_sco_conn_rsp(tBTA_AG_SCB *p_scb, tBTM_ESCO_CONN_REQ_EVT_DATA *p_data) -{ - tBTM_ESCO_PARAMS resp; - uint8_t hci_status = HCI_SUCCESS; +void bta_ag_sco_conn_rsp(tBTA_AG_SCB* p_scb, + tBTM_ESCO_CONN_REQ_EVT_DATA* p_data) { + tBTM_ESCO_PARAMS resp; + uint8_t hci_status = HCI_SUCCESS; #if (BTM_SCO_HCI_INCLUDED == TRUE) - tBTA_CODEC_INFO codec_info = {BTA_SCO_CODEC_PCM}; - uint32_t pcm_sample_rate; + tBTA_CODEC_INFO codec_info = {BTA_SCO_CODEC_PCM}; + uint32_t pcm_sample_rate; #endif - if (bta_ag_cb.sco.state == BTA_AG_SCO_LISTEN_ST || - bta_ag_cb.sco.state == BTA_AG_SCO_CLOSE_XFER_ST || - bta_ag_cb.sco.state == BTA_AG_SCO_OPEN_XFER_ST) - { - /* If script overrided sco parameter by BTA_CMD_SET_ESCO_PARAM */ - if (bta_ag_cb.sco.param_updated) - { - resp = bta_ag_cb.sco.params; - } - else - { - resp.rx_bw = BTM_64KBITS_RATE; - resp.tx_bw = BTM_64KBITS_RATE; - resp.max_latency = 12; - resp.voice_contfmt = 0x60; - resp.retrans_effort = BTM_ESCO_RETRANS_QUALITY; - - if (p_data->link_type == BTM_LINK_TYPE_SCO) - { - resp.packet_types = (BTM_SCO_LINK_ONLY_MASK | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5); - } - else /* Allow controller to use all types available except 5-slot EDR */ - { - resp.packet_types = (BTM_SCO_LINK_ALL_PKT_MASK | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5); - } - } + if (bta_ag_cb.sco.state == BTA_AG_SCO_LISTEN_ST || + bta_ag_cb.sco.state == BTA_AG_SCO_CLOSE_XFER_ST || + bta_ag_cb.sco.state == BTA_AG_SCO_OPEN_XFER_ST) { + /* If script overrided sco parameter by BTA_CMD_SET_ESCO_PARAM */ + if (bta_ag_cb.sco.param_updated) { + resp = bta_ag_cb.sco.params; + } else { + resp.rx_bw = BTM_64KBITS_RATE; + resp.tx_bw = BTM_64KBITS_RATE; + resp.max_latency = 12; + resp.voice_contfmt = 0x60; + resp.retrans_effort = BTM_ESCO_RETRANS_QUALITY; + + if (p_data->link_type == BTM_LINK_TYPE_SCO) { + resp.packet_types = + (BTM_SCO_LINK_ONLY_MASK | BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5); + } else /* Allow controller to use all types available except 5-slot EDR */ + { + resp.packet_types = + (BTM_SCO_LINK_ALL_PKT_MASK | BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5); + } + } - /* tell sys to stop av if any */ - bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); + /* tell sys to stop av if any */ + bta_sys_sco_use(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr); #if (BTM_WBS_INCLUDED == FALSE) - /* Allow any platform specific pre-SCO set up to take place */ - bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, SCO_STATE_SETUP); + /* Allow any platform specific pre-SCO set up to take place */ + bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, + SCO_STATE_SETUP); #else - /* When HS initiated SCO, it cannot be WBS. */ - /* Allow any platform specific pre-SCO set up to take place */ - bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, SCO_STATE_SETUP, - BTA_AG_CODEC_CVSD); + /* When HS initiated SCO, it cannot be WBS. */ + /* Allow any platform specific pre-SCO set up to take place */ + bta_ag_co_audio_state(bta_ag_scb_to_idx(p_scb), p_scb->app_id, + SCO_STATE_SETUP, BTA_AG_CODEC_CVSD); #endif #if (BTM_SCO_HCI_INCLUDED == TRUE) - pcm_sample_rate = BTA_DM_SCO_SAMP_RATE_8K; + pcm_sample_rate = BTA_DM_SCO_SAMP_RATE_8K; - /* initialize SCO setup, no voice setting for AG, data rate <==> sample rate */ - BTM_ConfigScoPath(bta_dm_sco_co_init(pcm_sample_rate, pcm_sample_rate, &codec_info, p_scb->app_id), - bta_ag_sco_read_cback, NULL, true); + /* initialize SCO setup, no voice setting for AG, data rate <==> sample rate + */ + BTM_ConfigScoPath(bta_dm_sco_co_init(pcm_sample_rate, pcm_sample_rate, + &codec_info, p_scb->app_id), + bta_ag_sco_read_cback, NULL, true); #endif - } - else - hci_status = HCI_ERR_HOST_REJECT_DEVICE; + } else + hci_status = HCI_ERR_HOST_REJECT_DEVICE; #if (BTM_WBS_INCLUDED == TRUE) - /* If SCO open was initiated from HS, it must be CVSD */ - p_scb->inuse_codec = BTA_AG_CODEC_NONE; + /* If SCO open was initiated from HS, it must be CVSD */ + p_scb->inuse_codec = BTA_AG_CODEC_NONE; #endif - BTM_EScoConnRsp(p_data->sco_inx, hci_status, &resp); + BTM_EScoConnRsp(p_data->sco_inx, hci_status, &resp); } /******************************************************************************* @@ -1630,11 +1533,10 @@ void bta_ag_sco_conn_rsp(tBTA_AG_SCB *p_scb, tBTM_ESCO_CONN_REQ_EVT_DATA *p_data * Returns void * ******************************************************************************/ -void bta_ag_ci_sco_data(UNUSED_ATTR tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ +void bta_ag_ci_sco_data(UNUSED_ATTR tBTA_AG_SCB* p_scb, + UNUSED_ATTR tBTA_AG_DATA* p_data) { #if (BTM_SCO_HCI_INCLUDED == TRUE) - bta_ag_sco_event(p_scb, BTA_AG_SCO_CI_DATA_E); + bta_ag_sco_event(p_scb, BTA_AG_SCO_CI_DATA_E); #endif } @@ -1648,19 +1550,17 @@ void bta_ag_ci_sco_data(UNUSED_ATTR tBTA_AG_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_ag_set_esco_param(bool set_reset, tBTM_ESCO_PARAMS *param) -{ - if(set_reset == false) /* reset the parameters to default */ - { - bta_ag_cb.sco.param_updated = false; - APPL_TRACE_DEBUG("bta_ag_set_esco_param : Resetting ESCO parameters to default"); - } - else - { - bta_ag_cb.sco.param_updated = true; - bta_ag_cb.sco.params = *param; - APPL_TRACE_DEBUG("bta_ag_set_esco_param : Setting ESCO parameters"); - } +void bta_ag_set_esco_param(bool set_reset, tBTM_ESCO_PARAMS* param) { + if (set_reset == false) /* reset the parameters to default */ + { + bta_ag_cb.sco.param_updated = false; + APPL_TRACE_DEBUG( + "bta_ag_set_esco_param : Resetting ESCO parameters to default"); + } else { + bta_ag_cb.sco.param_updated = true; + bta_ag_cb.sco.params = *param; + APPL_TRACE_DEBUG("bta_ag_set_esco_param : Setting ESCO parameters"); + } } /******************************************************************************* @@ -1668,68 +1568,64 @@ void bta_ag_set_esco_param(bool set_reset, tBTM_ESCO_PARAMS *param) ******************************************************************************/ #if (BTA_AG_SCO_DEBUG == TRUE) -static char *bta_ag_sco_evt_str(uint8_t event) -{ - switch (event) - { +static char* bta_ag_sco_evt_str(uint8_t event) { + switch (event) { case BTA_AG_SCO_LISTEN_E: - return "Listen Request"; + return "Listen Request"; case BTA_AG_SCO_OPEN_E: - return "Open Request"; + return "Open Request"; case BTA_AG_SCO_XFER_E: - return "Transfer Request"; + return "Transfer Request"; #if (BTM_WBS_INCLUDED == TRUE) case BTA_AG_SCO_CN_DONE_E: - return "Codec Negotiation Done"; + return "Codec Negotiation Done"; case BTA_AG_SCO_REOPEN_E: - return "Reopen Request"; + return "Reopen Request"; #endif case BTA_AG_SCO_CLOSE_E: - return "Close Request"; + return "Close Request"; case BTA_AG_SCO_SHUTDOWN_E: - return "Shutdown Request"; + return "Shutdown Request"; case BTA_AG_SCO_CONN_OPEN_E: - return "Opened"; + return "Opened"; case BTA_AG_SCO_CONN_CLOSE_E: - return "Closed"; - case BTA_AG_SCO_CI_DATA_E : - return "Sco Data"; + return "Closed"; + case BTA_AG_SCO_CI_DATA_E: + return "Sco Data"; default: - return "Unknown SCO Event"; - } + return "Unknown SCO Event"; + } } -static char *bta_ag_sco_state_str(uint8_t state) -{ - switch (state) - { +static char* bta_ag_sco_state_str(uint8_t state) { + switch (state) { case BTA_AG_SCO_SHUTDOWN_ST: - return "Shutdown"; + return "Shutdown"; case BTA_AG_SCO_LISTEN_ST: - return "Listening"; + return "Listening"; #if (BTM_WBS_INCLUDED == TRUE) case BTA_AG_SCO_CODEC_ST: - return "Codec Negotiation"; + return "Codec Negotiation"; #endif case BTA_AG_SCO_OPENING_ST: - return "Opening"; + return "Opening"; case BTA_AG_SCO_OPEN_CL_ST: - return "Open while closing"; + return "Open while closing"; case BTA_AG_SCO_OPEN_XFER_ST: - return "Opening while Transferring"; + return "Opening while Transferring"; case BTA_AG_SCO_OPEN_ST: - return "Open"; + return "Open"; case BTA_AG_SCO_CLOSING_ST: - return "Closing"; + return "Closing"; case BTA_AG_SCO_CLOSE_OP_ST: - return "Close while Opening"; + return "Close while Opening"; case BTA_AG_SCO_CLOSE_XFER_ST: - return "Close while Transferring"; + return "Close while Transferring"; case BTA_AG_SCO_SHUTTING_ST: - return "Shutting Down"; + return "Shutting Down"; default: - return "Unknown SCO State"; - } + return "Unknown SCO State"; + } } #endif diff --git a/system/bta/ag/bta_ag_sdp.cc b/system/bta/ag/bta_ag_sdp.cc index e292b520a9e..957bf8b0e4a 100644 --- a/system/bta/ag/bta_ag_sdp.cc +++ b/system/bta/ag/bta_ag_sdp.cc @@ -25,25 +25,25 @@ #include -#include "bta_api.h" -#include "bta_sys.h" +#include "bt_common.h" #include "bta_ag_api.h" #include "bta_ag_int.h" -#include "sdp_api.h" +#include "bta_api.h" +#include "bta_sys.h" #include "btm_api.h" -#include "bt_common.h" #include "osi/include/osi.h" +#include "sdp_api.h" #include "utl.h" /* Number of protocol elements in protocol element list. */ -#define BTA_AG_NUM_PROTO_ELEMS 2 +#define BTA_AG_NUM_PROTO_ELEMS 2 /* Number of elements in service class id list. */ -#define BTA_AG_NUM_SVC_ELEMS 2 +#define BTA_AG_NUM_SVC_ELEMS 2 /* size of database for service discovery */ #ifndef BTA_AG_DISC_BUF_SIZE -#define BTA_AG_DISC_BUF_SIZE BT_DEFAULT_BUFFER_SIZE +#define BTA_AG_DISC_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif /* declare sdp callback functions */ @@ -52,13 +52,9 @@ void bta_ag_sdp_cback_2(uint16_t status); void bta_ag_sdp_cback_3(uint16_t status); /* SDP callback function table */ -typedef tSDP_DISC_CMPL_CB *tBTA_AG_SDP_CBACK; -const tBTA_AG_SDP_CBACK bta_ag_sdp_cback_tbl[] = -{ - bta_ag_sdp_cback_1, - bta_ag_sdp_cback_2, - bta_ag_sdp_cback_3 -}; +typedef tSDP_DISC_CMPL_CB* tBTA_AG_SDP_CBACK; +const tBTA_AG_SDP_CBACK bta_ag_sdp_cback_tbl[] = { + bta_ag_sdp_cback_1, bta_ag_sdp_cback_2, bta_ag_sdp_cback_3}; /******************************************************************************* * @@ -70,32 +66,27 @@ const tBTA_AG_SDP_CBACK bta_ag_sdp_cback_tbl[] = * Returns void * ******************************************************************************/ -static void bta_ag_sdp_cback(uint16_t status, uint8_t idx) -{ - uint16_t event; - tBTA_AG_SCB *p_scb; - - APPL_TRACE_DEBUG("%s status:0x%x", __func__, status); - - if ((p_scb = bta_ag_scb_by_idx(idx)) != NULL) - { - /* set event according to int/acp */ - if (p_scb->role == BTA_AG_ACP) - { - event = BTA_AG_DISC_ACP_RES_EVT; - } - else - { - event = BTA_AG_DISC_INT_RES_EVT; - } - - tBTA_AG_DISC_RESULT *p_buf = - (tBTA_AG_DISC_RESULT *)osi_malloc(sizeof(tBTA_AG_DISC_RESULT)); - p_buf->hdr.event = event; - p_buf->hdr.layer_specific = idx; - p_buf->status = status; - bta_sys_sendmsg(p_buf); +static void bta_ag_sdp_cback(uint16_t status, uint8_t idx) { + uint16_t event; + tBTA_AG_SCB* p_scb; + + APPL_TRACE_DEBUG("%s status:0x%x", __func__, status); + + if ((p_scb = bta_ag_scb_by_idx(idx)) != NULL) { + /* set event according to int/acp */ + if (p_scb->role == BTA_AG_ACP) { + event = BTA_AG_DISC_ACP_RES_EVT; + } else { + event = BTA_AG_DISC_INT_RES_EVT; } + + tBTA_AG_DISC_RESULT* p_buf = + (tBTA_AG_DISC_RESULT*)osi_malloc(sizeof(tBTA_AG_DISC_RESULT)); + p_buf->hdr.event = event; + p_buf->hdr.layer_specific = idx; + p_buf->status = status; + bta_sys_sendmsg(p_buf); + } } /******************************************************************************* @@ -110,9 +101,9 @@ static void bta_ag_sdp_cback(uint16_t status, uint8_t idx) * Returns void * ******************************************************************************/ -void bta_ag_sdp_cback_1(uint16_t status) {bta_ag_sdp_cback(status, 1);} -void bta_ag_sdp_cback_2(uint16_t status) {bta_ag_sdp_cback(status, 2);} -void bta_ag_sdp_cback_3(uint16_t status) {bta_ag_sdp_cback(status, 3);} +void bta_ag_sdp_cback_1(uint16_t status) { bta_ag_sdp_cback(status, 1); } +void bta_ag_sdp_cback_2(uint16_t status) { bta_ag_sdp_cback(status, 2); } +void bta_ag_sdp_cback_3(uint16_t status) { bta_ag_sdp_cback(status, 3); } /****************************************************************************** * @@ -127,80 +118,78 @@ void bta_ag_sdp_cback_3(uint16_t status) {bta_ag_sdp_cback(status, 3);} * false if function execution failed. * *****************************************************************************/ -bool bta_ag_add_record(uint16_t service_uuid, char *p_service_name, uint8_t scn, - tBTA_AG_FEAT features, uint32_t sdp_handle) -{ - tSDP_PROTOCOL_ELEM proto_elem_list[BTA_AG_NUM_PROTO_ELEMS]; - uint16_t svc_class_id_list[BTA_AG_NUM_SVC_ELEMS]; - uint16_t browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; - uint16_t version; - uint16_t profile_uuid; - uint8_t network; - bool result = true; - bool codec_supported = false; - uint8_t buf[2]; - - APPL_TRACE_DEBUG("%s uuid: %x", __func__, service_uuid); - - memset( proto_elem_list, 0 , BTA_AG_NUM_PROTO_ELEMS*sizeof(tSDP_PROTOCOL_ELEM)); - - /* add the protocol element sequence */ - proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; - proto_elem_list[0].num_params = 0; - proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_RFCOMM; - proto_elem_list[1].num_params = 1; - proto_elem_list[1].params[0] = scn; - result &= SDP_AddProtocolList(sdp_handle, BTA_AG_NUM_PROTO_ELEMS, proto_elem_list); - - /* add service class id list */ - svc_class_id_list[0] = service_uuid; - svc_class_id_list[1] = UUID_SERVCLASS_GENERIC_AUDIO; - result &= SDP_AddServiceClassIdList(sdp_handle, BTA_AG_NUM_SVC_ELEMS, svc_class_id_list); - - /* add profile descriptor list */ - if (service_uuid == UUID_SERVCLASS_AG_HANDSFREE) - { - profile_uuid = UUID_SERVCLASS_HF_HANDSFREE; - version = BTA_HFP_VERSION; - } - else - { - profile_uuid = UUID_SERVCLASS_HEADSET; - version = HSP_VERSION_1_2; - } - result &= SDP_AddProfileDescriptorList(sdp_handle, profile_uuid, version); - - /* add service name */ - if (p_service_name != NULL && p_service_name[0] != 0) - { - result &= SDP_AddAttribute(sdp_handle, ATTR_ID_SERVICE_NAME, TEXT_STR_DESC_TYPE, - (uint32_t)(strlen(p_service_name)+1), (uint8_t *) p_service_name); - } - - /* add features and network */ - if (service_uuid == UUID_SERVCLASS_AG_HANDSFREE) - { - network = (features & BTA_AG_FEAT_REJECT) ? 1 : 0; - result &= SDP_AddAttribute(sdp_handle, ATTR_ID_DATA_STORES_OR_NETWORK, - UINT_DESC_TYPE, 1, &network); - - if (features & BTA_AG_FEAT_CODEC) - codec_supported = true; - - features &= BTA_AG_SDP_FEAT_SPEC; - - /* Codec bit position is different in SDP and in BRSF */ - if (codec_supported) - features |= 0x0020; - - UINT16_TO_BE_FIELD(buf, features); - result &= SDP_AddAttribute(sdp_handle, ATTR_ID_SUPPORTED_FEATURES, UINT_DESC_TYPE, 2, buf); - } - - /* add browse group list */ - result &= SDP_AddUuidSequence(sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, browse_list); - - return result; +bool bta_ag_add_record(uint16_t service_uuid, char* p_service_name, uint8_t scn, + tBTA_AG_FEAT features, uint32_t sdp_handle) { + tSDP_PROTOCOL_ELEM proto_elem_list[BTA_AG_NUM_PROTO_ELEMS]; + uint16_t svc_class_id_list[BTA_AG_NUM_SVC_ELEMS]; + uint16_t browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; + uint16_t version; + uint16_t profile_uuid; + uint8_t network; + bool result = true; + bool codec_supported = false; + uint8_t buf[2]; + + APPL_TRACE_DEBUG("%s uuid: %x", __func__, service_uuid); + + memset(proto_elem_list, 0, + BTA_AG_NUM_PROTO_ELEMS * sizeof(tSDP_PROTOCOL_ELEM)); + + /* add the protocol element sequence */ + proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; + proto_elem_list[0].num_params = 0; + proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_RFCOMM; + proto_elem_list[1].num_params = 1; + proto_elem_list[1].params[0] = scn; + result &= + SDP_AddProtocolList(sdp_handle, BTA_AG_NUM_PROTO_ELEMS, proto_elem_list); + + /* add service class id list */ + svc_class_id_list[0] = service_uuid; + svc_class_id_list[1] = UUID_SERVCLASS_GENERIC_AUDIO; + result &= SDP_AddServiceClassIdList(sdp_handle, BTA_AG_NUM_SVC_ELEMS, + svc_class_id_list); + + /* add profile descriptor list */ + if (service_uuid == UUID_SERVCLASS_AG_HANDSFREE) { + profile_uuid = UUID_SERVCLASS_HF_HANDSFREE; + version = BTA_HFP_VERSION; + } else { + profile_uuid = UUID_SERVCLASS_HEADSET; + version = HSP_VERSION_1_2; + } + result &= SDP_AddProfileDescriptorList(sdp_handle, profile_uuid, version); + + /* add service name */ + if (p_service_name != NULL && p_service_name[0] != 0) { + result &= SDP_AddAttribute( + sdp_handle, ATTR_ID_SERVICE_NAME, TEXT_STR_DESC_TYPE, + (uint32_t)(strlen(p_service_name) + 1), (uint8_t*)p_service_name); + } + + /* add features and network */ + if (service_uuid == UUID_SERVCLASS_AG_HANDSFREE) { + network = (features & BTA_AG_FEAT_REJECT) ? 1 : 0; + result &= SDP_AddAttribute(sdp_handle, ATTR_ID_DATA_STORES_OR_NETWORK, + UINT_DESC_TYPE, 1, &network); + + if (features & BTA_AG_FEAT_CODEC) codec_supported = true; + + features &= BTA_AG_SDP_FEAT_SPEC; + + /* Codec bit position is different in SDP and in BRSF */ + if (codec_supported) features |= 0x0020; + + UINT16_TO_BE_FIELD(buf, features); + result &= SDP_AddAttribute(sdp_handle, ATTR_ID_SUPPORTED_FEATURES, + UINT_DESC_TYPE, 2, buf); + } + + /* add browse group list */ + result &= SDP_AddUuidSequence(sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, + browse_list); + + return result; } /******************************************************************************* @@ -213,32 +202,28 @@ bool bta_ag_add_record(uint16_t service_uuid, char *p_service_name, uint8_t scn, * Returns void * ******************************************************************************/ -void bta_ag_create_records(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) -{ - int i; - tBTA_SERVICE_MASK services; - - services = p_scb->reg_services >> BTA_HSP_SERVICE_ID; - for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++, services >>= 1) - { - /* if service is set in mask */ - if (services & 1) - { - /* add sdp record if not already registered */ - if (bta_ag_cb.profile[i].sdp_handle == 0) - { - bta_ag_cb.profile[i].sdp_handle = SDP_CreateRecord(); - bta_ag_cb.profile[i].scn = BTM_AllocateSCN(); - bta_ag_add_record(bta_ag_uuid[i], p_data->api_register.p_name[i], - bta_ag_cb.profile[i].scn, p_data->api_register.features, - bta_ag_cb.profile[i].sdp_handle); - bta_sys_add_uuid(bta_ag_uuid[i]); - } - } +void bta_ag_create_records(tBTA_AG_SCB* p_scb, tBTA_AG_DATA* p_data) { + int i; + tBTA_SERVICE_MASK services; + + services = p_scb->reg_services >> BTA_HSP_SERVICE_ID; + for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++, services >>= 1) { + /* if service is set in mask */ + if (services & 1) { + /* add sdp record if not already registered */ + if (bta_ag_cb.profile[i].sdp_handle == 0) { + bta_ag_cb.profile[i].sdp_handle = SDP_CreateRecord(); + bta_ag_cb.profile[i].scn = BTM_AllocateSCN(); + bta_ag_add_record(bta_ag_uuid[i], p_data->api_register.p_name[i], + bta_ag_cb.profile[i].scn, + p_data->api_register.features, + bta_ag_cb.profile[i].sdp_handle); + bta_sys_add_uuid(bta_ag_uuid[i]); + } } + } - p_scb->hsp_version = HSP_VERSION_1_2; - + p_scb->hsp_version = HSP_VERSION_1_2; } /******************************************************************************* @@ -251,46 +236,40 @@ void bta_ag_create_records(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_ag_del_records(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - tBTA_AG_SCB *p = &bta_ag_cb.scb[0]; - tBTA_SERVICE_MASK services; - tBTA_SERVICE_MASK others = 0; - int i; - - /* get services of all other registered servers */ - for (i = 0; i < BTA_AG_NUM_IDX; i++, p++) - { - if (p_scb == p) - { - continue; - } - - if (p->in_use && p->dealloc == false) - { - others |= p->reg_services; - } +void bta_ag_del_records(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + tBTA_AG_SCB* p = &bta_ag_cb.scb[0]; + tBTA_SERVICE_MASK services; + tBTA_SERVICE_MASK others = 0; + int i; + + /* get services of all other registered servers */ + for (i = 0; i < BTA_AG_NUM_IDX; i++, p++) { + if (p_scb == p) { + continue; } - others >>= BTA_HSP_SERVICE_ID; - services = p_scb->reg_services >> BTA_HSP_SERVICE_ID; - for (i = 0; i < BTA_AG_NUM_IDX && services != 0; i++, services >>= 1, others >>= 1) - { - /* if service registered for this scb and not registered for any other scb */ - if (((services & 1) == 1) && ((others & 1) == 0)) - { - APPL_TRACE_DEBUG("bta_ag_del_records %d", i); - if (bta_ag_cb.profile[i].sdp_handle != 0) - { - SDP_DeleteRecord(bta_ag_cb.profile[i].sdp_handle); - bta_ag_cb.profile[i].sdp_handle = 0; - } - BTM_FreeSCN(bta_ag_cb.profile[i].scn); - BTM_SecClrService(bta_ag_sec_id[i]); - bta_sys_remove_uuid(bta_ag_uuid[i]); - } + if (p->in_use && p->dealloc == false) { + others |= p->reg_services; } + } + + others >>= BTA_HSP_SERVICE_ID; + services = p_scb->reg_services >> BTA_HSP_SERVICE_ID; + for (i = 0; i < BTA_AG_NUM_IDX && services != 0; + i++, services >>= 1, others >>= 1) { + /* if service registered for this scb and not registered for any other scb + */ + if (((services & 1) == 1) && ((others & 1) == 0)) { + APPL_TRACE_DEBUG("bta_ag_del_records %d", i); + if (bta_ag_cb.profile[i].sdp_handle != 0) { + SDP_DeleteRecord(bta_ag_cb.profile[i].sdp_handle); + bta_ag_cb.profile[i].sdp_handle = 0; + } + BTM_FreeSCN(bta_ag_cb.profile[i].scn); + BTM_SecClrService(bta_ag_sec_id[i]); + bta_sys_remove_uuid(bta_ag_uuid[i]); + } + } } /******************************************************************************* @@ -304,94 +283,77 @@ void bta_ag_del_records(tBTA_AG_SCB *p_scb, * Returns true if results found, false otherwise. * ******************************************************************************/ -bool bta_ag_sdp_find_attr(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK service) -{ - tSDP_DISC_REC *p_rec = NULL; - tSDP_DISC_ATTR *p_attr; - tSDP_PROTOCOL_ELEM pe; - uint16_t uuid; - bool result = false; - - if (service & BTA_HFP_SERVICE_MASK) - { - uuid = UUID_SERVCLASS_HF_HANDSFREE; - p_scb->peer_version = HFP_VERSION_1_1; /* Default version */ - } - else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) - { - uuid = UUID_SERVCLASS_HEADSET_HS; - p_scb->peer_version = 0x0100; /* Default version */ +bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { + tSDP_DISC_REC* p_rec = NULL; + tSDP_DISC_ATTR* p_attr; + tSDP_PROTOCOL_ELEM pe; + uint16_t uuid; + bool result = false; + + if (service & BTA_HFP_SERVICE_MASK) { + uuid = UUID_SERVCLASS_HF_HANDSFREE; + p_scb->peer_version = HFP_VERSION_1_1; /* Default version */ + } else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { + uuid = UUID_SERVCLASS_HEADSET_HS; + p_scb->peer_version = 0x0100; /* Default version */ + } else { + return result; + } + + /* loop through all records we found */ + while (true) { + /* get next record; if none found, we're done */ + if ((p_rec = SDP_FindServiceInDb(p_scb->p_disc_db, uuid, p_rec)) == NULL) { + if (uuid == UUID_SERVCLASS_HEADSET_HS) { + /* Search again in case the peer device is HSP v1.0 */ + uuid = UUID_SERVCLASS_HEADSET; + if ((p_rec = SDP_FindServiceInDb(p_scb->p_disc_db, uuid, p_rec)) == + NULL) { + break; + } + } else + break; } - else - { - return result; + + /* get scn from proto desc list if initiator */ + if (p_scb->role == BTA_AG_INT) { + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + p_scb->peer_scn = (uint8_t)pe.params[0]; + } else { + continue; + } } - /* loop through all records we found */ - while (true) + /* get profile version (if failure, version parameter is not updated) */ + SDP_FindProfileVersionInRec(p_rec, uuid, &p_scb->peer_version); + + /* get features if HFP */ + if (service & BTA_HFP_SERVICE_MASK) { + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_SUPPORTED_FEATURES)) != NULL) { + /* Found attribute. Get value. */ + /* There might be race condition between SDP and BRSF. */ + /* Do not update if we already received BRSF. */ + if (p_scb->peer_features == 0) + p_scb->peer_features = p_attr->attr_value.v.u16; + } + } else /* HSP */ { - /* get next record; if none found, we're done */ - if ((p_rec = SDP_FindServiceInDb(p_scb->p_disc_db, uuid, p_rec)) == NULL) - { - if (uuid == UUID_SERVCLASS_HEADSET_HS) - { - /* Search again in case the peer device is HSP v1.0 */ - uuid = UUID_SERVCLASS_HEADSET; - if ((p_rec = SDP_FindServiceInDb(p_scb->p_disc_db, uuid, p_rec)) == NULL) - { - break; - } - } - else - break; - } - - /* get scn from proto desc list if initiator */ - if (p_scb->role == BTA_AG_INT) - { - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - p_scb->peer_scn = (uint8_t) pe.params[0]; - } - else - { - continue; - } - } - - /* get profile version (if failure, version parameter is not updated) */ - SDP_FindProfileVersionInRec(p_rec, uuid, &p_scb->peer_version); - - /* get features if HFP */ - if (service & BTA_HFP_SERVICE_MASK) - { - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES)) != NULL) - { - /* Found attribute. Get value. */ - /* There might be race condition between SDP and BRSF. */ - /* Do not update if we already received BRSF. */ - if (p_scb->peer_features == 0) - p_scb->peer_features = p_attr->attr_value.v.u16; - } - } - else /* HSP */ - { - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_REMOTE_AUDIO_VOLUME_CONTROL)) != NULL) - { - /* Remote volume control of HSP */ - if (p_attr->attr_value.v.u8) - p_scb->peer_features |= BTA_AG_PEER_FEAT_VOL; - else - p_scb->peer_features &= ~BTA_AG_PEER_FEAT_VOL; - } - - } - - /* found what we needed */ - result = true; - break; + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_REMOTE_AUDIO_VOLUME_CONTROL)) != NULL) { + /* Remote volume control of HSP */ + if (p_attr->attr_value.v.u8) + p_scb->peer_features |= BTA_AG_PEER_FEAT_VOL; + else + p_scb->peer_features &= ~BTA_AG_PEER_FEAT_VOL; + } } - return result; + + /* found what we needed */ + result = true; + break; + } + return result; } /******************************************************************************* @@ -404,78 +366,70 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK service) * Returns void * ******************************************************************************/ -void bta_ag_do_disc(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK service) -{ - tSDP_UUID uuid_list[2]; - uint16_t num_uuid = 1; - uint16_t attr_list[4]; - uint8_t num_attr; - bool db_inited = false; - - /* HFP initiator; get proto list and features */ - if (service & BTA_HFP_SERVICE_MASK && p_scb->role == BTA_AG_INT) - { - attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; - attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; - attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; - attr_list[3] = ATTR_ID_SUPPORTED_FEATURES; - num_attr = 4; - uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HF_HANDSFREE; - } - /* HFP acceptor; get features */ - else if (service & BTA_HFP_SERVICE_MASK && p_scb->role == BTA_AG_ACP) - { - attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; - attr_list[1] = ATTR_ID_BT_PROFILE_DESC_LIST; - attr_list[2] = ATTR_ID_SUPPORTED_FEATURES; - num_attr = 3; - uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HF_HANDSFREE; - } - /* HSP initiator; get proto list */ - else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) - { - attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; - attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; - attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; - attr_list[3] = ATTR_ID_REMOTE_AUDIO_VOLUME_CONTROL; - num_attr = 4; - - uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HEADSET; /* Legacy from HSP v1.0 */ - if (p_scb->hsp_version >= HSP_VERSION_1_2) - { - uuid_list[1].uu.uuid16 = UUID_SERVCLASS_HEADSET_HS; - num_uuid = 2; - } +void bta_ag_do_disc(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { + tSDP_UUID uuid_list[2]; + uint16_t num_uuid = 1; + uint16_t attr_list[4]; + uint8_t num_attr; + bool db_inited = false; + + /* HFP initiator; get proto list and features */ + if (service & BTA_HFP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { + attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; + attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; + attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; + attr_list[3] = ATTR_ID_SUPPORTED_FEATURES; + num_attr = 4; + uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HF_HANDSFREE; + } + /* HFP acceptor; get features */ + else if (service & BTA_HFP_SERVICE_MASK && p_scb->role == BTA_AG_ACP) { + attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; + attr_list[1] = ATTR_ID_BT_PROFILE_DESC_LIST; + attr_list[2] = ATTR_ID_SUPPORTED_FEATURES; + num_attr = 3; + uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HF_HANDSFREE; + } + /* HSP initiator; get proto list */ + else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { + attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; + attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; + attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; + attr_list[3] = ATTR_ID_REMOTE_AUDIO_VOLUME_CONTROL; + num_attr = 4; + + uuid_list[0].uu.uuid16 = UUID_SERVCLASS_HEADSET; /* Legacy from HSP v1.0 */ + if (p_scb->hsp_version >= HSP_VERSION_1_2) { + uuid_list[1].uu.uuid16 = UUID_SERVCLASS_HEADSET_HS; + num_uuid = 2; } - /* HSP acceptor; no discovery */ - else - { - return; - } - - /* allocate buffer for sdp database */ - p_scb->p_disc_db = (tSDP_DISCOVERY_DB *)osi_malloc(BTA_AG_DISC_BUF_SIZE); - /* set up service discovery database; attr happens to be attr_list len */ - uuid_list[0].len = LEN_UUID_16; - uuid_list[1].len = LEN_UUID_16; - db_inited = SDP_InitDiscoveryDb(p_scb->p_disc_db, BTA_AG_DISC_BUF_SIZE, - num_uuid, uuid_list, num_attr, attr_list); - - if(db_inited) - { - /*Service discovery not initiated */ - db_inited = SDP_ServiceSearchAttributeRequest(p_scb->peer_addr, p_scb->p_disc_db, - bta_ag_sdp_cback_tbl[bta_ag_scb_to_idx(p_scb) - 1]); - } - - if(!db_inited) - { - /*free discover db */ - bta_ag_free_db(p_scb, NULL); - /* sent failed event */ - bta_ag_sm_execute(p_scb, BTA_AG_DISC_FAIL_EVT, NULL); - } - + } + /* HSP acceptor; no discovery */ + else { + return; + } + + /* allocate buffer for sdp database */ + p_scb->p_disc_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_AG_DISC_BUF_SIZE); + /* set up service discovery database; attr happens to be attr_list len */ + uuid_list[0].len = LEN_UUID_16; + uuid_list[1].len = LEN_UUID_16; + db_inited = SDP_InitDiscoveryDb(p_scb->p_disc_db, BTA_AG_DISC_BUF_SIZE, + num_uuid, uuid_list, num_attr, attr_list); + + if (db_inited) { + /*Service discovery not initiated */ + db_inited = SDP_ServiceSearchAttributeRequest( + p_scb->peer_addr, p_scb->p_disc_db, + bta_ag_sdp_cback_tbl[bta_ag_scb_to_idx(p_scb) - 1]); + } + + if (!db_inited) { + /*free discover db */ + bta_ag_free_db(p_scb, NULL); + /* sent failed event */ + bta_ag_sm_execute(p_scb, BTA_AG_DISC_FAIL_EVT, NULL); + } } /******************************************************************************* @@ -488,8 +442,6 @@ void bta_ag_do_disc(tBTA_AG_SCB *p_scb, tBTA_SERVICE_MASK service) * Returns void * ******************************************************************************/ -void bta_ag_free_db(tBTA_AG_SCB *p_scb, - UNUSED_ATTR tBTA_AG_DATA *p_data) -{ - osi_free_and_reset((void **)&p_scb->p_disc_db); +void bta_ag_free_db(tBTA_AG_SCB* p_scb, UNUSED_ATTR tBTA_AG_DATA* p_data) { + osi_free_and_reset((void**)&p_scb->p_disc_db); } diff --git a/system/bta/ar/bta_ar.cc b/system/bta/ar/bta_ar.cc index 488ec39819b..c3ef92afa74 100644 --- a/system/bta/ar/bta_ar.cc +++ b/system/bta/ar/bta_ar.cc @@ -27,9 +27,8 @@ #include "bta_ar_api.h" #include "bta_ar_int.h" - /* AV control block */ -tBTA_AR_CB bta_ar_cb; +tBTA_AR_CB bta_ar_cb; /******************************************************************************* * @@ -40,19 +39,15 @@ tBTA_AR_CB bta_ar_cb; * Returns void * ******************************************************************************/ -static uint8_t bta_ar_id(tBTA_SYS_ID sys_id) -{ - uint8_t mask = 0; - if (sys_id == BTA_ID_AV) - { - mask = BTA_AR_AV_MASK; - } - else if (sys_id == BTA_ID_AVK) - { - mask = BTA_AR_AVK_MASK; - } +static uint8_t bta_ar_id(tBTA_SYS_ID sys_id) { + uint8_t mask = 0; + if (sys_id == BTA_ID_AV) { + mask = BTA_AR_AV_MASK; + } else if (sys_id == BTA_ID_AVK) { + mask = BTA_AR_AVK_MASK; + } - return mask; + return mask; } /******************************************************************************* @@ -64,10 +59,9 @@ static uint8_t bta_ar_id(tBTA_SYS_ID sys_id) * Returns void * ******************************************************************************/ -void bta_ar_init(void) -{ - /* initialize control block */ - memset(&bta_ar_cb, 0, sizeof(tBTA_AR_CB)); +void bta_ar_init(void) { + /* initialize control block */ + memset(&bta_ar_cb, 0, sizeof(tBTA_AR_CB)); } /******************************************************************************* @@ -79,13 +73,13 @@ void bta_ar_init(void) * Returns void * ******************************************************************************/ -static void bta_ar_avdt_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data) -{ - /* route the AVDT registration callback to av or avk */ - if (bta_ar_cb.p_av_conn_cback) - (*bta_ar_cb.p_av_conn_cback)(handle, bd_addr, event, p_data); - if (bta_ar_cb.p_avk_conn_cback) - (*bta_ar_cb.p_avk_conn_cback)(handle, bd_addr, event, p_data); +static void bta_ar_avdt_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data) { + /* route the AVDT registration callback to av or avk */ + if (bta_ar_cb.p_av_conn_cback) + (*bta_ar_cb.p_av_conn_cback)(handle, bd_addr, event, p_data); + if (bta_ar_cb.p_avk_conn_cback) + (*bta_ar_cb.p_avk_conn_cback)(handle, bd_addr, event, p_data); } /******************************************************************************* @@ -97,35 +91,30 @@ static void bta_ar_avdt_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tA * Returns void * ******************************************************************************/ -void bta_ar_reg_avdt(tAVDT_REG *p_reg, tAVDT_CTRL_CBACK *p_cback, tBTA_SYS_ID sys_id) -{ - uint8_t mask = 0; +void bta_ar_reg_avdt(tAVDT_REG* p_reg, tAVDT_CTRL_CBACK* p_cback, + tBTA_SYS_ID sys_id) { + uint8_t mask = 0; - if (sys_id == BTA_ID_AV) - { - bta_ar_cb.p_av_conn_cback = p_cback; - mask = BTA_AR_AV_MASK; - } - else if (sys_id == BTA_ID_AVK) - { - bta_ar_cb.p_avk_conn_cback = p_cback; - mask = BTA_AR_AVK_MASK; - } + if (sys_id == BTA_ID_AV) { + bta_ar_cb.p_av_conn_cback = p_cback; + mask = BTA_AR_AV_MASK; + } else if (sys_id == BTA_ID_AVK) { + bta_ar_cb.p_avk_conn_cback = p_cback; + mask = BTA_AR_AVK_MASK; + } #if (BTA_AR_DEBUG == TRUE) - else - { - APPL_TRACE_ERROR("bta_ar_reg_avdt: the registration is from wrong sys_id:%d", sys_id); - } + else { + APPL_TRACE_ERROR( + "bta_ar_reg_avdt: the registration is from wrong sys_id:%d", sys_id); + } #endif - if (mask) - { - if (bta_ar_cb.avdt_registered == 0) - { - AVDT_Register(p_reg, bta_ar_avdt_cback); - } - bta_ar_cb.avdt_registered |= mask; + if (mask) { + if (bta_ar_cb.avdt_registered == 0) { + AVDT_Register(p_reg, bta_ar_avdt_cback); } + bta_ar_cb.avdt_registered |= mask; + } } /******************************************************************************* @@ -137,31 +126,27 @@ void bta_ar_reg_avdt(tAVDT_REG *p_reg, tAVDT_CTRL_CBACK *p_cback, tBTA_SYS_ID sy * Returns void * ******************************************************************************/ -void bta_ar_dereg_avdt(tBTA_SYS_ID sys_id) -{ - uint8_t mask = 0; +void bta_ar_dereg_avdt(tBTA_SYS_ID sys_id) { + uint8_t mask = 0; - if (sys_id == BTA_ID_AV) - { - bta_ar_cb.p_av_conn_cback = NULL; - mask = BTA_AR_AV_MASK; - } - else if (sys_id == BTA_ID_AVK) - { - bta_ar_cb.p_avk_conn_cback = NULL; - mask = BTA_AR_AVK_MASK; - } - bta_ar_cb.avdt_registered &= ~mask; + if (sys_id == BTA_ID_AV) { + bta_ar_cb.p_av_conn_cback = NULL; + mask = BTA_AR_AV_MASK; + } else if (sys_id == BTA_ID_AVK) { + bta_ar_cb.p_avk_conn_cback = NULL; + mask = BTA_AR_AVK_MASK; + } + bta_ar_cb.avdt_registered &= ~mask; - if (bta_ar_cb.avdt_registered == 0) - AVDT_Deregister(); + if (bta_ar_cb.avdt_registered == 0) AVDT_Deregister(); } /******************************************************************************* * * Function bta_ar_avdt_conn * - * Description This function is called to let ar know that some AVDTP profile + * Description This function is called to let ar know that some AVDTP + *profile * is connected for this sys_id. * If the other sys modules started a timer for PENDING_EVT, * the timer can be stopped now. @@ -169,25 +154,19 @@ void bta_ar_dereg_avdt(tBTA_SYS_ID sys_id) * Returns void * ******************************************************************************/ -void bta_ar_avdt_conn(tBTA_SYS_ID sys_id, BD_ADDR bd_addr) -{ - uint8_t event = BTA_AR_AVDT_CONN_EVT; - tAVDT_CTRL data; +void bta_ar_avdt_conn(tBTA_SYS_ID sys_id, BD_ADDR bd_addr) { + uint8_t event = BTA_AR_AVDT_CONN_EVT; + tAVDT_CTRL data; - if (sys_id == BTA_ID_AV) - { - if (bta_ar_cb.p_avk_conn_cback) - { - (*bta_ar_cb.p_avk_conn_cback)(0, bd_addr, event, &data); - } + if (sys_id == BTA_ID_AV) { + if (bta_ar_cb.p_avk_conn_cback) { + (*bta_ar_cb.p_avk_conn_cback)(0, bd_addr, event, &data); } - else if (sys_id == BTA_ID_AVK) - { - if (bta_ar_cb.p_av_conn_cback) - { - (*bta_ar_cb.p_av_conn_cback)(0, bd_addr, event, &data); - } + } else if (sys_id == BTA_ID_AVK) { + if (bta_ar_cb.p_av_conn_cback) { + (*bta_ar_cb.p_av_conn_cback)(0, bd_addr, event, &data); } + } } /******************************************************************************* @@ -199,18 +178,16 @@ void bta_ar_avdt_conn(tBTA_SYS_ID sys_id, BD_ADDR bd_addr) * Returns void * ******************************************************************************/ -void bta_ar_reg_avct(uint16_t mtu, uint16_t mtu_br, uint8_t sec_mask, tBTA_SYS_ID sys_id) -{ - uint8_t mask = bta_ar_id (sys_id); +void bta_ar_reg_avct(uint16_t mtu, uint16_t mtu_br, uint8_t sec_mask, + tBTA_SYS_ID sys_id) { + uint8_t mask = bta_ar_id(sys_id); - if (mask) - { - if (bta_ar_cb.avct_registered == 0) - { - AVCT_Register(mtu, mtu_br, sec_mask); - } - bta_ar_cb.avct_registered |= mask; + if (mask) { + if (bta_ar_cb.avct_registered == 0) { + AVCT_Register(mtu, mtu_br, sec_mask); } + bta_ar_cb.avct_registered |= mask; + } } /******************************************************************************* @@ -222,14 +199,12 @@ void bta_ar_reg_avct(uint16_t mtu, uint16_t mtu_br, uint8_t sec_mask, tBTA_SYS_I * Returns void * ******************************************************************************/ -void bta_ar_dereg_avct(tBTA_SYS_ID sys_id) -{ - uint8_t mask = bta_ar_id (sys_id); +void bta_ar_dereg_avct(tBTA_SYS_ID sys_id) { + uint8_t mask = bta_ar_id(sys_id); - bta_ar_cb.avct_registered &= ~mask; + bta_ar_cb.avct_registered &= ~mask; - if (bta_ar_cb.avct_registered == 0) - AVCT_Deregister(); + if (bta_ar_cb.avct_registered == 0) AVCT_Deregister(); } /****************************************************************************** @@ -241,104 +216,87 @@ void bta_ar_dereg_avct(tBTA_SYS_ID sys_id) * Returns void * *****************************************************************************/ -void bta_ar_reg_avrc(uint16_t service_uuid, const char *service_name, - const char *provider_name, uint16_t categories, +void bta_ar_reg_avrc(uint16_t service_uuid, const char* service_name, + const char* provider_name, uint16_t categories, tBTA_SYS_ID sys_id, bool browse_supported, - uint16_t profile_version) -{ - uint8_t mask = bta_ar_id (sys_id); - uint8_t temp[8], *p; + uint16_t profile_version) { + uint8_t mask = bta_ar_id(sys_id); + uint8_t temp[8], *p; - if (!mask || !categories) - return; + if (!mask || !categories) return; - if (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_TARGET) - { - if (bta_ar_cb.sdp_tg_handle == 0) - { - bta_ar_cb.tg_registered = mask; - bta_ar_cb.sdp_tg_handle = SDP_CreateRecord(); - AVRC_AddRecord(service_uuid, service_name, provider_name, categories, - bta_ar_cb.sdp_tg_handle, browse_supported, profile_version); - bta_sys_add_uuid(service_uuid); - } - /* only one TG is allowed (first-come, first-served). - * If sdp_tg_handle is non-0, ignore this request */ + if (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_TARGET) { + if (bta_ar_cb.sdp_tg_handle == 0) { + bta_ar_cb.tg_registered = mask; + bta_ar_cb.sdp_tg_handle = SDP_CreateRecord(); + AVRC_AddRecord(service_uuid, service_name, provider_name, categories, + bta_ar_cb.sdp_tg_handle, browse_supported, + profile_version); + bta_sys_add_uuid(service_uuid); } - else if ((service_uuid == UUID_SERVCLASS_AV_REMOTE_CONTROL)|| - (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_CONTROL)) - { - bta_ar_cb.ct_categories [mask - 1] = categories; - categories = bta_ar_cb.ct_categories[0]|bta_ar_cb.ct_categories[1]; - if (bta_ar_cb.sdp_ct_handle == 0) - { - bta_ar_cb.sdp_ct_handle = SDP_CreateRecord(); - AVRC_AddRecord(service_uuid, service_name, provider_name, categories, - bta_ar_cb.sdp_ct_handle, browse_supported, profile_version); - bta_sys_add_uuid(service_uuid); - } - else - { - /* multiple CTs are allowed. - * Change supported categories on the second one */ - p = temp; - UINT16_TO_BE_STREAM(p, categories); - SDP_AddAttribute(bta_ar_cb.sdp_ct_handle, ATTR_ID_SUPPORTED_FEATURES, UINT_DESC_TYPE, - (uint32_t)2, (uint8_t*)temp); - } + /* only one TG is allowed (first-come, first-served). + * If sdp_tg_handle is non-0, ignore this request */ + } else if ((service_uuid == UUID_SERVCLASS_AV_REMOTE_CONTROL) || + (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_CONTROL)) { + bta_ar_cb.ct_categories[mask - 1] = categories; + categories = bta_ar_cb.ct_categories[0] | bta_ar_cb.ct_categories[1]; + if (bta_ar_cb.sdp_ct_handle == 0) { + bta_ar_cb.sdp_ct_handle = SDP_CreateRecord(); + AVRC_AddRecord(service_uuid, service_name, provider_name, categories, + bta_ar_cb.sdp_ct_handle, browse_supported, + profile_version); + bta_sys_add_uuid(service_uuid); + } else { + /* multiple CTs are allowed. + * Change supported categories on the second one */ + p = temp; + UINT16_TO_BE_STREAM(p, categories); + SDP_AddAttribute(bta_ar_cb.sdp_ct_handle, ATTR_ID_SUPPORTED_FEATURES, + UINT_DESC_TYPE, (uint32_t)2, (uint8_t*)temp); } + } } /****************************************************************************** * * Function bta_ar_dereg_avrc * - * Description This function is called to de-register/delete an SDP record for AVRCP. + * Description This function is called to de-register/delete an SDP record + *for AVRCP. * * Returns void * *****************************************************************************/ -void bta_ar_dereg_avrc(uint16_t service_uuid, tBTA_SYS_ID sys_id) -{ - uint8_t mask = bta_ar_id (sys_id); - uint16_t categories = 0; - uint8_t temp[8], *p; +void bta_ar_dereg_avrc(uint16_t service_uuid, tBTA_SYS_ID sys_id) { + uint8_t mask = bta_ar_id(sys_id); + uint16_t categories = 0; + uint8_t temp[8], *p; - if (!mask) - return; + if (!mask) return; - if (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_TARGET) - { - if (bta_ar_cb.sdp_tg_handle && mask == bta_ar_cb.tg_registered) - { - bta_ar_cb.tg_registered = 0; - SDP_DeleteRecord(bta_ar_cb.sdp_tg_handle); - bta_ar_cb.sdp_tg_handle = 0; - bta_sys_remove_uuid(service_uuid); - } + if (service_uuid == UUID_SERVCLASS_AV_REM_CTRL_TARGET) { + if (bta_ar_cb.sdp_tg_handle && mask == bta_ar_cb.tg_registered) { + bta_ar_cb.tg_registered = 0; + SDP_DeleteRecord(bta_ar_cb.sdp_tg_handle); + bta_ar_cb.sdp_tg_handle = 0; + bta_sys_remove_uuid(service_uuid); } - else if (service_uuid == UUID_SERVCLASS_AV_REMOTE_CONTROL) - { - if (bta_ar_cb.sdp_ct_handle) - { - bta_ar_cb.ct_categories [mask - 1] = 0; - categories = bta_ar_cb.ct_categories[0]|bta_ar_cb.ct_categories[1]; - if (!categories) - { - /* no CT is still registered - cleaup */ - SDP_DeleteRecord(bta_ar_cb.sdp_ct_handle); - bta_ar_cb.sdp_ct_handle = 0; - bta_sys_remove_uuid(service_uuid); - } - else - { - /* change supported categories to the remaning one */ - p = temp; - UINT16_TO_BE_STREAM(p, categories); - SDP_AddAttribute(bta_ar_cb.sdp_ct_handle, ATTR_ID_SUPPORTED_FEATURES, UINT_DESC_TYPE, - (uint32_t)2, (uint8_t*)temp); - } - } + } else if (service_uuid == UUID_SERVCLASS_AV_REMOTE_CONTROL) { + if (bta_ar_cb.sdp_ct_handle) { + bta_ar_cb.ct_categories[mask - 1] = 0; + categories = bta_ar_cb.ct_categories[0] | bta_ar_cb.ct_categories[1]; + if (!categories) { + /* no CT is still registered - cleaup */ + SDP_DeleteRecord(bta_ar_cb.sdp_ct_handle); + bta_ar_cb.sdp_ct_handle = 0; + bta_sys_remove_uuid(service_uuid); + } else { + /* change supported categories to the remaning one */ + p = temp; + UINT16_TO_BE_STREAM(p, categories); + SDP_AddAttribute(bta_ar_cb.sdp_ct_handle, ATTR_ID_SUPPORTED_FEATURES, + UINT_DESC_TYPE, (uint32_t)2, (uint8_t*)temp); + } } - + } } diff --git a/system/bta/ar/bta_ar_int.h b/system/bta/ar/bta_ar_int.h index 1cab26fd13b..679cd03cf12 100644 --- a/system/bta/ar/bta_ar_int.h +++ b/system/bta/ar/bta_ar_int.h @@ -32,24 +32,24 @@ extern "C" { #endif #ifndef BTA_AR_DEBUG -#define BTA_AR_DEBUG TRUE +#define BTA_AR_DEBUG TRUE #endif -#define BTA_AR_AV_MASK 0x01 -#define BTA_AR_AVK_MASK 0x02 +#define BTA_AR_AV_MASK 0x01 +#define BTA_AR_AVK_MASK 0x02 /* data associated with BTA_AR */ -typedef struct -{ - tAVDT_CTRL_CBACK *p_av_conn_cback; /* av connection callback function */ - tAVDT_CTRL_CBACK *p_avk_conn_cback; /* avk connection callback function */ - uint8_t avdt_registered; - uint8_t avct_registered; - uint32_t sdp_tg_handle; - uint32_t sdp_ct_handle; - uint16_t ct_categories[2]; - uint8_t tg_registered; - tBTA_AV_HNDL hndl; /* Handle associated with the stream that rejected the connection. */ +typedef struct { + tAVDT_CTRL_CBACK* p_av_conn_cback; /* av connection callback function */ + tAVDT_CTRL_CBACK* p_avk_conn_cback; /* avk connection callback function */ + uint8_t avdt_registered; + uint8_t avct_registered; + uint32_t sdp_tg_handle; + uint32_t sdp_ct_handle; + uint16_t ct_categories[2]; + uint8_t tg_registered; + tBTA_AV_HNDL hndl; /* Handle associated with the stream that rejected the + connection. */ } tBTA_AR_CB; /***************************************************************************** diff --git a/system/bta/av/bta_av_aact.cc b/system/bta/av/bta_av_aact.cc index 38aea6e6b6a..1a2a239f768 100644 --- a/system/bta/av/bta_av_aact.cc +++ b/system/bta/av/bta_av_aact.cc @@ -30,10 +30,10 @@ #include #include "avdt_api.h" -#include "bta_av_int.h" #include "bt_utils.h" -#include "l2cdefs.h" +#include "bta_av_int.h" #include "l2c_api.h" +#include "l2cdefs.h" #include "osi/include/osi.h" #include "osi/include/properties.h" #include "utl.h" @@ -49,54 +49,47 @@ /* the delay time in milliseconds to start service discovery on AVRCP */ #ifndef BTA_AV_RC_DISC_TIME_VAL -#define BTA_AV_RC_DISC_TIME_VAL 3500 +#define BTA_AV_RC_DISC_TIME_VAL 3500 #endif -/* the timer in milliseconds to guard against link busy and AVDT_CloseReq failed to be sent */ +/* the timer in milliseconds to guard against link busy and AVDT_CloseReq failed + * to be sent */ #ifndef BTA_AV_CLOSE_REQ_TIME_VAL -#define BTA_AV_CLOSE_REQ_TIME_VAL 4000 +#define BTA_AV_CLOSE_REQ_TIME_VAL 4000 #endif -/* number to retry on reconfigure failure - some headsets requirs this number to be more than 1 */ +/* number to retry on reconfigure failure - some headsets requirs this number to + * be more than 1 */ #ifndef BTA_AV_RECONFIG_RETRY -#define BTA_AV_RECONFIG_RETRY 6 +#define BTA_AV_RECONFIG_RETRY 6 #endif /* ACL quota we are letting FW use for A2DP Offload Tx. */ -#define BTA_AV_A2DP_OFFLOAD_XMIT_QUOTA 4 +#define BTA_AV_A2DP_OFFLOAD_XMIT_QUOTA 4 -static void bta_av_st_rc_timer(tBTA_AV_SCB *p_scb, UNUSED_ATTR tBTA_AV_DATA *p_data); +static void bta_av_st_rc_timer(tBTA_AV_SCB* p_scb, + UNUSED_ATTR tBTA_AV_DATA* p_data); /* state machine states */ -enum -{ - BTA_AV_INIT_SST, - BTA_AV_INCOMING_SST, - BTA_AV_OPENING_SST, - BTA_AV_OPEN_SST, - BTA_AV_RCFG_SST, - BTA_AV_CLOSING_SST +enum { + BTA_AV_INIT_SST, + BTA_AV_INCOMING_SST, + BTA_AV_OPENING_SST, + BTA_AV_OPEN_SST, + BTA_AV_RCFG_SST, + BTA_AV_CLOSING_SST }; - /* the call out functions for audio stream */ -const tBTA_AV_CO_FUNCTS bta_av_a2dp_cos = -{ - bta_av_co_audio_init, - bta_av_co_audio_disc_res, - bta_av_co_audio_getconfig, - bta_av_co_audio_setconfig, - bta_av_co_audio_open, - bta_av_co_audio_close, - bta_av_co_audio_start, - bta_av_co_audio_stop, - bta_av_co_audio_src_data_path, - bta_av_co_audio_delay -}; +const tBTA_AV_CO_FUNCTS bta_av_a2dp_cos = { + bta_av_co_audio_init, bta_av_co_audio_disc_res, + bta_av_co_audio_getconfig, bta_av_co_audio_setconfig, + bta_av_co_audio_open, bta_av_co_audio_close, + bta_av_co_audio_start, bta_av_co_audio_stop, + bta_av_co_audio_src_data_path, bta_av_co_audio_delay}; /* ssm action functions for audio stream */ -const tBTA_AV_SACT bta_av_a2dp_action[] = -{ +const tBTA_AV_SACT bta_av_a2dp_action[] = { bta_av_do_disc_a2dp, /* BTA_AV_DO_DISC */ bta_av_cleanup, /* BTA_AV_CLEANUP */ bta_av_free_sdb, /* BTA_AV_FREE_SDB */ @@ -147,94 +140,102 @@ const tBTA_AV_SACT bta_av_a2dp_action[] = bta_av_open_at_inc, /* BTA_AV_OPEN_AT_INC */ bta_av_offload_req, /* BTA_AV_OFFLOAD_REQ */ bta_av_offload_rsp, /* BTA_AV_OFFLOAD_RSP */ - NULL -}; + NULL}; /* these tables translate AVDT events to SSM events */ static const uint16_t bta_av_stream_evt_ok[] = { - BTA_AV_STR_DISC_OK_EVT, /* AVDT_DISCOVER_CFM_EVT */ - BTA_AV_STR_GETCAP_OK_EVT, /* AVDT_GETCAP_CFM_EVT */ - BTA_AV_STR_OPEN_OK_EVT, /* AVDT_OPEN_CFM_EVT */ - BTA_AV_STR_OPEN_OK_EVT, /* AVDT_OPEN_IND_EVT */ - BTA_AV_STR_CONFIG_IND_EVT, /* AVDT_CONFIG_IND_EVT */ - BTA_AV_STR_START_OK_EVT, /* AVDT_START_CFM_EVT */ - BTA_AV_STR_START_OK_EVT, /* AVDT_START_IND_EVT */ - BTA_AV_STR_SUSPEND_CFM_EVT, /* AVDT_SUSPEND_CFM_EVT */ - BTA_AV_STR_SUSPEND_CFM_EVT, /* AVDT_SUSPEND_IND_EVT */ - BTA_AV_STR_CLOSE_EVT, /* AVDT_CLOSE_CFM_EVT */ - BTA_AV_STR_CLOSE_EVT, /* AVDT_CLOSE_IND_EVT */ - BTA_AV_STR_RECONFIG_CFM_EVT, /* AVDT_RECONFIG_CFM_EVT */ - 0, /* AVDT_RECONFIG_IND_EVT */ - BTA_AV_STR_SECURITY_CFM_EVT, /* AVDT_SECURITY_CFM_EVT */ - BTA_AV_STR_SECURITY_IND_EVT, /* AVDT_SECURITY_IND_EVT */ - BTA_AV_STR_WRITE_CFM_EVT, /* AVDT_WRITE_CFM_EVT */ - BTA_AV_AVDT_CONNECT_EVT, /* AVDT_CONNECT_IND_EVT */ - BTA_AV_AVDT_DISCONNECT_EVT, /* AVDT_DISCONNECT_IND_EVT */ + BTA_AV_STR_DISC_OK_EVT, /* AVDT_DISCOVER_CFM_EVT */ + BTA_AV_STR_GETCAP_OK_EVT, /* AVDT_GETCAP_CFM_EVT */ + BTA_AV_STR_OPEN_OK_EVT, /* AVDT_OPEN_CFM_EVT */ + BTA_AV_STR_OPEN_OK_EVT, /* AVDT_OPEN_IND_EVT */ + BTA_AV_STR_CONFIG_IND_EVT, /* AVDT_CONFIG_IND_EVT */ + BTA_AV_STR_START_OK_EVT, /* AVDT_START_CFM_EVT */ + BTA_AV_STR_START_OK_EVT, /* AVDT_START_IND_EVT */ + BTA_AV_STR_SUSPEND_CFM_EVT, /* AVDT_SUSPEND_CFM_EVT */ + BTA_AV_STR_SUSPEND_CFM_EVT, /* AVDT_SUSPEND_IND_EVT */ + BTA_AV_STR_CLOSE_EVT, /* AVDT_CLOSE_CFM_EVT */ + BTA_AV_STR_CLOSE_EVT, /* AVDT_CLOSE_IND_EVT */ + BTA_AV_STR_RECONFIG_CFM_EVT, /* AVDT_RECONFIG_CFM_EVT */ + 0, /* AVDT_RECONFIG_IND_EVT */ + BTA_AV_STR_SECURITY_CFM_EVT, /* AVDT_SECURITY_CFM_EVT */ + BTA_AV_STR_SECURITY_IND_EVT, /* AVDT_SECURITY_IND_EVT */ + BTA_AV_STR_WRITE_CFM_EVT, /* AVDT_WRITE_CFM_EVT */ + BTA_AV_AVDT_CONNECT_EVT, /* AVDT_CONNECT_IND_EVT */ + BTA_AV_AVDT_DISCONNECT_EVT, /* AVDT_DISCONNECT_IND_EVT */ #if (AVDT_REPORTING == TRUE) - BTA_AV_AVDT_RPT_CONN_EVT, /* AVDT_REPORT_CONN_EVT */ - BTA_AV_AVDT_RPT_CONN_EVT, /* AVDT_REPORT_DISCONN_EVT */ + BTA_AV_AVDT_RPT_CONN_EVT, /* AVDT_REPORT_CONN_EVT */ + BTA_AV_AVDT_RPT_CONN_EVT, /* AVDT_REPORT_DISCONN_EVT */ #endif - BTA_AV_AVDT_DELAY_RPT_EVT, /* AVDT_DELAY_REPORT_EVT */ - 0 /* AVDT_DELAY_REPORT_CFM_EVT */ + BTA_AV_AVDT_DELAY_RPT_EVT, /* AVDT_DELAY_REPORT_EVT */ + 0 /* AVDT_DELAY_REPORT_CFM_EVT */ }; static const uint16_t bta_av_stream_evt_fail[] = { - BTA_AV_STR_DISC_FAIL_EVT, /* AVDT_DISCOVER_CFM_EVT */ - BTA_AV_STR_GETCAP_FAIL_EVT, /* AVDT_GETCAP_CFM_EVT */ - BTA_AV_STR_OPEN_FAIL_EVT, /* AVDT_OPEN_CFM_EVT */ - BTA_AV_STR_OPEN_OK_EVT, /* AVDT_OPEN_IND_EVT */ - BTA_AV_STR_CONFIG_IND_EVT, /* AVDT_CONFIG_IND_EVT */ - BTA_AV_STR_START_FAIL_EVT, /* AVDT_START_CFM_EVT */ - BTA_AV_STR_START_OK_EVT, /* AVDT_START_IND_EVT */ - BTA_AV_STR_SUSPEND_CFM_EVT, /* AVDT_SUSPEND_CFM_EVT */ - BTA_AV_STR_SUSPEND_CFM_EVT, /* AVDT_SUSPEND_IND_EVT */ - BTA_AV_STR_CLOSE_EVT, /* AVDT_CLOSE_CFM_EVT */ - BTA_AV_STR_CLOSE_EVT, /* AVDT_CLOSE_IND_EVT */ - BTA_AV_STR_RECONFIG_CFM_EVT, /* AVDT_RECONFIG_CFM_EVT */ - 0, /* AVDT_RECONFIG_IND_EVT */ - BTA_AV_STR_SECURITY_CFM_EVT, /* AVDT_SECURITY_CFM_EVT */ - BTA_AV_STR_SECURITY_IND_EVT, /* AVDT_SECURITY_IND_EVT */ - BTA_AV_STR_WRITE_CFM_EVT, /* AVDT_WRITE_CFM_EVT */ - BTA_AV_AVDT_CONNECT_EVT, /* AVDT_CONNECT_IND_EVT */ - BTA_AV_AVDT_DISCONNECT_EVT, /* AVDT_DISCONNECT_IND_EVT */ + BTA_AV_STR_DISC_FAIL_EVT, /* AVDT_DISCOVER_CFM_EVT */ + BTA_AV_STR_GETCAP_FAIL_EVT, /* AVDT_GETCAP_CFM_EVT */ + BTA_AV_STR_OPEN_FAIL_EVT, /* AVDT_OPEN_CFM_EVT */ + BTA_AV_STR_OPEN_OK_EVT, /* AVDT_OPEN_IND_EVT */ + BTA_AV_STR_CONFIG_IND_EVT, /* AVDT_CONFIG_IND_EVT */ + BTA_AV_STR_START_FAIL_EVT, /* AVDT_START_CFM_EVT */ + BTA_AV_STR_START_OK_EVT, /* AVDT_START_IND_EVT */ + BTA_AV_STR_SUSPEND_CFM_EVT, /* AVDT_SUSPEND_CFM_EVT */ + BTA_AV_STR_SUSPEND_CFM_EVT, /* AVDT_SUSPEND_IND_EVT */ + BTA_AV_STR_CLOSE_EVT, /* AVDT_CLOSE_CFM_EVT */ + BTA_AV_STR_CLOSE_EVT, /* AVDT_CLOSE_IND_EVT */ + BTA_AV_STR_RECONFIG_CFM_EVT, /* AVDT_RECONFIG_CFM_EVT */ + 0, /* AVDT_RECONFIG_IND_EVT */ + BTA_AV_STR_SECURITY_CFM_EVT, /* AVDT_SECURITY_CFM_EVT */ + BTA_AV_STR_SECURITY_IND_EVT, /* AVDT_SECURITY_IND_EVT */ + BTA_AV_STR_WRITE_CFM_EVT, /* AVDT_WRITE_CFM_EVT */ + BTA_AV_AVDT_CONNECT_EVT, /* AVDT_CONNECT_IND_EVT */ + BTA_AV_AVDT_DISCONNECT_EVT, /* AVDT_DISCONNECT_IND_EVT */ #if (AVDT_REPORTING == TRUE) - BTA_AV_AVDT_RPT_CONN_EVT, /* AVDT_REPORT_CONN_EVT */ - BTA_AV_AVDT_RPT_CONN_EVT, /* AVDT_REPORT_DISCONN_EVT */ + BTA_AV_AVDT_RPT_CONN_EVT, /* AVDT_REPORT_CONN_EVT */ + BTA_AV_AVDT_RPT_CONN_EVT, /* AVDT_REPORT_DISCONN_EVT */ #endif - BTA_AV_AVDT_DELAY_RPT_EVT, /* AVDT_DELAY_REPORT_EVT */ - 0 /* AVDT_DELAY_REPORT_CFM_EVT */ + BTA_AV_AVDT_DELAY_RPT_EVT, /* AVDT_DELAY_REPORT_EVT */ + 0 /* AVDT_DELAY_REPORT_CFM_EVT */ }; -static void bta_av_stream0_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data); -static void bta_av_stream1_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data); +static void bta_av_stream0_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data); +static void bta_av_stream1_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data); #if BTA_AV_NUM_STRS > 2 -static void bta_av_stream2_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data); +static void bta_av_stream2_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data); #endif #if BTA_AV_NUM_STRS > 3 -static void bta_av_stream3_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data); +static void bta_av_stream3_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data); #endif #if BTA_AV_NUM_STRS > 4 -static void bta_av_stream4_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data); +static void bta_av_stream4_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data); #endif #if BTA_AV_NUM_STRS > 5 -static void bta_av_stream5_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data); +static void bta_av_stream5_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data); #endif -/* the array of callback functions to receive events from AVDT control channel */ -tAVDT_CTRL_CBACK * const bta_av_dt_cback[] = -{ - bta_av_stream0_cback - ,bta_av_stream1_cback +/* the array of callback functions to receive events from AVDT control channel + */ +tAVDT_CTRL_CBACK* const bta_av_dt_cback[] = {bta_av_stream0_cback, + bta_av_stream1_cback #if BTA_AV_NUM_STRS > 2 - ,bta_av_stream2_cback + , + bta_av_stream2_cback #endif #if BTA_AV_NUM_STRS > 3 - ,bta_av_stream3_cback + , + bta_av_stream3_cback #endif #if BTA_AV_NUM_STRS > 4 - ,bta_av_stream4_cback + , + bta_av_stream4_cback #endif #if BTA_AV_NUM_STRS > 5 - ,bta_av_stream5_cback + , + bta_av_stream5_cback #endif }; /*********************************************** @@ -246,17 +247,16 @@ tAVDT_CTRL_CBACK * const bta_av_dt_cback[] = * * Returns void **********************************************/ -static uint8_t bta_av_get_scb_handle(tBTA_AV_SCB *p_scb, uint8_t local_sep) -{ - for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { - if ((p_scb->seps[i].tsep == local_sep) && - A2DP_CodecTypeEquals(p_scb->seps[i].codec_info, - p_scb->cfg.codec_info)) { - return (p_scb->seps[i].av_handle); - } +static uint8_t bta_av_get_scb_handle(tBTA_AV_SCB* p_scb, uint8_t local_sep) { + for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { + if ((p_scb->seps[i].tsep == local_sep) && + A2DP_CodecTypeEquals(p_scb->seps[i].codec_info, + p_scb->cfg.codec_info)) { + return (p_scb->seps[i].av_handle); } - APPL_TRACE_DEBUG("%s: local sep_type %d not found", __func__, local_sep) - return 0; /* return invalid handle */ + } + APPL_TRACE_DEBUG("%s: local sep_type %d not found", __func__, local_sep) + return 0; /* return invalid handle */ } /*********************************************** @@ -268,14 +268,13 @@ static uint8_t bta_av_get_scb_handle(tBTA_AV_SCB *p_scb, uint8_t local_sep) * * Returns void **********************************************/ -static uint8_t bta_av_get_scb_sep_type(tBTA_AV_SCB *p_scb, uint8_t tavdt_handle) -{ - for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { - if (p_scb->seps[i].av_handle == tavdt_handle) - return (p_scb->seps[i].tsep); - } - APPL_TRACE_DEBUG("%s: handle %d not found", __func__, tavdt_handle) - return AVDT_TSEP_INVALID; +static uint8_t bta_av_get_scb_sep_type(tBTA_AV_SCB* p_scb, + uint8_t tavdt_handle) { + for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { + if (p_scb->seps[i].av_handle == tavdt_handle) return (p_scb->seps[i].tsep); + } + APPL_TRACE_DEBUG("%s: handle %d not found", __func__, tavdt_handle) + return AVDT_TSEP_INVALID; } /******************************************************************************* @@ -288,21 +287,19 @@ static uint8_t bta_av_get_scb_sep_type(tBTA_AV_SCB *p_scb, uint8_t tavdt_handle) * Returns void * ******************************************************************************/ -static void bta_av_save_addr(tBTA_AV_SCB *p_scb, const BD_ADDR b) -{ - APPL_TRACE_DEBUG("%s: r:%d, s:%d", __func__, - p_scb->recfg_sup, p_scb->suspend_sup); - if(bdcmp(p_scb->peer_addr, b) != 0) - { - APPL_TRACE_ERROR("%s: reset flags", __func__); - /* a new addr, reset the supported flags */ - p_scb->recfg_sup = true; - p_scb->suspend_sup = true; - } +static void bta_av_save_addr(tBTA_AV_SCB* p_scb, const BD_ADDR b) { + APPL_TRACE_DEBUG("%s: r:%d, s:%d", __func__, p_scb->recfg_sup, + p_scb->suspend_sup); + if (bdcmp(p_scb->peer_addr, b) != 0) { + APPL_TRACE_ERROR("%s: reset flags", __func__); + /* a new addr, reset the supported flags */ + p_scb->recfg_sup = true; + p_scb->suspend_sup = true; + } - /* do this copy anyway, just in case the first addr matches - * the control block one by accident */ - bdcpy(p_scb->peer_addr, b); + /* do this copy anyway, just in case the first addr matches + * the control block one by accident */ + bdcpy(p_scb->peer_addr, b); } /******************************************************************************* @@ -315,16 +312,15 @@ static void bta_av_save_addr(tBTA_AV_SCB *p_scb, const BD_ADDR b) * Returns void * ******************************************************************************/ -static void notify_start_failed(tBTA_AV_SCB *p_scb) -{ - tBTA_AV_START start; - /* if start failed, clear role */ - p_scb->role &= ~BTA_AV_ROLE_START_INT; - start.chnl = p_scb->chnl; - start.status = BTA_AV_FAIL; - start.initiator = true; - start.hndl = p_scb->hndl; - (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV *) &start); +static void notify_start_failed(tBTA_AV_SCB* p_scb) { + tBTA_AV_START start; + /* if start failed, clear role */ + p_scb->role &= ~BTA_AV_ROLE_START_INT; + start.chnl = p_scb->chnl; + start.status = BTA_AV_FAIL; + start.initiator = true; + start.hndl = p_scb->hndl; + (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV*)&start); } /******************************************************************************* @@ -338,24 +334,21 @@ static void notify_start_failed(tBTA_AV_SCB *p_scb) * Returns void * ******************************************************************************/ -static void bta_av_st_rc_timer(tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s: rc_handle:%d, use_rc: %d", __func__, - p_scb->rc_handle, p_scb->use_rc); - /* for outgoing RC connection as INT/CT */ - if ((p_scb->rc_handle == BTA_AV_RC_HANDLE_NONE) && - /* (bta_av_cb.features & BTA_AV_FEAT_RCCT) && */ - (p_scb->use_rc == true || (p_scb->role & BTA_AV_ROLE_AD_ACP))) - { - if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) == 0) { - bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RC_DISC_TIME_VAL, - BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); - } else { - p_scb->wait |= BTA_AV_WAIT_CHECK_RC; - } +static void bta_av_st_rc_timer(tBTA_AV_SCB* p_scb, + UNUSED_ATTR tBTA_AV_DATA* p_data) { + APPL_TRACE_DEBUG("%s: rc_handle:%d, use_rc: %d", __func__, p_scb->rc_handle, + p_scb->use_rc); + /* for outgoing RC connection as INT/CT */ + if ((p_scb->rc_handle == BTA_AV_RC_HANDLE_NONE) && + /* (bta_av_cb.features & BTA_AV_FEAT_RCCT) && */ + (p_scb->use_rc == true || (p_scb->role & BTA_AV_ROLE_AD_ACP))) { + if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) == 0) { + bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RC_DISC_TIME_VAL, + BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); + } else { + p_scb->wait |= BTA_AV_WAIT_CHECK_RC; } - + } } /******************************************************************************* @@ -368,55 +361,46 @@ static void bta_av_st_rc_timer(tBTA_AV_SCB *p_scb, * Returns true if we sent request to AVDT, false otherwise. * ******************************************************************************/ -static bool bta_av_next_getcap(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - int i; - tAVDT_GETCAP_REQ *p_req; - bool sent_cmd = false; - uint16_t uuid_int = p_scb->uuid_int; - uint8_t sep_requested = 0; - - if(uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) - sep_requested = AVDT_TSEP_SNK; - else if(uuid_int == UUID_SERVCLASS_AUDIO_SINK) - sep_requested = AVDT_TSEP_SRC; - - for (i = p_scb->sep_info_idx; i < p_scb->num_seps; i++) - { - /* steam not in use, is a sink, and is the right media type (audio/video) */ - if ((p_scb->sep_info[i].in_use == false) && - (p_scb->sep_info[i].tsep == sep_requested) && - (p_scb->sep_info[i].media_type == p_scb->media_type)) - { - p_scb->sep_info_idx = i; - - /* we got a stream; get its capabilities */ - if (p_scb->p_cap == NULL) - p_scb->p_cap = (tAVDT_CFG *)osi_malloc(sizeof(tAVDT_CFG)); - if (p_scb->avdt_version >= AVDT_VERSION_SYNC) - { - p_req = AVDT_GetAllCapReq; - } - else - { - p_req = AVDT_GetCapReq; - } - (*p_req)(p_scb->peer_addr, - p_scb->sep_info[i].seid, - p_scb->p_cap, bta_av_dt_cback[p_scb->hdi]); - sent_cmd = true; - break; - } - } - - /* if no streams available then stream open fails */ - if (!sent_cmd) - { - bta_av_ssm_execute(p_scb, BTA_AV_STR_GETCAP_FAIL_EVT, p_data); - } - - return sent_cmd; - +static bool bta_av_next_getcap(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + int i; + tAVDT_GETCAP_REQ* p_req; + bool sent_cmd = false; + uint16_t uuid_int = p_scb->uuid_int; + uint8_t sep_requested = 0; + + if (uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) + sep_requested = AVDT_TSEP_SNK; + else if (uuid_int == UUID_SERVCLASS_AUDIO_SINK) + sep_requested = AVDT_TSEP_SRC; + + for (i = p_scb->sep_info_idx; i < p_scb->num_seps; i++) { + /* steam not in use, is a sink, and is the right media type (audio/video) */ + if ((p_scb->sep_info[i].in_use == false) && + (p_scb->sep_info[i].tsep == sep_requested) && + (p_scb->sep_info[i].media_type == p_scb->media_type)) { + p_scb->sep_info_idx = i; + + /* we got a stream; get its capabilities */ + if (p_scb->p_cap == NULL) + p_scb->p_cap = (tAVDT_CFG*)osi_malloc(sizeof(tAVDT_CFG)); + if (p_scb->avdt_version >= AVDT_VERSION_SYNC) { + p_req = AVDT_GetAllCapReq; + } else { + p_req = AVDT_GetCapReq; + } + (*p_req)(p_scb->peer_addr, p_scb->sep_info[i].seid, p_scb->p_cap, + bta_av_dt_cback[p_scb->hdi]); + sent_cmd = true; + break; + } + } + + /* if no streams available then stream open fails */ + if (!sent_cmd) { + bta_av_ssm_execute(p_scb, BTA_AV_STR_GETCAP_FAIL_EVT, p_data); + } + + return sent_cmd; } /******************************************************************************* @@ -428,143 +412,146 @@ static bool bta_av_next_getcap(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_av_proc_stream_evt(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data, int index) -{ - uint16_t sec_len = 0; - tBTA_AV_SCB *p_scb = bta_av_cb.p_scb[index]; - - if (p_data) - { - if (event == AVDT_SECURITY_IND_EVT) - { - sec_len = (p_data->security_ind.len < BTA_AV_SECURITY_MAX_LEN) ? - p_data->security_ind.len : BTA_AV_SECURITY_MAX_LEN; - } - else if (event == AVDT_SECURITY_CFM_EVT && p_data->hdr.err_code == 0) - { - sec_len = (p_data->security_cfm.len < BTA_AV_SECURITY_MAX_LEN) ? - p_data->security_cfm.len : BTA_AV_SECURITY_MAX_LEN; - } - } - - if (p_scb) { - tBTA_AV_STR_MSG *p_msg = - (tBTA_AV_STR_MSG *)osi_malloc(sizeof(tBTA_AV_STR_MSG) + sec_len); - - /* copy event data, bd addr, and handle to event message buffer */ - p_msg->hdr.offset = 0; - - if (bd_addr != NULL) - { - bdcpy(p_msg->bd_addr, bd_addr); - APPL_TRACE_DEBUG("%s: bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", - __func__, bd_addr[0], bd_addr[1], bd_addr[2], - bd_addr[3], bd_addr[4], bd_addr[5]); - } - - if (p_data != NULL) - { - memcpy(&p_msg->msg, p_data, sizeof (tAVDT_CTRL)); - /* copy config params to event message buffer */ - switch (event) - { - case AVDT_RECONFIG_CFM_EVT: - APPL_TRACE_DEBUG("%s: reconfig cfm event codec info = 0x%06x-%06x-%06x-%02x", - __func__, - (p_msg->msg.reconfig_cfm.p_cfg->codec_info[0]<<16)+(p_msg->msg.reconfig_cfm.p_cfg->codec_info[1]<<8)+p_msg->msg.reconfig_cfm.p_cfg->codec_info[2], - (p_msg->msg.reconfig_cfm.p_cfg->codec_info[3]<<16)+(p_msg->msg.reconfig_cfm.p_cfg->codec_info[4]<<8)+p_msg->msg.reconfig_cfm.p_cfg->codec_info[5], - (p_msg->msg.reconfig_cfm.p_cfg->codec_info[6]<<16)+(p_msg->msg.reconfig_cfm.p_cfg->codec_info[7]<<8)+p_msg->msg.reconfig_cfm.p_cfg->codec_info[8], - p_msg->msg.reconfig_cfm.p_cfg->codec_info[9]); - break; - - case AVDT_CONFIG_IND_EVT: - /* We might have 2 SEP signallings(A2DP + VDP) with one peer device on one L2CAP. - * If we already have a signalling connection with the bd_addr and the streaming - * SST is at INIT state, change it to INCOMING state to handle the signalling - * from the 2nd SEP. */ - if ((bta_av_find_lcb(bd_addr, BTA_AV_LCB_FIND) != NULL) && (bta_av_is_scb_init(p_scb))) - { - bta_av_set_scb_sst_incoming (p_scb); - - /* When ACP_CONNECT_EVT was received, we put first available scb to incoming state. - * Later when we receive AVDT_CONFIG_IND_EVT, we use a new p_scb and set its state to - * incoming which we do it above. - * We also have to set the old p_scb state to init to be used later */ - for (int i = 0; i < BTA_AV_NUM_STRS; i++) { - if ((bta_av_cb.p_scb[i]) && (i != index)) { - if (bta_av_cb.p_scb[i]->state == BTA_AV_INCOMING_SST) { - bta_av_cb.p_scb[i]->state = BTA_AV_INIT_SST; - bta_av_cb.p_scb[i]->coll_mask = 0; - break; - } - } - } - } - - memcpy(&p_msg->cfg, p_data->config_ind.p_cfg, sizeof(tAVDT_CFG)); - break; - - case AVDT_SECURITY_IND_EVT: - p_msg->msg.security_ind.p_data = (uint8_t *) (p_msg + 1); - memcpy(p_msg->msg.security_ind.p_data, p_data->security_ind.p_data, sec_len); - break; - - case AVDT_SECURITY_CFM_EVT: - p_msg->msg.security_cfm.p_data = (uint8_t *) (p_msg + 1); - if (p_data->hdr.err_code == 0) - { - memcpy(p_msg->msg.security_cfm.p_data, p_data->security_cfm.p_data, sec_len); +static void bta_av_proc_stream_evt(uint8_t handle, BD_ADDR bd_addr, + uint8_t event, tAVDT_CTRL* p_data, + int index) { + uint16_t sec_len = 0; + tBTA_AV_SCB* p_scb = bta_av_cb.p_scb[index]; + + if (p_data) { + if (event == AVDT_SECURITY_IND_EVT) { + sec_len = (p_data->security_ind.len < BTA_AV_SECURITY_MAX_LEN) + ? p_data->security_ind.len + : BTA_AV_SECURITY_MAX_LEN; + } else if (event == AVDT_SECURITY_CFM_EVT && p_data->hdr.err_code == 0) { + sec_len = (p_data->security_cfm.len < BTA_AV_SECURITY_MAX_LEN) + ? p_data->security_cfm.len + : BTA_AV_SECURITY_MAX_LEN; + } + } + + if (p_scb) { + tBTA_AV_STR_MSG* p_msg = + (tBTA_AV_STR_MSG*)osi_malloc(sizeof(tBTA_AV_STR_MSG) + sec_len); + + /* copy event data, bd addr, and handle to event message buffer */ + p_msg->hdr.offset = 0; + + if (bd_addr != NULL) { + bdcpy(p_msg->bd_addr, bd_addr); + APPL_TRACE_DEBUG("%s: bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", __func__, + bd_addr[0], bd_addr[1], bd_addr[2], bd_addr[3], + bd_addr[4], bd_addr[5]); + } + + if (p_data != NULL) { + memcpy(&p_msg->msg, p_data, sizeof(tAVDT_CTRL)); + /* copy config params to event message buffer */ + switch (event) { + case AVDT_RECONFIG_CFM_EVT: + APPL_TRACE_DEBUG( + "%s: reconfig cfm event codec info = 0x%06x-%06x-%06x-%02x", + __func__, + (p_msg->msg.reconfig_cfm.p_cfg->codec_info[0] << 16) + + (p_msg->msg.reconfig_cfm.p_cfg->codec_info[1] << 8) + + p_msg->msg.reconfig_cfm.p_cfg->codec_info[2], + (p_msg->msg.reconfig_cfm.p_cfg->codec_info[3] << 16) + + (p_msg->msg.reconfig_cfm.p_cfg->codec_info[4] << 8) + + p_msg->msg.reconfig_cfm.p_cfg->codec_info[5], + (p_msg->msg.reconfig_cfm.p_cfg->codec_info[6] << 16) + + (p_msg->msg.reconfig_cfm.p_cfg->codec_info[7] << 8) + + p_msg->msg.reconfig_cfm.p_cfg->codec_info[8], + p_msg->msg.reconfig_cfm.p_cfg->codec_info[9]); + break; + + case AVDT_CONFIG_IND_EVT: + /* We might have 2 SEP signallings(A2DP + VDP) with one peer device on + * one L2CAP. + * If we already have a signalling connection with the bd_addr and the + * streaming + * SST is at INIT state, change it to INCOMING state to handle the + * signalling + * from the 2nd SEP. */ + if ((bta_av_find_lcb(bd_addr, BTA_AV_LCB_FIND) != NULL) && + (bta_av_is_scb_init(p_scb))) { + bta_av_set_scb_sst_incoming(p_scb); + + /* When ACP_CONNECT_EVT was received, we put first available scb to + * incoming state. + * Later when we receive AVDT_CONFIG_IND_EVT, we use a new p_scb and + * set its state to + * incoming which we do it above. + * We also have to set the old p_scb state to init to be used later + */ + for (int i = 0; i < BTA_AV_NUM_STRS; i++) { + if ((bta_av_cb.p_scb[i]) && (i != index)) { + if (bta_av_cb.p_scb[i]->state == BTA_AV_INCOMING_SST) { + bta_av_cb.p_scb[i]->state = BTA_AV_INIT_SST; + bta_av_cb.p_scb[i]->coll_mask = 0; + break; } - break; - - case AVDT_SUSPEND_IND_EVT: - p_msg->msg.hdr.err_code = 0; - break; - - case AVDT_CONNECT_IND_EVT: - p_scb->recfg_sup = true; - p_scb->suspend_sup = true; - break; - - default: - break; + } } - } - else - p_msg->msg.hdr.err_code = 0; - - /* look up application event */ - if ((p_data == NULL) || (p_data->hdr.err_code == 0)) - { - p_msg->hdr.event = bta_av_stream_evt_ok[event]; - } - else - { - p_msg->hdr.event = bta_av_stream_evt_fail[event]; - } + } + + memcpy(&p_msg->cfg, p_data->config_ind.p_cfg, sizeof(tAVDT_CFG)); + break; + + case AVDT_SECURITY_IND_EVT: + p_msg->msg.security_ind.p_data = (uint8_t*)(p_msg + 1); + memcpy(p_msg->msg.security_ind.p_data, p_data->security_ind.p_data, + sec_len); + break; + + case AVDT_SECURITY_CFM_EVT: + p_msg->msg.security_cfm.p_data = (uint8_t*)(p_msg + 1); + if (p_data->hdr.err_code == 0) { + memcpy(p_msg->msg.security_cfm.p_data, p_data->security_cfm.p_data, + sec_len); + } + break; + + case AVDT_SUSPEND_IND_EVT: + p_msg->msg.hdr.err_code = 0; + break; + + case AVDT_CONNECT_IND_EVT: + p_scb->recfg_sup = true; + p_scb->suspend_sup = true; + break; + + default: + break; + } + } else + p_msg->msg.hdr.err_code = 0; + + /* look up application event */ + if ((p_data == NULL) || (p_data->hdr.err_code == 0)) { + p_msg->hdr.event = bta_av_stream_evt_ok[event]; + } else { + p_msg->hdr.event = bta_av_stream_evt_fail[event]; + } - p_msg->initiator = false; - if (event == AVDT_SUSPEND_CFM_EVT) - p_msg->initiator = true; + p_msg->initiator = false; + if (event == AVDT_SUSPEND_CFM_EVT) p_msg->initiator = true; - APPL_TRACE_VERBOSE("%s: hndl:x%x", __func__, p_scb->hndl); - p_msg->hdr.layer_specific = p_scb->hndl; - p_msg->handle = handle; - p_msg->avdt_event = event; - bta_sys_sendmsg(p_msg); - } + APPL_TRACE_VERBOSE("%s: hndl:x%x", __func__, p_scb->hndl); + p_msg->hdr.layer_specific = p_scb->hndl; + p_msg->handle = handle; + p_msg->avdt_event = event; + bta_sys_sendmsg(p_msg); + } -/* coverity[var_deref_model] */ -/* false-positive: bta_av_conn_cback only processes AVDT_CONNECT_IND_EVT and AVDT_DISCONNECT_IND_EVT event - * these 2 events always have associated p_data */ - if (p_data) - { - bta_av_conn_cback(handle, bd_addr, event, p_data); - } - else - { - APPL_TRACE_ERROR("%s: p_data is null", __func__); - } + /* coverity[var_deref_model] */ + /* false-positive: bta_av_conn_cback only processes AVDT_CONNECT_IND_EVT and + * AVDT_DISCONNECT_IND_EVT event + * these 2 events always have associated p_data */ + if (p_data) { + bta_av_conn_cback(handle, bd_addr, event, p_data); + } else { + APPL_TRACE_ERROR("%s: p_data is null", __func__); + } } /******************************************************************************* @@ -576,34 +563,33 @@ static void bta_av_proc_stream_evt(uint8_t handle, BD_ADDR bd_addr, uint8_t even * Returns void * ******************************************************************************/ -void bta_av_sink_data_cback(uint8_t handle, BT_HDR *p_pkt, uint32_t time_stamp, - uint8_t m_pt) -{ - int index = 0; - tBTA_AV_SCB *p_scb; - APPL_TRACE_DEBUG("%s: avdt_handle: %d pkt_len=0x%x offset = 0x%x " - "number of frames 0x%x sequence number 0x%x", - __func__, handle, p_pkt->len, p_pkt->offset, - *((uint8_t*)(p_pkt + 1) + p_pkt->offset), - p_pkt->layer_specific); - /* Get SCB and correct sep type */ - for (index = 0; index < BTA_AV_NUM_STRS; index++) { - p_scb = bta_av_cb.p_scb[index]; - if ((p_scb->avdt_handle == handle) && - (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK)) { - break; - } - } - if (index == BTA_AV_NUM_STRS) { - /* cannot find correct handler */ - osi_free(p_pkt); - return; - } - p_pkt->event = BTA_AV_SINK_MEDIA_DATA_EVT; - p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback(BTA_AV_SINK_MEDIA_DATA_EVT, - (tBTA_AV_MEDIA *)p_pkt); - /* Free the buffer: a copy of the packet has been delivered */ +void bta_av_sink_data_cback(uint8_t handle, BT_HDR* p_pkt, uint32_t time_stamp, + uint8_t m_pt) { + int index = 0; + tBTA_AV_SCB* p_scb; + APPL_TRACE_DEBUG( + "%s: avdt_handle: %d pkt_len=0x%x offset = 0x%x " + "number of frames 0x%x sequence number 0x%x", + __func__, handle, p_pkt->len, p_pkt->offset, + *((uint8_t*)(p_pkt + 1) + p_pkt->offset), p_pkt->layer_specific); + /* Get SCB and correct sep type */ + for (index = 0; index < BTA_AV_NUM_STRS; index++) { + p_scb = bta_av_cb.p_scb[index]; + if ((p_scb->avdt_handle == handle) && + (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK)) { + break; + } + } + if (index == BTA_AV_NUM_STRS) { + /* cannot find correct handler */ osi_free(p_pkt); + return; + } + p_pkt->event = BTA_AV_SINK_MEDIA_DATA_EVT; + p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback(BTA_AV_SINK_MEDIA_DATA_EVT, + (tBTA_AV_MEDIA*)p_pkt); + /* Free the buffer: a copy of the packet has been delivered */ + osi_free(p_pkt); } /******************************************************************************* @@ -615,11 +601,10 @@ void bta_av_sink_data_cback(uint8_t handle, BT_HDR *p_pkt, uint32_t time_stamp, * Returns void * ******************************************************************************/ -static void bta_av_stream0_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data) -{ - APPL_TRACE_VERBOSE("%s: avdt_handle: %d event=0x%x", - __func__, handle, event); - bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 0); +static void bta_av_stream0_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data) { + APPL_TRACE_VERBOSE("%s: avdt_handle: %d event=0x%x", __func__, handle, event); + bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 0); } /******************************************************************************* @@ -631,10 +616,10 @@ static void bta_av_stream0_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, * Returns void * ******************************************************************************/ -static void bta_av_stream1_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data) -{ - APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); - bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 1); +static void bta_av_stream1_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data) { + APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); + bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 1); } #if BTA_AV_NUM_STRS > 2 @@ -647,10 +632,10 @@ static void bta_av_stream1_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, * Returns void * ******************************************************************************/ -static void bta_av_stream2_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data) -{ - APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); - bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 2); +static void bta_av_stream2_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data) { + APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); + bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 2); } #endif @@ -664,10 +649,10 @@ static void bta_av_stream2_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, * Returns void * ******************************************************************************/ -static void bta_av_stream3_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data) -{ - APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); - bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 3); +static void bta_av_stream3_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data) { + APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); + bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 3); } #endif @@ -681,10 +666,10 @@ static void bta_av_stream3_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, * ******************************************************************************/ #if BTA_AV_NUM_STRS > 4 -static void bta_av_stream4_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data) -{ - APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); - bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 4); +static void bta_av_stream4_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data) { + APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); + bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 4); } #endif @@ -698,10 +683,10 @@ static void bta_av_stream4_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, * ******************************************************************************/ #if BTA_AV_NUM_STRS > 5 -static void bta_av_stream5_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data) -{ - APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); - bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 5); +static void bta_av_stream5_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data) { + APPL_TRACE_EVENT("%s: avdt_handle: %d event=0x%x", __func__, handle, event); + bta_av_proc_stream_evt(handle, bd_addr, event, p_data, 5); } #endif @@ -714,27 +699,26 @@ static void bta_av_stream5_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, * Returns void * ******************************************************************************/ -static void bta_av_a2dp_sdp_cback(bool found, tA2DP_Service *p_service) -{ - tBTA_AV_SCB *p_scb = bta_av_hndl_to_scb(bta_av_cb.handle); +static void bta_av_a2dp_sdp_cback(bool found, tA2DP_Service* p_service) { + tBTA_AV_SCB* p_scb = bta_av_hndl_to_scb(bta_av_cb.handle); - if (p_scb == NULL) { - APPL_TRACE_ERROR("%s: no scb found for handle(0x%x)", __func__, - bta_av_cb.handle); - return; - } + if (p_scb == NULL) { + APPL_TRACE_ERROR("%s: no scb found for handle(0x%x)", __func__, + bta_av_cb.handle); + return; + } - tBTA_AV_SDP_RES *p_msg = - (tBTA_AV_SDP_RES *)osi_malloc(sizeof(tBTA_AV_SDP_RES)); - p_msg->hdr.event = (found) ? - BTA_AV_SDP_DISC_OK_EVT : BTA_AV_SDP_DISC_FAIL_EVT; - if (found && (p_service != NULL)) - p_scb->avdt_version = p_service->avdt_version; - else - p_scb->avdt_version = 0x00; - p_msg->hdr.layer_specific = bta_av_cb.handle; + tBTA_AV_SDP_RES* p_msg = + (tBTA_AV_SDP_RES*)osi_malloc(sizeof(tBTA_AV_SDP_RES)); + p_msg->hdr.event = + (found) ? BTA_AV_SDP_DISC_OK_EVT : BTA_AV_SDP_DISC_FAIL_EVT; + if (found && (p_service != NULL)) + p_scb->avdt_version = p_service->avdt_version; + else + p_scb->avdt_version = 0x00; + p_msg->hdr.layer_specific = bta_av_cb.handle; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -746,23 +730,21 @@ static void bta_av_a2dp_sdp_cback(bool found, tA2DP_Service *p_service) * Returns * ******************************************************************************/ -static void bta_av_adjust_seps_idx(tBTA_AV_SCB *p_scb, uint8_t avdt_handle) -{ - APPL_TRACE_DEBUG("%s: codec: %s", __func__, - A2DP_CodecName(p_scb->cfg.codec_info)); - for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { - APPL_TRACE_DEBUG("%s: av_handle: %d codec: %s", __func__, - p_scb->seps[i].av_handle, - A2DP_CodecName(p_scb->seps[i].codec_info)); - if (p_scb->seps[i].av_handle && - (p_scb->seps[i].av_handle == avdt_handle) && - A2DP_CodecTypeEquals(p_scb->seps[i].codec_info, - p_scb->cfg.codec_info)) { - p_scb->sep_idx = i; - p_scb->avdt_handle = p_scb->seps[i].av_handle; - break; - } +static void bta_av_adjust_seps_idx(tBTA_AV_SCB* p_scb, uint8_t avdt_handle) { + APPL_TRACE_DEBUG("%s: codec: %s", __func__, + A2DP_CodecName(p_scb->cfg.codec_info)); + for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { + APPL_TRACE_DEBUG("%s: av_handle: %d codec: %s", __func__, + p_scb->seps[i].av_handle, + A2DP_CodecName(p_scb->seps[i].codec_info)); + if (p_scb->seps[i].av_handle && (p_scb->seps[i].av_handle == avdt_handle) && + A2DP_CodecTypeEquals(p_scb->seps[i].codec_info, + p_scb->cfg.codec_info)) { + p_scb->sep_idx = i; + p_scb->avdt_handle = p_scb->seps[i].av_handle; + break; } + } } /******************************************************************************* @@ -775,49 +757,41 @@ static void bta_av_adjust_seps_idx(tBTA_AV_SCB *p_scb, uint8_t avdt_handle) * Returns void * ******************************************************************************/ -void bta_av_switch_role (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_RS_RES switch_res = BTA_AV_RS_NONE; - tBTA_AV_API_OPEN *p_buf = &p_scb->q_info.open; +void bta_av_switch_role(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_RS_RES switch_res = BTA_AV_RS_NONE; + tBTA_AV_API_OPEN* p_buf = &p_scb->q_info.open; - APPL_TRACE_DEBUG("%s: wait:x%x", __func__, p_scb->wait); - if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_START) - p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RETRY; + APPL_TRACE_DEBUG("%s: wait:x%x", __func__, p_scb->wait); + if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_START) + p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RETRY; - /* clear the masks set when the timer is started */ - p_scb->wait &= ~(BTA_AV_WAIT_ROLE_SW_RES_OPEN|BTA_AV_WAIT_ROLE_SW_RES_START); + /* clear the masks set when the timer is started */ + p_scb->wait &= + ~(BTA_AV_WAIT_ROLE_SW_RES_OPEN | BTA_AV_WAIT_ROLE_SW_RES_START); - if (p_scb->q_tag == BTA_AV_Q_TAG_OPEN) - { - if (bta_av_switch_if_needed(p_scb) || - !bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) { - p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; - } - else - { - /* this should not happen in theory. Just in case... - * continue to do_disc_a2dp */ - switch_res = BTA_AV_RS_DONE; - } - } - else - { - /* report failure on OPEN */ - switch_res = BTA_AV_RS_FAIL; + if (p_scb->q_tag == BTA_AV_Q_TAG_OPEN) { + if (bta_av_switch_if_needed(p_scb) || + !bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) { + p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; + } else { + /* this should not happen in theory. Just in case... + * continue to do_disc_a2dp */ + switch_res = BTA_AV_RS_DONE; } + } else { + /* report failure on OPEN */ + switch_res = BTA_AV_RS_FAIL; + } - if (switch_res != BTA_AV_RS_NONE) - { - if (bta_av_cb.rs_idx == (p_scb->hdi + 1)) - { - bta_av_cb.rs_idx = 0; - } - p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_RETRY; - p_scb->q_tag = 0; - p_buf->switch_res = switch_res; - bta_av_do_disc_a2dp(p_scb, (tBTA_AV_DATA *)p_buf); + if (switch_res != BTA_AV_RS_NONE) { + if (bta_av_cb.rs_idx == (p_scb->hdi + 1)) { + bta_av_cb.rs_idx = 0; } + p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_RETRY; + p_scb->q_tag = 0; + p_buf->switch_res = switch_res; + bta_av_do_disc_a2dp(p_scb, (tBTA_AV_DATA*)p_buf); + } } /******************************************************************************* @@ -830,77 +804,62 @@ void bta_av_switch_role (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_role_res (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - bool initiator = false; - tBTA_AV_START start; - tBTA_AV_OPEN av_open; +void bta_av_role_res(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + bool initiator = false; + tBTA_AV_START start; + tBTA_AV_OPEN av_open; - APPL_TRACE_DEBUG("%s: q_tag:%d, wait:x%x, role:x%x", __func__, - p_scb->q_tag, p_scb->wait, p_scb->role); - if (p_scb->role & BTA_AV_ROLE_START_INT) - initiator = true; + APPL_TRACE_DEBUG("%s: q_tag:%d, wait:x%x, role:x%x", __func__, p_scb->q_tag, + p_scb->wait, p_scb->role); + if (p_scb->role & BTA_AV_ROLE_START_INT) initiator = true; - if (p_scb->q_tag == BTA_AV_Q_TAG_START) - { - if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_STARTED) - { - p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; - if (p_data->role_res.hci_status != HCI_SUCCESS) - { - p_scb->role &= ~BTA_AV_ROLE_START_INT; - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); - /* start failed because of role switch. */ - start.chnl = p_scb->chnl; - start.status = BTA_AV_FAIL_ROLE; - start.hndl = p_scb->hndl; - start.initiator = initiator; - (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV *) &start); - } - else - { - bta_av_start_ok(p_scb, p_data); - } - } - else if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_START) - p_scb->wait |= BTA_AV_WAIT_ROLE_SW_FAILED; - } - else if (p_scb->q_tag == BTA_AV_Q_TAG_OPEN) - { - if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_OPEN) - { - p_scb->role &= ~BTA_AV_ROLE_START_INT; - p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; - - if (p_data->role_res.hci_status != HCI_SUCCESS) - { - /* Open failed because of role switch. */ - bdcpy(av_open.bd_addr, p_scb->peer_addr); - av_open.chnl = p_scb->chnl; - av_open.hndl = p_scb->hndl; - start.status = BTA_AV_FAIL_ROLE; - if(p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC ) - av_open.sep = AVDT_TSEP_SNK; - else if(p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK ) - av_open.sep = AVDT_TSEP_SRC; - (*bta_av_cb.p_cback)(BTA_AV_OPEN_EVT, (tBTA_AV *)&av_open); - } - else - { - /* Continue av open process */ - p_scb->q_info.open.switch_res = BTA_AV_RS_DONE; - bta_av_do_disc_a2dp(p_scb, (tBTA_AV_DATA *)&(p_scb->q_info.open)); - } - } - else - { - APPL_TRACE_WARNING("%s: unexpected role switch event: q_tag = %d wait = %d", - __func__, p_scb->q_tag, p_scb->wait); - } + if (p_scb->q_tag == BTA_AV_Q_TAG_START) { + if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_STARTED) { + p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; + if (p_data->role_res.hci_status != HCI_SUCCESS) { + p_scb->role &= ~BTA_AV_ROLE_START_INT; + bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + /* start failed because of role switch. */ + start.chnl = p_scb->chnl; + start.status = BTA_AV_FAIL_ROLE; + start.hndl = p_scb->hndl; + start.initiator = initiator; + (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV*)&start); + } else { + bta_av_start_ok(p_scb, p_data); + } + } else if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_START) + p_scb->wait |= BTA_AV_WAIT_ROLE_SW_FAILED; + } else if (p_scb->q_tag == BTA_AV_Q_TAG_OPEN) { + if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_RES_OPEN) { + p_scb->role &= ~BTA_AV_ROLE_START_INT; + p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; + + if (p_data->role_res.hci_status != HCI_SUCCESS) { + /* Open failed because of role switch. */ + bdcpy(av_open.bd_addr, p_scb->peer_addr); + av_open.chnl = p_scb->chnl; + av_open.hndl = p_scb->hndl; + start.status = BTA_AV_FAIL_ROLE; + if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC) + av_open.sep = AVDT_TSEP_SNK; + else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK) + av_open.sep = AVDT_TSEP_SRC; + (*bta_av_cb.p_cback)(BTA_AV_OPEN_EVT, (tBTA_AV*)&av_open); + } else { + /* Continue av open process */ + p_scb->q_info.open.switch_res = BTA_AV_RS_DONE; + bta_av_do_disc_a2dp(p_scb, (tBTA_AV_DATA*)&(p_scb->q_info.open)); + } + } else { + APPL_TRACE_WARNING( + "%s: unexpected role switch event: q_tag = %d wait = %d", __func__, + p_scb->q_tag, p_scb->wait); } + } - APPL_TRACE_DEBUG("%s: wait:x%x, role:x%x", __func__, p_scb->wait, - p_scb->role); + APPL_TRACE_DEBUG("%s: wait:x%x, role:x%x", __func__, p_scb->wait, + p_scb->role); } /******************************************************************************* @@ -913,9 +872,8 @@ void bta_av_role_res (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_delay_co (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - p_scb->p_cos->delay(p_scb->hndl, p_data->str_msg.msg.delay_rpt_cmd.delay); +void bta_av_delay_co(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + p_scb->p_cos->delay(p_scb->hndl, p_data->str_msg.msg.delay_rpt_cmd.delay); } /******************************************************************************* @@ -927,129 +885,118 @@ void bta_av_delay_co (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_do_disc_a2dp(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - bool ok_continue = false; - tA2DP_SDP_DB_PARAMS db_params; - uint16_t attr_list[] = {ATTR_ID_SERVICE_CLASS_ID_LIST, - ATTR_ID_PROTOCOL_DESC_LIST, - ATTR_ID_BT_PROFILE_DESC_LIST}; - uint16_t sdp_uuid = 0; /* UUID for which SDP has to be done */ +void bta_av_do_disc_a2dp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + bool ok_continue = false; + tA2DP_SDP_DB_PARAMS db_params; + uint16_t attr_list[] = {ATTR_ID_SERVICE_CLASS_ID_LIST, + ATTR_ID_PROTOCOL_DESC_LIST, + ATTR_ID_BT_PROFILE_DESC_LIST}; + uint16_t sdp_uuid = 0; /* UUID for which SDP has to be done */ - APPL_TRACE_DEBUG("%s: use_rc: %d rs:%d, oc:%d", __func__, - p_data->api_open.use_rc, p_data->api_open.switch_res, bta_av_cb.audio_open_cnt); + APPL_TRACE_DEBUG("%s: use_rc: %d rs:%d, oc:%d", __func__, + p_data->api_open.use_rc, p_data->api_open.switch_res, + bta_av_cb.audio_open_cnt); - memcpy (&(p_scb->open_api), &(p_data->api_open), sizeof(tBTA_AV_API_OPEN)); + memcpy(&(p_scb->open_api), &(p_data->api_open), sizeof(tBTA_AV_API_OPEN)); - switch(p_data->api_open.switch_res) - { + switch (p_data->api_open.switch_res) { case BTA_AV_RS_NONE: - if (bta_av_switch_if_needed(p_scb) || - !bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) { - /* waiting for role switch result. save the api to control block */ - memcpy(&p_scb->q_info.open, &p_data->api_open, sizeof(tBTA_AV_API_OPEN)); - p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; - p_scb->q_tag = BTA_AV_Q_TAG_OPEN; - } - else - { - ok_continue = true; - } - break; + if (bta_av_switch_if_needed(p_scb) || + !bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) { + /* waiting for role switch result. save the api to control block */ + memcpy(&p_scb->q_info.open, &p_data->api_open, + sizeof(tBTA_AV_API_OPEN)); + p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; + p_scb->q_tag = BTA_AV_Q_TAG_OPEN; + } else { + ok_continue = true; + } + break; case BTA_AV_RS_FAIL: - /* report a new failure event */ - p_scb->open_status = BTA_AV_FAIL_ROLE; - bta_av_ssm_execute(p_scb, BTA_AV_SDP_DISC_FAIL_EVT, NULL); - break; + /* report a new failure event */ + p_scb->open_status = BTA_AV_FAIL_ROLE; + bta_av_ssm_execute(p_scb, BTA_AV_SDP_DISC_FAIL_EVT, NULL); + break; case BTA_AV_RS_OK: - p_data = (tBTA_AV_DATA *)&p_scb->q_info.open; - /* continue to open if link role is ok */ - if (bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) - { - ok_continue = true; - } - else - { - p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; - } - break; + p_data = (tBTA_AV_DATA*)&p_scb->q_info.open; + /* continue to open if link role is ok */ + if (bta_av_link_role_ok(p_scb, A2DP_SET_MULTL_BIT)) { + ok_continue = true; + } else { + p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_OPEN; + } + break; case BTA_AV_RS_DONE: - ok_continue = true; - break; - } + ok_continue = true; + break; + } - APPL_TRACE_DEBUG("%s: ok_continue: %d wait:x%x, q_tag: %d", __func__, - ok_continue, p_scb->wait, p_scb->q_tag); - if (!ok_continue) - return; + APPL_TRACE_DEBUG("%s: ok_continue: %d wait:x%x, q_tag: %d", __func__, + ok_continue, p_scb->wait, p_scb->q_tag); + if (!ok_continue) return; - /* clear the role switch bits */ - p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; + /* clear the role switch bits */ + p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; - if (p_scb->wait & BTA_AV_WAIT_CHECK_RC) - { - p_scb->wait &= ~BTA_AV_WAIT_CHECK_RC; - bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RC_DISC_TIME_VAL, - BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); - } + if (p_scb->wait & BTA_AV_WAIT_CHECK_RC) { + p_scb->wait &= ~BTA_AV_WAIT_CHECK_RC; + bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RC_DISC_TIME_VAL, + BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); + } - if (bta_av_cb.features & BTA_AV_FEAT_MASTER) - { - L2CA_SetDesireRole(L2CAP_ROLE_DISALLOW_SWITCH); + if (bta_av_cb.features & BTA_AV_FEAT_MASTER) { + L2CA_SetDesireRole(L2CAP_ROLE_DISALLOW_SWITCH); - if (bta_av_cb.audio_open_cnt == 1) - { - /* there's already an A2DP connection. do not allow switch */ - bta_sys_clear_default_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH); - } + if (bta_av_cb.audio_open_cnt == 1) { + /* there's already an A2DP connection. do not allow switch */ + bta_sys_clear_default_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH); } - /* store peer addr other parameters */ - bta_av_save_addr(p_scb, p_data->api_open.bd_addr); - p_scb->sec_mask = p_data->api_open.sec_mask; - p_scb->use_rc = p_data->api_open.use_rc; - - bta_sys_app_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + } + /* store peer addr other parameters */ + bta_av_save_addr(p_scb, p_data->api_open.bd_addr); + p_scb->sec_mask = p_data->api_open.sec_mask; + p_scb->use_rc = p_data->api_open.use_rc; - if (p_scb->skip_sdp == true) - { - tA2DP_Service a2dp_ser; - a2dp_ser.avdt_version = AVDT_VERSION; - p_scb->skip_sdp = false; - p_scb->uuid_int = p_data->api_open.uuid; - /* only one A2DP find service is active at a time */ - bta_av_cb.handle = p_scb->hndl; - APPL_TRACE_WARNING("%s: Skip Sdp for incoming A2dp connection", - __func__); - bta_av_a2dp_sdp_cback(true, &a2dp_ser); - return; - } + bta_sys_app_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + if (p_scb->skip_sdp == true) { + tA2DP_Service a2dp_ser; + a2dp_ser.avdt_version = AVDT_VERSION; + p_scb->skip_sdp = false; + p_scb->uuid_int = p_data->api_open.uuid; /* only one A2DP find service is active at a time */ bta_av_cb.handle = p_scb->hndl; - - /* set up parameters */ - db_params.db_len = BTA_AV_DISC_BUF_SIZE; - db_params.num_attr = 3; - db_params.p_attrs = attr_list; - p_scb->uuid_int = p_data->api_open.uuid; - p_scb->sdp_discovery_started = true; - if (p_scb->uuid_int == UUID_SERVCLASS_AUDIO_SINK) - sdp_uuid = UUID_SERVCLASS_AUDIO_SOURCE; - else if (p_scb->uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) - sdp_uuid = UUID_SERVCLASS_AUDIO_SINK; - - APPL_TRACE_DEBUG("%s: uuid_int 0x%x, Doing SDP For 0x%x", __func__, - p_scb->uuid_int, sdp_uuid); - if (A2DP_FindService(sdp_uuid, p_scb->peer_addr, &db_params, - bta_av_a2dp_sdp_cback) == A2DP_SUCCESS) - return; - - /* when the code reaches here, either the DB is NULL - * or A2DP_FindService is not successful */ - bta_av_a2dp_sdp_cback(false, NULL); + APPL_TRACE_WARNING("%s: Skip Sdp for incoming A2dp connection", __func__); + bta_av_a2dp_sdp_cback(true, &a2dp_ser); + return; + } + + /* only one A2DP find service is active at a time */ + bta_av_cb.handle = p_scb->hndl; + + /* set up parameters */ + db_params.db_len = BTA_AV_DISC_BUF_SIZE; + db_params.num_attr = 3; + db_params.p_attrs = attr_list; + p_scb->uuid_int = p_data->api_open.uuid; + p_scb->sdp_discovery_started = true; + if (p_scb->uuid_int == UUID_SERVCLASS_AUDIO_SINK) + sdp_uuid = UUID_SERVCLASS_AUDIO_SOURCE; + else if (p_scb->uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) + sdp_uuid = UUID_SERVCLASS_AUDIO_SINK; + + APPL_TRACE_DEBUG("%s: uuid_int 0x%x, Doing SDP For 0x%x", __func__, + p_scb->uuid_int, sdp_uuid); + if (A2DP_FindService(sdp_uuid, p_scb->peer_addr, &db_params, + bta_av_a2dp_sdp_cback) == A2DP_SUCCESS) + return; + + /* when the code reaches here, either the DB is NULL + * or A2DP_FindService is not successful */ + bta_av_a2dp_sdp_cback(false, NULL); } /******************************************************************************* @@ -1061,59 +1008,53 @@ void bta_av_do_disc_a2dp(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_cleanup(tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_CONN_CHG msg; - uint8_t role = BTA_AV_ROLE_AD_INT; - - APPL_TRACE_DEBUG("%s", __func__); - - /* free any buffers */ - osi_free_and_reset((void **)&p_scb->p_cap); - p_scb->sdp_discovery_started = false; - p_scb->avdt_version = 0; - - /* initialize some control block variables */ - p_scb->open_status = BTA_AV_SUCCESS; - - /* if de-registering shut everything down */ - msg.hdr.layer_specific = p_scb->hndl; - p_scb->started = false; - p_scb->cong = false; - p_scb->role = role; - p_scb->cur_psc_mask = 0; - p_scb->wait = 0; - p_scb->num_disc_snks = 0; - alarm_cancel(p_scb->avrc_ct_timer); - - vendor_get_interface()->send_command( - (vendor_opcode_t)BT_VND_OP_A2DP_OFFLOAD_STOP, (void*)&p_scb->l2c_cid); - if (p_scb->offload_start_pending) { - tBTA_AV_STATUS status = BTA_AV_FAIL_STREAM; - (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV *)&status); +void bta_av_cleanup(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_CONN_CHG msg; + uint8_t role = BTA_AV_ROLE_AD_INT; + + APPL_TRACE_DEBUG("%s", __func__); + + /* free any buffers */ + osi_free_and_reset((void**)&p_scb->p_cap); + p_scb->sdp_discovery_started = false; + p_scb->avdt_version = 0; + + /* initialize some control block variables */ + p_scb->open_status = BTA_AV_SUCCESS; + + /* if de-registering shut everything down */ + msg.hdr.layer_specific = p_scb->hndl; + p_scb->started = false; + p_scb->cong = false; + p_scb->role = role; + p_scb->cur_psc_mask = 0; + p_scb->wait = 0; + p_scb->num_disc_snks = 0; + alarm_cancel(p_scb->avrc_ct_timer); + + vendor_get_interface()->send_command( + (vendor_opcode_t)BT_VND_OP_A2DP_OFFLOAD_STOP, (void*)&p_scb->l2c_cid); + if (p_scb->offload_start_pending) { + tBTA_AV_STATUS status = BTA_AV_FAIL_STREAM; + (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV*)&status); + } + p_scb->offload_start_pending = false; + + p_scb->skip_sdp = false; + if (p_scb->deregistring) { + /* remove stream */ + for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { + if (p_scb->seps[i].av_handle) AVDT_RemoveStream(p_scb->seps[i].av_handle); + p_scb->seps[i].av_handle = 0; } - p_scb->offload_start_pending = false; - - p_scb->skip_sdp = false; - if (p_scb->deregistring) - { - /* remove stream */ - for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { - if (p_scb->seps[i].av_handle) - AVDT_RemoveStream(p_scb->seps[i].av_handle); - p_scb->seps[i].av_handle = 0; - } - bta_av_dereg_comp((tBTA_AV_DATA *) &msg); - } - else - { - /* report stream closed to main SM */ - msg.is_up = false; - bdcpy(msg.peer_addr, p_scb->peer_addr); - bta_av_conn_chg((tBTA_AV_DATA *) &msg); - } + bta_av_dereg_comp((tBTA_AV_DATA*)&msg); + } else { + /* report stream closed to main SM */ + msg.is_up = false; + bdcpy(msg.peer_addr, p_scb->peer_addr); + bta_av_conn_chg((tBTA_AV_DATA*)&msg); + } } /******************************************************************************* @@ -1125,10 +1066,8 @@ void bta_av_cleanup(tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_free_sdb(tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - p_scb->sdp_discovery_started = false; +void bta_av_free_sdb(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + p_scb->sdp_discovery_started = false; } /******************************************************************************* @@ -1140,83 +1079,70 @@ void bta_av_free_sdb(tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_config_ind (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_CI_SETCONFIG setconfig; - tAVDT_SEP_INFO *p_info; - tAVDT_CFG *p_evt_cfg = &p_data->str_msg.cfg; - uint8_t psc_mask = (p_evt_cfg->psc_mask | p_scb->cfg.psc_mask); - uint8_t local_sep; /* sep type of local handle on which connection was received */ - tBTA_AV_STR_MSG *p_msg = (tBTA_AV_STR_MSG *)p_data; - - local_sep = bta_av_get_scb_sep_type(p_scb, p_msg->handle); - p_scb->avdt_label = p_data->str_msg.msg.hdr.label; - memcpy(p_scb->cfg.codec_info, p_evt_cfg->codec_info, AVDT_CODEC_SIZE); - bta_av_save_addr(p_scb, p_data->str_msg.bd_addr); - - /* Clear collision mask */ - p_scb->coll_mask = 0; - alarm_cancel(bta_av_cb.accept_signalling_timer); - - /* if no codec parameters in configuration, fail */ - if ((p_evt_cfg->num_codec == 0) || - /* or the peer requests for a service we do not support */ - ((psc_mask != p_scb->cfg.psc_mask) && - (psc_mask != (p_scb->cfg.psc_mask&~AVDT_PSC_DELAY_RPT))) ) - { - setconfig.hndl = p_scb->hndl; /* we may not need this */ - setconfig.err_code = AVDT_ERR_UNSUP_CFG; - bta_av_ssm_execute(p_scb, BTA_AV_CI_SETCONFIG_FAIL_EVT, (tBTA_AV_DATA *) &setconfig); - } +void bta_av_config_ind(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_CI_SETCONFIG setconfig; + tAVDT_SEP_INFO* p_info; + tAVDT_CFG* p_evt_cfg = &p_data->str_msg.cfg; + uint8_t psc_mask = (p_evt_cfg->psc_mask | p_scb->cfg.psc_mask); + uint8_t + local_sep; /* sep type of local handle on which connection was received */ + tBTA_AV_STR_MSG* p_msg = (tBTA_AV_STR_MSG*)p_data; + + local_sep = bta_av_get_scb_sep_type(p_scb, p_msg->handle); + p_scb->avdt_label = p_data->str_msg.msg.hdr.label; + memcpy(p_scb->cfg.codec_info, p_evt_cfg->codec_info, AVDT_CODEC_SIZE); + bta_av_save_addr(p_scb, p_data->str_msg.bd_addr); + + /* Clear collision mask */ + p_scb->coll_mask = 0; + alarm_cancel(bta_av_cb.accept_signalling_timer); + + /* if no codec parameters in configuration, fail */ + if ((p_evt_cfg->num_codec == 0) || + /* or the peer requests for a service we do not support */ + ((psc_mask != p_scb->cfg.psc_mask) && + (psc_mask != (p_scb->cfg.psc_mask & ~AVDT_PSC_DELAY_RPT)))) { + setconfig.hndl = p_scb->hndl; /* we may not need this */ + setconfig.err_code = AVDT_ERR_UNSUP_CFG; + bta_av_ssm_execute(p_scb, BTA_AV_CI_SETCONFIG_FAIL_EVT, + (tBTA_AV_DATA*)&setconfig); + } else { + p_info = &p_scb->sep_info[0]; + p_info->in_use = 0; + p_info->media_type = p_scb->media_type; + p_info->seid = p_data->str_msg.msg.config_ind.int_seid; + + /* Sep type of Peer will be oppsite role to our local sep */ + if (local_sep == AVDT_TSEP_SRC) + p_info->tsep = AVDT_TSEP_SNK; + else if (local_sep == AVDT_TSEP_SNK) + p_info->tsep = AVDT_TSEP_SRC; + + p_scb->role |= BTA_AV_ROLE_AD_ACP; + p_scb->cur_psc_mask = p_evt_cfg->psc_mask; + if (bta_av_cb.features & BTA_AV_FEAT_RCTG) + p_scb->use_rc = true; else - { - p_info = &p_scb->sep_info[0]; - p_info->in_use = 0; - p_info->media_type = p_scb->media_type; - p_info->seid = p_data->str_msg.msg.config_ind.int_seid; - - /* Sep type of Peer will be oppsite role to our local sep */ - if (local_sep == AVDT_TSEP_SRC) - p_info->tsep = AVDT_TSEP_SNK; - else if (local_sep == AVDT_TSEP_SNK) - p_info->tsep = AVDT_TSEP_SRC; - - p_scb->role |= BTA_AV_ROLE_AD_ACP; - p_scb->cur_psc_mask = p_evt_cfg->psc_mask; - if (bta_av_cb.features & BTA_AV_FEAT_RCTG) - p_scb->use_rc = true; - else - p_scb->use_rc = false; - - p_scb->num_seps = 1; - p_scb->sep_info_idx = 0; - APPL_TRACE_DEBUG("%s: SEID: %d use_rc: %d cur_psc_mask:0x%x", __func__, - p_info->seid, p_scb->use_rc, p_scb->cur_psc_mask); - /* in case of A2DP SINK this is the first time peer data is being sent to co functions */ - if (local_sep == AVDT_TSEP_SNK) - { - p_scb->p_cos->setcfg(p_scb->hndl, - p_evt_cfg->codec_info, - p_info->seid, - p_scb->peer_addr, - p_evt_cfg->num_protect, - p_evt_cfg->protect_info, - AVDT_TSEP_SNK, - p_msg->handle); - } - else - { - p_scb->p_cos->setcfg(p_scb->hndl, - p_evt_cfg->codec_info, - p_info->seid, - p_scb->peer_addr, - p_evt_cfg->num_protect, - p_evt_cfg->protect_info, - AVDT_TSEP_SRC, - p_msg->handle); - } + p_scb->use_rc = false; + + p_scb->num_seps = 1; + p_scb->sep_info_idx = 0; + APPL_TRACE_DEBUG("%s: SEID: %d use_rc: %d cur_psc_mask:0x%x", __func__, + p_info->seid, p_scb->use_rc, p_scb->cur_psc_mask); + /* in case of A2DP SINK this is the first time peer data is being sent to + * co functions */ + if (local_sep == AVDT_TSEP_SNK) { + p_scb->p_cos->setcfg(p_scb->hndl, p_evt_cfg->codec_info, p_info->seid, + p_scb->peer_addr, p_evt_cfg->num_protect, + p_evt_cfg->protect_info, AVDT_TSEP_SNK, + p_msg->handle); + } else { + p_scb->p_cos->setcfg(p_scb->hndl, p_evt_cfg->codec_info, p_info->seid, + p_scb->peer_addr, p_evt_cfg->num_protect, + p_evt_cfg->protect_info, AVDT_TSEP_SRC, + p_msg->handle); } + } } /******************************************************************************* @@ -1228,24 +1154,22 @@ void bta_av_config_ind (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_disconnect_req (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_RCB *p_rcb; +void bta_av_disconnect_req(tBTA_AV_SCB* p_scb, + UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_RCB* p_rcb; - APPL_TRACE_DEBUG("%s: conn_lcb: 0x%x", __func__, bta_av_cb.conn_lcb); + APPL_TRACE_DEBUG("%s: conn_lcb: 0x%x", __func__, bta_av_cb.conn_lcb); - alarm_cancel(bta_av_cb.link_signalling_timer); - alarm_cancel(p_scb->avrc_ct_timer); + alarm_cancel(bta_av_cb.link_signalling_timer); + alarm_cancel(p_scb->avrc_ct_timer); - if (bta_av_cb.conn_lcb) { - p_rcb = bta_av_get_rcb_by_shdl((uint8_t)(p_scb->hdi + 1)); - if (p_rcb) - bta_av_del_rc(p_rcb); - AVDT_DisconnectReq(p_scb->peer_addr, bta_av_dt_cback[p_scb->hdi]); - } else { - bta_av_ssm_execute(p_scb, BTA_AV_AVDT_DISCONNECT_EVT, NULL); - } + if (bta_av_cb.conn_lcb) { + p_rcb = bta_av_get_rcb_by_shdl((uint8_t)(p_scb->hdi + 1)); + if (p_rcb) bta_av_del_rc(p_rcb); + AVDT_DisconnectReq(p_scb->peer_addr, bta_av_dt_cback[p_scb->hdi]); + } else { + bta_av_ssm_execute(p_scb, BTA_AV_AVDT_DISCONNECT_EVT, NULL); + } } /******************************************************************************* @@ -1257,13 +1181,11 @@ void bta_av_disconnect_req (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_security_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - if (bta_av_cb.features & BTA_AV_FEAT_PROTECT) - { - AVDT_SecurityReq(p_scb->avdt_handle, p_data->api_protect_req.p_data, - p_data->api_protect_req.len); - } +void bta_av_security_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + if (bta_av_cb.features & BTA_AV_FEAT_PROTECT) { + AVDT_SecurityReq(p_scb->avdt_handle, p_data->api_protect_req.p_data, + p_data->api_protect_req.len); + } } /******************************************************************************* @@ -1275,18 +1197,16 @@ void bta_av_security_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_security_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - if (bta_av_cb.features & BTA_AV_FEAT_PROTECT) - { - AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, p_data->api_protect_rsp.error_code, - p_data->api_protect_rsp.p_data, p_data->api_protect_rsp.len); - } - else - { - AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_NSC, - NULL, 0); - } +void bta_av_security_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + if (bta_av_cb.features & BTA_AV_FEAT_PROTECT) { + AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, + p_data->api_protect_rsp.error_code, + p_data->api_protect_rsp.p_data, + p_data->api_protect_rsp.len); + } else { + AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_NSC, NULL, + 0); + } } /******************************************************************************* @@ -1298,89 +1218,82 @@ void bta_av_security_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_setconfig_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - uint8_t num = p_data->ci_setconfig.num_seid + 1; - uint8_t avdt_handle = p_data->ci_setconfig.avdt_handle; - uint8_t *p_seid = p_data->ci_setconfig.p_seid; - int i; - uint8_t local_sep; - - /* we like this codec_type. find the sep_idx */ - local_sep = bta_av_get_scb_sep_type(p_scb,avdt_handle); - bta_av_adjust_seps_idx(p_scb, avdt_handle); - APPL_TRACE_DEBUG("%s: sep_idx: %d cur_psc_mask:0x%x", __func__, - p_scb->sep_idx, p_scb->cur_psc_mask); - - if ((AVDT_TSEP_SNK == local_sep) && - (p_data->ci_setconfig.err_code == AVDT_SUCCESS) && - (p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback != NULL)) { - tBTA_AV_MEDIA av_sink_codec_info; - memcpy(av_sink_codec_info.avk_config.bd_addr, p_scb->peer_addr, - sizeof(BD_ADDR)); - av_sink_codec_info.avk_config.codec_info = p_scb->cfg.codec_info; - p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback(BTA_AV_SINK_MEDIA_CFG_EVT, - &av_sink_codec_info); +void bta_av_setconfig_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + uint8_t num = p_data->ci_setconfig.num_seid + 1; + uint8_t avdt_handle = p_data->ci_setconfig.avdt_handle; + uint8_t* p_seid = p_data->ci_setconfig.p_seid; + int i; + uint8_t local_sep; + + /* we like this codec_type. find the sep_idx */ + local_sep = bta_av_get_scb_sep_type(p_scb, avdt_handle); + bta_av_adjust_seps_idx(p_scb, avdt_handle); + APPL_TRACE_DEBUG("%s: sep_idx: %d cur_psc_mask:0x%x", __func__, + p_scb->sep_idx, p_scb->cur_psc_mask); + + if ((AVDT_TSEP_SNK == local_sep) && + (p_data->ci_setconfig.err_code == AVDT_SUCCESS) && + (p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback != NULL)) { + tBTA_AV_MEDIA av_sink_codec_info; + memcpy(av_sink_codec_info.avk_config.bd_addr, p_scb->peer_addr, + sizeof(BD_ADDR)); + av_sink_codec_info.avk_config.codec_info = p_scb->cfg.codec_info; + p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback(BTA_AV_SINK_MEDIA_CFG_EVT, + &av_sink_codec_info); + } + + AVDT_ConfigRsp(p_scb->avdt_handle, p_scb->avdt_label, + p_data->ci_setconfig.err_code, p_data->ci_setconfig.category); + + alarm_cancel(bta_av_cb.link_signalling_timer); + + if (p_data->ci_setconfig.err_code == AVDT_SUCCESS) { + p_scb->wait = BTA_AV_WAIT_ACP_CAPS_ON; + if (p_data->ci_setconfig.recfg_needed) + p_scb->role |= BTA_AV_ROLE_SUSPEND_OPT; + APPL_TRACE_DEBUG("%s: recfg_needed:%d role:x%x num:%d", __func__, + p_data->ci_setconfig.recfg_needed, p_scb->role, num); + /* callout module tells BTA the number of "good" SEPs and their SEIDs. + * getcap on these SEID */ + p_scb->num_seps = num; + + if (p_scb->cur_psc_mask & AVDT_PSC_DELAY_RPT) + p_scb->avdt_version = AVDT_VERSION_SYNC; + + if (A2DP_GetCodecType(p_scb->cfg.codec_info) == A2DP_MEDIA_CT_SBC || + num > 1) { + /* if SBC is used by the SNK as INT, discover req is not sent in + * bta_av_config_ind. + * call disc_res now */ + /* this is called in A2DP SRC path only, In case of SINK we don't need it + */ + if (local_sep == AVDT_TSEP_SRC) + p_scb->p_cos->disc_res(p_scb->hndl, num, num, 0, p_scb->peer_addr, + UUID_SERVCLASS_AUDIO_SOURCE); + } else { + /* we do not know the peer device and it is using non-SBC codec + * we need to know all the SEPs on SNK */ + bta_av_discover_req(p_scb, NULL); + return; } + for (i = 1; i < num; i++) { + APPL_TRACE_DEBUG("%s: sep_info[%d] SEID: %d", __func__, i, p_seid[i - 1]); + /* initialize the sep_info[] to get capabilities */ + p_scb->sep_info[i].in_use = false; + p_scb->sep_info[i].tsep = AVDT_TSEP_SNK; + p_scb->sep_info[i].media_type = p_scb->media_type; + p_scb->sep_info[i].seid = p_seid[i - 1]; + } - AVDT_ConfigRsp(p_scb->avdt_handle, p_scb->avdt_label, p_data->ci_setconfig.err_code, - p_data->ci_setconfig.category); - - alarm_cancel(bta_av_cb.link_signalling_timer); - - if(p_data->ci_setconfig.err_code == AVDT_SUCCESS) - { - p_scb->wait = BTA_AV_WAIT_ACP_CAPS_ON; - if(p_data->ci_setconfig.recfg_needed) - p_scb->role |= BTA_AV_ROLE_SUSPEND_OPT; - APPL_TRACE_DEBUG("%s: recfg_needed:%d role:x%x num:%d", __func__, - p_data->ci_setconfig.recfg_needed, p_scb->role, num); - /* callout module tells BTA the number of "good" SEPs and their SEIDs. - * getcap on these SEID */ - p_scb->num_seps = num; - - if (p_scb->cur_psc_mask & AVDT_PSC_DELAY_RPT) - p_scb->avdt_version = AVDT_VERSION_SYNC; - - - if (A2DP_GetCodecType(p_scb->cfg.codec_info) == A2DP_MEDIA_CT_SBC || - num > 1) { - /* if SBC is used by the SNK as INT, discover req is not sent in bta_av_config_ind. - * call disc_res now */ - /* this is called in A2DP SRC path only, In case of SINK we don't need it */ - if (local_sep == AVDT_TSEP_SRC) - p_scb->p_cos->disc_res(p_scb->hndl, num, num, 0, p_scb->peer_addr, - UUID_SERVCLASS_AUDIO_SOURCE); - } - else - { - /* we do not know the peer device and it is using non-SBC codec - * we need to know all the SEPs on SNK */ - bta_av_discover_req(p_scb, NULL); - return; - } - - for (i = 1; i < num; i++) - { - APPL_TRACE_DEBUG("%s: sep_info[%d] SEID: %d", __func__, i, - p_seid[i-1]); - /* initialize the sep_info[] to get capabilities */ - p_scb->sep_info[i].in_use = false; - p_scb->sep_info[i].tsep = AVDT_TSEP_SNK; - p_scb->sep_info[i].media_type = p_scb->media_type; - p_scb->sep_info[i].seid = p_seid[i-1]; - } - - /* only in case of local sep as SRC we need to look for other SEPs, In case of SINK we don't */ - if (local_sep == AVDT_TSEP_SRC) - { - /* Make sure UUID has been initialized... */ - if (p_scb->uuid_int == 0) - p_scb->uuid_int = p_scb->open_api.uuid; - bta_av_next_getcap(p_scb, p_data); - } + /* only in case of local sep as SRC we need to look for other SEPs, In case + * of SINK we don't */ + if (local_sep == AVDT_TSEP_SRC) { + /* Make sure UUID has been initialized... */ + if (p_scb->uuid_int == 0) p_scb->uuid_int = p_scb->open_api.uuid; + bta_av_next_getcap(p_scb, p_data); } + } } /******************************************************************************* @@ -1392,86 +1305,80 @@ void bta_av_setconfig_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_str_opened (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_CONN_CHG msg; - tBTA_AV_OPEN open; - uint8_t *p; - uint16_t mtu; - - msg.hdr.layer_specific = p_scb->hndl; - msg.is_up = true; - bdcpy(msg.peer_addr, p_scb->peer_addr); - p_scb->l2c_cid = AVDT_GetL2CapChannel(p_scb->avdt_handle); - bta_av_conn_chg((tBTA_AV_DATA *) &msg); - /* set the congestion flag, so AV would not send media packets by accident */ - p_scb->cong = true; - p_scb->offload_start_pending = false; - - - p_scb->stream_mtu = p_data->str_msg.msg.open_ind.peer_mtu - AVDT_MEDIA_HDR_SIZE; - mtu = bta_av_chk_mtu(p_scb, p_scb->stream_mtu); - APPL_TRACE_DEBUG("%s: l2c_cid: 0x%x stream_mtu: %d mtu: %d", __func__, - p_scb->l2c_cid, p_scb->stream_mtu, mtu); - if(mtu == 0 || mtu > p_scb->stream_mtu) - mtu = p_scb->stream_mtu; - - /* Set the media channel as medium priority */ - L2CA_SetTxPriority(p_scb->l2c_cid, L2CAP_CHNL_PRIORITY_MEDIUM); - L2CA_SetChnlFlushability (p_scb->l2c_cid, true); - - bta_sys_conn_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); - memset(&p_scb->q_info, 0, sizeof(tBTA_AV_Q_INFO)); - - p_scb->l2c_bufs = 0; - p_scb->p_cos->open(p_scb->hndl, p_scb->cfg.codec_info, mtu); - - { - /* TODO check if other audio channel is open. - * If yes, check if reconfig is needed - * Rigt now we do not do this kind of checking. - * BTA-AV is INT for 2nd audio connection. - * The application needs to make sure the current codec_info is proper. - * If one audio connection is open and another SNK attempts to connect to AV, - * the connection will be rejected. - */ - /* check if other audio channel is started. If yes, start */ - bdcpy(open.bd_addr, p_scb->peer_addr); - open.chnl = p_scb->chnl; - open.hndl = p_scb->hndl; - open.status = BTA_AV_SUCCESS; - open.starting = bta_av_chk_start(p_scb); - open.edr = 0; - if( NULL != (p = BTM_ReadRemoteFeatures(p_scb->peer_addr))) - { - if(HCI_EDR_ACL_2MPS_SUPPORTED(p)) - open.edr |= BTA_AV_EDR_2MBPS; - if(HCI_EDR_ACL_3MPS_SUPPORTED(p)) - open.edr |= BTA_AV_EDR_3MBPS; - } +void bta_av_str_opened(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_CONN_CHG msg; + tBTA_AV_OPEN open; + uint8_t* p; + uint16_t mtu; + + msg.hdr.layer_specific = p_scb->hndl; + msg.is_up = true; + bdcpy(msg.peer_addr, p_scb->peer_addr); + p_scb->l2c_cid = AVDT_GetL2CapChannel(p_scb->avdt_handle); + bta_av_conn_chg((tBTA_AV_DATA*)&msg); + /* set the congestion flag, so AV would not send media packets by accident */ + p_scb->cong = true; + p_scb->offload_start_pending = false; + + p_scb->stream_mtu = + p_data->str_msg.msg.open_ind.peer_mtu - AVDT_MEDIA_HDR_SIZE; + mtu = bta_av_chk_mtu(p_scb, p_scb->stream_mtu); + APPL_TRACE_DEBUG("%s: l2c_cid: 0x%x stream_mtu: %d mtu: %d", __func__, + p_scb->l2c_cid, p_scb->stream_mtu, mtu); + if (mtu == 0 || mtu > p_scb->stream_mtu) mtu = p_scb->stream_mtu; + + /* Set the media channel as medium priority */ + L2CA_SetTxPriority(p_scb->l2c_cid, L2CAP_CHNL_PRIORITY_MEDIUM); + L2CA_SetChnlFlushability(p_scb->l2c_cid, true); + + bta_sys_conn_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + memset(&p_scb->q_info, 0, sizeof(tBTA_AV_Q_INFO)); + + p_scb->l2c_bufs = 0; + p_scb->p_cos->open(p_scb->hndl, p_scb->cfg.codec_info, mtu); + + { + /* TODO check if other audio channel is open. + * If yes, check if reconfig is needed + * Rigt now we do not do this kind of checking. + * BTA-AV is INT for 2nd audio connection. + * The application needs to make sure the current codec_info is proper. + * If one audio connection is open and another SNK attempts to connect to + * AV, + * the connection will be rejected. + */ + /* check if other audio channel is started. If yes, start */ + bdcpy(open.bd_addr, p_scb->peer_addr); + open.chnl = p_scb->chnl; + open.hndl = p_scb->hndl; + open.status = BTA_AV_SUCCESS; + open.starting = bta_av_chk_start(p_scb); + open.edr = 0; + if (NULL != (p = BTM_ReadRemoteFeatures(p_scb->peer_addr))) { + if (HCI_EDR_ACL_2MPS_SUPPORTED(p)) open.edr |= BTA_AV_EDR_2MBPS; + if (HCI_EDR_ACL_3MPS_SUPPORTED(p)) open.edr |= BTA_AV_EDR_3MBPS; + } #if (BTA_AR_INCLUDED == TRUE) - bta_ar_avdt_conn(BTA_ID_AV, open.bd_addr); + bta_ar_avdt_conn(BTA_ID_AV, open.bd_addr); #endif - if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC ) - open.sep = AVDT_TSEP_SNK; - else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK ) - open.sep = AVDT_TSEP_SRC; - - (*bta_av_cb.p_cback)(BTA_AV_OPEN_EVT, (tBTA_AV *) &open); - if(open.starting) - { - bta_av_ssm_execute(p_scb, BTA_AV_AP_START_EVT, NULL); - } - } + if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC) + open.sep = AVDT_TSEP_SNK; + else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK) + open.sep = AVDT_TSEP_SRC; - // This code is used to pass PTS TC for AVDTP ABORT - char value[PROPERTY_VALUE_MAX] = {0}; - if ((osi_property_get("bluetooth.pts.force_a2dp_abort", value, "false")) - && (!strcmp(value, "true"))) - { - APPL_TRACE_ERROR("%s: Calling AVDT_AbortReq", __func__); - AVDT_AbortReq(p_scb->avdt_handle); + (*bta_av_cb.p_cback)(BTA_AV_OPEN_EVT, (tBTA_AV*)&open); + if (open.starting) { + bta_av_ssm_execute(p_scb, BTA_AV_AP_START_EVT, NULL); } + } + + // This code is used to pass PTS TC for AVDTP ABORT + char value[PROPERTY_VALUE_MAX] = {0}; + if ((osi_property_get("bluetooth.pts.force_a2dp_abort", value, "false")) && + (!strcmp(value, "true"))) { + APPL_TRACE_ERROR("%s: Calling AVDT_AbortReq", __func__); + AVDT_AbortReq(p_scb->avdt_handle); + } } /******************************************************************************* @@ -1483,26 +1390,24 @@ void bta_av_str_opened (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_security_ind (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_PROTECT_REQ protect_req; +void bta_av_security_ind(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_PROTECT_REQ protect_req; - p_scb->avdt_label = p_data->str_msg.msg.hdr.label; + p_scb->avdt_label = p_data->str_msg.msg.hdr.label; - if (bta_av_cb.features & BTA_AV_FEAT_PROTECT) - { - protect_req.chnl = p_scb->chnl; - protect_req.hndl = p_scb->hndl; - protect_req.p_data = p_data->str_msg.msg.security_ind.p_data; - protect_req.len = p_data->str_msg.msg.security_ind.len; + if (bta_av_cb.features & BTA_AV_FEAT_PROTECT) { + protect_req.chnl = p_scb->chnl; + protect_req.hndl = p_scb->hndl; + protect_req.p_data = p_data->str_msg.msg.security_ind.p_data; + protect_req.len = p_data->str_msg.msg.security_ind.len; - (*bta_av_cb.p_cback)(BTA_AV_PROTECT_REQ_EVT, (tBTA_AV *) &protect_req); - } - /* app doesn't support security indication; respond with failure */ - else - { - AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_NSC, NULL, 0); - } + (*bta_av_cb.p_cback)(BTA_AV_PROTECT_REQ_EVT, (tBTA_AV*)&protect_req); + } + /* app doesn't support security indication; respond with failure */ + else { + AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_NSC, NULL, + 0); + } } /******************************************************************************* @@ -1514,20 +1419,18 @@ void bta_av_security_ind (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_security_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_PROTECT_RSP protect_rsp; +void bta_av_security_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_PROTECT_RSP protect_rsp; - if (bta_av_cb.features & BTA_AV_FEAT_PROTECT) - { - protect_rsp.chnl = p_scb->chnl; - protect_rsp.hndl = p_scb->hndl; - protect_rsp.p_data = p_data->str_msg.msg.security_cfm.p_data; - protect_rsp.len = p_data->str_msg.msg.security_cfm.len; - protect_rsp.err_code= p_data->str_msg.msg.hdr.err_code; + if (bta_av_cb.features & BTA_AV_FEAT_PROTECT) { + protect_rsp.chnl = p_scb->chnl; + protect_rsp.hndl = p_scb->hndl; + protect_rsp.p_data = p_data->str_msg.msg.security_cfm.p_data; + protect_rsp.len = p_data->str_msg.msg.security_cfm.len; + protect_rsp.err_code = p_data->str_msg.msg.hdr.err_code; - (*bta_av_cb.p_cback)(BTA_AV_PROTECT_RSP_EVT, (tBTA_AV *) &protect_rsp); - } + (*bta_av_cb.p_cback)(BTA_AV_PROTECT_RSP_EVT, (tBTA_AV*)&protect_rsp); + } } /******************************************************************************* @@ -1539,29 +1442,27 @@ void bta_av_security_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_do_close (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - /* stop stream if started */ - if (p_scb->co_started) - { - bta_av_str_stopped(p_scb, NULL); - } - alarm_cancel(bta_av_cb.link_signalling_timer); +void bta_av_do_close(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + /* stop stream if started */ + if (p_scb->co_started) { + bta_av_str_stopped(p_scb, NULL); + } + alarm_cancel(bta_av_cb.link_signalling_timer); - /* close stream */ - p_scb->started = false; + /* close stream */ + p_scb->started = false; - /* drop the buffers queued in L2CAP */ - L2CA_FlushChannel (p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); + /* drop the buffers queued in L2CAP */ + L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); - AVDT_CloseReq(p_scb->avdt_handle); - /* just in case that the link is congested, link is flow controled by peer or - * for whatever reason the the close request can not be sent in time. - * when this timer expires, AVDT_DisconnectReq will be called to disconnect the link - */ - bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_CLOSE_REQ_TIME_VAL, - BTA_AV_API_CLOSE_EVT, p_scb->hndl); + AVDT_CloseReq(p_scb->avdt_handle); + /* just in case that the link is congested, link is flow controled by peer or + * for whatever reason the the close request can not be sent in time. + * when this timer expires, AVDT_DisconnectReq will be called to disconnect + * the link + */ + bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_CLOSE_REQ_TIME_VAL, + BTA_AV_API_CLOSE_EVT, p_scb->hndl); } /******************************************************************************* @@ -1573,22 +1474,20 @@ void bta_av_do_close (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_connect_req(tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - p_scb->sdp_discovery_started = false; - if (p_scb->coll_mask & BTA_AV_COLL_INC_TMR) - { - /* SNK initiated L2C connection while SRC was doing SDP. */ - /* Wait until timeout to check if SNK starts signalling. */ - APPL_TRACE_EVENT("%s: coll_mask = 0x%2X", __func__, p_scb->coll_mask); - p_scb->coll_mask |= BTA_AV_COLL_API_CALLED; - APPL_TRACE_EVENT("%s: updated coll_mask = 0x%2X", __func__, - p_scb->coll_mask); - return; - } +void bta_av_connect_req(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + p_scb->sdp_discovery_started = false; + if (p_scb->coll_mask & BTA_AV_COLL_INC_TMR) { + /* SNK initiated L2C connection while SRC was doing SDP. */ + /* Wait until timeout to check if SNK starts signalling. */ + APPL_TRACE_EVENT("%s: coll_mask = 0x%2X", __func__, p_scb->coll_mask); + p_scb->coll_mask |= BTA_AV_COLL_API_CALLED; + APPL_TRACE_EVENT("%s: updated coll_mask = 0x%2X", __func__, + p_scb->coll_mask); + return; + } - AVDT_ConnectReq(p_scb->peer_addr, p_scb->sec_mask, bta_av_dt_cback[p_scb->hdi]); + AVDT_ConnectReq(p_scb->peer_addr, p_scb->sec_mask, + bta_av_dt_cback[p_scb->hdi]); } /******************************************************************************* @@ -1600,13 +1499,11 @@ void bta_av_connect_req(tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_sdp_failed(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - if (!p_scb->open_status) - p_scb->open_status = BTA_AV_FAIL_SDP; +void bta_av_sdp_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + if (!p_scb->open_status) p_scb->open_status = BTA_AV_FAIL_SDP; - p_scb->sdp_discovery_started = false; - bta_av_str_closed(p_scb, p_data); + p_scb->sdp_discovery_started = false; + bta_av_str_closed(p_scb, p_data); } /******************************************************************************* @@ -1620,52 +1517,46 @@ void bta_av_sdp_failed(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_disc_results (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - uint8_t num_snks = 0, num_srcs =0, i; - /* our uuid in case we initiate connection */ - uint16_t uuid_int = p_scb->uuid_int; +void bta_av_disc_results(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + uint8_t num_snks = 0, num_srcs = 0, i; + /* our uuid in case we initiate connection */ + uint16_t uuid_int = p_scb->uuid_int; - APPL_TRACE_DEBUG("%s: initiator UUID 0x%x", __func__, uuid_int); - /* store number of stream endpoints returned */ - p_scb->num_seps = p_data->str_msg.msg.discover_cfm.num_seps; + APPL_TRACE_DEBUG("%s: initiator UUID 0x%x", __func__, uuid_int); + /* store number of stream endpoints returned */ + p_scb->num_seps = p_data->str_msg.msg.discover_cfm.num_seps; - for (i = 0; i < p_scb->num_seps; i++) - { - /* steam not in use, is a sink, and is audio */ - if ((p_scb->sep_info[i].in_use == false) && - (p_scb->sep_info[i].media_type == p_scb->media_type)) - { - if((p_scb->sep_info[i].tsep == AVDT_TSEP_SNK) && - (uuid_int == UUID_SERVCLASS_AUDIO_SOURCE)) - num_snks++; - - if((p_scb->sep_info[i].tsep == AVDT_TSEP_SRC) && - (uuid_int == UUID_SERVCLASS_AUDIO_SINK)) - num_srcs++; + for (i = 0; i < p_scb->num_seps; i++) { + /* steam not in use, is a sink, and is audio */ + if ((p_scb->sep_info[i].in_use == false) && + (p_scb->sep_info[i].media_type == p_scb->media_type)) { + if ((p_scb->sep_info[i].tsep == AVDT_TSEP_SNK) && + (uuid_int == UUID_SERVCLASS_AUDIO_SOURCE)) + num_snks++; - } + if ((p_scb->sep_info[i].tsep == AVDT_TSEP_SRC) && + (uuid_int == UUID_SERVCLASS_AUDIO_SINK)) + num_srcs++; } + } - p_scb->p_cos->disc_res(p_scb->hndl, p_scb->num_seps, num_snks, num_srcs, p_scb->peer_addr, - uuid_int); - p_scb->num_disc_snks = num_snks; - p_scb->num_disc_srcs = num_srcs; + p_scb->p_cos->disc_res(p_scb->hndl, p_scb->num_seps, num_snks, num_srcs, + p_scb->peer_addr, uuid_int); + p_scb->num_disc_snks = num_snks; + p_scb->num_disc_srcs = num_srcs; - /* if we got any */ - if (p_scb->num_seps > 0) - { - /* initialize index into discovery results */ - p_scb->sep_info_idx = 0; + /* if we got any */ + if (p_scb->num_seps > 0) { + /* initialize index into discovery results */ + p_scb->sep_info_idx = 0; - /* get the capabilities of the first available stream */ - bta_av_next_getcap(p_scb, p_data); - } - /* else we got discover response but with no streams; we're done */ - else - { - bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, p_data); - } + /* get the capabilities of the first available stream */ + bta_av_next_getcap(p_scb, p_data); + } + /* else we got discover response but with no streams; we're done */ + else { + bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, p_data); + } } /******************************************************************************* @@ -1679,44 +1570,37 @@ void bta_av_disc_results (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_disc_res_as_acp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - uint8_t num_snks = 0, i; - - /* store number of stream endpoints returned */ - p_scb->num_seps = p_data->str_msg.msg.discover_cfm.num_seps; +void bta_av_disc_res_as_acp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + uint8_t num_snks = 0, i; + /* store number of stream endpoints returned */ + p_scb->num_seps = p_data->str_msg.msg.discover_cfm.num_seps; - - for (i = 0; i < p_scb->num_seps; i++) - { - /* steam is a sink, and is audio */ - if ((p_scb->sep_info[i].tsep == AVDT_TSEP_SNK) && - (p_scb->sep_info[i].media_type == p_scb->media_type)) - { - p_scb->sep_info[i].in_use = false; - num_snks++; - } + for (i = 0; i < p_scb->num_seps; i++) { + /* steam is a sink, and is audio */ + if ((p_scb->sep_info[i].tsep == AVDT_TSEP_SNK) && + (p_scb->sep_info[i].media_type == p_scb->media_type)) { + p_scb->sep_info[i].in_use = false; + num_snks++; } - p_scb->p_cos->disc_res(p_scb->hndl, p_scb->num_seps, num_snks, 0, p_scb->peer_addr, - UUID_SERVCLASS_AUDIO_SOURCE); - p_scb->num_disc_snks = num_snks; - p_scb->num_disc_srcs = 0; + } + p_scb->p_cos->disc_res(p_scb->hndl, p_scb->num_seps, num_snks, 0, + p_scb->peer_addr, UUID_SERVCLASS_AUDIO_SOURCE); + p_scb->num_disc_snks = num_snks; + p_scb->num_disc_srcs = 0; - /* if we got any */ - if (p_scb->num_seps > 0) - { - /* initialize index into discovery results */ - p_scb->sep_info_idx = 0; + /* if we got any */ + if (p_scb->num_seps > 0) { + /* initialize index into discovery results */ + p_scb->sep_info_idx = 0; - /* get the capabilities of the first available stream */ - bta_av_next_getcap(p_scb, p_data); - } - /* else we got discover response but with no streams; we're done */ - else - { - bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, p_data); - } + /* get the capabilities of the first available stream */ + bta_av_next_getcap(p_scb, p_data); + } + /* else we got discover response but with no streams; we're done */ + else { + bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, p_data); + } } /******************************************************************************* @@ -1728,43 +1612,37 @@ void bta_av_disc_res_as_acp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_save_caps(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tAVDT_CFG cfg; - tAVDT_SEP_INFO *p_info = &p_scb->sep_info[p_scb->sep_info_idx]; - uint8_t old_wait = p_scb->wait; - bool getcap_done = false; +void bta_av_save_caps(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tAVDT_CFG cfg; + tAVDT_SEP_INFO* p_info = &p_scb->sep_info[p_scb->sep_info_idx]; + uint8_t old_wait = p_scb->wait; + bool getcap_done = false; - APPL_TRACE_DEBUG("%s: num_seps:%d sep_info_idx:%d wait:x%x", __func__, - p_scb->num_seps, p_scb->sep_info_idx, p_scb->wait); - memcpy(&cfg, p_scb->p_cap, sizeof(tAVDT_CFG)); - /* let application know the capability of the SNK */ - p_scb->p_cos->getcfg(p_scb->hndl, cfg.codec_info, &p_scb->sep_info_idx, - p_info->seid, &cfg.num_protect, cfg.protect_info); + APPL_TRACE_DEBUG("%s: num_seps:%d sep_info_idx:%d wait:x%x", __func__, + p_scb->num_seps, p_scb->sep_info_idx, p_scb->wait); + memcpy(&cfg, p_scb->p_cap, sizeof(tAVDT_CFG)); + /* let application know the capability of the SNK */ + p_scb->p_cos->getcfg(p_scb->hndl, cfg.codec_info, &p_scb->sep_info_idx, + p_info->seid, &cfg.num_protect, cfg.protect_info); - p_scb->sep_info_idx++; - if(p_scb->num_seps > p_scb->sep_info_idx) - { - /* Some devices have seps at the end of the discover list, which is not */ - /* matching media type(video not audio). */ - /* In this case, we are done with getcap without sending another */ - /* request to AVDT. */ - if (!bta_av_next_getcap(p_scb, p_data)) - getcap_done = true; - } - else - getcap_done = true; + p_scb->sep_info_idx++; + if (p_scb->num_seps > p_scb->sep_info_idx) { + /* Some devices have seps at the end of the discover list, which is not */ + /* matching media type(video not audio). */ + /* In this case, we are done with getcap without sending another */ + /* request to AVDT. */ + if (!bta_av_next_getcap(p_scb, p_data)) getcap_done = true; + } else + getcap_done = true; - if (getcap_done) - { - /* we are done getting capabilities. restore the p_cb->sep_info_idx */ - p_scb->sep_info_idx = 0; - p_scb->wait &= ~(BTA_AV_WAIT_ACP_CAPS_ON|BTA_AV_WAIT_ACP_CAPS_STARTED); - if (old_wait & BTA_AV_WAIT_ACP_CAPS_STARTED) - { - bta_av_start_ok (p_scb, NULL); - } + if (getcap_done) { + /* we are done getting capabilities. restore the p_cb->sep_info_idx */ + p_scb->sep_info_idx = 0; + p_scb->wait &= ~(BTA_AV_WAIT_ACP_CAPS_ON | BTA_AV_WAIT_ACP_CAPS_STARTED); + if (old_wait & BTA_AV_WAIT_ACP_CAPS_STARTED) { + bta_av_start_ok(p_scb, NULL); } + } } /******************************************************************************* @@ -1776,10 +1654,8 @@ void bta_av_save_caps(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_set_use_rc (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - p_scb->use_rc = true; +void bta_av_set_use_rc(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + p_scb->use_rc = true; } /******************************************************************************* @@ -1791,14 +1667,12 @@ void bta_av_set_use_rc (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_cco_close (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - uint16_t mtu; +void bta_av_cco_close(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + uint16_t mtu; - mtu = bta_av_chk_mtu(p_scb, BTA_AV_MAX_A2DP_MTU); + mtu = bta_av_chk_mtu(p_scb, BTA_AV_MAX_A2DP_MTU); - p_scb->p_cos->close(p_scb->hndl, mtu); + p_scb->p_cos->close(p_scb->hndl, mtu); } /******************************************************************************* @@ -1810,55 +1684,50 @@ void bta_av_cco_close (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_open_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - - bool is_av_opened = false; - tBTA_AV_SCB * p_opened_scb = NULL; - uint8_t idx; - tBTA_AV_OPEN open; - - APPL_TRACE_DEBUG("%s", __func__); - p_scb->open_status = BTA_AV_FAIL_STREAM; - bta_av_cco_close(p_scb, p_data); - - /* check whether there is already an opened audio or video connection with the same device */ - for (idx = 0; (idx < BTA_AV_NUM_STRS) && (is_av_opened == false); idx++ ) - { - p_opened_scb = bta_av_cb.p_scb[idx]; - if (p_opened_scb && (p_opened_scb->state == BTA_AV_OPEN_SST) && (!bdcmp(p_opened_scb->peer_addr,p_scb->peer_addr )) ) - is_av_opened = true; - - } - - /* if there is already an active AV connnection with the same bd_addr, - don't send disconnect req, just report the open event with BTA_AV_FAIL_GET_CAP status */ - if (is_av_opened == true) - { - bdcpy(open.bd_addr, p_scb->peer_addr); - open.chnl = p_scb->chnl; - open.hndl = p_scb->hndl; - open.status = BTA_AV_FAIL_GET_CAP; - open.starting = bta_av_chk_start(p_scb); - open.edr = 0; - /* set the state back to initial state */ - bta_av_set_scb_sst_init(p_scb); - - if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC ) - open.sep = AVDT_TSEP_SNK; - else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK ) - open.sep = AVDT_TSEP_SRC; - - (*bta_av_cb.p_cback)(BTA_AV_OPEN_EVT, (tBTA_AV *) &open); - - } - else - { - AVDT_DisconnectReq(p_scb->peer_addr, bta_av_dt_cback[p_scb->hdi]); - } +void bta_av_open_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + bool is_av_opened = false; + tBTA_AV_SCB* p_opened_scb = NULL; + uint8_t idx; + tBTA_AV_OPEN open; + + APPL_TRACE_DEBUG("%s", __func__); + p_scb->open_status = BTA_AV_FAIL_STREAM; + bta_av_cco_close(p_scb, p_data); + + /* check whether there is already an opened audio or video connection with the + * same device */ + for (idx = 0; (idx < BTA_AV_NUM_STRS) && (is_av_opened == false); idx++) { + p_opened_scb = bta_av_cb.p_scb[idx]; + if (p_opened_scb && (p_opened_scb->state == BTA_AV_OPEN_SST) && + (!bdcmp(p_opened_scb->peer_addr, p_scb->peer_addr))) + is_av_opened = true; + } + + /* if there is already an active AV connnection with the same bd_addr, + don't send disconnect req, just report the open event with + BTA_AV_FAIL_GET_CAP status */ + if (is_av_opened == true) { + bdcpy(open.bd_addr, p_scb->peer_addr); + open.chnl = p_scb->chnl; + open.hndl = p_scb->hndl; + open.status = BTA_AV_FAIL_GET_CAP; + open.starting = bta_av_chk_start(p_scb); + open.edr = 0; + /* set the state back to initial state */ + bta_av_set_scb_sst_init(p_scb); + + if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC) + open.sep = AVDT_TSEP_SNK; + else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK) + open.sep = AVDT_TSEP_SRC; + + (*bta_av_cb.p_cback)(BTA_AV_OPEN_EVT, (tBTA_AV*)&open); + + } else { + AVDT_DisconnectReq(p_scb->peer_addr, bta_av_dt_cback[p_scb->hdi]); + } } - /******************************************************************************* * * Function bta_av_getcap_results @@ -1870,79 +1739,72 @@ void bta_av_open_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_getcap_results (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tAVDT_CFG cfg; - uint8_t media_type; - tAVDT_SEP_INFO *p_info = &p_scb->sep_info[p_scb->sep_info_idx]; - uint16_t uuid_int; /* UUID for which connection was initiatied */ - - memcpy(&cfg, &p_scb->cfg, sizeof(tAVDT_CFG)); - cfg.num_codec = 1; - cfg.num_protect = p_scb->p_cap->num_protect; - memcpy(cfg.codec_info, p_scb->p_cap->codec_info, AVDT_CODEC_SIZE); - memcpy(cfg.protect_info, p_scb->p_cap->protect_info, AVDT_PROTECT_SIZE); - media_type = A2DP_GetMediaType(p_scb->p_cap->codec_info); - - APPL_TRACE_DEBUG("%s: num_codec %d", __func__, p_scb->p_cap->num_codec); - APPL_TRACE_DEBUG("%s: media type x%x, x%x", __func__, media_type, - p_scb->media_type); - - /* if codec present and we get a codec configuration */ - if ((p_scb->p_cap->num_codec != 0) && - (media_type == p_scb->media_type) && - (p_scb->p_cos->getcfg(p_scb->hndl, cfg.codec_info, - &p_scb->sep_info_idx, p_info->seid, - &cfg.num_protect, cfg.protect_info) == - A2DP_SUCCESS)) { - /* save copy of codec configuration */ - memcpy(&p_scb->cfg, &cfg, sizeof(tAVDT_CFG)); - - uuid_int = p_scb->uuid_int; - APPL_TRACE_DEBUG("%s: initiator UUID = 0x%x", __func__, uuid_int); - if (uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) - bta_av_adjust_seps_idx(p_scb, bta_av_get_scb_handle(p_scb, AVDT_TSEP_SRC)); - else if (uuid_int == UUID_SERVCLASS_AUDIO_SINK) - bta_av_adjust_seps_idx(p_scb, bta_av_get_scb_handle(p_scb, AVDT_TSEP_SNK)); - - /* use only the services peer supports */ - cfg.psc_mask &= p_scb->p_cap->psc_mask; - p_scb->cur_psc_mask = cfg.psc_mask; - - if ((uuid_int == UUID_SERVCLASS_AUDIO_SINK) && - (p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback != NULL)) - { - APPL_TRACE_DEBUG("%s: configure decoder for Sink connection", - __func__); - tBTA_AV_MEDIA av_sink_codec_info; - memcpy(av_sink_codec_info.avk_config.bd_addr, p_scb->peer_addr, - sizeof(BD_ADDR)); - av_sink_codec_info.avk_config.codec_info = p_scb->cfg.codec_info; - p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback(BTA_AV_SINK_MEDIA_CFG_EVT, - &av_sink_codec_info); - } +void bta_av_getcap_results(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tAVDT_CFG cfg; + uint8_t media_type; + tAVDT_SEP_INFO* p_info = &p_scb->sep_info[p_scb->sep_info_idx]; + uint16_t uuid_int; /* UUID for which connection was initiatied */ + + memcpy(&cfg, &p_scb->cfg, sizeof(tAVDT_CFG)); + cfg.num_codec = 1; + cfg.num_protect = p_scb->p_cap->num_protect; + memcpy(cfg.codec_info, p_scb->p_cap->codec_info, AVDT_CODEC_SIZE); + memcpy(cfg.protect_info, p_scb->p_cap->protect_info, AVDT_PROTECT_SIZE); + media_type = A2DP_GetMediaType(p_scb->p_cap->codec_info); + + APPL_TRACE_DEBUG("%s: num_codec %d", __func__, p_scb->p_cap->num_codec); + APPL_TRACE_DEBUG("%s: media type x%x, x%x", __func__, media_type, + p_scb->media_type); + + /* if codec present and we get a codec configuration */ + if ((p_scb->p_cap->num_codec != 0) && (media_type == p_scb->media_type) && + (p_scb->p_cos->getcfg(p_scb->hndl, cfg.codec_info, &p_scb->sep_info_idx, + p_info->seid, &cfg.num_protect, + cfg.protect_info) == A2DP_SUCCESS)) { + /* save copy of codec configuration */ + memcpy(&p_scb->cfg, &cfg, sizeof(tAVDT_CFG)); + + uuid_int = p_scb->uuid_int; + APPL_TRACE_DEBUG("%s: initiator UUID = 0x%x", __func__, uuid_int); + if (uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) + bta_av_adjust_seps_idx(p_scb, + bta_av_get_scb_handle(p_scb, AVDT_TSEP_SRC)); + else if (uuid_int == UUID_SERVCLASS_AUDIO_SINK) + bta_av_adjust_seps_idx(p_scb, + bta_av_get_scb_handle(p_scb, AVDT_TSEP_SNK)); + + /* use only the services peer supports */ + cfg.psc_mask &= p_scb->p_cap->psc_mask; + p_scb->cur_psc_mask = cfg.psc_mask; + + if ((uuid_int == UUID_SERVCLASS_AUDIO_SINK) && + (p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback != NULL)) { + APPL_TRACE_DEBUG("%s: configure decoder for Sink connection", __func__); + tBTA_AV_MEDIA av_sink_codec_info; + memcpy(av_sink_codec_info.avk_config.bd_addr, p_scb->peer_addr, + sizeof(BD_ADDR)); + av_sink_codec_info.avk_config.codec_info = p_scb->cfg.codec_info; + p_scb->seps[p_scb->sep_idx].p_app_sink_data_cback( + BTA_AV_SINK_MEDIA_CFG_EVT, &av_sink_codec_info); + } - if (uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) { - A2DP_AdjustCodec(cfg.codec_info); - } + if (uuid_int == UUID_SERVCLASS_AUDIO_SOURCE) { + A2DP_AdjustCodec(cfg.codec_info); + } - /* open the stream */ - AVDT_OpenReq(p_scb->seps[p_scb->sep_idx].av_handle, p_scb->peer_addr, - p_scb->sep_info[p_scb->sep_info_idx].seid, &cfg); + /* open the stream */ + AVDT_OpenReq(p_scb->seps[p_scb->sep_idx].av_handle, p_scb->peer_addr, + p_scb->sep_info[p_scb->sep_info_idx].seid, &cfg); - if (!bta_av_is_rcfg_sst(p_scb)) - { - /* free capabilities buffer */ - osi_free_and_reset((void **)&p_scb->p_cap); - } + if (!bta_av_is_rcfg_sst(p_scb)) { + /* free capabilities buffer */ + osi_free_and_reset((void**)&p_scb->p_cap); } - else - { - /* try the next stream, if any */ - p_scb->sep_info_idx++; - bta_av_next_getcap(p_scb, p_data); - } - + } else { + /* try the next stream, if any */ + p_scb->sep_info_idx++; + bta_av_next_getcap(p_scb, p_data); + } } /******************************************************************************* @@ -1954,18 +1816,17 @@ void bta_av_getcap_results (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_setconfig_rej (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_REJECT reject; - uint8_t avdt_handle = p_data->ci_setconfig.avdt_handle; +void bta_av_setconfig_rej(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_REJECT reject; + uint8_t avdt_handle = p_data->ci_setconfig.avdt_handle; - bta_av_adjust_seps_idx(p_scb, avdt_handle); - APPL_TRACE_DEBUG("%s: sep_idx: %d", __func__, p_scb->sep_idx); - AVDT_ConfigRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_UNSUP_CFG, 0); + bta_av_adjust_seps_idx(p_scb, avdt_handle); + APPL_TRACE_DEBUG("%s: sep_idx: %d", __func__, p_scb->sep_idx); + AVDT_ConfigRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_UNSUP_CFG, 0); - bdcpy(reject.bd_addr, p_data->str_msg.bd_addr); - reject.hndl = p_scb->hndl; - (*bta_av_cb.p_cback)(BTA_AV_REJECT_EVT, (tBTA_AV *) &reject); + bdcpy(reject.bd_addr, p_data->str_msg.bd_addr); + reject.hndl = p_scb->hndl; + (*bta_av_cb.p_cback)(BTA_AV_REJECT_EVT, (tBTA_AV*)&reject); } /******************************************************************************* @@ -1977,12 +1838,11 @@ void bta_av_setconfig_rej (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_discover_req (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - /* send avdtp discover request */ +void bta_av_discover_req(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + /* send avdtp discover request */ - AVDT_DiscoverReq(p_scb->peer_addr, p_scb->sep_info, BTA_AV_NUM_SEPS, bta_av_dt_cback[p_scb->hdi]); + AVDT_DiscoverReq(p_scb->peer_addr, p_scb->sep_info, BTA_AV_NUM_SEPS, + bta_av_dt_cback[p_scb->hdi]); } /******************************************************************************* @@ -1994,10 +1854,9 @@ void bta_av_discover_req (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_conn_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - p_scb->open_status = BTA_AV_FAIL_STREAM; - bta_av_str_closed(p_scb, p_data); +void bta_av_conn_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + p_scb->open_status = BTA_AV_FAIL_STREAM; + bta_av_str_closed(p_scb, p_data); } /******************************************************************************* @@ -2009,50 +1868,45 @@ void bta_av_conn_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_do_start (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - uint8_t policy = HCI_ENABLE_SNIFF_MODE; - uint8_t cur_role; +void bta_av_do_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + uint8_t policy = HCI_ENABLE_SNIFF_MODE; + uint8_t cur_role; - APPL_TRACE_DEBUG("%s: sco_occupied:%d, role:x%x, started:%d", __func__, - bta_av_cb.sco_occupied, p_scb->role, p_scb->started); - if (bta_av_cb.sco_occupied) - { - bta_av_start_failed(p_scb, p_data); - return; - } + APPL_TRACE_DEBUG("%s: sco_occupied:%d, role:x%x, started:%d", __func__, + bta_av_cb.sco_occupied, p_scb->role, p_scb->started); + if (bta_av_cb.sco_occupied) { + bta_av_start_failed(p_scb, p_data); + return; + } - /* disallow role switch during streaming, only if we are the master role - * i.e. allow role switch, if we are slave. - * It would not hurt us, if the peer device wants us to be master */ - if ((BTM_GetRole (p_scb->peer_addr, &cur_role) == BTM_SUCCESS) && - (cur_role == BTM_ROLE_MASTER) ) - { - policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; - } + /* disallow role switch during streaming, only if we are the master role + * i.e. allow role switch, if we are slave. + * It would not hurt us, if the peer device wants us to be master */ + if ((BTM_GetRole(p_scb->peer_addr, &cur_role) == BTM_SUCCESS) && + (cur_role == BTM_ROLE_MASTER)) { + policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; + } - bta_sys_clear_policy(BTA_ID_AV, policy, p_scb->peer_addr); + bta_sys_clear_policy(BTA_ID_AV, policy, p_scb->peer_addr); - if ((p_scb->started == false) && ((p_scb->role & BTA_AV_ROLE_START_INT) == 0)) - { - p_scb->role |= BTA_AV_ROLE_START_INT; - bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + if ((p_scb->started == false) && + ((p_scb->role & BTA_AV_ROLE_START_INT) == 0)) { + p_scb->role |= BTA_AV_ROLE_START_INT; + bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); - AVDT_StartReq(&p_scb->avdt_handle, 1); - } - else if (p_scb->started) - { - p_scb->role |= BTA_AV_ROLE_START_INT; - if ( p_scb->wait == 0 ) { - if (p_scb->role & BTA_AV_ROLE_SUSPEND) { - notify_start_failed(p_scb); - } else { - bta_av_start_ok(p_scb, NULL); - } - } + AVDT_StartReq(&p_scb->avdt_handle, 1); + } else if (p_scb->started) { + p_scb->role |= BTA_AV_ROLE_START_INT; + if (p_scb->wait == 0) { + if (p_scb->role & BTA_AV_ROLE_SUSPEND) { + notify_start_failed(p_scb); + } else { + bta_av_start_ok(p_scb, NULL); + } } - APPL_TRACE_DEBUG("%s: started %d role:x%x", __func__, p_scb->started, - p_scb->role); + } + APPL_TRACE_DEBUG("%s: started %d role:x%x", __func__, p_scb->started, + p_scb->role); } /******************************************************************************* @@ -2064,88 +1918,80 @@ void bta_av_do_start (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_str_stopped (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_SUSPEND suspend_rsp; - uint8_t start = p_scb->started; - bool sus_evt = true; - BT_HDR *p_buf; - uint8_t policy = HCI_ENABLE_SNIFF_MODE; - - APPL_TRACE_ERROR("%s: audio_open_cnt=%d, p_data %x", __func__, - bta_av_cb.audio_open_cnt, p_data); - - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); - if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 || bta_av_cb.audio_open_cnt == 1) - policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; - bta_sys_set_policy(BTA_ID_AV, policy, p_scb->peer_addr); +void bta_av_str_stopped(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_SUSPEND suspend_rsp; + uint8_t start = p_scb->started; + bool sus_evt = true; + BT_HDR* p_buf; + uint8_t policy = HCI_ENABLE_SNIFF_MODE; - if (p_scb->co_started) - { - vendor_get_interface()->send_command( - (vendor_opcode_t)BT_VND_OP_A2DP_OFFLOAD_STOP, - (void*)&p_scb->l2c_cid); - if (p_scb->offload_start_pending) { - tBTA_AV_STATUS status = BTA_AV_FAIL_STREAM; - (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV *)&status); - } - p_scb->offload_start_pending = false; + APPL_TRACE_ERROR("%s: audio_open_cnt=%d, p_data %x", __func__, + bta_av_cb.audio_open_cnt, p_data); - bta_av_stream_chg(p_scb, false); - p_scb->co_started = false; + bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 || + bta_av_cb.audio_open_cnt == 1) + policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; + bta_sys_set_policy(BTA_ID_AV, policy, p_scb->peer_addr); - p_scb->p_cos->stop(p_scb->hndl); - L2CA_SetFlushTimeout(p_scb->peer_addr, L2CAP_DEFAULT_FLUSH_TO); + if (p_scb->co_started) { + vendor_get_interface()->send_command( + (vendor_opcode_t)BT_VND_OP_A2DP_OFFLOAD_STOP, (void*)&p_scb->l2c_cid); + if (p_scb->offload_start_pending) { + tBTA_AV_STATUS status = BTA_AV_FAIL_STREAM; + (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV*)&status); } + p_scb->offload_start_pending = false; - /* if q_info.a2dp_list is not empty, drop it now */ - if (BTA_AV_CHNL_AUDIO == p_scb->chnl) { - while (!list_is_empty(p_scb->a2dp_list)) - { - p_buf = (BT_HDR *)list_front(p_scb->a2dp_list); - list_remove(p_scb->a2dp_list, p_buf); - osi_free(p_buf); - } + bta_av_stream_chg(p_scb, false); + p_scb->co_started = false; - /* drop the audio buffers queued in L2CAP */ - if (p_data && p_data->api_stop.flush) - L2CA_FlushChannel (p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); - } + p_scb->p_cos->stop(p_scb->hndl); + L2CA_SetFlushTimeout(p_scb->peer_addr, L2CAP_DEFAULT_FLUSH_TO); + } - suspend_rsp.chnl = p_scb->chnl; - suspend_rsp.hndl = p_scb->hndl; + /* if q_info.a2dp_list is not empty, drop it now */ + if (BTA_AV_CHNL_AUDIO == p_scb->chnl) { + while (!list_is_empty(p_scb->a2dp_list)) { + p_buf = (BT_HDR*)list_front(p_scb->a2dp_list); + list_remove(p_scb->a2dp_list, p_buf); + osi_free(p_buf); + } - if (p_data && p_data->api_stop.suspend) - { - APPL_TRACE_DEBUG("%s: suspending: %d, sup:%d", __func__, start, - p_scb->suspend_sup); - if ((start) && (p_scb->suspend_sup)) - { - sus_evt = false; - p_scb->l2c_bufs = 0; - AVDT_SuspendReq(&p_scb->avdt_handle, 1); - } + /* drop the audio buffers queued in L2CAP */ + if (p_data && p_data->api_stop.flush) + L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); + } + + suspend_rsp.chnl = p_scb->chnl; + suspend_rsp.hndl = p_scb->hndl; + + if (p_data && p_data->api_stop.suspend) { + APPL_TRACE_DEBUG("%s: suspending: %d, sup:%d", __func__, start, + p_scb->suspend_sup); + if ((start) && (p_scb->suspend_sup)) { + sus_evt = false; + p_scb->l2c_bufs = 0; + AVDT_SuspendReq(&p_scb->avdt_handle, 1); + } + + /* send SUSPEND_EVT event only if not in reconfiguring state and sus_evt is + * true*/ + if ((sus_evt) && (p_scb->state != BTA_AV_RCFG_SST)) { + suspend_rsp.status = BTA_AV_SUCCESS; + suspend_rsp.initiator = true; + (*bta_av_cb.p_cback)(BTA_AV_SUSPEND_EVT, (tBTA_AV*)&suspend_rsp); + } + } else { + suspend_rsp.status = BTA_AV_SUCCESS; + suspend_rsp.initiator = true; + APPL_TRACE_EVENT("%s: status %d", __func__, suspend_rsp.status); - /* send SUSPEND_EVT event only if not in reconfiguring state and sus_evt is true*/ - if ((sus_evt)&&(p_scb->state != BTA_AV_RCFG_SST)) - { - suspend_rsp.status = BTA_AV_SUCCESS; - suspend_rsp.initiator = true; - (*bta_av_cb.p_cback)(BTA_AV_SUSPEND_EVT, (tBTA_AV *) &suspend_rsp); - } - } - else - { - suspend_rsp.status = BTA_AV_SUCCESS; - suspend_rsp.initiator = true; - APPL_TRACE_EVENT("%s: status %d", __func__, suspend_rsp.status); - - /* send STOP_EVT event only if not in reconfiguring state */ - if (p_scb->state != BTA_AV_RCFG_SST) - { - (*bta_av_cb.p_cback)(BTA_AV_STOP_EVT, (tBTA_AV *) &suspend_rsp); - } + /* send STOP_EVT event only if not in reconfiguring state */ + if (p_scb->state != BTA_AV_RCFG_SST) { + (*bta_av_cb.p_cback)(BTA_AV_STOP_EVT, (tBTA_AV*)&suspend_rsp); } + } } /******************************************************************************* @@ -2159,64 +2005,56 @@ void bta_av_str_stopped (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_reconfig (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tAVDT_CFG *p_cfg; - tBTA_AV_API_STOP stop; - tBTA_AV_API_RCFG *p_rcfg = &p_data->api_reconfig; - - APPL_TRACE_DEBUG("%s: r:%d, s:%d idx: %d (o:%d)", __func__, - p_scb->recfg_sup, p_scb->suspend_sup, - p_scb->rcfg_idx, p_scb->sep_info_idx); - - p_scb->num_recfg = 0; - /* store the new configuration in control block */ - if (p_scb->p_cap == NULL) - p_scb->p_cap = (tAVDT_CFG *)osi_malloc(sizeof(tAVDT_CFG)); - p_cfg = p_scb->p_cap; - - alarm_cancel(p_scb->avrc_ct_timer); +void bta_av_reconfig(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tAVDT_CFG* p_cfg; + tBTA_AV_API_STOP stop; + tBTA_AV_API_RCFG* p_rcfg = &p_data->api_reconfig; + + APPL_TRACE_DEBUG("%s: r:%d, s:%d idx: %d (o:%d)", __func__, p_scb->recfg_sup, + p_scb->suspend_sup, p_scb->rcfg_idx, p_scb->sep_info_idx); + + p_scb->num_recfg = 0; + /* store the new configuration in control block */ + if (p_scb->p_cap == NULL) + p_scb->p_cap = (tAVDT_CFG*)osi_malloc(sizeof(tAVDT_CFG)); + p_cfg = p_scb->p_cap; + + alarm_cancel(p_scb->avrc_ct_timer); + + memcpy(p_cfg, &p_scb->cfg, sizeof(tAVDT_CFG)); + p_cfg->num_protect = p_rcfg->num_protect; + memcpy(p_cfg->codec_info, p_rcfg->codec_info, AVDT_CODEC_SIZE); + memcpy(p_cfg->protect_info, p_rcfg->p_protect_info, p_rcfg->num_protect); + p_scb->rcfg_idx = p_rcfg->sep_info_idx; + p_scb->p_cap->psc_mask = p_scb->cur_psc_mask; + + /* if the requested index differs from the current one, we can only close/open + */ + if ((p_scb->rcfg_idx == p_scb->sep_info_idx) && (p_rcfg->suspend) && + (p_scb->recfg_sup) && (p_scb->suspend_sup)) { + if (p_scb->started) { + stop.flush = false; + stop.suspend = true; + bta_av_str_stopped(p_scb, (tBTA_AV_DATA*)&stop); + } else { + APPL_TRACE_DEBUG("%s: reconfig", __func__); + AVDT_ReconfigReq(p_scb->avdt_handle, p_scb->p_cap); + p_scb->p_cap->psc_mask = p_scb->cur_psc_mask; + } + } else { + /* close the stream */ + APPL_TRACE_DEBUG("%s: close/open num_protect: %d", __func__, + p_cfg->num_protect); + if (p_scb->started) { + bta_av_str_stopped(p_scb, NULL); + p_scb->started = false; - memcpy(p_cfg, &p_scb->cfg, sizeof(tAVDT_CFG)); - p_cfg->num_protect = p_rcfg->num_protect; - memcpy(p_cfg->codec_info, p_rcfg->codec_info, AVDT_CODEC_SIZE); - memcpy(p_cfg->protect_info, p_rcfg->p_protect_info, p_rcfg->num_protect); - p_scb->rcfg_idx = p_rcfg->sep_info_idx; - p_scb->p_cap->psc_mask = p_scb->cur_psc_mask; + /* drop the buffers queued in L2CAP */ + L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); - /* if the requested index differs from the current one, we can only close/open */ - if ((p_scb->rcfg_idx == p_scb->sep_info_idx) && - (p_rcfg->suspend)&& (p_scb->recfg_sup) && (p_scb->suspend_sup)) - { - if(p_scb->started) - { - stop.flush = false; - stop.suspend = true; - bta_av_str_stopped(p_scb, (tBTA_AV_DATA *)&stop); - } - else - { - APPL_TRACE_DEBUG("%s: reconfig", __func__); - AVDT_ReconfigReq(p_scb->avdt_handle, p_scb->p_cap); - p_scb->p_cap->psc_mask = p_scb->cur_psc_mask; - } - } - else - { - /* close the stream */ - APPL_TRACE_DEBUG("%s: close/open num_protect: %d", __func__, - p_cfg->num_protect); - if(p_scb->started) - { - bta_av_str_stopped(p_scb, NULL); - p_scb->started = false; - - /* drop the buffers queued in L2CAP */ - L2CA_FlushChannel (p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); - - AVDT_CloseReq(p_scb->avdt_handle); - } + AVDT_CloseReq(p_scb->avdt_handle); } + } } /******************************************************************************* @@ -2228,89 +2066,73 @@ void bta_av_reconfig (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_data_path (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - BT_HDR *p_buf = NULL; - uint32_t timestamp; - bool new_buf = false; - tA2DP_CODEC_TYPE codec_type = A2DP_GetCodecType(p_scb->cfg.codec_info); - uint8_t m_pt = 0x60 | codec_type; - tAVDT_DATA_OPT_MASK opt; - - if (p_scb->cong) - return; - - //Always get the current number of bufs que'd up - p_scb->l2c_bufs = (uint8_t)L2CA_FlushChannel (p_scb->l2c_cid, L2CAP_FLUSH_CHANS_GET); - - if (!list_is_empty(p_scb->a2dp_list)) { - p_buf = (BT_HDR *)list_front(p_scb->a2dp_list); - list_remove(p_scb->a2dp_list, p_buf); - /* use q_info.a2dp data, read the timestamp */ - timestamp = *(uint32_t *)(p_buf + 1); - } - else - { - new_buf = true; - /* A2DP_list empty, call co_data, dup data to other channels */ - p_buf = (BT_HDR *)p_scb->p_cos->data(p_scb->cfg.codec_info, - ×tamp); - - if (p_buf) - { - /* use the offset area for the time stamp */ - *(uint32_t *)(p_buf + 1) = timestamp; - - /* dup the data to other channels */ - bta_av_dup_audio_buf(p_scb, p_buf); - } - } - - if(p_buf) - { - if(p_scb->l2c_bufs < (BTA_AV_QUEUE_DATA_CHK_NUM)) - { - /* There's a buffer, just queue it to L2CAP. - * There's no need to increment it here, it is always read from - * L2CAP (see above). - */ - - /* opt is a bit mask, it could have several options set */ - opt = AVDT_DATA_OPT_NONE; - if (p_scb->no_rtp_hdr) - { - opt |= AVDT_DATA_OPT_NO_RTP; - } - - AVDT_WriteReqOpt(p_scb->avdt_handle, p_buf, timestamp, m_pt, opt); - p_scb->cong = true; - } - else - { - /* there's a buffer, but L2CAP does not seem to be moving data */ - if(new_buf) - { - /* just got this buffer from co_data, - * put it in queue */ - list_append(p_scb->a2dp_list, p_buf); - } - else - { - /* just dequeue it from the a2dp_list */ - if (list_length(p_scb->a2dp_list) < 3) { - /* put it back to the queue */ - list_prepend(p_scb->a2dp_list, p_buf); - } - else - { - /* too many buffers in a2dp_list, drop it. */ - bta_av_co_audio_drop(p_scb->hndl); - osi_free(p_buf); - } - } +void bta_av_data_path(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + BT_HDR* p_buf = NULL; + uint32_t timestamp; + bool new_buf = false; + tA2DP_CODEC_TYPE codec_type = A2DP_GetCodecType(p_scb->cfg.codec_info); + uint8_t m_pt = 0x60 | codec_type; + tAVDT_DATA_OPT_MASK opt; + + if (p_scb->cong) return; + + // Always get the current number of bufs que'd up + p_scb->l2c_bufs = + (uint8_t)L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_GET); + + if (!list_is_empty(p_scb->a2dp_list)) { + p_buf = (BT_HDR*)list_front(p_scb->a2dp_list); + list_remove(p_scb->a2dp_list, p_buf); + /* use q_info.a2dp data, read the timestamp */ + timestamp = *(uint32_t*)(p_buf + 1); + } else { + new_buf = true; + /* A2DP_list empty, call co_data, dup data to other channels */ + p_buf = (BT_HDR*)p_scb->p_cos->data(p_scb->cfg.codec_info, ×tamp); + + if (p_buf) { + /* use the offset area for the time stamp */ + *(uint32_t*)(p_buf + 1) = timestamp; + + /* dup the data to other channels */ + bta_av_dup_audio_buf(p_scb, p_buf); + } + } + + if (p_buf) { + if (p_scb->l2c_bufs < (BTA_AV_QUEUE_DATA_CHK_NUM)) { + /* There's a buffer, just queue it to L2CAP. + * There's no need to increment it here, it is always read from + * L2CAP (see above). + */ + + /* opt is a bit mask, it could have several options set */ + opt = AVDT_DATA_OPT_NONE; + if (p_scb->no_rtp_hdr) { + opt |= AVDT_DATA_OPT_NO_RTP; + } + + AVDT_WriteReqOpt(p_scb->avdt_handle, p_buf, timestamp, m_pt, opt); + p_scb->cong = true; + } else { + /* there's a buffer, but L2CAP does not seem to be moving data */ + if (new_buf) { + /* just got this buffer from co_data, + * put it in queue */ + list_append(p_scb->a2dp_list, p_buf); + } else { + /* just dequeue it from the a2dp_list */ + if (list_length(p_scb->a2dp_list) < 3) { + /* put it back to the queue */ + list_prepend(p_scb->a2dp_list, p_buf); + } else { + /* too many buffers in a2dp_list, drop it. */ + bta_av_co_audio_drop(p_scb->hndl); + osi_free(p_buf); } + } } + } } /******************************************************************************* @@ -2322,176 +2144,164 @@ void bta_av_data_path (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_start_ok (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_START start; - tBTA_AV_API_STOP stop; - bool initiator = false; - bool suspend = false; - uint16_t flush_to; - uint8_t new_role = p_scb->role; - BT_HDR hdr; - uint8_t policy = HCI_ENABLE_SNIFF_MODE; - uint8_t cur_role; - - APPL_TRACE_DEBUG("%s: wait:x%x, role:x%x", __func__, p_scb->wait, - p_scb->role); - - p_scb->started = true; - if (p_scb->sco_suspend) - { - p_scb->sco_suspend = false; - } - - if (new_role & BTA_AV_ROLE_START_INT) - initiator = true; - - /* for A2DP SINK we do not send get_caps */ - if ((p_scb->avdt_handle == p_scb->seps[p_scb->sep_idx].av_handle) - &&(p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK)) - { - p_scb->wait &= ~(BTA_AV_WAIT_ACP_CAPS_ON); - APPL_TRACE_DEBUG("%s: local SEP type is SNK new wait is 0x%x", - __func__, p_scb->wait); - } - if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_FAILED) - { - /* role switch has failed */ - p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_FAILED; - p_data = (tBTA_AV_DATA *)&hdr; - hdr.offset = BTA_AV_RS_FAIL; - } - APPL_TRACE_DEBUG("%s: wait:x%x", __func__, p_scb->wait); - - if (p_data && (p_data->hdr.offset != BTA_AV_RS_NONE)) - { - p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; - if (p_data->hdr.offset == BTA_AV_RS_FAIL) - { - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); - start.chnl = p_scb->chnl; - start.status = BTA_AV_FAIL_ROLE; - start.hndl = p_scb->hndl; - start.initiator = initiator; - (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV *) &start); - return; - } - } - - if (!bta_av_link_role_ok(p_scb, A2DP_SET_ONE_BIT)) - p_scb->q_tag = BTA_AV_Q_TAG_START; - else - { - /* The wait flag may be set here while we are already master on the link */ - /* this could happen if a role switch complete event occurred during reconfig */ - /* if we are now master on the link, there is no need to wait for the role switch, */ - /* complete anymore so we can clear the wait for role switch flag */ - p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; - } - - if (p_scb->wait & (BTA_AV_WAIT_ROLE_SW_RES_OPEN|BTA_AV_WAIT_ROLE_SW_RES_START)) - { - p_scb->wait |= BTA_AV_WAIT_ROLE_SW_STARTED; - p_scb->q_tag = BTA_AV_Q_TAG_START; - } +void bta_av_start_ok(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_START start; + tBTA_AV_API_STOP stop; + bool initiator = false; + bool suspend = false; + uint16_t flush_to; + uint8_t new_role = p_scb->role; + BT_HDR hdr; + uint8_t policy = HCI_ENABLE_SNIFF_MODE; + uint8_t cur_role; - if (p_scb->wait) - { - APPL_TRACE_ERROR("%s: wait:x%x q_tag:%d- not started", __func__, - p_scb->wait, p_scb->q_tag); - /* Clear first bit of p_scb->wait and not to return from this point else - * HAL layer gets blocked. And if there is delay in Get Capability response as - * first bit of p_scb->wait is cleared hence it ensures bt_av_start_ok is not called - * again from bta_av_save_caps. - */ - p_scb->wait &= ~BTA_AV_WAIT_ACP_CAPS_ON; - } + APPL_TRACE_DEBUG("%s: wait:x%x, role:x%x", __func__, p_scb->wait, + p_scb->role); - /* tell role manager to check M/S role */ - bta_sys_conn_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); - - bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); - - if(p_scb->media_type == AVDT_MEDIA_TYPE_AUDIO) - { - /* in normal logic, conns should be bta_av_cb.audio_count - 1, - * However, bta_av_stream_chg is not called to increase bta_av_cb.audio_count yet. - * If the code were to be re-arranged for some reasons, this number may need to be changed - */ - p_scb->co_started = bta_av_cb.audio_open_cnt; - flush_to = p_bta_av_cfg->p_audio_flush_to[p_scb->co_started - 1]; - } - else - { - flush_to = p_bta_av_cfg->video_flush_to; - } - L2CA_SetFlushTimeout(p_scb->peer_addr, flush_to ); - - /* clear the congestion flag */ - p_scb->cong = false; - - if (new_role & BTA_AV_ROLE_START_INT) - { - new_role &= ~BTA_AV_ROLE_START_INT; - } - else if ((new_role & BTA_AV_ROLE_AD_ACP) && (new_role & BTA_AV_ROLE_SUSPEND_OPT)) - { - suspend = true; - } + p_scb->started = true; + if (p_scb->sco_suspend) { + p_scb->sco_suspend = false; + } + + if (new_role & BTA_AV_ROLE_START_INT) initiator = true; + + /* for A2DP SINK we do not send get_caps */ + if ((p_scb->avdt_handle == p_scb->seps[p_scb->sep_idx].av_handle) && + (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK)) { + p_scb->wait &= ~(BTA_AV_WAIT_ACP_CAPS_ON); + APPL_TRACE_DEBUG("%s: local SEP type is SNK new wait is 0x%x", __func__, + p_scb->wait); + } + if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_FAILED) { + /* role switch has failed */ + p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_FAILED; + p_data = (tBTA_AV_DATA*)&hdr; + hdr.offset = BTA_AV_RS_FAIL; + } + APPL_TRACE_DEBUG("%s: wait:x%x", __func__, p_scb->wait); + + if (p_data && (p_data->hdr.offset != BTA_AV_RS_NONE)) { + p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; + if (p_data->hdr.offset == BTA_AV_RS_FAIL) { + bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + start.chnl = p_scb->chnl; + start.status = BTA_AV_FAIL_ROLE; + start.hndl = p_scb->hndl; + start.initiator = initiator; + (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV*)&start); + return; + } + } + + if (!bta_av_link_role_ok(p_scb, A2DP_SET_ONE_BIT)) + p_scb->q_tag = BTA_AV_Q_TAG_START; + else { + /* The wait flag may be set here while we are already master on the link */ + /* this could happen if a role switch complete event occurred during + * reconfig */ + /* if we are now master on the link, there is no need to wait for the role + * switch, */ + /* complete anymore so we can clear the wait for role switch flag */ + p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; + } + + if (p_scb->wait & + (BTA_AV_WAIT_ROLE_SW_RES_OPEN | BTA_AV_WAIT_ROLE_SW_RES_START)) { + p_scb->wait |= BTA_AV_WAIT_ROLE_SW_STARTED; + p_scb->q_tag = BTA_AV_Q_TAG_START; + } + + if (p_scb->wait) { + APPL_TRACE_ERROR("%s: wait:x%x q_tag:%d- not started", __func__, + p_scb->wait, p_scb->q_tag); + /* Clear first bit of p_scb->wait and not to return from this point else + * HAL layer gets blocked. And if there is delay in Get Capability response + * as + * first bit of p_scb->wait is cleared hence it ensures bt_av_start_ok is + * not called + * again from bta_av_save_caps. + */ + p_scb->wait &= ~BTA_AV_WAIT_ACP_CAPS_ON; + } + + /* tell role manager to check M/S role */ + bta_sys_conn_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + + bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + + if (p_scb->media_type == AVDT_MEDIA_TYPE_AUDIO) { + /* in normal logic, conns should be bta_av_cb.audio_count - 1, + * However, bta_av_stream_chg is not called to increase + * bta_av_cb.audio_count yet. + * If the code were to be re-arranged for some reasons, this number may need + * to be changed + */ + p_scb->co_started = bta_av_cb.audio_open_cnt; + flush_to = p_bta_av_cfg->p_audio_flush_to[p_scb->co_started - 1]; + } else { + flush_to = p_bta_av_cfg->video_flush_to; + } + L2CA_SetFlushTimeout(p_scb->peer_addr, flush_to); + + /* clear the congestion flag */ + p_scb->cong = false; + + if (new_role & BTA_AV_ROLE_START_INT) { + new_role &= ~BTA_AV_ROLE_START_INT; + } else if ((new_role & BTA_AV_ROLE_AD_ACP) && + (new_role & BTA_AV_ROLE_SUSPEND_OPT)) { + suspend = true; + } + + if (!suspend) { + p_scb->q_tag = BTA_AV_Q_TAG_STREAM; + bta_av_stream_chg(p_scb, true); + } + + { + /* If sink starts stream, disable sniff mode here */ + if (!initiator) { + /* If souce is the master role, disable role switch during streaming. + * Otherwise allow role switch, if source is slave. + * Because it would not hurt source, if the peer device wants source to be + * master */ + if ((BTM_GetRole(p_scb->peer_addr, &cur_role) == BTM_SUCCESS) && + (cur_role == BTM_ROLE_MASTER)) { + policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; + } - if (!suspend) - { - p_scb->q_tag = BTA_AV_Q_TAG_STREAM; - bta_av_stream_chg(p_scb, true); + bta_sys_clear_policy(BTA_ID_AV, policy, p_scb->peer_addr); } - { - /* If sink starts stream, disable sniff mode here */ - if (!initiator) - { - /* If souce is the master role, disable role switch during streaming. - * Otherwise allow role switch, if source is slave. - * Because it would not hurt source, if the peer device wants source to be master */ - if ((BTM_GetRole (p_scb->peer_addr, &cur_role) == BTM_SUCCESS) && - (cur_role == BTM_ROLE_MASTER) ) - { - policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; - } - - bta_sys_clear_policy(BTA_ID_AV, policy, p_scb->peer_addr); - } + p_scb->role = new_role; + p_scb->role &= ~BTA_AV_ROLE_AD_ACP; + p_scb->role &= ~BTA_AV_ROLE_SUSPEND_OPT; - p_scb->role = new_role; - p_scb->role &= ~BTA_AV_ROLE_AD_ACP; - p_scb->role &= ~BTA_AV_ROLE_SUSPEND_OPT; + p_scb->no_rtp_hdr = false; + p_scb->p_cos->start(p_scb->hndl, p_scb->cfg.codec_info, &p_scb->no_rtp_hdr); + p_scb->co_started = true; - p_scb->no_rtp_hdr = false; - p_scb->p_cos->start(p_scb->hndl, p_scb->cfg.codec_info, - &p_scb->no_rtp_hdr); - p_scb->co_started = true; + APPL_TRACE_DEBUG("%s: suspending: %d, role:x%x, init %d", __func__, suspend, + p_scb->role, initiator); - APPL_TRACE_DEBUG("%s: suspending: %d, role:x%x, init %d", __func__, - suspend, p_scb->role, initiator); + start.suspending = suspend; + start.initiator = initiator; + start.chnl = p_scb->chnl; + start.status = BTA_AV_SUCCESS; + start.hndl = p_scb->hndl; + (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV*)&start); - start.suspending = suspend; - start.initiator = initiator; - start.chnl = p_scb->chnl; - start.status = BTA_AV_SUCCESS; - start.hndl = p_scb->hndl; - (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV *) &start); - - if(suspend) - { - p_scb->role |= BTA_AV_ROLE_SUSPEND; - p_scb->cong = true; /* do not allow the media data to go through */ - /* do not duplicate the media packets to this channel */ - p_scb->p_cos->stop(p_scb->hndl); - p_scb->co_started = false; - stop.flush = false; - stop.suspend = true; - bta_av_ssm_execute(p_scb, BTA_AV_AP_STOP_EVT, (tBTA_AV_DATA *)&stop); - } + if (suspend) { + p_scb->role |= BTA_AV_ROLE_SUSPEND; + p_scb->cong = true; /* do not allow the media data to go through */ + /* do not duplicate the media packets to this channel */ + p_scb->p_cos->stop(p_scb->hndl); + p_scb->co_started = false; + stop.flush = false; + stop.suspend = true; + bta_av_ssm_execute(p_scb, BTA_AV_AP_STOP_EVT, (tBTA_AV_DATA*)&stop); } + } } /******************************************************************************* @@ -2503,17 +2313,16 @@ void bta_av_start_ok (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_start_failed (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - if(p_scb->started == false && p_scb->co_started == false) - { - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); - notify_start_failed(p_scb); - } +void bta_av_start_failed(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + if (p_scb->started == false && p_scb->co_started == false) { + bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + notify_start_failed(p_scb); + } - bta_sys_set_policy(BTA_ID_AV, (HCI_ENABLE_SNIFF_MODE|HCI_ENABLE_MASTER_SLAVE_SWITCH), p_scb->peer_addr); - p_scb->sco_suspend = false; + bta_sys_set_policy(BTA_ID_AV, + (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_MASTER_SLAVE_SWITCH), + p_scb->peer_addr); + p_scb->sco_suspend = false; } /******************************************************************************* @@ -2525,64 +2334,59 @@ void bta_av_start_failed (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_str_closed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV data; - tBTA_AV_EVT event; - uint16_t mtu; - uint8_t policy = HCI_ENABLE_SNIFF_MODE; - - if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 || bta_av_cb.audio_open_cnt == 1) - policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; - bta_sys_set_policy(BTA_ID_AV, policy, p_scb->peer_addr); - if (bta_av_cb.audio_open_cnt <= 1) - { - /* last connection - restore the allow switch flag */ - L2CA_SetDesireRole(L2CAP_ROLE_ALLOW_SWITCH); - } +void bta_av_str_closed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV data; + tBTA_AV_EVT event; + uint16_t mtu; + uint8_t policy = HCI_ENABLE_SNIFF_MODE; + + if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 || + bta_av_cb.audio_open_cnt == 1) + policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; + bta_sys_set_policy(BTA_ID_AV, policy, p_scb->peer_addr); + if (bta_av_cb.audio_open_cnt <= 1) { + /* last connection - restore the allow switch flag */ + L2CA_SetDesireRole(L2CAP_ROLE_ALLOW_SWITCH); + } + + if (p_scb->open_status) { + /* must be failure when opening the stream */ + bdcpy(data.open.bd_addr, p_scb->peer_addr); + data.open.status = p_scb->open_status; + data.open.chnl = p_scb->chnl; + data.open.hndl = p_scb->hndl; + + if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC) + data.open.sep = AVDT_TSEP_SNK; + else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK) + data.open.sep = AVDT_TSEP_SRC; + + event = BTA_AV_OPEN_EVT; + p_scb->open_status = BTA_AV_SUCCESS; - if (p_scb->open_status) - { - /* must be failure when opening the stream */ - bdcpy(data.open.bd_addr, p_scb->peer_addr); - data.open.status = p_scb->open_status; - data.open.chnl = p_scb->chnl; - data.open.hndl = p_scb->hndl; - - if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC ) - data.open.sep = AVDT_TSEP_SNK; - else if (p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SNK ) - data.open.sep = AVDT_TSEP_SRC; - - event = BTA_AV_OPEN_EVT; - p_scb->open_status = BTA_AV_SUCCESS; - - bta_sys_conn_close(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); - bta_av_cleanup(p_scb, p_data); - (*bta_av_cb.p_cback)(event, &data); + bta_sys_conn_close(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + bta_av_cleanup(p_scb, p_data); + (*bta_av_cb.p_cback)(event, &data); + } else { + /* do stop if we were started */ + if (p_scb->co_started) { + bta_av_str_stopped(p_scb, NULL); } - else - { - /* do stop if we were started */ - if (p_scb->co_started) - { - bta_av_str_stopped(p_scb, NULL); - } - /* Update common mtu shared by remaining connectons */ - mtu = bta_av_chk_mtu(p_scb, BTA_AV_MAX_A2DP_MTU); + /* Update common mtu shared by remaining connectons */ + mtu = bta_av_chk_mtu(p_scb, BTA_AV_MAX_A2DP_MTU); - { - p_scb->p_cos->close(p_scb->hndl, mtu); - data.close.chnl = p_scb->chnl; - data.close.hndl = p_scb->hndl; - event = BTA_AV_CLOSE_EVT; + { + p_scb->p_cos->close(p_scb->hndl, mtu); + data.close.chnl = p_scb->chnl; + data.close.hndl = p_scb->hndl; + event = BTA_AV_CLOSE_EVT; - bta_sys_conn_close(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); - bta_av_cleanup(p_scb, p_data); - (*bta_av_cb.p_cback)(event, &data); - } + bta_sys_conn_close(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + bta_av_cleanup(p_scb, p_data); + (*bta_av_cb.p_cback)(event, &data); } + } } /******************************************************************************* @@ -2594,11 +2398,8 @@ void bta_av_str_closed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_clr_cong (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - if(p_scb->co_started) - p_scb->cong = false; +void bta_av_clr_cong(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + if (p_scb->co_started) p_scb->cong = false; } /******************************************************************************* @@ -2610,84 +2411,77 @@ void bta_av_clr_cong (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_suspend_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_SUSPEND suspend_rsp; - uint8_t err_code = p_data->str_msg.msg.hdr.err_code; - uint8_t policy = HCI_ENABLE_SNIFF_MODE; +void bta_av_suspend_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_SUSPEND suspend_rsp; + uint8_t err_code = p_data->str_msg.msg.hdr.err_code; + uint8_t policy = HCI_ENABLE_SNIFF_MODE; - APPL_TRACE_DEBUG("%s: audio_open_cnt = %d, err_code = %d", __func__, - bta_av_cb.audio_open_cnt, err_code); + APPL_TRACE_DEBUG("%s: audio_open_cnt = %d, err_code = %d", __func__, + bta_av_cb.audio_open_cnt, err_code); - if (p_scb->started == false) - { - /* handle the condition where there is a collision of SUSPEND req from either side - ** Second SUSPEND req could be rejected. Do not treat this as a failure - */ - APPL_TRACE_WARNING("%s: already suspended, ignore, err_code %d", - __func__, err_code); - return; - } - - suspend_rsp.status = BTA_AV_SUCCESS; - if (err_code && (err_code != AVDT_ERR_BAD_STATE)) - { - /* Disable suspend feature only with explicit rejection(not with timeout) */ - if (err_code != AVDT_ERR_TIMEOUT) - { - p_scb->suspend_sup = false; - } - suspend_rsp.status = BTA_AV_FAIL; + if (p_scb->started == false) { + /* handle the condition where there is a collision of SUSPEND req from + *either side + ** Second SUSPEND req could be rejected. Do not treat this as a failure + */ + APPL_TRACE_WARNING("%s: already suspended, ignore, err_code %d", __func__, + err_code); + return; + } - APPL_TRACE_ERROR("%s: suspend failed, closing connection", __func__); - - /* SUSPEND failed. Close connection. */ - bta_av_ssm_execute(p_scb, BTA_AV_API_CLOSE_EVT, NULL); - } - else - { - /* only set started to false when suspend is successful */ - p_scb->started = false; + suspend_rsp.status = BTA_AV_SUCCESS; + if (err_code && (err_code != AVDT_ERR_BAD_STATE)) { + /* Disable suspend feature only with explicit rejection(not with timeout) */ + if (err_code != AVDT_ERR_TIMEOUT) { + p_scb->suspend_sup = false; } + suspend_rsp.status = BTA_AV_FAIL; - if (p_scb->role & BTA_AV_ROLE_SUSPEND) - { - p_scb->role &= ~BTA_AV_ROLE_SUSPEND; - p_scb->cong = false; - } + APPL_TRACE_ERROR("%s: suspend failed, closing connection", __func__); - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); - if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 || bta_av_cb.audio_open_cnt == 1) - policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; - bta_sys_set_policy(BTA_ID_AV, policy, p_scb->peer_addr); + /* SUSPEND failed. Close connection. */ + bta_av_ssm_execute(p_scb, BTA_AV_API_CLOSE_EVT, NULL); + } else { + /* only set started to false when suspend is successful */ + p_scb->started = false; + } - /* in case that we received suspend_ind, we may need to call co_stop here */ - if(p_scb->co_started) - { - vendor_get_interface()->send_command( - (vendor_opcode_t)BT_VND_OP_A2DP_OFFLOAD_STOP, - (void*)&p_scb->l2c_cid); - if (p_scb->offload_start_pending) { - tBTA_AV_STATUS status = BTA_AV_FAIL_STREAM; - (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV *)&status); - } - p_scb->offload_start_pending = false; + if (p_scb->role & BTA_AV_ROLE_SUSPEND) { + p_scb->role &= ~BTA_AV_ROLE_SUSPEND; + p_scb->cong = false; + } - bta_av_stream_chg(p_scb, false); + bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 || + bta_av_cb.audio_open_cnt == 1) + policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; + bta_sys_set_policy(BTA_ID_AV, policy, p_scb->peer_addr); - { - p_scb->co_started = false; - p_scb->p_cos->stop(p_scb->hndl); - } - L2CA_SetFlushTimeout(p_scb->peer_addr, L2CAP_DEFAULT_FLUSH_TO); + /* in case that we received suspend_ind, we may need to call co_stop here */ + if (p_scb->co_started) { + vendor_get_interface()->send_command( + (vendor_opcode_t)BT_VND_OP_A2DP_OFFLOAD_STOP, (void*)&p_scb->l2c_cid); + if (p_scb->offload_start_pending) { + tBTA_AV_STATUS status = BTA_AV_FAIL_STREAM; + (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV*)&status); } + p_scb->offload_start_pending = false; + + bta_av_stream_chg(p_scb, false); { - suspend_rsp.chnl = p_scb->chnl; - suspend_rsp.hndl = p_scb->hndl; - suspend_rsp.initiator = p_data->str_msg.initiator; - (*bta_av_cb.p_cback)(BTA_AV_SUSPEND_EVT, (tBTA_AV *) &suspend_rsp); + p_scb->co_started = false; + p_scb->p_cos->stop(p_scb->hndl); } + L2CA_SetFlushTimeout(p_scb->peer_addr, L2CAP_DEFAULT_FLUSH_TO); + } + + { + suspend_rsp.chnl = p_scb->chnl; + suspend_rsp.hndl = p_scb->hndl; + suspend_rsp.initiator = p_data->str_msg.initiator; + (*bta_av_cb.p_cback)(BTA_AV_SUSPEND_EVT, (tBTA_AV*)&suspend_rsp); + } } /******************************************************************************* @@ -2699,30 +2493,28 @@ void bta_av_suspend_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rcfg_str_ok (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_RECONFIG evt; +void bta_av_rcfg_str_ok(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_RECONFIG evt; - p_scb->l2c_cid = AVDT_GetL2CapChannel(p_scb->avdt_handle); - APPL_TRACE_DEBUG("%s: l2c_cid: %d", __func__, p_scb->l2c_cid); + p_scb->l2c_cid = AVDT_GetL2CapChannel(p_scb->avdt_handle); + APPL_TRACE_DEBUG("%s: l2c_cid: %d", __func__, p_scb->l2c_cid); - /* rc listen */ - bta_av_st_rc_timer(p_scb, NULL); - osi_free_and_reset((void **)&p_scb->p_cap); + /* rc listen */ + bta_av_st_rc_timer(p_scb, NULL); + osi_free_and_reset((void**)&p_scb->p_cap); - /* No need to keep the role bits once reconfig is done. */ - p_scb->role &= ~BTA_AV_ROLE_AD_ACP; - p_scb->role &= ~BTA_AV_ROLE_SUSPEND_OPT; - p_scb->role &= ~BTA_AV_ROLE_START_INT; + /* No need to keep the role bits once reconfig is done. */ + p_scb->role &= ~BTA_AV_ROLE_AD_ACP; + p_scb->role &= ~BTA_AV_ROLE_SUSPEND_OPT; + p_scb->role &= ~BTA_AV_ROLE_START_INT; - { - /* reconfigure success */ - evt.status = BTA_AV_SUCCESS; - evt.chnl = p_scb->chnl; - evt.hndl = p_scb->hndl; - (*bta_av_cb.p_cback)(BTA_AV_RECONFIG_EVT, (tBTA_AV *)&evt); - } + { + /* reconfigure success */ + evt.status = BTA_AV_SUCCESS; + evt.chnl = p_scb->chnl; + evt.hndl = p_scb->hndl; + (*bta_av_cb.p_cback)(BTA_AV_RECONFIG_EVT, (tBTA_AV*)&evt); + } } /******************************************************************************* @@ -2734,36 +2526,29 @@ void bta_av_rcfg_str_ok (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_rcfg_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_RECONFIG evt; +void bta_av_rcfg_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_RECONFIG evt; - APPL_TRACE_DEBUG("%s: num_recfg: %d, conn_lcb:0x%x", __func__, - p_scb->num_recfg, bta_av_cb.conn_lcb); - if(p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) - { - bta_av_cco_close(p_scb, p_data); - /* report failure */ - evt.status = BTA_AV_FAIL_STREAM; - evt.chnl = p_scb->chnl; - evt.hndl = p_scb->hndl; - (*bta_av_cb.p_cback)(BTA_AV_RECONFIG_EVT, (tBTA_AV *)&evt); - /* go to closing state */ - bta_av_ssm_execute(p_scb, BTA_AV_API_CLOSE_EVT, NULL); - } - else - { - /* open failed. try again */ - p_scb->num_recfg++; - if(bta_av_cb.conn_lcb) - { - AVDT_DisconnectReq(p_scb->peer_addr, bta_av_dt_cback[p_scb->hdi]); - } - else - { - bta_av_connect_req(p_scb, NULL); - } + APPL_TRACE_DEBUG("%s: num_recfg: %d, conn_lcb:0x%x", __func__, + p_scb->num_recfg, bta_av_cb.conn_lcb); + if (p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) { + bta_av_cco_close(p_scb, p_data); + /* report failure */ + evt.status = BTA_AV_FAIL_STREAM; + evt.chnl = p_scb->chnl; + evt.hndl = p_scb->hndl; + (*bta_av_cb.p_cback)(BTA_AV_RECONFIG_EVT, (tBTA_AV*)&evt); + /* go to closing state */ + bta_av_ssm_execute(p_scb, BTA_AV_API_CLOSE_EVT, NULL); + } else { + /* open failed. try again */ + p_scb->num_recfg++; + if (bta_av_cb.conn_lcb) { + AVDT_DisconnectReq(p_scb->peer_addr, bta_av_dt_cback[p_scb->hdi]); + } else { + bta_av_connect_req(p_scb, NULL); } + } } /******************************************************************************* @@ -2775,19 +2560,16 @@ void bta_av_rcfg_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rcfg_connect (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - p_scb->cong = false; - p_scb->num_recfg++; - APPL_TRACE_DEBUG("%s: num_recfg: %d", __func__, p_scb->num_recfg); - if(p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) - { - /* let bta_av_rcfg_failed report fail */ - bta_av_rcfg_failed(p_scb, NULL); - } - else - AVDT_ConnectReq(p_scb->peer_addr, p_scb->sec_mask, bta_av_dt_cback[p_scb->hdi]); +void bta_av_rcfg_connect(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + p_scb->cong = false; + p_scb->num_recfg++; + APPL_TRACE_DEBUG("%s: num_recfg: %d", __func__, p_scb->num_recfg); + if (p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) { + /* let bta_av_rcfg_failed report fail */ + bta_av_rcfg_failed(p_scb, NULL); + } else + AVDT_ConnectReq(p_scb->peer_addr, p_scb->sec_mask, + bta_av_dt_cback[p_scb->hdi]); } /******************************************************************************* @@ -2799,25 +2581,22 @@ void bta_av_rcfg_connect (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_rcfg_discntd (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_RECONFIG evt; +void bta_av_rcfg_discntd(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_RECONFIG evt; - APPL_TRACE_DEBUG("%s: num_recfg: %d", __func__, p_scb->num_recfg); - p_scb->num_recfg++; - if(p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) - { - /* report failure */ - evt.status = BTA_AV_FAIL_STREAM; - evt.chnl = p_scb->chnl; - evt.hndl = p_scb->hndl; - (*bta_av_cb.p_cback)(BTA_AV_RECONFIG_EVT, (tBTA_AV *)&evt); - /* report close event & go to init state */ - bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, NULL); - } - else - AVDT_ConnectReq(p_scb->peer_addr, p_scb->sec_mask, bta_av_dt_cback[p_scb->hdi]); + APPL_TRACE_DEBUG("%s: num_recfg: %d", __func__, p_scb->num_recfg); + p_scb->num_recfg++; + if (p_scb->num_recfg > BTA_AV_RECONFIG_RETRY) { + /* report failure */ + evt.status = BTA_AV_FAIL_STREAM; + evt.chnl = p_scb->chnl; + evt.hndl = p_scb->hndl; + (*bta_av_cb.p_cback)(BTA_AV_RECONFIG_EVT, (tBTA_AV*)&evt); + /* report close event & go to init state */ + bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, NULL); + } else + AVDT_ConnectReq(p_scb->peer_addr, p_scb->sec_mask, + bta_av_dt_cback[p_scb->hdi]); } /******************************************************************************* @@ -2830,44 +2609,37 @@ void bta_av_rcfg_discntd (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_suspend_cont (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - uint8_t err_code = p_data->str_msg.msg.hdr.err_code; - tBTA_AV_RECONFIG evt; - - p_scb->started = false; - p_scb->cong = false; - if (err_code) - { - if (AVDT_ERR_CONNECT == err_code) - { - /* report failure */ - evt.status = BTA_AV_FAIL; - (*bta_av_cb.p_cback)(BTA_AV_RECONFIG_EVT, (tBTA_AV *)&evt); - bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, NULL); - } - else - { - APPL_TRACE_ERROR("%s: suspend rejected, try close", __func__); - /* Disable suspend feature only with explicit rejection(not with timeout) */ - if (err_code != AVDT_ERR_TIMEOUT) - { - p_scb->suspend_sup = false; - } - /* drop the buffers queued in L2CAP */ - L2CA_FlushChannel (p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); - - AVDT_CloseReq(p_scb->avdt_handle); - } - } - else - { - APPL_TRACE_DEBUG("%s: calling AVDT_ReconfigReq", __func__); - /* reconfig the stream */ +void bta_av_suspend_cont(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + uint8_t err_code = p_data->str_msg.msg.hdr.err_code; + tBTA_AV_RECONFIG evt; - AVDT_ReconfigReq(p_scb->avdt_handle, p_scb->p_cap); - p_scb->p_cap->psc_mask = p_scb->cur_psc_mask; - } + p_scb->started = false; + p_scb->cong = false; + if (err_code) { + if (AVDT_ERR_CONNECT == err_code) { + /* report failure */ + evt.status = BTA_AV_FAIL; + (*bta_av_cb.p_cback)(BTA_AV_RECONFIG_EVT, (tBTA_AV*)&evt); + bta_av_ssm_execute(p_scb, BTA_AV_STR_DISC_FAIL_EVT, NULL); + } else { + APPL_TRACE_ERROR("%s: suspend rejected, try close", __func__); + /* Disable suspend feature only with explicit rejection(not with timeout) + */ + if (err_code != AVDT_ERR_TIMEOUT) { + p_scb->suspend_sup = false; + } + /* drop the buffers queued in L2CAP */ + L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); + + AVDT_CloseReq(p_scb->avdt_handle); + } + } else { + APPL_TRACE_DEBUG("%s: calling AVDT_ReconfigReq", __func__); + /* reconfig the stream */ + + AVDT_ReconfigReq(p_scb->avdt_handle, p_scb->p_cap); + p_scb->p_cap->psc_mask = p_scb->cur_psc_mask; + } } /******************************************************************************* @@ -2880,71 +2652,65 @@ void bta_av_suspend_cont (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rcfg_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - uint8_t err_code = p_data->str_msg.msg.hdr.err_code; +void bta_av_rcfg_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + uint8_t err_code = p_data->str_msg.msg.hdr.err_code; - APPL_TRACE_DEBUG("%s: err_code = %d", __func__, err_code); - if (err_code) - { - APPL_TRACE_ERROR("%s: reconfig rejected, try close", __func__); - /* Disable reconfiguration feature only with explicit rejection(not with timeout) */ - if (err_code != AVDT_ERR_TIMEOUT) - { - p_scb->recfg_sup = false; - } - /* started flag is false when reconfigure command is sent */ - /* drop the buffers queued in L2CAP */ - L2CA_FlushChannel (p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); - AVDT_CloseReq(p_scb->avdt_handle); - } - else - { - /* update the codec info after rcfg cfm */ - APPL_TRACE_DEBUG("%s: updating from codec %s to codec %s", - __func__, A2DP_CodecName(p_scb->cfg.codec_info), - A2DP_CodecName(p_data->str_msg.msg.reconfig_cfm.p_cfg->codec_info)); - memcpy(p_scb->cfg.codec_info,p_data->str_msg.msg.reconfig_cfm.p_cfg->codec_info,AVDT_CODEC_SIZE); - /* take the SSM back to OPEN state */ - bta_av_ssm_execute(p_scb, BTA_AV_STR_OPEN_OK_EVT, NULL); + APPL_TRACE_DEBUG("%s: err_code = %d", __func__, err_code); + if (err_code) { + APPL_TRACE_ERROR("%s: reconfig rejected, try close", __func__); + /* Disable reconfiguration feature only with explicit rejection(not with + * timeout) */ + if (err_code != AVDT_ERR_TIMEOUT) { + p_scb->recfg_sup = false; } + /* started flag is false when reconfigure command is sent */ + /* drop the buffers queued in L2CAP */ + L2CA_FlushChannel(p_scb->l2c_cid, L2CAP_FLUSH_CHANS_ALL); + AVDT_CloseReq(p_scb->avdt_handle); + } else { + /* update the codec info after rcfg cfm */ + APPL_TRACE_DEBUG( + "%s: updating from codec %s to codec %s", __func__, + A2DP_CodecName(p_scb->cfg.codec_info), + A2DP_CodecName(p_data->str_msg.msg.reconfig_cfm.p_cfg->codec_info)); + memcpy(p_scb->cfg.codec_info, + p_data->str_msg.msg.reconfig_cfm.p_cfg->codec_info, AVDT_CODEC_SIZE); + /* take the SSM back to OPEN state */ + bta_av_ssm_execute(p_scb, BTA_AV_STR_OPEN_OK_EVT, NULL); + } } /******************************************************************************* * * Function bta_av_rcfg_open * - * Description AVDT is connected. open the stream with the new configuration + * Description AVDT is connected. open the stream with the new + *configuration * * Returns void * ******************************************************************************/ -void bta_av_rcfg_open (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s: num_disc_snks = %d", __func__, p_scb->num_disc_snks); +void bta_av_rcfg_open(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + APPL_TRACE_DEBUG("%s: num_disc_snks = %d", __func__, p_scb->num_disc_snks); - if (p_scb->num_disc_snks == 0) - { - /* Need to update call-out module so that it will be ready for discover */ - p_scb->p_cos->stop(p_scb->hndl); + if (p_scb->num_disc_snks == 0) { + /* Need to update call-out module so that it will be ready for discover */ + p_scb->p_cos->stop(p_scb->hndl); - /* send avdtp discover request */ - AVDT_DiscoverReq(p_scb->peer_addr, p_scb->sep_info, BTA_AV_NUM_SEPS, bta_av_dt_cback[p_scb->hdi]); - } - else - { - memcpy(p_scb->cfg.codec_info, p_scb->p_cap->codec_info, AVDT_CODEC_SIZE); - /* we may choose to use a different SEP at reconfig. - * adjust the sep_idx now */ - bta_av_adjust_seps_idx(p_scb, bta_av_get_scb_handle(p_scb, AVDT_TSEP_SRC)); - - /* open the stream with the new config */ - p_scb->sep_info_idx = p_scb->rcfg_idx; - AVDT_OpenReq(p_scb->avdt_handle, p_scb->peer_addr, - p_scb->sep_info[p_scb->sep_info_idx].seid, p_scb->p_cap); - } + /* send avdtp discover request */ + AVDT_DiscoverReq(p_scb->peer_addr, p_scb->sep_info, BTA_AV_NUM_SEPS, + bta_av_dt_cback[p_scb->hdi]); + } else { + memcpy(p_scb->cfg.codec_info, p_scb->p_cap->codec_info, AVDT_CODEC_SIZE); + /* we may choose to use a different SEP at reconfig. + * adjust the sep_idx now */ + bta_av_adjust_seps_idx(p_scb, bta_av_get_scb_handle(p_scb, AVDT_TSEP_SRC)); + /* open the stream with the new config */ + p_scb->sep_info_idx = p_scb->rcfg_idx; + AVDT_OpenReq(p_scb->avdt_handle, p_scb->peer_addr, + p_scb->sep_info[p_scb->sep_info_idx].seid, p_scb->p_cap); + } } /******************************************************************************* @@ -2956,11 +2722,9 @@ void bta_av_rcfg_open (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_security_rej (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_BAD_STATE, - NULL, 0); +void bta_av_security_rej(tBTA_AV_SCB* p_scb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + AVDT_SecurityRsp(p_scb->avdt_handle, p_scb->avdt_label, AVDT_ERR_BAD_STATE, + NULL, 0); } /******************************************************************************* @@ -2968,46 +2732,43 @@ void bta_av_security_rej (tBTA_AV_SCB *p_scb, * Function bta_av_chk_2nd_start * * Description check if this is 2nd stream and if it needs to be started. - * This function needs to be kept very similar to bta_av_chk_start + * This function needs to be kept very similar to + *bta_av_chk_start * * Returns void * ******************************************************************************/ -void bta_av_chk_2nd_start (tBTA_AV_SCB *p_scb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_SCB *p_scbi; - int i; - bool new_started = false; - - if ((p_scb->chnl == BTA_AV_CHNL_AUDIO) && (bta_av_cb.audio_open_cnt >= 2)) - { - /* more than one audio channel is connected */ - if (!(p_scb->role & BTA_AV_ROLE_SUSPEND_OPT)) - { - /* this channel does not need to be reconfigured. - * if there is other channel streaming, start the stream now */ - for(i=0; ichnl == BTA_AV_CHNL_AUDIO && p_scbi->co_started) - { - if (!new_started) - { - /* start the new stream */ - new_started = true; - bta_av_ssm_execute(p_scb, BTA_AV_AP_START_EVT, NULL); - } - /* may need to update the flush timeout of this already started stream */ - if (p_scbi->co_started != bta_av_cb.audio_open_cnt) - { - p_scbi->co_started = bta_av_cb.audio_open_cnt; - L2CA_SetFlushTimeout(p_scbi->peer_addr, p_bta_av_cfg->p_audio_flush_to[p_scbi->co_started - 1] ); - } - } - } +void bta_av_chk_2nd_start(tBTA_AV_SCB* p_scb, + UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_SCB* p_scbi; + int i; + bool new_started = false; + + if ((p_scb->chnl == BTA_AV_CHNL_AUDIO) && (bta_av_cb.audio_open_cnt >= 2)) { + /* more than one audio channel is connected */ + if (!(p_scb->role & BTA_AV_ROLE_SUSPEND_OPT)) { + /* this channel does not need to be reconfigured. + * if there is other channel streaming, start the stream now */ + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + p_scbi = bta_av_cb.p_scb[i]; + if (p_scbi && p_scbi->chnl == BTA_AV_CHNL_AUDIO && p_scbi->co_started) { + if (!new_started) { + /* start the new stream */ + new_started = true; + bta_av_ssm_execute(p_scb, BTA_AV_AP_START_EVT, NULL); + } + /* may need to update the flush timeout of this already started stream + */ + if (p_scbi->co_started != bta_av_cb.audio_open_cnt) { + p_scbi->co_started = bta_av_cb.audio_open_cnt; + L2CA_SetFlushTimeout( + p_scbi->peer_addr, + p_bta_av_cfg->p_audio_flush_to[p_scbi->co_started - 1]); + } } + } } + } } /******************************************************************************* @@ -3019,70 +2780,58 @@ void bta_av_chk_2nd_start (tBTA_AV_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_av_open_rc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_START start; - - APPL_TRACE_DEBUG("%s: use_rc: %d, wait: x%x role:x%x", __func__, - p_scb->use_rc, p_scb->wait, p_scb->role); - if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) && (p_scb->q_tag == BTA_AV_Q_TAG_START)) - { - /* waiting for role switch for some reason & the timer expires */ - if (!bta_av_link_role_ok(p_scb, A2DP_SET_ONE_BIT)) - { - APPL_TRACE_ERROR ("%s: failed to start streaming for role management reasons!!", - __func__); - alarm_cancel(p_scb->avrc_ct_timer); - start.chnl = p_scb->chnl; - start.status = BTA_AV_FAIL_ROLE; - start.initiator = true; - start.hndl = p_scb->hndl; - p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; - bta_av_cb.rs_idx = 0; - (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV *) &start); - } - else - { - /* role switch is done. continue to start streaming */ - bta_av_cb.rs_idx = 0; - p_data->hdr.offset = BTA_AV_RS_OK; - bta_av_start_ok (p_scb, p_data); +void bta_av_open_rc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_START start; + + APPL_TRACE_DEBUG("%s: use_rc: %d, wait: x%x role:x%x", __func__, + p_scb->use_rc, p_scb->wait, p_scb->role); + if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) && + (p_scb->q_tag == BTA_AV_Q_TAG_START)) { + /* waiting for role switch for some reason & the timer expires */ + if (!bta_av_link_role_ok(p_scb, A2DP_SET_ONE_BIT)) { + APPL_TRACE_ERROR( + "%s: failed to start streaming for role management reasons!!", + __func__); + alarm_cancel(p_scb->avrc_ct_timer); + start.chnl = p_scb->chnl; + start.status = BTA_AV_FAIL_ROLE; + start.initiator = true; + start.hndl = p_scb->hndl; + p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; + bta_av_cb.rs_idx = 0; + (*bta_av_cb.p_cback)(BTA_AV_START_EVT, (tBTA_AV*)&start); + } else { + /* role switch is done. continue to start streaming */ + bta_av_cb.rs_idx = 0; + p_data->hdr.offset = BTA_AV_RS_OK; + bta_av_start_ok(p_scb, p_data); + } + return; + } + + if (p_scb->use_rc == true || (p_scb->role & BTA_AV_ROLE_AD_ACP)) { + if (bta_av_cb.disc) { + /* AVRC discover db is in use */ + if (p_scb->rc_handle == BTA_AV_RC_HANDLE_NONE) { + /* AVRC channel is not connected. delay a little bit */ + if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) == 0) { + bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RC_DISC_TIME_VAL, + BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); + } else { + p_scb->wait |= BTA_AV_WAIT_CHECK_RC; } - return; + } + } else { + /* use main SM for AVRC SDP activities */ + bta_av_rc_disc((uint8_t)(p_scb->hdi + 1)); } - - if(p_scb->use_rc == true || (p_scb->role & BTA_AV_ROLE_AD_ACP) ) - { - if(bta_av_cb.disc) - { - /* AVRC discover db is in use */ - if(p_scb->rc_handle == BTA_AV_RC_HANDLE_NONE) - { - /* AVRC channel is not connected. delay a little bit */ - if ((p_scb->wait & BTA_AV_WAIT_ROLE_SW_BITS) == 0) { - bta_sys_start_timer(p_scb->avrc_ct_timer, - BTA_AV_RC_DISC_TIME_VAL, - BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); - } else { - p_scb->wait |= BTA_AV_WAIT_CHECK_RC; - } - } - } - else - { - /* use main SM for AVRC SDP activities */ - bta_av_rc_disc((uint8_t)(p_scb->hdi + 1)); - } - } - else - { - if(BTA_AV_RC_HANDLE_NONE != p_scb->rc_handle) - { - /* the open API said that this handle does not want a RC connection. - * disconnect it now */ - AVRC_Close(p_scb->rc_handle); - } + } else { + if (BTA_AV_RC_HANDLE_NONE != p_scb->rc_handle) { + /* the open API said that this handle does not want a RC connection. + * disconnect it now */ + AVRC_Close(p_scb->rc_handle); } + } } /******************************************************************************* @@ -3095,30 +2844,26 @@ void bta_av_open_rc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_open_at_inc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - memcpy (&(p_scb->open_api), &(p_data->api_open), sizeof(tBTA_AV_API_OPEN)); +void bta_av_open_at_inc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + memcpy(&(p_scb->open_api), &(p_data->api_open), sizeof(tBTA_AV_API_OPEN)); - if (p_scb->coll_mask & BTA_AV_COLL_INC_TMR) - { - p_scb->coll_mask |= BTA_AV_COLL_API_CALLED; + if (p_scb->coll_mask & BTA_AV_COLL_INC_TMR) { + p_scb->coll_mask |= BTA_AV_COLL_API_CALLED; - /* API open will be handled at timeout if SNK did not start signalling. */ - /* API open will be ignored if SNK starts signalling. */ - } - else - { - /* SNK did not start signalling, API was called N seconds timeout. */ - /* We need to switch to INIT state and start opening connection. */ - p_scb->coll_mask = 0; - bta_av_set_scb_sst_init(p_scb); - - tBTA_AV_API_OPEN *p_buf = - (tBTA_AV_API_OPEN *)osi_malloc(sizeof(tBTA_AV_API_OPEN)); - memcpy(p_buf, &(p_scb->open_api), sizeof(tBTA_AV_API_OPEN)); - p_scb->skip_sdp = true; - bta_sys_sendmsg(p_buf); - } + /* API open will be handled at timeout if SNK did not start signalling. */ + /* API open will be ignored if SNK starts signalling. */ + } else { + /* SNK did not start signalling, API was called N seconds timeout. */ + /* We need to switch to INIT state and start opening connection. */ + p_scb->coll_mask = 0; + bta_av_set_scb_sst_init(p_scb); + + tBTA_AV_API_OPEN* p_buf = + (tBTA_AV_API_OPEN*)osi_malloc(sizeof(tBTA_AV_API_OPEN)); + memcpy(p_buf, &(p_scb->open_api), sizeof(tBTA_AV_API_OPEN)); + p_scb->skip_sdp = true; + bta_sys_sendmsg(p_buf); + } } /******************************************************************************* @@ -3131,55 +2876,55 @@ void bta_av_open_at_inc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_offload_req(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_STATUS status = BTA_AV_FAIL_RESOURCES; - uint16_t mtu = bta_av_chk_mtu(p_scb, p_scb->stream_mtu); - - APPL_TRACE_DEBUG("%s: stream %s, audio channels open %d", __func__, - p_scb->started ? "STARTED" : "STOPPED", - bta_av_cb.audio_open_cnt); +void bta_av_offload_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_STATUS status = BTA_AV_FAIL_RESOURCES; + uint16_t mtu = bta_av_chk_mtu(p_scb, p_scb->stream_mtu); - /* Check if stream has already been started. */ - /* Support offload if only one audio source stream is open. */ - if (p_scb->started != true) { - status = BTA_AV_FAIL_STREAM; + APPL_TRACE_DEBUG("%s: stream %s, audio channels open %d", __func__, + p_scb->started ? "STARTED" : "STOPPED", + bta_av_cb.audio_open_cnt); - } else if (bta_av_cb.audio_open_cnt == 1 && - p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC && - p_scb->chnl == BTA_AV_CHNL_AUDIO) { + /* Check if stream has already been started. */ + /* Support offload if only one audio source stream is open. */ + if (p_scb->started != true) { + status = BTA_AV_FAIL_STREAM; - bt_vendor_op_a2dp_offload_t a2dp_offload_start; + } else if (bta_av_cb.audio_open_cnt == 1 && + p_scb->seps[p_scb->sep_idx].tsep == AVDT_TSEP_SRC && + p_scb->chnl == BTA_AV_CHNL_AUDIO) { + bt_vendor_op_a2dp_offload_t a2dp_offload_start; - if (L2CA_GetConnectionConfig(p_scb->l2c_cid, &a2dp_offload_start.acl_data_size, - &a2dp_offload_start.remote_cid, &a2dp_offload_start.lm_handle)) { + if (L2CA_GetConnectionConfig( + p_scb->l2c_cid, &a2dp_offload_start.acl_data_size, + &a2dp_offload_start.remote_cid, &a2dp_offload_start.lm_handle)) { + APPL_TRACE_DEBUG("%s: l2cmtu %d lcid 0x%02X rcid 0x%02X lm_handle 0x%02X", + __func__, a2dp_offload_start.acl_data_size, + p_scb->l2c_cid, a2dp_offload_start.remote_cid, + a2dp_offload_start.lm_handle); - APPL_TRACE_DEBUG("%s: l2cmtu %d lcid 0x%02X rcid 0x%02X lm_handle 0x%02X", - __func__, - a2dp_offload_start.acl_data_size, p_scb->l2c_cid, - a2dp_offload_start.remote_cid, a2dp_offload_start.lm_handle); + a2dp_offload_start.bta_av_handle = p_scb->hndl; + a2dp_offload_start.xmit_quota = BTA_AV_A2DP_OFFLOAD_XMIT_QUOTA; + a2dp_offload_start.stream_mtu = + (mtu < p_scb->stream_mtu) ? mtu : p_scb->stream_mtu; + a2dp_offload_start.local_cid = p_scb->l2c_cid; + a2dp_offload_start.is_flushable = true; + a2dp_offload_start.stream_source = + ((uint32_t)(p_scb->cfg.codec_info[1] | p_scb->cfg.codec_info[2])); - a2dp_offload_start.bta_av_handle = p_scb->hndl; - a2dp_offload_start.xmit_quota = BTA_AV_A2DP_OFFLOAD_XMIT_QUOTA; - a2dp_offload_start.stream_mtu = (mtu < p_scb->stream_mtu) ? mtu : p_scb->stream_mtu; - a2dp_offload_start.local_cid = p_scb->l2c_cid; - a2dp_offload_start.is_flushable = true; - a2dp_offload_start.stream_source = ((uint32_t)(p_scb->cfg.codec_info[1] | p_scb->cfg.codec_info[2])); + memcpy(a2dp_offload_start.codec_info, p_scb->cfg.codec_info, + sizeof(a2dp_offload_start.codec_info)); - memcpy(a2dp_offload_start.codec_info, p_scb->cfg.codec_info, - sizeof(a2dp_offload_start.codec_info)); - - if (!vendor_get_interface()->send_command( - (vendor_opcode_t)BT_VND_OP_A2DP_OFFLOAD_START, - &a2dp_offload_start)) { - status = BTA_AV_SUCCESS; - p_scb->offload_start_pending = true; - } - } + if (!vendor_get_interface()->send_command( + (vendor_opcode_t)BT_VND_OP_A2DP_OFFLOAD_START, + &a2dp_offload_start)) { + status = BTA_AV_SUCCESS; + p_scb->offload_start_pending = true; + } } + } - if (status != BTA_AV_SUCCESS) - (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV *)&status); + if (status != BTA_AV_SUCCESS) + (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV*)&status); } /******************************************************************************* @@ -3192,19 +2937,18 @@ void bta_av_offload_req(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_offload_rsp(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_STATUS status = p_data->api_status_rsp.status; +void bta_av_offload_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) { + tBTA_AV_STATUS status = p_data->api_status_rsp.status; - APPL_TRACE_DEBUG("%s: stream %s status %s", __func__, - p_scb->started ? "STARTED" : "STOPPED", - status ? "FAIL" : "SUCCESS"); + APPL_TRACE_DEBUG("%s: stream %s status %s", __func__, + p_scb->started ? "STARTED" : "STOPPED", + status ? "FAIL" : "SUCCESS"); - /* Check if stream has already been started. */ - if (status == BTA_AV_SUCCESS && p_scb->started != true) { - status = BTA_AV_FAIL_STREAM; - } + /* Check if stream has already been started. */ + if (status == BTA_AV_SUCCESS && p_scb->started != true) { + status = BTA_AV_FAIL_STREAM; + } - p_scb->offload_start_pending = false; - (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV *)&status); + p_scb->offload_start_pending = false; + (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV*)&status); } diff --git a/system/bta/av/bta_av_act.cc b/system/bta/av/bta_av_act.cc index 02861563cfb..134e22f3c0a 100644 --- a/system/bta/av/bta_av_act.cc +++ b/system/bta/av/bta_av_act.cc @@ -48,18 +48,18 @@ ****************************************************************************/ /* the timeout to wait for open req after setconfig for incoming connections */ #ifndef BTA_AV_SIGNALLING_TIMEOUT_MS -#define BTA_AV_SIGNALLING_TIMEOUT_MS (8 * 1000) /* 8 seconds */ +#define BTA_AV_SIGNALLING_TIMEOUT_MS (8 * 1000) /* 8 seconds */ #endif /* Time to wait for signalling from SNK when it is initiated from SNK. */ /* If not, we will start signalling from SRC. */ #ifndef BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS -#define BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS (2 * 1000) /* 2 seconds */ +#define BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS (2 * 1000) /* 2 seconds */ #endif -extern fixed_queue_t *btu_bta_alarm_queue; +extern fixed_queue_t* btu_bta_alarm_queue; -static void bta_av_accept_signalling_timer_cback(void *data); +static void bta_av_accept_signalling_timer_cback(void* data); #ifndef AVRC_MIN_META_CMD_LEN #define AVRC_MIN_META_CMD_LEN 20 @@ -74,22 +74,20 @@ static void bta_av_accept_signalling_timer_cback(void *data); * Returns tBTA_AV_RCB * ******************************************************************************/ -tBTA_AV_RCB * bta_av_get_rcb_by_shdl(uint8_t shdl) -{ - tBTA_AV_RCB *p_rcb = NULL; - int i; - - for (i=0; ihandle != BTA_AV_RC_HANDLE_NONE) - { - if (p_rcb->shdl) - { - /* Validate array index*/ - if ((p_rcb->shdl - 1) < BTA_AV_NUM_STRS) - { - p_scb = bta_av_cb.p_scb[p_rcb->shdl - 1]; - } - if (p_scb) - { - APPL_TRACE_DEBUG("bta_av_del_rc shdl:%d, srch:%d rc_handle:%d", p_rcb->shdl, - p_scb->rc_handle, p_rcb->handle); - if (p_scb->rc_handle == p_rcb->handle) - p_scb->rc_handle = BTA_AV_RC_HANDLE_NONE; - /* just in case the RC timer is active - if (bta_av_cb.features & BTA_AV_FEAT_RCCT && p_scb->chnl == BTA_AV_CHNL_AUDIO) */ - alarm_cancel(p_scb->avrc_ct_timer); - } - } - - APPL_TRACE_EVENT("bta_av_del_rc handle: %d status=0x%x, rc_acp_handle:%d, idx:%d", - p_rcb->handle, p_rcb->status, bta_av_cb.rc_acp_handle, bta_av_cb.rc_acp_idx); - rc_handle = p_rcb->handle; - if (!(p_rcb->status & BTA_AV_RC_CONN_MASK) || - ((p_rcb->status & BTA_AV_RC_ROLE_MASK) == BTA_AV_RC_ROLE_INT) ) - { - p_rcb->status = 0; - p_rcb->handle = BTA_AV_RC_HANDLE_NONE; - p_rcb->shdl = 0; - p_rcb->lidx = 0; - } - /* else ACP && connected. do not clear the handle yet */ - AVRC_Close(rc_handle); - if (rc_handle == bta_av_cb.rc_acp_handle) - bta_av_cb.rc_acp_handle = BTA_AV_RC_HANDLE_NONE; - APPL_TRACE_EVENT("end del_rc handle: %d status=0x%x, rc_acp_handle:%d, lidx:%d", - p_rcb->handle, p_rcb->status, bta_av_cb.rc_acp_handle, p_rcb->lidx); - } +void bta_av_del_rc(tBTA_AV_RCB* p_rcb) { + tBTA_AV_SCB* p_scb; + uint8_t rc_handle; /* connected AVRCP handle */ + + p_scb = NULL; + if (p_rcb->handle != BTA_AV_RC_HANDLE_NONE) { + if (p_rcb->shdl) { + /* Validate array index*/ + if ((p_rcb->shdl - 1) < BTA_AV_NUM_STRS) { + p_scb = bta_av_cb.p_scb[p_rcb->shdl - 1]; + } + if (p_scb) { + APPL_TRACE_DEBUG("bta_av_del_rc shdl:%d, srch:%d rc_handle:%d", + p_rcb->shdl, p_scb->rc_handle, p_rcb->handle); + if (p_scb->rc_handle == p_rcb->handle) + p_scb->rc_handle = BTA_AV_RC_HANDLE_NONE; + /* just in case the RC timer is active + if (bta_av_cb.features & BTA_AV_FEAT_RCCT && p_scb->chnl == + BTA_AV_CHNL_AUDIO) */ + alarm_cancel(p_scb->avrc_ct_timer); + } + } + + APPL_TRACE_EVENT( + "bta_av_del_rc handle: %d status=0x%x, rc_acp_handle:%d, idx:%d", + p_rcb->handle, p_rcb->status, bta_av_cb.rc_acp_handle, + bta_av_cb.rc_acp_idx); + rc_handle = p_rcb->handle; + if (!(p_rcb->status & BTA_AV_RC_CONN_MASK) || + ((p_rcb->status & BTA_AV_RC_ROLE_MASK) == BTA_AV_RC_ROLE_INT)) { + p_rcb->status = 0; + p_rcb->handle = BTA_AV_RC_HANDLE_NONE; + p_rcb->shdl = 0; + p_rcb->lidx = 0; + } + /* else ACP && connected. do not clear the handle yet */ + AVRC_Close(rc_handle); + if (rc_handle == bta_av_cb.rc_acp_handle) + bta_av_cb.rc_acp_handle = BTA_AV_RC_HANDLE_NONE; + APPL_TRACE_EVENT( + "end del_rc handle: %d status=0x%x, rc_acp_handle:%d, lidx:%d", + p_rcb->handle, p_rcb->status, bta_av_cb.rc_acp_handle, p_rcb->lidx); + } } /******************************************************************************* @@ -156,15 +152,13 @@ void bta_av_del_rc(tBTA_AV_RCB *p_rcb) * Returns void * ******************************************************************************/ -static void bta_av_close_all_rc(tBTA_AV_CB *p_cb) -{ - int i; - - for(i=0; idisabling == true) || (bta_av_cb.rcb[i].shdl != 0)) - bta_av_del_rc(&bta_av_cb.rcb[i]); - } +static void bta_av_close_all_rc(tBTA_AV_CB* p_cb) { + int i; + + for (i = 0; i < BTA_AV_NUM_RCB; i++) { + if ((p_cb->disabling == true) || (bta_av_cb.rcb[i].shdl != 0)) + bta_av_del_rc(&bta_av_cb.rcb[i]); + } } /******************************************************************************* @@ -176,13 +170,11 @@ static void bta_av_close_all_rc(tBTA_AV_CB *p_cb) * Returns void * ******************************************************************************/ -static void bta_av_del_sdp_rec(uint32_t *p_sdp_handle) -{ - if (*p_sdp_handle != 0) - { - SDP_DeleteRecord(*p_sdp_handle); - *p_sdp_handle = 0; - } +static void bta_av_del_sdp_rec(uint32_t* p_sdp_handle) { + if (*p_sdp_handle != 0) { + SDP_DeleteRecord(*p_sdp_handle); + *p_sdp_handle = 0; + } } /******************************************************************************* @@ -194,13 +186,12 @@ static void bta_av_del_sdp_rec(uint32_t *p_sdp_handle) * Returns void * ******************************************************************************/ -static void bta_av_avrc_sdp_cback(UNUSED_ATTR uint16_t status) -{ - BT_HDR *p_msg = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +static void bta_av_avrc_sdp_cback(UNUSED_ATTR uint16_t status) { + BT_HDR* p_msg = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_msg->event = BTA_AV_SDP_AVRC_DISC_EVT; + p_msg->event = BTA_AV_SDP_AVRC_DISC_EVT; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -213,40 +204,32 @@ static void bta_av_avrc_sdp_cback(UNUSED_ATTR uint16_t status) * ******************************************************************************/ static void bta_av_rc_ctrl_cback(uint8_t handle, uint8_t event, - UNUSED_ATTR uint16_t result, BD_ADDR peer_addr) -{ - uint16_t msg_event = 0; - - APPL_TRACE_EVENT("%s handle: %d event=0x%x", __func__, handle, event); - if (event == AVRC_OPEN_IND_EVT) - { - /* save handle of opened connection - bta_av_cb.rc_handle = handle;*/ - - msg_event = BTA_AV_AVRC_OPEN_EVT; - } - else if (event == AVRC_CLOSE_IND_EVT) - { - msg_event = BTA_AV_AVRC_CLOSE_EVT; - } - else if (event == AVRC_BROWSE_OPEN_IND_EVT) - { - msg_event = BTA_AV_AVRC_BROWSE_OPEN_EVT; - } - else if (event == AVRC_BROWSE_CLOSE_IND_EVT) - { - msg_event = BTA_AV_AVRC_BROWSE_CLOSE_EVT; - } - - if (msg_event) { - tBTA_AV_RC_CONN_CHG *p_msg = - (tBTA_AV_RC_CONN_CHG *)osi_malloc(sizeof(tBTA_AV_RC_CONN_CHG)); - p_msg->hdr.event = msg_event; - p_msg->handle = handle; - if (peer_addr) - bdcpy(p_msg->peer_addr, peer_addr); - bta_sys_sendmsg(p_msg); - } + UNUSED_ATTR uint16_t result, + BD_ADDR peer_addr) { + uint16_t msg_event = 0; + + APPL_TRACE_EVENT("%s handle: %d event=0x%x", __func__, handle, event); + if (event == AVRC_OPEN_IND_EVT) { + /* save handle of opened connection + bta_av_cb.rc_handle = handle;*/ + + msg_event = BTA_AV_AVRC_OPEN_EVT; + } else if (event == AVRC_CLOSE_IND_EVT) { + msg_event = BTA_AV_AVRC_CLOSE_EVT; + } else if (event == AVRC_BROWSE_OPEN_IND_EVT) { + msg_event = BTA_AV_AVRC_BROWSE_OPEN_EVT; + } else if (event == AVRC_BROWSE_CLOSE_IND_EVT) { + msg_event = BTA_AV_AVRC_BROWSE_CLOSE_EVT; + } + + if (msg_event) { + tBTA_AV_RC_CONN_CHG* p_msg = + (tBTA_AV_RC_CONN_CHG*)osi_malloc(sizeof(tBTA_AV_RC_CONN_CHG)); + p_msg->hdr.event = msg_event; + p_msg->handle = handle; + if (peer_addr) bdcpy(p_msg->peer_addr, peer_addr); + bta_sys_sendmsg(p_msg); + } } /******************************************************************************* @@ -258,55 +241,56 @@ static void bta_av_rc_ctrl_cback(uint8_t handle, uint8_t event, * Returns void * ******************************************************************************/ -static void bta_av_rc_msg_cback(uint8_t handle, uint8_t label, uint8_t opcode, tAVRC_MSG *p_msg) -{ - uint8_t *p_data_src = NULL; - uint16_t data_len = 0; - - APPL_TRACE_DEBUG("%s handle: %u opcode=0x%x", __func__, handle, opcode); - - /* Copy avrc packet into BTA message buffer (for sending to BTA state machine) */ - - /* Get size of payload data (for vendor and passthrough messages only; for browsing - * messages, use zero-copy) */ - if (opcode == AVRC_OP_VENDOR && p_msg->vendor.p_vendor_data != NULL) { - p_data_src = p_msg->vendor.p_vendor_data; - data_len = (uint16_t) p_msg->vendor.vendor_len; - } else if (opcode == AVRC_OP_PASS_THRU && p_msg->pass.p_pass_data != NULL) { - p_data_src = p_msg->pass.p_pass_data; - data_len = (uint16_t) p_msg->pass.pass_len; - } - - /* Create a copy of the message */ - tBTA_AV_RC_MSG *p_buf = - (tBTA_AV_RC_MSG *)osi_malloc(sizeof(tBTA_AV_RC_MSG) + data_len); - - p_buf->hdr.event = BTA_AV_AVRC_MSG_EVT; - p_buf->handle = handle; - p_buf->label = label; - p_buf->opcode = opcode; - memcpy(&p_buf->msg, p_msg, sizeof(tAVRC_MSG)); - /* Copy the data payload, and set the pointer to it */ - if (p_data_src != NULL) { - uint8_t *p_data_dst = (uint8_t *)(p_buf + 1); - memcpy(p_data_dst, p_data_src, data_len); - - /* Update bta message buffer to point to payload data */ - /* (Note AVRC_OP_BROWSING uses zero-copy: p_buf->msg.browse.p_browse_data - * already points to original avrc buffer) */ - if (opcode == AVRC_OP_VENDOR) - p_buf->msg.vendor.p_vendor_data = p_data_dst; - else if (opcode == AVRC_OP_PASS_THRU) - p_buf->msg.pass.p_pass_data = p_data_dst; - } - - if (opcode == AVRC_OP_BROWSE) { - /* set p_pkt to NULL, so avrc would not free the buffer */ - p_msg->browse.p_browse_pkt = NULL; - } - - bta_sys_sendmsg(p_buf); - +static void bta_av_rc_msg_cback(uint8_t handle, uint8_t label, uint8_t opcode, + tAVRC_MSG* p_msg) { + uint8_t* p_data_src = NULL; + uint16_t data_len = 0; + + APPL_TRACE_DEBUG("%s handle: %u opcode=0x%x", __func__, handle, opcode); + + /* Copy avrc packet into BTA message buffer (for sending to BTA state machine) + */ + + /* Get size of payload data (for vendor and passthrough messages only; for + * browsing + * messages, use zero-copy) */ + if (opcode == AVRC_OP_VENDOR && p_msg->vendor.p_vendor_data != NULL) { + p_data_src = p_msg->vendor.p_vendor_data; + data_len = (uint16_t)p_msg->vendor.vendor_len; + } else if (opcode == AVRC_OP_PASS_THRU && p_msg->pass.p_pass_data != NULL) { + p_data_src = p_msg->pass.p_pass_data; + data_len = (uint16_t)p_msg->pass.pass_len; + } + + /* Create a copy of the message */ + tBTA_AV_RC_MSG* p_buf = + (tBTA_AV_RC_MSG*)osi_malloc(sizeof(tBTA_AV_RC_MSG) + data_len); + + p_buf->hdr.event = BTA_AV_AVRC_MSG_EVT; + p_buf->handle = handle; + p_buf->label = label; + p_buf->opcode = opcode; + memcpy(&p_buf->msg, p_msg, sizeof(tAVRC_MSG)); + /* Copy the data payload, and set the pointer to it */ + if (p_data_src != NULL) { + uint8_t* p_data_dst = (uint8_t*)(p_buf + 1); + memcpy(p_data_dst, p_data_src, data_len); + + /* Update bta message buffer to point to payload data */ + /* (Note AVRC_OP_BROWSING uses zero-copy: p_buf->msg.browse.p_browse_data + * already points to original avrc buffer) */ + if (opcode == AVRC_OP_VENDOR) + p_buf->msg.vendor.p_vendor_data = p_data_dst; + else if (opcode == AVRC_OP_PASS_THRU) + p_buf->msg.pass.p_pass_data = p_data_dst; + } + + if (opcode == AVRC_OP_BROWSE) { + /* set p_pkt to NULL, so avrc would not free the buffer */ + p_msg->browse.p_browse_pkt = NULL; + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -318,65 +302,62 @@ static void bta_av_rc_msg_cback(uint8_t handle, uint8_t label, uint8_t opcode, t * Returns the created rc handle * ******************************************************************************/ -uint8_t bta_av_rc_create(tBTA_AV_CB *p_cb, uint8_t role, uint8_t shdl, uint8_t lidx) -{ - tAVRC_CONN_CB ccb; - BD_ADDR_PTR bda = (BD_ADDR_PTR)bd_addr_any; - uint8_t status = BTA_AV_RC_ROLE_ACP; - tBTA_AV_SCB *p_scb = p_cb->p_scb[shdl - 1]; - int i; - uint8_t rc_handle; - tBTA_AV_RCB *p_rcb; - - if (role == AVCT_INT) - { - bda = p_scb->peer_addr; - status = BTA_AV_RC_ROLE_INT; - } - else - { - if ((p_rcb = bta_av_get_rcb_by_shdl(shdl)) != NULL ) - { - APPL_TRACE_ERROR("bta_av_rc_create ACP handle exist for shdl:%d", shdl); - return p_rcb->handle; - } - } - - ccb.p_ctrl_cback = bta_av_rc_ctrl_cback; - ccb.p_msg_cback = bta_av_rc_msg_cback; - ccb.company_id = p_bta_av_cfg->company_id; - ccb.conn = role; - /* note: BTA_AV_FEAT_RCTG = AVRC_CT_TARGET, BTA_AV_FEAT_RCCT = AVRC_CT_CONTROL */ - ccb.control = p_cb->features & (BTA_AV_FEAT_RCTG | BTA_AV_FEAT_RCCT | BTA_AV_FEAT_METADATA | - AVRC_CT_PASSIVE); - - if (AVRC_Open(&rc_handle, &ccb, bda) != AVRC_SUCCESS) - return BTA_AV_RC_HANDLE_NONE; - - i = rc_handle; - p_rcb = &p_cb->rcb[i]; - - if (p_rcb->handle != BTA_AV_RC_HANDLE_NONE) - { - APPL_TRACE_ERROR("bta_av_rc_create found duplicated handle:%d", rc_handle); - } - - p_rcb->handle = rc_handle; - p_rcb->status = status; - p_rcb->shdl = shdl; - p_rcb->lidx = lidx; - p_rcb->peer_features = 0; - if (lidx == (BTA_AV_NUM_LINKS + 1)) - { - /* this LIDX is reserved for the AVRCP ACP connection */ - p_cb->rc_acp_handle = p_rcb->handle; - p_cb->rc_acp_idx = (i + 1); - APPL_TRACE_DEBUG("rc_acp_handle:%d idx:%d", p_cb->rc_acp_handle, p_cb->rc_acp_idx); - } - APPL_TRACE_DEBUG("create %d, role: %d, shdl:%d, rc_handle:%d, lidx:%d, status:0x%x", - i, role, shdl, p_rcb->handle, lidx, p_rcb->status); - - return rc_handle; +uint8_t bta_av_rc_create(tBTA_AV_CB* p_cb, uint8_t role, uint8_t shdl, + uint8_t lidx) { + tAVRC_CONN_CB ccb; + BD_ADDR_PTR bda = (BD_ADDR_PTR)bd_addr_any; + uint8_t status = BTA_AV_RC_ROLE_ACP; + tBTA_AV_SCB* p_scb = p_cb->p_scb[shdl - 1]; + int i; + uint8_t rc_handle; + tBTA_AV_RCB* p_rcb; + + if (role == AVCT_INT) { + bda = p_scb->peer_addr; + status = BTA_AV_RC_ROLE_INT; + } else { + if ((p_rcb = bta_av_get_rcb_by_shdl(shdl)) != NULL) { + APPL_TRACE_ERROR("bta_av_rc_create ACP handle exist for shdl:%d", shdl); + return p_rcb->handle; + } + } + + ccb.p_ctrl_cback = bta_av_rc_ctrl_cback; + ccb.p_msg_cback = bta_av_rc_msg_cback; + ccb.company_id = p_bta_av_cfg->company_id; + ccb.conn = role; + /* note: BTA_AV_FEAT_RCTG = AVRC_CT_TARGET, BTA_AV_FEAT_RCCT = AVRC_CT_CONTROL + */ + ccb.control = p_cb->features & (BTA_AV_FEAT_RCTG | BTA_AV_FEAT_RCCT | + BTA_AV_FEAT_METADATA | AVRC_CT_PASSIVE); + + if (AVRC_Open(&rc_handle, &ccb, bda) != AVRC_SUCCESS) + return BTA_AV_RC_HANDLE_NONE; + + i = rc_handle; + p_rcb = &p_cb->rcb[i]; + + if (p_rcb->handle != BTA_AV_RC_HANDLE_NONE) { + APPL_TRACE_ERROR("bta_av_rc_create found duplicated handle:%d", rc_handle); + } + + p_rcb->handle = rc_handle; + p_rcb->status = status; + p_rcb->shdl = shdl; + p_rcb->lidx = lidx; + p_rcb->peer_features = 0; + if (lidx == (BTA_AV_NUM_LINKS + 1)) { + /* this LIDX is reserved for the AVRCP ACP connection */ + p_cb->rc_acp_handle = p_rcb->handle; + p_cb->rc_acp_idx = (i + 1); + APPL_TRACE_DEBUG("rc_acp_handle:%d idx:%d", p_cb->rc_acp_handle, + p_cb->rc_acp_idx); + } + APPL_TRACE_DEBUG( + "create %d, role: %d, shdl:%d, rc_handle:%d, lidx:%d, status:0x%x", i, + role, shdl, p_rcb->handle, lidx, p_rcb->status); + + return rc_handle; } /******************************************************************************* @@ -388,36 +369,30 @@ uint8_t bta_av_rc_create(tBTA_AV_CB *p_cb, uint8_t role, uint8_t shdl, uint8_t l * Returns BTA_AV_RSP_ACCEPT or BTA_AV_RSP_NOT_IMPL. * ******************************************************************************/ -static tBTA_AV_CODE bta_av_group_navi_supported(uint8_t len, uint8_t *p_data, bool is_inquiry) -{ - tBTA_AV_CODE ret=BTA_AV_RSP_NOT_IMPL; - uint8_t *p_ptr = p_data; - uint16_t u16; - uint32_t u32; - - if (p_bta_av_cfg->avrc_group && len == BTA_GROUP_NAVI_MSG_OP_DATA_LEN) - { - BTA_AV_BE_STREAM_TO_CO_ID(u32, p_ptr); - BE_STREAM_TO_UINT16(u16, p_ptr); - - if (u32 == AVRC_CO_METADATA) - { - if (is_inquiry) - { - if (u16 <= AVRC_PDU_PREV_GROUP) - ret = BTA_AV_RSP_IMPL_STBL; - } - else - { - if (u16 <= AVRC_PDU_PREV_GROUP) - ret = BTA_AV_RSP_ACCEPT; - else - ret = BTA_AV_RSP_REJ; - } - } +static tBTA_AV_CODE bta_av_group_navi_supported(uint8_t len, uint8_t* p_data, + bool is_inquiry) { + tBTA_AV_CODE ret = BTA_AV_RSP_NOT_IMPL; + uint8_t* p_ptr = p_data; + uint16_t u16; + uint32_t u32; + + if (p_bta_av_cfg->avrc_group && len == BTA_GROUP_NAVI_MSG_OP_DATA_LEN) { + BTA_AV_BE_STREAM_TO_CO_ID(u32, p_ptr); + BE_STREAM_TO_UINT16(u16, p_ptr); + + if (u32 == AVRC_CO_METADATA) { + if (is_inquiry) { + if (u16 <= AVRC_PDU_PREV_GROUP) ret = BTA_AV_RSP_IMPL_STBL; + } else { + if (u16 <= AVRC_PDU_PREV_GROUP) + ret = BTA_AV_RSP_ACCEPT; + else + ret = BTA_AV_RSP_REJ; + } } + } - return ret; + return ret; } /******************************************************************************* @@ -429,36 +404,26 @@ static tBTA_AV_CODE bta_av_group_navi_supported(uint8_t len, uint8_t *p_data, bo * Returns BTA_AV_RSP_ACCEPT of supported, BTA_AV_RSP_NOT_IMPL if not. * ******************************************************************************/ -static tBTA_AV_CODE bta_av_op_supported(tBTA_AV_RC rc_id, bool is_inquiry) -{ - tBTA_AV_CODE ret_code = BTA_AV_RSP_NOT_IMPL; - - if (p_bta_av_rc_id) - { - if (is_inquiry) - { - if (p_bta_av_rc_id[rc_id >> 4] & (1 << (rc_id & 0x0F))) - { - ret_code = BTA_AV_RSP_IMPL_STBL; - } - } - else - { - if (p_bta_av_rc_id[rc_id >> 4] & (1 << (rc_id & 0x0F))) - { - ret_code = BTA_AV_RSP_ACCEPT; - } - else if ((p_bta_av_cfg->rc_pass_rsp == BTA_AV_RSP_INTERIM) && p_bta_av_rc_id_ac) - { - if (p_bta_av_rc_id_ac[rc_id >> 4] & (1 << (rc_id & 0x0F))) - { - ret_code = BTA_AV_RSP_INTERIM; - } - } +static tBTA_AV_CODE bta_av_op_supported(tBTA_AV_RC rc_id, bool is_inquiry) { + tBTA_AV_CODE ret_code = BTA_AV_RSP_NOT_IMPL; + + if (p_bta_av_rc_id) { + if (is_inquiry) { + if (p_bta_av_rc_id[rc_id >> 4] & (1 << (rc_id & 0x0F))) { + ret_code = BTA_AV_RSP_IMPL_STBL; + } + } else { + if (p_bta_av_rc_id[rc_id >> 4] & (1 << (rc_id & 0x0F))) { + ret_code = BTA_AV_RSP_ACCEPT; + } else if ((p_bta_av_cfg->rc_pass_rsp == BTA_AV_RSP_INTERIM) && + p_bta_av_rc_id_ac) { + if (p_bta_av_rc_id_ac[rc_id >> 4] & (1 << (rc_id & 0x0F))) { + ret_code = BTA_AV_RSP_INTERIM; } - + } } - return ret_code; + } + return ret_code; } /******************************************************************************* @@ -470,28 +435,24 @@ static tBTA_AV_CODE bta_av_op_supported(tBTA_AV_RC rc_id, bool is_inquiry) * Returns NULL, if not found. * ******************************************************************************/ -tBTA_AV_LCB * bta_av_find_lcb(BD_ADDR addr, uint8_t op) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - int xx; - uint8_t mask; - tBTA_AV_LCB *p_lcb = NULL; - - for(xx=0; xxconn_lcb) && 0 ==( bdcmp(p_cb->lcb[xx].addr, addr))) - { - p_lcb = &p_cb->lcb[xx]; - if (op == BTA_AV_LCB_FREE) - { - p_cb->conn_lcb &= ~mask; /* clear the connect mask */ - APPL_TRACE_DEBUG("conn_lcb: 0x%x", p_cb->conn_lcb); - } - break; - } - } - return p_lcb; +tBTA_AV_LCB* bta_av_find_lcb(BD_ADDR addr, uint8_t op) { + tBTA_AV_CB* p_cb = &bta_av_cb; + int xx; + uint8_t mask; + tBTA_AV_LCB* p_lcb = NULL; + + for (xx = 0; xx < BTA_AV_NUM_LINKS; xx++) { + mask = 1 << xx; /* the used mask for this lcb */ + if ((mask & p_cb->conn_lcb) && 0 == (bdcmp(p_cb->lcb[xx].addr, addr))) { + p_lcb = &p_cb->lcb[xx]; + if (op == BTA_AV_LCB_FREE) { + p_cb->conn_lcb &= ~mask; /* clear the connect mask */ + APPL_TRACE_DEBUG("conn_lcb: 0x%x", p_cb->conn_lcb); + } + break; + } + } + return p_lcb; } /******************************************************************************* @@ -503,117 +464,111 @@ tBTA_AV_LCB * bta_av_find_lcb(BD_ADDR addr, uint8_t op) * Returns void * ******************************************************************************/ -void bta_av_rc_opened(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_RC_OPEN rc_open; - tBTA_AV_SCB *p_scb; - int i; - uint8_t shdl = 0; - tBTA_AV_LCB *p_lcb; - tBTA_AV_RCB *p_rcb; - uint8_t tmp; - uint8_t disc = 0; - - /* find the SCB & stop the timer */ - for(i=0; ip_scb[i]; - if (p_scb && bdcmp(p_scb->peer_addr, p_data->rc_conn_chg.peer_addr) == 0) - { - p_scb->rc_handle = p_data->rc_conn_chg.handle; - APPL_TRACE_DEBUG("bta_av_rc_opened shdl:%d, srch %d", i + 1, p_scb->rc_handle); - shdl = i+1; - LOG_INFO(LOG_TAG, "%s allow incoming AVRCP connections:%d", __func__, p_scb->use_rc); - alarm_cancel(p_scb->avrc_ct_timer); - disc = p_scb->hndl; - break; - } - } - - i = p_data->rc_conn_chg.handle; - if (p_cb->rcb[i].handle == BTA_AV_RC_HANDLE_NONE) - { - APPL_TRACE_ERROR("not a valid handle:%d any more", i); - return; - } - - APPL_TRACE_DEBUG("%s local features %d peer features %d", - __func__, p_cb->features, p_cb->rcb[i].peer_features); - - /* listen to browsing channel when the connection is open, - * if peer initiated AVRCP connection and local device supports browsing channel */ - AVRC_OpenBrowse (p_data->rc_conn_chg.handle, AVCT_ACP); - - if (p_cb->rcb[i].lidx == (BTA_AV_NUM_LINKS + 1) && shdl != 0) - { - /* rc is opened on the RC only ACP channel, but is for a specific - * SCB -> need to switch RCBs */ - p_rcb = bta_av_get_rcb_by_shdl(shdl); - if (p_rcb) - { - p_rcb->shdl = p_cb->rcb[i].shdl; - tmp = p_rcb->lidx; - p_rcb->lidx = p_cb->rcb[i].lidx; - p_cb->rcb[i].lidx = tmp; - p_cb->rc_acp_handle = p_rcb->handle; - p_cb->rc_acp_idx = (p_rcb - p_cb->rcb) + 1; - APPL_TRACE_DEBUG("switching RCB rc_acp_handle:%d idx:%d", - p_cb->rc_acp_handle, p_cb->rc_acp_idx); - } - } - - p_cb->rcb[i].shdl = shdl; - rc_open.rc_handle = i; - APPL_TRACE_ERROR("bta_av_rc_opened rcb[%d] shdl:%d lidx:%d/%d", - i, shdl, p_cb->rcb[i].lidx, p_cb->lcb[BTA_AV_NUM_LINKS].lidx); - p_cb->rcb[i].status |= BTA_AV_RC_CONN_MASK; - - if (!shdl && 0 == p_cb->lcb[BTA_AV_NUM_LINKS].lidx) - { - /* no associated SCB -> connected to an RC only device - * update the index to the extra LCB */ - p_lcb = &p_cb->lcb[BTA_AV_NUM_LINKS]; - bdcpy(p_lcb->addr, p_data->rc_conn_chg.peer_addr); - APPL_TRACE_DEBUG("rc_only bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", - p_lcb->addr[0], p_lcb->addr[1], - p_lcb->addr[2], p_lcb->addr[3], - p_lcb->addr[4], p_lcb->addr[5]); - p_lcb->lidx = BTA_AV_NUM_LINKS + 1; - p_cb->rcb[i].lidx = p_lcb->lidx; - p_lcb->conn_msk = 1; - APPL_TRACE_ERROR("rcb[%d].lidx=%d, lcb.conn_msk=x%x", - i, p_cb->rcb[i].lidx, p_lcb->conn_msk); - disc = p_data->rc_conn_chg.handle|BTA_AV_CHNL_MSK; - } - - bdcpy(rc_open.peer_addr, p_data->rc_conn_chg.peer_addr); - rc_open.peer_features = p_cb->rcb[i].peer_features; - rc_open.status = BTA_AV_SUCCESS; - APPL_TRACE_DEBUG("%s local features:x%x peer_features:x%x", __func__, p_cb->features, - rc_open.peer_features); - if (rc_open.peer_features == 0) - { - /* we have not done SDP on peer RC capabilities. - * peer must have initiated the RC connection */ - if (p_cb->features & BTA_AV_FEAT_RCCT) - rc_open.peer_features |= BTA_AV_FEAT_RCTG; - if (p_cb->features & BTA_AV_FEAT_RCTG) - rc_open.peer_features |= BTA_AV_FEAT_RCCT; - - bta_av_rc_disc(disc); - } - (*p_cb->p_cback)(BTA_AV_RC_OPEN_EVT, (tBTA_AV *) &rc_open); - - /* if local initiated AVRCP connection and both peer and locals device support - * browsing channel, open the browsing channel now - * TODO (sanketa): Some TG would not broadcast browse feature hence check inter-op. */ - if ((p_cb->features & BTA_AV_FEAT_BROWSE) && - (rc_open.peer_features & BTA_AV_FEAT_BROWSE) && - ((p_cb->rcb[i].status & BTA_AV_RC_ROLE_MASK) == BTA_AV_RC_ROLE_INT)) - { - APPL_TRACE_DEBUG("%s opening AVRC Browse channel", __func__); - AVRC_OpenBrowse (p_data->rc_conn_chg.handle, AVCT_INT); - } +void bta_av_rc_opened(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + tBTA_AV_RC_OPEN rc_open; + tBTA_AV_SCB* p_scb; + int i; + uint8_t shdl = 0; + tBTA_AV_LCB* p_lcb; + tBTA_AV_RCB* p_rcb; + uint8_t tmp; + uint8_t disc = 0; + + /* find the SCB & stop the timer */ + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + p_scb = p_cb->p_scb[i]; + if (p_scb && bdcmp(p_scb->peer_addr, p_data->rc_conn_chg.peer_addr) == 0) { + p_scb->rc_handle = p_data->rc_conn_chg.handle; + APPL_TRACE_DEBUG("bta_av_rc_opened shdl:%d, srch %d", i + 1, + p_scb->rc_handle); + shdl = i + 1; + LOG_INFO(LOG_TAG, "%s allow incoming AVRCP connections:%d", __func__, + p_scb->use_rc); + alarm_cancel(p_scb->avrc_ct_timer); + disc = p_scb->hndl; + break; + } + } + + i = p_data->rc_conn_chg.handle; + if (p_cb->rcb[i].handle == BTA_AV_RC_HANDLE_NONE) { + APPL_TRACE_ERROR("not a valid handle:%d any more", i); + return; + } + + APPL_TRACE_DEBUG("%s local features %d peer features %d", __func__, + p_cb->features, p_cb->rcb[i].peer_features); + + /* listen to browsing channel when the connection is open, + * if peer initiated AVRCP connection and local device supports browsing + * channel */ + AVRC_OpenBrowse(p_data->rc_conn_chg.handle, AVCT_ACP); + + if (p_cb->rcb[i].lidx == (BTA_AV_NUM_LINKS + 1) && shdl != 0) { + /* rc is opened on the RC only ACP channel, but is for a specific + * SCB -> need to switch RCBs */ + p_rcb = bta_av_get_rcb_by_shdl(shdl); + if (p_rcb) { + p_rcb->shdl = p_cb->rcb[i].shdl; + tmp = p_rcb->lidx; + p_rcb->lidx = p_cb->rcb[i].lidx; + p_cb->rcb[i].lidx = tmp; + p_cb->rc_acp_handle = p_rcb->handle; + p_cb->rc_acp_idx = (p_rcb - p_cb->rcb) + 1; + APPL_TRACE_DEBUG("switching RCB rc_acp_handle:%d idx:%d", + p_cb->rc_acp_handle, p_cb->rc_acp_idx); + } + } + + p_cb->rcb[i].shdl = shdl; + rc_open.rc_handle = i; + APPL_TRACE_ERROR("bta_av_rc_opened rcb[%d] shdl:%d lidx:%d/%d", i, shdl, + p_cb->rcb[i].lidx, p_cb->lcb[BTA_AV_NUM_LINKS].lidx); + p_cb->rcb[i].status |= BTA_AV_RC_CONN_MASK; + + if (!shdl && 0 == p_cb->lcb[BTA_AV_NUM_LINKS].lidx) { + /* no associated SCB -> connected to an RC only device + * update the index to the extra LCB */ + p_lcb = &p_cb->lcb[BTA_AV_NUM_LINKS]; + bdcpy(p_lcb->addr, p_data->rc_conn_chg.peer_addr); + APPL_TRACE_DEBUG("rc_only bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", + p_lcb->addr[0], p_lcb->addr[1], p_lcb->addr[2], + p_lcb->addr[3], p_lcb->addr[4], p_lcb->addr[5]); + p_lcb->lidx = BTA_AV_NUM_LINKS + 1; + p_cb->rcb[i].lidx = p_lcb->lidx; + p_lcb->conn_msk = 1; + APPL_TRACE_ERROR("rcb[%d].lidx=%d, lcb.conn_msk=x%x", i, p_cb->rcb[i].lidx, + p_lcb->conn_msk); + disc = p_data->rc_conn_chg.handle | BTA_AV_CHNL_MSK; + } + + bdcpy(rc_open.peer_addr, p_data->rc_conn_chg.peer_addr); + rc_open.peer_features = p_cb->rcb[i].peer_features; + rc_open.status = BTA_AV_SUCCESS; + APPL_TRACE_DEBUG("%s local features:x%x peer_features:x%x", __func__, + p_cb->features, rc_open.peer_features); + if (rc_open.peer_features == 0) { + /* we have not done SDP on peer RC capabilities. + * peer must have initiated the RC connection */ + if (p_cb->features & BTA_AV_FEAT_RCCT) + rc_open.peer_features |= BTA_AV_FEAT_RCTG; + if (p_cb->features & BTA_AV_FEAT_RCTG) + rc_open.peer_features |= BTA_AV_FEAT_RCCT; + + bta_av_rc_disc(disc); + } + (*p_cb->p_cback)(BTA_AV_RC_OPEN_EVT, (tBTA_AV*)&rc_open); + + /* if local initiated AVRCP connection and both peer and locals device support + * browsing channel, open the browsing channel now + * TODO (sanketa): Some TG would not broadcast browse feature hence check + * inter-op. */ + if ((p_cb->features & BTA_AV_FEAT_BROWSE) && + (rc_open.peer_features & BTA_AV_FEAT_BROWSE) && + ((p_cb->rcb[i].status & BTA_AV_RC_ROLE_MASK) == BTA_AV_RC_ROLE_INT)) { + APPL_TRACE_DEBUG("%s opening AVRC Browse channel", __func__); + AVRC_OpenBrowse(p_data->rc_conn_chg.handle, AVCT_INT); + } } /******************************************************************************* @@ -625,21 +580,17 @@ void bta_av_rc_opened(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_remote_cmd(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_RCB *p_rcb; - if (p_cb->features & BTA_AV_FEAT_RCCT) - { - if (p_data->hdr.layer_specific < BTA_AV_NUM_RCB) - { - p_rcb = &p_cb->rcb[p_data->hdr.layer_specific]; - if (p_rcb->status & BTA_AV_RC_CONN_MASK) - { - AVRC_PassCmd(p_rcb->handle, p_data->api_remote_cmd.label, +void bta_av_rc_remote_cmd(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + tBTA_AV_RCB* p_rcb; + if (p_cb->features & BTA_AV_FEAT_RCCT) { + if (p_data->hdr.layer_specific < BTA_AV_NUM_RCB) { + p_rcb = &p_cb->rcb[p_data->hdr.layer_specific]; + if (p_rcb->status & BTA_AV_RC_CONN_MASK) { + AVRC_PassCmd(p_rcb->handle, p_data->api_remote_cmd.label, &p_data->api_remote_cmd.msg); - } - } + } } + } } /******************************************************************************* @@ -651,18 +602,16 @@ void bta_av_rc_remote_cmd(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_vendor_cmd(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_RCB *p_rcb; - if ( (p_cb->features & (BTA_AV_FEAT_RCCT | BTA_AV_FEAT_VENDOR)) == - (BTA_AV_FEAT_RCCT | BTA_AV_FEAT_VENDOR)) - { - if (p_data->hdr.layer_specific < BTA_AV_NUM_RCB) - { - p_rcb = &p_cb->rcb[p_data->hdr.layer_specific]; - AVRC_VendorCmd(p_rcb->handle, p_data->api_vendor.label, &p_data->api_vendor.msg); - } - } +void bta_av_rc_vendor_cmd(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + tBTA_AV_RCB* p_rcb; + if ((p_cb->features & (BTA_AV_FEAT_RCCT | BTA_AV_FEAT_VENDOR)) == + (BTA_AV_FEAT_RCCT | BTA_AV_FEAT_VENDOR)) { + if (p_data->hdr.layer_specific < BTA_AV_NUM_RCB) { + p_rcb = &p_cb->rcb[p_data->hdr.layer_specific]; + AVRC_VendorCmd(p_rcb->handle, p_data->api_vendor.label, + &p_data->api_vendor.msg); + } + } } /******************************************************************************* @@ -674,18 +623,16 @@ void bta_av_rc_vendor_cmd(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_vendor_rsp(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_RCB *p_rcb; - if ( (p_cb->features & (BTA_AV_FEAT_RCTG | BTA_AV_FEAT_VENDOR)) == - (BTA_AV_FEAT_RCTG | BTA_AV_FEAT_VENDOR)) - { - if (p_data->hdr.layer_specific < BTA_AV_NUM_RCB) - { - p_rcb = &p_cb->rcb[p_data->hdr.layer_specific]; - AVRC_VendorRsp(p_rcb->handle, p_data->api_vendor.label, &p_data->api_vendor.msg); - } - } +void bta_av_rc_vendor_rsp(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + tBTA_AV_RCB* p_rcb; + if ((p_cb->features & (BTA_AV_FEAT_RCTG | BTA_AV_FEAT_VENDOR)) == + (BTA_AV_FEAT_RCTG | BTA_AV_FEAT_VENDOR)) { + if (p_data->hdr.layer_specific < BTA_AV_NUM_RCB) { + p_rcb = &p_cb->rcb[p_data->hdr.layer_specific]; + AVRC_VendorRsp(p_rcb->handle, p_data->api_vendor.label, + &p_data->api_vendor.msg); + } + } } /******************************************************************************* @@ -697,28 +644,24 @@ void bta_av_rc_vendor_rsp(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_meta_rsp(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_RCB *p_rcb; - bool do_free = true; - - if ((p_cb->features & BTA_AV_FEAT_METADATA) && (p_data->hdr.layer_specific < BTA_AV_NUM_RCB)) - { - if ((p_data->api_meta_rsp.is_rsp && (p_cb->features & BTA_AV_FEAT_RCTG)) || - (!p_data->api_meta_rsp.is_rsp && (p_cb->features & BTA_AV_FEAT_RCCT)) ) - { - p_rcb = &p_cb->rcb[p_data->hdr.layer_specific]; - if (p_rcb->handle != BTA_AV_RC_HANDLE_NONE) { - AVRC_MsgReq(p_rcb->handle, p_data->api_meta_rsp.label, - p_data->api_meta_rsp.rsp_code, - p_data->api_meta_rsp.p_pkt); - do_free = false; - } - } - } - - if (do_free) - osi_free_and_reset((void **)&p_data->api_meta_rsp.p_pkt); +void bta_av_rc_meta_rsp(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + tBTA_AV_RCB* p_rcb; + bool do_free = true; + + if ((p_cb->features & BTA_AV_FEAT_METADATA) && + (p_data->hdr.layer_specific < BTA_AV_NUM_RCB)) { + if ((p_data->api_meta_rsp.is_rsp && (p_cb->features & BTA_AV_FEAT_RCTG)) || + (!p_data->api_meta_rsp.is_rsp && (p_cb->features & BTA_AV_FEAT_RCCT))) { + p_rcb = &p_cb->rcb[p_data->hdr.layer_specific]; + if (p_rcb->handle != BTA_AV_RC_HANDLE_NONE) { + AVRC_MsgReq(p_rcb->handle, p_data->api_meta_rsp.label, + p_data->api_meta_rsp.rsp_code, p_data->api_meta_rsp.p_pkt); + do_free = false; + } + } + } + + if (do_free) osi_free_and_reset((void**)&p_data->api_meta_rsp.p_pkt); } /******************************************************************************* @@ -730,9 +673,8 @@ void bta_av_rc_meta_rsp(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_free_rsp (UNUSED_ATTR tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - osi_free_and_reset((void **)&p_data->api_meta_rsp.p_pkt); +void bta_av_rc_free_rsp(UNUSED_ATTR tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + osi_free_and_reset((void**)&p_data->api_meta_rsp.p_pkt); } /******************************************************************************* @@ -744,12 +686,11 @@ void bta_av_rc_free_rsp (UNUSED_ATTR tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_free_browse_msg (UNUSED_ATTR tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - if (p_data->rc_msg.opcode == AVRC_OP_BROWSE) - { - osi_free_and_reset((void **)&p_data->rc_msg.msg.browse.p_browse_pkt); - } +void bta_av_rc_free_browse_msg(UNUSED_ATTR tBTA_AV_CB* p_cb, + tBTA_AV_DATA* p_data) { + if (p_data->rc_msg.opcode == AVRC_OP_BROWSE) { + osi_free_and_reset((void**)&p_data->rc_msg.msg.browse.p_browse_pkt); + } } /******************************************************************************* @@ -761,36 +702,29 @@ void bta_av_rc_free_browse_msg (UNUSED_ATTR tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_da * Returns BTA_AV_STS_NO_RSP, if no error * ******************************************************************************/ -static tAVRC_STS bta_av_chk_notif_evt_id(tAVRC_MSG_VENDOR *p_vendor) -{ - tAVRC_STS status = BTA_AV_STS_NO_RSP; - uint8_t xx; - uint16_t u16; - uint8_t *p = p_vendor->p_vendor_data + 2; - - BE_STREAM_TO_UINT16 (u16, p); - /* double check the fixed length */ - if ((u16 != 5) || (p_vendor->vendor_len != 9)) - { - status = AVRC_STS_INTERNAL_ERR; - } - else - { - /* make sure the player_id is valid */ - for (xx=0; xxnum_evt_ids; xx++) - { - if (*p == p_bta_av_cfg->p_meta_evt_ids[xx]) - { - break; - } - } - if (xx == p_bta_av_cfg->num_evt_ids) - { - status = AVRC_STS_BAD_PARAM; - } - } - - return status; +static tAVRC_STS bta_av_chk_notif_evt_id(tAVRC_MSG_VENDOR* p_vendor) { + tAVRC_STS status = BTA_AV_STS_NO_RSP; + uint8_t xx; + uint16_t u16; + uint8_t* p = p_vendor->p_vendor_data + 2; + + BE_STREAM_TO_UINT16(u16, p); + /* double check the fixed length */ + if ((u16 != 5) || (p_vendor->vendor_len != 9)) { + status = AVRC_STS_INTERNAL_ERR; + } else { + /* make sure the player_id is valid */ + for (xx = 0; xx < p_bta_av_cfg->num_evt_ids; xx++) { + if (*p == p_bta_av_cfg->p_meta_evt_ids[xx]) { + break; + } + } + if (xx == p_bta_av_cfg->num_evt_ids) { + status = AVRC_STS_BAD_PARAM; + } + } + + return status; } /******************************************************************************* @@ -802,102 +736,87 @@ static tAVRC_STS bta_av_chk_notif_evt_id(tAVRC_MSG_VENDOR *p_vendor) * Returns true to respond immediately * ******************************************************************************/ -tBTA_AV_EVT bta_av_proc_meta_cmd(tAVRC_RESPONSE *p_rc_rsp, tBTA_AV_RC_MSG *p_msg, uint8_t *p_ctype) -{ - tBTA_AV_EVT evt = BTA_AV_META_MSG_EVT; - uint8_t u8, pdu, *p; - uint16_t u16; - tAVRC_MSG_VENDOR *p_vendor = &p_msg->msg.vendor; +tBTA_AV_EVT bta_av_proc_meta_cmd(tAVRC_RESPONSE* p_rc_rsp, + tBTA_AV_RC_MSG* p_msg, uint8_t* p_ctype) { + tBTA_AV_EVT evt = BTA_AV_META_MSG_EVT; + uint8_t u8, pdu, *p; + uint16_t u16; + tAVRC_MSG_VENDOR* p_vendor = &p_msg->msg.vendor; #if (AVRC_METADATA_INCLUDED == TRUE) - pdu = *(p_vendor->p_vendor_data); - p_rc_rsp->pdu = pdu; - *p_ctype = AVRC_RSP_REJ; - - /* Check to ansure a valid minimum meta data length */ - if ((AVRC_MIN_META_CMD_LEN + p_vendor->vendor_len) > AVRC_META_CMD_BUF_SIZE) - { - /* reject it */ - p_rc_rsp->rsp.status = AVRC_STS_BAD_PARAM; - APPL_TRACE_ERROR("%s Invalid meta-command length: %d", __func__, p_vendor->vendor_len); - return 0; - } - - /* Metadata messages only use PANEL sub-unit type */ - if (p_vendor->hdr.subunit_type != AVRC_SUB_PANEL) - { - APPL_TRACE_DEBUG("SUBUNIT must be PANEL"); - /* reject it */ - evt=0; - p_vendor->hdr.ctype = BTA_AV_RSP_NOT_IMPL; - p_vendor->vendor_len = 0; - p_rc_rsp->rsp.status = AVRC_STS_BAD_PARAM; - } - else if (!AVRC_IsValidAvcType(pdu, p_vendor->hdr.ctype) ) - { - APPL_TRACE_DEBUG("Invalid pdu/ctype: 0x%x, %d", pdu, p_vendor->hdr.ctype); - /* reject invalid message without reporting to app */ + pdu = *(p_vendor->p_vendor_data); + p_rc_rsp->pdu = pdu; + *p_ctype = AVRC_RSP_REJ; + + /* Check to ansure a valid minimum meta data length */ + if ((AVRC_MIN_META_CMD_LEN + p_vendor->vendor_len) > AVRC_META_CMD_BUF_SIZE) { + /* reject it */ + p_rc_rsp->rsp.status = AVRC_STS_BAD_PARAM; + APPL_TRACE_ERROR("%s Invalid meta-command length: %d", __func__, + p_vendor->vendor_len); + return 0; + } + + /* Metadata messages only use PANEL sub-unit type */ + if (p_vendor->hdr.subunit_type != AVRC_SUB_PANEL) { + APPL_TRACE_DEBUG("SUBUNIT must be PANEL"); + /* reject it */ + evt = 0; + p_vendor->hdr.ctype = BTA_AV_RSP_NOT_IMPL; + p_vendor->vendor_len = 0; + p_rc_rsp->rsp.status = AVRC_STS_BAD_PARAM; + } else if (!AVRC_IsValidAvcType(pdu, p_vendor->hdr.ctype)) { + APPL_TRACE_DEBUG("Invalid pdu/ctype: 0x%x, %d", pdu, p_vendor->hdr.ctype); + /* reject invalid message without reporting to app */ + evt = 0; + p_rc_rsp->rsp.status = AVRC_STS_BAD_CMD; + } else { + switch (pdu) { + case AVRC_PDU_GET_CAPABILITIES: + /* process GetCapabilities command without reporting the event to app */ evt = 0; - p_rc_rsp->rsp.status = AVRC_STS_BAD_CMD; - } - else - { - switch (pdu) - { - case AVRC_PDU_GET_CAPABILITIES: - /* process GetCapabilities command without reporting the event to app */ - evt = 0; - u8 = *(p_vendor->p_vendor_data + 4); - p = p_vendor->p_vendor_data + 2; - p_rc_rsp->get_caps.capability_id = u8; - BE_STREAM_TO_UINT16 (u16, p); - if ((u16 != 1) || (p_vendor->vendor_len != 5)) - { - p_rc_rsp->get_caps.status = AVRC_STS_INTERNAL_ERR; - } - else - { - p_rc_rsp->get_caps.status = AVRC_STS_NO_ERROR; - if (u8 == AVRC_CAP_COMPANY_ID) - { - *p_ctype = AVRC_RSP_IMPL_STBL; - p_rc_rsp->get_caps.count = p_bta_av_cfg->num_co_ids; - memcpy(p_rc_rsp->get_caps.param.company_id, p_bta_av_cfg->p_meta_co_ids, - (p_bta_av_cfg->num_co_ids << 2)); - } - else if (u8 == AVRC_CAP_EVENTS_SUPPORTED) - { - *p_ctype = AVRC_RSP_IMPL_STBL; - p_rc_rsp->get_caps.count = p_bta_av_cfg->num_evt_ids; - memcpy(p_rc_rsp->get_caps.param.event_id, p_bta_av_cfg->p_meta_evt_ids, - p_bta_av_cfg->num_evt_ids); - } - else - { - APPL_TRACE_DEBUG("Invalid capability ID: 0x%x", u8); - /* reject - unknown capability ID */ - p_rc_rsp->get_caps.status = AVRC_STS_BAD_PARAM; - } - } - break; - - case AVRC_PDU_REGISTER_NOTIFICATION: - /* make sure the event_id is implemented */ - p_rc_rsp->rsp.status = bta_av_chk_notif_evt_id (p_vendor); - if (p_rc_rsp->rsp.status != BTA_AV_STS_NO_RSP) - evt = 0; - break; - + u8 = *(p_vendor->p_vendor_data + 4); + p = p_vendor->p_vendor_data + 2; + p_rc_rsp->get_caps.capability_id = u8; + BE_STREAM_TO_UINT16(u16, p); + if ((u16 != 1) || (p_vendor->vendor_len != 5)) { + p_rc_rsp->get_caps.status = AVRC_STS_INTERNAL_ERR; + } else { + p_rc_rsp->get_caps.status = AVRC_STS_NO_ERROR; + if (u8 == AVRC_CAP_COMPANY_ID) { + *p_ctype = AVRC_RSP_IMPL_STBL; + p_rc_rsp->get_caps.count = p_bta_av_cfg->num_co_ids; + memcpy(p_rc_rsp->get_caps.param.company_id, + p_bta_av_cfg->p_meta_co_ids, + (p_bta_av_cfg->num_co_ids << 2)); + } else if (u8 == AVRC_CAP_EVENTS_SUPPORTED) { + *p_ctype = AVRC_RSP_IMPL_STBL; + p_rc_rsp->get_caps.count = p_bta_av_cfg->num_evt_ids; + memcpy(p_rc_rsp->get_caps.param.event_id, + p_bta_av_cfg->p_meta_evt_ids, p_bta_av_cfg->num_evt_ids); + } else { + APPL_TRACE_DEBUG("Invalid capability ID: 0x%x", u8); + /* reject - unknown capability ID */ + p_rc_rsp->get_caps.status = AVRC_STS_BAD_PARAM; + } } + break; + + case AVRC_PDU_REGISTER_NOTIFICATION: + /* make sure the event_id is implemented */ + p_rc_rsp->rsp.status = bta_av_chk_notif_evt_id(p_vendor); + if (p_rc_rsp->rsp.status != BTA_AV_STS_NO_RSP) evt = 0; + break; } + } #else - APPL_TRACE_DEBUG("AVRCP 1.3 Metadata not supporteed. Reject command."); - /* reject invalid message without reporting to app */ - evt = 0; - p_rc_rsp->rsp.status = AVRC_STS_BAD_CMD; + APPL_TRACE_DEBUG("AVRCP 1.3 Metadata not supporteed. Reject command."); + /* reject invalid message without reporting to app */ + evt = 0; + p_rc_rsp->rsp.status = AVRC_STS_BAD_CMD; #endif - return evt; + return evt; } /******************************************************************************* @@ -909,205 +828,182 @@ tBTA_AV_EVT bta_av_proc_meta_cmd(tAVRC_RESPONSE *p_rc_rsp, tBTA_AV_RC_MSG *p_ms * Returns void * ******************************************************************************/ -void bta_av_rc_msg(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - tBTA_AV_EVT evt = 0; - tBTA_AV av; - BT_HDR *p_pkt = NULL; - tAVRC_MSG_VENDOR *p_vendor = &p_data->rc_msg.msg.vendor; - bool is_inquiry = - ((p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_SPEC_INQ) || - p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_GEN_INQ); +void bta_av_rc_msg(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + tBTA_AV_EVT evt = 0; + tBTA_AV av; + BT_HDR* p_pkt = NULL; + tAVRC_MSG_VENDOR* p_vendor = &p_data->rc_msg.msg.vendor; + bool is_inquiry = ((p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_SPEC_INQ) || + p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_GEN_INQ); #if (AVRC_METADATA_INCLUDED == TRUE) - uint8_t ctype = 0; - tAVRC_RESPONSE rc_rsp; + uint8_t ctype = 0; + tAVRC_RESPONSE rc_rsp; - rc_rsp.rsp.status = BTA_AV_STS_NO_RSP; + rc_rsp.rsp.status = BTA_AV_STS_NO_RSP; #endif - if (NULL == p_data) - { - APPL_TRACE_ERROR("Message from peer with no data in %s", __func__); - return; - } - - APPL_TRACE_DEBUG("%s: opcode=%x, ctype=%x", __func__, p_data->rc_msg.opcode, - p_data->rc_msg.msg.hdr.ctype); - - if (p_data->rc_msg.opcode == AVRC_OP_PASS_THRU) - { - /* if this is a pass thru command */ - if ((p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_CTRL) || - (p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_SPEC_INQ) || - (p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_GEN_INQ) - ) - { - /* check if operation is supported */ - char avrcp_ct_support[PROPERTY_VALUE_MAX]; - osi_property_get("bluetooth.pts.avrcp_ct.support", avrcp_ct_support, "false"); - if (p_data->rc_msg.msg.pass.op_id == AVRC_ID_VENDOR) - { - p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_NOT_IMPL; + if (NULL == p_data) { + APPL_TRACE_ERROR("Message from peer with no data in %s", __func__); + return; + } + + APPL_TRACE_DEBUG("%s: opcode=%x, ctype=%x", __func__, p_data->rc_msg.opcode, + p_data->rc_msg.msg.hdr.ctype); + + if (p_data->rc_msg.opcode == AVRC_OP_PASS_THRU) { + /* if this is a pass thru command */ + if ((p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_CTRL) || + (p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_SPEC_INQ) || + (p_data->rc_msg.msg.hdr.ctype == AVRC_CMD_GEN_INQ)) { + /* check if operation is supported */ + char avrcp_ct_support[PROPERTY_VALUE_MAX]; + osi_property_get("bluetooth.pts.avrcp_ct.support", avrcp_ct_support, + "false"); + if (p_data->rc_msg.msg.pass.op_id == AVRC_ID_VENDOR) { + p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_NOT_IMPL; #if (AVRC_METADATA_INCLUDED == TRUE) - if (p_cb->features & BTA_AV_FEAT_METADATA) - p_data->rc_msg.msg.hdr.ctype = - bta_av_group_navi_supported(p_data->rc_msg.msg.pass.pass_len, - p_data->rc_msg.msg.pass.p_pass_data, is_inquiry); + if (p_cb->features & BTA_AV_FEAT_METADATA) + p_data->rc_msg.msg.hdr.ctype = bta_av_group_navi_supported( + p_data->rc_msg.msg.pass.pass_len, + p_data->rc_msg.msg.pass.p_pass_data, is_inquiry); #endif - } + } #if (AVRC_CTRL_INCLUDED == TRUE) - else if (((p_data->rc_msg.msg.pass.op_id == AVRC_ID_VOL_UP)|| - (p_data->rc_msg.msg.pass.op_id == AVRC_ID_VOL_DOWN)) && - !strcmp(avrcp_ct_support, "true")) - { - p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_ACCEPT; - } -#endif - else - { - p_data->rc_msg.msg.hdr.ctype = - bta_av_op_supported(p_data->rc_msg.msg.pass.op_id, is_inquiry); - } - - APPL_TRACE_DEBUG("ctype %d",p_data->rc_msg.msg.hdr.ctype) - - /* send response */ - if (p_data->rc_msg.msg.hdr.ctype != BTA_AV_RSP_INTERIM) - AVRC_PassRsp(p_data->rc_msg.handle, p_data->rc_msg.label, &p_data->rc_msg.msg.pass); - - /* set up for callback if supported */ - if (p_data->rc_msg.msg.hdr.ctype == BTA_AV_RSP_ACCEPT || p_data->rc_msg.msg.hdr.ctype == BTA_AV_RSP_INTERIM) - { - evt = BTA_AV_REMOTE_CMD_EVT; - av.remote_cmd.rc_id = p_data->rc_msg.msg.pass.op_id; - av.remote_cmd.key_state = p_data->rc_msg.msg.pass.state; - av.remote_cmd.p_data = p_data->rc_msg.msg.pass.p_pass_data; - av.remote_cmd.len = p_data->rc_msg.msg.pass.pass_len; - memcpy(&av.remote_cmd.hdr, &p_data->rc_msg.msg.hdr, sizeof (tAVRC_HDR)); - av.remote_cmd.label = p_data->rc_msg.label; - } - } - /* else if this is a pass thru response */ - /* id response type is not impl, we have to release label */ - else if (p_data->rc_msg.msg.hdr.ctype >= AVRC_RSP_NOT_IMPL) - { - /* set up for callback */ - evt = BTA_AV_REMOTE_RSP_EVT; - av.remote_rsp.rc_id = p_data->rc_msg.msg.pass.op_id; - av.remote_rsp.key_state = p_data->rc_msg.msg.pass.state; - av.remote_rsp.rsp_code = p_data->rc_msg.msg.hdr.ctype; - av.remote_rsp.label = p_data->rc_msg.label; - - /* If this response is for vendor unique command */ - if ((p_data->rc_msg.msg.pass.op_id == AVRC_ID_VENDOR) && - (p_data->rc_msg.msg.pass.pass_len > 0)) - { - av.remote_rsp.p_data = - (uint8_t *)osi_malloc(p_data->rc_msg.msg.pass.pass_len); - APPL_TRACE_DEBUG("Vendor Unique data len = %d", - p_data->rc_msg.msg.pass.pass_len); - memcpy(av.remote_rsp.p_data,p_data->rc_msg.msg.pass.p_pass_data, - p_data->rc_msg.msg.pass.pass_len); - } - } - /* must be a bad ctype -> reject*/ - else - { - p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_REJ; - AVRC_PassRsp(p_data->rc_msg.handle, p_data->rc_msg.label, &p_data->rc_msg.msg.pass); - } - } - /* else if this is a vendor specific command or response */ - else if (p_data->rc_msg.opcode == AVRC_OP_VENDOR) - { - /* set up for callback */ - av.vendor_cmd.code = p_data->rc_msg.msg.hdr.ctype; - av.vendor_cmd.company_id = p_vendor->company_id; - av.vendor_cmd.label = p_data->rc_msg.label; - av.vendor_cmd.p_data = p_vendor->p_vendor_data; - av.vendor_cmd.len = p_vendor->vendor_len; - - /* if configured to support vendor specific and it's a command */ - if ((p_cb->features & BTA_AV_FEAT_VENDOR) && - p_data->rc_msg.msg.hdr.ctype <= AVRC_CMD_GEN_INQ) - { -#if (AVRC_METADATA_INCLUDED == TRUE) - if ((p_cb->features & BTA_AV_FEAT_METADATA) && - (p_vendor->company_id == AVRC_CO_METADATA)) - { - av.meta_msg.p_msg = &p_data->rc_msg.msg; - rc_rsp.rsp.status = BTA_AV_STS_NO_RSP; - evt = bta_av_proc_meta_cmd (&rc_rsp, &p_data->rc_msg, &ctype); - } - else + else if (((p_data->rc_msg.msg.pass.op_id == AVRC_ID_VOL_UP) || + (p_data->rc_msg.msg.pass.op_id == AVRC_ID_VOL_DOWN)) && + !strcmp(avrcp_ct_support, "true")) { + p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_ACCEPT; + } #endif - evt = BTA_AV_VENDOR_CMD_EVT; - } - /* else if configured to support vendor specific and it's a response */ - else if ((p_cb->features & BTA_AV_FEAT_VENDOR) && - p_data->rc_msg.msg.hdr.ctype >= AVRC_RSP_NOT_IMPL) - { + else { + p_data->rc_msg.msg.hdr.ctype = + bta_av_op_supported(p_data->rc_msg.msg.pass.op_id, is_inquiry); + } + + APPL_TRACE_DEBUG("ctype %d", p_data->rc_msg.msg.hdr.ctype) + + /* send response */ + if (p_data->rc_msg.msg.hdr.ctype != BTA_AV_RSP_INTERIM) + AVRC_PassRsp(p_data->rc_msg.handle, p_data->rc_msg.label, + &p_data->rc_msg.msg.pass); + + /* set up for callback if supported */ + if (p_data->rc_msg.msg.hdr.ctype == BTA_AV_RSP_ACCEPT || + p_data->rc_msg.msg.hdr.ctype == BTA_AV_RSP_INTERIM) { + evt = BTA_AV_REMOTE_CMD_EVT; + av.remote_cmd.rc_id = p_data->rc_msg.msg.pass.op_id; + av.remote_cmd.key_state = p_data->rc_msg.msg.pass.state; + av.remote_cmd.p_data = p_data->rc_msg.msg.pass.p_pass_data; + av.remote_cmd.len = p_data->rc_msg.msg.pass.pass_len; + memcpy(&av.remote_cmd.hdr, &p_data->rc_msg.msg.hdr, sizeof(tAVRC_HDR)); + av.remote_cmd.label = p_data->rc_msg.label; + } + } + /* else if this is a pass thru response */ + /* id response type is not impl, we have to release label */ + else if (p_data->rc_msg.msg.hdr.ctype >= AVRC_RSP_NOT_IMPL) { + /* set up for callback */ + evt = BTA_AV_REMOTE_RSP_EVT; + av.remote_rsp.rc_id = p_data->rc_msg.msg.pass.op_id; + av.remote_rsp.key_state = p_data->rc_msg.msg.pass.state; + av.remote_rsp.rsp_code = p_data->rc_msg.msg.hdr.ctype; + av.remote_rsp.label = p_data->rc_msg.label; + + /* If this response is for vendor unique command */ + if ((p_data->rc_msg.msg.pass.op_id == AVRC_ID_VENDOR) && + (p_data->rc_msg.msg.pass.pass_len > 0)) { + av.remote_rsp.p_data = + (uint8_t*)osi_malloc(p_data->rc_msg.msg.pass.pass_len); + APPL_TRACE_DEBUG("Vendor Unique data len = %d", + p_data->rc_msg.msg.pass.pass_len); + memcpy(av.remote_rsp.p_data, p_data->rc_msg.msg.pass.p_pass_data, + p_data->rc_msg.msg.pass.pass_len); + } + } + /* must be a bad ctype -> reject*/ + else { + p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_REJ; + AVRC_PassRsp(p_data->rc_msg.handle, p_data->rc_msg.label, + &p_data->rc_msg.msg.pass); + } + } + /* else if this is a vendor specific command or response */ + else if (p_data->rc_msg.opcode == AVRC_OP_VENDOR) { + /* set up for callback */ + av.vendor_cmd.code = p_data->rc_msg.msg.hdr.ctype; + av.vendor_cmd.company_id = p_vendor->company_id; + av.vendor_cmd.label = p_data->rc_msg.label; + av.vendor_cmd.p_data = p_vendor->p_vendor_data; + av.vendor_cmd.len = p_vendor->vendor_len; + + /* if configured to support vendor specific and it's a command */ + if ((p_cb->features & BTA_AV_FEAT_VENDOR) && + p_data->rc_msg.msg.hdr.ctype <= AVRC_CMD_GEN_INQ) { #if (AVRC_METADATA_INCLUDED == TRUE) - if ((p_cb->features & BTA_AV_FEAT_METADATA) && - (p_vendor->company_id == AVRC_CO_METADATA)) - { - av.meta_msg.p_msg = &p_data->rc_msg.msg; - evt = BTA_AV_META_MSG_EVT; - } - else + if ((p_cb->features & BTA_AV_FEAT_METADATA) && + (p_vendor->company_id == AVRC_CO_METADATA)) { + av.meta_msg.p_msg = &p_data->rc_msg.msg; + rc_rsp.rsp.status = BTA_AV_STS_NO_RSP; + evt = bta_av_proc_meta_cmd(&rc_rsp, &p_data->rc_msg, &ctype); + } else #endif - evt = BTA_AV_VENDOR_RSP_EVT; - - } - /* else if not configured to support vendor specific and it's a command */ - else if (!(p_cb->features & BTA_AV_FEAT_VENDOR) && - p_data->rc_msg.msg.hdr.ctype <= AVRC_CMD_GEN_INQ) - { - if (p_data->rc_msg.msg.vendor.p_vendor_data[0] == AVRC_PDU_INVALID) - { - /* reject it */ - p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_REJ; - p_data->rc_msg.msg.vendor.p_vendor_data[4] = AVRC_STS_BAD_CMD; - } - else - p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_NOT_IMPL; - AVRC_VendorRsp(p_data->rc_msg.handle, p_data->rc_msg.label, &p_data->rc_msg.msg.vendor); - } + evt = BTA_AV_VENDOR_CMD_EVT; } - else if (p_data->rc_msg.opcode == AVRC_OP_BROWSE) - { - /* set up for callback */ - av.meta_msg.rc_handle = p_data->rc_msg.handle; - av.meta_msg.company_id = p_vendor->company_id; - av.meta_msg.code = p_data->rc_msg.msg.hdr.ctype; - av.meta_msg.label = p_data->rc_msg.label; + /* else if configured to support vendor specific and it's a response */ + else if ((p_cb->features & BTA_AV_FEAT_VENDOR) && + p_data->rc_msg.msg.hdr.ctype >= AVRC_RSP_NOT_IMPL) { +#if (AVRC_METADATA_INCLUDED == TRUE) + if ((p_cb->features & BTA_AV_FEAT_METADATA) && + (p_vendor->company_id == AVRC_CO_METADATA)) { av.meta_msg.p_msg = &p_data->rc_msg.msg; - av.meta_msg.p_data = p_data->rc_msg.msg.browse.p_browse_data; - av.meta_msg.len = p_data->rc_msg.msg.browse.browse_len; evt = BTA_AV_META_MSG_EVT; + } else +#endif + evt = BTA_AV_VENDOR_RSP_EVT; + } + /* else if not configured to support vendor specific and it's a command */ + else if (!(p_cb->features & BTA_AV_FEAT_VENDOR) && + p_data->rc_msg.msg.hdr.ctype <= AVRC_CMD_GEN_INQ) { + if (p_data->rc_msg.msg.vendor.p_vendor_data[0] == AVRC_PDU_INVALID) { + /* reject it */ + p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_REJ; + p_data->rc_msg.msg.vendor.p_vendor_data[4] = AVRC_STS_BAD_CMD; + } else + p_data->rc_msg.msg.hdr.ctype = BTA_AV_RSP_NOT_IMPL; + AVRC_VendorRsp(p_data->rc_msg.handle, p_data->rc_msg.label, + &p_data->rc_msg.msg.vendor); + } + } else if (p_data->rc_msg.opcode == AVRC_OP_BROWSE) { + /* set up for callback */ + av.meta_msg.rc_handle = p_data->rc_msg.handle; + av.meta_msg.company_id = p_vendor->company_id; + av.meta_msg.code = p_data->rc_msg.msg.hdr.ctype; + av.meta_msg.label = p_data->rc_msg.label; + av.meta_msg.p_msg = &p_data->rc_msg.msg; + av.meta_msg.p_data = p_data->rc_msg.msg.browse.p_browse_data; + av.meta_msg.len = p_data->rc_msg.msg.browse.browse_len; + evt = BTA_AV_META_MSG_EVT; + } #if (AVRC_METADATA_INCLUDED == TRUE) - if (evt == 0 && rc_rsp.rsp.status != BTA_AV_STS_NO_RSP) - { - if (!p_pkt) - { - rc_rsp.rsp.opcode = p_data->rc_msg.opcode; - AVRC_BldResponse (0, &rc_rsp, &p_pkt); - } - if (p_pkt) - AVRC_MsgReq (p_data->rc_msg.handle, p_data->rc_msg.label, ctype, p_pkt); - } + if (evt == 0 && rc_rsp.rsp.status != BTA_AV_STS_NO_RSP) { + if (!p_pkt) { + rc_rsp.rsp.opcode = p_data->rc_msg.opcode; + AVRC_BldResponse(0, &rc_rsp, &p_pkt); + } + if (p_pkt) + AVRC_MsgReq(p_data->rc_msg.handle, p_data->rc_msg.label, ctype, p_pkt); + } #endif - /* call callback */ - if (evt != 0) - { - av.remote_cmd.rc_handle = p_data->rc_msg.handle; - (*p_cb->p_cback)(evt, &av); - /* If browsing message, then free the browse message buffer */ - bta_av_rc_free_browse_msg(p_cb, p_data); - } + /* call callback */ + if (evt != 0) { + av.remote_cmd.rc_handle = p_data->rc_msg.handle; + (*p_cb->p_cback)(evt, &av); + /* If browsing message, then free the browse message buffer */ + bta_av_rc_free_browse_msg(p_cb, p_data); + } } /******************************************************************************* @@ -1119,35 +1015,30 @@ void bta_av_rc_msg(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_close (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - uint16_t handle = p_data->hdr.layer_specific; - tBTA_AV_SCB *p_scb; - tBTA_AV_RCB *p_rcb; - - if (handle < BTA_AV_NUM_RCB) - { - p_rcb = &p_cb->rcb[handle]; - - APPL_TRACE_DEBUG("%s handle: %d, status=0x%x", __func__, - p_rcb->handle, p_rcb->status); - if (p_rcb->handle != BTA_AV_RC_HANDLE_NONE) - { - if (p_rcb->shdl) - { - p_scb = bta_av_cb.p_scb[p_rcb->shdl - 1]; - if (p_scb) - { - /* just in case the RC timer is active - if (bta_av_cb.features & BTA_AV_FEAT_RCCT && - p_scb->chnl == BTA_AV_CHNL_AUDIO) */ - alarm_cancel(p_scb->avrc_ct_timer); - } - } - - AVRC_Close(p_rcb->handle); +void bta_av_rc_close(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + uint16_t handle = p_data->hdr.layer_specific; + tBTA_AV_SCB* p_scb; + tBTA_AV_RCB* p_rcb; + + if (handle < BTA_AV_NUM_RCB) { + p_rcb = &p_cb->rcb[handle]; + + APPL_TRACE_DEBUG("%s handle: %d, status=0x%x", __func__, p_rcb->handle, + p_rcb->status); + if (p_rcb->handle != BTA_AV_RC_HANDLE_NONE) { + if (p_rcb->shdl) { + p_scb = bta_av_cb.p_scb[p_rcb->shdl - 1]; + if (p_scb) { + /* just in case the RC timer is active + if (bta_av_cb.features & BTA_AV_FEAT_RCCT && + p_scb->chnl == BTA_AV_CHNL_AUDIO) */ + alarm_cancel(p_scb->avrc_ct_timer); } + } + + AVRC_Close(p_rcb->handle); } + } } /******************************************************************************* @@ -1159,9 +1050,8 @@ void bta_av_rc_close (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_browse_close (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) -{ - APPL_TRACE_WARNING("%s empty placeholder does nothing!", __func__); +void bta_av_rc_browse_close(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data) { + APPL_TRACE_WARNING("%s empty placeholder does nothing!", __func__); } /******************************************************************************* @@ -1171,20 +1061,17 @@ void bta_av_rc_browse_close (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) * Returns The index to p_scb[] * ******************************************************************************/ -static uint8_t bta_av_get_shdl(tBTA_AV_SCB *p_scb) -{ - int i; - uint8_t shdl = 0; - /* find the SCB & stop the timer */ - for(i=0; ihdi); - APPL_TRACE_DEBUG ("bta_av_stream_chg started:%d started_msk:x%x chnl:x%x", started, - started_msk, p_scb->chnl); - if (BTA_AV_CHNL_AUDIO == p_scb->chnl) - p_streams = &bta_av_cb.audio_streams; - else - p_streams = &bta_av_cb.video_streams; - - if (started) - { - /* Let L2CAP know this channel is processed with high priority */ - L2CA_SetAclPriority(p_scb->peer_addr, L2CAP_PRIORITY_HIGH); - (*p_streams) |= started_msk; - } - else - { - (*p_streams) &= ~started_msk; - } - - if (!started) - { - i=0; - if (BTA_AV_CHNL_AUDIO == p_scb->chnl) - { - if (bta_av_cb.video_streams == 0) - no_streams = true; - } - else - { - no_streams = true; - if ( bta_av_cb.audio_streams ) - { - for (; ipeer_addr, p_scb->peer_addr) == 0) - { - no_streams = false; - break; - } - } - - } +void bta_av_stream_chg(tBTA_AV_SCB* p_scb, bool started) { + uint8_t started_msk; + int i; + uint8_t* p_streams; + bool no_streams = false; + tBTA_AV_SCB* p_scbi; + + started_msk = BTA_AV_HNDL_TO_MSK(p_scb->hdi); + APPL_TRACE_DEBUG("bta_av_stream_chg started:%d started_msk:x%x chnl:x%x", + started, started_msk, p_scb->chnl); + if (BTA_AV_CHNL_AUDIO == p_scb->chnl) + p_streams = &bta_av_cb.audio_streams; + else + p_streams = &bta_av_cb.video_streams; + + if (started) { + /* Let L2CAP know this channel is processed with high priority */ + L2CA_SetAclPriority(p_scb->peer_addr, L2CAP_PRIORITY_HIGH); + (*p_streams) |= started_msk; + } else { + (*p_streams) &= ~started_msk; + } + + if (!started) { + i = 0; + if (BTA_AV_CHNL_AUDIO == p_scb->chnl) { + if (bta_av_cb.video_streams == 0) no_streams = true; + } else { + no_streams = true; + if (bta_av_cb.audio_streams) { + for (; i < BTA_AV_NUM_STRS; i++) { + p_scbi = bta_av_cb.p_scb[i]; + /* scb is used and started */ + if (p_scbi && (bta_av_cb.audio_streams & BTA_AV_HNDL_TO_MSK(i)) && + bdcmp(p_scbi->peer_addr, p_scb->peer_addr) == 0) { + no_streams = false; + break; + } } + } + } - APPL_TRACE_DEBUG ("no_streams:%d i:%d, audio_streams:x%x, video_streams:x%x", no_streams, i, - bta_av_cb.audio_streams, bta_av_cb.video_streams); - if (no_streams) - { - /* Let L2CAP know this channel is processed with low priority */ - L2CA_SetAclPriority(p_scb->peer_addr, L2CAP_PRIORITY_NORMAL); - } + APPL_TRACE_DEBUG("no_streams:%d i:%d, audio_streams:x%x, video_streams:x%x", + no_streams, i, bta_av_cb.audio_streams, + bta_av_cb.video_streams); + if (no_streams) { + /* Let L2CAP know this channel is processed with low priority */ + L2CA_SetAclPriority(p_scb->peer_addr, L2CAP_PRIORITY_NORMAL); } + } } /******************************************************************************* @@ -1271,204 +1145,190 @@ void bta_av_stream_chg(tBTA_AV_SCB *p_scb, bool started) * Returns void * ******************************************************************************/ -void bta_av_conn_chg(tBTA_AV_DATA *p_data) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - tBTA_AV_SCB *p_scb = NULL; - tBTA_AV_SCB *p_scbi; - uint8_t mask; - uint8_t conn_msk; - uint8_t old_msk; - int i; - int index = (p_data->hdr.layer_specific & BTA_AV_HNDL_MSK) - 1; - tBTA_AV_LCB *p_lcb; - tBTA_AV_LCB *p_lcb_rc; - tBTA_AV_RCB *p_rcb, *p_rcb2; - bool chk_restore = false; - - /* Validate array index*/ - if (index < BTA_AV_NUM_STRS) - { - p_scb = p_cb->p_scb[index]; - } - mask = BTA_AV_HNDL_TO_MSK(index); - p_lcb = bta_av_find_lcb(p_data->conn_chg.peer_addr, BTA_AV_LCB_FIND); - conn_msk = 1 << (index + 1); - if (p_data->conn_chg.is_up) - { - /* set the conned mask for this channel */ - if (p_scb) - { - if (p_lcb) - { - p_lcb->conn_msk |= conn_msk; - for (i=0; ilidx) - { - bta_av_cb.rcb[i].shdl = index + 1; - APPL_TRACE_DEBUG("conn_chg up[%d]: %d, status=0x%x, shdl:%d, lidx:%d", i, - bta_av_cb.rcb[i].handle, bta_av_cb.rcb[i].status, - bta_av_cb.rcb[i].shdl, bta_av_cb.rcb[i].lidx); - break; - } - } - } - if (p_scb->chnl == BTA_AV_CHNL_AUDIO) - { - old_msk = p_cb->conn_audio; - p_cb->conn_audio |= mask; - } - else - { - old_msk = p_cb->conn_video; - p_cb->conn_video |= mask; - } - - if ((old_msk & mask) == 0) - { - /* increase the audio open count, if not set yet */ - bta_av_cb.audio_open_cnt++; - } - - APPL_TRACE_DEBUG("rc_acp_handle:%d rc_acp_idx:%d", p_cb->rc_acp_handle, p_cb->rc_acp_idx); - /* check if the AVRCP ACP channel is already connected */ - if (p_lcb && p_cb->rc_acp_handle != BTA_AV_RC_HANDLE_NONE && p_cb->rc_acp_idx) - { - p_lcb_rc = &p_cb->lcb[BTA_AV_NUM_LINKS]; - APPL_TRACE_DEBUG("rc_acp is connected && conn_chg on same addr p_lcb_rc->conn_msk:x%x", - p_lcb_rc->conn_msk); - /* check if the RC is connected to the scb addr */ - APPL_TRACE_DEBUG ("p_lcb_rc->addr: %02x:%02x:%02x:%02x:%02x:%02x", - p_lcb_rc->addr[0], p_lcb_rc->addr[1], p_lcb_rc->addr[2], p_lcb_rc->addr[3], - p_lcb_rc->addr[4], p_lcb_rc->addr[5]); - APPL_TRACE_DEBUG ("conn_chg.peer_addr: %02x:%02x:%02x:%02x:%02x:%02x", - p_data->conn_chg.peer_addr[0], p_data->conn_chg.peer_addr[1], - p_data->conn_chg.peer_addr[2], - p_data->conn_chg.peer_addr[3], p_data->conn_chg.peer_addr[4], - p_data->conn_chg.peer_addr[5]); - if (p_lcb_rc->conn_msk && bdcmp(p_lcb_rc->addr, p_data->conn_chg.peer_addr) == 0) - { - /* AVRCP is already connected. - * need to update the association betwen SCB and RCB */ - p_lcb_rc->conn_msk = 0; /* indicate RC ONLY is not connected */ - p_lcb_rc->lidx = 0; - p_scb->rc_handle = p_cb->rc_acp_handle; - p_rcb = &p_cb->rcb[p_cb->rc_acp_idx - 1]; - p_rcb->shdl = bta_av_get_shdl(p_scb); - APPL_TRACE_DEBUG("update rc_acp shdl:%d/%d srch:%d", index + 1, p_rcb->shdl, - p_scb->rc_handle ); - - p_rcb2 = bta_av_get_rcb_by_shdl(p_rcb->shdl); - if (p_rcb2) - { - /* found the RCB that was created to associated with this SCB */ - p_cb->rc_acp_handle = p_rcb2->handle; - p_cb->rc_acp_idx = (p_rcb2 - p_cb->rcb) + 1; - APPL_TRACE_DEBUG("new rc_acp_handle:%d, idx:%d", p_cb->rc_acp_handle, - p_cb->rc_acp_idx); - p_rcb2->lidx = (BTA_AV_NUM_LINKS + 1); - APPL_TRACE_DEBUG("rc2 handle:%d lidx:%d/%d",p_rcb2->handle, p_rcb2->lidx, - p_cb->lcb[p_rcb2->lidx-1].lidx); - } - p_rcb->lidx = p_lcb->lidx; - APPL_TRACE_DEBUG("rc handle:%d lidx:%d/%d",p_rcb->handle, p_rcb->lidx, - p_cb->lcb[p_rcb->lidx-1].lidx); - } - } +void bta_av_conn_chg(tBTA_AV_DATA* p_data) { + tBTA_AV_CB* p_cb = &bta_av_cb; + tBTA_AV_SCB* p_scb = NULL; + tBTA_AV_SCB* p_scbi; + uint8_t mask; + uint8_t conn_msk; + uint8_t old_msk; + int i; + int index = (p_data->hdr.layer_specific & BTA_AV_HNDL_MSK) - 1; + tBTA_AV_LCB* p_lcb; + tBTA_AV_LCB* p_lcb_rc; + tBTA_AV_RCB *p_rcb, *p_rcb2; + bool chk_restore = false; + + /* Validate array index*/ + if (index < BTA_AV_NUM_STRS) { + p_scb = p_cb->p_scb[index]; + } + mask = BTA_AV_HNDL_TO_MSK(index); + p_lcb = bta_av_find_lcb(p_data->conn_chg.peer_addr, BTA_AV_LCB_FIND); + conn_msk = 1 << (index + 1); + if (p_data->conn_chg.is_up) { + /* set the conned mask for this channel */ + if (p_scb) { + if (p_lcb) { + p_lcb->conn_msk |= conn_msk; + for (i = 0; i < BTA_AV_NUM_RCB; i++) { + if (bta_av_cb.rcb[i].lidx == p_lcb->lidx) { + bta_av_cb.rcb[i].shdl = index + 1; + APPL_TRACE_DEBUG( + "conn_chg up[%d]: %d, status=0x%x, shdl:%d, lidx:%d", i, + bta_av_cb.rcb[i].handle, bta_av_cb.rcb[i].status, + bta_av_cb.rcb[i].shdl, bta_av_cb.rcb[i].lidx); + break; + } } - } - else - { - if ((p_cb->conn_audio & mask) && bta_av_cb.audio_open_cnt) - { - /* this channel is still marked as open. decrease the count */ - bta_av_cb.audio_open_cnt--; + } + if (p_scb->chnl == BTA_AV_CHNL_AUDIO) { + old_msk = p_cb->conn_audio; + p_cb->conn_audio |= mask; + } else { + old_msk = p_cb->conn_video; + p_cb->conn_video |= mask; + } + + if ((old_msk & mask) == 0) { + /* increase the audio open count, if not set yet */ + bta_av_cb.audio_open_cnt++; + } + + APPL_TRACE_DEBUG("rc_acp_handle:%d rc_acp_idx:%d", p_cb->rc_acp_handle, + p_cb->rc_acp_idx); + /* check if the AVRCP ACP channel is already connected */ + if (p_lcb && p_cb->rc_acp_handle != BTA_AV_RC_HANDLE_NONE && + p_cb->rc_acp_idx) { + p_lcb_rc = &p_cb->lcb[BTA_AV_NUM_LINKS]; + APPL_TRACE_DEBUG( + "rc_acp is connected && conn_chg on same addr " + "p_lcb_rc->conn_msk:x%x", + p_lcb_rc->conn_msk); + /* check if the RC is connected to the scb addr */ + APPL_TRACE_DEBUG("p_lcb_rc->addr: %02x:%02x:%02x:%02x:%02x:%02x", + p_lcb_rc->addr[0], p_lcb_rc->addr[1], + p_lcb_rc->addr[2], p_lcb_rc->addr[3], + p_lcb_rc->addr[4], p_lcb_rc->addr[5]); + APPL_TRACE_DEBUG( + "conn_chg.peer_addr: %02x:%02x:%02x:%02x:%02x:%02x", + p_data->conn_chg.peer_addr[0], p_data->conn_chg.peer_addr[1], + p_data->conn_chg.peer_addr[2], p_data->conn_chg.peer_addr[3], + p_data->conn_chg.peer_addr[4], p_data->conn_chg.peer_addr[5]); + if (p_lcb_rc->conn_msk && + bdcmp(p_lcb_rc->addr, p_data->conn_chg.peer_addr) == 0) { + /* AVRCP is already connected. + * need to update the association betwen SCB and RCB */ + p_lcb_rc->conn_msk = 0; /* indicate RC ONLY is not connected */ + p_lcb_rc->lidx = 0; + p_scb->rc_handle = p_cb->rc_acp_handle; + p_rcb = &p_cb->rcb[p_cb->rc_acp_idx - 1]; + p_rcb->shdl = bta_av_get_shdl(p_scb); + APPL_TRACE_DEBUG("update rc_acp shdl:%d/%d srch:%d", index + 1, + p_rcb->shdl, p_scb->rc_handle); + + p_rcb2 = bta_av_get_rcb_by_shdl(p_rcb->shdl); + if (p_rcb2) { + /* found the RCB that was created to associated with this SCB */ + p_cb->rc_acp_handle = p_rcb2->handle; + p_cb->rc_acp_idx = (p_rcb2 - p_cb->rcb) + 1; + APPL_TRACE_DEBUG("new rc_acp_handle:%d, idx:%d", + p_cb->rc_acp_handle, p_cb->rc_acp_idx); + p_rcb2->lidx = (BTA_AV_NUM_LINKS + 1); + APPL_TRACE_DEBUG("rc2 handle:%d lidx:%d/%d", p_rcb2->handle, + p_rcb2->lidx, p_cb->lcb[p_rcb2->lidx - 1].lidx); + } + p_rcb->lidx = p_lcb->lidx; + APPL_TRACE_DEBUG("rc handle:%d lidx:%d/%d", p_rcb->handle, + p_rcb->lidx, p_cb->lcb[p_rcb->lidx - 1].lidx); } - - /* clear the conned mask for this channel */ - p_cb->conn_audio &= ~mask; - p_cb->conn_video &= ~mask; - if (p_scb) - { - /* the stream is closed. - * clear the peer address, so it would not mess up the AVRCP for the next round of operation */ - bdcpy(p_scb->peer_addr, bd_addr_null); - if (p_scb->chnl == BTA_AV_CHNL_AUDIO) - { - if (p_lcb) - { - p_lcb->conn_msk &= ~conn_msk; - } - /* audio channel is down. make sure the INT channel is down */ - /* just in case the RC timer is active - if (p_cb->features & BTA_AV_FEAT_RCCT) */ - { - alarm_cancel(p_scb->avrc_ct_timer); - } - /* one audio channel goes down. check if we need to restore high priority */ - chk_restore = true; - } + } + } + } else { + if ((p_cb->conn_audio & mask) && bta_av_cb.audio_open_cnt) { + /* this channel is still marked as open. decrease the count */ + bta_av_cb.audio_open_cnt--; + } + + /* clear the conned mask for this channel */ + p_cb->conn_audio &= ~mask; + p_cb->conn_video &= ~mask; + if (p_scb) { + /* the stream is closed. + * clear the peer address, so it would not mess up the AVRCP for the next + * round of operation */ + bdcpy(p_scb->peer_addr, bd_addr_null); + if (p_scb->chnl == BTA_AV_CHNL_AUDIO) { + if (p_lcb) { + p_lcb->conn_msk &= ~conn_msk; } - - APPL_TRACE_DEBUG("bta_av_conn_chg shdl:%d", index + 1); - for (i=0; iconn_audio == 0 && p_cb->conn_video == 0) - { - /* if both channels are not connected, - * close all RC channels */ - bta_av_close_all_rc(p_cb); - } - - /* if the AVRCP is no longer listening, create the listening channel */ - if (bta_av_cb.rc_acp_handle == BTA_AV_RC_HANDLE_NONE && bta_av_cb.features & BTA_AV_FEAT_RCTG) - bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1); - } - - APPL_TRACE_DEBUG("bta_av_conn_chg audio:%x video:%x up:%d conn_msk:0x%x chk_restore:%d audio_open_cnt:%d", - p_cb->conn_audio, p_cb->conn_video, p_data->conn_chg.is_up, conn_msk, chk_restore, p_cb->audio_open_cnt); - - if (chk_restore) - { - if (p_cb->audio_open_cnt == 1) - { - /* one audio channel goes down and there's one audio channel remains open. - * restore the switch role in default link policy */ - bta_sys_set_default_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH); - /* allow role switch, if this is the last connection */ - bta_av_restore_switch(); - } - if (p_cb->audio_open_cnt) - { - /* adjust flush timeout settings to longer period */ - for (i=0; ichnl == BTA_AV_CHNL_AUDIO && p_scbi->co_started) - { - /* may need to update the flush timeout of this already started stream */ - if (p_scbi->co_started != bta_av_cb.audio_open_cnt) - { - p_scbi->co_started = bta_av_cb.audio_open_cnt; - L2CA_SetFlushTimeout(p_scbi->peer_addr, p_bta_av_cfg->p_audio_flush_to[p_scbi->co_started - 1] ); - } - } - } + /* audio channel is down. make sure the INT channel is down */ + /* just in case the RC timer is active + if (p_cb->features & BTA_AV_FEAT_RCCT) */ + { alarm_cancel(p_scb->avrc_ct_timer); } + /* one audio channel goes down. check if we need to restore high + * priority */ + chk_restore = true; + } + } + + APPL_TRACE_DEBUG("bta_av_conn_chg shdl:%d", index + 1); + for (i = 0; i < BTA_AV_NUM_RCB; i++) { + APPL_TRACE_DEBUG("conn_chg dn[%d]: %d, status=0x%x, shdl:%d, lidx:%d", i, + bta_av_cb.rcb[i].handle, bta_av_cb.rcb[i].status, + bta_av_cb.rcb[i].shdl, bta_av_cb.rcb[i].lidx); + if (bta_av_cb.rcb[i].shdl == index + 1) { + bta_av_del_rc(&bta_av_cb.rcb[i]); + /* since the connection is already down and info was removed, clean + * reference */ + bta_av_cb.rcb[i].shdl = 0; + break; + } + } + + if (p_cb->conn_audio == 0 && p_cb->conn_video == 0) { + /* if both channels are not connected, + * close all RC channels */ + bta_av_close_all_rc(p_cb); + } + + /* if the AVRCP is no longer listening, create the listening channel */ + if (bta_av_cb.rc_acp_handle == BTA_AV_RC_HANDLE_NONE && + bta_av_cb.features & BTA_AV_FEAT_RCTG) + bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1); + } + + APPL_TRACE_DEBUG( + "bta_av_conn_chg audio:%x video:%x up:%d conn_msk:0x%x chk_restore:%d " + "audio_open_cnt:%d", + p_cb->conn_audio, p_cb->conn_video, p_data->conn_chg.is_up, conn_msk, + chk_restore, p_cb->audio_open_cnt); + + if (chk_restore) { + if (p_cb->audio_open_cnt == 1) { + /* one audio channel goes down and there's one audio channel remains open. + * restore the switch role in default link policy */ + bta_sys_set_default_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH); + /* allow role switch, if this is the last connection */ + bta_av_restore_switch(); + } + if (p_cb->audio_open_cnt) { + /* adjust flush timeout settings to longer period */ + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + p_scbi = bta_av_cb.p_scb[i]; + if (p_scbi && p_scbi->chnl == BTA_AV_CHNL_AUDIO && p_scbi->co_started) { + /* may need to update the flush timeout of this already started stream + */ + if (p_scbi->co_started != bta_av_cb.audio_open_cnt) { + p_scbi->co_started = bta_av_cb.audio_open_cnt; + L2CA_SetFlushTimeout( + p_scbi->peer_addr, + p_bta_av_cfg->p_audio_flush_to[p_scbi->co_started - 1]); + } } + } } + } } /******************************************************************************* @@ -1480,33 +1340,29 @@ void bta_av_conn_chg(tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_disable(tBTA_AV_CB *p_cb, - UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - BT_HDR hdr; - uint16_t xx; - - p_cb->disabling = true; - - bta_av_close_all_rc(p_cb); - - osi_free_and_reset((void **)&p_cb->p_disc_db); - - /* disable audio/video - de-register all channels, - * expect BTA_AV_DEREG_COMP_EVT when deregister is complete */ - for(xx=0; xxp_scb[xx] != NULL) - { - hdr.layer_specific = xx + 1; - bta_av_api_deregister((tBTA_AV_DATA *)&hdr); - } +void bta_av_disable(tBTA_AV_CB* p_cb, UNUSED_ATTR tBTA_AV_DATA* p_data) { + BT_HDR hdr; + uint16_t xx; + + p_cb->disabling = true; + + bta_av_close_all_rc(p_cb); + + osi_free_and_reset((void**)&p_cb->p_disc_db); + + /* disable audio/video - de-register all channels, + * expect BTA_AV_DEREG_COMP_EVT when deregister is complete */ + for (xx = 0; xx < BTA_AV_NUM_STRS; xx++) { + if (p_cb->p_scb[xx] != NULL) { + hdr.layer_specific = xx + 1; + bta_av_api_deregister((tBTA_AV_DATA*)&hdr); } + } - alarm_free(p_cb->link_signalling_timer); - p_cb->link_signalling_timer = NULL; - alarm_free(p_cb->accept_signalling_timer); - p_cb->accept_signalling_timer = NULL; + alarm_free(p_cb->link_signalling_timer); + p_cb->link_signalling_timer = NULL; + alarm_free(p_cb->accept_signalling_timer); + p_cb->accept_signalling_timer = NULL; } /******************************************************************************* @@ -1518,10 +1374,9 @@ void bta_av_disable(tBTA_AV_CB *p_cb, * Returns void * ******************************************************************************/ -void bta_av_api_disconnect(tBTA_AV_DATA *p_data) -{ - AVDT_DisconnectReq(p_data->api_discnt.bd_addr, bta_av_conn_cback); - alarm_cancel(bta_av_cb.link_signalling_timer); +void bta_av_api_disconnect(tBTA_AV_DATA* p_data) { + AVDT_DisconnectReq(p_data->api_discnt.bd_addr, bta_av_conn_cback); + alarm_cancel(bta_av_cb.link_signalling_timer); } /******************************************************************************* @@ -1533,128 +1388,122 @@ void bta_av_api_disconnect(tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_sig_chg(tBTA_AV_DATA *p_data) -{ - uint16_t event = p_data->str_msg.hdr.layer_specific; - tBTA_AV_CB *p_cb = &bta_av_cb; - uint32_t xx; - uint8_t mask; - tBTA_AV_LCB *p_lcb = NULL; - - APPL_TRACE_DEBUG("bta_av_sig_chg event: %d", event); - if (event == AVDT_CONNECT_IND_EVT) - { - p_lcb = bta_av_find_lcb(p_data->str_msg.bd_addr, BTA_AV_LCB_FIND); - if (!p_lcb) - { - /* if the address does not have an LCB yet, alloc one */ - for(xx=0; xxconn_lcb); - tBTA_AV_SCB *p_scb = p_cb->p_scb[xx]; - if (p_scb != NULL) - { - uint8_t avdt_tsep_type = p_scb->sep_info[p_scb->sep_info_idx].tsep; - /* If the device is a A2DP source, disconnect the AVDT connection */ - if ((avdt_tsep_type == AVDT_TSEP_SRC) && (p_data->hdr.offset == AVDT_ACP)) - { - LOG_INFO(LOG_TAG, "%s disconnecting invalid A2DP source to A2DP source connection.", __func__); - AVDT_DisconnectReq(p_data->str_msg.bd_addr, NULL); - return; - } - } - /* look for a p_lcb with its p_scb registered */ - if ((!(mask & p_cb->conn_lcb)) && (p_cb->p_scb[xx] != NULL)) - { - p_lcb = &p_cb->lcb[xx]; - p_lcb->lidx = xx + 1; - bdcpy(p_lcb->addr, p_data->str_msg.bd_addr); - p_lcb->conn_msk = 0; /* clear the connect mask */ - /* start listening when the signal channel is open */ - if (p_cb->features & BTA_AV_FEAT_RCTG) - { - bta_av_rc_create(p_cb, AVCT_ACP, 0, p_lcb->lidx); - } - /* this entry is not used yet. */ - p_cb->conn_lcb |= mask; /* mark it as used */ - APPL_TRACE_DEBUG("start sig timer %d", p_data->hdr.offset); - if (p_data->hdr.offset == AVDT_ACP) - { - APPL_TRACE_DEBUG("Incoming L2CAP acquired, set state as incoming", NULL); - bdcpy(p_cb->p_scb[xx]->peer_addr, p_data->str_msg.bd_addr); - p_cb->p_scb[xx]->use_rc = true; /* allowing RC for incoming connection */ - bta_av_ssm_execute(p_cb->p_scb[xx], BTA_AV_ACP_CONNECT_EVT, p_data); - - /* The Pending Event should be sent as soon as the L2CAP signalling channel - * is set up, which is NOW. Earlier this was done only after - * BTA_AV_SIGNALLING_TIMEOUT_MS. - * The following function shall send the event and start the recurring timer - */ - bta_av_signalling_timer(NULL); - - APPL_TRACE_DEBUG("%s: Re-start timer for AVDTP service", __func__); - bta_sys_conn_open(BTA_ID_AV, p_cb->p_scb[xx]->app_id, - p_cb->p_scb[xx]->peer_addr); - /* Possible collision : need to avoid outgoing processing while the timer is running */ - p_cb->p_scb[xx]->coll_mask = BTA_AV_COLL_INC_TMR; - alarm_set_on_queue(p_cb->accept_signalling_timer, - BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS, - bta_av_accept_signalling_timer_cback, - UINT_TO_PTR(xx), - btu_bta_alarm_queue); - } - break; - } - } - - /* check if we found something */ - if (xx == BTA_AV_NUM_LINKS) - { - /* We do not have scb for this avdt connection. */ - /* Silently close the connection. */ - APPL_TRACE_ERROR("av scb not available for avdt connection"); - AVDT_DisconnectReq (p_data->str_msg.bd_addr, NULL); - return; - } +void bta_av_sig_chg(tBTA_AV_DATA* p_data) { + uint16_t event = p_data->str_msg.hdr.layer_specific; + tBTA_AV_CB* p_cb = &bta_av_cb; + uint32_t xx; + uint8_t mask; + tBTA_AV_LCB* p_lcb = NULL; + + APPL_TRACE_DEBUG("bta_av_sig_chg event: %d", event); + if (event == AVDT_CONNECT_IND_EVT) { + p_lcb = bta_av_find_lcb(p_data->str_msg.bd_addr, BTA_AV_LCB_FIND); + if (!p_lcb) { + /* if the address does not have an LCB yet, alloc one */ + for (xx = 0; xx < BTA_AV_NUM_LINKS; xx++) { + mask = 1 << xx; + APPL_TRACE_DEBUG("conn_lcb: 0x%x", p_cb->conn_lcb); + tBTA_AV_SCB* p_scb = p_cb->p_scb[xx]; + if (p_scb != NULL) { + uint8_t avdt_tsep_type = p_scb->sep_info[p_scb->sep_info_idx].tsep; + /* If the device is a A2DP source, disconnect the AVDT connection */ + if ((avdt_tsep_type == AVDT_TSEP_SRC) && + (p_data->hdr.offset == AVDT_ACP)) { + LOG_INFO(LOG_TAG, + "%s disconnecting invalid A2DP source to A2DP source " + "connection.", + __func__); + AVDT_DisconnectReq(p_data->str_msg.bd_addr, NULL); + return; + } + } + /* look for a p_lcb with its p_scb registered */ + if ((!(mask & p_cb->conn_lcb)) && (p_cb->p_scb[xx] != NULL)) { + p_lcb = &p_cb->lcb[xx]; + p_lcb->lidx = xx + 1; + bdcpy(p_lcb->addr, p_data->str_msg.bd_addr); + p_lcb->conn_msk = 0; /* clear the connect mask */ + /* start listening when the signal channel is open */ + if (p_cb->features & BTA_AV_FEAT_RCTG) { + bta_av_rc_create(p_cb, AVCT_ACP, 0, p_lcb->lidx); + } + /* this entry is not used yet. */ + p_cb->conn_lcb |= mask; /* mark it as used */ + APPL_TRACE_DEBUG("start sig timer %d", p_data->hdr.offset); + if (p_data->hdr.offset == AVDT_ACP) { + APPL_TRACE_DEBUG("Incoming L2CAP acquired, set state as incoming", + NULL); + bdcpy(p_cb->p_scb[xx]->peer_addr, p_data->str_msg.bd_addr); + p_cb->p_scb[xx]->use_rc = + true; /* allowing RC for incoming connection */ + bta_av_ssm_execute(p_cb->p_scb[xx], BTA_AV_ACP_CONNECT_EVT, p_data); + + /* The Pending Event should be sent as soon as the L2CAP signalling + * channel + * is set up, which is NOW. Earlier this was done only after + * BTA_AV_SIGNALLING_TIMEOUT_MS. + * The following function shall send the event and start the + * recurring timer + */ + bta_av_signalling_timer(NULL); + + APPL_TRACE_DEBUG("%s: Re-start timer for AVDTP service", __func__); + bta_sys_conn_open(BTA_ID_AV, p_cb->p_scb[xx]->app_id, + p_cb->p_scb[xx]->peer_addr); + /* Possible collision : need to avoid outgoing processing while the + * timer is running */ + p_cb->p_scb[xx]->coll_mask = BTA_AV_COLL_INC_TMR; + alarm_set_on_queue(p_cb->accept_signalling_timer, + BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS, + bta_av_accept_signalling_timer_cback, + UINT_TO_PTR(xx), btu_bta_alarm_queue); + } + break; } + } + + /* check if we found something */ + if (xx == BTA_AV_NUM_LINKS) { + /* We do not have scb for this avdt connection. */ + /* Silently close the connection. */ + APPL_TRACE_ERROR("av scb not available for avdt connection"); + AVDT_DisconnectReq(p_data->str_msg.bd_addr, NULL); + return; + } } + } #if (BTA_AR_INCLUDED == TRUE) - else if (event == BTA_AR_AVDT_CONN_EVT) - { - alarm_cancel(bta_av_cb.link_signalling_timer); - } + else if (event == BTA_AR_AVDT_CONN_EVT) { + alarm_cancel(bta_av_cb.link_signalling_timer); + } #endif - else - { - /* disconnected. */ - APPL_TRACE_DEBUG("%s: bta_av_cb.conn_lcb is %d", __func__, bta_av_cb.conn_lcb); - - p_lcb = bta_av_find_lcb(p_data->str_msg.bd_addr, BTA_AV_LCB_FREE); - if (p_lcb && (p_lcb->conn_msk || bta_av_cb.conn_lcb)) - { - APPL_TRACE_DEBUG("conn_msk: 0x%x", p_lcb->conn_msk); - /* clean up ssm */ - for(xx=0; xx < BTA_AV_NUM_STRS; xx++) - { - - if ((p_cb->p_scb[xx]) && - (bdcmp(p_cb->p_scb[xx]->peer_addr, p_data->str_msg.bd_addr) == 0)) - { - APPL_TRACE_DEBUG("%s: Closing timer for AVDTP service", __func__); - bta_sys_conn_close(BTA_ID_AV, p_cb->p_scb[xx]->app_id,p_cb->p_scb[xx]->peer_addr); - } - mask = 1 << (xx + 1); - if (((mask & p_lcb->conn_msk) || bta_av_cb.conn_lcb) && (p_cb->p_scb[xx]) && - (bdcmp(p_cb->p_scb[xx]->peer_addr, p_data->str_msg.bd_addr) == 0)) - { - APPL_TRACE_DEBUG("%s: Sending AVDT_DISCONNECT_EVT", __func__); - bta_av_ssm_execute(p_cb->p_scb[xx], BTA_AV_AVDT_DISCONNECT_EVT, NULL); - } - } + else { + /* disconnected. */ + APPL_TRACE_DEBUG("%s: bta_av_cb.conn_lcb is %d", __func__, + bta_av_cb.conn_lcb); + + p_lcb = bta_av_find_lcb(p_data->str_msg.bd_addr, BTA_AV_LCB_FREE); + if (p_lcb && (p_lcb->conn_msk || bta_av_cb.conn_lcb)) { + APPL_TRACE_DEBUG("conn_msk: 0x%x", p_lcb->conn_msk); + /* clean up ssm */ + for (xx = 0; xx < BTA_AV_NUM_STRS; xx++) { + if ((p_cb->p_scb[xx]) && + (bdcmp(p_cb->p_scb[xx]->peer_addr, p_data->str_msg.bd_addr) == 0)) { + APPL_TRACE_DEBUG("%s: Closing timer for AVDTP service", __func__); + bta_sys_conn_close(BTA_ID_AV, p_cb->p_scb[xx]->app_id, + p_cb->p_scb[xx]->peer_addr); } + mask = 1 << (xx + 1); + if (((mask & p_lcb->conn_msk) || bta_av_cb.conn_lcb) && + (p_cb->p_scb[xx]) && + (bdcmp(p_cb->p_scb[xx]->peer_addr, p_data->str_msg.bd_addr) == 0)) { + APPL_TRACE_DEBUG("%s: Sending AVDT_DISCONNECT_EVT", __func__); + bta_av_ssm_execute(p_cb->p_scb[xx], BTA_AV_AVDT_DISCONNECT_EVT, NULL); + } + } } - APPL_TRACE_DEBUG("%s: sig_chg conn_lcb: 0x%x", __func__, p_cb->conn_lcb); + } + APPL_TRACE_DEBUG("%s: sig_chg conn_lcb: 0x%x", __func__, p_cb->conn_lcb); } /******************************************************************************* @@ -1669,31 +1518,28 @@ void bta_av_sig_chg(tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_signalling_timer(UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - int xx; - uint8_t mask; - tBTA_AV_LCB *p_lcb = NULL; - tBTA_AV_PEND pend; - - APPL_TRACE_DEBUG("%s", __func__); - for(xx=0; xxconn_lcb) - { - /* this entry is used. check if it is connected */ - p_lcb = &p_cb->lcb[xx]; - if (!p_lcb->conn_msk) { - bta_sys_start_timer(p_cb->link_signalling_timer, - BTA_AV_SIGNALLING_TIMEOUT_MS, - BTA_AV_SIGNALLING_TIMER_EVT, 0); - bdcpy(pend.bd_addr, p_lcb->addr); - (*p_cb->p_cback)(BTA_AV_PENDING_EVT, (tBTA_AV *) &pend); - } - } - } +void bta_av_signalling_timer(UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_CB* p_cb = &bta_av_cb; + int xx; + uint8_t mask; + tBTA_AV_LCB* p_lcb = NULL; + tBTA_AV_PEND pend; + + APPL_TRACE_DEBUG("%s", __func__); + for (xx = 0; xx < BTA_AV_NUM_LINKS; xx++) { + mask = 1 << xx; + if (mask & p_cb->conn_lcb) { + /* this entry is used. check if it is connected */ + p_lcb = &p_cb->lcb[xx]; + if (!p_lcb->conn_msk) { + bta_sys_start_timer(p_cb->link_signalling_timer, + BTA_AV_SIGNALLING_TIMEOUT_MS, + BTA_AV_SIGNALLING_TIMER_EVT, 0); + bdcpy(pend.bd_addr, p_lcb->addr); + (*p_cb->p_cback)(BTA_AV_PENDING_EVT, (tBTA_AV*)&pend); + } + } + } } /******************************************************************************* @@ -1706,209 +1552,193 @@ void bta_av_signalling_timer(UNUSED_ATTR tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_av_accept_signalling_timer_cback(void *data) -{ - uint32_t inx = PTR_TO_UINT(data); - tBTA_AV_CB *p_cb = &bta_av_cb; - tBTA_AV_SCB *p_scb = NULL; - if (inx < BTA_AV_NUM_STRS) - { - p_scb = p_cb->p_scb[inx]; - } - if (p_scb) - { - APPL_TRACE_DEBUG("%s coll_mask = 0x%02X", __func__, p_scb->coll_mask); - - if (p_scb->coll_mask & BTA_AV_COLL_INC_TMR) - { - p_scb->coll_mask &= ~BTA_AV_COLL_INC_TMR; - - if (bta_av_is_scb_opening(p_scb)) - { - APPL_TRACE_DEBUG("%s: stream state opening: SDP started = %d", - __func__, p_scb->sdp_discovery_started); - if (p_scb->sdp_discovery_started) - { - /* We are still doing SDP. Run the timer again. */ - p_scb->coll_mask |= BTA_AV_COLL_INC_TMR; - - alarm_set_on_queue(p_cb->accept_signalling_timer, - BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS, - bta_av_accept_signalling_timer_cback, - UINT_TO_PTR(inx), - btu_bta_alarm_queue); - } - else - { - /* SNK did not start signalling, resume signalling process. */ - bta_av_discover_req (p_scb, NULL); - } - } - else if (bta_av_is_scb_incoming(p_scb)) - { - /* Stay in incoming state if SNK does not start signalling */ - - APPL_TRACE_DEBUG("%s: stream state incoming", __func__); - /* API open was called right after SNK opened L2C connection. */ - if (p_scb->coll_mask & BTA_AV_COLL_API_CALLED) - { - p_scb->coll_mask &= ~BTA_AV_COLL_API_CALLED; - - /* BTA_AV_API_OPEN_EVT */ - tBTA_AV_API_OPEN *p_buf = - (tBTA_AV_API_OPEN *)osi_malloc(sizeof(tBTA_AV_API_OPEN)); - memcpy(p_buf, &(p_scb->open_api), sizeof(tBTA_AV_API_OPEN)); - bta_sys_sendmsg(p_buf); - } - } +static void bta_av_accept_signalling_timer_cback(void* data) { + uint32_t inx = PTR_TO_UINT(data); + tBTA_AV_CB* p_cb = &bta_av_cb; + tBTA_AV_SCB* p_scb = NULL; + if (inx < BTA_AV_NUM_STRS) { + p_scb = p_cb->p_scb[inx]; + } + if (p_scb) { + APPL_TRACE_DEBUG("%s coll_mask = 0x%02X", __func__, p_scb->coll_mask); + + if (p_scb->coll_mask & BTA_AV_COLL_INC_TMR) { + p_scb->coll_mask &= ~BTA_AV_COLL_INC_TMR; + + if (bta_av_is_scb_opening(p_scb)) { + APPL_TRACE_DEBUG("%s: stream state opening: SDP started = %d", __func__, + p_scb->sdp_discovery_started); + if (p_scb->sdp_discovery_started) { + /* We are still doing SDP. Run the timer again. */ + p_scb->coll_mask |= BTA_AV_COLL_INC_TMR; + + alarm_set_on_queue(p_cb->accept_signalling_timer, + BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS, + bta_av_accept_signalling_timer_cback, + UINT_TO_PTR(inx), btu_bta_alarm_queue); + } else { + /* SNK did not start signalling, resume signalling process. */ + bta_av_discover_req(p_scb, NULL); } + } else if (bta_av_is_scb_incoming(p_scb)) { + /* Stay in incoming state if SNK does not start signalling */ + + APPL_TRACE_DEBUG("%s: stream state incoming", __func__); + /* API open was called right after SNK opened L2C connection. */ + if (p_scb->coll_mask & BTA_AV_COLL_API_CALLED) { + p_scb->coll_mask &= ~BTA_AV_COLL_API_CALLED; + + /* BTA_AV_API_OPEN_EVT */ + tBTA_AV_API_OPEN* p_buf = + (tBTA_AV_API_OPEN*)osi_malloc(sizeof(tBTA_AV_API_OPEN)); + memcpy(p_buf, &(p_scb->open_api), sizeof(tBTA_AV_API_OPEN)); + bta_sys_sendmsg(p_buf); + } + } } + } } /******************************************************************************* * * Function bta_av_check_peer_features * - * Description check supported features on the peer device from the SDP record + * Description check supported features on the peer device from the SDP + *record * and return the feature mask * * Returns tBTA_AV_FEAT peer device feature mask * ******************************************************************************/ -tBTA_AV_FEAT bta_av_check_peer_features (uint16_t service_uuid) -{ - tBTA_AV_FEAT peer_features = 0; - tBTA_AV_CB *p_cb = &bta_av_cb; - tSDP_DISC_REC *p_rec = NULL; - tSDP_DISC_ATTR *p_attr; - uint16_t peer_rc_version=0; - uint16_t categories = 0; - - APPL_TRACE_DEBUG("bta_av_check_peer_features service_uuid:x%x", service_uuid); - /* loop through all records we found */ - while (true) - { - /* get next record; if none found, we're done */ - if ((p_rec = SDP_FindServiceInDb(p_cb->p_disc_db, service_uuid, p_rec)) == NULL) - { - break; - } - - if (( SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_CLASS_ID_LIST)) != NULL) - { - /* find peer features */ - if (SDP_FindServiceInDb(p_cb->p_disc_db, UUID_SERVCLASS_AV_REMOTE_CONTROL, NULL)) - { - peer_features |= BTA_AV_FEAT_RCCT; - } - if (SDP_FindServiceInDb(p_cb->p_disc_db, UUID_SERVCLASS_AV_REM_CTRL_TARGET, NULL)) - { - peer_features |= BTA_AV_FEAT_RCTG; - } - } - - if (( SDP_FindAttributeInRec(p_rec, ATTR_ID_BT_PROFILE_DESC_LIST)) != NULL) - { - /* get profile version (if failure, version parameter is not updated) */ - SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_AV_REMOTE_CONTROL, - &peer_rc_version); - APPL_TRACE_DEBUG("peer_rc_version 0x%x", peer_rc_version); - - if (peer_rc_version >= AVRC_REV_1_3) - peer_features |= (BTA_AV_FEAT_VENDOR | BTA_AV_FEAT_METADATA); - - if (peer_rc_version >= AVRC_REV_1_4) - { - peer_features |= (BTA_AV_FEAT_ADV_CTRL); - /* get supported categories */ - if ((p_attr = SDP_FindAttributeInRec(p_rec, - ATTR_ID_SUPPORTED_FEATURES)) != NULL) - { - categories = p_attr->attr_value.v.u16; - if (categories & AVRC_SUPF_CT_BROWSE) - peer_features |= (BTA_AV_FEAT_BROWSE); - } - } +tBTA_AV_FEAT bta_av_check_peer_features(uint16_t service_uuid) { + tBTA_AV_FEAT peer_features = 0; + tBTA_AV_CB* p_cb = &bta_av_cb; + tSDP_DISC_REC* p_rec = NULL; + tSDP_DISC_ATTR* p_attr; + uint16_t peer_rc_version = 0; + uint16_t categories = 0; + + APPL_TRACE_DEBUG("bta_av_check_peer_features service_uuid:x%x", service_uuid); + /* loop through all records we found */ + while (true) { + /* get next record; if none found, we're done */ + if ((p_rec = SDP_FindServiceInDb(p_cb->p_disc_db, service_uuid, p_rec)) == + NULL) { + break; + } + + if ((SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_CLASS_ID_LIST)) != + NULL) { + /* find peer features */ + if (SDP_FindServiceInDb(p_cb->p_disc_db, UUID_SERVCLASS_AV_REMOTE_CONTROL, + NULL)) { + peer_features |= BTA_AV_FEAT_RCCT; + } + if (SDP_FindServiceInDb(p_cb->p_disc_db, + UUID_SERVCLASS_AV_REM_CTRL_TARGET, NULL)) { + peer_features |= BTA_AV_FEAT_RCTG; + } + } + + if ((SDP_FindAttributeInRec(p_rec, ATTR_ID_BT_PROFILE_DESC_LIST)) != NULL) { + /* get profile version (if failure, version parameter is not updated) */ + SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_AV_REMOTE_CONTROL, + &peer_rc_version); + APPL_TRACE_DEBUG("peer_rc_version 0x%x", peer_rc_version); + + if (peer_rc_version >= AVRC_REV_1_3) + peer_features |= (BTA_AV_FEAT_VENDOR | BTA_AV_FEAT_METADATA); + + if (peer_rc_version >= AVRC_REV_1_4) { + peer_features |= (BTA_AV_FEAT_ADV_CTRL); + /* get supported categories */ + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_SUPPORTED_FEATURES)) != NULL) { + categories = p_attr->attr_value.v.u16; + if (categories & AVRC_SUPF_CT_BROWSE) + peer_features |= (BTA_AV_FEAT_BROWSE); } + } } - APPL_TRACE_DEBUG("peer_features:x%x", peer_features); - return peer_features; + } + APPL_TRACE_DEBUG("peer_features:x%x", peer_features); + return peer_features; } /******************************************************************************* * * Function bta_avk_check_peer_features * - * Description check supported features on the peer device from the SDP record + * Description check supported features on the peer device from the SDP + *record * and return the feature mask * * Returns tBTA_AV_FEAT peer device feature mask * ******************************************************************************/ -tBTA_AV_FEAT bta_avk_check_peer_features (uint16_t service_uuid) -{ - tBTA_AV_FEAT peer_features = 0; - tBTA_AV_CB *p_cb = &bta_av_cb; - - APPL_TRACE_DEBUG("%s service_uuid:x%x", __func__, service_uuid); - - /* loop through all records we found */ - tSDP_DISC_REC *p_rec = SDP_FindServiceInDb(p_cb->p_disc_db, service_uuid, NULL); - while (p_rec) - { - APPL_TRACE_DEBUG("%s found Service record for x%x", __func__, service_uuid); - - if (( SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_CLASS_ID_LIST)) != NULL) - { - /* find peer features */ - if (SDP_FindServiceInDb(p_cb->p_disc_db, UUID_SERVCLASS_AV_REMOTE_CONTROL, NULL)) - { - peer_features |= BTA_AV_FEAT_RCCT; - } - if (SDP_FindServiceInDb(p_cb->p_disc_db, UUID_SERVCLASS_AV_REM_CTRL_TARGET, NULL)) - { - peer_features |= BTA_AV_FEAT_RCTG; - } - } - - if (( SDP_FindAttributeInRec(p_rec, ATTR_ID_BT_PROFILE_DESC_LIST)) != NULL) - { - /* get profile version (if failure, version parameter is not updated) */ - uint16_t peer_rc_version = 0; - bool val = SDP_FindProfileVersionInRec( - p_rec, UUID_SERVCLASS_AV_REMOTE_CONTROL, &peer_rc_version); - APPL_TRACE_DEBUG("%s peer_rc_version for TG 0x%x, profile_found %d", - __func__, peer_rc_version, val); - - if (peer_rc_version >= AVRC_REV_1_3) - peer_features |= (BTA_AV_FEAT_VENDOR | BTA_AV_FEAT_METADATA); - - /* - * Though Absolute Volume came after in 1.4 and above, but there are few devices - * in market which supports absolute Volume and they are still 1.3 - * TO avoid IOT issuses with those devices, we check for 1.3 as minimum version - */ - if (peer_rc_version >= AVRC_REV_1_3) - { - /* get supported features */ - tSDP_DISC_ATTR *p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES); - if (p_attr != NULL) - { - uint16_t categories = p_attr->attr_value.v.u16; - if (categories & AVRC_SUPF_CT_CAT2) - peer_features |= (BTA_AV_FEAT_ADV_CTRL); - if (categories & AVRC_SUPF_CT_APP_SETTINGS) - peer_features |= (BTA_AV_FEAT_APP_SETTING); - if (categories & AVRC_SUPF_CT_BROWSE) - peer_features |= (BTA_AV_FEAT_BROWSE); - } - } +tBTA_AV_FEAT bta_avk_check_peer_features(uint16_t service_uuid) { + tBTA_AV_FEAT peer_features = 0; + tBTA_AV_CB* p_cb = &bta_av_cb; + + APPL_TRACE_DEBUG("%s service_uuid:x%x", __func__, service_uuid); + + /* loop through all records we found */ + tSDP_DISC_REC* p_rec = + SDP_FindServiceInDb(p_cb->p_disc_db, service_uuid, NULL); + while (p_rec) { + APPL_TRACE_DEBUG("%s found Service record for x%x", __func__, service_uuid); + + if ((SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_CLASS_ID_LIST)) != + NULL) { + /* find peer features */ + if (SDP_FindServiceInDb(p_cb->p_disc_db, UUID_SERVCLASS_AV_REMOTE_CONTROL, + NULL)) { + peer_features |= BTA_AV_FEAT_RCCT; + } + if (SDP_FindServiceInDb(p_cb->p_disc_db, + UUID_SERVCLASS_AV_REM_CTRL_TARGET, NULL)) { + peer_features |= BTA_AV_FEAT_RCTG; + } + } + + if ((SDP_FindAttributeInRec(p_rec, ATTR_ID_BT_PROFILE_DESC_LIST)) != NULL) { + /* get profile version (if failure, version parameter is not updated) */ + uint16_t peer_rc_version = 0; + bool val = SDP_FindProfileVersionInRec( + p_rec, UUID_SERVCLASS_AV_REMOTE_CONTROL, &peer_rc_version); + APPL_TRACE_DEBUG("%s peer_rc_version for TG 0x%x, profile_found %d", + __func__, peer_rc_version, val); + + if (peer_rc_version >= AVRC_REV_1_3) + peer_features |= (BTA_AV_FEAT_VENDOR | BTA_AV_FEAT_METADATA); + + /* + * Though Absolute Volume came after in 1.4 and above, but there are few + * devices + * in market which supports absolute Volume and they are still 1.3 + * TO avoid IOT issuses with those devices, we check for 1.3 as minimum + * version + */ + if (peer_rc_version >= AVRC_REV_1_3) { + /* get supported features */ + tSDP_DISC_ATTR* p_attr = + SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES); + if (p_attr != NULL) { + uint16_t categories = p_attr->attr_value.v.u16; + if (categories & AVRC_SUPF_CT_CAT2) + peer_features |= (BTA_AV_FEAT_ADV_CTRL); + if (categories & AVRC_SUPF_CT_APP_SETTINGS) + peer_features |= (BTA_AV_FEAT_APP_SETTING); + if (categories & AVRC_SUPF_CT_BROWSE) + peer_features |= (BTA_AV_FEAT_BROWSE); } - /* get next record; if none found, we're done */ - p_rec = SDP_FindServiceInDb(p_cb->p_disc_db, service_uuid, p_rec); + } } - APPL_TRACE_DEBUG("%s peer_features:x%x", __func__, peer_features); - return peer_features; + /* get next record; if none found, we're done */ + p_rec = SDP_FindServiceInDb(p_cb->p_disc_db, service_uuid, p_rec); + } + APPL_TRACE_DEBUG("%s peer_features:x%x", __func__, peer_features); + return peer_features; } /******************************************************************************* @@ -1921,122 +1751,109 @@ tBTA_AV_FEAT bta_avk_check_peer_features (uint16_t service_uuid) * Returns void * ******************************************************************************/ -void bta_av_rc_disc_done(UNUSED_ATTR tBTA_AV_DATA *p_data) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - tBTA_AV_SCB *p_scb = NULL; - tBTA_AV_LCB *p_lcb; - tBTA_AV_RC_OPEN rc_open; - tBTA_AV_RC_FEAT rc_feat; - uint8_t rc_handle; - tBTA_AV_FEAT peer_features = 0; /* peer features mask */ - - APPL_TRACE_DEBUG("%s bta_av_rc_disc_done disc:x%x", __func__, p_cb->disc); - if (!p_cb->disc) - { - return; +void bta_av_rc_disc_done(UNUSED_ATTR tBTA_AV_DATA* p_data) { + tBTA_AV_CB* p_cb = &bta_av_cb; + tBTA_AV_SCB* p_scb = NULL; + tBTA_AV_LCB* p_lcb; + tBTA_AV_RC_OPEN rc_open; + tBTA_AV_RC_FEAT rc_feat; + uint8_t rc_handle; + tBTA_AV_FEAT peer_features = 0; /* peer features mask */ + + APPL_TRACE_DEBUG("%s bta_av_rc_disc_done disc:x%x", __func__, p_cb->disc); + if (!p_cb->disc) { + return; + } + + if ((p_cb->disc & BTA_AV_CHNL_MSK) == BTA_AV_CHNL_MSK) { + /* this is the rc handle/index to tBTA_AV_RCB */ + rc_handle = p_cb->disc & (~BTA_AV_CHNL_MSK); + } else { + /* Validate array index*/ + if (((p_cb->disc & BTA_AV_HNDL_MSK) - 1) < BTA_AV_NUM_STRS) { + p_scb = p_cb->p_scb[(p_cb->disc & BTA_AV_HNDL_MSK) - 1]; } - - if ((p_cb->disc & BTA_AV_CHNL_MSK) == BTA_AV_CHNL_MSK) - { - /* this is the rc handle/index to tBTA_AV_RCB */ - rc_handle = p_cb->disc & (~BTA_AV_CHNL_MSK); - } - else - { - /* Validate array index*/ - if (((p_cb->disc & BTA_AV_HNDL_MSK) - 1) < BTA_AV_NUM_STRS) - { - p_scb = p_cb->p_scb[(p_cb->disc & BTA_AV_HNDL_MSK) - 1]; - } - if (p_scb) - { - rc_handle = p_scb->rc_handle; - } - else - { - p_cb->disc = 0; - return; - } + if (p_scb) { + rc_handle = p_scb->rc_handle; + } else { + p_cb->disc = 0; + return; } + } - APPL_TRACE_DEBUG("%s rc_handle %d", __func__, rc_handle); + APPL_TRACE_DEBUG("%s rc_handle %d", __func__, rc_handle); #if (BTA_AV_SINK_INCLUDED == TRUE) - if (p_cb->sdp_a2dp_snk_handle) - { - /* This is Sink + CT + TG(Abs Vol) */ - peer_features = bta_avk_check_peer_features(UUID_SERVCLASS_AV_REM_CTRL_TARGET); - APPL_TRACE_DEBUG("%s populating rem ctrl target features %d", __func__, peer_features); - if (BTA_AV_FEAT_ADV_CTRL & bta_avk_check_peer_features(UUID_SERVCLASS_AV_REMOTE_CONTROL)) - peer_features |= (BTA_AV_FEAT_ADV_CTRL|BTA_AV_FEAT_RCCT); - } - else + if (p_cb->sdp_a2dp_snk_handle) { + /* This is Sink + CT + TG(Abs Vol) */ + peer_features = + bta_avk_check_peer_features(UUID_SERVCLASS_AV_REM_CTRL_TARGET); + APPL_TRACE_DEBUG("%s populating rem ctrl target features %d", __func__, + peer_features); + if (BTA_AV_FEAT_ADV_CTRL & + bta_avk_check_peer_features(UUID_SERVCLASS_AV_REMOTE_CONTROL)) + peer_features |= (BTA_AV_FEAT_ADV_CTRL | BTA_AV_FEAT_RCCT); + } else #endif - if (p_cb->sdp_a2dp_handle) - { - /* check peer version and whether support CT and TG role */ - peer_features = bta_av_check_peer_features(UUID_SERVCLASS_AV_REMOTE_CONTROL); - if ((p_cb->features & BTA_AV_FEAT_ADV_CTRL) && - ((peer_features & BTA_AV_FEAT_ADV_CTRL) == 0)) - { - /* if we support advance control and peer does not, check their support on TG role - * some implementation uses 1.3 on CT ans 1.4 on TG */ - peer_features |= bta_av_check_peer_features(UUID_SERVCLASS_AV_REM_CTRL_TARGET); + if (p_cb->sdp_a2dp_handle) { + /* check peer version and whether support CT and TG role */ + peer_features = + bta_av_check_peer_features(UUID_SERVCLASS_AV_REMOTE_CONTROL); + if ((p_cb->features & BTA_AV_FEAT_ADV_CTRL) && + ((peer_features & BTA_AV_FEAT_ADV_CTRL) == 0)) { + /* if we support advance control and peer does not, check their support on + * TG role + * some implementation uses 1.3 on CT ans 1.4 on TG */ + peer_features |= + bta_av_check_peer_features(UUID_SERVCLASS_AV_REM_CTRL_TARGET); + } + } + + p_cb->disc = 0; + osi_free_and_reset((void**)&p_cb->p_disc_db); + + APPL_TRACE_DEBUG("peer_features 0x%x, features 0x%x", peer_features, + p_cb->features); + + /* if we have no rc connection */ + if (rc_handle == BTA_AV_RC_HANDLE_NONE) { + if (p_scb) { + /* if peer remote control service matches ours and USE_RC is true */ + if ((((p_cb->features & BTA_AV_FEAT_RCCT) && + (peer_features & BTA_AV_FEAT_RCTG)) || + ((p_cb->features & BTA_AV_FEAT_RCTG) && + (peer_features & BTA_AV_FEAT_RCCT)))) { + p_lcb = bta_av_find_lcb(p_scb->peer_addr, BTA_AV_LCB_FIND); + if (p_lcb) { + rc_handle = bta_av_rc_create(p_cb, AVCT_INT, + (uint8_t)(p_scb->hdi + 1), p_lcb->lidx); + p_cb->rcb[rc_handle].peer_features = peer_features; + } else { + APPL_TRACE_ERROR("can not find LCB!!"); } - } - - p_cb->disc = 0; - osi_free_and_reset((void **)&p_cb->p_disc_db); - - APPL_TRACE_DEBUG("peer_features 0x%x, features 0x%x", peer_features, p_cb->features); - - /* if we have no rc connection */ - if (rc_handle == BTA_AV_RC_HANDLE_NONE) - { - if (p_scb) - { - /* if peer remote control service matches ours and USE_RC is true */ - if ((((p_cb->features & BTA_AV_FEAT_RCCT) && (peer_features & BTA_AV_FEAT_RCTG)) || - ((p_cb->features & BTA_AV_FEAT_RCTG) && (peer_features & BTA_AV_FEAT_RCCT))) ) - { - p_lcb = bta_av_find_lcb(p_scb->peer_addr, BTA_AV_LCB_FIND); - if (p_lcb) - { - rc_handle = bta_av_rc_create(p_cb, AVCT_INT, (uint8_t)(p_scb->hdi + 1), p_lcb->lidx); - p_cb->rcb[rc_handle].peer_features = peer_features; - } else { - APPL_TRACE_ERROR("can not find LCB!!"); - } - } - else if (p_scb->use_rc) - { - /* can not find AVRC on peer device. report failure */ - p_scb->use_rc = false; - bdcpy(rc_open.peer_addr, p_scb->peer_addr); - rc_open.peer_features = 0; - rc_open.status = BTA_AV_FAIL_SDP; - (*p_cb->p_cback)(BTA_AV_RC_OPEN_EVT, (tBTA_AV *) &rc_open); - } - } - } - else - { - p_cb->rcb[rc_handle].peer_features = peer_features; - rc_feat.rc_handle = rc_handle; - rc_feat.peer_features = peer_features; - if (p_scb == NULL) - { - /* - * In case scb is not created by the time we are done with SDP - * we still need to send RC feature event. So we need to get BD - * from Message - */ - bdcpy(rc_feat.peer_addr, p_cb->lcb[p_cb->rcb[rc_handle].lidx].addr); - } - else - bdcpy(rc_feat.peer_addr, p_scb->peer_addr); - (*p_cb->p_cback)(BTA_AV_RC_FEAT_EVT, (tBTA_AV *) &rc_feat); - } + } else if (p_scb->use_rc) { + /* can not find AVRC on peer device. report failure */ + p_scb->use_rc = false; + bdcpy(rc_open.peer_addr, p_scb->peer_addr); + rc_open.peer_features = 0; + rc_open.status = BTA_AV_FAIL_SDP; + (*p_cb->p_cback)(BTA_AV_RC_OPEN_EVT, (tBTA_AV*)&rc_open); + } + } + } else { + p_cb->rcb[rc_handle].peer_features = peer_features; + rc_feat.rc_handle = rc_handle; + rc_feat.peer_features = peer_features; + if (p_scb == NULL) { + /* + * In case scb is not created by the time we are done with SDP + * we still need to send RC feature event. So we need to get BD + * from Message + */ + bdcpy(rc_feat.peer_addr, p_cb->lcb[p_cb->rcb[rc_handle].lidx].addr); + } else + bdcpy(rc_feat.peer_addr, p_scb->peer_addr); + (*p_cb->p_cback)(BTA_AV_RC_FEAT_EVT, (tBTA_AV*)&rc_feat); + } } /******************************************************************************* @@ -2048,94 +1865,82 @@ void bta_av_rc_disc_done(UNUSED_ATTR tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_closed(tBTA_AV_DATA *p_data) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - tBTA_AV_RC_CLOSE rc_close; - tBTA_AV_RC_CONN_CHG *p_msg = (tBTA_AV_RC_CONN_CHG *)p_data; - tBTA_AV_RCB *p_rcb; - tBTA_AV_SCB *p_scb; - int i; - bool conn = false; - tBTA_AV_LCB *p_lcb; - - rc_close.rc_handle = BTA_AV_RC_HANDLE_NONE; - p_scb = NULL; - APPL_TRACE_DEBUG("bta_av_rc_closed rc_handle:%d", p_msg->handle); - for(i=0; ircb[i]; - APPL_TRACE_DEBUG("bta_av_rc_closed rcb[%d] rc_handle:%d, status=0x%x", i, p_rcb->handle, p_rcb->status); - if (p_rcb->handle == p_msg->handle) - { - rc_close.rc_handle = i; - p_rcb->status &= ~BTA_AV_RC_CONN_MASK; - p_rcb->peer_features = 0; - APPL_TRACE_DEBUG(" shdl:%d, lidx:%d", p_rcb->shdl, p_rcb->lidx); - if (p_rcb->shdl) - { - if ((p_rcb->shdl - 1) < BTA_AV_NUM_STRS) - { - p_scb = bta_av_cb.p_scb[p_rcb->shdl - 1]; - } - if (p_scb) - { - bdcpy(rc_close.peer_addr, p_scb->peer_addr); - if (p_scb->rc_handle == p_rcb->handle) - p_scb->rc_handle = BTA_AV_RC_HANDLE_NONE; - APPL_TRACE_DEBUG("shdl:%d, srch:%d", p_rcb->shdl, p_scb->rc_handle); - } - p_rcb->shdl = 0; - } - else if (p_rcb->lidx == (BTA_AV_NUM_LINKS + 1)) - { - /* if the RCB uses the extra LCB, use the addr for event and clean it */ - p_lcb = &p_cb->lcb[BTA_AV_NUM_LINKS]; - bdcpy(rc_close.peer_addr, p_msg->peer_addr); - APPL_TRACE_DEBUG("rc_only closed bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", - p_msg->peer_addr[0], p_msg->peer_addr[1], - p_msg->peer_addr[2], p_msg->peer_addr[3], - p_msg->peer_addr[4], p_msg->peer_addr[5]); - p_lcb->conn_msk = 0; - p_lcb->lidx = 0; - } - p_rcb->lidx = 0; - - if ((p_rcb->status & BTA_AV_RC_ROLE_MASK) == BTA_AV_RC_ROLE_INT) - { - /* AVCT CCB is deallocated */ - p_rcb->handle = BTA_AV_RC_HANDLE_NONE; - p_rcb->status = 0; - } - else - { - /* AVCT CCB is still there. dealloc */ - bta_av_del_rc(p_rcb); - - /* if the AVRCP is no longer listening, create the listening channel */ - if (bta_av_cb.rc_acp_handle == BTA_AV_RC_HANDLE_NONE && bta_av_cb.features & BTA_AV_FEAT_RCTG) - bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1); - } +void bta_av_rc_closed(tBTA_AV_DATA* p_data) { + tBTA_AV_CB* p_cb = &bta_av_cb; + tBTA_AV_RC_CLOSE rc_close; + tBTA_AV_RC_CONN_CHG* p_msg = (tBTA_AV_RC_CONN_CHG*)p_data; + tBTA_AV_RCB* p_rcb; + tBTA_AV_SCB* p_scb; + int i; + bool conn = false; + tBTA_AV_LCB* p_lcb; + + rc_close.rc_handle = BTA_AV_RC_HANDLE_NONE; + p_scb = NULL; + APPL_TRACE_DEBUG("bta_av_rc_closed rc_handle:%d", p_msg->handle); + for (i = 0; i < BTA_AV_NUM_RCB; i++) { + p_rcb = &p_cb->rcb[i]; + APPL_TRACE_DEBUG("bta_av_rc_closed rcb[%d] rc_handle:%d, status=0x%x", i, + p_rcb->handle, p_rcb->status); + if (p_rcb->handle == p_msg->handle) { + rc_close.rc_handle = i; + p_rcb->status &= ~BTA_AV_RC_CONN_MASK; + p_rcb->peer_features = 0; + APPL_TRACE_DEBUG(" shdl:%d, lidx:%d", p_rcb->shdl, p_rcb->lidx); + if (p_rcb->shdl) { + if ((p_rcb->shdl - 1) < BTA_AV_NUM_STRS) { + p_scb = bta_av_cb.p_scb[p_rcb->shdl - 1]; } - else if ((p_rcb->handle != BTA_AV_RC_HANDLE_NONE) && (p_rcb->status & BTA_AV_RC_CONN_MASK)) - { - /* at least one channel is still connected */ - conn = true; + if (p_scb) { + bdcpy(rc_close.peer_addr, p_scb->peer_addr); + if (p_scb->rc_handle == p_rcb->handle) + p_scb->rc_handle = BTA_AV_RC_HANDLE_NONE; + APPL_TRACE_DEBUG("shdl:%d, srch:%d", p_rcb->shdl, p_scb->rc_handle); } - } - - if (!conn) - { - /* no AVRC channels are connected, go back to INIT state */ - bta_av_sm_execute(p_cb, BTA_AV_AVRC_NONE_EVT, NULL); - } - - if (rc_close.rc_handle == BTA_AV_RC_HANDLE_NONE) - { - rc_close.rc_handle = p_msg->handle; + p_rcb->shdl = 0; + } else if (p_rcb->lidx == (BTA_AV_NUM_LINKS + 1)) { + /* if the RCB uses the extra LCB, use the addr for event and clean it */ + p_lcb = &p_cb->lcb[BTA_AV_NUM_LINKS]; bdcpy(rc_close.peer_addr, p_msg->peer_addr); - } - (*p_cb->p_cback)(BTA_AV_RC_CLOSE_EVT, (tBTA_AV *) &rc_close); + APPL_TRACE_DEBUG("rc_only closed bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", + p_msg->peer_addr[0], p_msg->peer_addr[1], + p_msg->peer_addr[2], p_msg->peer_addr[3], + p_msg->peer_addr[4], p_msg->peer_addr[5]); + p_lcb->conn_msk = 0; + p_lcb->lidx = 0; + } + p_rcb->lidx = 0; + + if ((p_rcb->status & BTA_AV_RC_ROLE_MASK) == BTA_AV_RC_ROLE_INT) { + /* AVCT CCB is deallocated */ + p_rcb->handle = BTA_AV_RC_HANDLE_NONE; + p_rcb->status = 0; + } else { + /* AVCT CCB is still there. dealloc */ + bta_av_del_rc(p_rcb); + + /* if the AVRCP is no longer listening, create the listening channel */ + if (bta_av_cb.rc_acp_handle == BTA_AV_RC_HANDLE_NONE && + bta_av_cb.features & BTA_AV_FEAT_RCTG) + bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1); + } + } else if ((p_rcb->handle != BTA_AV_RC_HANDLE_NONE) && + (p_rcb->status & BTA_AV_RC_CONN_MASK)) { + /* at least one channel is still connected */ + conn = true; + } + } + + if (!conn) { + /* no AVRC channels are connected, go back to INIT state */ + bta_av_sm_execute(p_cb, BTA_AV_AVRC_NONE_EVT, NULL); + } + + if (rc_close.rc_handle == BTA_AV_RC_HANDLE_NONE) { + rc_close.rc_handle = p_msg->handle; + bdcpy(rc_close.peer_addr, p_msg->peer_addr); + } + (*p_cb->p_cback)(BTA_AV_RC_CLOSE_EVT, (tBTA_AV*)&rc_close); } /******************************************************************************* @@ -2147,23 +1952,22 @@ void bta_av_rc_closed(tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_browse_opened(tBTA_AV_DATA *p_data) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - tBTA_AV_RC_CONN_CHG *p_msg = (tBTA_AV_RC_CONN_CHG *)p_data; - tBTA_AV_RC_BROWSE_OPEN rc_browse_open; - - APPL_TRACE_DEBUG("bta_av_rc_browse_opened bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", - p_msg->peer_addr[0], p_msg->peer_addr[1], - p_msg->peer_addr[2], p_msg->peer_addr[3], - p_msg->peer_addr[4], p_msg->peer_addr[5]); - APPL_TRACE_DEBUG("bta_av_rc_browse_opened rc_handle:%d", p_msg->handle); - - rc_browse_open.status = BTA_AV_SUCCESS; - rc_browse_open.rc_handle = p_msg->handle; - bdcpy(rc_browse_open.peer_addr, p_msg->peer_addr); - - (*p_cb->p_cback)(BTA_AV_RC_BROWSE_OPEN_EVT, (tBTA_AV *)&rc_browse_open); +void bta_av_rc_browse_opened(tBTA_AV_DATA* p_data) { + tBTA_AV_CB* p_cb = &bta_av_cb; + tBTA_AV_RC_CONN_CHG* p_msg = (tBTA_AV_RC_CONN_CHG*)p_data; + tBTA_AV_RC_BROWSE_OPEN rc_browse_open; + + APPL_TRACE_DEBUG( + "bta_av_rc_browse_opened bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", + p_msg->peer_addr[0], p_msg->peer_addr[1], p_msg->peer_addr[2], + p_msg->peer_addr[3], p_msg->peer_addr[4], p_msg->peer_addr[5]); + APPL_TRACE_DEBUG("bta_av_rc_browse_opened rc_handle:%d", p_msg->handle); + + rc_browse_open.status = BTA_AV_SUCCESS; + rc_browse_open.rc_handle = p_msg->handle; + bdcpy(rc_browse_open.peer_addr, p_msg->peer_addr); + + (*p_cb->p_cback)(BTA_AV_RC_BROWSE_OPEN_EVT, (tBTA_AV*)&rc_browse_open); } /******************************************************************************* @@ -2175,22 +1979,21 @@ void bta_av_rc_browse_opened(tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_browse_closed(tBTA_AV_DATA *p_data) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - tBTA_AV_RC_CONN_CHG *p_msg = (tBTA_AV_RC_CONN_CHG *)p_data; - tBTA_AV_RC_BROWSE_CLOSE rc_browse_close; - - APPL_TRACE_DEBUG("bta_av_rc_browse_closed bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", - p_msg->peer_addr[0], p_msg->peer_addr[1], - p_msg->peer_addr[2], p_msg->peer_addr[3], - p_msg->peer_addr[4], p_msg->peer_addr[5]); - APPL_TRACE_DEBUG("bta_av_rc_browse_closed rc_handle:%d", p_msg->handle); - - rc_browse_close.rc_handle = p_msg->handle; - bdcpy(rc_browse_close.peer_addr, p_msg->peer_addr); - - (*p_cb->p_cback)(BTA_AV_RC_BROWSE_CLOSE_EVT, (tBTA_AV *)&rc_browse_close); +void bta_av_rc_browse_closed(tBTA_AV_DATA* p_data) { + tBTA_AV_CB* p_cb = &bta_av_cb; + tBTA_AV_RC_CONN_CHG* p_msg = (tBTA_AV_RC_CONN_CHG*)p_data; + tBTA_AV_RC_BROWSE_CLOSE rc_browse_close; + + APPL_TRACE_DEBUG( + "bta_av_rc_browse_closed bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", + p_msg->peer_addr[0], p_msg->peer_addr[1], p_msg->peer_addr[2], + p_msg->peer_addr[3], p_msg->peer_addr[4], p_msg->peer_addr[5]); + APPL_TRACE_DEBUG("bta_av_rc_browse_closed rc_handle:%d", p_msg->handle); + + rc_browse_close.rc_handle = p_msg->handle; + bdcpy(rc_browse_close.peer_addr, p_msg->peer_addr); + + (*p_cb->p_cback)(BTA_AV_RC_BROWSE_CLOSE_EVT, (tBTA_AV*)&rc_browse_close); } /******************************************************************************* @@ -2202,62 +2005,54 @@ void bta_av_rc_browse_closed(tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_rc_disc(uint8_t disc) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - tAVRC_SDP_DB_PARAMS db_params; - uint16_t attr_list[] = {ATTR_ID_SERVICE_CLASS_ID_LIST, - ATTR_ID_BT_PROFILE_DESC_LIST, - ATTR_ID_SUPPORTED_FEATURES}; - uint8_t hdi; - tBTA_AV_SCB *p_scb; - uint8_t *p_addr = NULL; - uint8_t rc_handle; - - APPL_TRACE_DEBUG("bta_av_rc_disc 0x%x, %d", disc, bta_av_cb.disc); - if ((bta_av_cb.disc != 0) || (disc == 0)) - return; - - if ((disc & BTA_AV_CHNL_MSK) == BTA_AV_CHNL_MSK) - { - /* this is the rc handle/index to tBTA_AV_RCB */ - rc_handle = disc & (~BTA_AV_CHNL_MSK); - if (p_cb->rcb[rc_handle].lidx) - { - p_addr = p_cb->lcb[p_cb->rcb[rc_handle].lidx-1].addr; - } - } - else - { - hdi = (disc & BTA_AV_HNDL_MSK) - 1; - p_scb = p_cb->p_scb[hdi]; - - if (p_scb) - { - APPL_TRACE_DEBUG("rc_handle %d", p_scb->rc_handle); - p_addr = p_scb->peer_addr; - } - } - - if (p_addr) - { - /* allocate discovery database */ - if (p_cb->p_disc_db == NULL) - p_cb->p_disc_db = (tSDP_DISCOVERY_DB *)osi_malloc(BTA_AV_DISC_BUF_SIZE); - - /* set up parameters */ - db_params.db_len = BTA_AV_DISC_BUF_SIZE; - db_params.num_attr = 3; - db_params.p_db = p_cb->p_disc_db; - db_params.p_attrs = attr_list; - - /* searching for UUID_SERVCLASS_AV_REMOTE_CONTROL gets both TG and CT */ - if (AVRC_FindService(UUID_SERVCLASS_AV_REMOTE_CONTROL, p_addr, - &db_params, bta_av_avrc_sdp_cback) == AVRC_SUCCESS) { - p_cb->disc = disc; - APPL_TRACE_DEBUG("disc %d", p_cb->disc); - } - } +void bta_av_rc_disc(uint8_t disc) { + tBTA_AV_CB* p_cb = &bta_av_cb; + tAVRC_SDP_DB_PARAMS db_params; + uint16_t attr_list[] = {ATTR_ID_SERVICE_CLASS_ID_LIST, + ATTR_ID_BT_PROFILE_DESC_LIST, + ATTR_ID_SUPPORTED_FEATURES}; + uint8_t hdi; + tBTA_AV_SCB* p_scb; + uint8_t* p_addr = NULL; + uint8_t rc_handle; + + APPL_TRACE_DEBUG("bta_av_rc_disc 0x%x, %d", disc, bta_av_cb.disc); + if ((bta_av_cb.disc != 0) || (disc == 0)) return; + + if ((disc & BTA_AV_CHNL_MSK) == BTA_AV_CHNL_MSK) { + /* this is the rc handle/index to tBTA_AV_RCB */ + rc_handle = disc & (~BTA_AV_CHNL_MSK); + if (p_cb->rcb[rc_handle].lidx) { + p_addr = p_cb->lcb[p_cb->rcb[rc_handle].lidx - 1].addr; + } + } else { + hdi = (disc & BTA_AV_HNDL_MSK) - 1; + p_scb = p_cb->p_scb[hdi]; + + if (p_scb) { + APPL_TRACE_DEBUG("rc_handle %d", p_scb->rc_handle); + p_addr = p_scb->peer_addr; + } + } + + if (p_addr) { + /* allocate discovery database */ + if (p_cb->p_disc_db == NULL) + p_cb->p_disc_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_AV_DISC_BUF_SIZE); + + /* set up parameters */ + db_params.db_len = BTA_AV_DISC_BUF_SIZE; + db_params.num_attr = 3; + db_params.p_db = p_cb->p_disc_db; + db_params.p_attrs = attr_list; + + /* searching for UUID_SERVCLASS_AV_REMOTE_CONTROL gets both TG and CT */ + if (AVRC_FindService(UUID_SERVCLASS_AV_REMOTE_CONTROL, p_addr, &db_params, + bta_av_avrc_sdp_cback) == AVRC_SUCCESS) { + p_cb->disc = disc; + APPL_TRACE_DEBUG("disc %d", p_cb->disc); + } + } } /******************************************************************************* @@ -2269,100 +2064,89 @@ void bta_av_rc_disc(uint8_t disc) * Returns void * ******************************************************************************/ -void bta_av_dereg_comp(tBTA_AV_DATA *p_data) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - tBTA_AV_SCB *p_scb; - tBTA_UTL_COD cod; - uint8_t mask; - BT_HDR *p_buf; - - /* find the stream control block */ - p_scb = bta_av_hndl_to_scb(p_data->hdr.layer_specific); - - if (p_scb) - { - APPL_TRACE_DEBUG("deregistered %d(h%d)", p_scb->chnl, p_scb->hndl); - mask = BTA_AV_HNDL_TO_MSK(p_scb->hdi); - if (p_scb->chnl == BTA_AV_CHNL_AUDIO) - { - p_cb->reg_audio &= ~mask; - if ((p_cb->conn_audio & mask) && bta_av_cb.audio_open_cnt) - { - /* this channel is still marked as open. decrease the count */ - bta_av_cb.audio_open_cnt--; - } - p_cb->conn_audio &= ~mask; - - if (p_scb->q_tag == BTA_AV_Q_TAG_STREAM && p_scb->a2dp_list) { - /* make sure no buffers are in a2dp_list */ - while (!list_is_empty(p_scb->a2dp_list)) { - p_buf = (BT_HDR*)list_front(p_scb->a2dp_list); - list_remove(p_scb->a2dp_list, p_buf); - osi_free(p_buf); - } - } - - /* remove the A2DP SDP record, if no more audio stream is left */ - if (!p_cb->reg_audio) - { +void bta_av_dereg_comp(tBTA_AV_DATA* p_data) { + tBTA_AV_CB* p_cb = &bta_av_cb; + tBTA_AV_SCB* p_scb; + tBTA_UTL_COD cod; + uint8_t mask; + BT_HDR* p_buf; + + /* find the stream control block */ + p_scb = bta_av_hndl_to_scb(p_data->hdr.layer_specific); + + if (p_scb) { + APPL_TRACE_DEBUG("deregistered %d(h%d)", p_scb->chnl, p_scb->hndl); + mask = BTA_AV_HNDL_TO_MSK(p_scb->hdi); + if (p_scb->chnl == BTA_AV_CHNL_AUDIO) { + p_cb->reg_audio &= ~mask; + if ((p_cb->conn_audio & mask) && bta_av_cb.audio_open_cnt) { + /* this channel is still marked as open. decrease the count */ + bta_av_cb.audio_open_cnt--; + } + p_cb->conn_audio &= ~mask; + + if (p_scb->q_tag == BTA_AV_Q_TAG_STREAM && p_scb->a2dp_list) { + /* make sure no buffers are in a2dp_list */ + while (!list_is_empty(p_scb->a2dp_list)) { + p_buf = (BT_HDR*)list_front(p_scb->a2dp_list); + list_remove(p_scb->a2dp_list, p_buf); + osi_free(p_buf); + } + } + + /* remove the A2DP SDP record, if no more audio stream is left */ + if (!p_cb->reg_audio) { #if (BTA_AR_INCLUDED == TRUE) - bta_ar_dereg_avrc (UUID_SERVCLASS_AV_REMOTE_CONTROL, BTA_ID_AV); + bta_ar_dereg_avrc(UUID_SERVCLASS_AV_REMOTE_CONTROL, BTA_ID_AV); #endif - if (p_cb->sdp_a2dp_handle) - { - bta_av_del_sdp_rec(&p_cb->sdp_a2dp_handle); - p_cb->sdp_a2dp_handle = 0; - bta_sys_remove_uuid(UUID_SERVCLASS_AUDIO_SOURCE); - } + if (p_cb->sdp_a2dp_handle) { + bta_av_del_sdp_rec(&p_cb->sdp_a2dp_handle); + p_cb->sdp_a2dp_handle = 0; + bta_sys_remove_uuid(UUID_SERVCLASS_AUDIO_SOURCE); + } #if (BTA_AV_SINK_INCLUDED == TRUE) - if (p_cb->sdp_a2dp_snk_handle) - { - bta_av_del_sdp_rec(&p_cb->sdp_a2dp_snk_handle); - p_cb->sdp_a2dp_snk_handle = 0; - bta_sys_remove_uuid(UUID_SERVCLASS_AUDIO_SINK); - } -#endif - } + if (p_cb->sdp_a2dp_snk_handle) { + bta_av_del_sdp_rec(&p_cb->sdp_a2dp_snk_handle); + p_cb->sdp_a2dp_snk_handle = 0; + bta_sys_remove_uuid(UUID_SERVCLASS_AUDIO_SINK); } - else - { - p_cb->reg_video &= ~mask; - /* make sure that this channel is not connected */ - p_cb->conn_video &= ~mask; - /* remove the VDP SDP record, (only one video stream at most) */ - bta_av_del_sdp_rec(&p_cb->sdp_vdp_handle); - bta_sys_remove_uuid(UUID_SERVCLASS_VIDEO_SOURCE); - } - - /* make sure that the timer is not active */ - alarm_cancel(p_scb->avrc_ct_timer); - osi_free_and_reset((void **)&p_cb->p_scb[p_scb->hdi]); - } - - APPL_TRACE_DEBUG("audio 0x%x, video: 0x%x, disable:%d", - p_cb->reg_audio, p_cb->reg_video, p_cb->disabling); - /* if no stream control block is active */ - if ((p_cb->reg_audio + p_cb->reg_video) == 0) - { +#endif + } + } else { + p_cb->reg_video &= ~mask; + /* make sure that this channel is not connected */ + p_cb->conn_video &= ~mask; + /* remove the VDP SDP record, (only one video stream at most) */ + bta_av_del_sdp_rec(&p_cb->sdp_vdp_handle); + bta_sys_remove_uuid(UUID_SERVCLASS_VIDEO_SOURCE); + } + + /* make sure that the timer is not active */ + alarm_cancel(p_scb->avrc_ct_timer); + osi_free_and_reset((void**)&p_cb->p_scb[p_scb->hdi]); + } + + APPL_TRACE_DEBUG("audio 0x%x, video: 0x%x, disable:%d", p_cb->reg_audio, + p_cb->reg_video, p_cb->disabling); + /* if no stream control block is active */ + if ((p_cb->reg_audio + p_cb->reg_video) == 0) { #if (BTA_AR_INCLUDED == TRUE) - /* deregister from AVDT */ - bta_ar_dereg_avdt(BTA_ID_AV); + /* deregister from AVDT */ + bta_ar_dereg_avdt(BTA_ID_AV); - /* deregister from AVCT */ - bta_ar_dereg_avrc (UUID_SERVCLASS_AV_REM_CTRL_TARGET, BTA_ID_AV); - bta_ar_dereg_avct(BTA_ID_AV); + /* deregister from AVCT */ + bta_ar_dereg_avrc(UUID_SERVCLASS_AV_REM_CTRL_TARGET, BTA_ID_AV); + bta_ar_dereg_avct(BTA_ID_AV); #endif - if (p_cb->disabling) - { - p_cb->disabling = false; - bta_av_cb.features = 0; - } - - /* Clear the Capturing service class bit */ - cod.service = BTM_COD_SERVICE_CAPTURING; - utl_set_device_class(&cod, BTA_UTL_CLR_COD_SERVICE_CLASS); + if (p_cb->disabling) { + p_cb->disabling = false; + bta_av_cb.features = 0; } + + /* Clear the Capturing service class bit */ + cod.service = BTM_COD_SERVICE_CAPTURING; + utl_set_device_class(&cod, BTA_UTL_CLR_COD_SERVICE_CLASS); + } } diff --git a/system/bta/av/bta_av_api.cc b/system/bta/av/bta_av_api.cc index 9ea32322b6d..782debec5e1 100644 --- a/system/bta/av/bta_av_api.cc +++ b/system/bta/av/bta_av_api.cc @@ -28,12 +28,12 @@ #include "bt_target.h" +#include +#include "bt_common.h" #include "bta_api.h" -#include "bta_sys.h" #include "bta_av_api.h" #include "bta_av_int.h" -#include "bt_common.h" -#include +#include "bta_sys.h" #include "osi/include/allocator.h" @@ -41,11 +41,7 @@ * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_av_reg = -{ - bta_av_hdl_event, - BTA_AvDisable -}; +static const tBTA_SYS_REG bta_av_reg = {bta_av_hdl_event, BTA_AvDisable}; /******************************************************************************* * @@ -60,20 +56,20 @@ static const tBTA_SYS_REG bta_av_reg = * Returns void * ******************************************************************************/ -void BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features, tBTA_AV_CBACK *p_cback) -{ - tBTA_AV_API_ENABLE *p_buf = - (tBTA_AV_API_ENABLE *)osi_malloc(sizeof(tBTA_AV_API_ENABLE)); +void BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features, + tBTA_AV_CBACK* p_cback) { + tBTA_AV_API_ENABLE* p_buf = + (tBTA_AV_API_ENABLE*)osi_malloc(sizeof(tBTA_AV_API_ENABLE)); - /* register with BTA system manager */ - bta_sys_register(BTA_ID_AV, &bta_av_reg); + /* register with BTA system manager */ + bta_sys_register(BTA_ID_AV, &bta_av_reg); - p_buf->hdr.event = BTA_AV_API_ENABLE_EVT; - p_buf->p_cback = p_cback; - p_buf->features = features; - p_buf->sec_mask = sec_mask; + p_buf->hdr.event = BTA_AV_API_ENABLE_EVT; + p_buf->p_cback = p_cback; + p_buf->features = features; + p_buf->sec_mask = sec_mask; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -85,14 +81,13 @@ void BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features, tBTA_AV_CBACK *p_cba * Returns void * ******************************************************************************/ -void BTA_AvDisable(void) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AvDisable(void) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - bta_sys_deregister(BTA_ID_AV); - p_buf->event = BTA_AV_API_DISABLE_EVT; + bta_sys_deregister(BTA_ID_AV); + p_buf->event = BTA_AV_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -108,24 +103,23 @@ void BTA_AvDisable(void) * Returns void * ******************************************************************************/ -void BTA_AvRegister(tBTA_AV_CHNL chnl, const char *p_service_name, - uint8_t app_id, tBTA_AV_SINK_DATA_CBACK *p_sink_data_cback, - uint16_t service_uuid) -{ - tBTA_AV_API_REG *p_buf = - (tBTA_AV_API_REG *)osi_malloc(sizeof(tBTA_AV_API_REG)); - - p_buf->hdr.layer_specific = chnl; - p_buf->hdr.event = BTA_AV_API_REGISTER_EVT; - if (p_service_name) - strlcpy(p_buf->p_service_name, p_service_name, BTA_SERVICE_NAME_LEN); - else - p_buf->p_service_name[0] = 0; - p_buf->app_id = app_id; - p_buf->p_app_sink_data_cback = p_sink_data_cback; - p_buf->service_uuid = service_uuid; - - bta_sys_sendmsg(p_buf); +void BTA_AvRegister(tBTA_AV_CHNL chnl, const char* p_service_name, + uint8_t app_id, tBTA_AV_SINK_DATA_CBACK* p_sink_data_cback, + uint16_t service_uuid) { + tBTA_AV_API_REG* p_buf = + (tBTA_AV_API_REG*)osi_malloc(sizeof(tBTA_AV_API_REG)); + + p_buf->hdr.layer_specific = chnl; + p_buf->hdr.event = BTA_AV_API_REGISTER_EVT; + if (p_service_name) + strlcpy(p_buf->p_service_name, p_service_name, BTA_SERVICE_NAME_LEN); + else + p_buf->p_service_name[0] = 0; + p_buf->app_id = app_id; + p_buf->p_app_sink_data_cback = p_sink_data_cback; + p_buf->service_uuid = service_uuid; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -137,14 +131,13 @@ void BTA_AvRegister(tBTA_AV_CHNL chnl, const char *p_service_name, * Returns void * ******************************************************************************/ -void BTA_AvDeregister(tBTA_AV_HNDL hndl) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AvDeregister(tBTA_AV_HNDL hndl) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->layer_specific = hndl; - p_buf->event = BTA_AV_API_DEREGISTER_EVT; + p_buf->layer_specific = hndl; + p_buf->event = BTA_AV_API_DEREGISTER_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -158,21 +151,20 @@ void BTA_AvDeregister(tBTA_AV_HNDL hndl) * Returns void * ******************************************************************************/ -void BTA_AvOpen(BD_ADDR bd_addr, tBTA_AV_HNDL handle, bool use_rc, tBTA_SEC sec_mask, - uint16_t uuid) -{ - tBTA_AV_API_OPEN *p_buf = - (tBTA_AV_API_OPEN *)osi_malloc(sizeof(tBTA_AV_API_OPEN)); - - p_buf->hdr.event = BTA_AV_API_OPEN_EVT; - p_buf->hdr.layer_specific = handle; - bdcpy(p_buf->bd_addr, bd_addr); - p_buf->use_rc = use_rc; - p_buf->sec_mask = sec_mask; - p_buf->switch_res = BTA_AV_RS_NONE; - p_buf->uuid = uuid; - - bta_sys_sendmsg(p_buf); +void BTA_AvOpen(BD_ADDR bd_addr, tBTA_AV_HNDL handle, bool use_rc, + tBTA_SEC sec_mask, uint16_t uuid) { + tBTA_AV_API_OPEN* p_buf = + (tBTA_AV_API_OPEN*)osi_malloc(sizeof(tBTA_AV_API_OPEN)); + + p_buf->hdr.event = BTA_AV_API_OPEN_EVT; + p_buf->hdr.layer_specific = handle; + bdcpy(p_buf->bd_addr, bd_addr); + p_buf->use_rc = use_rc; + p_buf->sec_mask = sec_mask; + p_buf->switch_res = BTA_AV_RS_NONE; + p_buf->uuid = uuid; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -184,14 +176,13 @@ void BTA_AvOpen(BD_ADDR bd_addr, tBTA_AV_HNDL handle, bool use_rc, tBTA_SEC sec_ * Returns void * ******************************************************************************/ -void BTA_AvClose(tBTA_AV_HNDL handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AvClose(tBTA_AV_HNDL handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AV_API_CLOSE_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_AV_API_CLOSE_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -203,15 +194,14 @@ void BTA_AvClose(tBTA_AV_HNDL handle) * Returns void * ******************************************************************************/ -void BTA_AvDisconnect(BD_ADDR bd_addr) -{ - tBTA_AV_API_DISCNT *p_buf = - (tBTA_AV_API_DISCNT *)osi_malloc(sizeof(tBTA_AV_API_DISCNT)); +void BTA_AvDisconnect(BD_ADDR bd_addr) { + tBTA_AV_API_DISCNT* p_buf = + (tBTA_AV_API_DISCNT*)osi_malloc(sizeof(tBTA_AV_API_DISCNT)); - p_buf->hdr.event = BTA_AV_API_DISCONNECT_EVT; - bdcpy(p_buf->bd_addr, bd_addr); + p_buf->hdr.event = BTA_AV_API_DISCONNECT_EVT; + bdcpy(p_buf->bd_addr, bd_addr); - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -223,13 +213,12 @@ void BTA_AvDisconnect(BD_ADDR bd_addr) * Returns void * ******************************************************************************/ -void BTA_AvStart(void) -{ - BT_HDR *p_buf = (BT_HDR *) osi_malloc(sizeof(BT_HDR)); +void BTA_AvStart(void) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AV_API_START_EVT; + p_buf->event = BTA_AV_API_START_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -241,14 +230,13 @@ void BTA_AvStart(void) * Returns void * ******************************************************************************/ -void BTA_AvOffloadStart(tBTA_AV_HNDL hndl) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_AvOffloadStart(tBTA_AV_HNDL hndl) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_AV_API_OFFLOAD_START_EVT; - p_buf->layer_specific = hndl; + p_buf->event = BTA_AV_API_OFFLOAD_START_EVT; + p_buf->layer_specific = hndl; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -260,16 +248,15 @@ void BTA_AvOffloadStart(tBTA_AV_HNDL hndl) * Returns void * ******************************************************************************/ -void BTA_AvOffloadStartRsp(tBTA_AV_HNDL hndl, tBTA_AV_STATUS status) -{ - tBTA_AV_API_STATUS_RSP *p_buf = - (tBTA_AV_API_STATUS_RSP *)osi_malloc(sizeof(tBTA_AV_API_STATUS_RSP)); +void BTA_AvOffloadStartRsp(tBTA_AV_HNDL hndl, tBTA_AV_STATUS status) { + tBTA_AV_API_STATUS_RSP* p_buf = + (tBTA_AV_API_STATUS_RSP*)osi_malloc(sizeof(tBTA_AV_API_STATUS_RSP)); - p_buf->hdr.event = BTA_AV_API_OFFLOAD_START_RSP_EVT; - p_buf->hdr.layer_specific = hndl; - p_buf->status = status; + p_buf->hdr.event = BTA_AV_API_OFFLOAD_START_RSP_EVT; + p_buf->hdr.layer_specific = hndl; + p_buf->status = status; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -283,16 +270,15 @@ void BTA_AvOffloadStartRsp(tBTA_AV_HNDL hndl, tBTA_AV_STATUS status) * Returns void * ******************************************************************************/ -void BTA_AvStop(bool suspend) -{ - tBTA_AV_API_STOP *p_buf = - (tBTA_AV_API_STOP *)osi_malloc(sizeof(tBTA_AV_API_STOP)); +void BTA_AvStop(bool suspend) { + tBTA_AV_API_STOP* p_buf = + (tBTA_AV_API_STOP*)osi_malloc(sizeof(tBTA_AV_API_STOP)); - p_buf->hdr.event = BTA_AV_API_STOP_EVT; - p_buf->flush = true; - p_buf->suspend = suspend; + p_buf->hdr.event = BTA_AV_API_STOP_EVT; + p_buf->flush = true; + p_buf->suspend = suspend; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -300,7 +286,8 @@ void BTA_AvStop(bool suspend) * Function BTA_AvReconfig * * Description Reconfigure the audio/video stream. - * If suspend is true, this function tries the suspend/reconfigure + * If suspend is true, this function tries the + *suspend/reconfigure * procedure first. * If suspend is false or when suspend/reconfigure fails, * this function closes and re-opens the AVDT connection. @@ -309,22 +296,21 @@ void BTA_AvStop(bool suspend) * ******************************************************************************/ void BTA_AvReconfig(tBTA_AV_HNDL hndl, bool suspend, uint8_t sep_info_idx, - uint8_t *p_codec_info, uint8_t num_protect, - const uint8_t *p_protect_info) -{ - tBTA_AV_API_RCFG *p_buf = - (tBTA_AV_API_RCFG *)osi_malloc(sizeof(tBTA_AV_API_RCFG) + num_protect); - - p_buf->hdr.layer_specific = hndl; - p_buf->hdr.event = BTA_AV_API_RECONFIG_EVT; - p_buf->num_protect = num_protect; - p_buf->suspend = suspend; - p_buf->sep_info_idx = sep_info_idx; - p_buf->p_protect_info = (uint8_t *)(p_buf + 1); - memcpy(p_buf->codec_info, p_codec_info, AVDT_CODEC_SIZE); - memcpy(p_buf->p_protect_info, p_protect_info, num_protect); - - bta_sys_sendmsg(p_buf); + uint8_t* p_codec_info, uint8_t num_protect, + const uint8_t* p_protect_info) { + tBTA_AV_API_RCFG* p_buf = + (tBTA_AV_API_RCFG*)osi_malloc(sizeof(tBTA_AV_API_RCFG) + num_protect); + + p_buf->hdr.layer_specific = hndl; + p_buf->hdr.event = BTA_AV_API_RECONFIG_EVT; + p_buf->num_protect = num_protect; + p_buf->suspend = suspend; + p_buf->sep_info_idx = sep_info_idx; + p_buf->p_protect_info = (uint8_t*)(p_buf + 1); + memcpy(p_buf->codec_info, p_codec_info, AVDT_CODEC_SIZE); + memcpy(p_buf->p_protect_info, p_protect_info, num_protect); + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -337,22 +323,21 @@ void BTA_AvReconfig(tBTA_AV_HNDL hndl, bool suspend, uint8_t sep_info_idx, * Returns void * ******************************************************************************/ -void BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t *p_data, uint16_t len) -{ - tBTA_AV_API_PROTECT_REQ *p_buf = - (tBTA_AV_API_PROTECT_REQ *)osi_malloc(sizeof(tBTA_AV_API_PROTECT_REQ) + len); - - p_buf->hdr.layer_specific = hndl; - p_buf->hdr.event = BTA_AV_API_PROTECT_REQ_EVT; - p_buf->len = len; - if (p_data == NULL) { - p_buf->p_data = NULL; - } else { - p_buf->p_data = (uint8_t *) (p_buf + 1); - memcpy(p_buf->p_data, p_data, len); - } - - bta_sys_sendmsg(p_buf); +void BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t* p_data, uint16_t len) { + tBTA_AV_API_PROTECT_REQ* p_buf = (tBTA_AV_API_PROTECT_REQ*)osi_malloc( + sizeof(tBTA_AV_API_PROTECT_REQ) + len); + + p_buf->hdr.layer_specific = hndl; + p_buf->hdr.event = BTA_AV_API_PROTECT_REQ_EVT; + p_buf->len = len; + if (p_data == NULL) { + p_buf->p_data = NULL; + } else { + p_buf->p_data = (uint8_t*)(p_buf + 1); + memcpy(p_buf->p_data, p_data, len); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -367,23 +352,23 @@ void BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t *p_data, uint16_t len) * Returns void * ******************************************************************************/ -void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t *p_data, uint16_t len) -{ - tBTA_AV_API_PROTECT_RSP *p_buf = - (tBTA_AV_API_PROTECT_RSP *)osi_malloc(sizeof(tBTA_AV_API_PROTECT_RSP) + len); - - p_buf->hdr.layer_specific = hndl; - p_buf->hdr.event = BTA_AV_API_PROTECT_RSP_EVT; - p_buf->len = len; - p_buf->error_code= error_code; - if (p_data == NULL) { - p_buf->p_data = NULL; - } else { - p_buf->p_data = (uint8_t *) (p_buf + 1); - memcpy(p_buf->p_data, p_data, len); - } - - bta_sys_sendmsg(p_buf); +void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t* p_data, + uint16_t len) { + tBTA_AV_API_PROTECT_RSP* p_buf = (tBTA_AV_API_PROTECT_RSP*)osi_malloc( + sizeof(tBTA_AV_API_PROTECT_RSP) + len); + + p_buf->hdr.layer_specific = hndl; + p_buf->hdr.event = BTA_AV_API_PROTECT_RSP_EVT; + p_buf->len = len; + p_buf->error_code = error_code; + if (p_data == NULL) { + p_buf->p_data = NULL; + } else { + p_buf->p_data = (uint8_t*)(p_buf + 1); + memcpy(p_buf->p_data, p_data, len); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -396,20 +381,20 @@ void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t *p_data, ui * Returns void * ******************************************************************************/ -void BTA_AvRemoteCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_RC rc_id, tBTA_AV_STATE key_state) -{ - tBTA_AV_API_REMOTE_CMD *p_buf = - (tBTA_AV_API_REMOTE_CMD *)osi_malloc(sizeof(tBTA_AV_API_REMOTE_CMD)); - - p_buf->hdr.event = BTA_AV_API_REMOTE_CMD_EVT; - p_buf->hdr.layer_specific = rc_handle; - p_buf->msg.op_id = rc_id; - p_buf->msg.state = key_state; - p_buf->msg.p_pass_data = NULL; - p_buf->msg.pass_len = 0; - p_buf->label = label; - - bta_sys_sendmsg(p_buf); +void BTA_AvRemoteCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_RC rc_id, + tBTA_AV_STATE key_state) { + tBTA_AV_API_REMOTE_CMD* p_buf = + (tBTA_AV_API_REMOTE_CMD*)osi_malloc(sizeof(tBTA_AV_API_REMOTE_CMD)); + + p_buf->hdr.event = BTA_AV_API_REMOTE_CMD_EVT; + p_buf->hdr.layer_specific = rc_handle; + p_buf->msg.op_id = rc_id; + p_buf->msg.state = key_state; + p_buf->msg.p_pass_data = NULL; + p_buf->msg.pass_len = 0; + p_buf->label = label; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -425,25 +410,23 @@ void BTA_AvRemoteCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_RC rc_id, tBTA_AV ******************************************************************************/ void BTA_AvRemoteVendorUniqueCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_STATE key_state, uint8_t* p_msg, - uint8_t buf_len) -{ - tBTA_AV_API_REMOTE_CMD *p_buf = - (tBTA_AV_API_REMOTE_CMD *)osi_malloc(sizeof(tBTA_AV_API_REMOTE_CMD) + - buf_len); - - p_buf->label = label; - p_buf->hdr.event = BTA_AV_API_REMOTE_CMD_EVT; - p_buf->hdr.layer_specific = rc_handle; - p_buf->msg.op_id = AVRC_ID_VENDOR; - p_buf->msg.state = key_state; - p_buf->msg.pass_len = buf_len; - if (p_msg == NULL) { - p_buf->msg.p_pass_data = NULL; - } else { - p_buf->msg.p_pass_data = (uint8_t *)(p_buf + 1); - memcpy(p_buf->msg.p_pass_data, p_msg, buf_len); - } - bta_sys_sendmsg(p_buf); + uint8_t buf_len) { + tBTA_AV_API_REMOTE_CMD* p_buf = (tBTA_AV_API_REMOTE_CMD*)osi_malloc( + sizeof(tBTA_AV_API_REMOTE_CMD) + buf_len); + + p_buf->label = label; + p_buf->hdr.event = BTA_AV_API_REMOTE_CMD_EVT; + p_buf->hdr.layer_specific = rc_handle; + p_buf->msg.op_id = AVRC_ID_VENDOR; + p_buf->msg.state = key_state; + p_buf->msg.pass_len = buf_len; + if (p_msg == NULL) { + p_buf->msg.p_pass_data = NULL; + } else { + p_buf->msg.p_pass_data = (uint8_t*)(p_buf + 1); + memcpy(p_buf->msg.p_pass_data, p_msg, buf_len); + } + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -457,27 +440,27 @@ void BTA_AvRemoteVendorUniqueCmd(uint8_t rc_handle, uint8_t label, * Returns void * ******************************************************************************/ -void BTA_AvVendorCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE cmd_code, uint8_t *p_data, uint16_t len) -{ - tBTA_AV_API_VENDOR *p_buf = - (tBTA_AV_API_VENDOR *)osi_malloc(sizeof(tBTA_AV_API_VENDOR) + len); - - p_buf->hdr.event = BTA_AV_API_VENDOR_CMD_EVT; - p_buf->hdr.layer_specific = rc_handle; - p_buf->msg.hdr.ctype = cmd_code; - p_buf->msg.hdr.subunit_type = AVRC_SUB_PANEL; - p_buf->msg.hdr.subunit_id = 0; - p_buf->msg.company_id = p_bta_av_cfg->company_id; - p_buf->label = label; - p_buf->msg.vendor_len = len; - if (p_data == NULL) { - p_buf->msg.p_vendor_data = NULL; - } else { - p_buf->msg.p_vendor_data = (uint8_t *) (p_buf + 1); - memcpy(p_buf->msg.p_vendor_data, p_data, len); - } - - bta_sys_sendmsg(p_buf); +void BTA_AvVendorCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE cmd_code, + uint8_t* p_data, uint16_t len) { + tBTA_AV_API_VENDOR* p_buf = + (tBTA_AV_API_VENDOR*)osi_malloc(sizeof(tBTA_AV_API_VENDOR) + len); + + p_buf->hdr.event = BTA_AV_API_VENDOR_CMD_EVT; + p_buf->hdr.layer_specific = rc_handle; + p_buf->msg.hdr.ctype = cmd_code; + p_buf->msg.hdr.subunit_type = AVRC_SUB_PANEL; + p_buf->msg.hdr.subunit_id = 0; + p_buf->msg.company_id = p_bta_av_cfg->company_id; + p_buf->label = label; + p_buf->msg.vendor_len = len; + if (p_data == NULL) { + p_buf->msg.p_vendor_data = NULL; + } else { + p_buf->msg.p_vendor_data = (uint8_t*)(p_buf + 1); + memcpy(p_buf->msg.p_vendor_data, p_data, len); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -492,30 +475,30 @@ void BTA_AvVendorCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE cmd_code, ui * Returns void * ******************************************************************************/ -void BTA_AvVendorRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code, uint8_t *p_data, uint16_t len, uint32_t company_id) -{ - tBTA_AV_API_VENDOR *p_buf = - (tBTA_AV_API_VENDOR *)osi_malloc(sizeof(tBTA_AV_API_VENDOR) + len); - - p_buf->hdr.event = BTA_AV_API_VENDOR_RSP_EVT; - p_buf->hdr.layer_specific = rc_handle; - p_buf->msg.hdr.ctype = rsp_code; - p_buf->msg.hdr.subunit_type = AVRC_SUB_PANEL; - p_buf->msg.hdr.subunit_id = 0; - if (company_id) - p_buf->msg.company_id = company_id; - else - p_buf->msg.company_id = p_bta_av_cfg->company_id; - p_buf->label = label; - p_buf->msg.vendor_len = len; - if (p_data == NULL) { - p_buf->msg.p_vendor_data = NULL; - } else { - p_buf->msg.p_vendor_data = (uint8_t *) (p_buf + 1); - memcpy(p_buf->msg.p_vendor_data, p_data, len); - } - - bta_sys_sendmsg(p_buf); +void BTA_AvVendorRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code, + uint8_t* p_data, uint16_t len, uint32_t company_id) { + tBTA_AV_API_VENDOR* p_buf = + (tBTA_AV_API_VENDOR*)osi_malloc(sizeof(tBTA_AV_API_VENDOR) + len); + + p_buf->hdr.event = BTA_AV_API_VENDOR_RSP_EVT; + p_buf->hdr.layer_specific = rc_handle; + p_buf->msg.hdr.ctype = rsp_code; + p_buf->msg.hdr.subunit_type = AVRC_SUB_PANEL; + p_buf->msg.hdr.subunit_id = 0; + if (company_id) + p_buf->msg.company_id = company_id; + else + p_buf->msg.company_id = p_bta_av_cfg->company_id; + p_buf->label = label; + p_buf->msg.vendor_len = len; + if (p_data == NULL) { + p_buf->msg.p_vendor_data = NULL; + } else { + p_buf->msg.p_vendor_data = (uint8_t*)(p_buf + 1); + memcpy(p_buf->msg.p_vendor_data, p_data, len); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -528,15 +511,14 @@ void BTA_AvVendorRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code, ui * Returns void * ******************************************************************************/ -void BTA_AvOpenRc(tBTA_AV_HNDL handle) -{ - tBTA_AV_API_OPEN_RC *p_buf = - (tBTA_AV_API_OPEN_RC *)osi_malloc(sizeof(tBTA_AV_API_OPEN_RC)); +void BTA_AvOpenRc(tBTA_AV_HNDL handle) { + tBTA_AV_API_OPEN_RC* p_buf = + (tBTA_AV_API_OPEN_RC*)osi_malloc(sizeof(tBTA_AV_API_OPEN_RC)); - p_buf->hdr.event = BTA_AV_API_RC_OPEN_EVT; - p_buf->hdr.layer_specific = handle; + p_buf->hdr.event = BTA_AV_API_RC_OPEN_EVT; + p_buf->hdr.layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -548,22 +530,22 @@ void BTA_AvOpenRc(tBTA_AV_HNDL handle) * Returns void * ******************************************************************************/ -void BTA_AvCloseRc(uint8_t rc_handle) -{ - tBTA_AV_API_CLOSE_RC *p_buf = - (tBTA_AV_API_CLOSE_RC *)osi_malloc(sizeof(tBTA_AV_API_CLOSE_RC)); +void BTA_AvCloseRc(uint8_t rc_handle) { + tBTA_AV_API_CLOSE_RC* p_buf = + (tBTA_AV_API_CLOSE_RC*)osi_malloc(sizeof(tBTA_AV_API_CLOSE_RC)); - p_buf->hdr.event = BTA_AV_API_RC_CLOSE_EVT; - p_buf->hdr.layer_specific = rc_handle; + p_buf->hdr.event = BTA_AV_API_RC_CLOSE_EVT; + p_buf->hdr.layer_specific = rc_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_AvMetaRsp * - * Description Send a Metadata/Advanced Control response. The message contained + * Description Send a Metadata/Advanced Control response. The message + *contained * in p_pkt can be composed with AVRC utility functions. * This function can only be used if AV is enabled with feature * BTA_AV_FEAT_METADATA. @@ -572,46 +554,48 @@ void BTA_AvCloseRc(uint8_t rc_handle) * ******************************************************************************/ void BTA_AvMetaRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code, - BT_HDR *p_pkt) -{ - tBTA_AV_API_META_RSP *p_buf = - (tBTA_AV_API_META_RSP *)osi_malloc(sizeof(tBTA_AV_API_META_RSP)); - - p_buf->hdr.event = BTA_AV_API_META_RSP_EVT; - p_buf->hdr.layer_specific = rc_handle; - p_buf->rsp_code = rsp_code; - p_buf->p_pkt = p_pkt; - p_buf->is_rsp = true; - p_buf->label = label; - - bta_sys_sendmsg(p_buf); + BT_HDR* p_pkt) { + tBTA_AV_API_META_RSP* p_buf = + (tBTA_AV_API_META_RSP*)osi_malloc(sizeof(tBTA_AV_API_META_RSP)); + + p_buf->hdr.event = BTA_AV_API_META_RSP_EVT; + p_buf->hdr.layer_specific = rc_handle; + p_buf->rsp_code = rsp_code; + p_buf->p_pkt = p_pkt; + p_buf->is_rsp = true; + p_buf->label = label; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_AvMetaCmd * - * Description Send a Metadata/Advanced Control command. The message contained + * Description Send a Metadata/Advanced Control command. The message +*contained * in p_pkt can be composed with AVRC utility functions. * This function can only be used if AV is enabled with feature * BTA_AV_FEAT_METADATA. - * This message is sent only when the peer supports the TG role. -*8 The only command makes sense right now is the absolute volume command. + * This message is sent only when the peer supports the TG +*role. +*8 The only command makes sense right now is the absolute +*volume command. * * Returns void * ******************************************************************************/ -void BTA_AvMetaCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CMD cmd_code, BT_HDR *p_pkt) -{ - tBTA_AV_API_META_RSP *p_buf = - (tBTA_AV_API_META_RSP *)osi_malloc(sizeof(tBTA_AV_API_META_RSP)); - - p_buf->hdr.event = BTA_AV_API_META_RSP_EVT; - p_buf->hdr.layer_specific = rc_handle; - p_buf->p_pkt = p_pkt; - p_buf->rsp_code = cmd_code; - p_buf->is_rsp = false; - p_buf->label = label; - - bta_sys_sendmsg(p_buf); +void BTA_AvMetaCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CMD cmd_code, + BT_HDR* p_pkt) { + tBTA_AV_API_META_RSP* p_buf = + (tBTA_AV_API_META_RSP*)osi_malloc(sizeof(tBTA_AV_API_META_RSP)); + + p_buf->hdr.event = BTA_AV_API_META_RSP_EVT; + p_buf->hdr.layer_specific = rc_handle; + p_buf->p_pkt = p_pkt; + p_buf->rsp_code = cmd_code; + p_buf->is_rsp = false; + p_buf->label = label; + + bta_sys_sendmsg(p_buf); } diff --git a/system/bta/av/bta_av_cfg.cc b/system/bta/av/bta_av_cfg.cc index ddb0f492224..5a3aabefdd7 100644 --- a/system/bta/av/bta_av_cfg.cc +++ b/system/bta/av/bta_av_cfg.cc @@ -25,38 +25,35 @@ #include -#include "bt_target.h" #include "bt_common.h" +#include "bt_target.h" #include "bta_api.h" #include "bta_av_int.h" #ifndef BTA_AV_RC_COMP_ID -#define BTA_AV_RC_COMP_ID AVRC_CO_GOOGLE +#define BTA_AV_RC_COMP_ID AVRC_CO_GOOGLE #endif #ifndef BTA_AV_RC_PASS_RSP_CODE -#define BTA_AV_RC_PASS_RSP_CODE BTA_AV_RSP_NOT_IMPL +#define BTA_AV_RC_PASS_RSP_CODE BTA_AV_RSP_NOT_IMPL #endif -const uint32_t bta_av_meta_caps_co_ids[] = { - AVRC_CO_METADATA, - AVRC_CO_BROADCOM -}; +const uint32_t bta_av_meta_caps_co_ids[] = {AVRC_CO_METADATA, AVRC_CO_BROADCOM}; /* AVRCP supported categories */ #if (AVRC_CTRL_INCLUDED == TRUE) -#define BTA_AV_RC_SUPF_CT (AVRC_SUPF_CT_CAT2) -#define BTA_AVK_RC_SUPF_CT (AVRC_SUPF_CT_CAT1|AVRC_SUPF_CT_BROWSE) -#define BTA_AVK_RC_SUPF_TG (AVRC_SUPF_TG_CAT2) +#define BTA_AV_RC_SUPF_CT (AVRC_SUPF_CT_CAT2) +#define BTA_AVK_RC_SUPF_CT (AVRC_SUPF_CT_CAT1 | AVRC_SUPF_CT_BROWSE) +#define BTA_AVK_RC_SUPF_TG (AVRC_SUPF_TG_CAT2) #endif /* AVRCP Controller and Targer default name */ #ifndef BTA_AV_RC_CT_NAME -#define BTA_AV_RC_CT_NAME "AVRC Controller" +#define BTA_AV_RC_CT_NAME "AVRC Controller" #endif #ifndef BTA_AV_RC_TG_NAME -#define BTA_AV_RC_TG_NAME "AVRC Target" +#define BTA_AV_RC_TG_NAME "AVRC Target" #endif /* Added to modify @@ -67,130 +64,139 @@ const uint32_t bta_av_meta_caps_co_ids[] = { */ /* Flushing partial avdtp packets can cause some headsets to disconnect the link if receiving partial a2dp frames */ -const uint16_t bta_av_audio_flush_to[] = { - 0, /* 1 stream */ - 0, /* 2 streams */ - 0, /* 3 streams */ - 0, /* 4 streams */ - 0 /* 5 streams */ +const uint16_t bta_av_audio_flush_to[] = { + 0, /* 1 stream */ + 0, /* 2 streams */ + 0, /* 3 streams */ + 0, /* 4 streams */ + 0 /* 5 streams */ }; /* AVDTP audio transport channel flush timeout */ /* Note: Android doesnt support AVRC_SUPF_TG_GROUP_NAVI */ -/* Note: if AVRC_SUPF_TG_GROUP_NAVI is set, bta_av_cfg.avrc_group should be true */ +/* Note: if AVRC_SUPF_TG_GROUP_NAVI is set, bta_av_cfg.avrc_group should be true + */ #ifndef BTA_AV_RC_SUPF_TG #if (AVRC_METADATA_INCLUDED == TRUE) -#define BTA_AV_RC_SUPF_TG (AVRC_SUPF_TG_CAT1 | AVRC_SUPF_TG_MULTI_PLAYER | \ - AVRC_SUPF_TG_BROWSE) /* TODO: | AVRC_SUPF_TG_APP_SETTINGS) */ +#define BTA_AV_RC_SUPF_TG \ + (AVRC_SUPF_TG_CAT1 | AVRC_SUPF_TG_MULTI_PLAYER | \ + AVRC_SUPF_TG_BROWSE) /* TODO: | AVRC_SUPF_TG_APP_SETTINGS) */ #else #define BTA_AV_RC_SUPF_TG (AVRC_SUPF_TG_CAT1) #endif #endif /* - * If the number of event IDs is changed in this array, BTA_AV_ NUM_RC_EVT_IDS also needs to be changed. + * If the number of event IDs is changed in this array, BTA_AV_ NUM_RC_EVT_IDS + * also needs to be changed. */ -const uint8_t bta_av_meta_caps_evt_ids[] = { - AVRC_EVT_PLAY_STATUS_CHANGE, - AVRC_EVT_TRACK_CHANGE, - AVRC_EVT_PLAY_POS_CHANGED, - AVRC_EVT_AVAL_PLAYERS_CHANGE, - AVRC_EVT_ADDR_PLAYER_CHANGE, - AVRC_EVT_UIDS_CHANGE, +const uint8_t bta_av_meta_caps_evt_ids[] = { + AVRC_EVT_PLAY_STATUS_CHANGE, AVRC_EVT_TRACK_CHANGE, + AVRC_EVT_PLAY_POS_CHANGED, AVRC_EVT_AVAL_PLAYERS_CHANGE, + AVRC_EVT_ADDR_PLAYER_CHANGE, AVRC_EVT_UIDS_CHANGE, AVRC_EVT_NOW_PLAYING_CHANGE, /* TODO: Add support for these events AVRC_EVT_APP_SETTING_CHANGE, */ }; #ifndef BTA_AV_NUM_RC_EVT_IDS -#define BTA_AV_NUM_RC_EVT_IDS (sizeof(bta_av_meta_caps_evt_ids) / sizeof(bta_av_meta_caps_evt_ids[0])) +#define BTA_AV_NUM_RC_EVT_IDS \ + (sizeof(bta_av_meta_caps_evt_ids) / sizeof(bta_av_meta_caps_evt_ids[0])) #endif /* BTA_AV_NUM_RC_EVT_IDS */ -const uint8_t bta_avk_meta_caps_evt_ids[] = { +const uint8_t bta_avk_meta_caps_evt_ids[] = { #if (AVRC_ADV_CTRL_INCLUDED == TRUE) AVRC_EVT_VOLUME_CHANGE, #endif }; #ifndef BTA_AVK_NUM_RC_EVT_IDS -#define BTA_AVK_NUM_RC_EVT_IDS (sizeof(bta_avk_meta_caps_evt_ids) / sizeof(bta_avk_meta_caps_evt_ids[0])) +#define BTA_AVK_NUM_RC_EVT_IDS \ + (sizeof(bta_avk_meta_caps_evt_ids) / sizeof(bta_avk_meta_caps_evt_ids[0])) #endif /* BTA_AVK_NUM_RC_EVT_IDS */ - /* the MTU for the AVRCP browsing channel */ #ifndef BTA_AV_MAX_RC_BR_MTU -#define BTA_AV_MAX_RC_BR_MTU 1008 +#define BTA_AV_MAX_RC_BR_MTU 1008 #endif /* This configuration to be used when we are Src + TG + CT( only for abs vol) */ -const tBTA_AV_CFG bta_av_cfg = -{ - BTA_AV_RC_COMP_ID, /* AVRCP Company ID */ +const tBTA_AV_CFG bta_av_cfg = { + BTA_AV_RC_COMP_ID, /* AVRCP Company ID */ #if (AVRC_METADATA_INCLUDED == TRUE) - 512, /* AVRCP MTU at L2CAP for control channel */ - BTA_AV_MAX_RC_BR_MTU, /* AVRCP MTU at L2CAP for browsing channel */ + 512, /* AVRCP MTU at L2CAP for control channel */ + BTA_AV_MAX_RC_BR_MTU, /* AVRCP MTU at L2CAP for browsing channel */ #else - 48, /* AVRCP MTU at L2CAP for control channel */ - BTA_AV_MAX_RC_BR_MTU, /* AVRCP MTU at L2CAP for browsing channel */ + 48, /* AVRCP MTU at L2CAP for control channel */ + BTA_AV_MAX_RC_BR_MTU, /* AVRCP MTU at L2CAP for browsing channel */ #endif - BTA_AV_RC_SUPF_CT, /* AVRCP controller categories */ - BTA_AV_RC_SUPF_TG, /* AVRCP target categories */ - 672, /* AVDTP signaling channel MTU at L2CAP */ - BTA_AV_MAX_A2DP_MTU, /* AVDTP audio transport channel MTU at L2CAP */ - bta_av_audio_flush_to, /* AVDTP audio transport channel flush timeout */ - 6, /* AVDTP audio channel max data queue size */ - BTA_AV_MAX_VDP_MTU, /* AVDTP video transport channel MTU at L2CAP */ - 600, /* AVDTP video transport channel flush timeout */ - false, /* true, to accept AVRC 1.3 group nevigation command */ - 2, /* company id count in p_meta_co_ids */ - BTA_AV_NUM_RC_EVT_IDS, /* event id count in p_meta_evt_ids */ - BTA_AV_RC_PASS_RSP_CODE,/* the default response code for pass through commands */ - bta_av_meta_caps_co_ids,/* the metadata Get Capabilities response for company id */ - bta_av_meta_caps_evt_ids,/* the the metadata Get Capabilities response for event id */ - NULL, /* the action function table for VDP stream */ - NULL, /* action function to register VDP */ - BTA_AV_RC_CT_NAME, /* Default AVRCP controller name */ - BTA_AV_RC_TG_NAME /* Default AVRCP target name */ + BTA_AV_RC_SUPF_CT, /* AVRCP controller categories */ + BTA_AV_RC_SUPF_TG, /* AVRCP target categories */ + 672, /* AVDTP signaling channel MTU at L2CAP */ + BTA_AV_MAX_A2DP_MTU, /* AVDTP audio transport channel MTU at L2CAP + */ + bta_av_audio_flush_to, /* AVDTP audio transport channel flush + timeout */ + 6, /* AVDTP audio channel max data queue size */ + BTA_AV_MAX_VDP_MTU, /* AVDTP video transport channel MTU at L2CAP */ + 600, /* AVDTP video transport channel flush timeout */ + false, /* true, to accept AVRC 1.3 group nevigation command */ + 2, /* company id count in p_meta_co_ids */ + BTA_AV_NUM_RC_EVT_IDS, /* event id count in p_meta_evt_ids */ + BTA_AV_RC_PASS_RSP_CODE, /* the default response code for pass + through commands */ + bta_av_meta_caps_co_ids, /* the metadata Get Capabilities response + for company id */ + bta_av_meta_caps_evt_ids, /* the the metadata Get Capabilities + response for event id */ + NULL, /* the action function table for VDP stream */ + NULL, /* action function to register VDP */ + BTA_AV_RC_CT_NAME, /* Default AVRCP controller name */ + BTA_AV_RC_TG_NAME /* Default AVRCP target name */ }; -/* This configuration to be used when we are Sink + CT + TG( only for abs vol) */ -const tBTA_AV_CFG bta_avk_cfg = -{ - AVRC_CO_METADATA, /* AVRCP Company ID */ +/* This configuration to be used when we are Sink + CT + TG( only for abs vol) + */ +const tBTA_AV_CFG bta_avk_cfg = { + AVRC_CO_METADATA, /* AVRCP Company ID */ #if (AVRC_METADATA_INCLUDED == TRUE) - 512, /* AVRCP MTU at L2CAP for control channel */ + 512, /* AVRCP MTU at L2CAP for control channel */ #else - 48, /* AVRCP MTU at L2CAP for control channel */ + 48, /* AVRCP MTU at L2CAP for control channel */ #endif - BTA_AV_MAX_RC_BR_MTU, /* AVRCP MTU at L2CAP for browsing channel */ - BTA_AVK_RC_SUPF_CT, /* AVRCP controller categories */ - BTA_AVK_RC_SUPF_TG, /* AVRCP target categories */ - 672, /* AVDTP signaling channel MTU at L2CAP */ - BTA_AV_MAX_A2DP_MTU, /* AVDTP audio transport channel MTU at L2CAP */ - bta_av_audio_flush_to, /* AVDTP audio transport channel flush timeout */ - 6, /* AVDTP audio channel max data queue size */ - BTA_AV_MAX_VDP_MTU, /* AVDTP video transport channel MTU at L2CAP */ - 600, /* AVDTP video transport channel flush timeout */ - false, /* true, to accept AVRC 1.3 group nevigation command */ - 2, /* company id count in p_meta_co_ids */ - BTA_AVK_NUM_RC_EVT_IDS, /* event id count in p_meta_evt_ids */ - BTA_AV_RC_PASS_RSP_CODE,/* the default response code for pass through commands */ - bta_av_meta_caps_co_ids,/* the metadata Get Capabilities response for company id */ - bta_avk_meta_caps_evt_ids,/* the the metadata Get Capabilities response for event id */ - NULL, /* the action function table for VDP stream */ - NULL, /* action function to register VDP */ - {0}, /* Default AVRCP controller name */ - {0}, /* Default AVRCP target name */ + BTA_AV_MAX_RC_BR_MTU, /* AVRCP MTU at L2CAP for browsing channel */ + BTA_AVK_RC_SUPF_CT, /* AVRCP controller categories */ + BTA_AVK_RC_SUPF_TG, /* AVRCP target categories */ + 672, /* AVDTP signaling channel MTU at L2CAP */ + BTA_AV_MAX_A2DP_MTU, /* AVDTP audio transport channel MTU at L2CAP + */ + bta_av_audio_flush_to, /* AVDTP audio transport channel flush + timeout */ + 6, /* AVDTP audio channel max data queue size */ + BTA_AV_MAX_VDP_MTU, /* AVDTP video transport channel MTU at L2CAP */ + 600, /* AVDTP video transport channel flush timeout */ + false, /* true, to accept AVRC 1.3 group nevigation command */ + 2, /* company id count in p_meta_co_ids */ + BTA_AVK_NUM_RC_EVT_IDS, /* event id count in p_meta_evt_ids */ + BTA_AV_RC_PASS_RSP_CODE, /* the default response code for pass + through commands */ + bta_av_meta_caps_co_ids, /* the metadata Get Capabilities response + for company id */ + bta_avk_meta_caps_evt_ids, /* the the metadata Get Capabilities + response for event id */ + NULL, /* the action function table for VDP stream */ + NULL, /* action function to register VDP */ + {0}, /* Default AVRCP controller name */ + {0}, /* Default AVRCP target name */ }; -tBTA_AV_CFG *p_bta_av_cfg = NULL; +tBTA_AV_CFG* p_bta_av_cfg = NULL; -const uint16_t bta_av_rc_id[] = -{ +const uint16_t bta_av_rc_id[] = { 0x0000, /* bit mask: 0=SELECT, 1=UP, 2=DOWN, 3=LEFT, 4=RIGHT, 5=RIGHT_UP, 6=RIGHT_DOWN, 7=LEFT_UP, 8=LEFT_DOWN, 9=ROOT_MENU, 10=SETUP_MENU, 11=CONT_MENU, 12=FAV_MENU, 13=EXIT */ - 0, /* not used */ + 0, /* not used */ 0x0000, /* bit mask: 0=0, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, @@ -201,52 +207,62 @@ const uint16_t bta_av_rc_id[] = 4=INPUT_SEL, 5=DISP_INFO, 6=HELP, 7=PAGE_UP, 8=PAGE_DOWN */ - /* btui_app provides an example of how to leave the decision of rejecting a command or not - * based on which media player is currently addressed (this is only applicable for AVRCP 1.4 or later) - * If the decision is per player for a particular rc_id, the related bit is clear (not set) - * bit mask: 0=POWER, 1=VOL_UP, 2=VOL_DOWN, 3=MUTE, 4=PLAY, 5=STOP, - 6=PAUSE, 7=RECORD, 8=REWIND, 9=FAST_FOR, 10=EJECT, 11=FORWARD, - 12=BACKWARD */ +/* btui_app provides an example of how to leave the decision of rejecting a + command or not + * based on which media player is currently addressed (this is only applicable + for AVRCP 1.4 or later) + * If the decision is per player for a particular rc_id, the related bit is + clear (not set) + * bit mask: 0=POWER, 1=VOL_UP, 2=VOL_DOWN, 3=MUTE, 4=PLAY, 5=STOP, + 6=PAUSE, 7=RECORD, 8=REWIND, 9=FAST_FOR, 10=EJECT, 11=FORWARD, + 12=BACKWARD */ #if (BTA_AV_RC_PASS_RSP_CODE == BTA_AV_RSP_INTERIM) 0x0070, /* PLAY | STOP | PAUSE */ -#else /* BTA_AV_RC_PASS_RSP_CODE != BTA_AV_RSP_INTERIM */ +#else /* BTA_AV_RC_PASS_RSP_CODE != BTA_AV_RSP_INTERIM */ #if (BTA_AVRCP_FF_RW_SUPPORT == TRUE) - 0x1b7E, /* PLAY | STOP | PAUSE | FF | RW | VOL_UP | VOL_DOWN | MUTE | FW | BACK */ -#else /* BTA_AVRCP_FF_RW_SUPPORT == FALSE */ + 0x1b7E, /* PLAY | STOP | PAUSE | FF | RW | VOL_UP | VOL_DOWN | MUTE | FW | + BACK */ +#else /* BTA_AVRCP_FF_RW_SUPPORT == FALSE */ 0x187E, /* PLAY | STOP | PAUSE | VOL_UP | VOL_DOWN | MUTE | FW | BACK */ #endif /* BTA_AVRCP_FF_RW_SUPPORT */ #endif /* BTA_AV_RC_PASS_RSP_CODE */ 0x0000, /* bit mask: 0=ANGLE, 1=SUBPICT */ - 0, /* not used */ + 0, /* not used */ - 0x0000 /* bit mask: 0=not used, 1=F1, 2=F2, 3=F3, - 4=F4, 5=F5 */ + 0x0000 /* bit mask: 0=not used, 1=F1, 2=F2, 3=F3, + 4=F4, 5=F5 */ }; #if (BTA_AV_RC_PASS_RSP_CODE == BTA_AV_RSP_INTERIM) -const uint16_t bta_av_rc_id_ac[] = -{ +const uint16_t bta_av_rc_id_ac[] = { 0x0000, /* bit mask: 0=SELECT, 1=UP, 2=DOWN, 3=LEFT, - 4=RIGHT, 5=RIGHT_UP, 6=RIGHT_DOWN, 7=LEFT_UP, - 8=LEFT_DOWN, 9=ROOT_MENU, 10=SETUP_MENU, 11=CONT_MENU, + 4=RIGHT, 5=RIGHT_UP, 6=RIGHT_DOWN, + 7=LEFT_UP, + 8=LEFT_DOWN, 9=ROOT_MENU, 10=SETUP_MENU, + 11=CONT_MENU, 12=FAV_MENU, 13=EXIT */ - 0, /* not used */ + 0, /* not used */ 0x0000, /* bit mask: 0=0, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9, 10=DOT, 11=ENTER, 12=CLEAR */ - 0x0000, /* bit mask: 0=CHAN_UP, 1=CHAN_DOWN, 2=PREV_CHAN, 3=SOUND_SEL, - 4=INPUT_SEL, 5=DISP_INFO, 6=HELP, 7=PAGE_UP, + 0x0000, /* bit mask: 0=CHAN_UP, 1=CHAN_DOWN, 2=PREV_CHAN, + 3=SOUND_SEL, + 4=INPUT_SEL, 5=DISP_INFO, 6=HELP, + 7=PAGE_UP, 8=PAGE_DOWN */ - /* btui_app provides an example of how to leave the decision of rejecting a command or not - * based on which media player is currently addressed (this is only applicable for AVRCP 1.4 or later) - * If the decision is per player for a particular rc_id, the related bit is set */ + /* btui_app provides an example of how to leave the decision of + * rejecting a command or not + * based on which media player is currently addressed (this is + * only applicable for AVRCP 1.4 or later) + * If the decision is per player for a particular rc_id, the + * related bit is set */ 0x1800, /* bit mask: 0=POWER, 1=VOL_UP, 2=VOL_DOWN, 3=MUTE, 4=PLAY, 5=STOP, 6=PAUSE, 7=RECORD, 8=REWIND, 9=FAST_FOR, 10=EJECT, 11=FORWARD, @@ -254,14 +270,14 @@ const uint16_t bta_av_rc_id_ac[] = 0x0000, /* bit mask: 0=ANGLE, 1=SUBPICT */ - 0, /* not used */ + 0, /* not used */ - 0x0000 /* bit mask: 0=not used, 1=F1, 2=F2, 3=F3, - 4=F4, 5=F5 */ + 0x0000 /* bit mask: 0=not used, 1=F1, 2=F2, 3=F3, + 4=F4, 5=F5 */ }; -uint16_t *p_bta_av_rc_id_ac = (uint16_t *) bta_av_rc_id_ac; +uint16_t* p_bta_av_rc_id_ac = (uint16_t*)bta_av_rc_id_ac; #else -uint16_t *p_bta_av_rc_id_ac = NULL; +uint16_t* p_bta_av_rc_id_ac = NULL; #endif -uint16_t *p_bta_av_rc_id = (uint16_t *) bta_av_rc_id; +uint16_t* p_bta_av_rc_id = (uint16_t*)bta_av_rc_id; diff --git a/system/bta/av/bta_av_ci.cc b/system/bta/av/bta_av_ci.cc index 895351a661a..a215046c2a4 100644 --- a/system/bta/av/bta_av_ci.cc +++ b/system/bta/av/bta_av_ci.cc @@ -23,10 +23,10 @@ * ******************************************************************************/ +#include "bta_av_ci.h" #include "bta_api.h" -#include "bta_sys.h" #include "bta_av_int.h" -#include "bta_av_ci.h" +#include "bta_sys.h" #include @@ -41,14 +41,13 @@ * Returns void * ******************************************************************************/ -void bta_av_ci_src_data_ready(tBTA_AV_CHNL chnl) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void bta_av_ci_src_data_ready(tBTA_AV_CHNL chnl) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->layer_specific = chnl; - p_buf->event = BTA_AV_CI_SRC_DATA_READY_EVT; + p_buf->layer_specific = chnl; + p_buf->event = BTA_AV_CI_SRC_DATA_READY_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -65,26 +64,26 @@ void bta_av_ci_src_data_ready(tBTA_AV_CHNL chnl) * ******************************************************************************/ void bta_av_ci_setconfig(tBTA_AV_HNDL hndl, uint8_t err_code, uint8_t category, - uint8_t num_seid, uint8_t *p_seid, bool recfg_needed, uint8_t avdt_handle) -{ - tBTA_AV_CI_SETCONFIG *p_buf = - (tBTA_AV_CI_SETCONFIG *)osi_malloc(sizeof(tBTA_AV_CI_SETCONFIG)); + uint8_t num_seid, uint8_t* p_seid, bool recfg_needed, + uint8_t avdt_handle) { + tBTA_AV_CI_SETCONFIG* p_buf = + (tBTA_AV_CI_SETCONFIG*)osi_malloc(sizeof(tBTA_AV_CI_SETCONFIG)); - p_buf->hdr.layer_specific = hndl; - p_buf->hdr.event = (err_code == A2DP_SUCCESS) ? - BTA_AV_CI_SETCONFIG_OK_EVT : BTA_AV_CI_SETCONFIG_FAIL_EVT; - p_buf->err_code = err_code; - p_buf->category = category; - p_buf->recfg_needed = recfg_needed; - p_buf->num_seid = num_seid; - p_buf->avdt_handle= avdt_handle; - if (p_seid && num_seid) { - p_buf->p_seid = (uint8_t *)(p_buf + 1); - memcpy(p_buf->p_seid, p_seid, num_seid); - } else { - p_buf->p_seid = NULL; - p_buf->num_seid = 0; - } + p_buf->hdr.layer_specific = hndl; + p_buf->hdr.event = (err_code == A2DP_SUCCESS) ? BTA_AV_CI_SETCONFIG_OK_EVT + : BTA_AV_CI_SETCONFIG_FAIL_EVT; + p_buf->err_code = err_code; + p_buf->category = category; + p_buf->recfg_needed = recfg_needed; + p_buf->num_seid = num_seid; + p_buf->avdt_handle = avdt_handle; + if (p_seid && num_seid) { + p_buf->p_seid = (uint8_t*)(p_buf + 1); + memcpy(p_buf->p_seid, p_seid, num_seid); + } else { + p_buf->p_seid = NULL; + p_buf->num_seid = 0; + } - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } diff --git a/system/bta/av/bta_av_int.h b/system/bta/av/bta_av_int.h index 96b3c00b967..4d4a592975a 100644 --- a/system/bta/av/bta_av_int.h +++ b/system/bta/av/bta_av_int.h @@ -24,12 +24,12 @@ #ifndef BTA_AV_INT_H #define BTA_AV_INT_H -#include "osi/include/list.h" -#include "bta_sys.h" +#include "avdt_api.h" #include "bta_api.h" #include "bta_av_api.h" -#include "avdt_api.h" #include "bta_av_co.h" +#include "bta_sys.h" +#include "osi/include/list.h" #include "stack/include/a2dp_api.h" #define BTA_AV_DEBUG TRUE @@ -37,556 +37,532 @@ * Constants ****************************************************************************/ -enum -{ - /* these events are handled by the AV main state machine */ - BTA_AV_API_DISABLE_EVT = BTA_SYS_EVT_START(BTA_ID_AV), - BTA_AV_API_REMOTE_CMD_EVT, - BTA_AV_API_VENDOR_CMD_EVT, - BTA_AV_API_VENDOR_RSP_EVT, - BTA_AV_API_META_RSP_EVT, - BTA_AV_API_RC_CLOSE_EVT, - BTA_AV_AVRC_OPEN_EVT, - BTA_AV_AVRC_MSG_EVT, - BTA_AV_AVRC_NONE_EVT, - - /* these events are handled by the AV stream state machine */ - BTA_AV_API_OPEN_EVT, - BTA_AV_API_CLOSE_EVT, - BTA_AV_AP_START_EVT, /* the following 2 events must be in the same order as the *API_*EVT */ - BTA_AV_AP_STOP_EVT, - BTA_AV_API_RECONFIG_EVT, - BTA_AV_API_PROTECT_REQ_EVT, - BTA_AV_API_PROTECT_RSP_EVT, - BTA_AV_API_RC_OPEN_EVT, - BTA_AV_SRC_DATA_READY_EVT, - BTA_AV_CI_SETCONFIG_OK_EVT, - BTA_AV_CI_SETCONFIG_FAIL_EVT, - BTA_AV_SDP_DISC_OK_EVT, - BTA_AV_SDP_DISC_FAIL_EVT, - BTA_AV_STR_DISC_OK_EVT, - BTA_AV_STR_DISC_FAIL_EVT, - BTA_AV_STR_GETCAP_OK_EVT, - BTA_AV_STR_GETCAP_FAIL_EVT, - BTA_AV_STR_OPEN_OK_EVT, - BTA_AV_STR_OPEN_FAIL_EVT, - BTA_AV_STR_START_OK_EVT, - BTA_AV_STR_START_FAIL_EVT, - BTA_AV_STR_CLOSE_EVT, - BTA_AV_STR_CONFIG_IND_EVT, - BTA_AV_STR_SECURITY_IND_EVT, - BTA_AV_STR_SECURITY_CFM_EVT, - BTA_AV_STR_WRITE_CFM_EVT, - BTA_AV_STR_SUSPEND_CFM_EVT, - BTA_AV_STR_RECONFIG_CFM_EVT, - BTA_AV_AVRC_TIMER_EVT, - BTA_AV_AVDT_CONNECT_EVT, - BTA_AV_AVDT_DISCONNECT_EVT, - BTA_AV_ROLE_CHANGE_EVT, - BTA_AV_AVDT_DELAY_RPT_EVT, - BTA_AV_ACP_CONNECT_EVT, - BTA_AV_API_OFFLOAD_START_EVT, - BTA_AV_API_OFFLOAD_START_RSP_EVT, - - /* these events are handled outside of the state machine */ - BTA_AV_API_ENABLE_EVT, - BTA_AV_API_REGISTER_EVT, - BTA_AV_API_DEREGISTER_EVT, - BTA_AV_API_DISCONNECT_EVT, - BTA_AV_CI_SRC_DATA_READY_EVT, - BTA_AV_SIG_CHG_EVT, - BTA_AV_SIGNALLING_TIMER_EVT, - BTA_AV_SDP_AVRC_DISC_EVT, - BTA_AV_AVRC_CLOSE_EVT, - BTA_AV_AVRC_BROWSE_OPEN_EVT, - BTA_AV_AVRC_BROWSE_CLOSE_EVT, - BTA_AV_CONN_CHG_EVT, - BTA_AV_DEREG_COMP_EVT, +enum { + /* these events are handled by the AV main state machine */ + BTA_AV_API_DISABLE_EVT = BTA_SYS_EVT_START(BTA_ID_AV), + BTA_AV_API_REMOTE_CMD_EVT, + BTA_AV_API_VENDOR_CMD_EVT, + BTA_AV_API_VENDOR_RSP_EVT, + BTA_AV_API_META_RSP_EVT, + BTA_AV_API_RC_CLOSE_EVT, + BTA_AV_AVRC_OPEN_EVT, + BTA_AV_AVRC_MSG_EVT, + BTA_AV_AVRC_NONE_EVT, + + /* these events are handled by the AV stream state machine */ + BTA_AV_API_OPEN_EVT, + BTA_AV_API_CLOSE_EVT, + BTA_AV_AP_START_EVT, /* the following 2 events must be in the same order as + the *API_*EVT */ + BTA_AV_AP_STOP_EVT, + BTA_AV_API_RECONFIG_EVT, + BTA_AV_API_PROTECT_REQ_EVT, + BTA_AV_API_PROTECT_RSP_EVT, + BTA_AV_API_RC_OPEN_EVT, + BTA_AV_SRC_DATA_READY_EVT, + BTA_AV_CI_SETCONFIG_OK_EVT, + BTA_AV_CI_SETCONFIG_FAIL_EVT, + BTA_AV_SDP_DISC_OK_EVT, + BTA_AV_SDP_DISC_FAIL_EVT, + BTA_AV_STR_DISC_OK_EVT, + BTA_AV_STR_DISC_FAIL_EVT, + BTA_AV_STR_GETCAP_OK_EVT, + BTA_AV_STR_GETCAP_FAIL_EVT, + BTA_AV_STR_OPEN_OK_EVT, + BTA_AV_STR_OPEN_FAIL_EVT, + BTA_AV_STR_START_OK_EVT, + BTA_AV_STR_START_FAIL_EVT, + BTA_AV_STR_CLOSE_EVT, + BTA_AV_STR_CONFIG_IND_EVT, + BTA_AV_STR_SECURITY_IND_EVT, + BTA_AV_STR_SECURITY_CFM_EVT, + BTA_AV_STR_WRITE_CFM_EVT, + BTA_AV_STR_SUSPEND_CFM_EVT, + BTA_AV_STR_RECONFIG_CFM_EVT, + BTA_AV_AVRC_TIMER_EVT, + BTA_AV_AVDT_CONNECT_EVT, + BTA_AV_AVDT_DISCONNECT_EVT, + BTA_AV_ROLE_CHANGE_EVT, + BTA_AV_AVDT_DELAY_RPT_EVT, + BTA_AV_ACP_CONNECT_EVT, + BTA_AV_API_OFFLOAD_START_EVT, + BTA_AV_API_OFFLOAD_START_RSP_EVT, + + /* these events are handled outside of the state machine */ + BTA_AV_API_ENABLE_EVT, + BTA_AV_API_REGISTER_EVT, + BTA_AV_API_DEREGISTER_EVT, + BTA_AV_API_DISCONNECT_EVT, + BTA_AV_CI_SRC_DATA_READY_EVT, + BTA_AV_SIG_CHG_EVT, + BTA_AV_SIGNALLING_TIMER_EVT, + BTA_AV_SDP_AVRC_DISC_EVT, + BTA_AV_AVRC_CLOSE_EVT, + BTA_AV_AVRC_BROWSE_OPEN_EVT, + BTA_AV_AVRC_BROWSE_CLOSE_EVT, + BTA_AV_CONN_CHG_EVT, + BTA_AV_DEREG_COMP_EVT, #if (AVDT_REPORTING == TRUE) - BTA_AV_AVDT_RPT_CONN_EVT, + BTA_AV_AVDT_RPT_CONN_EVT, #endif - BTA_AV_API_START_EVT, /* the following 2 events must be in the same order as the *AP_*EVT */ - BTA_AV_API_STOP_EVT + BTA_AV_API_START_EVT, /* the following 2 events must be in the same order as + the *AP_*EVT */ + BTA_AV_API_STOP_EVT }; /* events for AV control block state machine */ -#define BTA_AV_FIRST_SM_EVT BTA_AV_API_DISABLE_EVT -#define BTA_AV_LAST_SM_EVT BTA_AV_AVRC_NONE_EVT +#define BTA_AV_FIRST_SM_EVT BTA_AV_API_DISABLE_EVT +#define BTA_AV_LAST_SM_EVT BTA_AV_AVRC_NONE_EVT /* events for AV stream control block state machine */ -#define BTA_AV_FIRST_SSM_EVT BTA_AV_API_OPEN_EVT +#define BTA_AV_FIRST_SSM_EVT BTA_AV_API_OPEN_EVT /* events that do not go through state machine */ -#define BTA_AV_FIRST_NSM_EVT BTA_AV_API_ENABLE_EVT -#define BTA_AV_LAST_NSM_EVT BTA_AV_API_STOP_EVT +#define BTA_AV_FIRST_NSM_EVT BTA_AV_API_ENABLE_EVT +#define BTA_AV_LAST_NSM_EVT BTA_AV_API_STOP_EVT /* API events passed to both SSMs (by bta_av_api_to_ssm) */ -#define BTA_AV_FIRST_A2S_API_EVT BTA_AV_API_START_EVT -#define BTA_AV_FIRST_A2S_SSM_EVT BTA_AV_AP_START_EVT +#define BTA_AV_FIRST_A2S_API_EVT BTA_AV_API_START_EVT +#define BTA_AV_FIRST_A2S_SSM_EVT BTA_AV_AP_START_EVT -#define BTA_AV_LAST_EVT BTA_AV_API_STOP_EVT +#define BTA_AV_LAST_EVT BTA_AV_API_STOP_EVT /* maximum number of SEPS in stream discovery results */ -#define BTA_AV_NUM_SEPS 32 +#define BTA_AV_NUM_SEPS 32 /* initialization value for AVRC handle */ -#define BTA_AV_RC_HANDLE_NONE 0xFF +#define BTA_AV_RC_HANDLE_NONE 0xFF /* size of database for service discovery */ -#define BTA_AV_DISC_BUF_SIZE 1000 +#define BTA_AV_DISC_BUF_SIZE 1000 /* maximum length of AVDTP security data */ -#define BTA_AV_SECURITY_MAX_LEN 400 +#define BTA_AV_SECURITY_MAX_LEN 400 -/* check number of buffers queued at L2CAP when this amount of buffers are queued to L2CAP */ -#define BTA_AV_QUEUE_DATA_CHK_NUM L2CAP_HIGH_PRI_MIN_XMIT_QUOTA +/* check number of buffers queued at L2CAP when this amount of buffers are + * queued to L2CAP */ +#define BTA_AV_QUEUE_DATA_CHK_NUM L2CAP_HIGH_PRI_MIN_XMIT_QUOTA /* the number of ACL links with AVDT */ -#define BTA_AV_NUM_LINKS AVDT_NUM_LINKS - -#define BTA_AV_BE_STREAM_TO_CO_ID(u32, p) {(u32) = (((uint32_t)(*((p) + 2))) + (((uint32_t)(*((p) + 1))) << 8) + (((uint32_t)(*(p))) << 16)); (p) += 3;} - +#define BTA_AV_NUM_LINKS AVDT_NUM_LINKS +#define BTA_AV_BE_STREAM_TO_CO_ID(u32, p) \ + { \ + (u32) = (((uint32_t)(*((p) + 2))) + (((uint32_t)(*((p) + 1))) << 8) + \ + (((uint32_t)(*(p))) << 16)); \ + (p) += 3; \ + } /***************************************************************************** * Data types ****************************************************************************/ /* function types for call-out functions */ -typedef bool (*tBTA_AV_CO_INIT) (tA2DP_CODEC_SEP_INDEX codec_sep_index, - tAVDT_CFG *p_cfg); -typedef void (*tBTA_AV_CO_DISC_RES) (tBTA_AV_HNDL hndl, uint8_t num_seps, - uint8_t num_snk, uint8_t num_src, - BD_ADDR addr, uint16_t uuid_local); -typedef tA2DP_STATUS (*tBTA_AV_CO_GETCFG) (tBTA_AV_HNDL hndl, - uint8_t *p_codec_info, - uint8_t *p_sep_info_idx, - uint8_t seid, - uint8_t *p_num_protect, - uint8_t *p_protect_info); -typedef void (*tBTA_AV_CO_SETCFG) (tBTA_AV_HNDL hndl, - const uint8_t *p_codec_info, uint8_t seid, - BD_ADDR addr, uint8_t num_protect, - uint8_t *p_protect_info, - uint8_t t_local_sep, uint8_t avdt_handle); -typedef void (*tBTA_AV_CO_OPEN) (tBTA_AV_HNDL hndl, uint8_t *p_codec_info, - uint16_t mtu); -typedef void (*tBTA_AV_CO_CLOSE) (tBTA_AV_HNDL hndl, uint16_t mtu); -typedef void (*tBTA_AV_CO_START) (tBTA_AV_HNDL hndl, uint8_t *p_codec_info, - bool *p_no_rtp_hdr); -typedef void (*tBTA_AV_CO_STOP) (tBTA_AV_HNDL hndl); -typedef void * (*tBTA_AV_CO_DATAPATH) (const uint8_t *p_codec_info, - uint32_t *p_timestamp); -typedef void (*tBTA_AV_CO_DELAY) (tBTA_AV_HNDL hndl, uint16_t delay); +typedef bool (*tBTA_AV_CO_INIT)(tA2DP_CODEC_SEP_INDEX codec_sep_index, + tAVDT_CFG* p_cfg); +typedef void (*tBTA_AV_CO_DISC_RES)(tBTA_AV_HNDL hndl, uint8_t num_seps, + uint8_t num_snk, uint8_t num_src, + BD_ADDR addr, uint16_t uuid_local); +typedef tA2DP_STATUS (*tBTA_AV_CO_GETCFG)(tBTA_AV_HNDL hndl, + uint8_t* p_codec_info, + uint8_t* p_sep_info_idx, uint8_t seid, + uint8_t* p_num_protect, + uint8_t* p_protect_info); +typedef void (*tBTA_AV_CO_SETCFG)(tBTA_AV_HNDL hndl, + const uint8_t* p_codec_info, uint8_t seid, + BD_ADDR addr, uint8_t num_protect, + uint8_t* p_protect_info, uint8_t t_local_sep, + uint8_t avdt_handle); +typedef void (*tBTA_AV_CO_OPEN)(tBTA_AV_HNDL hndl, uint8_t* p_codec_info, + uint16_t mtu); +typedef void (*tBTA_AV_CO_CLOSE)(tBTA_AV_HNDL hndl, uint16_t mtu); +typedef void (*tBTA_AV_CO_START)(tBTA_AV_HNDL hndl, uint8_t* p_codec_info, + bool* p_no_rtp_hdr); +typedef void (*tBTA_AV_CO_STOP)(tBTA_AV_HNDL hndl); +typedef void* (*tBTA_AV_CO_DATAPATH)(const uint8_t* p_codec_info, + uint32_t* p_timestamp); +typedef void (*tBTA_AV_CO_DELAY)(tBTA_AV_HNDL hndl, uint16_t delay); /* the call-out functions for one stream */ -typedef struct -{ - tBTA_AV_CO_INIT init; - tBTA_AV_CO_DISC_RES disc_res; - tBTA_AV_CO_GETCFG getcfg; - tBTA_AV_CO_SETCFG setcfg; - tBTA_AV_CO_OPEN open; - tBTA_AV_CO_CLOSE close; - tBTA_AV_CO_START start; - tBTA_AV_CO_STOP stop; - tBTA_AV_CO_DATAPATH data; - tBTA_AV_CO_DELAY delay; +typedef struct { + tBTA_AV_CO_INIT init; + tBTA_AV_CO_DISC_RES disc_res; + tBTA_AV_CO_GETCFG getcfg; + tBTA_AV_CO_SETCFG setcfg; + tBTA_AV_CO_OPEN open; + tBTA_AV_CO_CLOSE close; + tBTA_AV_CO_START start; + tBTA_AV_CO_STOP stop; + tBTA_AV_CO_DATAPATH data; + tBTA_AV_CO_DELAY delay; } tBTA_AV_CO_FUNCTS; /* data type for BTA_AV_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_AV_CBACK *p_cback; - tBTA_AV_FEAT features; - tBTA_SEC sec_mask; +typedef struct { + BT_HDR hdr; + tBTA_AV_CBACK* p_cback; + tBTA_AV_FEAT features; + tBTA_SEC sec_mask; } tBTA_AV_API_ENABLE; /* data type for BTA_AV_API_REGISTER_EVT */ -typedef struct -{ - BT_HDR hdr; - char p_service_name[BTA_SERVICE_NAME_LEN+1]; - uint8_t app_id; - tBTA_AV_SINK_DATA_CBACK *p_app_sink_data_cback; - uint16_t service_uuid; +typedef struct { + BT_HDR hdr; + char p_service_name[BTA_SERVICE_NAME_LEN + 1]; + uint8_t app_id; + tBTA_AV_SINK_DATA_CBACK* p_app_sink_data_cback; + uint16_t service_uuid; } tBTA_AV_API_REG; - -enum -{ - BTA_AV_RS_NONE, /* straight API call */ - BTA_AV_RS_OK, /* the role switch result - successful */ - BTA_AV_RS_FAIL, /* the role switch result - failed */ - BTA_AV_RS_DONE /* the role switch is done - continue */ +enum { + BTA_AV_RS_NONE, /* straight API call */ + BTA_AV_RS_OK, /* the role switch result - successful */ + BTA_AV_RS_FAIL, /* the role switch result - failed */ + BTA_AV_RS_DONE /* the role switch is done - continue */ }; typedef uint8_t tBTA_AV_RS_RES; /* data type for BTA_AV_API_OPEN_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - bool use_rc; - tBTA_SEC sec_mask; - tBTA_AV_RS_RES switch_res; - uint16_t uuid; /* uuid of initiator */ +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + bool use_rc; + tBTA_SEC sec_mask; + tBTA_AV_RS_RES switch_res; + uint16_t uuid; /* uuid of initiator */ } tBTA_AV_API_OPEN; /* data type for BTA_AV_API_STOP_EVT */ -typedef struct -{ - BT_HDR hdr; - bool suspend; - bool flush; +typedef struct { + BT_HDR hdr; + bool suspend; + bool flush; } tBTA_AV_API_STOP; /* data type for BTA_AV_API_DISCONNECT_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; } tBTA_AV_API_DISCNT; /* data type for BTA_AV_API_PROTECT_REQ_EVT */ -typedef struct -{ - BT_HDR hdr; - uint8_t *p_data; - uint16_t len; +typedef struct { + BT_HDR hdr; + uint8_t* p_data; + uint16_t len; } tBTA_AV_API_PROTECT_REQ; /* data type for BTA_AV_API_PROTECT_RSP_EVT */ -typedef struct -{ - BT_HDR hdr; - uint8_t *p_data; - uint16_t len; - uint8_t error_code; +typedef struct { + BT_HDR hdr; + uint8_t* p_data; + uint16_t len; + uint8_t error_code; } tBTA_AV_API_PROTECT_RSP; /* data type for BTA_AV_API_REMOTE_CMD_EVT */ -typedef struct -{ - BT_HDR hdr; - tAVRC_MSG_PASS msg; - uint8_t label; +typedef struct { + BT_HDR hdr; + tAVRC_MSG_PASS msg; + uint8_t label; } tBTA_AV_API_REMOTE_CMD; /* data type for BTA_AV_API_VENDOR_CMD_EVT and RSP */ -typedef struct -{ - BT_HDR hdr; - tAVRC_MSG_VENDOR msg; - uint8_t label; +typedef struct { + BT_HDR hdr; + tAVRC_MSG_VENDOR msg; + uint8_t label; } tBTA_AV_API_VENDOR; /* data type for BTA_AV_API_RC_OPEN_EVT */ -typedef struct -{ - BT_HDR hdr; -} tBTA_AV_API_OPEN_RC; +typedef struct { BT_HDR hdr; } tBTA_AV_API_OPEN_RC; /* data type for BTA_AV_API_RC_CLOSE_EVT */ -typedef struct -{ - BT_HDR hdr; -} tBTA_AV_API_CLOSE_RC; +typedef struct { BT_HDR hdr; } tBTA_AV_API_CLOSE_RC; /* data type for BTA_AV_API_META_RSP_EVT */ -typedef struct -{ - BT_HDR hdr; - bool is_rsp; - uint8_t label; - tBTA_AV_CODE rsp_code; - BT_HDR *p_pkt; +typedef struct { + BT_HDR hdr; + bool is_rsp; + uint8_t label; + tBTA_AV_CODE rsp_code; + BT_HDR* p_pkt; } tBTA_AV_API_META_RSP; - /* data type for BTA_AV_API_RECONFIG_EVT */ -typedef struct -{ - BT_HDR hdr; - uint8_t codec_info[AVDT_CODEC_SIZE]; /* codec configuration */ - uint8_t *p_protect_info; - uint8_t num_protect; - bool suspend; - uint8_t sep_info_idx; +typedef struct { + BT_HDR hdr; + uint8_t codec_info[AVDT_CODEC_SIZE]; /* codec configuration */ + uint8_t* p_protect_info; + uint8_t num_protect; + bool suspend; + uint8_t sep_info_idx; } tBTA_AV_API_RCFG; /* data type for BTA_AV_CI_SETCONFIG_OK_EVT and BTA_AV_CI_SETCONFIG_FAIL_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_AV_HNDL hndl; - uint8_t err_code; - uint8_t category; - uint8_t num_seid; - uint8_t *p_seid; - bool recfg_needed; - uint8_t avdt_handle; /* local sep type for which this stream will be set up */ +typedef struct { + BT_HDR hdr; + tBTA_AV_HNDL hndl; + uint8_t err_code; + uint8_t category; + uint8_t num_seid; + uint8_t* p_seid; + bool recfg_needed; + uint8_t avdt_handle; /* local sep type for which this stream will be set up */ } tBTA_AV_CI_SETCONFIG; /* data type for all stream events from AVDTP */ typedef struct { - BT_HDR hdr; - tAVDT_CFG cfg; /* configuration/capabilities parameters */ - tAVDT_CTRL msg; /* AVDTP callback message parameters */ - BD_ADDR bd_addr; /* bd address */ - uint8_t handle; - uint8_t avdt_event; - bool initiator; /* true, if local device initiates the SUSPEND */ + BT_HDR hdr; + tAVDT_CFG cfg; /* configuration/capabilities parameters */ + tAVDT_CTRL msg; /* AVDTP callback message parameters */ + BD_ADDR bd_addr; /* bd address */ + uint8_t handle; + uint8_t avdt_event; + bool initiator; /* true, if local device initiates the SUSPEND */ } tBTA_AV_STR_MSG; /* data type for BTA_AV_AVRC_MSG_EVT */ -typedef struct -{ - BT_HDR hdr; - tAVRC_MSG msg; - uint8_t handle; - uint8_t label; - uint8_t opcode; +typedef struct { + BT_HDR hdr; + tAVRC_MSG msg; + uint8_t handle; + uint8_t label; + uint8_t opcode; } tBTA_AV_RC_MSG; /* data type for BTA_AV_AVRC_OPEN_EVT, BTA_AV_AVRC_CLOSE_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR peer_addr; - uint8_t handle; +typedef struct { + BT_HDR hdr; + BD_ADDR peer_addr; + uint8_t handle; } tBTA_AV_RC_CONN_CHG; /* data type for BTA_AV_CONN_CHG_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR peer_addr; - bool is_up; +typedef struct { + BT_HDR hdr; + BD_ADDR peer_addr; + bool is_up; } tBTA_AV_CONN_CHG; /* data type for BTA_AV_ROLE_CHANGE_EVT */ -typedef struct -{ - BT_HDR hdr; - uint8_t new_role; - uint8_t hci_status; +typedef struct { + BT_HDR hdr; + uint8_t new_role; + uint8_t hci_status; } tBTA_AV_ROLE_RES; /* data type for BTA_AV_SDP_DISC_OK_EVT */ -typedef struct -{ - BT_HDR hdr; - uint16_t avdt_version; /* AVDTP protocol version */ +typedef struct { + BT_HDR hdr; + uint16_t avdt_version; /* AVDTP protocol version */ } tBTA_AV_SDP_RES; /* data type for BTA_AV_API_OFFLOAD_RSP_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_AV_STATUS status; +typedef struct { + BT_HDR hdr; + tBTA_AV_STATUS status; } tBTA_AV_API_STATUS_RSP; - /* type for SEP control block */ -typedef struct -{ - uint8_t av_handle; /* AVDTP handle */ - uint8_t tsep; /* SEP type of local SEP */ - uint8_t codec_info[AVDT_CODEC_SIZE]; /* Codec info */ - tBTA_AV_SINK_DATA_CBACK *p_app_sink_data_cback; /* Sink application callback for media packets */ +typedef struct { + uint8_t av_handle; /* AVDTP handle */ + uint8_t tsep; /* SEP type of local SEP */ + uint8_t codec_info[AVDT_CODEC_SIZE]; /* Codec info */ + tBTA_AV_SINK_DATA_CBACK* + p_app_sink_data_cback; /* Sink application callback for media packets */ } tBTA_AV_SEP; - /* initiator/acceptor role for adaption */ -#define BTA_AV_ROLE_AD_INT 0x00 /* initiator */ -#define BTA_AV_ROLE_AD_ACP 0x01 /* acceptor */ +#define BTA_AV_ROLE_AD_INT 0x00 /* initiator */ +#define BTA_AV_ROLE_AD_ACP 0x01 /* acceptor */ /* initiator/acceptor signaling roles */ -#define BTA_AV_ROLE_START_ACP 0x00 -#define BTA_AV_ROLE_START_INT 0x10 /* do not change this value */ +#define BTA_AV_ROLE_START_ACP 0x00 +#define BTA_AV_ROLE_START_INT 0x10 /* do not change this value */ -#define BTA_AV_ROLE_SUSPEND 0x20 /* suspending on start */ -#define BTA_AV_ROLE_SUSPEND_OPT 0x40 /* Suspend on Start option is set */ +#define BTA_AV_ROLE_SUSPEND 0x20 /* suspending on start */ +#define BTA_AV_ROLE_SUSPEND_OPT 0x40 /* Suspend on Start option is set */ /* union of all event datatypes */ -typedef union -{ - BT_HDR hdr; - tBTA_AV_API_ENABLE api_enable; - tBTA_AV_API_REG api_reg; - tBTA_AV_API_OPEN api_open; - tBTA_AV_API_STOP api_stop; - tBTA_AV_API_DISCNT api_discnt; - tBTA_AV_API_PROTECT_REQ api_protect_req; - tBTA_AV_API_PROTECT_RSP api_protect_rsp; - tBTA_AV_API_REMOTE_CMD api_remote_cmd; - tBTA_AV_API_VENDOR api_vendor; - tBTA_AV_API_RCFG api_reconfig; - tBTA_AV_CI_SETCONFIG ci_setconfig; - tBTA_AV_STR_MSG str_msg; - tBTA_AV_RC_MSG rc_msg; - tBTA_AV_RC_CONN_CHG rc_conn_chg; - tBTA_AV_CONN_CHG conn_chg; - tBTA_AV_ROLE_RES role_res; - tBTA_AV_SDP_RES sdp_res; - tBTA_AV_API_META_RSP api_meta_rsp; - tBTA_AV_API_STATUS_RSP api_status_rsp; +typedef union { + BT_HDR hdr; + tBTA_AV_API_ENABLE api_enable; + tBTA_AV_API_REG api_reg; + tBTA_AV_API_OPEN api_open; + tBTA_AV_API_STOP api_stop; + tBTA_AV_API_DISCNT api_discnt; + tBTA_AV_API_PROTECT_REQ api_protect_req; + tBTA_AV_API_PROTECT_RSP api_protect_rsp; + tBTA_AV_API_REMOTE_CMD api_remote_cmd; + tBTA_AV_API_VENDOR api_vendor; + tBTA_AV_API_RCFG api_reconfig; + tBTA_AV_CI_SETCONFIG ci_setconfig; + tBTA_AV_STR_MSG str_msg; + tBTA_AV_RC_MSG rc_msg; + tBTA_AV_RC_CONN_CHG rc_conn_chg; + tBTA_AV_CONN_CHG conn_chg; + tBTA_AV_ROLE_RES role_res; + tBTA_AV_SDP_RES sdp_res; + tBTA_AV_API_META_RSP api_meta_rsp; + tBTA_AV_API_STATUS_RSP api_status_rsp; } tBTA_AV_DATA; -typedef union -{ - tBTA_AV_API_OPEN open; /* used only before open and role switch - is needed on another AV channel */ +typedef union { + tBTA_AV_API_OPEN open; /* used only before open and role switch + is needed on another AV channel */ } tBTA_AV_Q_INFO; -#define BTA_AV_Q_TAG_OPEN 0x01 /* after API_OPEN, before STR_OPENED */ -#define BTA_AV_Q_TAG_START 0x02 /* before start sending media packets */ -#define BTA_AV_Q_TAG_STREAM 0x03 /* during streaming */ - -#define BTA_AV_WAIT_ACP_CAPS_ON 0x01 /* retriving the peer capabilities */ -#define BTA_AV_WAIT_ACP_CAPS_STARTED 0x02 /* started while retriving peer capabilities */ -#define BTA_AV_WAIT_ROLE_SW_RES_OPEN 0x04 /* waiting for role switch result after API_OPEN, before STR_OPENED */ -#define BTA_AV_WAIT_ROLE_SW_RES_START 0x08 /* waiting for role switch result before streaming */ -#define BTA_AV_WAIT_ROLE_SW_STARTED 0x10 /* started while waiting for role switch result */ -#define BTA_AV_WAIT_ROLE_SW_RETRY 0x20 /* set when retry on timeout */ -#define BTA_AV_WAIT_CHECK_RC 0x40 /* set when the timer is used by role switch */ -#define BTA_AV_WAIT_ROLE_SW_FAILED 0x80 /* role switch failed */ - -#define BTA_AV_WAIT_ROLE_SW_BITS (BTA_AV_WAIT_ROLE_SW_RES_OPEN|BTA_AV_WAIT_ROLE_SW_RES_START|BTA_AV_WAIT_ROLE_SW_STARTED|BTA_AV_WAIT_ROLE_SW_RETRY) +#define BTA_AV_Q_TAG_OPEN 0x01 /* after API_OPEN, before STR_OPENED */ +#define BTA_AV_Q_TAG_START 0x02 /* before start sending media packets */ +#define BTA_AV_Q_TAG_STREAM 0x03 /* during streaming */ + +#define BTA_AV_WAIT_ACP_CAPS_ON 0x01 /* retriving the peer capabilities */ +#define BTA_AV_WAIT_ACP_CAPS_STARTED \ + 0x02 /* started while retriving peer capabilities */ +#define BTA_AV_WAIT_ROLE_SW_RES_OPEN \ + 0x04 /* waiting for role switch result after API_OPEN, before STR_OPENED */ +#define BTA_AV_WAIT_ROLE_SW_RES_START \ + 0x08 /* waiting for role switch result before streaming */ +#define BTA_AV_WAIT_ROLE_SW_STARTED \ + 0x10 /* started while waiting for role switch result */ +#define BTA_AV_WAIT_ROLE_SW_RETRY 0x20 /* set when retry on timeout */ +#define BTA_AV_WAIT_CHECK_RC \ + 0x40 /* set when the timer is used by role switch */ +#define BTA_AV_WAIT_ROLE_SW_FAILED 0x80 /* role switch failed */ + +#define BTA_AV_WAIT_ROLE_SW_BITS \ + (BTA_AV_WAIT_ROLE_SW_RES_OPEN | BTA_AV_WAIT_ROLE_SW_RES_START | \ + BTA_AV_WAIT_ROLE_SW_STARTED | BTA_AV_WAIT_ROLE_SW_RETRY) /* Bitmap for collision, coll_mask */ -#define BTA_AV_COLL_INC_TMR 0x01 /* Timer is running for incoming L2C connection */ -#define BTA_AV_COLL_API_CALLED 0x02 /* API open was called while incoming timer is running */ +#define BTA_AV_COLL_INC_TMR \ + 0x01 /* Timer is running for incoming L2C connection */ +#define BTA_AV_COLL_API_CALLED \ + 0x02 /* API open was called while incoming timer is running */ /* type for AV stream control block */ -typedef struct -{ - const tBTA_AV_ACT *p_act_tbl; /* the action table for stream state machine */ - const tBTA_AV_CO_FUNCTS *p_cos; /* the associated callout functions */ - bool sdp_discovery_started; /* variable to determine whether SDP is started */ - tBTA_AV_SEP seps[A2DP_CODEC_SEP_INDEX_MAX]; - tAVDT_CFG *p_cap; /* buffer used for get capabilities */ - list_t *a2dp_list; /* used for audio channels only */ - tBTA_AV_Q_INFO q_info; - tAVDT_SEP_INFO sep_info[BTA_AV_NUM_SEPS]; /* stream discovery results */ - tAVDT_CFG cfg; /* local SEP configuration */ - alarm_t *avrc_ct_timer; /* delay timer for AVRC CT */ - BD_ADDR peer_addr; /* peer BD address */ - uint16_t l2c_cid; /* L2CAP channel ID */ - uint16_t stream_mtu; /* MTU of stream */ - uint16_t avdt_version; /* the avdt version of peer device */ - tBTA_SEC sec_mask; /* security mask */ - uint8_t media_type; /* Media type: AVDT_MEDIA_TYPE_* */ - bool cong; /* true if AVDTP congested */ - tBTA_AV_STATUS open_status; /* open failure status */ - tBTA_AV_CHNL chnl; /* the channel: audio/video */ - tBTA_AV_HNDL hndl; /* the handle: ((hdi + 1)|chnl) */ - uint16_t cur_psc_mask; /* Protocol service capabilities mask for current connection */ - uint8_t avdt_handle; /* AVDTP handle */ - uint8_t hdi; /* the index to SCB[] */ - uint8_t num_seps; /* number of seps returned by stream discovery */ - uint8_t num_disc_snks; /* number of discovered snks */ - uint8_t num_disc_srcs; /* number of discovered srcs */ - uint8_t sep_info_idx; /* current index into sep_info */ - uint8_t sep_idx; /* current index into local seps[] */ - uint8_t rcfg_idx; /* reconfig requested index into sep_info */ - uint8_t state; /* state machine state */ - uint8_t avdt_label; /* AVDTP label */ - uint8_t app_id; /* application id */ - uint8_t num_recfg; /* number of reconfigure sent */ - uint8_t role; - uint8_t l2c_bufs; /* the number of buffers queued to L2CAP */ - uint8_t rc_handle; /* connected AVRCP handle */ - bool use_rc; /* true if AVRCP is allowed */ - bool started; /* true if stream started */ - uint8_t co_started; /* non-zero, if stream started from call-out perspective */ - bool recfg_sup; /* true if the first attempt to reconfigure the stream was successfull, else False if command fails */ - bool suspend_sup; /* true if Suspend stream is supported, else false if suspend command fails */ - bool deregistring; /* true if deregistering */ - bool sco_suspend; /* true if SUSPEND is issued automatically for SCO */ - uint8_t coll_mask; /* Mask to check incoming and outgoing collision */ - tBTA_AV_API_OPEN open_api; /* Saved OPEN api message */ - uint8_t wait; /* set 0x1, when getting Caps as ACP, set 0x2, when started */ - uint8_t q_tag; /* identify the associated q_info union member */ - bool no_rtp_hdr; /* true if add no RTP header*/ - uint16_t uuid_int; /*intended UUID of Initiator to connect to */ - bool offload_start_pending; - bool skip_sdp; /* Decides if sdp to be done prior to profile connection */ +typedef struct { + const tBTA_AV_ACT* p_act_tbl; /* the action table for stream state machine */ + const tBTA_AV_CO_FUNCTS* p_cos; /* the associated callout functions */ + bool sdp_discovery_started; /* variable to determine whether SDP is started */ + tBTA_AV_SEP seps[A2DP_CODEC_SEP_INDEX_MAX]; + tAVDT_CFG* p_cap; /* buffer used for get capabilities */ + list_t* a2dp_list; /* used for audio channels only */ + tBTA_AV_Q_INFO q_info; + tAVDT_SEP_INFO sep_info[BTA_AV_NUM_SEPS]; /* stream discovery results */ + tAVDT_CFG cfg; /* local SEP configuration */ + alarm_t* avrc_ct_timer; /* delay timer for AVRC CT */ + BD_ADDR peer_addr; /* peer BD address */ + uint16_t l2c_cid; /* L2CAP channel ID */ + uint16_t stream_mtu; /* MTU of stream */ + uint16_t avdt_version; /* the avdt version of peer device */ + tBTA_SEC sec_mask; /* security mask */ + uint8_t media_type; /* Media type: AVDT_MEDIA_TYPE_* */ + bool cong; /* true if AVDTP congested */ + tBTA_AV_STATUS open_status; /* open failure status */ + tBTA_AV_CHNL chnl; /* the channel: audio/video */ + tBTA_AV_HNDL hndl; /* the handle: ((hdi + 1)|chnl) */ + uint16_t cur_psc_mask; /* Protocol service capabilities mask for current + connection */ + uint8_t avdt_handle; /* AVDTP handle */ + uint8_t hdi; /* the index to SCB[] */ + uint8_t num_seps; /* number of seps returned by stream discovery */ + uint8_t num_disc_snks; /* number of discovered snks */ + uint8_t num_disc_srcs; /* number of discovered srcs */ + uint8_t sep_info_idx; /* current index into sep_info */ + uint8_t sep_idx; /* current index into local seps[] */ + uint8_t rcfg_idx; /* reconfig requested index into sep_info */ + uint8_t state; /* state machine state */ + uint8_t avdt_label; /* AVDTP label */ + uint8_t app_id; /* application id */ + uint8_t num_recfg; /* number of reconfigure sent */ + uint8_t role; + uint8_t l2c_bufs; /* the number of buffers queued to L2CAP */ + uint8_t rc_handle; /* connected AVRCP handle */ + bool use_rc; /* true if AVRCP is allowed */ + bool started; /* true if stream started */ + uint8_t + co_started; /* non-zero, if stream started from call-out perspective */ + bool recfg_sup; /* true if the first attempt to reconfigure the stream was + successfull, else False if command fails */ + bool suspend_sup; /* true if Suspend stream is supported, else false if + suspend command fails */ + bool deregistring; /* true if deregistering */ + bool sco_suspend; /* true if SUSPEND is issued automatically for SCO */ + uint8_t coll_mask; /* Mask to check incoming and outgoing collision */ + tBTA_AV_API_OPEN open_api; /* Saved OPEN api message */ + uint8_t wait; /* set 0x1, when getting Caps as ACP, set 0x2, when started */ + uint8_t q_tag; /* identify the associated q_info union member */ + bool no_rtp_hdr; /* true if add no RTP header*/ + uint16_t uuid_int; /*intended UUID of Initiator to connect to */ + bool offload_start_pending; + bool skip_sdp; /* Decides if sdp to be done prior to profile connection */ } tBTA_AV_SCB; -#define BTA_AV_RC_ROLE_MASK 0x10 -#define BTA_AV_RC_ROLE_INT 0x00 -#define BTA_AV_RC_ROLE_ACP 0x10 +#define BTA_AV_RC_ROLE_MASK 0x10 +#define BTA_AV_RC_ROLE_INT 0x00 +#define BTA_AV_RC_ROLE_ACP 0x10 -#define BTA_AV_RC_CONN_MASK 0x20 +#define BTA_AV_RC_CONN_MASK 0x20 /* type for AV RCP control block */ /* index to this control block is the rc handle */ -typedef struct -{ - uint8_t status; - uint8_t handle; - uint8_t shdl; /* stream handle (hdi + 1) */ - uint8_t lidx; /* (index+1) to LCB */ - tBTA_AV_FEAT peer_features; /* peer features mask */ +typedef struct { + uint8_t status; + uint8_t handle; + uint8_t shdl; /* stream handle (hdi + 1) */ + uint8_t lidx; /* (index+1) to LCB */ + tBTA_AV_FEAT peer_features; /* peer features mask */ } tBTA_AV_RCB; -#define BTA_AV_NUM_RCB (BTA_AV_NUM_STRS + 2) +#define BTA_AV_NUM_RCB (BTA_AV_NUM_STRS + 2) -enum -{ - BTA_AV_LCB_FREE, - BTA_AV_LCB_FIND -}; +enum { BTA_AV_LCB_FREE, BTA_AV_LCB_FIND }; /* type for AV ACL Link control block */ -typedef struct -{ - BD_ADDR addr; /* peer BD address */ - uint8_t conn_msk; /* handle mask of connected stream handle */ - uint8_t lidx; /* index + 1 */ +typedef struct { + BD_ADDR addr; /* peer BD address */ + uint8_t conn_msk; /* handle mask of connected stream handle */ + uint8_t lidx; /* index + 1 */ } tBTA_AV_LCB; /* type for stream state machine action functions */ -typedef void (*tBTA_AV_SACT)(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); - +typedef void (*tBTA_AV_SACT)(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); /* type for AV control block */ -typedef struct -{ - tBTA_AV_SCB *p_scb[BTA_AV_NUM_STRS]; /* stream control block */ - tSDP_DISCOVERY_DB *p_disc_db; /* pointer to discovery database */ - tBTA_AV_CBACK *p_cback; /* application callback function */ - tBTA_AV_RCB rcb[BTA_AV_NUM_RCB]; /* RCB control block */ - tBTA_AV_LCB lcb[BTA_AV_NUM_LINKS+1]; /* link control block */ - alarm_t *link_signalling_timer; - alarm_t *accept_signalling_timer; /* timer to monitor signalling when accepting */ - uint32_t sdp_a2dp_handle; /* SDP record handle for audio src */ - uint32_t sdp_a2dp_snk_handle; /* SDP record handle for audio snk */ - uint32_t sdp_vdp_handle; /* SDP record handle for video src */ - tBTA_AV_FEAT features; /* features mask */ - tBTA_SEC sec_mask; /* security mask */ - tBTA_AV_HNDL handle; /* the handle for SDP activity */ - bool disabling; /* true if api disabled called */ - uint8_t disc; /* (hdi+1) or (rc_handle|BTA_AV_CHNL_MSK) if p_disc_db is in use */ - uint8_t state; /* state machine state */ - uint8_t conn_rc; /* handle mask of connected RCP channels */ - uint8_t conn_audio; /* handle mask of connected audio channels */ - uint8_t conn_video; /* handle mask of connected video channels */ - uint8_t conn_lcb; /* index mask of used LCBs */ - uint8_t audio_open_cnt; /* number of connected audio channels */ - uint8_t reg_audio; /* handle mask of registered audio channels */ - uint8_t reg_video; /* handle mask of registered video channels */ - uint8_t rc_acp_handle; - uint8_t rc_acp_idx; /* (index + 1) to RCB */ - uint8_t rs_idx; /* (index + 1) to SCB for the one waiting for RS on open */ - bool sco_occupied; /* true if SCO is being used or call is in progress */ - uint8_t audio_streams; /* handle mask of streaming audio channels */ - uint8_t video_streams; /* handle mask of streaming video channels */ +typedef struct { + tBTA_AV_SCB* p_scb[BTA_AV_NUM_STRS]; /* stream control block */ + tSDP_DISCOVERY_DB* p_disc_db; /* pointer to discovery database */ + tBTA_AV_CBACK* p_cback; /* application callback function */ + tBTA_AV_RCB rcb[BTA_AV_NUM_RCB]; /* RCB control block */ + tBTA_AV_LCB lcb[BTA_AV_NUM_LINKS + 1]; /* link control block */ + alarm_t* link_signalling_timer; + alarm_t* + accept_signalling_timer; /* timer to monitor signalling when accepting */ + uint32_t sdp_a2dp_handle; /* SDP record handle for audio src */ + uint32_t sdp_a2dp_snk_handle; /* SDP record handle for audio snk */ + uint32_t sdp_vdp_handle; /* SDP record handle for video src */ + tBTA_AV_FEAT features; /* features mask */ + tBTA_SEC sec_mask; /* security mask */ + tBTA_AV_HNDL handle; /* the handle for SDP activity */ + bool disabling; /* true if api disabled called */ + uint8_t + disc; /* (hdi+1) or (rc_handle|BTA_AV_CHNL_MSK) if p_disc_db is in use */ + uint8_t state; /* state machine state */ + uint8_t conn_rc; /* handle mask of connected RCP channels */ + uint8_t conn_audio; /* handle mask of connected audio channels */ + uint8_t conn_video; /* handle mask of connected video channels */ + uint8_t conn_lcb; /* index mask of used LCBs */ + uint8_t audio_open_cnt; /* number of connected audio channels */ + uint8_t reg_audio; /* handle mask of registered audio channels */ + uint8_t reg_video; /* handle mask of registered video channels */ + uint8_t rc_acp_handle; + uint8_t rc_acp_idx; /* (index + 1) to RCB */ + uint8_t rs_idx; /* (index + 1) to SCB for the one waiting for RS on open */ + bool sco_occupied; /* true if SCO is being used or call is in progress */ + uint8_t audio_streams; /* handle mask of streaming audio channels */ + uint8_t video_streams; /* handle mask of streaming video channels */ } tBTA_AV_CB; - - /***************************************************************************** * Global data ****************************************************************************/ @@ -595,130 +571,133 @@ typedef struct extern tBTA_AV_CB bta_av_cb; /* config struct */ -extern tBTA_AV_CFG *p_bta_av_cfg; +extern tBTA_AV_CFG* p_bta_av_cfg; extern const tBTA_AV_CFG bta_avk_cfg; extern const tBTA_AV_CFG bta_av_cfg; /* rc id config struct */ -extern uint16_t *p_bta_av_rc_id; -extern uint16_t *p_bta_av_rc_id_ac; +extern uint16_t* p_bta_av_rc_id; +extern uint16_t* p_bta_av_rc_id_ac; extern const tBTA_AV_SACT bta_av_a2dp_action[]; extern const tBTA_AV_CO_FUNCTS bta_av_a2dp_cos; -extern tAVDT_CTRL_CBACK * const bta_av_dt_cback[]; -extern void bta_av_sink_data_cback(uint8_t handle, BT_HDR *p_pkt, +extern tAVDT_CTRL_CBACK* const bta_av_dt_cback[]; +extern void bta_av_sink_data_cback(uint8_t handle, BT_HDR* p_pkt, uint32_t time_stamp, uint8_t m_pt); /***************************************************************************** * Function prototypes ****************************************************************************/ /* utility functions */ -extern tBTA_AV_SCB *bta_av_hndl_to_scb(uint16_t handle); -extern bool bta_av_chk_start(tBTA_AV_SCB *p_scb); -extern void bta_av_restore_switch (void); -extern uint16_t bta_av_chk_mtu(tBTA_AV_SCB *p_scb, uint16_t mtu); -extern void bta_av_conn_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, tAVDT_CTRL *p_data); -extern uint8_t bta_av_rc_create(tBTA_AV_CB *p_cb, uint8_t role, uint8_t shdl, uint8_t lidx); -extern void bta_av_stream_chg(tBTA_AV_SCB *p_scb, bool started); -extern bool bta_av_is_scb_opening (tBTA_AV_SCB *p_scb); -extern bool bta_av_is_scb_incoming (tBTA_AV_SCB *p_scb); -extern void bta_av_set_scb_sst_init (tBTA_AV_SCB *p_scb); -extern bool bta_av_is_scb_init (tBTA_AV_SCB *p_scb); -extern void bta_av_set_scb_sst_incoming (tBTA_AV_SCB *p_scb); -extern tBTA_AV_LCB * bta_av_find_lcb(BD_ADDR addr, uint8_t op); - +extern tBTA_AV_SCB* bta_av_hndl_to_scb(uint16_t handle); +extern bool bta_av_chk_start(tBTA_AV_SCB* p_scb); +extern void bta_av_restore_switch(void); +extern uint16_t bta_av_chk_mtu(tBTA_AV_SCB* p_scb, uint16_t mtu); +extern void bta_av_conn_cback(uint8_t handle, BD_ADDR bd_addr, uint8_t event, + tAVDT_CTRL* p_data); +extern uint8_t bta_av_rc_create(tBTA_AV_CB* p_cb, uint8_t role, uint8_t shdl, + uint8_t lidx); +extern void bta_av_stream_chg(tBTA_AV_SCB* p_scb, bool started); +extern bool bta_av_is_scb_opening(tBTA_AV_SCB* p_scb); +extern bool bta_av_is_scb_incoming(tBTA_AV_SCB* p_scb); +extern void bta_av_set_scb_sst_init(tBTA_AV_SCB* p_scb); +extern bool bta_av_is_scb_init(tBTA_AV_SCB* p_scb); +extern void bta_av_set_scb_sst_incoming(tBTA_AV_SCB* p_scb); +extern tBTA_AV_LCB* bta_av_find_lcb(BD_ADDR addr, uint8_t op); /* main functions */ -extern void bta_av_api_deregister(tBTA_AV_DATA *p_data); -extern void bta_av_dup_audio_buf(tBTA_AV_SCB *p_scb, BT_HDR *p_buf); -extern void bta_av_sm_execute(tBTA_AV_CB *p_cb, uint16_t event, tBTA_AV_DATA *p_data); -extern void bta_av_ssm_execute(tBTA_AV_SCB *p_scb, uint16_t event, tBTA_AV_DATA *p_data); -extern bool bta_av_hdl_event(BT_HDR *p_msg); +extern void bta_av_api_deregister(tBTA_AV_DATA* p_data); +extern void bta_av_dup_audio_buf(tBTA_AV_SCB* p_scb, BT_HDR* p_buf); +extern void bta_av_sm_execute(tBTA_AV_CB* p_cb, uint16_t event, + tBTA_AV_DATA* p_data); +extern void bta_av_ssm_execute(tBTA_AV_SCB* p_scb, uint16_t event, + tBTA_AV_DATA* p_data); +extern bool bta_av_hdl_event(BT_HDR* p_msg); #if (BTA_AV_DEBUG == TRUE) -extern const char *bta_av_evt_code(uint16_t evt_code); +extern const char* bta_av_evt_code(uint16_t evt_code); #endif -extern bool bta_av_switch_if_needed(tBTA_AV_SCB *p_scb); -extern bool bta_av_link_role_ok(tBTA_AV_SCB *p_scb, uint8_t bits); -extern bool bta_av_is_rcfg_sst(tBTA_AV_SCB *p_scb); +extern bool bta_av_switch_if_needed(tBTA_AV_SCB* p_scb); +extern bool bta_av_link_role_ok(tBTA_AV_SCB* p_scb, uint8_t bits); +extern bool bta_av_is_rcfg_sst(tBTA_AV_SCB* p_scb); /* nsm action functions */ -extern void bta_av_api_disconnect(tBTA_AV_DATA *p_data); -extern void bta_av_sig_chg(tBTA_AV_DATA *p_data); -extern void bta_av_signalling_timer(tBTA_AV_DATA *p_data); -extern void bta_av_rc_disc_done(tBTA_AV_DATA *p_data); -extern void bta_av_rc_closed(tBTA_AV_DATA *p_data); -extern void bta_av_rc_browse_opened(tBTA_AV_DATA *p_data); -extern void bta_av_rc_browse_closed(tBTA_AV_DATA *p_data); +extern void bta_av_api_disconnect(tBTA_AV_DATA* p_data); +extern void bta_av_sig_chg(tBTA_AV_DATA* p_data); +extern void bta_av_signalling_timer(tBTA_AV_DATA* p_data); +extern void bta_av_rc_disc_done(tBTA_AV_DATA* p_data); +extern void bta_av_rc_closed(tBTA_AV_DATA* p_data); +extern void bta_av_rc_browse_opened(tBTA_AV_DATA* p_data); +extern void bta_av_rc_browse_closed(tBTA_AV_DATA* p_data); extern void bta_av_rc_disc(uint8_t disc); -extern void bta_av_conn_chg(tBTA_AV_DATA *p_data); -extern void bta_av_dereg_comp(tBTA_AV_DATA *p_data); +extern void bta_av_conn_chg(tBTA_AV_DATA* p_data); +extern void bta_av_dereg_comp(tBTA_AV_DATA* p_data); /* sm action functions */ -extern void bta_av_disable (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_opened (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_remote_cmd (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_vendor_cmd (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_vendor_rsp (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_msg (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_close (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_meta_rsp (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_free_rsp (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); -extern void bta_av_rc_free_browse_msg (tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); - -extern tBTA_AV_RCB * bta_av_get_rcb_by_shdl(uint8_t shdl); -extern void bta_av_del_rc(tBTA_AV_RCB *p_rcb); +extern void bta_av_disable(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_opened(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_remote_cmd(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_vendor_cmd(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_vendor_rsp(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_msg(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_close(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_meta_rsp(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_free_rsp(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); +extern void bta_av_rc_free_browse_msg(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); + +extern tBTA_AV_RCB* bta_av_get_rcb_by_shdl(uint8_t shdl); +extern void bta_av_del_rc(tBTA_AV_RCB* p_rcb); /* ssm action functions */ -extern void bta_av_do_disc_a2dp(tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_cleanup (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_free_sdb (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_config_ind (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_disconnect_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_security_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_security_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_setconfig_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_str_opened (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_security_ind (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_security_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_do_close (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_connect_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_sdp_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_disc_results (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_disc_res_as_acp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_open_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_getcap_results (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_setconfig_rej (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_discover_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_conn_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_do_start (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_str_stopped (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_reconfig (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_data_path (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_start_ok (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_start_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_str_closed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_clr_cong (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_suspend_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_rcfg_str_ok (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_rcfg_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_rcfg_connect (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_rcfg_discntd (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_suspend_cont (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_rcfg_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_rcfg_open (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_security_rej (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_open_rc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_chk_2nd_start (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_save_caps (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_rej_conn (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_rej_conn (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_set_use_rc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_cco_close (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_switch_role (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_role_res (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_delay_co (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_open_at_inc (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_offload_req (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); -extern void bta_av_offload_rsp (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data); +extern void bta_av_do_disc_a2dp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_cleanup(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_free_sdb(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_config_ind(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_disconnect_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_security_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_security_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_setconfig_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_str_opened(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_security_ind(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_security_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_do_close(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_connect_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_sdp_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_disc_results(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_disc_res_as_acp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_open_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_getcap_results(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_setconfig_rej(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_discover_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_conn_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_do_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_str_stopped(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_reconfig(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_data_path(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_start_ok(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_start_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_str_closed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_clr_cong(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_suspend_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_rcfg_str_ok(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_rcfg_failed(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_rcfg_connect(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_rcfg_discntd(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_suspend_cont(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_rcfg_cfm(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_rcfg_open(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_security_rej(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_open_rc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_chk_2nd_start(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_save_caps(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_rej_conn(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_rej_conn(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_set_use_rc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_cco_close(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_switch_role(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_role_res(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_delay_co(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_open_at_inc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_offload_req(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); +extern void bta_av_offload_rsp(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data); #endif /* BTA_AV_INT_H */ diff --git a/system/bta/av/bta_av_main.cc b/system/bta/av/bta_av_main.cc index 017511e2bee..5d9745ae50b 100644 --- a/system/bta/av/bta_av_main.cc +++ b/system/bta/av/bta_av_main.cc @@ -47,54 +47,48 @@ ****************************************************************************/ #ifndef BTA_AV_RET_TOUT -#define BTA_AV_RET_TOUT 4 +#define BTA_AV_RET_TOUT 4 #endif #ifndef BTA_AV_SIG_TOUT -#define BTA_AV_SIG_TOUT 4 +#define BTA_AV_SIG_TOUT 4 #endif #ifndef BTA_AV_IDLE_TOUT -#define BTA_AV_IDLE_TOUT 10 +#define BTA_AV_IDLE_TOUT 10 #endif /* the delay time in milliseconds to retry role switch */ #ifndef BTA_AV_RS_TIME_VAL -#define BTA_AV_RS_TIME_VAL 1000 +#define BTA_AV_RS_TIME_VAL 1000 #endif /* state machine states */ -enum -{ - BTA_AV_INIT_ST, - BTA_AV_OPEN_ST -}; +enum { BTA_AV_INIT_ST, BTA_AV_OPEN_ST }; /* state machine action enumeration list */ -enum -{ - BTA_AV_DISABLE, - BTA_AV_RC_OPENED, - BTA_AV_RC_REMOTE_CMD, - BTA_AV_RC_VENDOR_CMD, - BTA_AV_RC_VENDOR_RSP, - BTA_AV_RC_FREE_RSP, - BTA_AV_RC_FREE_BROWSE_MSG, - BTA_AV_RC_META_RSP, - BTA_AV_RC_MSG, - BTA_AV_RC_CLOSE, - BTA_AV_RC_BROWSE_CLOSE, - BTA_AV_NUM_ACTIONS +enum { + BTA_AV_DISABLE, + BTA_AV_RC_OPENED, + BTA_AV_RC_REMOTE_CMD, + BTA_AV_RC_VENDOR_CMD, + BTA_AV_RC_VENDOR_RSP, + BTA_AV_RC_FREE_RSP, + BTA_AV_RC_FREE_BROWSE_MSG, + BTA_AV_RC_META_RSP, + BTA_AV_RC_MSG, + BTA_AV_RC_CLOSE, + BTA_AV_RC_BROWSE_CLOSE, + BTA_AV_NUM_ACTIONS }; -#define BTA_AV_IGNORE BTA_AV_NUM_ACTIONS +#define BTA_AV_IGNORE BTA_AV_NUM_ACTIONS /* type for action functions */ -typedef void (*tBTA_AV_ACTION)(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data); +typedef void (*tBTA_AV_ACTION)(tBTA_AV_CB* p_cb, tBTA_AV_DATA* p_data); /* action functions */ -const tBTA_AV_ACTION bta_av_action[] = -{ +const tBTA_AV_ACTION bta_av_action[] = { bta_av_disable, bta_av_rc_opened, bta_av_rc_remote_cmd, @@ -108,85 +102,78 @@ const tBTA_AV_ACTION bta_av_action[] = }; /* state table information */ -#define BTA_AV_ACTION_COL 0 /* position of actions */ -#define BTA_AV_NEXT_STATE 1 /* position of next state */ -#define BTA_AV_NUM_COLS 2 /* number of columns in state tables */ +#define BTA_AV_ACTION_COL 0 /* position of actions */ +#define BTA_AV_NEXT_STATE 1 /* position of next state */ +#define BTA_AV_NUM_COLS 2 /* number of columns in state tables */ /* state table for init state */ -static const uint8_t bta_av_st_init[][BTA_AV_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* API_DISABLE_EVT */ {BTA_AV_DISABLE, BTA_AV_INIT_ST }, -/* API_REMOTE_CMD_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST }, -/* API_VENDOR_CMD_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST }, -/* API_VENDOR_RSP_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST }, -/* API_META_RSP_EVT */ {BTA_AV_RC_FREE_RSP, BTA_AV_INIT_ST }, -/* API_RC_CLOSE_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST }, -/* AVRC_OPEN_EVT */ {BTA_AV_RC_OPENED, BTA_AV_OPEN_ST }, -/* AVRC_MSG_EVT */ {BTA_AV_RC_FREE_BROWSE_MSG, BTA_AV_INIT_ST }, -/* AVRC_NONE_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST }, +static const uint8_t bta_av_st_init[][BTA_AV_NUM_COLS] = { + /* Event Action 1 Next state */ + /* API_DISABLE_EVT */ {BTA_AV_DISABLE, BTA_AV_INIT_ST}, + /* API_REMOTE_CMD_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST}, + /* API_VENDOR_CMD_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST}, + /* API_VENDOR_RSP_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST}, + /* API_META_RSP_EVT */ {BTA_AV_RC_FREE_RSP, BTA_AV_INIT_ST}, + /* API_RC_CLOSE_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST}, + /* AVRC_OPEN_EVT */ {BTA_AV_RC_OPENED, BTA_AV_OPEN_ST}, + /* AVRC_MSG_EVT */ {BTA_AV_RC_FREE_BROWSE_MSG, BTA_AV_INIT_ST}, + /* AVRC_NONE_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST}, }; /* state table for open state */ -static const uint8_t bta_av_st_open[][BTA_AV_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* API_DISABLE_EVT */ {BTA_AV_DISABLE, BTA_AV_INIT_ST }, -/* API_REMOTE_CMD_EVT */ {BTA_AV_RC_REMOTE_CMD, BTA_AV_OPEN_ST }, -/* API_VENDOR_CMD_EVT */ {BTA_AV_RC_VENDOR_CMD, BTA_AV_OPEN_ST }, -/* API_VENDOR_RSP_EVT */ {BTA_AV_RC_VENDOR_RSP, BTA_AV_OPEN_ST }, -/* API_META_RSP_EVT */ {BTA_AV_RC_META_RSP, BTA_AV_OPEN_ST }, -/* API_RC_CLOSE_EVT */ {BTA_AV_RC_CLOSE, BTA_AV_OPEN_ST }, -/* AVRC_OPEN_EVT */ {BTA_AV_RC_OPENED, BTA_AV_OPEN_ST }, -/* AVRC_MSG_EVT */ {BTA_AV_RC_MSG, BTA_AV_OPEN_ST }, -/* AVRC_NONE_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST }, +static const uint8_t bta_av_st_open[][BTA_AV_NUM_COLS] = { + /* Event Action 1 Next state */ + /* API_DISABLE_EVT */ {BTA_AV_DISABLE, BTA_AV_INIT_ST}, + /* API_REMOTE_CMD_EVT */ {BTA_AV_RC_REMOTE_CMD, BTA_AV_OPEN_ST}, + /* API_VENDOR_CMD_EVT */ {BTA_AV_RC_VENDOR_CMD, BTA_AV_OPEN_ST}, + /* API_VENDOR_RSP_EVT */ {BTA_AV_RC_VENDOR_RSP, BTA_AV_OPEN_ST}, + /* API_META_RSP_EVT */ {BTA_AV_RC_META_RSP, BTA_AV_OPEN_ST}, + /* API_RC_CLOSE_EVT */ {BTA_AV_RC_CLOSE, BTA_AV_OPEN_ST}, + /* AVRC_OPEN_EVT */ {BTA_AV_RC_OPENED, BTA_AV_OPEN_ST}, + /* AVRC_MSG_EVT */ {BTA_AV_RC_MSG, BTA_AV_OPEN_ST}, + /* AVRC_NONE_EVT */ {BTA_AV_IGNORE, BTA_AV_INIT_ST}, }; /* type for state table */ typedef const uint8_t (*tBTA_AV_ST_TBL)[BTA_AV_NUM_COLS]; /* state table */ -static const tBTA_AV_ST_TBL bta_av_st_tbl[] = -{ - bta_av_st_init, - bta_av_st_open -}; +static const tBTA_AV_ST_TBL bta_av_st_tbl[] = {bta_av_st_init, bta_av_st_open}; -typedef void (*tBTA_AV_NSM_ACT)(tBTA_AV_DATA *p_data); -static void bta_av_api_enable(tBTA_AV_DATA *p_data); -static void bta_av_api_register(tBTA_AV_DATA *p_data); -static void bta_av_ci_data(tBTA_AV_DATA *p_data); +typedef void (*tBTA_AV_NSM_ACT)(tBTA_AV_DATA* p_data); +static void bta_av_api_enable(tBTA_AV_DATA* p_data); +static void bta_av_api_register(tBTA_AV_DATA* p_data); +static void bta_av_ci_data(tBTA_AV_DATA* p_data); #if (AVDT_REPORTING == TRUE) -static void bta_av_rpc_conn(tBTA_AV_DATA *p_data); +static void bta_av_rpc_conn(tBTA_AV_DATA* p_data); #endif -static void bta_av_api_to_ssm(tBTA_AV_DATA *p_data); +static void bta_av_api_to_ssm(tBTA_AV_DATA* p_data); static void bta_av_sco_chg_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app_id, BD_ADDR peer_addr); -static void bta_av_sys_rs_cback (tBTA_SYS_CONN_STATUS status,uint8_t id, - uint8_t app_id, BD_ADDR peer_addr); +static void bta_av_sys_rs_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr); /* action functions */ -const tBTA_AV_NSM_ACT bta_av_nsm_act[] = -{ - bta_av_api_enable, /* BTA_AV_API_ENABLE_EVT */ - bta_av_api_register, /* BTA_AV_API_REGISTER_EVT */ - bta_av_api_deregister, /* BTA_AV_API_DEREGISTER_EVT */ - bta_av_api_disconnect, /* BTA_AV_API_DISCONNECT_EVT */ - bta_av_ci_data, /* BTA_AV_CI_SRC_DATA_READY_EVT */ - bta_av_sig_chg, /* BTA_AV_SIG_CHG_EVT */ +const tBTA_AV_NSM_ACT bta_av_nsm_act[] = { + bta_av_api_enable, /* BTA_AV_API_ENABLE_EVT */ + bta_av_api_register, /* BTA_AV_API_REGISTER_EVT */ + bta_av_api_deregister, /* BTA_AV_API_DEREGISTER_EVT */ + bta_av_api_disconnect, /* BTA_AV_API_DISCONNECT_EVT */ + bta_av_ci_data, /* BTA_AV_CI_SRC_DATA_READY_EVT */ + bta_av_sig_chg, /* BTA_AV_SIG_CHG_EVT */ bta_av_signalling_timer, /* BTA_AV_SIGNALLING_TIMER_EVT */ - bta_av_rc_disc_done, /* BTA_AV_SDP_AVRC_DISC_EVT */ - bta_av_rc_closed, /* BTA_AV_AVRC_CLOSE_EVT */ - bta_av_rc_browse_opened,/* BTA_AV_AVRC_BROWSE_OPEN_EVT */ - bta_av_rc_browse_closed,/* BTA_AV_AVRC_BROWSE_CLOSE_EVT */ - bta_av_conn_chg, /* BTA_AV_CONN_CHG_EVT */ - bta_av_dereg_comp, /* BTA_AV_DEREG_COMP_EVT */ + bta_av_rc_disc_done, /* BTA_AV_SDP_AVRC_DISC_EVT */ + bta_av_rc_closed, /* BTA_AV_AVRC_CLOSE_EVT */ + bta_av_rc_browse_opened, /* BTA_AV_AVRC_BROWSE_OPEN_EVT */ + bta_av_rc_browse_closed, /* BTA_AV_AVRC_BROWSE_CLOSE_EVT */ + bta_av_conn_chg, /* BTA_AV_CONN_CHG_EVT */ + bta_av_dereg_comp, /* BTA_AV_DEREG_COMP_EVT */ #if (AVDT_REPORTING == TRUE) - bta_av_rpc_conn, /* BTA_AV_AVDT_RPT_CONN_EVT */ + bta_av_rpc_conn, /* BTA_AV_AVDT_RPT_CONN_EVT */ #endif - bta_av_api_to_ssm, /* BTA_AV_API_START_EVT */ - bta_av_api_to_ssm, /* BTA_AV_API_STOP_EVT */ + bta_av_api_to_ssm, /* BTA_AV_API_START_EVT */ + bta_av_api_to_ssm, /* BTA_AV_API_STOP_EVT */ }; /***************************************************************************** @@ -194,10 +181,10 @@ const tBTA_AV_NSM_ACT bta_av_nsm_act[] = ****************************************************************************/ /* AV control block */ -tBTA_AV_CB bta_av_cb; +tBTA_AV_CB bta_av_cb; #if (BTA_AV_DEBUG == TRUE) -static const char *bta_av_st_code(uint8_t state); +static const char* bta_av_st_code(uint8_t state); #endif /******************************************************************************* @@ -210,40 +197,38 @@ static const char *bta_av_st_code(uint8_t state); * Returns void * ******************************************************************************/ -static void bta_av_api_enable(tBTA_AV_DATA *p_data) -{ - /* initialize control block */ - memset(&bta_av_cb, 0, sizeof(tBTA_AV_CB)); - - for (int i = 0; i < BTA_AV_NUM_RCB; i++) - bta_av_cb.rcb[i].handle = BTA_AV_RC_HANDLE_NONE; - - bta_av_cb.rc_acp_handle = BTA_AV_RC_HANDLE_NONE; - - /* - * TODO: The "disable" event handling is missing - there we need - * to alarm_free() the alarms below. - */ - bta_av_cb.link_signalling_timer = alarm_new("bta_av.link_signalling_timer"); - bta_av_cb.accept_signalling_timer = - alarm_new("bta_av.accept_signalling_timer"); - - /* store parameters */ - bta_av_cb.p_cback = p_data->api_enable.p_cback; - bta_av_cb.features = p_data->api_enable.features; - bta_av_cb.sec_mask = p_data->api_enable.sec_mask; - - tBTA_AV_ENABLE enable; - enable.features = bta_av_cb.features; - - /* Register for SCO change event */ - if (!(bta_av_cb.features & BTA_AV_FEAT_NO_SCO_SSPD)) - { - bta_sys_sco_register(bta_av_sco_chg_cback); - } - - /* call callback with enable event */ - (*bta_av_cb.p_cback)(BTA_AV_ENABLE_EVT, (tBTA_AV *)&enable); +static void bta_av_api_enable(tBTA_AV_DATA* p_data) { + /* initialize control block */ + memset(&bta_av_cb, 0, sizeof(tBTA_AV_CB)); + + for (int i = 0; i < BTA_AV_NUM_RCB; i++) + bta_av_cb.rcb[i].handle = BTA_AV_RC_HANDLE_NONE; + + bta_av_cb.rc_acp_handle = BTA_AV_RC_HANDLE_NONE; + + /* + * TODO: The "disable" event handling is missing - there we need + * to alarm_free() the alarms below. + */ + bta_av_cb.link_signalling_timer = alarm_new("bta_av.link_signalling_timer"); + bta_av_cb.accept_signalling_timer = + alarm_new("bta_av.accept_signalling_timer"); + + /* store parameters */ + bta_av_cb.p_cback = p_data->api_enable.p_cback; + bta_av_cb.features = p_data->api_enable.features; + bta_av_cb.sec_mask = p_data->api_enable.sec_mask; + + tBTA_AV_ENABLE enable; + enable.features = bta_av_cb.features; + + /* Register for SCO change event */ + if (!(bta_av_cb.features & BTA_AV_FEAT_NO_SCO_SSPD)) { + bta_sys_sco_register(bta_av_sco_chg_cback); + } + + /* call callback with enable event */ + (*bta_av_cb.p_cback)(BTA_AV_ENABLE_EVT, (tBTA_AV*)&enable); } /******************************************************************************* @@ -255,23 +240,19 @@ static void bta_av_api_enable(tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -static tBTA_AV_SCB * bta_av_addr_to_scb(BD_ADDR bd_addr) -{ - tBTA_AV_SCB * p_scb = NULL; - int xx; - - for(xx=0; xxpeer_addr)) - { - p_scb = bta_av_cb.p_scb[xx]; - break; - } - } +static tBTA_AV_SCB* bta_av_addr_to_scb(BD_ADDR bd_addr) { + tBTA_AV_SCB* p_scb = NULL; + int xx; + + for (xx = 0; xx < BTA_AV_NUM_STRS; xx++) { + if (bta_av_cb.p_scb[xx]) { + if (!bdcmp(bd_addr, bta_av_cb.p_scb[xx]->peer_addr)) { + p_scb = bta_av_cb.p_scb[xx]; + break; + } } - return p_scb; + } + return p_scb; } /******************************************************************************* @@ -283,17 +264,15 @@ static tBTA_AV_SCB * bta_av_addr_to_scb(BD_ADDR bd_addr) * Returns void * ******************************************************************************/ -tBTA_AV_SCB * bta_av_hndl_to_scb(uint16_t handle) -{ - tBTA_AV_HNDL hndl = (tBTA_AV_HNDL)handle; - tBTA_AV_SCB * p_scb = NULL; - uint8_t idx = (hndl & BTA_AV_HNDL_MSK); - - if(idx && (idx <= BTA_AV_NUM_STRS) ) - { - p_scb = bta_av_cb.p_scb[idx-1]; - } - return p_scb; +tBTA_AV_SCB* bta_av_hndl_to_scb(uint16_t handle) { + tBTA_AV_HNDL hndl = (tBTA_AV_HNDL)handle; + tBTA_AV_SCB* p_scb = NULL; + uint8_t idx = (hndl & BTA_AV_HNDL_MSK); + + if (idx && (idx <= BTA_AV_NUM_STRS)) { + p_scb = bta_av_cb.p_scb[idx - 1]; + } + return p_scb; } /******************************************************************************* @@ -307,99 +286,84 @@ tBTA_AV_SCB * bta_av_hndl_to_scb(uint16_t handle) * Returns void * ******************************************************************************/ -static tBTA_AV_SCB * bta_av_alloc_scb(tBTA_AV_CHNL chnl) -{ - tBTA_AV_SCB *p_ret = NULL; - int xx; - tBTA_AV_STATUS sts = BTA_AV_SUCCESS; - - if(chnl == BTA_AV_CHNL_VIDEO) - { - if(p_bta_av_cfg->p_act_tbl == NULL || p_bta_av_cfg->p_reg == NULL) - { - APPL_TRACE_ERROR("Video streaming not supported"); - sts = BTA_AV_FAIL; - } - else - { - /* allow only one Video channel */ - if(bta_av_cb.reg_video) - { - APPL_TRACE_ERROR("Already registered"); - sts = BTA_AV_FAIL; - } - } - } - else if(chnl != BTA_AV_CHNL_AUDIO) - { - APPL_TRACE_ERROR("bad channel: %d", chnl); +static tBTA_AV_SCB* bta_av_alloc_scb(tBTA_AV_CHNL chnl) { + tBTA_AV_SCB* p_ret = NULL; + int xx; + tBTA_AV_STATUS sts = BTA_AV_SUCCESS; + + if (chnl == BTA_AV_CHNL_VIDEO) { + if (p_bta_av_cfg->p_act_tbl == NULL || p_bta_av_cfg->p_reg == NULL) { + APPL_TRACE_ERROR("Video streaming not supported"); + sts = BTA_AV_FAIL; + } else { + /* allow only one Video channel */ + if (bta_av_cb.reg_video) { + APPL_TRACE_ERROR("Already registered"); sts = BTA_AV_FAIL; + } } - - if(sts == BTA_AV_SUCCESS) - { - for(xx=0; xxrc_handle = BTA_AV_RC_HANDLE_NONE; - p_ret->chnl = chnl; - p_ret->hndl = (tBTA_AV_HNDL)((xx + 1) | chnl); - p_ret->hdi = xx; - p_ret->a2dp_list = list_new(NULL); - p_ret->avrc_ct_timer = alarm_new("bta_av.avrc_ct_timer"); - bta_av_cb.p_scb[xx] = p_ret; - break; - } - } + } else if (chnl != BTA_AV_CHNL_AUDIO) { + APPL_TRACE_ERROR("bad channel: %d", chnl); + sts = BTA_AV_FAIL; + } + + if (sts == BTA_AV_SUCCESS) { + for (xx = 0; xx < BTA_AV_NUM_STRS; xx++) { + if (bta_av_cb.p_scb[xx] == NULL) { + /* found an empty spot */ + p_ret = (tBTA_AV_SCB*)osi_calloc(sizeof(tBTA_AV_SCB)); + p_ret->rc_handle = BTA_AV_RC_HANDLE_NONE; + p_ret->chnl = chnl; + p_ret->hndl = (tBTA_AV_HNDL)((xx + 1) | chnl); + p_ret->hdi = xx; + p_ret->a2dp_list = list_new(NULL); + p_ret->avrc_ct_timer = alarm_new("bta_av.avrc_ct_timer"); + bta_av_cb.p_scb[xx] = p_ret; + break; + } } - return p_ret; + } + return p_ret; } /******************************************************************************* ******************************************************************************/ void bta_av_conn_cback(UNUSED_ATTR uint8_t handle, BD_ADDR bd_addr, - uint8_t event, tAVDT_CTRL *p_data) -{ - uint16_t evt = 0; - tBTA_AV_SCB *p_scb = NULL; + uint8_t event, tAVDT_CTRL* p_data) { + uint16_t evt = 0; + tBTA_AV_SCB* p_scb = NULL; #if (BTA_AR_INCLUDED == TRUE) - if (event == BTA_AR_AVDT_CONN_EVT || - event == AVDT_CONNECT_IND_EVT || event == AVDT_DISCONNECT_IND_EVT) + if (event == BTA_AR_AVDT_CONN_EVT || event == AVDT_CONNECT_IND_EVT || + event == AVDT_DISCONNECT_IND_EVT) #else - if (event == AVDT_CONNECT_IND_EVT || event == AVDT_DISCONNECT_IND_EVT) + if (event == AVDT_CONNECT_IND_EVT || event == AVDT_DISCONNECT_IND_EVT) #endif - { - evt = BTA_AV_SIG_CHG_EVT; - if(AVDT_DISCONNECT_IND_EVT == event) - p_scb = bta_av_addr_to_scb(bd_addr); + { + evt = BTA_AV_SIG_CHG_EVT; + if (AVDT_DISCONNECT_IND_EVT == event) p_scb = bta_av_addr_to_scb(bd_addr); #if (BTA_AV_DEBUG == TRUE) - else if (AVDT_CONNECT_IND_EVT == event) - { - APPL_TRACE_DEBUG("CONN_IND is ACP:%d", p_data->hdr.err_param); - } + else if (AVDT_CONNECT_IND_EVT == event) { + APPL_TRACE_DEBUG("CONN_IND is ACP:%d", p_data->hdr.err_param); + } #endif - tBTA_AV_STR_MSG *p_msg = - (tBTA_AV_STR_MSG *)osi_malloc(sizeof(tBTA_AV_STR_MSG)); - p_msg->hdr.event = evt; - p_msg->hdr.layer_specific = event; - p_msg->hdr.offset = p_data->hdr.err_param; - bdcpy(p_msg->bd_addr, bd_addr); + tBTA_AV_STR_MSG* p_msg = + (tBTA_AV_STR_MSG*)osi_malloc(sizeof(tBTA_AV_STR_MSG)); + p_msg->hdr.event = evt; + p_msg->hdr.layer_specific = event; + p_msg->hdr.offset = p_data->hdr.err_param; + bdcpy(p_msg->bd_addr, bd_addr); #if (BTA_AV_DEBUG == TRUE) - if(p_scb) { - APPL_TRACE_DEBUG("scb hndl x%x, role x%x", p_scb->hndl, p_scb->role); - } -#endif - APPL_TRACE_DEBUG("conn_cback bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", - bd_addr[0], bd_addr[1], - bd_addr[2], bd_addr[3], - bd_addr[4], bd_addr[5]); - bta_sys_sendmsg(p_msg); + if (p_scb) { + APPL_TRACE_DEBUG("scb hndl x%x, role x%x", p_scb->hndl, p_scb->role); } +#endif + APPL_TRACE_DEBUG("conn_cback bd_addr:%02x-%02x-%02x-%02x-%02x-%02x", + bd_addr[0], bd_addr[1], bd_addr[2], bd_addr[3], bd_addr[4], + bd_addr[5]); + bta_sys_sendmsg(p_msg); + } } #if (AVDT_REPORTING == TRUE) @@ -412,11 +376,11 @@ void bta_av_conn_cback(UNUSED_ATTR uint8_t handle, BD_ADDR bd_addr, * Returns void * ******************************************************************************/ -static void bta_av_a2dp_report_cback(UNUSED_ATTR uint8_t handle, UNUSED_ATTR AVDT_REPORT_TYPE type, - UNUSED_ATTR tAVDT_REPORT_DATA *p_data) -{ - /* Do not need to handle report data for now. - * This empty function is here for conformance reasons. */ +static void bta_av_a2dp_report_cback(UNUSED_ATTR uint8_t handle, + UNUSED_ATTR AVDT_REPORT_TYPE type, + UNUSED_ATTR tAVDT_REPORT_DATA* p_data) { + /* Do not need to handle report data for now. + * This empty function is here for conformance reasons. */ } #endif @@ -431,281 +395,255 @@ static void bta_av_a2dp_report_cback(UNUSED_ATTR uint8_t handle, UNUSED_ATTR AVD * Returns void * ******************************************************************************/ -static void bta_av_api_register(tBTA_AV_DATA *p_data) -{ - tBTA_AV_REGISTER registr; - tBTA_AV_SCB *p_scb; /* stream control block */ - tAVDT_REG reg; - tAVDT_CS cs; - char *p_service_name; - tBTA_UTL_COD cod; - - memset(&cs,0,sizeof(tAVDT_CS)); - - registr.status = BTA_AV_FAIL_RESOURCES; - registr.app_id = p_data->api_reg.app_id; - registr.chnl = (tBTA_AV_CHNL)p_data->hdr.layer_specific; - - uint16_t profile_initialized = p_data->api_reg.service_uuid; - if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) - { - p_bta_av_cfg = (tBTA_AV_CFG *) &bta_avk_cfg; - } - else if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) - { - p_bta_av_cfg = (tBTA_AV_CFG *) &bta_av_cfg; +static void bta_av_api_register(tBTA_AV_DATA* p_data) { + tBTA_AV_REGISTER registr; + tBTA_AV_SCB* p_scb; /* stream control block */ + tAVDT_REG reg; + tAVDT_CS cs; + char* p_service_name; + tBTA_UTL_COD cod; + + memset(&cs, 0, sizeof(tAVDT_CS)); + + registr.status = BTA_AV_FAIL_RESOURCES; + registr.app_id = p_data->api_reg.app_id; + registr.chnl = (tBTA_AV_CHNL)p_data->hdr.layer_specific; + + uint16_t profile_initialized = p_data->api_reg.service_uuid; + if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) { + p_bta_av_cfg = (tBTA_AV_CFG*)&bta_avk_cfg; + } else if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) { + p_bta_av_cfg = (tBTA_AV_CFG*)&bta_av_cfg; + } + + APPL_TRACE_DEBUG("%s: profile: 0x%x", __func__, profile_initialized); + if (p_bta_av_cfg == NULL) { + APPL_TRACE_ERROR("AV configuration is null!"); + return; + } + + do { + p_scb = bta_av_alloc_scb(registr.chnl); + if (p_scb == NULL) { + APPL_TRACE_ERROR("failed to alloc SCB"); + break; } - APPL_TRACE_DEBUG("%s: profile: 0x%x", __func__, profile_initialized); - if (p_bta_av_cfg == NULL) - { - APPL_TRACE_ERROR("AV configuration is null!"); - return; - } - - do - { - p_scb = bta_av_alloc_scb(registr.chnl); - if (p_scb == NULL) - { - APPL_TRACE_ERROR("failed to alloc SCB"); - break; - } - - registr.hndl = p_scb->hndl; - p_scb->app_id = registr.app_id; + registr.hndl = p_scb->hndl; + p_scb->app_id = registr.app_id; - /* initialize the stream control block */ - registr.status = BTA_AV_SUCCESS; + /* initialize the stream control block */ + registr.status = BTA_AV_SUCCESS; - if ((bta_av_cb.reg_audio + bta_av_cb.reg_video) == 0) - { - /* the first channel registered. register to AVDTP */ - reg.ctrl_mtu = p_bta_av_cfg->sig_mtu; - reg.ret_tout = BTA_AV_RET_TOUT; - reg.sig_tout = BTA_AV_SIG_TOUT; - reg.idle_tout = BTA_AV_IDLE_TOUT; - reg.sec_mask = bta_av_cb.sec_mask; + if ((bta_av_cb.reg_audio + bta_av_cb.reg_video) == 0) { + /* the first channel registered. register to AVDTP */ + reg.ctrl_mtu = p_bta_av_cfg->sig_mtu; + reg.ret_tout = BTA_AV_RET_TOUT; + reg.sig_tout = BTA_AV_SIG_TOUT; + reg.idle_tout = BTA_AV_IDLE_TOUT; + reg.sec_mask = bta_av_cb.sec_mask; #if (BTA_AR_INCLUDED == TRUE) - bta_ar_reg_avdt(®, bta_av_conn_cback, BTA_ID_AV); + bta_ar_reg_avdt(®, bta_av_conn_cback, BTA_ID_AV); #endif - bta_sys_role_chg_register(&bta_av_sys_rs_cback); + bta_sys_role_chg_register(&bta_av_sys_rs_cback); - /* create remote control TG service if required */ - if (bta_av_cb.features & (BTA_AV_FEAT_RCTG)) - { - /* register with no authorization; let AVDTP use authorization instead */ + /* create remote control TG service if required */ + if (bta_av_cb.features & (BTA_AV_FEAT_RCTG)) { +/* register with no authorization; let AVDTP use authorization instead */ #if (BTA_AR_INCLUDED == TRUE) #if (BTA_AV_WITH_AVCTP_AUTHORIZATION == TRUE) - bta_ar_reg_avct(p_bta_av_cfg->avrc_mtu, p_bta_av_cfg->avrc_br_mtu, - bta_av_cb.sec_mask, BTA_ID_AV); + bta_ar_reg_avct(p_bta_av_cfg->avrc_mtu, p_bta_av_cfg->avrc_br_mtu, + bta_av_cb.sec_mask, BTA_ID_AV); #else - bta_ar_reg_avct(p_bta_av_cfg->avrc_mtu, p_bta_av_cfg->avrc_br_mtu, - (uint8_t)(bta_av_cb.sec_mask & (~BTA_SEC_AUTHORIZE)), BTA_ID_AV); + bta_ar_reg_avct(p_bta_av_cfg->avrc_mtu, p_bta_av_cfg->avrc_br_mtu, + (uint8_t)(bta_av_cb.sec_mask & (~BTA_SEC_AUTHORIZE)), + BTA_ID_AV); #endif - /* Both Audio Source and Audio Sink support AVRCP 1.6 for the - * major roles (i.e. Audio Source -> TG 1.6 and vice versa). For - * Audio Sink role we support additional TG 1.3 to support - * absolute volume. Here we only do TG registration. - */ - uint16_t profile_version = AVRC_REV_1_0; - if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) - { - profile_version = AVRC_REV_1_6; - } - else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) - { - // Initialize AVRCP1.4 to provide Absolute Volume control. - profile_version = AVRC_REV_1_4; - } - bta_ar_reg_avrc(UUID_SERVCLASS_AV_REM_CTRL_TARGET, "AV Remote Control Target", - NULL, p_bta_av_cfg->avrc_tg_cat, BTA_ID_AV, - (bta_av_cb.features & BTA_AV_FEAT_BROWSE), profile_version); -#endif - } - - /* Set the Capturing service class bit */ - if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) - cod.service = BTM_COD_SERVICE_CAPTURING; - else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) - cod.service = BTM_COD_SERVICE_RENDERING; - utl_set_device_class(&cod, BTA_UTL_SET_COD_SERVICE_CLASS); - } /* if 1st channel */ - - /* get stream configuration and create stream */ - cs.cfg.num_codec = 1; - cs.nsc_mask = AVDT_NSC_RECONFIG | - ((bta_av_cb.features & BTA_AV_FEAT_PROTECT) ? 0 : AVDT_NSC_SECURITY); - APPL_TRACE_DEBUG("nsc_mask: 0x%x", cs.nsc_mask); - - if (p_data->api_reg.p_service_name[0] == 0) - { - p_service_name = NULL; - } - else - { - p_service_name = p_data->api_reg.p_service_name; + /* Both Audio Source and Audio Sink support AVRCP 1.6 for the + * major roles (i.e. Audio Source -> TG 1.6 and vice versa). For + * Audio Sink role we support additional TG 1.3 to support + * absolute volume. Here we only do TG registration. + */ + uint16_t profile_version = AVRC_REV_1_0; + if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) { + profile_version = AVRC_REV_1_6; + } else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) { + // Initialize AVRCP1.4 to provide Absolute Volume control. + profile_version = AVRC_REV_1_4; } + bta_ar_reg_avrc( + UUID_SERVCLASS_AV_REM_CTRL_TARGET, "AV Remote Control Target", NULL, + p_bta_av_cfg->avrc_tg_cat, BTA_ID_AV, + (bta_av_cb.features & BTA_AV_FEAT_BROWSE), profile_version); +#endif + } + + /* Set the Capturing service class bit */ + if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) + cod.service = BTM_COD_SERVICE_CAPTURING; + else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) + cod.service = BTM_COD_SERVICE_RENDERING; + utl_set_device_class(&cod, BTA_UTL_SET_COD_SERVICE_CLASS); + } /* if 1st channel */ + + /* get stream configuration and create stream */ + cs.cfg.num_codec = 1; + cs.nsc_mask = + AVDT_NSC_RECONFIG | + ((bta_av_cb.features & BTA_AV_FEAT_PROTECT) ? 0 : AVDT_NSC_SECURITY); + APPL_TRACE_DEBUG("nsc_mask: 0x%x", cs.nsc_mask); + + if (p_data->api_reg.p_service_name[0] == 0) { + p_service_name = NULL; + } else { + p_service_name = p_data->api_reg.p_service_name; + } - p_scb->suspend_sup = true; - p_scb->recfg_sup = true; - p_scb->skip_sdp = false; - - cs.p_ctrl_cback = bta_av_dt_cback[p_scb->hdi]; - if(registr.chnl == BTA_AV_CHNL_AUDIO) - { - /* set up the audio stream control block */ - p_scb->p_act_tbl = (const tBTA_AV_ACT *)bta_av_a2dp_action; - p_scb->p_cos = &bta_av_a2dp_cos; - p_scb->media_type= AVDT_MEDIA_TYPE_AUDIO; - cs.cfg.psc_mask = AVDT_PSC_TRANS; - cs.media_type = AVDT_MEDIA_TYPE_AUDIO; - cs.mtu = p_bta_av_cfg->audio_mtu; - cs.flush_to = L2CAP_DEFAULT_FLUSH_TO; - tA2DP_CODEC_SEP_INDEX codec_sep_index_min = - A2DP_CODEC_SEP_INDEX_SOURCE_MIN; - tA2DP_CODEC_SEP_INDEX codec_sep_index_max = - A2DP_CODEC_SEP_INDEX_SOURCE_MAX; + p_scb->suspend_sup = true; + p_scb->recfg_sup = true; + p_scb->skip_sdp = false; + + cs.p_ctrl_cback = bta_av_dt_cback[p_scb->hdi]; + if (registr.chnl == BTA_AV_CHNL_AUDIO) { + /* set up the audio stream control block */ + p_scb->p_act_tbl = (const tBTA_AV_ACT*)bta_av_a2dp_action; + p_scb->p_cos = &bta_av_a2dp_cos; + p_scb->media_type = AVDT_MEDIA_TYPE_AUDIO; + cs.cfg.psc_mask = AVDT_PSC_TRANS; + cs.media_type = AVDT_MEDIA_TYPE_AUDIO; + cs.mtu = p_bta_av_cfg->audio_mtu; + cs.flush_to = L2CAP_DEFAULT_FLUSH_TO; + tA2DP_CODEC_SEP_INDEX codec_sep_index_min = + A2DP_CODEC_SEP_INDEX_SOURCE_MIN; + tA2DP_CODEC_SEP_INDEX codec_sep_index_max = + A2DP_CODEC_SEP_INDEX_SOURCE_MAX; #if (AVDT_REPORTING == TRUE) - if(bta_av_cb.features & BTA_AV_FEAT_REPORT) - { - cs.cfg.psc_mask |= AVDT_PSC_REPORT; - cs.p_report_cback = bta_av_a2dp_report_cback; - } + if (bta_av_cb.features & BTA_AV_FEAT_REPORT) { + cs.cfg.psc_mask |= AVDT_PSC_REPORT; + cs.p_report_cback = bta_av_a2dp_report_cback; + } #endif - if(bta_av_cb.features & BTA_AV_FEAT_DELAY_RPT) - cs.cfg.psc_mask |= AVDT_PSC_DELAY_RPT; - - if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) - { - cs.tsep = AVDT_TSEP_SRC; - codec_sep_index_min = A2DP_CODEC_SEP_INDEX_SOURCE_MIN; - codec_sep_index_max = A2DP_CODEC_SEP_INDEX_SOURCE_MAX; - } - else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) - { - cs.tsep = AVDT_TSEP_SNK; - cs.p_sink_data_cback = bta_av_sink_data_cback; - codec_sep_index_min = A2DP_CODEC_SEP_INDEX_SINK_MIN; - codec_sep_index_max = A2DP_CODEC_SEP_INDEX_SINK_MAX; - } - - /* Initialize handles to zero */ - for (int xx = 0; xx < A2DP_CODEC_SEP_INDEX_MAX; xx++) - { - p_scb->seps[xx].av_handle = 0; - } - - /* keep the configuration in the stream control block */ - memcpy(&p_scb->cfg, &cs.cfg, sizeof(tAVDT_CFG)); - for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { - tA2DP_CODEC_SEP_INDEX codec_sep_index = - static_cast(i); - if (!(*bta_av_a2dp_cos.init)(codec_sep_index, &cs.cfg)) { - continue; - } - if (AVDT_CreateStream(&p_scb->seps[codec_sep_index].av_handle, - &cs) != AVDT_SUCCESS) { - continue; - } - /* Save a copy of the codec */ - memcpy(p_scb->seps[codec_sep_index].codec_info, - cs.cfg.codec_info, AVDT_CODEC_SIZE); - p_scb->seps[codec_sep_index].tsep = cs.tsep; - if (cs.tsep == AVDT_TSEP_SNK) { - p_scb->seps[codec_sep_index].p_app_sink_data_cback = - p_data->api_reg.p_app_sink_data_cback; - } else { - /* In case of A2DP SOURCE we don't need a callback to - * handle media packets. - */ - p_scb->seps[codec_sep_index].p_app_sink_data_cback = NULL; - } - } - - if(!bta_av_cb.reg_audio) - { - bta_av_cb.sdp_a2dp_handle = 0; - bta_av_cb.sdp_a2dp_snk_handle = 0; - if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) - { - /* create the SDP records on the 1st audio channel */ - bta_av_cb.sdp_a2dp_handle = SDP_CreateRecord(); - A2DP_AddRecord(UUID_SERVCLASS_AUDIO_SOURCE, p_service_name, - NULL, A2DP_SUPF_PLAYER, - bta_av_cb.sdp_a2dp_handle); - bta_sys_add_uuid(UUID_SERVCLASS_AUDIO_SOURCE); - } - else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) - { + if (bta_av_cb.features & BTA_AV_FEAT_DELAY_RPT) + cs.cfg.psc_mask |= AVDT_PSC_DELAY_RPT; + + if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) { + cs.tsep = AVDT_TSEP_SRC; + codec_sep_index_min = A2DP_CODEC_SEP_INDEX_SOURCE_MIN; + codec_sep_index_max = A2DP_CODEC_SEP_INDEX_SOURCE_MAX; + } else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) { + cs.tsep = AVDT_TSEP_SNK; + cs.p_sink_data_cback = bta_av_sink_data_cback; + codec_sep_index_min = A2DP_CODEC_SEP_INDEX_SINK_MIN; + codec_sep_index_max = A2DP_CODEC_SEP_INDEX_SINK_MAX; + } + + /* Initialize handles to zero */ + for (int xx = 0; xx < A2DP_CODEC_SEP_INDEX_MAX; xx++) { + p_scb->seps[xx].av_handle = 0; + } + + /* keep the configuration in the stream control block */ + memcpy(&p_scb->cfg, &cs.cfg, sizeof(tAVDT_CFG)); + for (int i = 0; i < A2DP_CODEC_SEP_INDEX_MAX; i++) { + tA2DP_CODEC_SEP_INDEX codec_sep_index = + static_cast(i); + if (!(*bta_av_a2dp_cos.init)(codec_sep_index, &cs.cfg)) { + continue; + } + if (AVDT_CreateStream(&p_scb->seps[codec_sep_index].av_handle, &cs) != + AVDT_SUCCESS) { + continue; + } + /* Save a copy of the codec */ + memcpy(p_scb->seps[codec_sep_index].codec_info, cs.cfg.codec_info, + AVDT_CODEC_SIZE); + p_scb->seps[codec_sep_index].tsep = cs.tsep; + if (cs.tsep == AVDT_TSEP_SNK) { + p_scb->seps[codec_sep_index].p_app_sink_data_cback = + p_data->api_reg.p_app_sink_data_cback; + } else { + /* In case of A2DP SOURCE we don't need a callback to + * handle media packets. + */ + p_scb->seps[codec_sep_index].p_app_sink_data_cback = NULL; + } + } + + if (!bta_av_cb.reg_audio) { + bta_av_cb.sdp_a2dp_handle = 0; + bta_av_cb.sdp_a2dp_snk_handle = 0; + if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) { + /* create the SDP records on the 1st audio channel */ + bta_av_cb.sdp_a2dp_handle = SDP_CreateRecord(); + A2DP_AddRecord(UUID_SERVCLASS_AUDIO_SOURCE, p_service_name, NULL, + A2DP_SUPF_PLAYER, bta_av_cb.sdp_a2dp_handle); + bta_sys_add_uuid(UUID_SERVCLASS_AUDIO_SOURCE); + } else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) { #if (BTA_AV_SINK_INCLUDED == TRUE) - bta_av_cb.sdp_a2dp_snk_handle = SDP_CreateRecord(); - A2DP_AddRecord(UUID_SERVCLASS_AUDIO_SINK, p_service_name, - NULL, A2DP_SUPF_PLAYER, - bta_av_cb.sdp_a2dp_snk_handle); - bta_sys_add_uuid(UUID_SERVCLASS_AUDIO_SINK); + bta_av_cb.sdp_a2dp_snk_handle = SDP_CreateRecord(); + A2DP_AddRecord(UUID_SERVCLASS_AUDIO_SINK, p_service_name, NULL, + A2DP_SUPF_PLAYER, bta_av_cb.sdp_a2dp_snk_handle); + bta_sys_add_uuid(UUID_SERVCLASS_AUDIO_SINK); #endif - } - /* start listening when A2DP is registered */ - if (bta_av_cb.features & BTA_AV_FEAT_RCTG) - bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1); - - /* if the AV and AVK are both supported, it cannot support the CT role */ - if (bta_av_cb.features & (BTA_AV_FEAT_RCCT)) - { - /* if TG is not supported, we need to register to AVCT now */ - if ((bta_av_cb.features & (BTA_AV_FEAT_RCTG)) == 0) - { + } + /* start listening when A2DP is registered */ + if (bta_av_cb.features & BTA_AV_FEAT_RCTG) + bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1); + + /* if the AV and AVK are both supported, it cannot support the CT role + */ + if (bta_av_cb.features & (BTA_AV_FEAT_RCCT)) { + /* if TG is not supported, we need to register to AVCT now */ + if ((bta_av_cb.features & (BTA_AV_FEAT_RCTG)) == 0) { #if (BTA_AR_INCLUDED == TRUE) #if (BTA_AV_WITH_AVCTP_AUTHORIZATION == TRUE) - bta_ar_reg_avct(p_bta_av_cfg->avrc_mtu, p_bta_av_cfg->avrc_br_mtu, - bta_av_cb.sec_mask, BTA_ID_AV); + bta_ar_reg_avct(p_bta_av_cfg->avrc_mtu, p_bta_av_cfg->avrc_br_mtu, + bta_av_cb.sec_mask, BTA_ID_AV); #else - bta_ar_reg_avct(p_bta_av_cfg->avrc_mtu, p_bta_av_cfg->avrc_br_mtu, - (uint8_t)(bta_av_cb.sec_mask & (~BTA_SEC_AUTHORIZE)), BTA_ID_AV); + bta_ar_reg_avct( + p_bta_av_cfg->avrc_mtu, p_bta_av_cfg->avrc_br_mtu, + (uint8_t)(bta_av_cb.sec_mask & (~BTA_SEC_AUTHORIZE)), + BTA_ID_AV); #endif #endif - bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1); - } + bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1); + } #if (BTA_AR_INCLUDED == TRUE) - /* create an SDP record as AVRC CT. We create 1.3 for SOURCE - * because we rely on feature bits being scanned by external - * devices more than the profile version itself. - * - * We create 1.4 for SINK since we support browsing. - */ - if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) - { - bta_ar_reg_avrc(UUID_SERVCLASS_AV_REMOTE_CONTROL, NULL, NULL, - p_bta_av_cfg->avrc_ct_cat, BTA_ID_AV, - (bta_av_cb.features & BTA_AV_FEAT_BROWSE), AVRC_REV_1_3); - } - else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) - { - bta_ar_reg_avrc(UUID_SERVCLASS_AV_REMOTE_CONTROL, NULL, NULL, - p_bta_av_cfg->avrc_ct_cat, BTA_ID_AV, - (bta_av_cb.features & BTA_AV_FEAT_BROWSE), AVRC_REV_1_6); - } + /* create an SDP record as AVRC CT. We create 1.3 for SOURCE + * because we rely on feature bits being scanned by external + * devices more than the profile version itself. + * + * We create 1.4 for SINK since we support browsing. + */ + if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) { + bta_ar_reg_avrc(UUID_SERVCLASS_AV_REMOTE_CONTROL, NULL, NULL, + p_bta_av_cfg->avrc_ct_cat, BTA_ID_AV, + (bta_av_cb.features & BTA_AV_FEAT_BROWSE), + AVRC_REV_1_3); + } else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) { + bta_ar_reg_avrc(UUID_SERVCLASS_AV_REMOTE_CONTROL, NULL, NULL, + p_bta_av_cfg->avrc_ct_cat, BTA_ID_AV, + (bta_av_cb.features & BTA_AV_FEAT_BROWSE), + AVRC_REV_1_6); + } #endif - } - } - bta_av_cb.reg_audio |= BTA_AV_HNDL_TO_MSK(p_scb->hdi); - APPL_TRACE_DEBUG("reg_audio: 0x%x",bta_av_cb.reg_audio); - } - else - { - bta_av_cb.reg_video = BTA_AV_HNDL_TO_MSK(p_scb->hdi); - bta_av_cb.sdp_vdp_handle = SDP_CreateRecord(); - /* register the video channel */ - /* no need to verify the function pointer here. it's verified prior */ - (*p_bta_av_cfg->p_reg)(&cs, p_service_name, p_scb); } - } while (0); + } + bta_av_cb.reg_audio |= BTA_AV_HNDL_TO_MSK(p_scb->hdi); + APPL_TRACE_DEBUG("reg_audio: 0x%x", bta_av_cb.reg_audio); + } else { + bta_av_cb.reg_video = BTA_AV_HNDL_TO_MSK(p_scb->hdi); + bta_av_cb.sdp_vdp_handle = SDP_CreateRecord(); + /* register the video channel */ + /* no need to verify the function pointer here. it's verified prior */ + (*p_bta_av_cfg->p_reg)(&cs, p_service_name, p_scb); + } + } while (0); - /* call callback with register event */ - (*bta_av_cb.p_cback)(BTA_AV_REGISTER_EVT, (tBTA_AV *)®istr); + /* call callback with register event */ + (*bta_av_cb.p_cback)(BTA_AV_REGISTER_EVT, (tBTA_AV*)®istr); } /******************************************************************************* @@ -718,46 +656,40 @@ static void bta_av_api_register(tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_av_api_deregister(tBTA_AV_DATA *p_data) -{ - tBTA_AV_SCB *p_scb = bta_av_hndl_to_scb(p_data->hdr.layer_specific); - - if(p_scb) - { - p_scb->deregistring = true; - bta_av_ssm_execute(p_scb, BTA_AV_API_CLOSE_EVT, p_data); - } - else - { - bta_av_dereg_comp(p_data); - } +void bta_av_api_deregister(tBTA_AV_DATA* p_data) { + tBTA_AV_SCB* p_scb = bta_av_hndl_to_scb(p_data->hdr.layer_specific); + + if (p_scb) { + p_scb->deregistring = true; + bta_av_ssm_execute(p_scb, BTA_AV_API_CLOSE_EVT, p_data); + } else { + bta_av_dereg_comp(p_data); + } } /******************************************************************************* * * Function bta_av_ci_data * - * Description forward the BTA_AV_CI_SRC_DATA_READY_EVT to stream state machine + * Description forward the BTA_AV_CI_SRC_DATA_READY_EVT to stream state + *machine * * * Returns void * ******************************************************************************/ -static void bta_av_ci_data(tBTA_AV_DATA *p_data) -{ - tBTA_AV_SCB *p_scb; - int i; - uint8_t chnl = (uint8_t)p_data->hdr.layer_specific; +static void bta_av_ci_data(tBTA_AV_DATA* p_data) { + tBTA_AV_SCB* p_scb; + int i; + uint8_t chnl = (uint8_t)p_data->hdr.layer_specific; - for( i=0; i < BTA_AV_NUM_STRS; i++ ) - { - p_scb = bta_av_cb.p_scb[i]; + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + p_scb = bta_av_cb.p_scb[i]; - if(p_scb && p_scb->chnl == chnl) - { - bta_av_ssm_execute(p_scb, BTA_AV_SRC_DATA_READY_EVT, p_data); - } + if (p_scb && p_scb->chnl == chnl) { + bta_av_ssm_execute(p_scb, BTA_AV_SRC_DATA_READY_EVT, p_data); } + } } /******************************************************************************* @@ -770,9 +702,7 @@ static void bta_av_ci_data(tBTA_AV_DATA *p_data) * ******************************************************************************/ #if (AVDT_REPORTING == TRUE) -static void bta_av_rpc_conn(UNUSED_ATTR tBTA_AV_DATA *p_data) -{ -} +static void bta_av_rpc_conn(UNUSED_ATTR tBTA_AV_DATA* p_data) {} #endif /******************************************************************************* @@ -785,15 +715,14 @@ static void bta_av_rpc_conn(UNUSED_ATTR tBTA_AV_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_av_api_to_ssm(tBTA_AV_DATA *p_data) -{ - int xx; - uint16_t event = p_data->hdr.event - BTA_AV_FIRST_A2S_API_EVT + BTA_AV_FIRST_A2S_SSM_EVT; - - for(xx=0; xxhdr.event - BTA_AV_FIRST_A2S_API_EVT + BTA_AV_FIRST_A2S_SSM_EVT; + + for (xx = 0; xx < BTA_AV_NUM_STRS; xx++) { + bta_av_ssm_execute(bta_av_cb.p_scb[xx], event, p_data); + } } /******************************************************************************* @@ -806,37 +735,38 @@ static void bta_av_api_to_ssm(tBTA_AV_DATA *p_data) * Returns true, if need api_start * ******************************************************************************/ -bool bta_av_chk_start(tBTA_AV_SCB *p_scb) -{ - bool start = false; - tBTA_AV_SCB *p_scbi; - int i; - - if(p_scb->chnl == BTA_AV_CHNL_AUDIO) +bool bta_av_chk_start(tBTA_AV_SCB* p_scb) { + bool start = false; + tBTA_AV_SCB* p_scbi; + int i; + + if (p_scb->chnl == BTA_AV_CHNL_AUDIO) { + if ((bta_av_cb.audio_open_cnt >= 2) && + ((0 == + (p_scb->role & BTA_AV_ROLE_AD_ACP)) || /* Outgoing connection or */ + (bta_av_cb.features & + BTA_AV_FEAT_ACP_START))) /* auto-starting option */ { - if ((bta_av_cb.audio_open_cnt >= 2) && - ((0 == (p_scb->role & BTA_AV_ROLE_AD_ACP)) || /* Outgoing connection or */ - (bta_av_cb.features & BTA_AV_FEAT_ACP_START))) /* auto-starting option */ - { - /* more than one audio channel is connected */ - /* if this is the 2nd stream as ACP, give INT a chance to issue the START command */ - for(i=0; ichnl == BTA_AV_CHNL_AUDIO && p_scbi->co_started) - { - start = true; - /* may need to update the flush timeout of this already started stream */ - if(p_scbi->co_started != bta_av_cb.audio_open_cnt) - { - p_scbi->co_started = bta_av_cb.audio_open_cnt; - L2CA_SetFlushTimeout(p_scbi->peer_addr, p_bta_av_cfg->p_audio_flush_to[p_scbi->co_started - 1] ); - } - } - } + /* more than one audio channel is connected */ + /* if this is the 2nd stream as ACP, give INT a chance to issue the START + * command */ + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + p_scbi = bta_av_cb.p_scb[i]; + if (p_scbi && p_scbi->chnl == BTA_AV_CHNL_AUDIO && p_scbi->co_started) { + start = true; + /* may need to update the flush timeout of this already started stream + */ + if (p_scbi->co_started != bta_av_cb.audio_open_cnt) { + p_scbi->co_started = bta_av_cb.audio_open_cnt; + L2CA_SetFlushTimeout( + p_scbi->peer_addr, + p_bta_av_cfg->p_audio_flush_to[p_scbi->co_started - 1]); + } } + } } - return start; + } + return start; } /******************************************************************************* @@ -849,25 +779,22 @@ bool bta_av_chk_start(tBTA_AV_SCB *p_scb) * Returns void * ******************************************************************************/ -void bta_av_restore_switch (void) -{ - tBTA_AV_CB *p_cb = &bta_av_cb; - int i; - uint8_t mask; - - APPL_TRACE_DEBUG("reg_audio: 0x%x",bta_av_cb.reg_audio); - for(i=0; iconn_audio == mask) - { - if (p_cb->p_scb[i]) - { - bta_sys_set_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_cb->p_scb[i]->peer_addr); - } - break; - } +void bta_av_restore_switch(void) { + tBTA_AV_CB* p_cb = &bta_av_cb; + int i; + uint8_t mask; + + APPL_TRACE_DEBUG("reg_audio: 0x%x", bta_av_cb.reg_audio); + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + mask = BTA_AV_HNDL_TO_MSK(i); + if (p_cb->conn_audio == mask) { + if (p_cb->p_scb[i]) { + bta_sys_set_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH, + p_cb->p_scb[i]->peer_addr); + } + break; } + } } /******************************************************************************* @@ -879,72 +806,70 @@ void bta_av_restore_switch (void) * Returns (BTA_SYS_ROLE_CHANGE, new_role, hci_status, p_bda) * ******************************************************************************/ -static void bta_av_sys_rs_cback (UNUSED_ATTR tBTA_SYS_CONN_STATUS status,uint8_t id, - uint8_t app_id, BD_ADDR peer_addr) -{ - int i; - tBTA_AV_SCB *p_scb = NULL; - uint8_t cur_role; - uint8_t peer_idx = 0; - - APPL_TRACE_DEBUG("bta_av_sys_rs_cback: %d", bta_av_cb.rs_idx); - for(i=0; ipeer_addr) == 0)) { - tBTA_AV_ROLE_RES *p_buf = - (tBTA_AV_ROLE_RES *)osi_malloc(sizeof(tBTA_AV_ROLE_RES)); - APPL_TRACE_DEBUG("new_role:%d, hci_status:x%x hndl: x%x", id, app_id, p_scb->hndl); - /* - if ((id != BTM_ROLE_MASTER) && (app_id != HCI_SUCCESS)) - { - bta_sys_set_policy(BTA_ID_AV, (HCI_ENABLE_MASTER_SLAVE_SWITCH|HCI_ENABLE_SNIFF_MODE), p_scb->peer_addr); - } - */ - p_buf->hdr.event = BTA_AV_ROLE_CHANGE_EVT; - p_buf->hdr.layer_specific = p_scb->hndl; - p_buf->new_role = id; - p_buf->hci_status = app_id; - bta_sys_sendmsg(p_buf); - - peer_idx = p_scb->hdi + 1; /* Handle index for the peer_addr */ - } +static void bta_av_sys_rs_cback(UNUSED_ATTR tBTA_SYS_CONN_STATUS status, + uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + int i; + tBTA_AV_SCB* p_scb = NULL; + uint8_t cur_role; + uint8_t peer_idx = 0; + + APPL_TRACE_DEBUG("bta_av_sys_rs_cback: %d", bta_av_cb.rs_idx); + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + /* loop through all the SCBs to find matching peer addresses and report the + * role change event */ + /* note that more than one SCB (a2dp & vdp) maybe waiting for this event */ + p_scb = bta_av_cb.p_scb[i]; + if (p_scb && (bdcmp(peer_addr, p_scb->peer_addr) == 0)) { + tBTA_AV_ROLE_RES* p_buf = + (tBTA_AV_ROLE_RES*)osi_malloc(sizeof(tBTA_AV_ROLE_RES)); + APPL_TRACE_DEBUG("new_role:%d, hci_status:x%x hndl: x%x", id, app_id, + p_scb->hndl); + /* + if ((id != BTM_ROLE_MASTER) && (app_id != HCI_SUCCESS)) + { + bta_sys_set_policy(BTA_ID_AV, + (HCI_ENABLE_MASTER_SLAVE_SWITCH|HCI_ENABLE_SNIFF_MODE), p_scb->peer_addr); + } + */ + p_buf->hdr.event = BTA_AV_ROLE_CHANGE_EVT; + p_buf->hdr.layer_specific = p_scb->hndl; + p_buf->new_role = id; + p_buf->hci_status = app_id; + bta_sys_sendmsg(p_buf); + + peer_idx = p_scb->hdi + 1; /* Handle index for the peer_addr */ } - - /* restore role switch policy, if role switch failed */ - if ((HCI_SUCCESS != app_id) && - (BTM_GetRole (peer_addr, &cur_role) == BTM_SUCCESS) && - (cur_role == BTM_ROLE_SLAVE) ) - { - bta_sys_set_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH, peer_addr); + } + + /* restore role switch policy, if role switch failed */ + if ((HCI_SUCCESS != app_id) && + (BTM_GetRole(peer_addr, &cur_role) == BTM_SUCCESS) && + (cur_role == BTM_ROLE_SLAVE)) { + bta_sys_set_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH, peer_addr); + } + + /* if BTA_AvOpen() was called for other device, which caused the role switch + * of the peer_addr, */ + /* we need to continue opening process for the BTA_AvOpen(). */ + if ((bta_av_cb.rs_idx != 0) && (bta_av_cb.rs_idx != peer_idx)) { + if ((bta_av_cb.rs_idx - 1) < BTA_AV_NUM_STRS) { + p_scb = bta_av_cb.p_scb[bta_av_cb.rs_idx - 1]; } + if (p_scb && p_scb->q_tag == BTA_AV_Q_TAG_OPEN) { + APPL_TRACE_DEBUG("bta_av_sys_rs_cback: rs_idx(%d), hndl:x%x q_tag: %d", + bta_av_cb.rs_idx, p_scb->hndl, p_scb->q_tag); - /* if BTA_AvOpen() was called for other device, which caused the role switch of the peer_addr, */ - /* we need to continue opening process for the BTA_AvOpen(). */ - if ((bta_av_cb.rs_idx != 0) && (bta_av_cb.rs_idx != peer_idx)) - { - if ((bta_av_cb.rs_idx -1) < BTA_AV_NUM_STRS) - { - p_scb = bta_av_cb.p_scb[bta_av_cb.rs_idx - 1]; - } - if (p_scb && p_scb->q_tag == BTA_AV_Q_TAG_OPEN) - { - APPL_TRACE_DEBUG ("bta_av_sys_rs_cback: rs_idx(%d), hndl:x%x q_tag: %d", - bta_av_cb.rs_idx, p_scb->hndl, p_scb->q_tag); - - if(HCI_SUCCESS == app_id || HCI_ERR_NO_CONNECTION == app_id) - p_scb->q_info.open.switch_res = BTA_AV_RS_OK; - else - p_scb->q_info.open.switch_res = BTA_AV_RS_FAIL; - - /* Continue av open process */ - bta_av_do_disc_a2dp(p_scb, (tBTA_AV_DATA *)&(p_scb->q_info.open)); - } + if (HCI_SUCCESS == app_id || HCI_ERR_NO_CONNECTION == app_id) + p_scb->q_info.open.switch_res = BTA_AV_RS_OK; + else + p_scb->q_info.open.switch_res = BTA_AV_RS_FAIL; - bta_av_cb.rs_idx = 0; + /* Continue av open process */ + bta_av_do_disc_a2dp(p_scb, (tBTA_AV_DATA*)&(p_scb->q_info.open)); } + + bta_av_cb.rs_idx = 0; + } } /******************************************************************************* @@ -952,56 +877,50 @@ static void bta_av_sys_rs_cback (UNUSED_ATTR tBTA_SYS_CONN_STATUS status,uint8_t * Function bta_av_sco_chg_cback * * Description receive & process the SCO connection up/down event from sys. - * call setup also triggers this callback, to suspend av before sco + * call setup also triggers this callback, to suspend av before + *sco * activity happens, or to resume av once call ends. * * Returns void * ******************************************************************************/ -static void bta_av_sco_chg_cback(tBTA_SYS_CONN_STATUS status, - uint8_t id,UNUSED_ATTR uint8_t app_id, - UNUSED_ATTR BD_ADDR peer_addr) -{ - tBTA_AV_SCB *p_scb; - int i; - tBTA_AV_API_STOP stop; - - APPL_TRACE_DEBUG("bta_av_sco_chg_cback:%d status:%d", id, status); - if(id) - { - bta_av_cb.sco_occupied = true; - - /* either BTA_SYS_SCO_OPEN or BTA_SYS_SCO_CLOSE with remaining active SCO */ - for(i=0; ico_started && (p_scb->sco_suspend == false)) - { - APPL_TRACE_DEBUG("suspending scb:%d", i); - /* scb is used and started, not suspended automatically */ - p_scb->sco_suspend = true; - stop.flush = false; - stop.suspend = true; - bta_av_ssm_execute(p_scb, BTA_AV_AP_STOP_EVT, (tBTA_AV_DATA *)&stop); - } - } +static void bta_av_sco_chg_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + UNUSED_ATTR uint8_t app_id, + UNUSED_ATTR BD_ADDR peer_addr) { + tBTA_AV_SCB* p_scb; + int i; + tBTA_AV_API_STOP stop; + + APPL_TRACE_DEBUG("bta_av_sco_chg_cback:%d status:%d", id, status); + if (id) { + bta_av_cb.sco_occupied = true; + + /* either BTA_SYS_SCO_OPEN or BTA_SYS_SCO_CLOSE with remaining active SCO */ + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + p_scb = bta_av_cb.p_scb[i]; + + if (p_scb && p_scb->co_started && (p_scb->sco_suspend == false)) { + APPL_TRACE_DEBUG("suspending scb:%d", i); + /* scb is used and started, not suspended automatically */ + p_scb->sco_suspend = true; + stop.flush = false; + stop.suspend = true; + bta_av_ssm_execute(p_scb, BTA_AV_AP_STOP_EVT, (tBTA_AV_DATA*)&stop); + } } - else - { - bta_av_cb.sco_occupied = false; + } else { + bta_av_cb.sco_occupied = false; - for(i=0; isco_suspend ) /* scb is used and suspended for SCO */ - { - APPL_TRACE_DEBUG("starting scb:%d", i); - bta_av_ssm_execute(p_scb, BTA_AV_AP_START_EVT, NULL); - } - } + if (p_scb && p_scb->sco_suspend) /* scb is used and suspended for SCO */ + { + APPL_TRACE_DEBUG("starting scb:%d", i); + bta_av_ssm_execute(p_scb, BTA_AV_AP_START_EVT, NULL); + } } + } } /******************************************************************************* @@ -1015,44 +934,43 @@ static void bta_av_sco_chg_cback(tBTA_SYS_CONN_STATUS status, * Returns true, if role switch is done * ******************************************************************************/ -bool bta_av_switch_if_needed(tBTA_AV_SCB *p_scb) -{ - uint8_t role; - bool needed = false; - tBTA_AV_SCB *p_scbi; - int i; - uint8_t mask; - - for(i=0; ihdi != i) && /* not the original channel */ + ((bta_av_cb.conn_audio & mask) || /* connected audio */ + (bta_av_cb.conn_video & mask))) /* connected video */ { - mask = BTA_AV_HNDL_TO_MSK(i); - p_scbi = bta_av_cb.p_scb[i]; - if( p_scbi && (p_scb->hdi != i) && /* not the original channel */ - ((bta_av_cb.conn_audio & mask) ||/* connected audio */ - (bta_av_cb.conn_video & mask)) ) /* connected video */ - { - BTM_GetRole(p_scbi->peer_addr, &role); - /* this channel is open - clear the role switch link policy for this link */ - if(BTM_ROLE_MASTER != role) - { - if (bta_av_cb.features & BTA_AV_FEAT_MASTER) - bta_sys_clear_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_scbi->peer_addr); - if (BTM_CMD_STARTED != BTM_SwitchRole(p_scbi->peer_addr, BTM_ROLE_MASTER, NULL)) - { - /* can not switch role on SCBI - * start the timer on SCB - because this function is ONLY called when SCB gets API_OPEN */ - bta_sys_start_timer(p_scb->avrc_ct_timer, - BTA_AV_RS_TIME_VAL, - BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); - } - needed = true; - /* mark the original channel as waiting for RS result */ - bta_av_cb.rs_idx = p_scb->hdi + 1; - break; - } + BTM_GetRole(p_scbi->peer_addr, &role); + /* this channel is open - clear the role switch link policy for this link + */ + if (BTM_ROLE_MASTER != role) { + if (bta_av_cb.features & BTA_AV_FEAT_MASTER) + bta_sys_clear_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH, + p_scbi->peer_addr); + if (BTM_CMD_STARTED != + BTM_SwitchRole(p_scbi->peer_addr, BTM_ROLE_MASTER, NULL)) { + /* can not switch role on SCBI + * start the timer on SCB - because this function is ONLY called when + * SCB gets API_OPEN */ + bta_sys_start_timer(p_scb->avrc_ct_timer, BTA_AV_RS_TIME_VAL, + BTA_AV_AVRC_TIMER_EVT, p_scb->hndl); } + needed = true; + /* mark the original channel as waiting for RS result */ + bta_av_cb.rs_idx = p_scb->hdi + 1; + break; + } } - return needed; + } + return needed; } /******************************************************************************* @@ -1065,33 +983,31 @@ bool bta_av_switch_if_needed(tBTA_AV_SCB *p_scb) * Returns true, if role is ok * ******************************************************************************/ -bool bta_av_link_role_ok(tBTA_AV_SCB *p_scb, uint8_t bits) -{ - uint8_t role; - bool is_ok = true; - - if (BTM_GetRole(p_scb->peer_addr, &role) == BTM_SUCCESS) - { - LOG_INFO(LOG_TAG, "%s hndl:x%x role:%d conn_audio:x%x bits:%d features:x%x", - __func__, p_scb->hndl, role, bta_av_cb.conn_audio, bits, - bta_av_cb.features); - if (BTM_ROLE_MASTER != role && - (A2DP_BitsSet(bta_av_cb.conn_audio) > bits || - (bta_av_cb.features & BTA_AV_FEAT_MASTER))) { - if (bta_av_cb.features & BTA_AV_FEAT_MASTER) - bta_sys_clear_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_scb->peer_addr); - - if (BTM_CMD_STARTED != BTM_SwitchRole(p_scb->peer_addr, BTM_ROLE_MASTER, NULL)) - { - /* can not switch role on SCB - start the timer on SCB */ - } - is_ok = false; - p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_START; - - } +bool bta_av_link_role_ok(tBTA_AV_SCB* p_scb, uint8_t bits) { + uint8_t role; + bool is_ok = true; + + if (BTM_GetRole(p_scb->peer_addr, &role) == BTM_SUCCESS) { + LOG_INFO(LOG_TAG, "%s hndl:x%x role:%d conn_audio:x%x bits:%d features:x%x", + __func__, p_scb->hndl, role, bta_av_cb.conn_audio, bits, + bta_av_cb.features); + if (BTM_ROLE_MASTER != role && + (A2DP_BitsSet(bta_av_cb.conn_audio) > bits || + (bta_av_cb.features & BTA_AV_FEAT_MASTER))) { + if (bta_av_cb.features & BTA_AV_FEAT_MASTER) + bta_sys_clear_policy(BTA_ID_AV, HCI_ENABLE_MASTER_SLAVE_SWITCH, + p_scb->peer_addr); + + if (BTM_CMD_STARTED != + BTM_SwitchRole(p_scb->peer_addr, BTM_ROLE_MASTER, NULL)) { + /* can not switch role on SCB - start the timer on SCB */ + } + is_ok = false; + p_scb->wait |= BTA_AV_WAIT_ROLE_SW_RES_START; } + } - return is_ok; + return is_ok; } /******************************************************************************* @@ -1104,81 +1020,73 @@ bool bta_av_link_role_ok(tBTA_AV_SCB *p_scb, uint8_t bits) * Returns The smallest mtu of the connected audio channels * ******************************************************************************/ -uint16_t bta_av_chk_mtu(tBTA_AV_SCB *p_scb, - UNUSED_ATTR uint16_t mtu) -{ - uint16_t ret_mtu = BTA_AV_MAX_A2DP_MTU; - tBTA_AV_SCB *p_scbi; - int i; - uint8_t mask; - - /* TODO_MV mess with the mtu according to the number of EDR/non-EDR headsets */ - if(p_scb->chnl == BTA_AV_CHNL_AUDIO) - { - if(bta_av_cb.audio_open_cnt >= 2) - { - /* more than one audio channel is connected */ - for(i=0; ichnl == BTA_AV_CHNL_AUDIO) ) - { - mask = BTA_AV_HNDL_TO_MSK(i); - APPL_TRACE_DEBUG("[%d] mtu: %d, mask:0x%x", - i, p_scbi->stream_mtu, mask); - if(bta_av_cb.conn_audio & mask) - { - if(ret_mtu > p_scbi->stream_mtu) - ret_mtu = p_scbi->stream_mtu; - } - } - } +uint16_t bta_av_chk_mtu(tBTA_AV_SCB* p_scb, UNUSED_ATTR uint16_t mtu) { + uint16_t ret_mtu = BTA_AV_MAX_A2DP_MTU; + tBTA_AV_SCB* p_scbi; + int i; + uint8_t mask; + + /* TODO_MV mess with the mtu according to the number of EDR/non-EDR headsets + */ + if (p_scb->chnl == BTA_AV_CHNL_AUDIO) { + if (bta_av_cb.audio_open_cnt >= 2) { + /* more than one audio channel is connected */ + for (i = 0; i < BTA_AV_NUM_STRS; i++) { + p_scbi = bta_av_cb.p_scb[i]; + if ((p_scb != p_scbi) && p_scbi && + (p_scbi->chnl == BTA_AV_CHNL_AUDIO)) { + mask = BTA_AV_HNDL_TO_MSK(i); + APPL_TRACE_DEBUG("[%d] mtu: %d, mask:0x%x", i, p_scbi->stream_mtu, + mask); + if (bta_av_cb.conn_audio & mask) { + if (ret_mtu > p_scbi->stream_mtu) ret_mtu = p_scbi->stream_mtu; + } } - APPL_TRACE_DEBUG("bta_av_chk_mtu audio count:%d, conn_audio:0x%x, ret:%d", - bta_av_cb.audio_open_cnt, bta_av_cb.conn_audio, ret_mtu); + } } - return ret_mtu; + APPL_TRACE_DEBUG("bta_av_chk_mtu audio count:%d, conn_audio:0x%x, ret:%d", + bta_av_cb.audio_open_cnt, bta_av_cb.conn_audio, ret_mtu); + } + return ret_mtu; } /******************************************************************************* * * Function bta_av_dup_audio_buf * - * Description dup the audio data to the q_info.a2dp of other audio channels + * Description dup the audio data to the q_info.a2dp of other audio + *channels * * Returns void * ******************************************************************************/ -void bta_av_dup_audio_buf(tBTA_AV_SCB *p_scb, BT_HDR *p_buf) -{ - /* Test whether there is more than one audio channel connected */ - if ((p_buf == NULL) || (bta_av_cb.audio_open_cnt < 2)) - return; - - uint16_t copy_size = BT_HDR_SIZE + p_buf->len + p_buf->offset; - for (int i = 0; i < BTA_AV_NUM_STRS; i++) { - tBTA_AV_SCB *p_scbi = bta_av_cb.p_scb[i]; - - if (i == p_scb->hdi) - continue; /* Ignore the original channel */ - if ((p_scbi == NULL) || !p_scbi->co_started) - continue; /* Ignore if SCB is not used or started */ - if (!(bta_av_cb.conn_audio & BTA_AV_HNDL_TO_MSK(i))) - continue; /* Audio is not connected */ - - /* Enqueue the data */ - BT_HDR *p_new = (BT_HDR *)osi_malloc(copy_size); - memcpy(p_new, p_buf, copy_size); - list_append(p_scbi->a2dp_list, p_new); - - if (list_length(p_scbi->a2dp_list) > p_bta_av_cfg->audio_mqs) { - // Drop the oldest packet - bta_av_co_audio_drop(p_scbi->hndl); - BT_HDR *p_buf_drop = static_cast(list_front(p_scbi->a2dp_list)); - list_remove(p_scbi->a2dp_list, p_buf_drop); - osi_free(p_buf_drop); - } +void bta_av_dup_audio_buf(tBTA_AV_SCB* p_scb, BT_HDR* p_buf) { + /* Test whether there is more than one audio channel connected */ + if ((p_buf == NULL) || (bta_av_cb.audio_open_cnt < 2)) return; + + uint16_t copy_size = BT_HDR_SIZE + p_buf->len + p_buf->offset; + for (int i = 0; i < BTA_AV_NUM_STRS; i++) { + tBTA_AV_SCB* p_scbi = bta_av_cb.p_scb[i]; + + if (i == p_scb->hdi) continue; /* Ignore the original channel */ + if ((p_scbi == NULL) || !p_scbi->co_started) + continue; /* Ignore if SCB is not used or started */ + if (!(bta_av_cb.conn_audio & BTA_AV_HNDL_TO_MSK(i))) + continue; /* Audio is not connected */ + + /* Enqueue the data */ + BT_HDR* p_new = (BT_HDR*)osi_malloc(copy_size); + memcpy(p_new, p_buf, copy_size); + list_append(p_scbi->a2dp_list, p_new); + + if (list_length(p_scbi->a2dp_list) > p_bta_av_cfg->audio_mqs) { + // Drop the oldest packet + bta_av_co_audio_drop(p_scbi->hndl); + BT_HDR* p_buf_drop = static_cast(list_front(p_scbi->a2dp_list)); + list_remove(p_scbi->a2dp_list, p_buf_drop); + osi_free(p_buf_drop); } + } } /******************************************************************************* @@ -1191,33 +1099,32 @@ void bta_av_dup_audio_buf(tBTA_AV_SCB *p_scb, BT_HDR *p_buf) * Returns void * ******************************************************************************/ -void bta_av_sm_execute(tBTA_AV_CB *p_cb, uint16_t event, tBTA_AV_DATA *p_data) -{ - tBTA_AV_ST_TBL state_table; - uint8_t action; +void bta_av_sm_execute(tBTA_AV_CB* p_cb, uint16_t event, tBTA_AV_DATA* p_data) { + tBTA_AV_ST_TBL state_table; + uint8_t action; #if (BTA_AV_DEBUG == TRUE) - APPL_TRACE_EVENT("AV event=0x%x(%s) state=%d(%s)", - event, bta_av_evt_code(event), p_cb->state, bta_av_st_code(p_cb->state)); + APPL_TRACE_EVENT("AV event=0x%x(%s) state=%d(%s)", event, + bta_av_evt_code(event), p_cb->state, + bta_av_st_code(p_cb->state)); #else - APPL_TRACE_EVENT("AV event=0x%x state=%d", event, p_cb->state); + APPL_TRACE_EVENT("AV event=0x%x state=%d", event, p_cb->state); #endif - /* look up the state table for the current state */ - state_table = bta_av_st_tbl[p_cb->state]; + /* look up the state table for the current state */ + state_table = bta_av_st_tbl[p_cb->state]; - event &= 0x00FF; + event &= 0x00FF; - /* set next state */ - p_cb->state = state_table[event][BTA_AV_NEXT_STATE]; - APPL_TRACE_EVENT("next state=%d event offset:%d", p_cb->state, event); + /* set next state */ + p_cb->state = state_table[event][BTA_AV_NEXT_STATE]; + APPL_TRACE_EVENT("next state=%d event offset:%d", p_cb->state, event); - /* execute action functions */ - if ((action = state_table[event][BTA_AV_ACTION_COL]) != BTA_AV_IGNORE) - { - APPL_TRACE_EVENT("%s action executed %d", __func__, action); - (*bta_av_action[action])(p_cb, p_data); - } + /* execute action functions */ + if ((action = state_table[event][BTA_AV_ACTION_COL]) != BTA_AV_IGNORE) { + APPL_TRACE_EVENT("%s action executed %d", __func__, action); + (*bta_av_action[action])(p_cb, p_data); + } } /******************************************************************************* @@ -1230,44 +1137,37 @@ void bta_av_sm_execute(tBTA_AV_CB *p_cb, uint16_t event, tBTA_AV_DATA *p_data) * Returns bool * ******************************************************************************/ -bool bta_av_hdl_event(BT_HDR *p_msg) -{ - uint16_t event = p_msg->event; - uint16_t first_event = BTA_AV_FIRST_NSM_EVT; +bool bta_av_hdl_event(BT_HDR* p_msg) { + uint16_t event = p_msg->event; + uint16_t first_event = BTA_AV_FIRST_NSM_EVT; - if (event > BTA_AV_LAST_EVT) - { - return true; /* to free p_msg */ - } + if (event > BTA_AV_LAST_EVT) { + return true; /* to free p_msg */ + } - if(event >= first_event) - { + if (event >= first_event) { #if (BTA_AV_DEBUG == TRUE) - APPL_TRACE_VERBOSE("AV nsm event=0x%x(%s)", event, bta_av_evt_code(event)); + APPL_TRACE_VERBOSE("AV nsm event=0x%x(%s)", event, bta_av_evt_code(event)); #else - APPL_TRACE_VERBOSE("AV nsm event=0x%x", event); + APPL_TRACE_VERBOSE("AV nsm event=0x%x", event); #endif - /* non state machine events */ - (*bta_av_nsm_act[event - BTA_AV_FIRST_NSM_EVT]) ((tBTA_AV_DATA *) p_msg); - } - else if (event >= BTA_AV_FIRST_SM_EVT && event <= BTA_AV_LAST_SM_EVT) - { + /* non state machine events */ + (*bta_av_nsm_act[event - BTA_AV_FIRST_NSM_EVT])((tBTA_AV_DATA*)p_msg); + } else if (event >= BTA_AV_FIRST_SM_EVT && event <= BTA_AV_LAST_SM_EVT) { #if (BTA_AV_DEBUG == TRUE) - APPL_TRACE_VERBOSE("AV sm event=0x%x(%s)", event, bta_av_evt_code(event)); + APPL_TRACE_VERBOSE("AV sm event=0x%x(%s)", event, bta_av_evt_code(event)); #else - APPL_TRACE_VERBOSE("AV sm event=0x%x", event); + APPL_TRACE_VERBOSE("AV sm event=0x%x", event); #endif - /* state machine events */ - bta_av_sm_execute(&bta_av_cb, p_msg->event, (tBTA_AV_DATA *) p_msg); - } - else - { - APPL_TRACE_VERBOSE("handle=0x%x", p_msg->layer_specific); - /* stream state machine events */ - bta_av_ssm_execute( bta_av_hndl_to_scb(p_msg->layer_specific), - p_msg->event, (tBTA_AV_DATA *) p_msg); - } - return true; + /* state machine events */ + bta_av_sm_execute(&bta_av_cb, p_msg->event, (tBTA_AV_DATA*)p_msg); + } else { + APPL_TRACE_VERBOSE("handle=0x%x", p_msg->layer_specific); + /* stream state machine events */ + bta_av_ssm_execute(bta_av_hndl_to_scb(p_msg->layer_specific), p_msg->event, + (tBTA_AV_DATA*)p_msg); + } + return true; } /***************************************************************************** @@ -1283,14 +1183,15 @@ bool bta_av_hdl_event(BT_HDR *p_msg) * Returns char * * ******************************************************************************/ -static const char *bta_av_st_code(uint8_t state) -{ - switch(state) - { - case BTA_AV_INIT_ST: return "INIT"; - case BTA_AV_OPEN_ST: return "OPEN"; - default: return "unknown"; - } +static const char* bta_av_st_code(uint8_t state) { + switch (state) { + case BTA_AV_INIT_ST: + return "INIT"; + case BTA_AV_OPEN_ST: + return "OPEN"; + default: + return "unknown"; + } } /******************************************************************************* * @@ -1301,74 +1202,132 @@ static const char *bta_av_st_code(uint8_t state) * Returns char * * ******************************************************************************/ -const char *bta_av_evt_code(uint16_t evt_code) -{ - switch(evt_code) - { - case BTA_AV_API_DISABLE_EVT: return "API_DISABLE"; - case BTA_AV_API_REMOTE_CMD_EVT: return "API_REMOTE_CMD"; - case BTA_AV_API_VENDOR_CMD_EVT: return "API_VENDOR_CMD"; - case BTA_AV_API_VENDOR_RSP_EVT: return "API_VENDOR_RSP"; - case BTA_AV_API_META_RSP_EVT: return "API_META_RSP_EVT"; - case BTA_AV_API_RC_CLOSE_EVT: return "API_RC_CLOSE"; - case BTA_AV_AVRC_OPEN_EVT: return "AVRC_OPEN"; - case BTA_AV_AVRC_MSG_EVT: return "AVRC_MSG"; - case BTA_AV_AVRC_NONE_EVT: return "AVRC_NONE"; - - case BTA_AV_API_OPEN_EVT: return "API_OPEN"; - case BTA_AV_API_CLOSE_EVT: return "API_CLOSE"; - case BTA_AV_AP_START_EVT: return "AP_START"; - case BTA_AV_AP_STOP_EVT: return "AP_STOP"; - case BTA_AV_API_RECONFIG_EVT: return "API_RECONFIG"; - case BTA_AV_API_PROTECT_REQ_EVT: return "API_PROTECT_REQ"; - case BTA_AV_API_PROTECT_RSP_EVT: return "API_PROTECT_RSP"; - case BTA_AV_API_RC_OPEN_EVT: return "API_RC_OPEN"; - case BTA_AV_SRC_DATA_READY_EVT: return "SRC_DATA_READY"; - case BTA_AV_CI_SETCONFIG_OK_EVT: return "CI_SETCONFIG_OK"; - case BTA_AV_CI_SETCONFIG_FAIL_EVT: return "CI_SETCONFIG_FAIL"; - case BTA_AV_SDP_DISC_OK_EVT: return "SDP_DISC_OK"; - case BTA_AV_SDP_DISC_FAIL_EVT: return "SDP_DISC_FAIL"; - case BTA_AV_STR_DISC_OK_EVT: return "STR_DISC_OK"; - case BTA_AV_STR_DISC_FAIL_EVT: return "STR_DISC_FAIL"; - case BTA_AV_STR_GETCAP_OK_EVT: return "STR_GETCAP_OK"; - case BTA_AV_STR_GETCAP_FAIL_EVT: return "STR_GETCAP_FAIL"; - case BTA_AV_STR_OPEN_OK_EVT: return "STR_OPEN_OK"; - case BTA_AV_STR_OPEN_FAIL_EVT: return "STR_OPEN_FAIL"; - case BTA_AV_STR_START_OK_EVT: return "STR_START_OK"; - case BTA_AV_STR_START_FAIL_EVT: return "STR_START_FAIL"; - case BTA_AV_STR_CLOSE_EVT: return "STR_CLOSE"; - case BTA_AV_STR_CONFIG_IND_EVT: return "STR_CONFIG_IND"; - case BTA_AV_STR_SECURITY_IND_EVT: return "STR_SECURITY_IND"; - case BTA_AV_STR_SECURITY_CFM_EVT: return "STR_SECURITY_CFM"; - case BTA_AV_STR_WRITE_CFM_EVT: return "STR_WRITE_CFM"; - case BTA_AV_STR_SUSPEND_CFM_EVT: return "STR_SUSPEND_CFM"; - case BTA_AV_STR_RECONFIG_CFM_EVT: return "STR_RECONFIG_CFM"; - case BTA_AV_AVRC_TIMER_EVT: return "AVRC_TIMER"; - case BTA_AV_AVDT_CONNECT_EVT: return "AVDT_CONNECT"; - case BTA_AV_AVDT_DISCONNECT_EVT: return "AVDT_DISCONNECT"; - case BTA_AV_ROLE_CHANGE_EVT: return "ROLE_CHANGE"; - case BTA_AV_AVDT_DELAY_RPT_EVT: return "AVDT_DELAY_RPT"; - case BTA_AV_ACP_CONNECT_EVT: return "ACP_CONNECT"; - - case BTA_AV_API_ENABLE_EVT: return "API_ENABLE"; - case BTA_AV_API_REGISTER_EVT: return "API_REG"; - case BTA_AV_API_DEREGISTER_EVT: return "API_DEREG"; - case BTA_AV_API_DISCONNECT_EVT: return "API_DISCNT"; - case BTA_AV_CI_SRC_DATA_READY_EVT: return "CI_DATA_READY"; - case BTA_AV_SIG_CHG_EVT: return "SIG_CHG"; - case BTA_AV_SIGNALLING_TIMER_EVT: return "SIGNALLING_TIMER"; - case BTA_AV_SDP_AVRC_DISC_EVT: return "SDP_AVRC_DISC"; - case BTA_AV_AVRC_CLOSE_EVT: return "AVRC_CLOSE"; - case BTA_AV_AVRC_BROWSE_OPEN_EVT: return "AVRC_BROWSE_OPEN"; - case BTA_AV_AVRC_BROWSE_CLOSE_EVT: return "AVRC_BROWSE_CLOSE"; - case BTA_AV_CONN_CHG_EVT: return "CONN_CHG"; - case BTA_AV_DEREG_COMP_EVT: return "DEREG_COMP"; +const char* bta_av_evt_code(uint16_t evt_code) { + switch (evt_code) { + case BTA_AV_API_DISABLE_EVT: + return "API_DISABLE"; + case BTA_AV_API_REMOTE_CMD_EVT: + return "API_REMOTE_CMD"; + case BTA_AV_API_VENDOR_CMD_EVT: + return "API_VENDOR_CMD"; + case BTA_AV_API_VENDOR_RSP_EVT: + return "API_VENDOR_RSP"; + case BTA_AV_API_META_RSP_EVT: + return "API_META_RSP_EVT"; + case BTA_AV_API_RC_CLOSE_EVT: + return "API_RC_CLOSE"; + case BTA_AV_AVRC_OPEN_EVT: + return "AVRC_OPEN"; + case BTA_AV_AVRC_MSG_EVT: + return "AVRC_MSG"; + case BTA_AV_AVRC_NONE_EVT: + return "AVRC_NONE"; + + case BTA_AV_API_OPEN_EVT: + return "API_OPEN"; + case BTA_AV_API_CLOSE_EVT: + return "API_CLOSE"; + case BTA_AV_AP_START_EVT: + return "AP_START"; + case BTA_AV_AP_STOP_EVT: + return "AP_STOP"; + case BTA_AV_API_RECONFIG_EVT: + return "API_RECONFIG"; + case BTA_AV_API_PROTECT_REQ_EVT: + return "API_PROTECT_REQ"; + case BTA_AV_API_PROTECT_RSP_EVT: + return "API_PROTECT_RSP"; + case BTA_AV_API_RC_OPEN_EVT: + return "API_RC_OPEN"; + case BTA_AV_SRC_DATA_READY_EVT: + return "SRC_DATA_READY"; + case BTA_AV_CI_SETCONFIG_OK_EVT: + return "CI_SETCONFIG_OK"; + case BTA_AV_CI_SETCONFIG_FAIL_EVT: + return "CI_SETCONFIG_FAIL"; + case BTA_AV_SDP_DISC_OK_EVT: + return "SDP_DISC_OK"; + case BTA_AV_SDP_DISC_FAIL_EVT: + return "SDP_DISC_FAIL"; + case BTA_AV_STR_DISC_OK_EVT: + return "STR_DISC_OK"; + case BTA_AV_STR_DISC_FAIL_EVT: + return "STR_DISC_FAIL"; + case BTA_AV_STR_GETCAP_OK_EVT: + return "STR_GETCAP_OK"; + case BTA_AV_STR_GETCAP_FAIL_EVT: + return "STR_GETCAP_FAIL"; + case BTA_AV_STR_OPEN_OK_EVT: + return "STR_OPEN_OK"; + case BTA_AV_STR_OPEN_FAIL_EVT: + return "STR_OPEN_FAIL"; + case BTA_AV_STR_START_OK_EVT: + return "STR_START_OK"; + case BTA_AV_STR_START_FAIL_EVT: + return "STR_START_FAIL"; + case BTA_AV_STR_CLOSE_EVT: + return "STR_CLOSE"; + case BTA_AV_STR_CONFIG_IND_EVT: + return "STR_CONFIG_IND"; + case BTA_AV_STR_SECURITY_IND_EVT: + return "STR_SECURITY_IND"; + case BTA_AV_STR_SECURITY_CFM_EVT: + return "STR_SECURITY_CFM"; + case BTA_AV_STR_WRITE_CFM_EVT: + return "STR_WRITE_CFM"; + case BTA_AV_STR_SUSPEND_CFM_EVT: + return "STR_SUSPEND_CFM"; + case BTA_AV_STR_RECONFIG_CFM_EVT: + return "STR_RECONFIG_CFM"; + case BTA_AV_AVRC_TIMER_EVT: + return "AVRC_TIMER"; + case BTA_AV_AVDT_CONNECT_EVT: + return "AVDT_CONNECT"; + case BTA_AV_AVDT_DISCONNECT_EVT: + return "AVDT_DISCONNECT"; + case BTA_AV_ROLE_CHANGE_EVT: + return "ROLE_CHANGE"; + case BTA_AV_AVDT_DELAY_RPT_EVT: + return "AVDT_DELAY_RPT"; + case BTA_AV_ACP_CONNECT_EVT: + return "ACP_CONNECT"; + + case BTA_AV_API_ENABLE_EVT: + return "API_ENABLE"; + case BTA_AV_API_REGISTER_EVT: + return "API_REG"; + case BTA_AV_API_DEREGISTER_EVT: + return "API_DEREG"; + case BTA_AV_API_DISCONNECT_EVT: + return "API_DISCNT"; + case BTA_AV_CI_SRC_DATA_READY_EVT: + return "CI_DATA_READY"; + case BTA_AV_SIG_CHG_EVT: + return "SIG_CHG"; + case BTA_AV_SIGNALLING_TIMER_EVT: + return "SIGNALLING_TIMER"; + case BTA_AV_SDP_AVRC_DISC_EVT: + return "SDP_AVRC_DISC"; + case BTA_AV_AVRC_CLOSE_EVT: + return "AVRC_CLOSE"; + case BTA_AV_AVRC_BROWSE_OPEN_EVT: + return "AVRC_BROWSE_OPEN"; + case BTA_AV_AVRC_BROWSE_CLOSE_EVT: + return "AVRC_BROWSE_CLOSE"; + case BTA_AV_CONN_CHG_EVT: + return "CONN_CHG"; + case BTA_AV_DEREG_COMP_EVT: + return "DEREG_COMP"; #if (AVDT_REPORTING == TRUE) - case BTA_AV_AVDT_RPT_CONN_EVT: return "RPT_CONN"; + case BTA_AV_AVDT_RPT_CONN_EVT: + return "RPT_CONN"; #endif - case BTA_AV_API_START_EVT: return "API_START"; - case BTA_AV_API_STOP_EVT: return "API_STOP"; - default: return "unknown"; - } + case BTA_AV_API_START_EVT: + return "API_START"; + case BTA_AV_API_STOP_EVT: + return "API_STOP"; + default: + return "unknown"; + } } #endif /* BTA_AV_DEBUG */ diff --git a/system/bta/av/bta_av_ssm.cc b/system/bta/av/bta_av_ssm.cc index 45954869cd1..1578c224c13 100644 --- a/system/bta/av/bta_av_ssm.cc +++ b/system/bta/av/bta_av_ssm.cc @@ -32,352 +32,442 @@ ****************************************************************************/ /* state machine states */ -enum -{ - BTA_AV_INIT_SST, - BTA_AV_INCOMING_SST, - BTA_AV_OPENING_SST, - BTA_AV_OPEN_SST, - BTA_AV_RCFG_SST, - BTA_AV_CLOSING_SST +enum { + BTA_AV_INIT_SST, + BTA_AV_INCOMING_SST, + BTA_AV_OPENING_SST, + BTA_AV_OPEN_SST, + BTA_AV_RCFG_SST, + BTA_AV_CLOSING_SST }; - /* state machine action enumeration list */ -enum -{ - BTA_AV_DO_DISC, - BTA_AV_CLEANUP, - BTA_AV_FREE_SDB, - BTA_AV_CONFIG_IND, - BTA_AV_DISCONNECT_REQ, - BTA_AV_SECURITY_REQ, - BTA_AV_SECURITY_RSP, - BTA_AV_SETCONFIG_RSP, - BTA_AV_ST_RC_TIMER, - BTA_AV_STR_OPENED, - BTA_AV_SECURITY_IND, - BTA_AV_SECURITY_CFM, - BTA_AV_DO_CLOSE, - BTA_AV_CONNECT_REQ, - BTA_AV_SDP_FAILED, - BTA_AV_DISC_RESULTS, - BTA_AV_DISC_RES_AS_ACP, - BTA_AV_OPEN_FAILED, - BTA_AV_GETCAP_RESULTS, - BTA_AV_SETCONFIG_REJ, - BTA_AV_DISCOVER_REQ, - BTA_AV_CONN_FAILED, - BTA_AV_DO_START, - BTA_AV_STR_STOPPED, - BTA_AV_RECONFIG, - BTA_AV_DATA_PATH, - BTA_AV_START_OK, - BTA_AV_START_FAILED, - BTA_AV_STR_CLOSED, - BTA_AV_CLR_CONG, - BTA_AV_SUSPEND_CFM, - BTA_AV_RCFG_STR_OK, - BTA_AV_RCFG_FAILED, - BTA_AV_RCFG_CONNECT, - BTA_AV_RCFG_DISCNTD, - BTA_AV_SUSPEND_CONT, - BTA_AV_RCFG_CFM, - BTA_AV_RCFG_OPEN, - BTA_AV_SECURITY_REJ, - BTA_AV_OPEN_RC, - BTA_AV_CHK_2ND_START, - BTA_AV_SAVE_CAPS, - BTA_AV_SET_USE_RC, - BTA_AV_CCO_CLOSE, - BTA_AV_SWITCH_ROLE, - BTA_AV_ROLE_RES, - BTA_AV_DELAY_CO, - BTA_AV_OPEN_AT_INC, - BTA_AV_OFFLOAD_REQ, - BTA_AV_OFFLOAD_RSP, - BTA_AV_NUM_SACTIONS +enum { + BTA_AV_DO_DISC, + BTA_AV_CLEANUP, + BTA_AV_FREE_SDB, + BTA_AV_CONFIG_IND, + BTA_AV_DISCONNECT_REQ, + BTA_AV_SECURITY_REQ, + BTA_AV_SECURITY_RSP, + BTA_AV_SETCONFIG_RSP, + BTA_AV_ST_RC_TIMER, + BTA_AV_STR_OPENED, + BTA_AV_SECURITY_IND, + BTA_AV_SECURITY_CFM, + BTA_AV_DO_CLOSE, + BTA_AV_CONNECT_REQ, + BTA_AV_SDP_FAILED, + BTA_AV_DISC_RESULTS, + BTA_AV_DISC_RES_AS_ACP, + BTA_AV_OPEN_FAILED, + BTA_AV_GETCAP_RESULTS, + BTA_AV_SETCONFIG_REJ, + BTA_AV_DISCOVER_REQ, + BTA_AV_CONN_FAILED, + BTA_AV_DO_START, + BTA_AV_STR_STOPPED, + BTA_AV_RECONFIG, + BTA_AV_DATA_PATH, + BTA_AV_START_OK, + BTA_AV_START_FAILED, + BTA_AV_STR_CLOSED, + BTA_AV_CLR_CONG, + BTA_AV_SUSPEND_CFM, + BTA_AV_RCFG_STR_OK, + BTA_AV_RCFG_FAILED, + BTA_AV_RCFG_CONNECT, + BTA_AV_RCFG_DISCNTD, + BTA_AV_SUSPEND_CONT, + BTA_AV_RCFG_CFM, + BTA_AV_RCFG_OPEN, + BTA_AV_SECURITY_REJ, + BTA_AV_OPEN_RC, + BTA_AV_CHK_2ND_START, + BTA_AV_SAVE_CAPS, + BTA_AV_SET_USE_RC, + BTA_AV_CCO_CLOSE, + BTA_AV_SWITCH_ROLE, + BTA_AV_ROLE_RES, + BTA_AV_DELAY_CO, + BTA_AV_OPEN_AT_INC, + BTA_AV_OFFLOAD_REQ, + BTA_AV_OFFLOAD_RSP, + BTA_AV_NUM_SACTIONS }; -#define BTA_AV_SIGNORE BTA_AV_NUM_SACTIONS - +#define BTA_AV_SIGNORE BTA_AV_NUM_SACTIONS /* state table information */ /* #define BTA_AV_SACTION_COL 0 position of actions */ -#define BTA_AV_SACTIONS 2 /* number of actions */ -#define BTA_AV_SNEXT_STATE 2 /* position of next state */ -#define BTA_AV_NUM_COLS 3 /* number of columns in state tables */ +#define BTA_AV_SACTIONS 2 /* number of actions */ +#define BTA_AV_SNEXT_STATE 2 /* position of next state */ +#define BTA_AV_NUM_COLS 3 /* number of columns in state tables */ /* state table for init state */ -static const uint8_t bta_av_sst_init[][BTA_AV_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* AP_OPEN_EVT */ {BTA_AV_DO_DISC, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* AP_CLOSE_EVT */ {BTA_AV_CLEANUP, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_SECURITY_IND_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* AVDT_DISCONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* API_OFFLOAD_START_EVT */{BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* API_OFFLOAD_START_RSP_EVT */{BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_INIT_SST } -}; +static const uint8_t bta_av_sst_init[][BTA_AV_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* AP_OPEN_EVT */ {BTA_AV_DO_DISC, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* AP_CLOSE_EVT */ {BTA_AV_CLEANUP, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* STR_SECURITY_IND_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* AVDT_DISCONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST}, + /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}}; /* state table for incoming state */ -static const uint8_t bta_av_sst_incoming[][BTA_AV_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* AP_OPEN_EVT */ {BTA_AV_OPEN_AT_INC, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* AP_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ, BTA_AV_CLOSING_SST }, -/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SETCONFIG_RSP, BTA_AV_ST_RC_TIMER, BTA_AV_INCOMING_SST }, -/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_CLEANUP, BTA_AV_INIT_SST }, -/* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_DISC_OK_EVT */ {BTA_AV_DISC_RES_AS_ACP,BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_OPEN_OK_EVT */ {BTA_AV_STR_OPENED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_CLEANUP, BTA_AV_INIT_SST }, -/* STR_CONFIG_IND_EVT */ {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* AVDT_DISCONNECT_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ, BTA_AV_CLOSING_SST }, -/* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* API_OFFLOAD_START_EVT */{BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* API_OFFLOAD_START_RSP_EVT */{BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST } -}; +static const uint8_t bta_av_sst_incoming[][BTA_AV_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* AP_OPEN_EVT */ {BTA_AV_OPEN_AT_INC, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST}, + /* AP_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ, + BTA_AV_CLOSING_SST}, + /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST}, + /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST}, + /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SETCONFIG_RSP, BTA_AV_ST_RC_TIMER, + BTA_AV_INCOMING_SST}, + /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_CLEANUP, + BTA_AV_INIT_SST}, + /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_DISC_OK_EVT */ {BTA_AV_DISC_RES_AS_ACP, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_OPEN_OK_EVT */ {BTA_AV_STR_OPENED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_CLOSE_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_CLEANUP, BTA_AV_INIT_SST}, + /* STR_CONFIG_IND_EVT */ {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST}, + /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* AVDT_DISCONNECT_EVT */ {BTA_AV_CCO_CLOSE, BTA_AV_DISCONNECT_REQ, + BTA_AV_CLOSING_SST}, + /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST}, + /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST}, + /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}}; /* state table for opening state */ -static const uint8_t bta_av_sst_opening[][BTA_AV_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* AP_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* SDP_DISC_OK_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* SDP_DISC_FAIL_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_DISC_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_GETCAP_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_OPEN_OK_EVT */ {BTA_AV_ST_RC_TIMER, BTA_AV_STR_OPENED, BTA_AV_OPEN_SST }, -/* STR_OPEN_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_CONFIG_IND_EVT */ {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, BTA_AV_INCOMING_SST }, -/* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* AVRC_TIMER_EVT */ {BTA_AV_SWITCH_ROLE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* AVDT_CONNECT_EVT */ {BTA_AV_DISCOVER_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* AVDT_DISCONNECT_EVT */ {BTA_AV_CONN_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* API_OFFLOAD_START_EVT */{BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_OPENING_SST }, -/* API_OFFLOAD_START_RSP_EVT */{BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_OPENING_SST } -}; +static const uint8_t bta_av_sst_opening[][BTA_AV_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* AP_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* SDP_DISC_OK_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* SDP_DISC_FAIL_EVT */ {BTA_AV_CONNECT_REQ, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* STR_DISC_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* STR_GETCAP_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_OPEN_OK_EVT */ {BTA_AV_ST_RC_TIMER, BTA_AV_STR_OPENED, + BTA_AV_OPEN_SST}, + /* STR_OPEN_FAIL_EVT */ {BTA_AV_OPEN_FAILED, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* STR_CLOSE_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* STR_CONFIG_IND_EVT */ {BTA_AV_CONFIG_IND, BTA_AV_SIGNORE, + BTA_AV_INCOMING_SST}, + /* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* AVRC_TIMER_EVT */ {BTA_AV_SWITCH_ROLE, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* AVDT_CONNECT_EVT */ {BTA_AV_DISCOVER_REQ, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* AVDT_DISCONNECT_EVT */ {BTA_AV_CONN_FAILED, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPENING_SST}, + /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}, + /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, + BTA_AV_OPENING_SST}}; /* state table for open state */ -static const uint8_t bta_av_sst_open[][BTA_AV_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* AP_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AP_START_EVT */ {BTA_AV_DO_START, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* AP_STOP_EVT */ {BTA_AV_STR_STOPPED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* API_RECONFIG_EVT */ {BTA_AV_RECONFIG, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* API_RC_OPEN_EVT */ {BTA_AV_SET_USE_RC, BTA_AV_OPEN_RC, BTA_AV_OPEN_SST }, -/* SRC_DATA_READY_EVT */ {BTA_AV_DATA_PATH, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_START_OK_EVT */ {BTA_AV_START_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_START_FAIL_EVT */ {BTA_AV_START_FAILED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_CLOSE_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_WRITE_CFM_EVT */ {BTA_AV_CLR_CONG, BTA_AV_DATA_PATH, BTA_AV_OPEN_SST }, -/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SUSPEND_CFM, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* AVRC_TIMER_EVT */ {BTA_AV_OPEN_RC, BTA_AV_CHK_2ND_START, BTA_AV_OPEN_SST }, -/* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* AVDT_DISCONNECT_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* API_OFFLOAD_START_EVT */{BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* API_OFFLOAD_START_RSP_EVT */{BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_OPEN_SST } -}; +static const uint8_t bta_av_sst_open[][BTA_AV_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* AP_CLOSE_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* AP_START_EVT */ {BTA_AV_DO_START, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* AP_STOP_EVT */ {BTA_AV_STR_STOPPED, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* API_RECONFIG_EVT */ {BTA_AV_RECONFIG, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* API_PROTECT_REQ_EVT */ {BTA_AV_SECURITY_REQ, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* API_PROTECT_RSP_EVT */ {BTA_AV_SECURITY_RSP, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* API_RC_OPEN_EVT */ {BTA_AV_SET_USE_RC, BTA_AV_OPEN_RC, BTA_AV_OPEN_SST}, + /* SRC_DATA_READY_EVT */ {BTA_AV_DATA_PATH, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_GETCAP_OK_EVT */ {BTA_AV_SAVE_CAPS, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_OPEN_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_OPEN_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_START_OK_EVT */ {BTA_AV_START_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_START_FAIL_EVT */ {BTA_AV_START_FAILED, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* STR_CLOSE_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_IND, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* STR_SECURITY_CFM_EVT */ {BTA_AV_SECURITY_CFM, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* STR_WRITE_CFM_EVT */ {BTA_AV_CLR_CONG, BTA_AV_DATA_PATH, + BTA_AV_OPEN_SST}, + /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SUSPEND_CFM, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* AVRC_TIMER_EVT */ {BTA_AV_OPEN_RC, BTA_AV_CHK_2ND_START, + BTA_AV_OPEN_SST}, + /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* AVDT_DISCONNECT_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* ROLE_CHANGE_EVT*/ {BTA_AV_ROLE_RES, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}, + /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, + BTA_AV_OPEN_SST}}; /* state table for reconfig state */ -static const uint8_t bta_av_sst_rcfg[][BTA_AV_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* AP_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_DISC_FAIL_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_GETCAP_FAIL_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_OPEN_OK_EVT */ {BTA_AV_RCFG_STR_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST }, -/* STR_OPEN_FAIL_EVT */ {BTA_AV_RCFG_FAILED, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_CLOSE_EVT */ {BTA_AV_RCFG_CONNECT, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_SECURITY_IND_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SUSPEND_CFM, BTA_AV_SUSPEND_CONT, BTA_AV_RCFG_SST }, -/* STR_RECONFIG_CFM_EVT */ {BTA_AV_RCFG_CFM, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* AVDT_CONNECT_EVT */ {BTA_AV_RCFG_OPEN, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* AVDT_DISCONNECT_EVT */ {BTA_AV_RCFG_DISCNTD, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* API_OFFLOAD_START_EVT */{BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_RCFG_SST }, -/* API_OFFLOAD_START_RSP_EVT */{BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_RCFG_SST } -}; +static const uint8_t bta_av_sst_rcfg[][BTA_AV_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* AP_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* SDP_DISC_OK_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* SDP_DISC_FAIL_EVT */ {BTA_AV_FREE_SDB, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* STR_DISC_OK_EVT */ {BTA_AV_DISC_RESULTS, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* STR_DISC_FAIL_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* STR_GETCAP_OK_EVT */ {BTA_AV_GETCAP_RESULTS, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* STR_GETCAP_FAIL_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* STR_OPEN_OK_EVT */ {BTA_AV_RCFG_STR_OK, BTA_AV_SIGNORE, BTA_AV_OPEN_SST}, + /* STR_OPEN_FAIL_EVT */ {BTA_AV_RCFG_FAILED, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* STR_CLOSE_EVT */ {BTA_AV_RCFG_CONNECT, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* STR_SECURITY_IND_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SUSPEND_CFM, BTA_AV_SUSPEND_CONT, + BTA_AV_RCFG_SST}, + /* STR_RECONFIG_CFM_EVT */ {BTA_AV_RCFG_CFM, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* AVDT_CONNECT_EVT */ {BTA_AV_RCFG_OPEN, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* AVDT_DISCONNECT_EVT */ {BTA_AV_RCFG_DISCNTD, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* AVDT_DELAY_RPT_EVT */ {BTA_AV_DELAY_CO, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_RCFG_SST}, + /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}, + /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, + BTA_AV_RCFG_SST}}; /* state table for closing state */ -static const uint8_t bta_av_sst_closing[][BTA_AV_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AP_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* SDP_DISC_OK_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* SDP_DISC_FAIL_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_OPEN_OK_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_OPEN_FAIL_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_REJ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AVDT_DISCONNECT_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, BTA_AV_INIT_SST }, -/* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* API_OFFLOAD_START_EVT */{BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST }, -/* API_OFFLOAD_START_RSP_EVT */{BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST } -}; +static const uint8_t bta_av_sst_closing[][BTA_AV_NUM_COLS] = { + /* Event Action 1 Action 2 Next state */ + /* AP_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* AP_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* AP_START_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* AP_STOP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* API_RECONFIG_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* API_PROTECT_REQ_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* API_PROTECT_RSP_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* API_RC_OPEN_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* SRC_DATA_READY_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* CI_SETCONFIG_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* CI_SETCONFIG_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* SDP_DISC_OK_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, BTA_AV_INIT_SST}, + /* SDP_DISC_FAIL_EVT */ {BTA_AV_SDP_FAILED, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* STR_DISC_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* STR_DISC_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_GETCAP_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_GETCAP_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_OPEN_OK_EVT */ {BTA_AV_DO_CLOSE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* STR_OPEN_FAIL_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_START_OK_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* STR_START_FAIL_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_CLOSE_EVT */ {BTA_AV_DISCONNECT_REQ, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_CONFIG_IND_EVT */ {BTA_AV_SETCONFIG_REJ, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_SECURITY_IND_EVT */ {BTA_AV_SECURITY_REJ, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_SECURITY_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_WRITE_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_SUSPEND_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* STR_RECONFIG_CFM_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* AVRC_TIMER_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* AVDT_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* AVDT_DISCONNECT_EVT */ {BTA_AV_STR_CLOSED, BTA_AV_SIGNORE, + BTA_AV_INIT_SST}, + /* ROLE_CHANGE_EVT*/ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* AVDT_DELAY_RPT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* ACP_CONNECT_EVT */ {BTA_AV_SIGNORE, BTA_AV_SIGNORE, BTA_AV_CLOSING_SST}, + /* API_OFFLOAD_START_EVT */ {BTA_AV_OFFLOAD_REQ, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}, + /* API_OFFLOAD_START_RSP_EVT */ {BTA_AV_OFFLOAD_RSP, BTA_AV_SIGNORE, + BTA_AV_CLOSING_SST}}; /* type for state table */ typedef const uint8_t (*tBTA_AV_SST_TBL)[BTA_AV_NUM_COLS]; /* state table */ -static const tBTA_AV_SST_TBL bta_av_sst_tbl[] = -{ - bta_av_sst_init, - bta_av_sst_incoming, - bta_av_sst_opening, - bta_av_sst_open, - bta_av_sst_rcfg, - bta_av_sst_closing -}; - - +static const tBTA_AV_SST_TBL bta_av_sst_tbl[] = { + bta_av_sst_init, bta_av_sst_incoming, bta_av_sst_opening, + bta_av_sst_open, bta_av_sst_rcfg, bta_av_sst_closing}; #if (BTA_AV_DEBUG == TRUE) -static const char *bta_av_sst_code(uint8_t state); +static const char* bta_av_sst_code(uint8_t state); #endif /******************************************************************************* @@ -390,17 +480,14 @@ static const char *bta_av_sst_code(uint8_t state); * Returns true if stream state machine is in reconfig state. * ******************************************************************************/ -bool bta_av_is_rcfg_sst (tBTA_AV_SCB *p_scb) -{ - bool is_rcfg_sst = false; - - if (p_scb != NULL) - { - if (p_scb->state == BTA_AV_RCFG_SST) - is_rcfg_sst = true; - } +bool bta_av_is_rcfg_sst(tBTA_AV_SCB* p_scb) { + bool is_rcfg_sst = false; + + if (p_scb != NULL) { + if (p_scb->state == BTA_AV_RCFG_SST) is_rcfg_sst = true; + } - return is_rcfg_sst; + return is_rcfg_sst; } /******************************************************************************* @@ -413,66 +500,59 @@ bool bta_av_is_rcfg_sst (tBTA_AV_SCB *p_scb) * Returns void * ******************************************************************************/ -void bta_av_ssm_execute(tBTA_AV_SCB *p_scb, uint16_t event, tBTA_AV_DATA *p_data) -{ - tBTA_AV_SST_TBL state_table; - uint8_t action; - int i, xx; - - if(p_scb == NULL) - { - /* this stream is not registered */ - APPL_TRACE_EVENT("AV channel not registered"); - return; - } - - /* In case incoming connection is for VDP, we need to swap scb. */ - /* When ACP_CONNECT_EVT was received, we put first available scb to */ - /* to Incoming state. Later, when STR_CONFIG_IND_EVT is coming, we */ - /* know if it is A2DP or VDP. */ - if ((p_scb->state == BTA_AV_INIT_SST) && (event == BTA_AV_STR_CONFIG_IND_EVT)) - { - for (xx = 0; xx < BTA_AV_NUM_STRS; xx++) - { - if (bta_av_cb.p_scb[xx]) - { - if (bta_av_cb.p_scb[xx]->state == BTA_AV_INCOMING_SST) - { - bta_av_cb.p_scb[xx]->state = BTA_AV_INIT_SST; - bta_av_cb.p_scb[xx]->coll_mask = 0; - p_scb->state = BTA_AV_INCOMING_SST; - break; - } - } +void bta_av_ssm_execute(tBTA_AV_SCB* p_scb, uint16_t event, + tBTA_AV_DATA* p_data) { + tBTA_AV_SST_TBL state_table; + uint8_t action; + int i, xx; + + if (p_scb == NULL) { + /* this stream is not registered */ + APPL_TRACE_EVENT("AV channel not registered"); + return; + } + + /* In case incoming connection is for VDP, we need to swap scb. */ + /* When ACP_CONNECT_EVT was received, we put first available scb to */ + /* to Incoming state. Later, when STR_CONFIG_IND_EVT is coming, we */ + /* know if it is A2DP or VDP. */ + if ((p_scb->state == BTA_AV_INIT_SST) && + (event == BTA_AV_STR_CONFIG_IND_EVT)) { + for (xx = 0; xx < BTA_AV_NUM_STRS; xx++) { + if (bta_av_cb.p_scb[xx]) { + if (bta_av_cb.p_scb[xx]->state == BTA_AV_INCOMING_SST) { + bta_av_cb.p_scb[xx]->state = BTA_AV_INIT_SST; + bta_av_cb.p_scb[xx]->coll_mask = 0; + p_scb->state = BTA_AV_INCOMING_SST; + break; } + } } + } #if (BTA_AV_DEBUG == TRUE) - APPL_TRACE_VERBOSE("AV Sevent(0x%x)=0x%x(%s) state=%d(%s)", - p_scb->hndl, event, bta_av_evt_code(event), p_scb->state, bta_av_sst_code(p_scb->state)); + APPL_TRACE_VERBOSE("AV Sevent(0x%x)=0x%x(%s) state=%d(%s)", p_scb->hndl, + event, bta_av_evt_code(event), p_scb->state, + bta_av_sst_code(p_scb->state)); #else - APPL_TRACE_VERBOSE("AV Sevent=0x%x state=%d", event, p_scb->state); + APPL_TRACE_VERBOSE("AV Sevent=0x%x state=%d", event, p_scb->state); #endif - /* look up the state table for the current state */ - state_table = bta_av_sst_tbl[p_scb->state]; - - event -= BTA_AV_FIRST_SSM_EVT; + /* look up the state table for the current state */ + state_table = bta_av_sst_tbl[p_scb->state]; - /* set next state */ - p_scb->state = state_table[event][BTA_AV_SNEXT_STATE]; + event -= BTA_AV_FIRST_SSM_EVT; - /* execute action functions */ - for(i=0; i< BTA_AV_SACTIONS; i++) - { - if ((action = state_table[event][i]) != BTA_AV_SIGNORE) - { - (*p_scb->p_act_tbl[action])(p_scb, p_data); - } - else - break; - } + /* set next state */ + p_scb->state = state_table[event][BTA_AV_SNEXT_STATE]; + /* execute action functions */ + for (i = 0; i < BTA_AV_SACTIONS; i++) { + if ((action = state_table[event][i]) != BTA_AV_SIGNORE) { + (*p_scb->p_act_tbl[action])(p_scb, p_data); + } else + break; + } } /******************************************************************************* @@ -485,17 +565,14 @@ void bta_av_ssm_execute(tBTA_AV_SCB *p_scb, uint16_t event, tBTA_AV_DATA *p_data * Returns true if scb is in opening state. * ******************************************************************************/ -bool bta_av_is_scb_opening (tBTA_AV_SCB *p_scb) -{ - bool is_opening = false; - - if (p_scb) - { - if (p_scb->state == BTA_AV_OPENING_SST) - is_opening = true; - } +bool bta_av_is_scb_opening(tBTA_AV_SCB* p_scb) { + bool is_opening = false; + + if (p_scb) { + if (p_scb->state == BTA_AV_OPENING_SST) is_opening = true; + } - return is_opening; + return is_opening; } /******************************************************************************* @@ -508,17 +585,14 @@ bool bta_av_is_scb_opening (tBTA_AV_SCB *p_scb) * Returns true if scb is in incoming state. * ******************************************************************************/ -bool bta_av_is_scb_incoming (tBTA_AV_SCB *p_scb) -{ - bool is_incoming = false; - - if (p_scb) - { - if (p_scb->state == BTA_AV_INCOMING_SST) - is_incoming = true; - } +bool bta_av_is_scb_incoming(tBTA_AV_SCB* p_scb) { + bool is_incoming = false; - return is_incoming; + if (p_scb) { + if (p_scb->state == BTA_AV_INCOMING_SST) is_incoming = true; + } + + return is_incoming; } /******************************************************************************* @@ -531,12 +605,10 @@ bool bta_av_is_scb_incoming (tBTA_AV_SCB *p_scb) * Returns None * ******************************************************************************/ -void bta_av_set_scb_sst_init (tBTA_AV_SCB *p_scb) -{ - if (p_scb) - { - p_scb->state = BTA_AV_INIT_SST; - } +void bta_av_set_scb_sst_init(tBTA_AV_SCB* p_scb) { + if (p_scb) { + p_scb->state = BTA_AV_INIT_SST; + } } /******************************************************************************* @@ -549,17 +621,14 @@ void bta_av_set_scb_sst_init (tBTA_AV_SCB *p_scb) * Returns true if scb is in incoming state. * ******************************************************************************/ -bool bta_av_is_scb_init (tBTA_AV_SCB *p_scb) -{ - bool is_init = false; - - if (p_scb) - { - if (p_scb->state == BTA_AV_INIT_SST) - is_init = true; - } +bool bta_av_is_scb_init(tBTA_AV_SCB* p_scb) { + bool is_init = false; - return is_init; + if (p_scb) { + if (p_scb->state == BTA_AV_INIT_SST) is_init = true; + } + + return is_init; } /******************************************************************************* @@ -572,12 +641,10 @@ bool bta_av_is_scb_init (tBTA_AV_SCB *p_scb) * Returns None * ******************************************************************************/ -void bta_av_set_scb_sst_incoming (tBTA_AV_SCB *p_scb) -{ - if (p_scb) - { - p_scb->state = BTA_AV_INCOMING_SST; - } +void bta_av_set_scb_sst_incoming(tBTA_AV_SCB* p_scb) { + if (p_scb) { + p_scb->state = BTA_AV_INCOMING_SST; + } } /***************************************************************************** @@ -593,18 +660,23 @@ void bta_av_set_scb_sst_incoming (tBTA_AV_SCB *p_scb) * Returns char * * ******************************************************************************/ -static const char *bta_av_sst_code(uint8_t state) -{ - switch(state) - { - case BTA_AV_INIT_SST: return "INIT"; - case BTA_AV_INCOMING_SST: return "INCOMING"; - case BTA_AV_OPENING_SST: return "OPENING"; - case BTA_AV_OPEN_SST: return "OPEN"; - case BTA_AV_RCFG_SST: return "RCFG"; - case BTA_AV_CLOSING_SST: return "CLOSING"; - default: return "unknown"; - } +static const char* bta_av_sst_code(uint8_t state) { + switch (state) { + case BTA_AV_INIT_SST: + return "INIT"; + case BTA_AV_INCOMING_SST: + return "INCOMING"; + case BTA_AV_OPENING_SST: + return "OPENING"; + case BTA_AV_OPEN_SST: + return "OPEN"; + case BTA_AV_RCFG_SST: + return "RCFG"; + case BTA_AV_CLOSING_SST: + return "CLOSING"; + default: + return "unknown"; + } } #endif diff --git a/system/bta/closure/bta_closure.cc b/system/bta/closure/bta_closure.cc index 0d3745048ad..19c0c3e8509 100644 --- a/system/bta/closure/bta_closure.cc +++ b/system/bta/closure/bta_closure.cc @@ -54,7 +54,7 @@ void bta_closure_init(tBTA_SYS_REGISTER registerer, tBTA_SYS_SENDMSG sender) { bta_closure_sys_sendmsg = sender; } -bool bta_closure_execute(BT_HDR *p_msg) { +bool bta_closure_execute(BT_HDR* p_msg) { if (p_msg->event != BTA_CLOSURE_EXECUTE_EVT) { APPL_TRACE_ERROR("%s: don't know how to execute event type %d", __func__, p_msg->event); @@ -84,14 +84,14 @@ bool bta_closure_execute(BT_HDR *p_msg) { * for how to handle dynamic memory ownership/smart pointers with base::Owned(), * base::Passed(), base::ConstRef() and others. */ -void do_in_bta_thread(const tracked_objects::Location &from_here, - const base::Closure &task) { +void do_in_bta_thread(const tracked_objects::Location& from_here, + const base::Closure& task) { PendingTask pending_task(from_here, task, TimeTicks(), true); task_queue.push(std::move(pending_task)); - tBTA_CLOSURE_EXECUTE *p_msg = - (tBTA_CLOSURE_EXECUTE *)osi_malloc(sizeof(tBTA_CLOSURE_EXECUTE)); + tBTA_CLOSURE_EXECUTE* p_msg = + (tBTA_CLOSURE_EXECUTE*)osi_malloc(sizeof(tBTA_CLOSURE_EXECUTE)); APPL_TRACE_API("%s", __func__); diff --git a/system/bta/closure/bta_closure_int.h b/system/bta/closure/bta_closure_int.h index 25c7e8edf80..39aaab3baed 100644 --- a/system/bta/closure/bta_closure_int.h +++ b/system/bta/closure/bta_closure_int.h @@ -33,7 +33,7 @@ extern "C" { * override system methods for tests. */ void bta_closure_init(tBTA_SYS_REGISTER registerer, tBTA_SYS_SENDMSG sender); -bool bta_closure_execute(BT_HDR *p_msg); +bool bta_closure_execute(BT_HDR* p_msg); #ifdef __cplusplus } diff --git a/system/bta/dm/bta_dm_act.cc b/system/bta/dm/bta_dm_act.cc index 462a4898899..109b9ab9a07 100644 --- a/system/bta/dm/bta_dm_act.cc +++ b/system/bta/dm/bta_dm_act.cc @@ -28,6 +28,7 @@ #include #include +#include "bt_common.h" #include "bt_target.h" #include "bt_types.h" #include "bta_api.h" @@ -38,8 +39,7 @@ #include "btm_api.h" #include "btm_int.h" #include "btu.h" -#include "gap_api.h" /* For GAP_BleReadPeerPrefConnParams */ -#include "bt_common.h" +#include "gap_api.h" /* For GAP_BleReadPeerPrefConnParams */ #include "l2c_api.h" #include "osi/include/log.h" #include "osi/include/osi.h" @@ -50,67 +50,79 @@ #include "gap_api.h" #endif -static void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, uint8_t *p_eir); -static void bta_dm_inq_cmpl_cb (void * p_result); -static void bta_dm_service_search_remname_cback(BD_ADDR bd_addr, DEV_CLASS dc, BD_NAME bd_name); -static void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name); -static void bta_dm_find_services ( BD_ADDR bd_addr); +static void bta_dm_inq_results_cb(tBTM_INQ_RESULTS* p_inq, uint8_t* p_eir); +static void bta_dm_inq_cmpl_cb(void* p_result); +static void bta_dm_service_search_remname_cback(BD_ADDR bd_addr, DEV_CLASS dc, + BD_NAME bd_name); +static void bta_dm_remname_cback(tBTM_REMOTE_DEV_NAME* p_remote_name); +static void bta_dm_find_services(BD_ADDR bd_addr); static void bta_dm_discover_next_device(void); -static void bta_dm_sdp_callback (uint16_t sdp_status); -static uint8_t bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, - uint8_t *service_name, uint8_t service_id, bool is_originator); -static uint8_t bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, bool min_16_digit); -static uint8_t bta_dm_new_link_key_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, - LINK_KEY key, uint8_t key_type); -static uint8_t bta_dm_authentication_complete_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, - BD_NAME bd_name, int result); +static void bta_dm_sdp_callback(uint16_t sdp_status); +static uint8_t bta_dm_authorize_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, + BD_NAME bd_name, uint8_t* service_name, + uint8_t service_id, bool is_originator); +static uint8_t bta_dm_pin_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, + BD_NAME bd_name, bool min_16_digit); +static uint8_t bta_dm_new_link_key_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, + BD_NAME bd_name, LINK_KEY key, + uint8_t key_type); +static uint8_t bta_dm_authentication_complete_cback(BD_ADDR bd_addr, + DEV_CLASS dev_class, + BD_NAME bd_name, + int result); static void bta_dm_local_name_cback(BD_ADDR bd_addr); static bool bta_dm_check_av(uint16_t event); -static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data); +static void bta_dm_bl_change_cback(tBTM_BL_EVENT_DATA* p_data); -static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app_id, BD_ADDR peer_addr); +static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr); /* Extended Inquiry Response */ -static uint8_t bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data); +static uint8_t bta_dm_sp_cback(tBTM_SP_EVT event, tBTM_SP_EVT_DATA* p_data); -static void bta_dm_set_eir (char *local_name); +static void bta_dm_set_eir(char* local_name); -static void bta_dm_eir_search_services( tBTM_INQ_RESULTS *p_result, - tBTA_SERVICE_MASK *p_services_to_search, - tBTA_SERVICE_MASK *p_services_found); +static void bta_dm_eir_search_services(tBTM_INQ_RESULTS* p_result, + tBTA_SERVICE_MASK* p_services_to_search, + tBTA_SERVICE_MASK* p_services_found); -static void bta_dm_search_timer_cback(void *data); -static void bta_dm_disable_conn_down_timer_cback(void *data); -static void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app_id, BD_ADDR peer_addr); +static void bta_dm_search_timer_cback(void* data); +static void bta_dm_disable_conn_down_timer_cback(void* data); +static void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr); static void bta_dm_adjust_roles(bool delay_role_switch); -static char *bta_dm_get_remname(void); +static char* bta_dm_get_remname(void); static void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result); -static bool bta_dm_read_remote_device_name (BD_ADDR bd_addr,tBT_TRANSPORT transport); +static bool bta_dm_read_remote_device_name(BD_ADDR bd_addr, + tBT_TRANSPORT transport); static void bta_dm_discover_device(BD_ADDR remote_bd_addr); -static void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status ); +static void bta_dm_sys_hw_cback(tBTA_SYS_HW_EVT status); static void bta_dm_disable_search_and_disc(void); #if (BLE_INCLUDED == TRUE) - #if (SMP_INCLUDED == TRUE) -static uint8_t bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT_DATA *p_data); - #endif -static void bta_dm_ble_id_key_cback (uint8_t key_type, tBTM_BLE_LOCAL_KEYS *p_key); - #if (BTA_GATT_INCLUDED == TRUE) +#if (SMP_INCLUDED == TRUE) +static uint8_t bta_dm_ble_smp_cback(tBTM_LE_EVT event, BD_ADDR bda, + tBTM_LE_EVT_DATA* p_data); +#endif +static void bta_dm_ble_id_key_cback(uint8_t key_type, + tBTM_BLE_LOCAL_KEYS* p_key); +#if (BTA_GATT_INCLUDED == TRUE) static void bta_dm_gattc_register(void); static void btm_dm_start_gatt_discovery(BD_ADDR bd_addr); static void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr); -static void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data); +static void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC* p_data); extern tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void); - #endif +#endif #if (BLE_VND_INCLUDED == TRUE) static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result); #endif #ifndef BTA_DM_BLE_ADV_CHNL_MAP -#define BTA_DM_BLE_ADV_CHNL_MAP (BTM_BLE_ADV_CHNL_37|BTM_BLE_ADV_CHNL_38|BTM_BLE_ADV_CHNL_39) +#define BTA_DM_BLE_ADV_CHNL_MAP \ + (BTM_BLE_ADV_CHNL_37 | BTM_BLE_ADV_CHNL_38 | BTM_BLE_ADV_CHNL_39) #endif #endif @@ -136,100 +148,98 @@ static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result); static void bta_dm_reset_sec_dev_pending(BD_ADDR remote_bd_addr); static void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr); -static void bta_dm_observe_results_cb(tBTM_INQ_RESULTS *p_inq, uint8_t *p_eir); -static void bta_dm_observe_cmpl_cb(void * p_result); -static void bta_dm_delay_role_switch_cback(void *data); -static void bta_dm_disable_timer_cback(void *data); - - -const uint16_t bta_service_id_to_uuid_lkup_tbl [BTA_MAX_SERVICE_ID] = -{ - UUID_SERVCLASS_PNP_INFORMATION, /* Reserved */ - UUID_SERVCLASS_SERIAL_PORT, /* BTA_SPP_SERVICE_ID */ - UUID_SERVCLASS_DIALUP_NETWORKING, /* BTA_DUN_SERVICE_ID */ - UUID_SERVCLASS_AUDIO_SOURCE, /* BTA_A2DP_SOURCE_SERVICE_ID */ - UUID_SERVCLASS_LAN_ACCESS_USING_PPP, /* BTA_LAP_SERVICE_ID */ - UUID_SERVCLASS_HEADSET, /* BTA_HSP_HS_SERVICE_ID */ - UUID_SERVCLASS_HF_HANDSFREE, /* BTA_HFP_HS_SERVICE_ID */ - UUID_SERVCLASS_OBEX_OBJECT_PUSH, /* BTA_OPP_SERVICE_ID */ - UUID_SERVCLASS_OBEX_FILE_TRANSFER, /* BTA_FTP_SERVICE_ID */ - UUID_SERVCLASS_CORDLESS_TELEPHONY, /* BTA_CTP_SERVICE_ID */ - UUID_SERVCLASS_INTERCOM, /* BTA_ICP_SERVICE_ID */ - UUID_SERVCLASS_IRMC_SYNC, /* BTA_SYNC_SERVICE_ID */ - UUID_SERVCLASS_DIRECT_PRINTING, /* BTA_BPP_SERVICE_ID */ - UUID_SERVCLASS_IMAGING_RESPONDER, /* BTA_BIP_SERVICE_ID */ - UUID_SERVCLASS_PANU, /* BTA_PANU_SERVICE_ID */ - UUID_SERVCLASS_NAP, /* BTA_NAP_SERVICE_ID */ - UUID_SERVCLASS_GN, /* BTA_GN_SERVICE_ID */ - UUID_SERVCLASS_SAP, /* BTA_SAP_SERVICE_ID */ - UUID_SERVCLASS_AUDIO_SINK, /* BTA_A2DP_SERVICE_ID */ - UUID_SERVCLASS_AV_REMOTE_CONTROL, /* BTA_AVRCP_SERVICE_ID */ - UUID_SERVCLASS_HUMAN_INTERFACE, /* BTA_HID_SERVICE_ID */ - UUID_SERVCLASS_VIDEO_SINK, /* BTA_VDP_SERVICE_ID */ - UUID_SERVCLASS_PBAP_PSE, /* BTA_PBAP_SERVICE_ID */ - UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY, /* BTA_HSP_SERVICE_ID */ - UUID_SERVCLASS_AG_HANDSFREE, /* BTA_HFP_SERVICE_ID */ - UUID_SERVCLASS_MESSAGE_ACCESS, /* BTA_MAP_SERVICE_ID */ - UUID_SERVCLASS_MESSAGE_NOTIFICATION, /* BTA_MN_SERVICE_ID */ - UUID_SERVCLASS_HDP_PROFILE, /* BTA_HDP_SERVICE_ID */ - UUID_SERVCLASS_PBAP_PCE /* BTA_PCE_SERVICE_ID */ +static void bta_dm_observe_results_cb(tBTM_INQ_RESULTS* p_inq, uint8_t* p_eir); +static void bta_dm_observe_cmpl_cb(void* p_result); +static void bta_dm_delay_role_switch_cback(void* data); +static void bta_dm_disable_timer_cback(void* data); + +const uint16_t bta_service_id_to_uuid_lkup_tbl[BTA_MAX_SERVICE_ID] = { + UUID_SERVCLASS_PNP_INFORMATION, /* Reserved */ + UUID_SERVCLASS_SERIAL_PORT, /* BTA_SPP_SERVICE_ID */ + UUID_SERVCLASS_DIALUP_NETWORKING, /* BTA_DUN_SERVICE_ID */ + UUID_SERVCLASS_AUDIO_SOURCE, /* BTA_A2DP_SOURCE_SERVICE_ID */ + UUID_SERVCLASS_LAN_ACCESS_USING_PPP, /* BTA_LAP_SERVICE_ID */ + UUID_SERVCLASS_HEADSET, /* BTA_HSP_HS_SERVICE_ID */ + UUID_SERVCLASS_HF_HANDSFREE, /* BTA_HFP_HS_SERVICE_ID */ + UUID_SERVCLASS_OBEX_OBJECT_PUSH, /* BTA_OPP_SERVICE_ID */ + UUID_SERVCLASS_OBEX_FILE_TRANSFER, /* BTA_FTP_SERVICE_ID */ + UUID_SERVCLASS_CORDLESS_TELEPHONY, /* BTA_CTP_SERVICE_ID */ + UUID_SERVCLASS_INTERCOM, /* BTA_ICP_SERVICE_ID */ + UUID_SERVCLASS_IRMC_SYNC, /* BTA_SYNC_SERVICE_ID */ + UUID_SERVCLASS_DIRECT_PRINTING, /* BTA_BPP_SERVICE_ID */ + UUID_SERVCLASS_IMAGING_RESPONDER, /* BTA_BIP_SERVICE_ID */ + UUID_SERVCLASS_PANU, /* BTA_PANU_SERVICE_ID */ + UUID_SERVCLASS_NAP, /* BTA_NAP_SERVICE_ID */ + UUID_SERVCLASS_GN, /* BTA_GN_SERVICE_ID */ + UUID_SERVCLASS_SAP, /* BTA_SAP_SERVICE_ID */ + UUID_SERVCLASS_AUDIO_SINK, /* BTA_A2DP_SERVICE_ID */ + UUID_SERVCLASS_AV_REMOTE_CONTROL, /* BTA_AVRCP_SERVICE_ID */ + UUID_SERVCLASS_HUMAN_INTERFACE, /* BTA_HID_SERVICE_ID */ + UUID_SERVCLASS_VIDEO_SINK, /* BTA_VDP_SERVICE_ID */ + UUID_SERVCLASS_PBAP_PSE, /* BTA_PBAP_SERVICE_ID */ + UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY, /* BTA_HSP_SERVICE_ID */ + UUID_SERVCLASS_AG_HANDSFREE, /* BTA_HFP_SERVICE_ID */ + UUID_SERVCLASS_MESSAGE_ACCESS, /* BTA_MAP_SERVICE_ID */ + UUID_SERVCLASS_MESSAGE_NOTIFICATION, /* BTA_MN_SERVICE_ID */ + UUID_SERVCLASS_HDP_PROFILE, /* BTA_HDP_SERVICE_ID */ + UUID_SERVCLASS_PBAP_PCE /* BTA_PCE_SERVICE_ID */ #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - ,UUID_PROTOCOL_ATT /* BTA_GATT_SERVICE_ID */ + , + UUID_PROTOCOL_ATT /* BTA_GATT_SERVICE_ID */ #endif }; /* - * NOTE : The number of element in bta_service_id_to_btm_srv_id_lkup_tbl should be matching with + * NOTE : The number of element in bta_service_id_to_btm_srv_id_lkup_tbl should + * be matching with * the value BTA_MAX_SERVICE_ID in bta_api.h * - * i.e., If you add new Service ID for BTA, the correct security ID of the new service - * from Security service definitions (btm_api.h) should be added to this lookup table. + * i.e., If you add new Service ID for BTA, the correct security ID of + * the new service + * from Security service definitions (btm_api.h) should be added to + * this lookup table. */ -const uint32_t bta_service_id_to_btm_srv_id_lkup_tbl [BTA_MAX_SERVICE_ID] = -{ - 0, /* Reserved */ - BTM_SEC_SERVICE_SERIAL_PORT, /* BTA_SPP_SERVICE_ID */ - BTM_SEC_SERVICE_DUN, /* BTA_DUN_SERVICE_ID */ - BTM_SEC_SERVICE_AVDTP, /* BTA_AUDIO_SOURCE_SERVICE_ID */ - BTM_SEC_SERVICE_LAN_ACCESS, /* BTA_LAP_SERVICE_ID */ - BTM_SEC_SERVICE_HEADSET_AG, /* BTA_HSP_SERVICE_ID */ - BTM_SEC_SERVICE_AG_HANDSFREE, /* BTA_HFP_SERVICE_ID */ - BTM_SEC_SERVICE_OBEX, /* BTA_OPP_SERVICE_ID */ - BTM_SEC_SERVICE_OBEX_FTP, /* BTA_FTP_SERVICE_ID */ - BTM_SEC_SERVICE_CORDLESS, /* BTA_CTP_SERVICE_ID */ - BTM_SEC_SERVICE_INTERCOM, /* BTA_ICP_SERVICE_ID */ - BTM_SEC_SERVICE_IRMC_SYNC, /* BTA_SYNC_SERVICE_ID */ - BTM_SEC_SERVICE_BPP_JOB, /* BTA_BPP_SERVICE_ID */ - BTM_SEC_SERVICE_BIP, /* BTA_BIP_SERVICE_ID */ - BTM_SEC_SERVICE_BNEP_PANU, /* BTA_PANU_SERVICE_ID */ - BTM_SEC_SERVICE_BNEP_NAP, /* BTA_NAP_SERVICE_ID */ - BTM_SEC_SERVICE_BNEP_GN, /* BTA_GN_SERVICE_ID */ - BTM_SEC_SERVICE_SAP, /* BTA_SAP_SERVICE_ID */ - BTM_SEC_SERVICE_AVDTP, /* BTA_A2DP_SERVICE_ID */ - BTM_SEC_SERVICE_AVCTP, /* BTA_AVRCP_SERVICE_ID */ - BTM_SEC_SERVICE_HIDH_SEC_CTRL, /* BTA_HID_SERVICE_ID */ - BTM_SEC_SERVICE_AVDTP, /* BTA_VDP_SERVICE_ID */ - BTM_SEC_SERVICE_PBAP, /* BTA_PBAP_SERVICE_ID */ - BTM_SEC_SERVICE_HEADSET, /* BTA_HSP_HS_SERVICE_ID */ - BTM_SEC_SERVICE_HF_HANDSFREE, /* BTA_HFP_HS_SERVICE_ID */ - BTM_SEC_SERVICE_MAP, /* BTA_MAP_SERVICE_ID */ - BTM_SEC_SERVICE_MAP, /* BTA_MN_SERVICE_ID */ - BTM_SEC_SERVICE_HDP_SNK, /* BTA_HDP_SERVICE_ID */ - BTM_SEC_SERVICE_PBAP /* BTA_PCE_SERVICE_ID */ +const uint32_t bta_service_id_to_btm_srv_id_lkup_tbl[BTA_MAX_SERVICE_ID] = { + 0, /* Reserved */ + BTM_SEC_SERVICE_SERIAL_PORT, /* BTA_SPP_SERVICE_ID */ + BTM_SEC_SERVICE_DUN, /* BTA_DUN_SERVICE_ID */ + BTM_SEC_SERVICE_AVDTP, /* BTA_AUDIO_SOURCE_SERVICE_ID */ + BTM_SEC_SERVICE_LAN_ACCESS, /* BTA_LAP_SERVICE_ID */ + BTM_SEC_SERVICE_HEADSET_AG, /* BTA_HSP_SERVICE_ID */ + BTM_SEC_SERVICE_AG_HANDSFREE, /* BTA_HFP_SERVICE_ID */ + BTM_SEC_SERVICE_OBEX, /* BTA_OPP_SERVICE_ID */ + BTM_SEC_SERVICE_OBEX_FTP, /* BTA_FTP_SERVICE_ID */ + BTM_SEC_SERVICE_CORDLESS, /* BTA_CTP_SERVICE_ID */ + BTM_SEC_SERVICE_INTERCOM, /* BTA_ICP_SERVICE_ID */ + BTM_SEC_SERVICE_IRMC_SYNC, /* BTA_SYNC_SERVICE_ID */ + BTM_SEC_SERVICE_BPP_JOB, /* BTA_BPP_SERVICE_ID */ + BTM_SEC_SERVICE_BIP, /* BTA_BIP_SERVICE_ID */ + BTM_SEC_SERVICE_BNEP_PANU, /* BTA_PANU_SERVICE_ID */ + BTM_SEC_SERVICE_BNEP_NAP, /* BTA_NAP_SERVICE_ID */ + BTM_SEC_SERVICE_BNEP_GN, /* BTA_GN_SERVICE_ID */ + BTM_SEC_SERVICE_SAP, /* BTA_SAP_SERVICE_ID */ + BTM_SEC_SERVICE_AVDTP, /* BTA_A2DP_SERVICE_ID */ + BTM_SEC_SERVICE_AVCTP, /* BTA_AVRCP_SERVICE_ID */ + BTM_SEC_SERVICE_HIDH_SEC_CTRL, /* BTA_HID_SERVICE_ID */ + BTM_SEC_SERVICE_AVDTP, /* BTA_VDP_SERVICE_ID */ + BTM_SEC_SERVICE_PBAP, /* BTA_PBAP_SERVICE_ID */ + BTM_SEC_SERVICE_HEADSET, /* BTA_HSP_HS_SERVICE_ID */ + BTM_SEC_SERVICE_HF_HANDSFREE, /* BTA_HFP_HS_SERVICE_ID */ + BTM_SEC_SERVICE_MAP, /* BTA_MAP_SERVICE_ID */ + BTM_SEC_SERVICE_MAP, /* BTA_MN_SERVICE_ID */ + BTM_SEC_SERVICE_HDP_SNK, /* BTA_HDP_SERVICE_ID */ + BTM_SEC_SERVICE_PBAP /* BTA_PCE_SERVICE_ID */ #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - ,BTM_SEC_SERVICE_ATT /* BTA_GATT_SERVICE_ID */ + , + BTM_SEC_SERVICE_ATT /* BTA_GATT_SERVICE_ID */ #endif }; /* bta security callback */ -const tBTM_APPL_INFO bta_security = -{ - &bta_dm_authorize_cback, - &bta_dm_pin_cback, - &bta_dm_new_link_key_cback, - &bta_dm_authentication_complete_cback, - &bta_dm_bond_cancel_complete_cback, +const tBTM_APPL_INFO bta_security = { + &bta_dm_authorize_cback, &bta_dm_pin_cback, &bta_dm_new_link_key_cback, + &bta_dm_authentication_complete_cback, &bta_dm_bond_cancel_complete_cback, #if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) &bta_dm_sp_cback #else @@ -237,18 +247,20 @@ const tBTM_APPL_INFO bta_security = #endif #if (BLE_INCLUDED == TRUE) #if (SMP_INCLUDED == TRUE) - ,&bta_dm_ble_smp_cback + , + &bta_dm_ble_smp_cback #endif - ,&bta_dm_ble_id_key_cback + , + &bta_dm_ble_id_key_cback #endif }; -#define MAX_DISC_RAW_DATA_BUF (4096) +#define MAX_DISC_RAW_DATA_BUF (4096) uint8_t g_disc_raw_data_buf[MAX_DISC_RAW_DATA_BUF]; extern DEV_CLASS local_device_default_class; -extern fixed_queue_t *btu_bta_alarm_queue; +extern fixed_queue_t* btu_bta_alarm_queue; /******************************************************************************* * @@ -260,38 +272,39 @@ extern fixed_queue_t *btu_bta_alarm_queue; * Returns void * ******************************************************************************/ -void bta_dm_enable(tBTA_DM_MSG *p_data) -{ - tBTA_DM_ENABLE enable_event; - - /* if already in use, return an error */ - if( bta_dm_cb.is_bta_dm_active == true ) - { - APPL_TRACE_WARNING("%s Device already started by another application", __func__); - memset(&enable_event, 0, sizeof(tBTA_DM_ENABLE)); - enable_event.status = BTA_FAILURE; - if (p_data->enable.p_sec_cback != NULL) - p_data->enable.p_sec_cback(BTA_DM_ENABLE_EVT, (tBTA_DM_SEC *)&enable_event); - return; - } +void bta_dm_enable(tBTA_DM_MSG* p_data) { + tBTA_DM_ENABLE enable_event; + + /* if already in use, return an error */ + if (bta_dm_cb.is_bta_dm_active == true) { + APPL_TRACE_WARNING("%s Device already started by another application", + __func__); + memset(&enable_event, 0, sizeof(tBTA_DM_ENABLE)); + enable_event.status = BTA_FAILURE; + if (p_data->enable.p_sec_cback != NULL) + p_data->enable.p_sec_cback(BTA_DM_ENABLE_EVT, + (tBTA_DM_SEC*)&enable_event); + return; + } - /* first, register our callback to SYS HW manager */ - bta_sys_hw_register( BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback ); + /* first, register our callback to SYS HW manager */ + bta_sys_hw_register(BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback); - /* make sure security callback is saved - if no callback, do not erase the previous one, - it could be an error recovery mechanism */ - if( p_data->enable.p_sec_cback != NULL ) + /* make sure security callback is saved - if no callback, do not erase the + previous one, + it could be an error recovery mechanism */ + if (p_data->enable.p_sec_cback != NULL) bta_dm_cb.p_sec_cback = p_data->enable.p_sec_cback; - /* notify BTA DM is now active */ - bta_dm_cb.is_bta_dm_active = true; + /* notify BTA DM is now active */ + bta_dm_cb.is_bta_dm_active = true; - /* send a message to BTA SYS */ - tBTA_SYS_HW_MSG *sys_enable_event = - (tBTA_SYS_HW_MSG *)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); - sys_enable_event->hdr.event = BTA_SYS_API_ENABLE_EVT; - sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH; + /* send a message to BTA SYS */ + tBTA_SYS_HW_MSG* sys_enable_event = + (tBTA_SYS_HW_MSG*)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); + sys_enable_event->hdr.event = BTA_SYS_API_ENABLE_EVT; + sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH; - bta_sys_sendmsg(sys_enable_event); + bta_sys_sendmsg(sys_enable_event); } /******************************************************************************* @@ -304,16 +317,15 @@ void bta_dm_enable(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_init_cb(void) -{ - memset(&bta_dm_cb, 0, sizeof(bta_dm_cb)); - bta_dm_cb.disable_timer = alarm_new("bta_dm.disable_timer"); - bta_dm_cb.switch_delay_timer = alarm_new("bta_dm.switch_delay_timer"); - for (size_t i = 0; i < BTA_DM_NUM_PM_TIMER; i++) { - for (size_t j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) { - bta_dm_cb.pm_timer[i].timer[j] = alarm_new("bta_dm.pm_timer"); - } - } +void bta_dm_init_cb(void) { + memset(&bta_dm_cb, 0, sizeof(bta_dm_cb)); + bta_dm_cb.disable_timer = alarm_new("bta_dm.disable_timer"); + bta_dm_cb.switch_delay_timer = alarm_new("bta_dm.switch_delay_timer"); + for (size_t i = 0; i < BTA_DM_NUM_PM_TIMER; i++) { + for (size_t j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) { + bta_dm_cb.pm_timer[i].timer[j] = alarm_new("bta_dm.pm_timer"); + } + } } /******************************************************************************* @@ -326,20 +338,19 @@ void bta_dm_init_cb(void) * Returns void * ******************************************************************************/ -void bta_dm_deinit_cb(void) -{ - /* - * TODO: Should alarm_free() the bta_dm_cb timers during graceful - * shutdown. - */ - alarm_free(bta_dm_cb.disable_timer); - alarm_free(bta_dm_cb.switch_delay_timer); - for (size_t i = 0; i < BTA_DM_NUM_PM_TIMER; i++) { - for (size_t j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) { - alarm_free(bta_dm_cb.pm_timer[i].timer[j]); - } - } - memset(&bta_dm_cb, 0, sizeof(bta_dm_cb)); +void bta_dm_deinit_cb(void) { + /* + * TODO: Should alarm_free() the bta_dm_cb timers during graceful + * shutdown. + */ + alarm_free(bta_dm_cb.disable_timer); + alarm_free(bta_dm_cb.switch_delay_timer); + for (size_t i = 0; i < BTA_DM_NUM_PM_TIMER; i++) { + for (size_t j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) { + alarm_free(bta_dm_cb.pm_timer[i].timer[j]); + } + } + memset(&bta_dm_cb, 0, sizeof(bta_dm_cb)); } /******************************************************************************* @@ -352,130 +363,130 @@ void bta_dm_deinit_cb(void) * Returns void * ******************************************************************************/ -static void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status ) -{ - DEV_CLASS dev_class; - tBTA_DM_SEC_CBACK *temp_cback; +static void bta_dm_sys_hw_cback(tBTA_SYS_HW_EVT status) { + DEV_CLASS dev_class; + tBTA_DM_SEC_CBACK* temp_cback; #if (BLE_INCLUDED == TRUE) - uint8_t key_mask = 0; - BT_OCTET16 er; - tBTA_BLE_LOCAL_ID_KEYS id_key; + uint8_t key_mask = 0; + BT_OCTET16 er; + tBTA_BLE_LOCAL_ID_KEYS id_key; #endif - APPL_TRACE_DEBUG("%s with event: %i", __func__, status); - - /* On H/W error evt, report to the registered DM application callback */ - if (status == BTA_SYS_HW_ERROR_EVT) { - if( bta_dm_cb.p_sec_cback != NULL ) - bta_dm_cb.p_sec_cback(BTA_DM_HW_ERROR_EVT, NULL); - return; - } - - if( status == BTA_SYS_HW_OFF_EVT ) - { - if( bta_dm_cb.p_sec_cback != NULL ) - bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL); - - /* reinitialize the control block */ - bta_dm_deinit_cb(); + APPL_TRACE_DEBUG("%s with event: %i", __func__, status); - /* hw is ready, go on with BTA DM initialization */ - alarm_free(bta_dm_search_cb.search_timer); - alarm_free(bta_dm_search_cb.gatt_close_timer); - memset(&bta_dm_search_cb, 0, sizeof(bta_dm_search_cb)); + /* On H/W error evt, report to the registered DM application callback */ + if (status == BTA_SYS_HW_ERROR_EVT) { + if (bta_dm_cb.p_sec_cback != NULL) + bta_dm_cb.p_sec_cback(BTA_DM_HW_ERROR_EVT, NULL); + return; + } + + if (status == BTA_SYS_HW_OFF_EVT) { + if (bta_dm_cb.p_sec_cback != NULL) + bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL); + + /* reinitialize the control block */ + bta_dm_deinit_cb(); + + /* hw is ready, go on with BTA DM initialization */ + alarm_free(bta_dm_search_cb.search_timer); + alarm_free(bta_dm_search_cb.gatt_close_timer); + memset(&bta_dm_search_cb, 0, sizeof(bta_dm_search_cb)); + + /* unregister from SYS */ + bta_sys_hw_unregister(BTA_SYS_HW_BLUETOOTH); + /* notify BTA DM is now unactive */ + bta_dm_cb.is_bta_dm_active = false; + } else if (status == BTA_SYS_HW_ON_EVT) { + /* FIXME: We should not unregister as the SYS shall invoke this callback on + * a H/W error. + * We need to revisit when this platform has more than one BLuetooth H/W chip + */ + // bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH); + + /* save security callback */ + temp_cback = bta_dm_cb.p_sec_cback; + /* make sure the control block is properly initialized */ + bta_dm_init_cb(); + /* and retrieve the callback */ + bta_dm_cb.p_sec_cback = temp_cback; + bta_dm_cb.is_bta_dm_active = true; - /* unregister from SYS */ - bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH ); - /* notify BTA DM is now unactive */ - bta_dm_cb.is_bta_dm_active = false; - } - else - if( status == BTA_SYS_HW_ON_EVT ) - { - /* FIXME: We should not unregister as the SYS shall invoke this callback on a H/W error. - * We need to revisit when this platform has more than one BLuetooth H/W chip */ - //bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH); - - /* save security callback */ - temp_cback = bta_dm_cb.p_sec_cback; - /* make sure the control block is properly initialized */ - bta_dm_init_cb(); - /* and retrieve the callback */ - bta_dm_cb.p_sec_cback=temp_cback; - bta_dm_cb.is_bta_dm_active = true; - - /* hw is ready, go on with BTA DM initialization */ - alarm_free(bta_dm_search_cb.search_timer); - alarm_free(bta_dm_search_cb.gatt_close_timer); - memset(&bta_dm_search_cb, 0, sizeof(bta_dm_search_cb)); - /* - * TODO: Should alarm_free() the bta_dm_search_cb timers during - * graceful shutdown. - */ - bta_dm_search_cb.search_timer = - alarm_new("bta_dm_search.search_timer"); - bta_dm_search_cb.gatt_close_timer = - alarm_new("bta_dm_search.gatt_close_timer"); + /* hw is ready, go on with BTA DM initialization */ + alarm_free(bta_dm_search_cb.search_timer); + alarm_free(bta_dm_search_cb.gatt_close_timer); + memset(&bta_dm_search_cb, 0, sizeof(bta_dm_search_cb)); + /* + * TODO: Should alarm_free() the bta_dm_search_cb timers during + * graceful shutdown. + */ + bta_dm_search_cb.search_timer = alarm_new("bta_dm_search.search_timer"); + bta_dm_search_cb.gatt_close_timer = + alarm_new("bta_dm_search.gatt_close_timer"); - memset(&bta_dm_conn_srvcs, 0, sizeof(bta_dm_conn_srvcs)); - memset(&bta_dm_di_cb, 0, sizeof(tBTA_DM_DI_CB)); + memset(&bta_dm_conn_srvcs, 0, sizeof(bta_dm_conn_srvcs)); + memset(&bta_dm_di_cb, 0, sizeof(tBTA_DM_DI_CB)); - memcpy(dev_class, p_bta_dm_cfg->dev_class, sizeof(dev_class)); - BTM_SetDeviceClass (dev_class); + memcpy(dev_class, p_bta_dm_cfg->dev_class, sizeof(dev_class)); + BTM_SetDeviceClass(dev_class); #if (BLE_INCLUDED == TRUE) - /* load BLE local information: ID keys, ER if available */ - bta_dm_co_ble_load_local_keys(&key_mask, er, &id_key); + /* load BLE local information: ID keys, ER if available */ + bta_dm_co_ble_load_local_keys(&key_mask, er, &id_key); - if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ER) - { - BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ER, (tBTM_BLE_LOCAL_KEYS *)&er); - } - if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ID) - { - BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ID, (tBTM_BLE_LOCAL_KEYS *)&id_key); - } + if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ER) { + BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ER, + (tBTM_BLE_LOCAL_KEYS*)&er); + } + if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ID) { + BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ID, + (tBTM_BLE_LOCAL_KEYS*)&id_key); + } #if (BTA_GATT_INCLUDED == TRUE) - bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID; + bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID; #endif // (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED) #endif // (defined(BLE_INCLUDED) && (BLE_INCLUDED == true)) - BTM_SecRegister((tBTM_APPL_INFO*)&bta_security); - BTM_SetDefaultLinkSuperTout(p_bta_dm_cfg->link_timeout); - BTM_WritePageTimeout(p_bta_dm_cfg->page_timeout); - bta_dm_cb.cur_policy = p_bta_dm_cfg->policy_settings; - BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); - BTM_RegBusyLevelNotif (bta_dm_bl_change_cback, NULL, BTM_BL_UPDATE_MASK|BTM_BL_ROLE_CHG_MASK); + BTM_SecRegister((tBTM_APPL_INFO*)&bta_security); + BTM_SetDefaultLinkSuperTout(p_bta_dm_cfg->link_timeout); + BTM_WritePageTimeout(p_bta_dm_cfg->page_timeout); + bta_dm_cb.cur_policy = p_bta_dm_cfg->policy_settings; + BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); + BTM_RegBusyLevelNotif(bta_dm_bl_change_cback, NULL, + BTM_BL_UPDATE_MASK | BTM_BL_ROLE_CHG_MASK); #if (BLE_VND_INCLUDED == TRUE) - BTM_BleReadControllerFeatures (bta_dm_ctrl_features_rd_cmpl_cback); + BTM_BleReadControllerFeatures(bta_dm_ctrl_features_rd_cmpl_cback); #endif - /* Earlier, we used to invoke BTM_ReadLocalAddr which was just copying the bd_addr - from the control block and invoking the callback which was sending the DM_ENABLE_EVT. - But then we have a few HCI commands being invoked above which were still in progress - when the ENABLE_EVT was sent. So modified this to fetch the local name which forces - the DM_ENABLE_EVT to be sent only after all the init steps are complete */ - BTM_ReadLocalDeviceNameFromController((tBTM_CMPL_CB *)bta_dm_local_name_cback); + /* Earlier, we used to invoke BTM_ReadLocalAddr which was just copying the + bd_addr + from the control block and invoking the callback which was sending the + DM_ENABLE_EVT. + But then we have a few HCI commands being invoked above which were still + in progress + when the ENABLE_EVT was sent. So modified this to fetch the local name + which forces + the DM_ENABLE_EVT to be sent only after all the init steps are complete + */ + BTM_ReadLocalDeviceNameFromController( + (tBTM_CMPL_CB*)bta_dm_local_name_cback); - bta_sys_rm_register((tBTA_SYS_CONN_CBACK*)bta_dm_rm_cback); + bta_sys_rm_register((tBTA_SYS_CONN_CBACK*)bta_dm_rm_cback); - /* initialize bluetooth low power manager */ - bta_dm_init_pm(); + /* initialize bluetooth low power manager */ + bta_dm_init_pm(); - bta_sys_policy_register((tBTA_SYS_CONN_CBACK*)bta_dm_policy_cback); + bta_sys_policy_register((tBTA_SYS_CONN_CBACK*)bta_dm_policy_cback); #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - bta_dm_gattc_register(); + bta_dm_gattc_register(); #endif - } - else - APPL_TRACE_DEBUG(" --- ignored event"); - + } else + APPL_TRACE_DEBUG(" --- ignored event"); } - /******************************************************************************* * * Function bta_dm_disable @@ -486,47 +497,45 @@ static void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status ) * Returns void * ******************************************************************************/ -void bta_dm_disable (UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - /* Set l2cap idle timeout to 0 (so BTE immediately disconnects ACL link after last channel is closed) */ - L2CA_SetIdleTimeoutByBdAddr((uint8_t *)BT_BD_ANY, 0, BT_TRANSPORT_BR_EDR); - L2CA_SetIdleTimeoutByBdAddr((uint8_t *)BT_BD_ANY, 0, BT_TRANSPORT_LE); +void bta_dm_disable(UNUSED_ATTR tBTA_DM_MSG* p_data) { + /* Set l2cap idle timeout to 0 (so BTE immediately disconnects ACL link after + * last channel is closed) */ + L2CA_SetIdleTimeoutByBdAddr((uint8_t*)BT_BD_ANY, 0, BT_TRANSPORT_BR_EDR); + L2CA_SetIdleTimeoutByBdAddr((uint8_t*)BT_BD_ANY, 0, BT_TRANSPORT_LE); - /* disable all active subsystems */ - bta_sys_disable(BTA_SYS_HW_BLUETOOTH); + /* disable all active subsystems */ + bta_sys_disable(BTA_SYS_HW_BLUETOOTH); - BTM_SetDiscoverability(BTM_NON_DISCOVERABLE, 0, 0); - BTM_SetConnectability(BTM_NON_CONNECTABLE, 0, 0); + BTM_SetDiscoverability(BTM_NON_DISCOVERABLE, 0, 0); + BTM_SetConnectability(BTM_NON_CONNECTABLE, 0, 0); - bta_dm_disable_pm(); - bta_dm_disable_search_and_disc(); - bta_dm_cb.disabling = true; + bta_dm_disable_pm(); + bta_dm_disable_search_and_disc(); + bta_dm_cb.disabling = true; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - BTM_BleClearBgConnDev(); + BTM_BleClearBgConnDev(); #endif - if(BTM_GetNumAclLinks()==0) - { + if (BTM_GetNumAclLinks() == 0) { #if (BTA_DISABLE_DELAY > 0) - /* If BTA_DISABLE_DELAY is defined and greater than zero, then delay the shutdown by - * BTA_DISABLE_DELAY milliseconds - */ - APPL_TRACE_WARNING("%s BTA_DISABLE_DELAY set to %d ms", - __func__, BTA_DISABLE_DELAY); - alarm_set_on_queue(bta_dm_cb.disable_timer, BTA_DISABLE_DELAY, - bta_dm_disable_conn_down_timer_cback, NULL, - btu_bta_alarm_queue); + /* If BTA_DISABLE_DELAY is defined and greater than zero, then delay the + * shutdown by + * BTA_DISABLE_DELAY milliseconds + */ + APPL_TRACE_WARNING("%s BTA_DISABLE_DELAY set to %d ms", __func__, + BTA_DISABLE_DELAY); + alarm_set_on_queue(bta_dm_cb.disable_timer, BTA_DISABLE_DELAY, + bta_dm_disable_conn_down_timer_cback, NULL, + btu_bta_alarm_queue); #else - bta_dm_disable_conn_down_timer_cback(NULL); + bta_dm_disable_conn_down_timer_cback(NULL); #endif - } - else - { - alarm_set_on_queue(bta_dm_cb.disable_timer, BTA_DM_DISABLE_TIMER_MS, - bta_dm_disable_timer_cback, UINT_TO_PTR(0), - btu_bta_alarm_queue); - } + } else { + alarm_set_on_queue(bta_dm_cb.disable_timer, BTA_DM_DISABLE_TIMER_MS, + bta_dm_disable_timer_cback, UINT_TO_PTR(0), + btu_bta_alarm_queue); + } } /******************************************************************************* @@ -541,47 +550,39 @@ void bta_dm_disable (UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_disable_timer_cback(void *data) -{ - uint8_t i; - tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR; - bool trigger_disc = false; - uint32_t param = PTR_TO_UINT(data); - - APPL_TRACE_EVENT("%s trial %u", __func__, param); - - if (BTM_GetNumAclLinks() && (param == 0)) - { - for(i=0; iset_name.name); - bta_dm_set_eir ((char*)p_data->set_name.name); +void bta_dm_set_dev_name(tBTA_DM_MSG* p_data) { + BTM_SetLocalDeviceName((char*)p_data->set_name.name); + bta_dm_set_eir((char*)p_data->set_name.name); } /******************************************************************************* @@ -610,75 +609,71 @@ void bta_dm_set_dev_name (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_set_visibility(tBTA_DM_MSG *p_data) -{ - uint16_t window, interval; +void bta_dm_set_visibility(tBTA_DM_MSG* p_data) { + uint16_t window, interval; #if (BTA_GATT_INCLUDED == TRUE) - uint16_t le_disc_mode = BTM_BleReadDiscoverability(); - uint16_t le_conn_mode = BTM_BleReadConnectability(); + uint16_t le_disc_mode = BTM_BleReadDiscoverability(); + uint16_t le_conn_mode = BTM_BleReadConnectability(); #endif // BTA_GATT_INCLUDED - uint16_t disc_mode = BTM_ReadDiscoverability(&window, &interval); - uint16_t conn_mode = BTM_ReadConnectability(&window, &interval); + uint16_t disc_mode = BTM_ReadDiscoverability(&window, &interval); + uint16_t conn_mode = BTM_ReadConnectability(&window, &interval); - /* set modes for Discoverability and connectability if not ignore */ - if (p_data->set_visibility.disc_mode != (BTA_DM_IGNORE | BTA_DM_LE_IGNORE)) - { + /* set modes for Discoverability and connectability if not ignore */ + if (p_data->set_visibility.disc_mode != (BTA_DM_IGNORE | BTA_DM_LE_IGNORE)) { #if (BTA_GATT_INCLUDED == TRUE) - if ((p_data->set_visibility.disc_mode & BTA_DM_LE_IGNORE) == BTA_DM_LE_IGNORE) - p_data->set_visibility.disc_mode = - ((p_data->set_visibility.disc_mode & ~BTA_DM_LE_IGNORE) | le_disc_mode); + if ((p_data->set_visibility.disc_mode & BTA_DM_LE_IGNORE) == + BTA_DM_LE_IGNORE) + p_data->set_visibility.disc_mode = + ((p_data->set_visibility.disc_mode & ~BTA_DM_LE_IGNORE) | + le_disc_mode); #endif // BTA_GATT_INCLUDED - if ((p_data->set_visibility.disc_mode & BTA_DM_IGNORE) == BTA_DM_IGNORE) - p_data->set_visibility.disc_mode = - ((p_data->set_visibility.disc_mode & ~BTA_DM_IGNORE) | disc_mode); + if ((p_data->set_visibility.disc_mode & BTA_DM_IGNORE) == BTA_DM_IGNORE) + p_data->set_visibility.disc_mode = + ((p_data->set_visibility.disc_mode & ~BTA_DM_IGNORE) | disc_mode); - BTM_SetDiscoverability(p_data->set_visibility.disc_mode, - bta_dm_cb.inquiry_scan_window, - bta_dm_cb.inquiry_scan_interval); - } + BTM_SetDiscoverability(p_data->set_visibility.disc_mode, + bta_dm_cb.inquiry_scan_window, + bta_dm_cb.inquiry_scan_interval); + } - if (p_data->set_visibility.conn_mode != (BTA_DM_IGNORE | BTA_DM_LE_IGNORE)) - { + if (p_data->set_visibility.conn_mode != (BTA_DM_IGNORE | BTA_DM_LE_IGNORE)) { #if (BTA_GATT_INCLUDED == TRUE) - if ((p_data->set_visibility.conn_mode & BTA_DM_LE_IGNORE) == BTA_DM_LE_IGNORE) - p_data->set_visibility.conn_mode = - ((p_data->set_visibility.conn_mode & ~BTA_DM_LE_IGNORE) | le_conn_mode); + if ((p_data->set_visibility.conn_mode & BTA_DM_LE_IGNORE) == + BTA_DM_LE_IGNORE) + p_data->set_visibility.conn_mode = + ((p_data->set_visibility.conn_mode & ~BTA_DM_LE_IGNORE) | + le_conn_mode); #endif // BTA_GATT_INCLUDED - if ((p_data->set_visibility.conn_mode & BTA_DM_IGNORE) == BTA_DM_IGNORE) - p_data->set_visibility.conn_mode = - ((p_data->set_visibility.conn_mode & ~BTA_DM_IGNORE) | conn_mode); - - BTM_SetConnectability(p_data->set_visibility.conn_mode, - bta_dm_cb.page_scan_window, - bta_dm_cb.page_scan_interval); - } - - /* Send False or True if not ignore */ - if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE ) - { - - if (p_data->set_visibility.pair_mode == BTA_DM_NON_PAIRABLE) - bta_dm_cb.disable_pair_mode = true; - else - bta_dm_cb.disable_pair_mode = false; - - } - - /* Send False or True if not ignore */ - if (p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE) - { - - if (p_data->set_visibility.conn_paired_only == BTA_DM_CONN_ALL) - bta_dm_cb.conn_paired_only = false; - else - bta_dm_cb.conn_paired_only = true; - - } - - /* Change mode if either mode is not ignore */ - if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE || p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE) - BTM_SetPairableMode((bool)(!(bta_dm_cb.disable_pair_mode)),bta_dm_cb.conn_paired_only); + if ((p_data->set_visibility.conn_mode & BTA_DM_IGNORE) == BTA_DM_IGNORE) + p_data->set_visibility.conn_mode = + ((p_data->set_visibility.conn_mode & ~BTA_DM_IGNORE) | conn_mode); + + BTM_SetConnectability(p_data->set_visibility.conn_mode, + bta_dm_cb.page_scan_window, + bta_dm_cb.page_scan_interval); + } + + /* Send False or True if not ignore */ + if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE) { + if (p_data->set_visibility.pair_mode == BTA_DM_NON_PAIRABLE) + bta_dm_cb.disable_pair_mode = true; + else + bta_dm_cb.disable_pair_mode = false; + } + /* Send False or True if not ignore */ + if (p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE) { + if (p_data->set_visibility.conn_paired_only == BTA_DM_CONN_ALL) + bta_dm_cb.conn_paired_only = false; + else + bta_dm_cb.conn_paired_only = true; + } + + /* Change mode if either mode is not ignore */ + if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE || + p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE) + BTM_SetPairableMode((bool)(!(bta_dm_cb.disable_pair_mode)), + bta_dm_cb.conn_paired_only); } /******************************************************************************* @@ -688,28 +683,26 @@ void bta_dm_set_visibility(tBTA_DM_MSG *p_data) * Description Removes device, Disconnects ACL link if required. *** ******************************************************************************/ -void bta_dm_process_remove_device(BD_ADDR bd_addr) -{ +void bta_dm_process_remove_device(BD_ADDR bd_addr) { #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* need to remove all pending background connection before unpair */ - BTA_GATTC_CancelOpen(0, bd_addr, false); + /* need to remove all pending background connection before unpair */ + BTA_GATTC_CancelOpen(0, bd_addr, false); #endif - BTM_SecDeleteDevice(bd_addr); + BTM_SecDeleteDevice(bd_addr); #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* remove all cached GATT information */ - BTA_GATTC_Refresh(bd_addr); + /* remove all cached GATT information */ + BTA_GATTC_Refresh(bd_addr); #endif - if (bta_dm_cb.p_sec_cback) - { - tBTA_DM_SEC sec_event; - bdcpy(sec_event.link_down.bd_addr, bd_addr); - /* No connection, set status to success (acl disc code not valid) */ - sec_event.link_down.status = HCI_SUCCESS; - bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &sec_event); - } + if (bta_dm_cb.p_sec_cback) { + tBTA_DM_SEC sec_event; + bdcpy(sec_event.link_down.bd_addr, bd_addr); + /* No connection, set status to success (acl disc code not valid) */ + sec_event.link_down.status = HCI_SUCCESS; + bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &sec_event); + } } /******************************************************************************* @@ -719,90 +712,87 @@ void bta_dm_process_remove_device(BD_ADDR bd_addr) * Description Removes device, disconnects ACL link if required. *** ******************************************************************************/ -void bta_dm_remove_device(tBTA_DM_MSG *p_data) -{ - tBTA_DM_API_REMOVE_DEVICE *p_dev = &p_data->remove_dev; - bool continue_delete_other_dev = false; - if (p_dev == NULL) - return; - - BD_ADDR other_address; - bdcpy(other_address, p_dev->bd_addr); - - /* If ACL exists for the device in the remove_bond message*/ - bool continue_delete_dev = false; - uint8_t other_transport = BT_TRANSPORT_INVALID; - - if (BTM_IsAclConnectionUp(p_dev->bd_addr, BT_TRANSPORT_LE) || - BTM_IsAclConnectionUp(p_dev->bd_addr, BT_TRANSPORT_BR_EDR)) - { - APPL_TRACE_DEBUG("%s: ACL Up count %d", __func__, bta_dm_cb.device_list.count); - continue_delete_dev = false; - - /* Take the link down first, and mark the device for removal when disconnected */ - for(int i=0; i < bta_dm_cb.device_list.count; i++) - { - if (!bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_dev->bd_addr)) - { - uint8_t transport = BT_TRANSPORT_BR_EDR; +void bta_dm_remove_device(tBTA_DM_MSG* p_data) { + tBTA_DM_API_REMOVE_DEVICE* p_dev = &p_data->remove_dev; + bool continue_delete_other_dev = false; + if (p_dev == NULL) return; + + BD_ADDR other_address; + bdcpy(other_address, p_dev->bd_addr); + + /* If ACL exists for the device in the remove_bond message*/ + bool continue_delete_dev = false; + uint8_t other_transport = BT_TRANSPORT_INVALID; + + if (BTM_IsAclConnectionUp(p_dev->bd_addr, BT_TRANSPORT_LE) || + BTM_IsAclConnectionUp(p_dev->bd_addr, BT_TRANSPORT_BR_EDR)) { + APPL_TRACE_DEBUG("%s: ACL Up count %d", __func__, + bta_dm_cb.device_list.count); + continue_delete_dev = false; + + /* Take the link down first, and mark the device for removal when + * disconnected */ + for (int i = 0; i < bta_dm_cb.device_list.count; i++) { + if (!bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, + p_dev->bd_addr)) { + uint8_t transport = BT_TRANSPORT_BR_EDR; #if (BTA_GATT_INCLUDED == TRUE) - transport = bta_dm_cb.device_list.peer_device[i].transport; + transport = bta_dm_cb.device_list.peer_device[i].transport; #endif // BTA_GATT_INCLUDED - bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_UNPAIRING; - btm_remove_acl(p_dev->bd_addr, transport); + bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_UNPAIRING; + btm_remove_acl(p_dev->bd_addr, transport); #if (BTA_GATT_INCLUDED == TRUE) - APPL_TRACE_DEBUG("%s:transport = %d", __func__, - bta_dm_cb.device_list.peer_device[i].transport); - - /* save the other transport to check if device is connected on other_transport */ - if(bta_dm_cb.device_list.peer_device[i].transport == BT_TRANSPORT_LE) - other_transport = BT_TRANSPORT_BR_EDR; - else - other_transport = BT_TRANSPORT_LE; + APPL_TRACE_DEBUG("%s:transport = %d", __func__, + bta_dm_cb.device_list.peer_device[i].transport); + + /* save the other transport to check if device is connected on + * other_transport */ + if (bta_dm_cb.device_list.peer_device[i].transport == BT_TRANSPORT_LE) + other_transport = BT_TRANSPORT_BR_EDR; + else + other_transport = BT_TRANSPORT_LE; #endif // BTA_GATT_INCLUDED - break; - } - } - } - else - { - continue_delete_dev = true; + break; + } } + } else { + continue_delete_dev = true; + } #if (BTA_GATT_INCLUDED == TRUE) - // If it is DUMO device and device is paired as different address, unpair that device - // if different address - if ((other_transport && (BTM_ReadConnectedTransportAddress(other_address, other_transport))) || - (!other_transport && (BTM_ReadConnectedTransportAddress(other_address, BT_TRANSPORT_BR_EDR) || - BTM_ReadConnectedTransportAddress(other_address, BT_TRANSPORT_LE)))) - { - continue_delete_other_dev = false; - /* Take the link down first, and mark the device for removal when disconnected */ - for(int i=0; i < bta_dm_cb.device_list.count; i++) - { - if (!bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, other_address)) - { - bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_UNPAIRING; - btm_remove_acl(other_address,bta_dm_cb.device_list.peer_device[i].transport); - break; - } - } - } - else - { - APPL_TRACE_DEBUG("%s: continue to delete the other dev ", __func__); - continue_delete_other_dev = true; + // If it is DUMO device and device is paired as different address, unpair that + // device + // if different address + if ((other_transport && + (BTM_ReadConnectedTransportAddress(other_address, other_transport))) || + (!other_transport && + (BTM_ReadConnectedTransportAddress(other_address, BT_TRANSPORT_BR_EDR) || + BTM_ReadConnectedTransportAddress(other_address, BT_TRANSPORT_LE)))) { + continue_delete_other_dev = false; + /* Take the link down first, and mark the device for removal when + * disconnected */ + for (int i = 0; i < bta_dm_cb.device_list.count; i++) { + if (!bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, + other_address)) { + bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_UNPAIRING; + btm_remove_acl(other_address, + bta_dm_cb.device_list.peer_device[i].transport); + break; + } } -#endif // BTA_GATT_INCLUDED - /* Delete the device mentioned in the msg */ - if (continue_delete_dev) - bta_dm_process_remove_device(p_dev->bd_addr); - - /* Delete the other paired device too */ - BD_ADDR dummy_bda = {0}; - if (continue_delete_other_dev && (bdcmp(other_address, dummy_bda) != 0)) - bta_dm_process_remove_device(other_address); + } else { + APPL_TRACE_DEBUG("%s: continue to delete the other dev ", __func__); + continue_delete_other_dev = true; + } +#endif // BTA_GATT_INCLUDED + /* Delete the device mentioned in the msg */ + if (continue_delete_dev) bta_dm_process_remove_device(p_dev->bd_addr); + + /* Delete the other paired device too */ + BD_ADDR dummy_bda = {0}; + if (continue_delete_other_dev && (bdcmp(other_address, dummy_bda) != 0)) + bta_dm_process_remove_device(other_address); } /******************************************************************************* @@ -810,141 +800,129 @@ void bta_dm_remove_device(tBTA_DM_MSG *p_data) * Function bta_dm_add_device * * Description This function adds a Link Key to an security database entry. - * It is normally called during host startup to restore all required information + * It is normally called during host startup to restore all + *required information * stored in the NVRAM. *** ******************************************************************************/ -void bta_dm_add_device (tBTA_DM_MSG *p_data) -{ - tBTA_DM_API_ADD_DEVICE *p_dev = &p_data->add_dev; - uint8_t *p_dc = NULL; - uint8_t *p_lc = NULL; - uint32_t trusted_services_mask[BTM_SEC_SERVICE_ARRAY_SIZE]; - uint8_t index = 0; - uint8_t btm_mask_index = 0; - - memset (trusted_services_mask, 0, sizeof(trusted_services_mask)); - - /* If not all zeros, the device class has been specified */ - if (p_dev->dc_known) - p_dc = (uint8_t *)p_dev->dc; - - if (p_dev->link_key_known) - p_lc = (uint8_t *)p_dev->link_key; - - if (p_dev->is_trusted) - { - /* covert BTA service mask to BTM mask */ - while (p_dev->tm && (index < BTA_MAX_SERVICE_ID)) - { - if (p_dev->tm & (uint32_t)(1<tm &= (uint32_t)(~(1<bd_addr, p_dc, p_dev->bd_name, p_dev->features, - trusted_services_mask, p_lc, p_dev->key_type, p_dev->io_cap, - p_dev->pin_length)) - { - APPL_TRACE_ERROR ("BTA_DM: Error adding device %08x%04x", - (p_dev->bd_addr[0]<<24)+(p_dev->bd_addr[1]<<16)+(p_dev->bd_addr[2]<<8)+p_dev->bd_addr[3], - (p_dev->bd_addr[4]<<8)+p_dev->bd_addr[5]); - } +void bta_dm_add_device(tBTA_DM_MSG* p_data) { + tBTA_DM_API_ADD_DEVICE* p_dev = &p_data->add_dev; + uint8_t* p_dc = NULL; + uint8_t* p_lc = NULL; + uint32_t trusted_services_mask[BTM_SEC_SERVICE_ARRAY_SIZE]; + uint8_t index = 0; + uint8_t btm_mask_index = 0; + + memset(trusted_services_mask, 0, sizeof(trusted_services_mask)); + + /* If not all zeros, the device class has been specified */ + if (p_dev->dc_known) p_dc = (uint8_t*)p_dev->dc; + + if (p_dev->link_key_known) p_lc = (uint8_t*)p_dev->link_key; + + if (p_dev->is_trusted) { + /* covert BTA service mask to BTM mask */ + while (p_dev->tm && (index < BTA_MAX_SERVICE_ID)) { + if (p_dev->tm & (uint32_t)(1 << index)) { + btm_mask_index = + bta_service_id_to_btm_srv_id_lkup_tbl[index] / BTM_SEC_ARRAY_BITS; + trusted_services_mask[btm_mask_index] |= + (uint32_t)(1 << (bta_service_id_to_btm_srv_id_lkup_tbl[index] - + (uint32_t)(btm_mask_index * 32))); + + p_dev->tm &= (uint32_t)(~(1 << index)); + } + index++; + } + } + + if (!BTM_SecAddDevice(p_dev->bd_addr, p_dc, p_dev->bd_name, p_dev->features, + trusted_services_mask, p_lc, p_dev->key_type, + p_dev->io_cap, p_dev->pin_length)) { + APPL_TRACE_ERROR("BTA_DM: Error adding device %08x%04x", + (p_dev->bd_addr[0] << 24) + (p_dev->bd_addr[1] << 16) + + (p_dev->bd_addr[2] << 8) + p_dev->bd_addr[3], + (p_dev->bd_addr[4] << 8) + p_dev->bd_addr[5]); + } } /******************************************************************************* * * Function bta_dm_close_acl * - * Description This function forces to close the connection to a remote device + * Description This function forces to close the connection to a remote + *device * and optionaly remove the device from security database if * required. *** ******************************************************************************/ -void bta_dm_close_acl(tBTA_DM_MSG *p_data) -{ - tBTA_DM_API_REMOVE_ACL *p_remove_acl = &p_data->remove_acl; - uint8_t index; +void bta_dm_close_acl(tBTA_DM_MSG* p_data) { + tBTA_DM_API_REMOVE_ACL* p_remove_acl = &p_data->remove_acl; + uint8_t index; - APPL_TRACE_DEBUG("bta_dm_close_acl"); + APPL_TRACE_DEBUG("bta_dm_close_acl"); - if (BTM_IsAclConnectionUp(p_remove_acl->bd_addr, p_remove_acl->transport)) - { - for (index = 0; index < bta_dm_cb.device_list.count; index ++) - { - if (!bdcmp( bta_dm_cb.device_list.peer_device[index].peer_bdaddr, p_remove_acl->bd_addr)) - break; - } - if (index != bta_dm_cb.device_list.count) - { - if (p_remove_acl->remove_dev) - bta_dm_cb.device_list.peer_device[index].remove_dev_pending = true; - } - else - { - APPL_TRACE_ERROR("unknown device, remove ACL failed"); - } - /* Disconnect the ACL link */ - btm_remove_acl(p_remove_acl->bd_addr, p_remove_acl->transport); + if (BTM_IsAclConnectionUp(p_remove_acl->bd_addr, p_remove_acl->transport)) { + for (index = 0; index < bta_dm_cb.device_list.count; index++) { + if (!bdcmp(bta_dm_cb.device_list.peer_device[index].peer_bdaddr, + p_remove_acl->bd_addr)) + break; + } + if (index != bta_dm_cb.device_list.count) { + if (p_remove_acl->remove_dev) + bta_dm_cb.device_list.peer_device[index].remove_dev_pending = true; + } else { + APPL_TRACE_ERROR("unknown device, remove ACL failed"); + } + /* Disconnect the ACL link */ + btm_remove_acl(p_remove_acl->bd_addr, p_remove_acl->transport); + } + /* if to remove the device from security database ? do it now */ + else if (p_remove_acl->remove_dev) { + if (!BTM_SecDeleteDevice(p_remove_acl->bd_addr)) { + APPL_TRACE_ERROR("delete device from security database failed."); } - /* if to remove the device from security database ? do it now */ - else if (p_remove_acl->remove_dev) - { - if (!BTM_SecDeleteDevice(p_remove_acl->bd_addr)) - { - APPL_TRACE_ERROR("delete device from security database failed."); - } #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* need to remove all pending background connection if any */ - BTA_GATTC_CancelOpen(0, p_remove_acl->bd_addr, false); - /* remove all cached GATT information */ - BTA_GATTC_Refresh(p_remove_acl->bd_addr); + /* need to remove all pending background connection if any */ + BTA_GATTC_CancelOpen(0, p_remove_acl->bd_addr, false); + /* remove all cached GATT information */ + BTA_GATTC_Refresh(p_remove_acl->bd_addr); #endif - } - /* otherwise, no action needed */ - + } + /* otherwise, no action needed */ } /******************************************************************************* * * Function bta_dm_remove_all_acl * - * Description This function forces to close all the ACL links specified by link type + * Description This function forces to close all the ACL links specified by + *link type *** ******************************************************************************/ -void bta_dm_remove_all_acl(tBTA_DM_MSG *p_data) -{ - const tBTA_DM_LINK_TYPE link_type = p_data->remove_all_acl.link_type; - tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR; +void bta_dm_remove_all_acl(tBTA_DM_MSG* p_data) { + const tBTA_DM_LINK_TYPE link_type = p_data->remove_all_acl.link_type; + tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR; - APPL_TRACE_DEBUG("%s link type = %d", __func__, link_type); + APPL_TRACE_DEBUG("%s link type = %d", __func__, link_type); - for (uint8_t i=0; i < bta_dm_cb.device_list.count; i++) - { - BD_ADDR addr = {0}; - bdcpy(addr, bta_dm_cb.device_list.peer_device[i].peer_bdaddr); + for (uint8_t i = 0; i < bta_dm_cb.device_list.count; i++) { + BD_ADDR addr = {0}; + bdcpy(addr, bta_dm_cb.device_list.peer_device[i].peer_bdaddr); #if (BLE_INCLUDED == TRUE) - transport = bta_dm_cb.device_list.peer_device[i].transport; + transport = bta_dm_cb.device_list.peer_device[i].transport; #endif - if ((link_type == BTA_DM_LINK_TYPE_ALL) || - ((link_type == BTA_DM_LINK_TYPE_LE) && (transport == BT_TRANSPORT_LE)) || - ((link_type == BTA_DM_LINK_TYPE_BR_EDR) && (transport == BT_TRANSPORT_BR_EDR))) - { - /* Disconnect the ACL link */ - btm_remove_acl(addr, transport); - } - } + if ((link_type == BTA_DM_LINK_TYPE_ALL) || + ((link_type == BTA_DM_LINK_TYPE_LE) && + (transport == BT_TRANSPORT_LE)) || + ((link_type == BTA_DM_LINK_TYPE_BR_EDR) && + (transport == BT_TRANSPORT_BR_EDR))) { + /* Disconnect the ACL link */ + btm_remove_acl(addr, transport); + } + } } - /******************************************************************************* * * Function bta_dm_bond @@ -955,47 +933,39 @@ void bta_dm_remove_all_acl(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_bond (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS status; - tBTA_DM_SEC sec_event; - char *p_name; - - if (p_data->bond.transport == BTA_TRANSPORT_UNKNOWN) - status = BTM_SecBond ( p_data->bond.bd_addr, 0, NULL, 0 ); - else - status = BTM_SecBondByTransport ( p_data->bond.bd_addr, p_data->bond.transport, 0, NULL, 0 ); - - - if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED)) - { - - memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); - bdcpy(sec_event.auth_cmpl.bd_addr, p_data->bond.bd_addr); - p_name = BTM_SecReadDevName(p_data->bond.bd_addr); - if (p_name != NULL) - { - memcpy(sec_event.auth_cmpl.bd_name, p_name, (BD_NAME_LEN-1)); - sec_event.auth_cmpl.bd_name[BD_NAME_LEN-1] = 0; - } - -/* taken care of by memset [above] - sec_event.auth_cmpl.key_present = false; - sec_event.auth_cmpl.success = false; -*/ - sec_event.auth_cmpl.fail_reason = HCI_ERR_ILLEGAL_COMMAND; - if (status == BTM_SUCCESS) - { - sec_event.auth_cmpl.success = true; - } - else - { - /* delete this device entry from Sec Dev DB */ - bta_dm_remove_sec_dev_entry(p_data->bond.bd_addr); - } - bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); +void bta_dm_bond(tBTA_DM_MSG* p_data) { + tBTM_STATUS status; + tBTA_DM_SEC sec_event; + char* p_name; + + if (p_data->bond.transport == BTA_TRANSPORT_UNKNOWN) + status = BTM_SecBond(p_data->bond.bd_addr, 0, NULL, 0); + else + status = BTM_SecBondByTransport(p_data->bond.bd_addr, + p_data->bond.transport, 0, NULL, 0); + + if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED)) { + memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); + bdcpy(sec_event.auth_cmpl.bd_addr, p_data->bond.bd_addr); + p_name = BTM_SecReadDevName(p_data->bond.bd_addr); + if (p_name != NULL) { + memcpy(sec_event.auth_cmpl.bd_name, p_name, (BD_NAME_LEN - 1)); + sec_event.auth_cmpl.bd_name[BD_NAME_LEN - 1] = 0; + } + + /* taken care of by memset [above] + sec_event.auth_cmpl.key_present = false; + sec_event.auth_cmpl.success = false; + */ + sec_event.auth_cmpl.fail_reason = HCI_ERR_ILLEGAL_COMMAND; + if (status == BTM_SUCCESS) { + sec_event.auth_cmpl.success = true; + } else { + /* delete this device entry from Sec Dev DB */ + bta_dm_remove_sec_dev_entry(p_data->bond.bd_addr); } - + bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); + } } /******************************************************************************* @@ -1008,21 +978,19 @@ void bta_dm_bond (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_bond_cancel (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS status; - tBTA_DM_SEC sec_event; +void bta_dm_bond_cancel(tBTA_DM_MSG* p_data) { + tBTM_STATUS status; + tBTA_DM_SEC sec_event; - APPL_TRACE_EVENT(" bta_dm_bond_cancel "); - status = BTM_SecBondCancel ( p_data->bond_cancel.bd_addr ); + APPL_TRACE_EVENT(" bta_dm_bond_cancel "); + status = BTM_SecBondCancel(p_data->bond_cancel.bd_addr); - if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED && status != BTM_SUCCESS)) - { - sec_event.bond_cancel_cmpl.result = BTA_FAILURE; - - bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event); - } + if (bta_dm_cb.p_sec_cback && + (status != BTM_CMD_STARTED && status != BTM_SUCCESS)) { + sec_event.bond_cancel_cmpl.result = BTA_FAILURE; + bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event); + } } /******************************************************************************* @@ -1035,32 +1003,26 @@ void bta_dm_bond_cancel (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_pin_reply (tBTA_DM_MSG *p_data) -{ - uint32_t trusted_mask[BTM_SEC_SERVICE_ARRAY_SIZE]; - uint32_t * current_trusted_mask; - - current_trusted_mask = BTM_ReadTrustedMask(p_data->pin_reply.bd_addr); - - if(current_trusted_mask) - { - memcpy(trusted_mask, current_trusted_mask, sizeof(trusted_mask)); - } - else - { - memset(trusted_mask, 0, sizeof(trusted_mask)); - } - - if(p_data->pin_reply.accept) - { - - BTM_PINCodeReply(p_data->pin_reply.bd_addr, BTM_SUCCESS, p_data->pin_reply.pin_len, p_data->pin_reply.p_pin, trusted_mask ); - } - else - { - BTM_PINCodeReply(p_data->pin_reply.bd_addr, BTM_NOT_AUTHORIZED, 0, NULL, trusted_mask ); - } - +void bta_dm_pin_reply(tBTA_DM_MSG* p_data) { + uint32_t trusted_mask[BTM_SEC_SERVICE_ARRAY_SIZE]; + uint32_t* current_trusted_mask; + + current_trusted_mask = BTM_ReadTrustedMask(p_data->pin_reply.bd_addr); + + if (current_trusted_mask) { + memcpy(trusted_mask, current_trusted_mask, sizeof(trusted_mask)); + } else { + memset(trusted_mask, 0, sizeof(trusted_mask)); + } + + if (p_data->pin_reply.accept) { + BTM_PINCodeReply(p_data->pin_reply.bd_addr, BTM_SUCCESS, + p_data->pin_reply.pin_len, p_data->pin_reply.p_pin, + trusted_mask); + } else { + BTM_PINCodeReply(p_data->pin_reply.bd_addr, BTM_NOT_AUTHORIZED, 0, NULL, + trusted_mask); + } } /******************************************************************************* @@ -1072,59 +1034,52 @@ void bta_dm_pin_reply (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - tBTA_DM_PEER_DEVICE *p_dev = NULL; - uint16_t policy = app_id; - uint32_t mask = (uint32_t)(1 << id); - - if(peer_addr) - p_dev = bta_dm_find_peer_device(peer_addr); - - APPL_TRACE_DEBUG(" bta_dm_policy_cback cmd:%d, policy:0x%x", - status, policy); - switch(status) - { +static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr) { + tBTA_DM_PEER_DEVICE* p_dev = NULL; + uint16_t policy = app_id; + uint32_t mask = (uint32_t)(1 << id); + + if (peer_addr) p_dev = bta_dm_find_peer_device(peer_addr); + + APPL_TRACE_DEBUG(" bta_dm_policy_cback cmd:%d, policy:0x%x", status, policy); + switch (status) { case BTA_SYS_PLCY_SET: - if(!p_dev) - return; - /* restore the default link policy */ - p_dev->link_policy |= policy; - BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy)); - break; + if (!p_dev) return; + /* restore the default link policy */ + p_dev->link_policy |= policy; + BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy)); + break; case BTA_SYS_PLCY_CLR: - if(!p_dev) - return; - /* clear the policy from the default link policy */ - p_dev->link_policy &= (~policy); - BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy)); - - if(policy & (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE)) - { - /* if clearing sniff/park, wake the link */ - bta_dm_pm_active(p_dev->peer_bdaddr); - } - break; + if (!p_dev) return; + /* clear the policy from the default link policy */ + p_dev->link_policy &= (~policy); + BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy)); + + if (policy & (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE)) { + /* if clearing sniff/park, wake the link */ + bta_dm_pm_active(p_dev->peer_bdaddr); + } + break; case BTA_SYS_PLCY_DEF_SET: - /* want to restore/set the role switch policy */ - bta_dm_cb.role_policy_mask &= ~mask; - if(0 == bta_dm_cb.role_policy_mask) - { - /* if nobody wants to insist on the role */ - bta_dm_cb.cur_policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; - BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); - } - break; + /* want to restore/set the role switch policy */ + bta_dm_cb.role_policy_mask &= ~mask; + if (0 == bta_dm_cb.role_policy_mask) { + /* if nobody wants to insist on the role */ + bta_dm_cb.cur_policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; + BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); + } + break; case BTA_SYS_PLCY_DEF_CLR: - /* want to remove the role switch policy */ - bta_dm_cb.role_policy_mask |= mask; - bta_dm_cb.cur_policy &= ~HCI_ENABLE_MASTER_SLAVE_SWITCH; - BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); - break; - } + /* want to remove the role switch policy */ + bta_dm_cb.role_policy_mask |= mask; + bta_dm_cb.cur_policy &= ~HCI_ENABLE_MASTER_SLAVE_SWITCH; + BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); + break; + } } /******************************************************************************* @@ -1137,13 +1092,11 @@ static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t * Returns void * ******************************************************************************/ -void bta_dm_confirm(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS res = BTM_NOT_AUTHORIZED; +void bta_dm_confirm(tBTA_DM_MSG* p_data) { + tBTM_STATUS res = BTM_NOT_AUTHORIZED; - if(p_data->confirm.accept == true) - res = BTM_SUCCESS; - BTM_ConfirmReqReply(res, p_data->confirm.bd_addr); + if (p_data->confirm.accept == true) res = BTM_SUCCESS; + BTM_ConfirmReqReply(res, p_data->confirm.bd_addr); } /******************************************************************************* @@ -1155,10 +1108,7 @@ void bta_dm_confirm(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_loc_oob(UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - BTM_ReadLocalOobData(); -} +void bta_dm_loc_oob(UNUSED_ATTR tBTA_DM_MSG* p_data) { BTM_ReadLocalOobData(); } /******************************************************************************* * @@ -1169,33 +1119,30 @@ void bta_dm_loc_oob(UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_ci_io_req_act(tBTA_DM_MSG *p_data) -{ - tBTM_AUTH_REQ auth_req = BTM_AUTH_AP_NO; - if(p_data->ci_io_req.auth_req) - auth_req = BTM_AUTH_AP_YES; - BTM_IoCapRsp(p_data->ci_io_req.bd_addr, p_data->ci_io_req.io_cap, - p_data->ci_io_req.oob_data, auth_req); +void bta_dm_ci_io_req_act(tBTA_DM_MSG* p_data) { + tBTM_AUTH_REQ auth_req = BTM_AUTH_AP_NO; + if (p_data->ci_io_req.auth_req) auth_req = BTM_AUTH_AP_YES; + BTM_IoCapRsp(p_data->ci_io_req.bd_addr, p_data->ci_io_req.io_cap, + p_data->ci_io_req.oob_data, auth_req); } /******************************************************************************* * * Function bta_dm_ci_rmt_oob_act * - * Description respond to the OOB data request for the remote device from BTM + * Description respond to the OOB data request for the remote device from + *BTM * * * Returns void * ******************************************************************************/ -void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS res = BTM_NOT_AUTHORIZED; - - if(p_data->ci_rmt_oob.accept == true) - res = BTM_SUCCESS; - BTM_RemoteOobDataReply(res, p_data->ci_rmt_oob.bd_addr, - p_data->ci_rmt_oob.c, p_data->ci_rmt_oob.r ); +void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG* p_data) { + tBTM_STATUS res = BTM_NOT_AUTHORIZED; + + if (p_data->ci_rmt_oob.accept == true) res = BTM_SUCCESS; + BTM_RemoteOobDataReply(res, p_data->ci_rmt_oob.bd_addr, p_data->ci_rmt_oob.c, + p_data->ci_rmt_oob.r); } /******************************************************************************* @@ -1208,48 +1155,47 @@ void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_search_start (tBTA_DM_MSG *p_data) -{ - tBTM_INQUIRY_CMPL result; +void bta_dm_search_start(tBTA_DM_MSG* p_data) { + tBTM_INQUIRY_CMPL result; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - size_t len = sizeof(tBT_UUID) * p_data->search.num_uuid; - bta_dm_gattc_register(); + size_t len = sizeof(tBT_UUID) * p_data->search.num_uuid; + bta_dm_gattc_register(); #endif - APPL_TRACE_DEBUG("%s avoid_scatter=%d", __func__, p_bta_dm_cfg->avoid_scatter); + APPL_TRACE_DEBUG("%s avoid_scatter=%d", __func__, + p_bta_dm_cfg->avoid_scatter); - if (p_bta_dm_cfg->avoid_scatter && - (p_data->search.rs_res == BTA_DM_RS_NONE) && bta_dm_check_av(BTA_DM_API_SEARCH_EVT)) - { - memcpy(&bta_dm_cb.search_msg, &p_data->search, sizeof(tBTA_DM_API_SEARCH)); - return; - } + if (p_bta_dm_cfg->avoid_scatter && + (p_data->search.rs_res == BTA_DM_RS_NONE) && + bta_dm_check_av(BTA_DM_API_SEARCH_EVT)) { + memcpy(&bta_dm_cb.search_msg, &p_data->search, sizeof(tBTA_DM_API_SEARCH)); + return; + } - BTM_ClearInqDb(NULL); - /* save search params */ - bta_dm_search_cb.p_search_cback = p_data->search.p_cback; - bta_dm_search_cb.services = p_data->search.services; + BTM_ClearInqDb(NULL); + /* save search params */ + bta_dm_search_cb.p_search_cback = p_data->search.p_cback; + bta_dm_search_cb.services = p_data->search.services; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - osi_free_and_reset((void **)&bta_dm_search_cb.p_srvc_uuid); + osi_free_and_reset((void**)&bta_dm_search_cb.p_srvc_uuid); - if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 && - p_data->search.p_uuid != NULL) { - bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)osi_malloc(len); - memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->search.p_uuid, len); - } + if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 && + p_data->search.p_uuid != NULL) { + bta_dm_search_cb.p_srvc_uuid = (tBT_UUID*)osi_malloc(len); + memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->search.p_uuid, len); + } #endif - result.status = BTM_StartInquiry( (tBTM_INQ_PARMS*)&p_data->search.inq_params, - bta_dm_inq_results_cb, - (tBTM_CMPL_CB*) bta_dm_inq_cmpl_cb); - - APPL_TRACE_EVENT("%s status=%d", __func__, result.status); - if (result.status != BTM_CMD_STARTED) - { - result.num_resp = 0; - bta_dm_inq_cmpl_cb ((void *)&result); - } + result.status = BTM_StartInquiry((tBTM_INQ_PARMS*)&p_data->search.inq_params, + bta_dm_inq_results_cb, + (tBTM_CMPL_CB*)bta_dm_inq_cmpl_cb); + + APPL_TRACE_EVENT("%s status=%d", __func__, result.status); + if (result.status != BTM_CMD_STARTED) { + result.num_resp = 0; + bta_dm_inq_cmpl_cb((void*)&result); + } } /******************************************************************************* @@ -1262,46 +1208,41 @@ void bta_dm_search_start (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_search_cancel (UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - - tBTA_DM_MSG *p_msg; - - if (BTM_IsInquiryActive()) - { - if (BTM_CancelInquiry() == BTM_SUCCESS) - { - bta_dm_search_cancel_notify(NULL); - p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; - bta_sys_sendmsg(p_msg); - } else { - /* flag a search cancel is pending */ - bta_dm_search_cb.cancel_pending = true; - } - } - /* If no Service Search going on then issue cancel remote name in case it is active */ - else if (!bta_dm_search_cb.name_discover_done) - { - BTM_CancelRemoteDeviceName(); - - p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; - bta_sys_sendmsg(p_msg); +void bta_dm_search_cancel(UNUSED_ATTR tBTA_DM_MSG* p_data) { + tBTA_DM_MSG* p_msg; + + if (BTM_IsInquiryActive()) { + if (BTM_CancelInquiry() == BTM_SUCCESS) { + bta_dm_search_cancel_notify(NULL); + p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); + p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; + bta_sys_sendmsg(p_msg); } else { - p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_INQUIRY_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; - bta_sys_sendmsg(p_msg); + /* flag a search cancel is pending */ + bta_dm_search_cb.cancel_pending = true; } + } + /* If no Service Search going on then issue cancel remote name in case it is + active */ + else if (!bta_dm_search_cb.name_discover_done) { + BTM_CancelRemoteDeviceName(); + + p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); + p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; + bta_sys_sendmsg(p_msg); + } else { + p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); + p_msg->hdr.event = BTA_DM_INQUIRY_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; + bta_sys_sendmsg(p_msg); + } #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - if (bta_dm_search_cb.gatt_disc_active) - { - bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr); - } + if (bta_dm_search_cb.gatt_disc_active) { + bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr); + } #endif } @@ -1315,41 +1256,40 @@ void bta_dm_search_cancel (UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_discover (tBTA_DM_MSG *p_data) -{ +void bta_dm_discover(tBTA_DM_MSG* p_data) { #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - size_t len = sizeof(tBT_UUID) * p_data->discover.num_uuid; + size_t len = sizeof(tBT_UUID) * p_data->discover.num_uuid; #endif - APPL_TRACE_EVENT("%s services_to_search=0x%04X, sdp_search=%d", __func__, - p_data->discover.services, p_data->discover.sdp_search); + APPL_TRACE_EVENT("%s services_to_search=0x%04X, sdp_search=%d", __func__, + p_data->discover.services, p_data->discover.sdp_search); - /* save the search condition */ - bta_dm_search_cb.services = p_data->discover.services; + /* save the search condition */ + bta_dm_search_cb.services = p_data->discover.services; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - bta_dm_gattc_register(); - osi_free_and_reset((void **)&bta_dm_search_cb.p_srvc_uuid); - if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 && - p_data->discover.p_uuid != NULL) { - bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)osi_malloc(len); - memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->discover.p_uuid, len); - } - bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; + bta_dm_gattc_register(); + osi_free_and_reset((void**)&bta_dm_search_cb.p_srvc_uuid); + if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 && + p_data->discover.p_uuid != NULL) { + bta_dm_search_cb.p_srvc_uuid = (tBT_UUID*)osi_malloc(len); + memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->discover.p_uuid, len); + } + bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; #endif - bta_dm_search_cb.p_search_cback = p_data->discover.p_cback; - bta_dm_search_cb.sdp_search = p_data->discover.sdp_search; - bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; - bta_dm_search_cb.service_index = 0; - bta_dm_search_cb.services_found = 0; - bta_dm_search_cb.peer_name[0] = 0; - bta_dm_search_cb.sdp_search = p_data->discover.sdp_search; - bta_dm_search_cb.p_btm_inq_info = BTM_InqDbRead (p_data->discover.bd_addr); - bta_dm_search_cb.transport = p_data->discover.transport; - - bta_dm_search_cb.name_discover_done = false; - memcpy(&bta_dm_search_cb.uuid, &p_data->discover.uuid, sizeof(tSDP_UUID)); - bta_dm_discover_device(p_data->discover.bd_addr); + bta_dm_search_cb.p_search_cback = p_data->discover.p_cback; + bta_dm_search_cb.sdp_search = p_data->discover.sdp_search; + bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; + bta_dm_search_cb.service_index = 0; + bta_dm_search_cb.services_found = 0; + bta_dm_search_cb.peer_name[0] = 0; + bta_dm_search_cb.sdp_search = p_data->discover.sdp_search; + bta_dm_search_cb.p_btm_inq_info = BTM_InqDbRead(p_data->discover.bd_addr); + bta_dm_search_cb.transport = p_data->discover.transport; + + bta_dm_search_cb.name_discover_done = false; + memcpy(&bta_dm_search_cb.uuid, &p_data->discover.uuid, sizeof(tSDP_UUID)); + bta_dm_discover_device(p_data->discover.bd_addr); } /******************************************************************************* @@ -1361,23 +1301,21 @@ void bta_dm_discover (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_di_disc_cmpl(tBTA_DM_MSG *p_data) -{ - tBTA_DM_DI_DISC_CMPL di_disc; +void bta_dm_di_disc_cmpl(tBTA_DM_MSG* p_data) { + tBTA_DM_DI_DISC_CMPL di_disc; - memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL)); - bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr); + memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL)); + bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr); - if((p_data->hdr.offset == SDP_SUCCESS) - || (p_data->hdr.offset == SDP_DB_FULL)) - { - di_disc.num_record = SDP_GetNumDiRecords(bta_dm_di_cb.p_di_db); - } - else - di_disc.result = BTA_FAILURE; + if ((p_data->hdr.offset == SDP_SUCCESS) || + (p_data->hdr.offset == SDP_DB_FULL)) { + di_disc.num_record = SDP_GetNumDiRecords(bta_dm_di_cb.p_di_db); + } else + di_disc.result = BTA_FAILURE; - bta_dm_di_cb.p_di_db = NULL; - bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, (tBTA_DM_SEARCH *) &di_disc); + bta_dm_di_cb.p_di_db = NULL; + bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, + (tBTA_DM_SEARCH*)&di_disc); } /******************************************************************************* @@ -1390,44 +1328,41 @@ void bta_dm_di_disc_cmpl(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_di_disc_callback(uint16_t result) -{ - tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); +static void bta_dm_di_disc_callback(uint16_t result) { + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DI_DISCOVER_EVT; - p_msg->hdr.offset = result; + p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DI_DISCOVER_EVT; + p_msg->hdr.offset = result; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* * * Function bta_dm_disable_search_and_disc * - * Description Cancels an ongoing search or discovery for devices in case of + * Description Cancels an ongoing search or discovery for devices in case + *of * a Bluetooth disable * * * Returns void * ******************************************************************************/ -static void bta_dm_disable_search_and_disc (void) -{ - tBTA_DM_DI_DISC_CMPL di_disc; +static void bta_dm_disable_search_and_disc(void) { + tBTA_DM_DI_DISC_CMPL di_disc; - if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) - bta_dm_search_cancel(NULL); + if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) bta_dm_search_cancel(NULL); - if (bta_dm_di_cb.p_di_db != NULL) - { - memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL)); - bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr); - di_disc.result = BTA_FAILURE; + if (bta_dm_di_cb.p_di_db != NULL) { + memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL)); + bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr); + di_disc.result = BTA_FAILURE; - bta_dm_di_cb.p_di_db = NULL; - bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, NULL); - } + bta_dm_di_cb.p_di_db = NULL; + bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, NULL); + } } /******************************************************************************* @@ -1440,29 +1375,29 @@ static void bta_dm_disable_search_and_disc (void) * Returns void * ******************************************************************************/ -void bta_dm_di_disc (tBTA_DM_MSG *p_data) -{ - uint16_t result = BTA_FAILURE; - - bta_dm_search_cb.p_search_cback = p_data->di_disc.p_cback; - bdcpy(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.bd_addr); - bta_dm_di_cb.p_di_db = p_data->di_disc.p_sdp_db; - - bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB *)osi_malloc(BTA_DM_SDP_DB_SIZE); - if (SDP_DiDiscover(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.p_sdp_db, - p_data->di_disc.len, - bta_dm_di_disc_callback) == SDP_SUCCESS) { - result = BTA_SUCCESS; - } +void bta_dm_di_disc(tBTA_DM_MSG* p_data) { + uint16_t result = BTA_FAILURE; - if (result == BTA_FAILURE) { - tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); + bta_dm_search_cb.p_search_cback = p_data->di_disc.p_cback; + bdcpy(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.bd_addr); + bta_dm_di_cb.p_di_db = p_data->di_disc.p_sdp_db; - p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DI_DISCOVER_EVT; - p_data->hdr.offset = result; - bta_sys_sendmsg(p_msg); - } + bta_dm_search_cb.p_sdp_db = + (tSDP_DISCOVERY_DB*)osi_malloc(BTA_DM_SDP_DB_SIZE); + if (SDP_DiDiscover(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.p_sdp_db, + p_data->di_disc.len, + bta_dm_di_disc_callback) == SDP_SUCCESS) { + result = BTA_SUCCESS; + } + + if (result == BTA_FAILURE) { + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); + + p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DI_DISCOVER_EVT; + p_data->hdr.offset = result; + bta_sys_sendmsg(p_msg); + } } /******************************************************************************* @@ -1474,41 +1409,42 @@ void bta_dm_di_disc (tBTA_DM_MSG *p_data) * Returns true if started to get remote name * ******************************************************************************/ -static bool bta_dm_read_remote_device_name (BD_ADDR bd_addr,tBT_TRANSPORT transport) -{ - tBTM_STATUS btm_status; - - APPL_TRACE_DEBUG("bta_dm_read_remote_device_name"); - - bdcpy(bta_dm_search_cb.peer_bdaddr, bd_addr); - bta_dm_search_cb.peer_name[0] = 0; - - btm_status = BTM_ReadRemoteDeviceName (bta_dm_search_cb.peer_bdaddr, - (tBTM_CMPL_CB *) bta_dm_remname_cback, - transport); - - if ( btm_status == BTM_CMD_STARTED ) - { - APPL_TRACE_DEBUG("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is started"); - - return (true); - } - else if ( btm_status == BTM_BUSY ) - { - APPL_TRACE_DEBUG("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is busy"); - - /* Remote name discovery is on going now so BTM cannot notify through "bta_dm_remname_cback" */ - /* adding callback to get notified that current reading remore name done */ - BTM_SecAddRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); - - return (true); - } - else - { - APPL_TRACE_WARNING("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName returns 0x%02X", btm_status); - - return (false); - } +static bool bta_dm_read_remote_device_name(BD_ADDR bd_addr, + tBT_TRANSPORT transport) { + tBTM_STATUS btm_status; + + APPL_TRACE_DEBUG("bta_dm_read_remote_device_name"); + + bdcpy(bta_dm_search_cb.peer_bdaddr, bd_addr); + bta_dm_search_cb.peer_name[0] = 0; + + btm_status = + BTM_ReadRemoteDeviceName(bta_dm_search_cb.peer_bdaddr, + (tBTM_CMPL_CB*)bta_dm_remname_cback, transport); + + if (btm_status == BTM_CMD_STARTED) { + APPL_TRACE_DEBUG( + "bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is started"); + + return (true); + } else if (btm_status == BTM_BUSY) { + APPL_TRACE_DEBUG( + "bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is busy"); + + /* Remote name discovery is on going now so BTM cannot notify through + * "bta_dm_remname_cback" */ + /* adding callback to get notified that current reading remore name done */ + BTM_SecAddRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); + + return (true); + } else { + APPL_TRACE_WARNING( + "bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName returns " + "0x%02X", + btm_status); + + return (false); + } } /******************************************************************************* @@ -1520,31 +1456,31 @@ static bool bta_dm_read_remote_device_name (BD_ADDR bd_addr,tBT_TRANSPORT transp * Returns void * ******************************************************************************/ -void bta_dm_inq_cmpl (tBTA_DM_MSG *p_data) -{ - tBTA_DM_SEARCH data; +void bta_dm_inq_cmpl(tBTA_DM_MSG* p_data) { + tBTA_DM_SEARCH data; - APPL_TRACE_DEBUG("bta_dm_inq_cmpl"); + APPL_TRACE_DEBUG("bta_dm_inq_cmpl"); - data.inq_cmpl.num_resps = p_data->inq_cmpl.num; - bta_dm_search_cb.p_search_cback(BTA_DM_INQ_CMPL_EVT, &data); + data.inq_cmpl.num_resps = p_data->inq_cmpl.num; + bta_dm_search_cb.p_search_cback(BTA_DM_INQ_CMPL_EVT, &data); - if((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbFirst()) != NULL) - { - /* start name and service discovery from the first device on inquiry result */ - bta_dm_search_cb.name_discover_done = false; - bta_dm_search_cb.peer_name[0] = 0; - bta_dm_discover_device(bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr); - } else { - tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); + if ((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbFirst()) != NULL) { + /* start name and service discovery from the first device on inquiry result + */ + bta_dm_search_cb.name_discover_done = false; + bta_dm_search_cb.peer_name[0] = 0; + bta_dm_discover_device( + bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr); + } else { + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); - /* no devices, search complete */ - bta_dm_search_cb.services = 0; + /* no devices, search complete */ + bta_dm_search_cb.services = 0; - p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; - bta_sys_sendmsg(p_msg); - } + p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; + bta_sys_sendmsg(p_msg); + } } /******************************************************************************* @@ -1556,16 +1492,15 @@ void bta_dm_inq_cmpl (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_rmt_name (tBTA_DM_MSG *p_data) -{ - APPL_TRACE_DEBUG("bta_dm_rmt_name"); +void bta_dm_rmt_name(tBTA_DM_MSG* p_data) { + APPL_TRACE_DEBUG("bta_dm_rmt_name"); - if( p_data->rem_name.result.disc_res.bd_name[0] && bta_dm_search_cb.p_btm_inq_info) - { - bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name = true; - } + if (p_data->rem_name.result.disc_res.bd_name[0] && + bta_dm_search_cb.p_btm_inq_info) { + bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name = true; + } - bta_dm_discover_device(bta_dm_search_cb.peer_bdaddr); + bta_dm_discover_device(bta_dm_search_cb.peer_bdaddr); } /******************************************************************************* @@ -1578,22 +1513,19 @@ void bta_dm_rmt_name (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_disc_rmt_name (tBTA_DM_MSG *p_data) -{ - tBTM_INQ_INFO *p_btm_inq_info; +void bta_dm_disc_rmt_name(tBTA_DM_MSG* p_data) { + tBTM_INQ_INFO* p_btm_inq_info; - APPL_TRACE_DEBUG("bta_dm_disc_rmt_name"); + APPL_TRACE_DEBUG("bta_dm_disc_rmt_name"); - p_btm_inq_info = BTM_InqDbRead (p_data->rem_name.result.disc_res.bd_addr); - if( p_btm_inq_info ) - { - if( p_data->rem_name.result.disc_res.bd_name[0] ) - { - p_btm_inq_info->appl_knows_rem_name = true; - } + p_btm_inq_info = BTM_InqDbRead(p_data->rem_name.result.disc_res.bd_addr); + if (p_btm_inq_info) { + if (p_data->rem_name.result.disc_res.bd_name[0]) { + p_btm_inq_info->appl_knows_rem_name = true; } + } - bta_dm_discover_device(p_data->rem_name.result.disc_res.bd_addr); + bta_dm_discover_device(p_data->rem_name.result.disc_res.bd_addr); } /******************************************************************************* @@ -1605,240 +1537,227 @@ void bta_dm_disc_rmt_name (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_sdp_result (tBTA_DM_MSG *p_data) -{ - - tSDP_DISC_REC *p_sdp_rec = NULL; - tBTA_DM_MSG *p_msg; - bool scn_found = false; - uint16_t service = 0xFFFF; - tSDP_PROTOCOL_ELEM pe; +void bta_dm_sdp_result(tBTA_DM_MSG* p_data) { + tSDP_DISC_REC* p_sdp_rec = NULL; + tBTA_DM_MSG* p_msg; + bool scn_found = false; + uint16_t service = 0xFFFF; + tSDP_PROTOCOL_ELEM pe; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - tBT_UUID *p_uuid = bta_dm_search_cb.p_srvc_uuid; - tBTA_DM_SEARCH result; - tBT_UUID service_uuid; + tBT_UUID* p_uuid = bta_dm_search_cb.p_srvc_uuid; + tBTA_DM_SEARCH result; + tBT_UUID service_uuid; #endif - uint32_t num_uuids = 0; - uint8_t uuid_list[32][MAX_UUID_SIZE]; // assuming a max of 32 services - - if((p_data->sdp_event.sdp_result == SDP_SUCCESS) - || (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH) - || (p_data->sdp_event.sdp_result == SDP_DB_FULL)) - { - APPL_TRACE_DEBUG("sdp_result::0x%x", p_data->sdp_event.sdp_result); - do - { - - p_sdp_rec = NULL; - if( bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID+1) ) - { - p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, &bta_dm_search_cb.uuid, p_sdp_rec); - - if (p_sdp_rec && SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - bta_dm_search_cb.peer_scn = (uint8_t) pe.params[0]; - scn_found = true; - } - } - else - { - service = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index-1]; - p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, service, p_sdp_rec); - } + uint32_t num_uuids = 0; + uint8_t uuid_list[32][MAX_UUID_SIZE]; // assuming a max of 32 services + + if ((p_data->sdp_event.sdp_result == SDP_SUCCESS) || + (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH) || + (p_data->sdp_event.sdp_result == SDP_DB_FULL)) { + APPL_TRACE_DEBUG("sdp_result::0x%x", p_data->sdp_event.sdp_result); + do { + p_sdp_rec = NULL; + if (bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID + 1)) { + p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, + &bta_dm_search_cb.uuid, p_sdp_rec); + + if (p_sdp_rec && SDP_FindProtocolListElemInRec( + p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + bta_dm_search_cb.peer_scn = (uint8_t)pe.params[0]; + scn_found = true; + } + } else { + service = + bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index - 1]; + p_sdp_rec = + SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, service, p_sdp_rec); + } #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* finished with BR/EDR services, now we check the result for GATT based service UUID */ - if (bta_dm_search_cb.service_index == BTA_MAX_SERVICE_ID) - { - if (bta_dm_search_cb.uuid_to_search != 0 && p_uuid != NULL) - { - p_uuid += (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); - /* only support 16 bits UUID for now */ - service = p_uuid->uu.uuid16; - - } - /* all GATT based services */ - do - { - /* find a service record, report it */ - p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, - 0, p_sdp_rec); - if (p_sdp_rec) - { - if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) - { - /* send result back to app now, one by one */ - bdcpy (result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr); - strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), BD_NAME_LEN); - result.disc_ble_res.service.len = service_uuid.len; - result.disc_ble_res.service.uu.uuid16 = service_uuid.uu.uuid16; - - bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); - } - } - - if (bta_dm_search_cb.uuid_to_search > 0) - break; - - } while (p_sdp_rec); - } - else -#endif - { - /* SDP_DB_FULL means some records with the - required attributes were received */ - if (((p_data->sdp_event.sdp_result == SDP_DB_FULL) && - bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || - (p_sdp_rec != NULL)) - { - if (service != UUID_SERVCLASS_PNP_INFORMATION) - { - uint16_t tmp_svc = 0xFFFF; - bta_dm_search_cb.services_found |= - (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index-1)); - tmp_svc = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index-1]; - /* Add to the list of UUIDs */ - sdpu_uuid16_to_uuid128(tmp_svc, uuid_list[num_uuids]); - num_uuids++; - } - } + /* finished with BR/EDR services, now we check the result for GATT based + * service UUID */ + if (bta_dm_search_cb.service_index == BTA_MAX_SERVICE_ID) { + if (bta_dm_search_cb.uuid_to_search != 0 && p_uuid != NULL) { + p_uuid += + (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); + /* only support 16 bits UUID for now */ + service = p_uuid->uu.uuid16; + } + /* all GATT based services */ + do { + /* find a service record, report it */ + p_sdp_rec = + SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, 0, p_sdp_rec); + if (p_sdp_rec) { + if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) { + /* send result back to app now, one by one */ + bdcpy(result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr); + strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), + BD_NAME_LEN); + result.disc_ble_res.service.len = service_uuid.len; + result.disc_ble_res.service.uu.uuid16 = service_uuid.uu.uuid16; + + bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); } + } - if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK && - bta_dm_search_cb.services_to_search == 0) - { -#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - if ( bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID && - bta_dm_search_cb.uuid_to_search > 0) - bta_dm_search_cb.uuid_to_search --; + if (bta_dm_search_cb.uuid_to_search > 0) break; - if (bta_dm_search_cb.uuid_to_search == 0 || - bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID) + } while (p_sdp_rec); + } else #endif - bta_dm_search_cb.service_index++; - } - else /* regular one service per search or PNP search */ - break; + { + /* SDP_DB_FULL means some records with the + required attributes were received */ + if (((p_data->sdp_event.sdp_result == SDP_DB_FULL) && + bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || + (p_sdp_rec != NULL)) { + if (service != UUID_SERVCLASS_PNP_INFORMATION) { + uint16_t tmp_svc = 0xFFFF; + bta_dm_search_cb.services_found |= + (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK( + bta_dm_search_cb.service_index - 1)); + tmp_svc = + bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index - + 1]; + /* Add to the list of UUIDs */ + sdpu_uuid16_to_uuid128(tmp_svc, uuid_list[num_uuids]); + num_uuids++; + } + } + } - } while (bta_dm_search_cb.service_index <= BTA_MAX_SERVICE_ID); + if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK && + bta_dm_search_cb.services_to_search == 0) { +#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) + if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID && + bta_dm_search_cb.uuid_to_search > 0) + bta_dm_search_cb.uuid_to_search--; - APPL_TRACE_DEBUG("%s services_found = %04x", __func__, - bta_dm_search_cb.services_found); + if (bta_dm_search_cb.uuid_to_search == 0 || + bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID) +#endif + bta_dm_search_cb.service_index++; + } else /* regular one service per search or PNP search */ + break; - /* Collect the 128-bit services here and put them into the list */ - if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) - { - p_sdp_rec = NULL; - do - { - tBT_UUID temp_uuid; - /* find a service record, report it */ - p_sdp_rec = SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec); - if (p_sdp_rec) - { - if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) - { - memcpy(uuid_list[num_uuids], temp_uuid.uu.uuid128, MAX_UUID_SIZE); - num_uuids++; - } - } - } while (p_sdp_rec); - } - /* if there are more services to search for */ - if(bta_dm_search_cb.services_to_search) - { - /* Free up the p_sdp_db before checking the next one */ - bta_dm_free_sdp_db(NULL); - bta_dm_find_services(bta_dm_search_cb.peer_bdaddr); + } while (bta_dm_search_cb.service_index <= BTA_MAX_SERVICE_ID); + + APPL_TRACE_DEBUG("%s services_found = %04x", __func__, + bta_dm_search_cb.services_found); + + /* Collect the 128-bit services here and put them into the list */ + if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { + p_sdp_rec = NULL; + do { + tBT_UUID temp_uuid; + /* find a service record, report it */ + p_sdp_rec = + SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec); + if (p_sdp_rec) { + if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) { + memcpy(uuid_list[num_uuids], temp_uuid.uu.uuid128, MAX_UUID_SIZE); + num_uuids++; + } } - else - { - /* callbacks */ - /* start next bd_addr if necessary */ - - BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); - - p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; - p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; - p_msg->disc_result.result.disc_res.p_raw_data = NULL; - p_msg->disc_result.result.disc_res.raw_data_size = 0; - p_msg->disc_result.result.disc_res.num_uuids = num_uuids; - p_msg->disc_result.result.disc_res.p_uuid_list = NULL; - if (num_uuids > 0) { - p_msg->disc_result.result.disc_res.p_uuid_list = - (uint8_t *)osi_malloc(num_uuids * MAX_UUID_SIZE); - memcpy(p_msg->disc_result.result.disc_res.p_uuid_list, - uuid_list, num_uuids * MAX_UUID_SIZE); - } - // Copy the raw_data to the discovery result structure - if (bta_dm_search_cb.p_sdp_db != NULL && - bta_dm_search_cb.p_sdp_db->raw_used != 0 && - bta_dm_search_cb.p_sdp_db->raw_data != NULL) { - APPL_TRACE_DEBUG("%s raw_data used = 0x%x raw_data_ptr = 0x%x", - __func__, - bta_dm_search_cb.p_sdp_db->raw_used, - bta_dm_search_cb.p_sdp_db->raw_data); - - p_msg->disc_result.result.disc_res.p_raw_data = - (uint8_t *) osi_malloc(bta_dm_search_cb.p_sdp_db->raw_used); - memcpy(p_msg->disc_result.result.disc_res.p_raw_data, - bta_dm_search_cb.p_sdp_db->raw_data, - bta_dm_search_cb.p_sdp_db->raw_used); - - p_msg->disc_result.result.disc_res.raw_data_size = - bta_dm_search_cb.p_sdp_db->raw_used; - - bta_dm_search_cb.p_sdp_db->raw_data = NULL; //no need to free this - it is a global assigned. - bta_dm_search_cb.p_sdp_db->raw_used = 0; - bta_dm_search_cb.p_sdp_db->raw_size = 0; - } else { - APPL_TRACE_DEBUG("%s raw data size is 0 or raw_data is null!!", - __func__); - } - /* Done with p_sdp_db. Free it */ - bta_dm_free_sdp_db(NULL); - p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; + } while (p_sdp_rec); + } + /* if there are more services to search for */ + if (bta_dm_search_cb.services_to_search) { + /* Free up the p_sdp_db before checking the next one */ + bta_dm_free_sdp_db(NULL); + bta_dm_find_services(bta_dm_search_cb.peer_bdaddr); + } else { + /* callbacks */ + /* start next bd_addr if necessary */ + + BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); + + p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); + p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; + p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; + p_msg->disc_result.result.disc_res.p_raw_data = NULL; + p_msg->disc_result.result.disc_res.raw_data_size = 0; + p_msg->disc_result.result.disc_res.num_uuids = num_uuids; + p_msg->disc_result.result.disc_res.p_uuid_list = NULL; + if (num_uuids > 0) { + p_msg->disc_result.result.disc_res.p_uuid_list = + (uint8_t*)osi_malloc(num_uuids * MAX_UUID_SIZE); + memcpy(p_msg->disc_result.result.disc_res.p_uuid_list, uuid_list, + num_uuids * MAX_UUID_SIZE); + } + // Copy the raw_data to the discovery result structure + if (bta_dm_search_cb.p_sdp_db != NULL && + bta_dm_search_cb.p_sdp_db->raw_used != 0 && + bta_dm_search_cb.p_sdp_db->raw_data != NULL) { + APPL_TRACE_DEBUG("%s raw_data used = 0x%x raw_data_ptr = 0x%x", + __func__, bta_dm_search_cb.p_sdp_db->raw_used, + bta_dm_search_cb.p_sdp_db->raw_data); + + p_msg->disc_result.result.disc_res.p_raw_data = + (uint8_t*)osi_malloc(bta_dm_search_cb.p_sdp_db->raw_used); + memcpy(p_msg->disc_result.result.disc_res.p_raw_data, + bta_dm_search_cb.p_sdp_db->raw_data, + bta_dm_search_cb.p_sdp_db->raw_used); + + p_msg->disc_result.result.disc_res.raw_data_size = + bta_dm_search_cb.p_sdp_db->raw_used; + + bta_dm_search_cb.p_sdp_db->raw_data = + NULL; // no need to free this - it is a global assigned. + bta_dm_search_cb.p_sdp_db->raw_used = 0; + bta_dm_search_cb.p_sdp_db->raw_size = 0; + } else { + APPL_TRACE_DEBUG("%s raw data size is 0 or raw_data is null!!", + __func__); + } + /* Done with p_sdp_db. Free it */ + bta_dm_free_sdp_db(NULL); + p_msg->disc_result.result.disc_res.services = + bta_dm_search_cb.services_found; + + // Piggy back the SCN over result field + if (scn_found) { + p_msg->disc_result.result.disc_res.result = + (3 + bta_dm_search_cb.peer_scn); + p_msg->disc_result.result.disc_res.services |= BTA_USER_SERVICE_MASK; + + APPL_TRACE_EVENT(" Piggy back the SCN over result field SCN=%d", + bta_dm_search_cb.peer_scn); + } + bdcpy(p_msg->disc_result.result.disc_res.bd_addr, + bta_dm_search_cb.peer_bdaddr); + strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, + bta_dm_get_remname(), BD_NAME_LEN); - // Piggy back the SCN over result field - if (scn_found) { - p_msg->disc_result.result.disc_res.result = (3 + bta_dm_search_cb.peer_scn); - p_msg->disc_result.result.disc_res.services |= BTA_USER_SERVICE_MASK; + bta_sys_sendmsg(p_msg); + } + } else { + /* conn failed. No need for timer */ + if (p_data->sdp_event.sdp_result == SDP_CONN_FAILED || + p_data->sdp_event.sdp_result == SDP_CONN_REJECTED || + p_data->sdp_event.sdp_result == SDP_SECURITY_ERR) + bta_dm_search_cb.wait_disc = false; - APPL_TRACE_EVENT(" Piggy back the SCN over result field SCN=%d", bta_dm_search_cb.peer_scn); + /* not able to connect go to next device */ + if (bta_dm_search_cb.p_sdp_db) + osi_free_and_reset((void**)&bta_dm_search_cb.p_sdp_db); - } - bdcpy(p_msg->disc_result.result.disc_res.bd_addr, - bta_dm_search_cb.peer_bdaddr); - strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, - bta_dm_get_remname(), BD_NAME_LEN); + BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); - bta_sys_sendmsg(p_msg); - } - } else { - /* conn failed. No need for timer */ - if(p_data->sdp_event.sdp_result == SDP_CONN_FAILED || p_data->sdp_event.sdp_result == SDP_CONN_REJECTED - || p_data->sdp_event.sdp_result == SDP_SECURITY_ERR) - bta_dm_search_cb.wait_disc = false; - - /* not able to connect go to next device */ - if (bta_dm_search_cb.p_sdp_db) - osi_free_and_reset((void **)&bta_dm_search_cb.p_sdp_db); - - BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); - - p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; - p_msg->disc_result.result.disc_res.result = BTA_FAILURE; - p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; - bdcpy(p_msg->disc_result.result.disc_res.bd_addr, - bta_dm_search_cb.peer_bdaddr); - strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, - bta_dm_get_remname(), BD_NAME_LEN); - - bta_sys_sendmsg(p_msg); - } + p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); + p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; + p_msg->disc_result.result.disc_res.result = BTA_FAILURE; + p_msg->disc_result.result.disc_res.services = + bta_dm_search_cb.services_found; + bdcpy(p_msg->disc_result.result.disc_res.bd_addr, + bta_dm_search_cb.peer_bdaddr); + strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, + bta_dm_get_remname(), BD_NAME_LEN); + + bta_sys_sendmsg(p_msg); + } } /******************************************************************************* @@ -1850,45 +1769,47 @@ void bta_dm_sdp_result (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_search_cmpl(tBTA_DM_MSG *p_data) -{ - APPL_TRACE_EVENT("%s", __func__); +void bta_dm_search_cmpl(tBTA_DM_MSG* p_data) { + APPL_TRACE_EVENT("%s", __func__); #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - osi_free_and_reset((void **)&bta_dm_search_cb.p_srvc_uuid); + osi_free_and_reset((void**)&bta_dm_search_cb.p_srvc_uuid); #endif - if (p_data->hdr.layer_specific == BTA_DM_API_DI_DISCOVER_EVT) - bta_dm_di_disc_cmpl(p_data); - else - bta_dm_search_cb.p_search_cback(BTA_DM_DISC_CMPL_EVT, NULL); + if (p_data->hdr.layer_specific == BTA_DM_API_DI_DISCOVER_EVT) + bta_dm_di_disc_cmpl(p_data); + else + bta_dm_search_cb.p_search_cback(BTA_DM_DISC_CMPL_EVT, NULL); } /******************************************************************************* * * Function bta_dm_disc_result * - * Description Service discovery result when discovering services on a device + * Description Service discovery result when discovering services on a + *device * * Returns void * ******************************************************************************/ -void bta_dm_disc_result (tBTA_DM_MSG *p_data) -{ - APPL_TRACE_EVENT("%s", __func__); +void bta_dm_disc_result(tBTA_DM_MSG* p_data) { + APPL_TRACE_EVENT("%s", __func__); #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* if any BR/EDR service discovery has been done, report the event */ - if ((bta_dm_search_cb.services & ((BTA_ALL_SERVICE_MASK | BTA_USER_SERVICE_MASK ) & ~BTA_BLE_SERVICE_MASK))) + /* if any BR/EDR service discovery has been done, report the event */ + if ((bta_dm_search_cb.services & + ((BTA_ALL_SERVICE_MASK | BTA_USER_SERVICE_MASK) & + ~BTA_BLE_SERVICE_MASK))) #endif - bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &p_data->disc_result.result); + bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, + &p_data->disc_result.result); - tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); - /* send a message to change state */ - p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; - bta_sys_sendmsg(p_msg); + /* send a message to change state */ + p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -1900,35 +1821,31 @@ void bta_dm_disc_result (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_search_result (tBTA_DM_MSG *p_data) -{ - APPL_TRACE_DEBUG("%s searching:0x%04x, result:0x%04x", __func__, - bta_dm_search_cb.services, - p_data->disc_result.result.disc_res.services); - - /* call back if application wants name discovery or found services that application is searching */ - if (( !bta_dm_search_cb.services ) - ||(( bta_dm_search_cb.services ) && ( p_data->disc_result.result.disc_res.services ))) - { - bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &p_data->disc_result.result); - } - - /* if searching did not initiate to create link */ - if(!bta_dm_search_cb.wait_disc ) - { - /* if service searching is done with EIR, don't search next device */ - if( bta_dm_search_cb.p_btm_inq_info ) - bta_dm_discover_next_device(); - } - else - { - /* wait until link is disconnected or timeout */ - bta_dm_search_cb.sdp_results = true; - alarm_set_on_queue(bta_dm_search_cb.search_timer, - 1000 * (L2CAP_LINK_INACTIVITY_TOUT + 1), - bta_dm_search_timer_cback, NULL, - btu_bta_alarm_queue); - } +void bta_dm_search_result(tBTA_DM_MSG* p_data) { + APPL_TRACE_DEBUG("%s searching:0x%04x, result:0x%04x", __func__, + bta_dm_search_cb.services, + p_data->disc_result.result.disc_res.services); + + /* call back if application wants name discovery or found services that + * application is searching */ + if ((!bta_dm_search_cb.services) || + ((bta_dm_search_cb.services) && + (p_data->disc_result.result.disc_res.services))) { + bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, + &p_data->disc_result.result); + } + + /* if searching did not initiate to create link */ + if (!bta_dm_search_cb.wait_disc) { + /* if service searching is done with EIR, don't search next device */ + if (bta_dm_search_cb.p_btm_inq_info) bta_dm_discover_next_device(); + } else { + /* wait until link is disconnected or timeout */ + bta_dm_search_cb.sdp_results = true; + alarm_set_on_queue(bta_dm_search_cb.search_timer, + 1000 * (L2CAP_LINK_INACTIVITY_TOUT + 1), + bta_dm_search_timer_cback, NULL, btu_bta_alarm_queue); + } } /******************************************************************************* @@ -1941,17 +1858,14 @@ void bta_dm_search_result (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_search_timer_cback(UNUSED_ATTR void *data) -{ - APPL_TRACE_EVENT("%s", __func__); - bta_dm_search_cb.wait_disc = false; - - /* proceed with next device */ - bta_dm_discover_next_device(); +static void bta_dm_search_timer_cback(UNUSED_ATTR void* data) { + APPL_TRACE_EVENT("%s", __func__); + bta_dm_search_cb.wait_disc = false; + /* proceed with next device */ + bta_dm_discover_next_device(); } - /******************************************************************************* * * Function bta_dm_free_sdp_db @@ -1961,9 +1875,8 @@ static void bta_dm_search_timer_cback(UNUSED_ATTR void *data) * Returns void * ******************************************************************************/ -void bta_dm_free_sdp_db (UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - osi_free_and_reset((void **)&bta_dm_search_cb.p_sdp_db); +void bta_dm_free_sdp_db(UNUSED_ATTR tBTA_DM_MSG* p_data) { + osi_free_and_reset((void**)&bta_dm_search_cb.p_sdp_db); } /******************************************************************************* @@ -1975,13 +1888,11 @@ void bta_dm_free_sdp_db (UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_queue_search(tBTA_DM_MSG *p_data) -{ - osi_free(bta_dm_search_cb.p_search_queue); - bta_dm_search_cb.p_search_queue = - (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_API_SEARCH)); - memcpy(bta_dm_search_cb.p_search_queue, p_data, - sizeof(tBTA_DM_API_SEARCH)); +void bta_dm_queue_search(tBTA_DM_MSG* p_data) { + osi_free(bta_dm_search_cb.p_search_queue); + bta_dm_search_cb.p_search_queue = + (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_API_SEARCH)); + memcpy(bta_dm_search_cb.p_search_queue, p_data, sizeof(tBTA_DM_API_SEARCH)); } /******************************************************************************* @@ -1993,13 +1904,11 @@ void bta_dm_queue_search(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_queue_disc(tBTA_DM_MSG *p_data) -{ - osi_free(bta_dm_search_cb.p_search_queue); - bta_dm_search_cb.p_search_queue = - (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_API_DISCOVER)); - memcpy(bta_dm_search_cb.p_search_queue, p_data, - sizeof(tBTA_DM_API_DISCOVER)); +void bta_dm_queue_disc(tBTA_DM_MSG* p_data) { + osi_free(bta_dm_search_cb.p_search_queue); + bta_dm_search_cb.p_search_queue = + (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_API_DISCOVER)); + memcpy(bta_dm_search_cb.p_search_queue, p_data, sizeof(tBTA_DM_API_DISCOVER)); } /******************************************************************************* @@ -2011,9 +1920,8 @@ void bta_dm_queue_disc(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_search_clear_queue(UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - osi_free_and_reset((void **)&bta_dm_search_cb.p_search_queue); +void bta_dm_search_clear_queue(UNUSED_ATTR tBTA_DM_MSG* p_data) { + osi_free_and_reset((void**)&bta_dm_search_cb.p_search_queue); } /******************************************************************************* @@ -2025,14 +1933,11 @@ void bta_dm_search_clear_queue(UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_search_cancel_cmpl (UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - if(bta_dm_search_cb.p_search_queue) - { - bta_sys_sendmsg(bta_dm_search_cb.p_search_queue); - bta_dm_search_cb.p_search_queue = NULL; - } - +void bta_dm_search_cancel_cmpl(UNUSED_ATTR tBTA_DM_MSG* p_data) { + if (bta_dm_search_cb.p_search_queue) { + bta_sys_sendmsg(bta_dm_search_cb.p_search_queue); + bta_dm_search_cb.p_search_queue = NULL; + } } /******************************************************************************* @@ -2045,13 +1950,11 @@ void bta_dm_search_cancel_cmpl (UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_search_cancel_transac_cmpl(UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - osi_free_and_reset((void **)&bta_dm_search_cb.p_sdp_db); - bta_dm_search_cancel_notify(NULL); +void bta_dm_search_cancel_transac_cmpl(UNUSED_ATTR tBTA_DM_MSG* p_data) { + osi_free_and_reset((void**)&bta_dm_search_cb.p_sdp_db); + bta_dm_search_cancel_notify(NULL); } - /******************************************************************************* * * Function bta_dm_search_cancel_notify @@ -2061,23 +1964,18 @@ void bta_dm_search_cancel_transac_cmpl(UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_search_cancel_notify (UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - if (bta_dm_search_cb.p_search_cback) - { - bta_dm_search_cb.p_search_cback(BTA_DM_SEARCH_CANCEL_CMPL_EVT, NULL); - } - if (!bta_dm_search_cb.name_discover_done) - { - BTM_CancelRemoteDeviceName(); - } +void bta_dm_search_cancel_notify(UNUSED_ATTR tBTA_DM_MSG* p_data) { + if (bta_dm_search_cb.p_search_cback) { + bta_dm_search_cb.p_search_cback(BTA_DM_SEARCH_CANCEL_CMPL_EVT, NULL); + } + if (!bta_dm_search_cb.name_discover_done) { + BTM_CancelRemoteDeviceName(); + } #if (BLE_INCLUDED == TRUE) && (BTA_GATT_INCLUDED == TRUE) - if (bta_dm_search_cb.gatt_disc_active) - { - bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr); - } + if (bta_dm_search_cb.gatt_disc_active) { + bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr); + } #endif - } /******************************************************************************* @@ -2089,113 +1987,116 @@ void bta_dm_search_cancel_notify (UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_find_services ( BD_ADDR bd_addr) -{ - - tSDP_UUID uuid; +static void bta_dm_find_services(BD_ADDR bd_addr) { + tSDP_UUID uuid; + + memset(&uuid, 0, sizeof(tSDP_UUID)); + + while (bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID) { + if (bta_dm_search_cb.services_to_search & + (tBTA_SERVICE_MASK)( + BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))) { + bta_dm_search_cb.p_sdp_db = + (tSDP_DISCOVERY_DB*)osi_malloc(BTA_DM_SDP_DB_SIZE); + APPL_TRACE_DEBUG("bta_dm_search_cb.services = %04x***********", + bta_dm_search_cb.services); + /* try to search all services by search based on L2CAP UUID */ + if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { + LOG_INFO(LOG_TAG, "%s services_to_search=%08x", __func__, + bta_dm_search_cb.services_to_search); + if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) { + uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[0]; + bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK; + } else { + uuid.uu.uuid16 = UUID_PROTOCOL_L2CAP; + bta_dm_search_cb.services_to_search = 0; + } + } else { +#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) + /* for LE only profile */ + if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) { + if (bta_dm_search_cb.uuid_to_search > 0 && + bta_dm_search_cb.p_srvc_uuid) { + memcpy(&uuid, (const void*)(bta_dm_search_cb.p_srvc_uuid + + bta_dm_search_cb.num_uuid - + bta_dm_search_cb.uuid_to_search), + sizeof(tBT_UUID)); + + bta_dm_search_cb.uuid_to_search--; + } else { + uuid.uu.uuid16 = + bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; + } - memset(&uuid, 0, sizeof(tSDP_UUID)); + /* last one? clear the BLE service bit if all discovery has been done + */ + if (bta_dm_search_cb.uuid_to_search == 0) + bta_dm_search_cb.services_to_search &= + (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK( + bta_dm_search_cb.service_index))); - while(bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID) - { - if( bta_dm_search_cb.services_to_search - & (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))) - { - bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB *)osi_malloc(BTA_DM_SDP_DB_SIZE); - APPL_TRACE_DEBUG("bta_dm_search_cb.services = %04x***********", bta_dm_search_cb.services); - /* try to search all services by search based on L2CAP UUID */ - if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { - LOG_INFO(LOG_TAG, "%s services_to_search=%08x", __func__, - bta_dm_search_cb.services_to_search); - if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) { - uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[0]; - bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK; - } else { - uuid.uu.uuid16 = UUID_PROTOCOL_L2CAP; - bta_dm_search_cb.services_to_search = 0; - } - } else { -#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* for LE only profile */ - if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) { - if (bta_dm_search_cb.uuid_to_search > 0 && - bta_dm_search_cb.p_srvc_uuid) { - memcpy(&uuid, - (const void *)(bta_dm_search_cb.p_srvc_uuid + - bta_dm_search_cb.num_uuid - - bta_dm_search_cb.uuid_to_search), - sizeof(tBT_UUID)); - - bta_dm_search_cb.uuid_to_search--; - } else { - uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; - } - - /* last one? clear the BLE service bit if all discovery has been done */ - if (bta_dm_search_cb.uuid_to_search == 0) - bta_dm_search_cb.services_to_search &= - (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); - - } else + } else #endif - { - /* remove the service from services to be searched */ - bta_dm_search_cb.services_to_search &= - (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); - uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; - } - } + { + /* remove the service from services to be searched */ + bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( + BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); + uuid.uu.uuid16 = + bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; + } + } - if (uuid.len == 0) - uuid.len = LEN_UUID_16; + if (uuid.len == 0) uuid.len = LEN_UUID_16; - if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID) { - memcpy(&uuid, &bta_dm_search_cb.uuid, sizeof(tSDP_UUID)); - } + if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID) { + memcpy(&uuid, &bta_dm_search_cb.uuid, sizeof(tSDP_UUID)); + } - LOG_INFO(LOG_TAG, "%s search UUID = %04x", __func__, - uuid.uu.uuid16); - SDP_InitDiscoveryDb(bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, - 1, &uuid, 0, NULL); + LOG_INFO(LOG_TAG, "%s search UUID = %04x", __func__, uuid.uu.uuid16); + SDP_InitDiscoveryDb(bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, + &uuid, 0, NULL); - memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf)); - bta_dm_search_cb.p_sdp_db->raw_data = g_disc_raw_data_buf; + memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf)); + bta_dm_search_cb.p_sdp_db->raw_data = g_disc_raw_data_buf; - bta_dm_search_cb.p_sdp_db->raw_size = MAX_DISC_RAW_DATA_BUF; + bta_dm_search_cb.p_sdp_db->raw_size = MAX_DISC_RAW_DATA_BUF; - if (!SDP_ServiceSearchAttributeRequest(bd_addr, bta_dm_search_cb.p_sdp_db, &bta_dm_sdp_callback)) { - /* - * If discovery is not successful with this device, then - * proceed with the next one. - */ - osi_free_and_reset((void **)&bta_dm_search_cb.p_sdp_db); - bta_dm_search_cb.service_index = BTA_MAX_SERVICE_ID; + if (!SDP_ServiceSearchAttributeRequest(bd_addr, bta_dm_search_cb.p_sdp_db, + &bta_dm_sdp_callback)) { + /* + * If discovery is not successful with this device, then + * proceed with the next one. + */ + osi_free_and_reset((void**)&bta_dm_search_cb.p_sdp_db); + bta_dm_search_cb.service_index = BTA_MAX_SERVICE_ID; - } else { + } else { #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - if ((bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID && - bta_dm_search_cb.uuid_to_search == 0) || - bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID) + if ((bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID && + bta_dm_search_cb.uuid_to_search == 0) || + bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID) #endif - bta_dm_search_cb.service_index++; - return; - } - } - - bta_dm_search_cb.service_index++; + bta_dm_search_cb.service_index++; + return; + } } - /* no more services to be discovered */ - if (bta_dm_search_cb.service_index >= BTA_MAX_SERVICE_ID) { - tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; - p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; - bdcpy(p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); - strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, - bta_dm_get_remname(), BD_NAME_LEN); - - bta_sys_sendmsg(p_msg); - } + bta_dm_search_cb.service_index++; + } + + /* no more services to be discovered */ + if (bta_dm_search_cb.service_index >= BTA_MAX_SERVICE_ID) { + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); + p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; + p_msg->disc_result.result.disc_res.services = + bta_dm_search_cb.services_found; + bdcpy(p_msg->disc_result.result.disc_res.bd_addr, + bta_dm_search_cb.peer_bdaddr); + strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, + bta_dm_get_remname(), BD_NAME_LEN); + + bta_sys_sendmsg(p_msg); + } } /******************************************************************************* @@ -2207,27 +2108,27 @@ static void bta_dm_find_services ( BD_ADDR bd_addr) * Returns void * ******************************************************************************/ -static void bta_dm_discover_next_device(void) -{ - APPL_TRACE_DEBUG("bta_dm_discover_next_device"); - - /* searching next device on inquiry result */ - if((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbNext(bta_dm_search_cb.p_btm_inq_info)) != NULL) { - bta_dm_search_cb.name_discover_done = false; - bta_dm_search_cb.peer_name[0] = 0; - bta_dm_discover_device(bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr); - } else { - tBTA_DM_MSG *p_msg = - (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); +static void bta_dm_discover_next_device(void) { + APPL_TRACE_DEBUG("bta_dm_discover_next_device"); - /* no devices, search complete */ - bta_dm_search_cb.services = 0; + /* searching next device on inquiry result */ + if ((bta_dm_search_cb.p_btm_inq_info = + BTM_InqDbNext(bta_dm_search_cb.p_btm_inq_info)) != NULL) { + bta_dm_search_cb.name_discover_done = false; + bta_dm_search_cb.peer_name[0] = 0; + bta_dm_discover_device( + bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr); + } else { + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; + /* no devices, search complete */ + bta_dm_search_cb.services = 0; - bta_sys_sendmsg(p_msg); - } + p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; + + bta_sys_sendmsg(p_msg); + } } /******************************************************************************* @@ -2239,145 +2140,136 @@ static void bta_dm_discover_next_device(void) * Returns void * ******************************************************************************/ -static void bta_dm_discover_device(BD_ADDR remote_bd_addr) -{ - tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR; +static void bta_dm_discover_device(BD_ADDR remote_bd_addr) { + tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR; #if (BLE_INCLUDED == TRUE) - if (bta_dm_search_cb.transport == BTA_TRANSPORT_UNKNOWN) - { - tBT_DEVICE_TYPE dev_type; - tBLE_ADDR_TYPE addr_type; - - BTM_ReadDevInfo(remote_bd_addr, &dev_type, &addr_type); - if (dev_type == BT_DEVICE_TYPE_BLE || addr_type == BLE_ADDR_RANDOM) - transport = BT_TRANSPORT_LE; - } else { - transport = bta_dm_search_cb.transport; - } + if (bta_dm_search_cb.transport == BTA_TRANSPORT_UNKNOWN) { + tBT_DEVICE_TYPE dev_type; + tBLE_ADDR_TYPE addr_type; + + BTM_ReadDevInfo(remote_bd_addr, &dev_type, &addr_type); + if (dev_type == BT_DEVICE_TYPE_BLE || addr_type == BLE_ADDR_RANDOM) + transport = BT_TRANSPORT_LE; + } else { + transport = bta_dm_search_cb.transport; + } #endif - /* Reset transport state for next discovery */ - bta_dm_search_cb.transport = BTA_TRANSPORT_UNKNOWN; + /* Reset transport state for next discovery */ + bta_dm_search_cb.transport = BTA_TRANSPORT_UNKNOWN; - APPL_TRACE_DEBUG("%s BDA:0x%02X%02X%02X%02X%02X%02X", __func__, - remote_bd_addr[0],remote_bd_addr[1], - remote_bd_addr[2],remote_bd_addr[3], - remote_bd_addr[4],remote_bd_addr[5]); + APPL_TRACE_DEBUG("%s BDA:0x%02X%02X%02X%02X%02X%02X", __func__, + remote_bd_addr[0], remote_bd_addr[1], remote_bd_addr[2], + remote_bd_addr[3], remote_bd_addr[4], remote_bd_addr[5]); - bdcpy(bta_dm_search_cb.peer_bdaddr, remote_bd_addr); + bdcpy(bta_dm_search_cb.peer_bdaddr, remote_bd_addr); - APPL_TRACE_DEBUG("%s name_discover_done = %d p_btm_inq_info 0x%x state = %d, transport=%d", - __func__, - bta_dm_search_cb.name_discover_done, - bta_dm_search_cb.p_btm_inq_info, - bta_dm_search_cb.state, - transport); + APPL_TRACE_DEBUG( + "%s name_discover_done = %d p_btm_inq_info 0x%x state = %d, transport=%d", + __func__, bta_dm_search_cb.name_discover_done, + bta_dm_search_cb.p_btm_inq_info, bta_dm_search_cb.state, transport); - if (bta_dm_search_cb.p_btm_inq_info) - { - APPL_TRACE_DEBUG("%s appl_knows_rem_name %d", __func__, - bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name); - } + if (bta_dm_search_cb.p_btm_inq_info) { + APPL_TRACE_DEBUG("%s appl_knows_rem_name %d", __func__, + bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name); + } #if (BLE_INCLUDED == TRUE) - if((bta_dm_search_cb.p_btm_inq_info) - && (bta_dm_search_cb.p_btm_inq_info->results.device_type == BT_DEVICE_TYPE_BLE) - && (bta_dm_search_cb.state == BTA_DM_SEARCH_ACTIVE)) - { - /* Do not perform RNR for LE devices at inquiry complete*/ - bta_dm_search_cb.name_discover_done = true; - } + if ((bta_dm_search_cb.p_btm_inq_info) && + (bta_dm_search_cb.p_btm_inq_info->results.device_type == + BT_DEVICE_TYPE_BLE) && + (bta_dm_search_cb.state == BTA_DM_SEARCH_ACTIVE)) { + /* Do not perform RNR for LE devices at inquiry complete*/ + bta_dm_search_cb.name_discover_done = true; + } #endif - /* if name discovery is not done and application needs remote name */ - if ((!bta_dm_search_cb.name_discover_done) - && (( bta_dm_search_cb.p_btm_inq_info == NULL ) - ||(bta_dm_search_cb.p_btm_inq_info && (!bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name)))) - { - if (bta_dm_read_remote_device_name(bta_dm_search_cb.peer_bdaddr, transport) == true) - return; - - /* starting name discovery failed */ - bta_dm_search_cb.name_discover_done = true; - } + /* if name discovery is not done and application needs remote name */ + if ((!bta_dm_search_cb.name_discover_done) && + ((bta_dm_search_cb.p_btm_inq_info == NULL) || + (bta_dm_search_cb.p_btm_inq_info && + (!bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name)))) { + if (bta_dm_read_remote_device_name(bta_dm_search_cb.peer_bdaddr, + transport) == true) + return; + + /* starting name discovery failed */ + bta_dm_search_cb.name_discover_done = true; + } - /* if application wants to discover service */ - if ( bta_dm_search_cb.services ) - { - /* initialize variables */ - bta_dm_search_cb.service_index = 0; - bta_dm_search_cb.services_found = 0; - bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; + /* if application wants to discover service */ + if (bta_dm_search_cb.services) { + /* initialize variables */ + bta_dm_search_cb.service_index = 0; + bta_dm_search_cb.services_found = 0; + bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; + bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; #endif - if ((bta_dm_search_cb.p_btm_inq_info != NULL) && - bta_dm_search_cb.services != BTA_USER_SERVICE_MASK - &&(bta_dm_search_cb.sdp_search == false)) - { - /* check if EIR provides the information of supported services */ - bta_dm_eir_search_services( &bta_dm_search_cb.p_btm_inq_info->results, - &bta_dm_search_cb.services_to_search, - &bta_dm_search_cb.services_found ); - } - - /* if seaching with EIR is not completed */ - if(bta_dm_search_cb.services_to_search) - { - /* check whether connection already exists to the device - if connection exists, we don't have to wait for ACL - link to go down to start search on next device */ - if (BTM_IsAclConnectionUp(bta_dm_search_cb.peer_bdaddr, BT_TRANSPORT_BR_EDR)) - bta_dm_search_cb.wait_disc = false; - else - bta_dm_search_cb.wait_disc = true; + if ((bta_dm_search_cb.p_btm_inq_info != NULL) && + bta_dm_search_cb.services != BTA_USER_SERVICE_MASK && + (bta_dm_search_cb.sdp_search == false)) { + /* check if EIR provides the information of supported services */ + bta_dm_eir_search_services(&bta_dm_search_cb.p_btm_inq_info->results, + &bta_dm_search_cb.services_to_search, + &bta_dm_search_cb.services_found); + } + + /* if seaching with EIR is not completed */ + if (bta_dm_search_cb.services_to_search) { + /* check whether connection already exists to the device + if connection exists, we don't have to wait for ACL + link to go down to start search on next device */ + if (BTM_IsAclConnectionUp(bta_dm_search_cb.peer_bdaddr, + BT_TRANSPORT_BR_EDR)) + bta_dm_search_cb.wait_disc = false; + else + bta_dm_search_cb.wait_disc = true; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - if ( bta_dm_search_cb.p_btm_inq_info ) - { - APPL_TRACE_DEBUG("%s p_btm_inq_info 0x%x results.device_type 0x%x services_to_search 0x%x", - __func__, - bta_dm_search_cb.p_btm_inq_info, - bta_dm_search_cb.p_btm_inq_info->results.device_type, - bta_dm_search_cb.services_to_search); - } + if (bta_dm_search_cb.p_btm_inq_info) { + APPL_TRACE_DEBUG( + "%s p_btm_inq_info 0x%x results.device_type 0x%x " + "services_to_search 0x%x", + __func__, bta_dm_search_cb.p_btm_inq_info, + bta_dm_search_cb.p_btm_inq_info->results.device_type, + bta_dm_search_cb.services_to_search); + } - if (transport == BT_TRANSPORT_LE) - { - if (bta_dm_search_cb.services_to_search & BTA_BLE_SERVICE_MASK) - { - //set the raw data buffer here - memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf)); - bta_dm_search_cb.p_ble_rawdata = g_disc_raw_data_buf; - - bta_dm_search_cb.ble_raw_size = MAX_DISC_RAW_DATA_BUF; - bta_dm_search_cb.ble_raw_used = 0; - - /* start GATT for service discovery */ - btm_dm_start_gatt_discovery(bta_dm_search_cb.peer_bdaddr); - return; - } - } - else -#endif - { - bta_dm_search_cb.sdp_results = false; - bta_dm_find_services(bta_dm_search_cb.peer_bdaddr); - return; - } - } - } + if (transport == BT_TRANSPORT_LE) { + if (bta_dm_search_cb.services_to_search & BTA_BLE_SERVICE_MASK) { + // set the raw data buffer here + memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf)); + bta_dm_search_cb.p_ble_rawdata = g_disc_raw_data_buf; - /* name discovery and service discovery are done for this device */ - tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; - /* initialize the data structure - includes p_raw_data and raw_data_size */ - memset(&(p_msg->disc_result.result), 0, sizeof(tBTA_DM_DISC_RES)); - p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; - p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; - bdcpy(p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); - strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, - (char*)bta_dm_search_cb.peer_name, BD_NAME_LEN); + bta_dm_search_cb.ble_raw_size = MAX_DISC_RAW_DATA_BUF; + bta_dm_search_cb.ble_raw_used = 0; - bta_sys_sendmsg(p_msg); + /* start GATT for service discovery */ + btm_dm_start_gatt_discovery(bta_dm_search_cb.peer_bdaddr); + return; + } + } else +#endif + { + bta_dm_search_cb.sdp_results = false; + bta_dm_find_services(bta_dm_search_cb.peer_bdaddr); + return; + } + } + } + + /* name discovery and service discovery are done for this device */ + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); + p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; + /* initialize the data structure - includes p_raw_data and raw_data_size */ + memset(&(p_msg->disc_result.result), 0, sizeof(tBTA_DM_DISC_RES)); + p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; + p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; + bdcpy(p_msg->disc_result.result.disc_res.bd_addr, + bta_dm_search_cb.peer_bdaddr); + strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, + (char*)bta_dm_search_cb.peer_name, BD_NAME_LEN); + + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -2389,16 +2281,14 @@ static void bta_dm_discover_device(BD_ADDR remote_bd_addr) * Returns void * ******************************************************************************/ -static void bta_dm_sdp_callback (uint16_t sdp_status) -{ +static void bta_dm_sdp_callback(uint16_t sdp_status) { + tBTA_DM_SDP_RESULT* p_msg = + (tBTA_DM_SDP_RESULT*)osi_malloc(sizeof(tBTA_DM_SDP_RESULT)); - tBTA_DM_SDP_RESULT *p_msg = - (tBTA_DM_SDP_RESULT *)osi_malloc(sizeof(tBTA_DM_SDP_RESULT)); + p_msg->hdr.event = BTA_DM_SDP_RESULT_EVT; + p_msg->sdp_result = sdp_status; - p_msg->hdr.event = BTA_DM_SDP_RESULT_EVT; - p_msg->sdp_result = sdp_status; - - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -2410,52 +2300,45 @@ static void bta_dm_sdp_callback (uint16_t sdp_status) * Returns void * ******************************************************************************/ -static void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, uint8_t *p_eir) -{ - - tBTA_DM_SEARCH result; - tBTM_INQ_INFO *p_inq_info; - uint16_t service_class; - - bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr); - memcpy(result.inq_res.dev_class, p_inq->dev_class, DEV_CLASS_LEN); - BTM_COD_SERVICE_CLASS(service_class, p_inq->dev_class); - result.inq_res.is_limited = (service_class & BTM_COD_SERVICE_LMTD_DISCOVER)?true:false; - result.inq_res.rssi = p_inq->rssi; +static void bta_dm_inq_results_cb(tBTM_INQ_RESULTS* p_inq, uint8_t* p_eir) { + tBTA_DM_SEARCH result; + tBTM_INQ_INFO* p_inq_info; + uint16_t service_class; + + bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr); + memcpy(result.inq_res.dev_class, p_inq->dev_class, DEV_CLASS_LEN); + BTM_COD_SERVICE_CLASS(service_class, p_inq->dev_class); + result.inq_res.is_limited = + (service_class & BTM_COD_SERVICE_LMTD_DISCOVER) ? true : false; + result.inq_res.rssi = p_inq->rssi; #if (BLE_INCLUDED == TRUE) - result.inq_res.ble_addr_type = p_inq->ble_addr_type; - result.inq_res.inq_result_type = p_inq->inq_result_type; - result.inq_res.device_type = p_inq->device_type; - result.inq_res.flag = p_inq->flag; + result.inq_res.ble_addr_type = p_inq->ble_addr_type; + result.inq_res.inq_result_type = p_inq->inq_result_type; + result.inq_res.device_type = p_inq->device_type; + result.inq_res.flag = p_inq->flag; #endif - /* application will parse EIR to find out remote device name */ - result.inq_res.p_eir = p_eir; - - if((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL) - { - /* initialize remt_name_not_required to false so that we get the name by default */ - result.inq_res.remt_name_not_required = false; + /* application will parse EIR to find out remote device name */ + result.inq_res.p_eir = p_eir; - } - - if(bta_dm_search_cb.p_search_cback) - bta_dm_search_cb.p_search_cback(BTA_DM_INQ_RES_EVT, &result); - - if(p_inq_info) - { - /* application indicates if it knows the remote name, inside the callback - copy that to the inquiry data base*/ - if(result.inq_res.remt_name_not_required) - p_inq_info->appl_knows_rem_name = true; - - } + if ((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL) { + /* initialize remt_name_not_required to false so that we get the name by + * default */ + result.inq_res.remt_name_not_required = false; + } + if (bta_dm_search_cb.p_search_cback) + bta_dm_search_cb.p_search_cback(BTA_DM_INQ_RES_EVT, &result); + if (p_inq_info) { + /* application indicates if it knows the remote name, inside the callback + copy that to the inquiry data base*/ + if (result.inq_res.remt_name_not_required) + p_inq_info->appl_knows_rem_name = true; + } } - /******************************************************************************* * * Function bta_dm_inq_cmpl_cb @@ -2465,23 +2348,22 @@ static void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, uint8_t *p_eir) * Returns void * ******************************************************************************/ -static void bta_dm_inq_cmpl_cb (void * p_result) -{ - tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); +static void bta_dm_inq_cmpl_cb(void* p_result) { + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (bta_dm_search_cb.cancel_pending == false) { - p_msg->inq_cmpl.hdr.event = BTA_DM_INQUIRY_CMPL_EVT; - p_msg->inq_cmpl.num = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp; - } else { - bta_dm_search_cb.cancel_pending = false; - bta_dm_search_cancel_notify(NULL); - p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; - p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; - } + if (bta_dm_search_cb.cancel_pending == false) { + p_msg->inq_cmpl.hdr.event = BTA_DM_INQUIRY_CMPL_EVT; + p_msg->inq_cmpl.num = ((tBTM_INQUIRY_CMPL*)p_result)->num_resp; + } else { + bta_dm_search_cb.cancel_pending = false; + bta_dm_search_cancel_notify(NULL); + p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; + p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; + } - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -2493,53 +2375,50 @@ static void bta_dm_inq_cmpl_cb (void * p_result) * Returns void * ******************************************************************************/ -static void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, - UNUSED_ATTR DEV_CLASS dc, BD_NAME bd_name) -{ - tBTM_REMOTE_DEV_NAME rem_name; - tBTM_STATUS btm_status; - - APPL_TRACE_DEBUG("bta_dm_service_search_remname_cback name=<%s>", bd_name); - - /* if this is what we are looking for */ - if (!bdcmp( bta_dm_search_cb.peer_bdaddr, bd_addr)) - { - rem_name.length = strlen((char*)bd_name); - if (rem_name.length > (BD_NAME_LEN-1)) - { - rem_name.length = (BD_NAME_LEN-1); - rem_name.remote_bd_name[(BD_NAME_LEN-1)] = 0; - } - strlcpy((char*)rem_name.remote_bd_name, (char*)bd_name, BD_NAME_LEN); - rem_name.status = BTM_SUCCESS; - - bta_dm_remname_cback(&rem_name); - } - else - { - /* get name of device */ - btm_status = BTM_ReadRemoteDeviceName (bta_dm_search_cb.peer_bdaddr, - (tBTM_CMPL_CB *) bta_dm_remname_cback, - BT_TRANSPORT_BR_EDR); - if ( btm_status == BTM_BUSY ) - { - /* wait for next chance(notification of remote name discovery done) */ - APPL_TRACE_DEBUG("bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName is busy"); - } - else if ( btm_status != BTM_CMD_STARTED ) - { - /* if failed to start getting remote name then continue */ - APPL_TRACE_WARNING("bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName returns 0x%02X", btm_status); - - rem_name.length = 0; - rem_name.remote_bd_name[0] = 0; - rem_name.status = btm_status; - bta_dm_remname_cback(&rem_name); - } - } +static void bta_dm_service_search_remname_cback(BD_ADDR bd_addr, + UNUSED_ATTR DEV_CLASS dc, + BD_NAME bd_name) { + tBTM_REMOTE_DEV_NAME rem_name; + tBTM_STATUS btm_status; + + APPL_TRACE_DEBUG("bta_dm_service_search_remname_cback name=<%s>", bd_name); + + /* if this is what we are looking for */ + if (!bdcmp(bta_dm_search_cb.peer_bdaddr, bd_addr)) { + rem_name.length = strlen((char*)bd_name); + if (rem_name.length > (BD_NAME_LEN - 1)) { + rem_name.length = (BD_NAME_LEN - 1); + rem_name.remote_bd_name[(BD_NAME_LEN - 1)] = 0; + } + strlcpy((char*)rem_name.remote_bd_name, (char*)bd_name, BD_NAME_LEN); + rem_name.status = BTM_SUCCESS; + + bta_dm_remname_cback(&rem_name); + } else { + /* get name of device */ + btm_status = BTM_ReadRemoteDeviceName(bta_dm_search_cb.peer_bdaddr, + (tBTM_CMPL_CB*)bta_dm_remname_cback, + BT_TRANSPORT_BR_EDR); + if (btm_status == BTM_BUSY) { + /* wait for next chance(notification of remote name discovery done) */ + APPL_TRACE_DEBUG( + "bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName is " + "busy"); + } else if (btm_status != BTM_CMD_STARTED) { + /* if failed to start getting remote name then continue */ + APPL_TRACE_WARNING( + "bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName " + "returns 0x%02X", + btm_status); + + rem_name.length = 0; + rem_name.remote_bd_name[0] = 0; + rem_name.status = btm_status; + bta_dm_remname_cback(&rem_name); + } + } } - /******************************************************************************* * * Function bta_dm_remname_cback @@ -2549,33 +2428,31 @@ static void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, * Returns void * ******************************************************************************/ -static void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name) -{ - APPL_TRACE_DEBUG("bta_dm_remname_cback len = %d name=<%s>", p_remote_name->length, - p_remote_name->remote_bd_name); +static void bta_dm_remname_cback(tBTM_REMOTE_DEV_NAME* p_remote_name) { + APPL_TRACE_DEBUG("bta_dm_remname_cback len = %d name=<%s>", + p_remote_name->length, p_remote_name->remote_bd_name); - /* remote name discovery is done but it could be failed */ - bta_dm_search_cb.name_discover_done = true; - strlcpy((char*)bta_dm_search_cb.peer_name, - (char*)p_remote_name->remote_bd_name, BD_NAME_LEN); + /* remote name discovery is done but it could be failed */ + bta_dm_search_cb.name_discover_done = true; + strlcpy((char*)bta_dm_search_cb.peer_name, + (char*)p_remote_name->remote_bd_name, BD_NAME_LEN); - BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); + BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); #if (BLE_INCLUDED == TRUE) - if (bta_dm_search_cb.transport == BT_TRANSPORT_LE ) - { - GAP_BleReadPeerPrefConnParams (bta_dm_search_cb.peer_bdaddr); - } + if (bta_dm_search_cb.transport == BT_TRANSPORT_LE) { + GAP_BleReadPeerPrefConnParams(bta_dm_search_cb.peer_bdaddr); + } #endif - tBTA_DM_REM_NAME *p_msg = - (tBTA_DM_REM_NAME *)osi_malloc(sizeof(tBTA_DM_REM_NAME)); - bdcpy(p_msg->result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); - strlcpy((char*)p_msg->result.disc_res.bd_name, - (char*)p_remote_name->remote_bd_name, BD_NAME_LEN); - p_msg->hdr.event = BTA_DM_REMT_NAME_EVT; + tBTA_DM_REM_NAME* p_msg = + (tBTA_DM_REM_NAME*)osi_malloc(sizeof(tBTA_DM_REM_NAME)); + bdcpy(p_msg->result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); + strlcpy((char*)p_msg->result.disc_res.bd_name, + (char*)p_remote_name->remote_bd_name, BD_NAME_LEN); + p_msg->hdr.event = BTA_DM_REMT_NAME_EVT; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -2587,54 +2464,46 @@ static void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name) * Returns void * ******************************************************************************/ -static uint8_t bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, - UNUSED_ATTR uint8_t *service_name, uint8_t service_id, - UNUSED_ATTR bool is_originator) -{ - tBTA_DM_SEC sec_event; - uint8_t index = 1; - - bdcpy(sec_event.authorize.bd_addr, bd_addr); - memcpy(sec_event.authorize.dev_class, dev_class, DEV_CLASS_LEN); - strlcpy((char*)sec_event.authorize.bd_name, (char*)bd_name, BD_NAME_LEN); +static uint8_t bta_dm_authorize_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, + BD_NAME bd_name, + UNUSED_ATTR uint8_t* service_name, + uint8_t service_id, + UNUSED_ATTR bool is_originator) { + tBTA_DM_SEC sec_event; + uint8_t index = 1; + + bdcpy(sec_event.authorize.bd_addr, bd_addr); + memcpy(sec_event.authorize.dev_class, dev_class, DEV_CLASS_LEN); + strlcpy((char*)sec_event.authorize.bd_name, (char*)bd_name, BD_NAME_LEN); #if (BTA_JV_INCLUDED == TRUE) - sec_event.authorize.service = service_id; + sec_event.authorize.service = service_id; #endif - while(index < BTA_MAX_SERVICE_ID) - { - /* get the BTA service id corresponding to BTM id */ - if(bta_service_id_to_btm_srv_id_lkup_tbl[index] == service_id) - { - sec_event.authorize.service = index; - break; - } - index++; + while (index < BTA_MAX_SERVICE_ID) { + /* get the BTA service id corresponding to BTM id */ + if (bta_service_id_to_btm_srv_id_lkup_tbl[index] == service_id) { + sec_event.authorize.service = index; + break; } + index++; + } - - /* if supported service callback otherwise not authorized */ - if(bta_dm_cb.p_sec_cback && (index < BTA_MAX_SERVICE_ID + /* if supported service callback otherwise not authorized */ + if (bta_dm_cb.p_sec_cback && (index < BTA_MAX_SERVICE_ID #if (BTA_JV_INCLUDED == TRUE) - /* pass through JV service ID */ - || (service_id >= BTA_FIRST_JV_SERVICE_ID && service_id <= BTA_LAST_JV_SERVICE_ID) + /* pass through JV service ID */ + || (service_id >= BTA_FIRST_JV_SERVICE_ID && + service_id <= BTA_LAST_JV_SERVICE_ID) #endif - )) - { - bta_dm_cb.p_sec_cback(BTA_DM_AUTHORIZE_EVT, &sec_event); - return BTM_CMD_STARTED; - } - else - { - return BTM_NOT_AUTHORIZED; - } + )) { + bta_dm_cb.p_sec_cback(BTA_DM_AUTHORIZE_EVT, &sec_event); + return BTM_CMD_STARTED; + } else { + return BTM_NOT_AUTHORIZED; + } } - - - - /******************************************************************************* * * Function bta_dm_pinname_cback @@ -2644,56 +2513,53 @@ static uint8_t bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_ * Returns void * ******************************************************************************/ -static void bta_dm_pinname_cback (void *p_data) -{ - tBTM_REMOTE_DEV_NAME *p_result = (tBTM_REMOTE_DEV_NAME *)p_data; - tBTA_DM_SEC sec_event; - uint32_t bytes_to_copy; - tBTA_DM_SEC_EVT event = bta_dm_cb.pin_evt; - - if (BTA_DM_SP_CFM_REQ_EVT == event) - { - /* Retrieved saved device class and bd_addr */ - bdcpy(sec_event.cfm_req.bd_addr, bta_dm_cb.pin_bd_addr); - BTA_COPY_DEVICE_CLASS(sec_event.cfm_req.dev_class, bta_dm_cb.pin_dev_class); - - if (p_result && p_result->status == BTM_SUCCESS) - { - bytes_to_copy = (p_result->length < (BD_NAME_LEN-1)) - ? p_result->length : (BD_NAME_LEN-1); - memcpy(sec_event.cfm_req.bd_name, p_result->remote_bd_name, bytes_to_copy); - sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0; - } - else /* No name found */ - sec_event.cfm_req.bd_name[0] = 0; - - sec_event.key_notif.passkey = bta_dm_cb.num_val; /* get PIN code numeric number */ - - /* 1 additional event data fields for this event */ - sec_event.cfm_req.just_works = bta_dm_cb.just_works; - } - else - { - /* Retrieved saved device class and bd_addr */ - bdcpy(sec_event.pin_req.bd_addr, bta_dm_cb.pin_bd_addr); - BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, bta_dm_cb.pin_dev_class); - - if (p_result && p_result->status == BTM_SUCCESS) - { - bytes_to_copy = (p_result->length < (BD_NAME_LEN-1)) - ? p_result->length : (BD_NAME_LEN-1); - memcpy(sec_event.pin_req.bd_name, p_result->remote_bd_name, bytes_to_copy); - sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0; - } - else /* No name found */ - sec_event.pin_req.bd_name[0] = 0; - - event = bta_dm_cb.pin_evt; - sec_event.key_notif.passkey = bta_dm_cb.num_val; /* get PIN code numeric number */ - } - - if( bta_dm_cb.p_sec_cback ) - bta_dm_cb.p_sec_cback(event, &sec_event); +static void bta_dm_pinname_cback(void* p_data) { + tBTM_REMOTE_DEV_NAME* p_result = (tBTM_REMOTE_DEV_NAME*)p_data; + tBTA_DM_SEC sec_event; + uint32_t bytes_to_copy; + tBTA_DM_SEC_EVT event = bta_dm_cb.pin_evt; + + if (BTA_DM_SP_CFM_REQ_EVT == event) { + /* Retrieved saved device class and bd_addr */ + bdcpy(sec_event.cfm_req.bd_addr, bta_dm_cb.pin_bd_addr); + BTA_COPY_DEVICE_CLASS(sec_event.cfm_req.dev_class, bta_dm_cb.pin_dev_class); + + if (p_result && p_result->status == BTM_SUCCESS) { + bytes_to_copy = (p_result->length < (BD_NAME_LEN - 1)) + ? p_result->length + : (BD_NAME_LEN - 1); + memcpy(sec_event.cfm_req.bd_name, p_result->remote_bd_name, + bytes_to_copy); + sec_event.pin_req.bd_name[BD_NAME_LEN - 1] = 0; + } else /* No name found */ + sec_event.cfm_req.bd_name[0] = 0; + + sec_event.key_notif.passkey = + bta_dm_cb.num_val; /* get PIN code numeric number */ + + /* 1 additional event data fields for this event */ + sec_event.cfm_req.just_works = bta_dm_cb.just_works; + } else { + /* Retrieved saved device class and bd_addr */ + bdcpy(sec_event.pin_req.bd_addr, bta_dm_cb.pin_bd_addr); + BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, bta_dm_cb.pin_dev_class); + + if (p_result && p_result->status == BTM_SUCCESS) { + bytes_to_copy = (p_result->length < (BD_NAME_LEN - 1)) + ? p_result->length + : (BD_NAME_LEN - 1); + memcpy(sec_event.pin_req.bd_name, p_result->remote_bd_name, + bytes_to_copy); + sec_event.pin_req.bd_name[BD_NAME_LEN - 1] = 0; + } else /* No name found */ + sec_event.pin_req.bd_name[0] = 0; + + event = bta_dm_cb.pin_evt; + sec_event.key_notif.passkey = + bta_dm_cb.num_val; /* get PIN code numeric number */ + } + + if (bta_dm_cb.p_sec_cback) bta_dm_cb.p_sec_cback(event, &sec_event); } /******************************************************************************* @@ -2705,33 +2571,33 @@ static void bta_dm_pinname_cback (void *p_data) * Returns void * ******************************************************************************/ -static uint8_t bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, - bool min_16_digit) -{ - tBTA_DM_SEC sec_event; - - if (!bta_dm_cb.p_sec_cback) - return BTM_NOT_AUTHORIZED; - - /* If the device name is not known, save bdaddr and devclass and initiate a name request */ - if (bd_name[0] == 0) - { - bta_dm_cb.pin_evt = BTA_DM_PIN_REQ_EVT; - bdcpy(bta_dm_cb.pin_bd_addr, bd_addr); - BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, dev_class); - if ((BTM_ReadRemoteDeviceName(bd_addr, bta_dm_pinname_cback, BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) - return BTM_CMD_STARTED; - - APPL_TRACE_WARNING(" bta_dm_pin_cback() -> Failed to start Remote Name Request "); - } - - bdcpy(sec_event.pin_req.bd_addr, bd_addr); - BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class); - strlcpy((char*)sec_event.pin_req.bd_name, (char*)bd_name, BD_NAME_LEN); - sec_event.pin_req.min_16_digit = min_16_digit; - - bta_dm_cb.p_sec_cback(BTA_DM_PIN_REQ_EVT, &sec_event); - return BTM_CMD_STARTED; +static uint8_t bta_dm_pin_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, + BD_NAME bd_name, bool min_16_digit) { + tBTA_DM_SEC sec_event; + + if (!bta_dm_cb.p_sec_cback) return BTM_NOT_AUTHORIZED; + + /* If the device name is not known, save bdaddr and devclass and initiate a + * name request */ + if (bd_name[0] == 0) { + bta_dm_cb.pin_evt = BTA_DM_PIN_REQ_EVT; + bdcpy(bta_dm_cb.pin_bd_addr, bd_addr); + BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, dev_class); + if ((BTM_ReadRemoteDeviceName(bd_addr, bta_dm_pinname_cback, + BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) + return BTM_CMD_STARTED; + + APPL_TRACE_WARNING( + " bta_dm_pin_cback() -> Failed to start Remote Name Request "); + } + + bdcpy(sec_event.pin_req.bd_addr, bd_addr); + BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class); + strlcpy((char*)sec_event.pin_req.bd_name, (char*)bd_name, BD_NAME_LEN); + sec_event.pin_req.min_16_digit = min_16_digit; + + bta_dm_cb.p_sec_cback(BTA_DM_PIN_REQ_EVT, &sec_event); + return BTM_CMD_STARTED; } /******************************************************************************* @@ -2743,55 +2609,53 @@ static uint8_t bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME b * Returns void * ******************************************************************************/ -static uint8_t bta_dm_new_link_key_cback(BD_ADDR bd_addr, UNUSED_ATTR DEV_CLASS dev_class, - BD_NAME bd_name, LINK_KEY key, uint8_t key_type) -{ - tBTA_DM_SEC sec_event; - tBTA_DM_AUTH_CMPL *p_auth_cmpl; - uint8_t event; +static uint8_t bta_dm_new_link_key_cback(BD_ADDR bd_addr, + UNUSED_ATTR DEV_CLASS dev_class, + BD_NAME bd_name, LINK_KEY key, + uint8_t key_type) { + tBTA_DM_SEC sec_event; + tBTA_DM_AUTH_CMPL* p_auth_cmpl; + uint8_t event; - memset (&sec_event, 0, sizeof(tBTA_DM_SEC)); + memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); - /* Not AMP Key type */ - if (key_type != HCI_LKEY_TYPE_AMP_WIFI && key_type != HCI_LKEY_TYPE_AMP_UWB) - { - event = BTA_DM_AUTH_CMPL_EVT; - p_auth_cmpl = &sec_event.auth_cmpl; + /* Not AMP Key type */ + if (key_type != HCI_LKEY_TYPE_AMP_WIFI && key_type != HCI_LKEY_TYPE_AMP_UWB) { + event = BTA_DM_AUTH_CMPL_EVT; + p_auth_cmpl = &sec_event.auth_cmpl; - bdcpy(p_auth_cmpl->bd_addr, bd_addr); + bdcpy(p_auth_cmpl->bd_addr, bd_addr); - memcpy(p_auth_cmpl->bd_name, bd_name, (BD_NAME_LEN-1)); - p_auth_cmpl->bd_name[BD_NAME_LEN-1] = 0; + memcpy(p_auth_cmpl->bd_name, bd_name, (BD_NAME_LEN - 1)); + p_auth_cmpl->bd_name[BD_NAME_LEN - 1] = 0; - p_auth_cmpl->key_present = true; - p_auth_cmpl->key_type = key_type; - p_auth_cmpl->success = true; + p_auth_cmpl->key_present = true; + p_auth_cmpl->key_type = key_type; + p_auth_cmpl->success = true; - memcpy(p_auth_cmpl->key, key, LINK_KEY_LEN); - sec_event.auth_cmpl.fail_reason = HCI_SUCCESS; + memcpy(p_auth_cmpl->key, key, LINK_KEY_LEN); + sec_event.auth_cmpl.fail_reason = HCI_SUCCESS; #if (BLE_INCLUDED == TRUE) - // Report the BR link key based on the BR/EDR address and type - BTM_ReadDevInfo(bd_addr, &sec_event.auth_cmpl.dev_type, &sec_event.auth_cmpl.addr_type); + // Report the BR link key based on the BR/EDR address and type + BTM_ReadDevInfo(bd_addr, &sec_event.auth_cmpl.dev_type, + &sec_event.auth_cmpl.addr_type); #endif - if(bta_dm_cb.p_sec_cback) - bta_dm_cb.p_sec_cback(event, &sec_event); - - // Setting remove_dev_pending flag to false, where it will avoid deleting the - // security device record when the ACL connection link goes down in case of - // reconnection. - if (bta_dm_cb.device_list.count) - bta_dm_reset_sec_dev_pending(p_auth_cmpl->bd_addr); - } - else - { - APPL_TRACE_WARNING("%s() Received AMP Key", __func__); - } - - return BTM_CMD_STARTED; + if (bta_dm_cb.p_sec_cback) bta_dm_cb.p_sec_cback(event, &sec_event); + + // Setting remove_dev_pending flag to false, where it will avoid deleting + // the + // security device record when the ACL connection link goes down in case of + // reconnection. + if (bta_dm_cb.device_list.count) + bta_dm_reset_sec_dev_pending(p_auth_cmpl->bd_addr); + } else { + APPL_TRACE_WARNING("%s() Received AMP Key", __func__); + } + + return BTM_CMD_STARTED; } - /******************************************************************************* * * Function bta_dm_authentication_complete_cback @@ -2801,33 +2665,32 @@ static uint8_t bta_dm_new_link_key_cback(BD_ADDR bd_addr, UNUSED_ATTR DEV_CLASS * Returns void * ******************************************************************************/ -static uint8_t bta_dm_authentication_complete_cback(BD_ADDR bd_addr, - UNUSED_ATTR DEV_CLASS dev_class,BD_NAME bd_name, - int result) -{ - tBTA_DM_SEC sec_event; +static uint8_t bta_dm_authentication_complete_cback( + BD_ADDR bd_addr, UNUSED_ATTR DEV_CLASS dev_class, BD_NAME bd_name, + int result) { + tBTA_DM_SEC sec_event; - if(result != BTM_SUCCESS) - { - memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); - bdcpy(sec_event.auth_cmpl.bd_addr, bd_addr); + if (result != BTM_SUCCESS) { + memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); + bdcpy(sec_event.auth_cmpl.bd_addr, bd_addr); - memcpy(sec_event.auth_cmpl.bd_name, bd_name, (BD_NAME_LEN-1)); - sec_event.auth_cmpl.bd_name[BD_NAME_LEN-1] = 0; + memcpy(sec_event.auth_cmpl.bd_name, bd_name, (BD_NAME_LEN - 1)); + sec_event.auth_cmpl.bd_name[BD_NAME_LEN - 1] = 0; #if (BLE_INCLUDED == TRUE) - // Report the BR link key based on the BR/EDR address and type - BTM_ReadDevInfo(bd_addr, &sec_event.auth_cmpl.dev_type, &sec_event.auth_cmpl.addr_type); + // Report the BR link key based on the BR/EDR address and type + BTM_ReadDevInfo(bd_addr, &sec_event.auth_cmpl.dev_type, + &sec_event.auth_cmpl.addr_type); #endif - sec_event.auth_cmpl.fail_reason = (uint8_t)result; + sec_event.auth_cmpl.fail_reason = (uint8_t)result; - if(bta_dm_cb.p_sec_cback) - bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); + if (bta_dm_cb.p_sec_cback) + bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); - bta_dm_remove_sec_dev_entry(bd_addr); - } + bta_dm_remove_sec_dev_entry(bd_addr); + } - return BTM_SUCCESS; + return BTM_SUCCESS; } /******************************************************************************* @@ -2839,150 +2702,159 @@ static uint8_t bta_dm_authentication_complete_cback(BD_ADDR bd_addr, * Returns void * ******************************************************************************/ -static uint8_t bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data) -{ - tBTM_STATUS status = BTM_CMD_STARTED; - tBTA_DM_SEC sec_event; - tBTA_DM_SEC_EVT pin_evt = BTA_DM_SP_KEY_NOTIF_EVT; +static uint8_t bta_dm_sp_cback(tBTM_SP_EVT event, tBTM_SP_EVT_DATA* p_data) { + tBTM_STATUS status = BTM_CMD_STARTED; + tBTA_DM_SEC sec_event; + tBTA_DM_SEC_EVT pin_evt = BTA_DM_SP_KEY_NOTIF_EVT; - APPL_TRACE_EVENT("bta_dm_sp_cback: %d", event); - if (!bta_dm_cb.p_sec_cback) - return BTM_NOT_AUTHORIZED; + APPL_TRACE_EVENT("bta_dm_sp_cback: %d", event); + if (!bta_dm_cb.p_sec_cback) return BTM_NOT_AUTHORIZED; - /* TODO_SP */ - switch(event) - { + /* TODO_SP */ + switch (event) { case BTM_SP_IO_REQ_EVT: #if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) - /* translate auth_req */ - bta_dm_co_io_req(p_data->io_req.bd_addr, &p_data->io_req.io_cap, - &p_data->io_req.oob_data, &p_data->io_req.auth_req, p_data->io_req.is_orig); + /* translate auth_req */ + bta_dm_co_io_req(p_data->io_req.bd_addr, &p_data->io_req.io_cap, + &p_data->io_req.oob_data, &p_data->io_req.auth_req, + p_data->io_req.is_orig); #endif - APPL_TRACE_EVENT("io mitm: %d oob_data:%d", p_data->io_req.auth_req, p_data->io_req.oob_data); - break; + APPL_TRACE_EVENT("io mitm: %d oob_data:%d", p_data->io_req.auth_req, + p_data->io_req.oob_data); + break; case BTM_SP_IO_RSP_EVT: #if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) - bta_dm_co_io_rsp(p_data->io_rsp.bd_addr, p_data->io_rsp.io_cap, - p_data->io_rsp.oob_data, p_data->io_rsp.auth_req ); + bta_dm_co_io_rsp(p_data->io_rsp.bd_addr, p_data->io_rsp.io_cap, + p_data->io_rsp.oob_data, p_data->io_rsp.auth_req); #endif - break; + break; case BTM_SP_CFM_REQ_EVT: - pin_evt = BTA_DM_SP_CFM_REQ_EVT; - bta_dm_cb.just_works = sec_event.cfm_req.just_works = p_data->cfm_req.just_works; - sec_event.cfm_req.loc_auth_req = p_data->cfm_req.loc_auth_req; - sec_event.cfm_req.rmt_auth_req = p_data->cfm_req.rmt_auth_req; - sec_event.cfm_req.loc_io_caps = p_data->cfm_req.loc_io_caps; - sec_event.cfm_req.rmt_io_caps = p_data->cfm_req.rmt_io_caps; - - /* continue to next case */ + pin_evt = BTA_DM_SP_CFM_REQ_EVT; + bta_dm_cb.just_works = sec_event.cfm_req.just_works = + p_data->cfm_req.just_works; + sec_event.cfm_req.loc_auth_req = p_data->cfm_req.loc_auth_req; + sec_event.cfm_req.rmt_auth_req = p_data->cfm_req.rmt_auth_req; + sec_event.cfm_req.loc_io_caps = p_data->cfm_req.loc_io_caps; + sec_event.cfm_req.rmt_io_caps = p_data->cfm_req.rmt_io_caps; + +/* continue to next case */ #if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) /* Passkey entry mode, mobile device with output capability is very unlikely to receive key request, so skip this event */ /*case BTM_SP_KEY_REQ_EVT: */ case BTM_SP_KEY_NOTIF_EVT: #endif - bta_dm_cb.num_val = sec_event.key_notif.passkey = p_data->key_notif.passkey; - - if(BTM_SP_CFM_REQ_EVT == event) - { - /* Due to the switch case falling through below to BTM_SP_KEY_NOTIF_EVT, - call remote name request using values from cfm_req */ - if(p_data->cfm_req.bd_name[0] == 0) - { - bta_dm_cb.pin_evt = pin_evt; - bdcpy(bta_dm_cb.pin_bd_addr, p_data->cfm_req.bd_addr); - BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->cfm_req.dev_class); - if ((BTM_ReadRemoteDeviceName(p_data->cfm_req.bd_addr, bta_dm_pinname_cback, - BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) - return BTM_CMD_STARTED; - APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request "); - } - else - { - /* Due to the switch case falling through below to BTM_SP_KEY_NOTIF_EVT, - copy these values into key_notif from cfm_req */ - bdcpy(sec_event.key_notif.bd_addr, p_data->cfm_req.bd_addr); - BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, p_data->cfm_req.dev_class); - strlcpy((char*)sec_event.key_notif.bd_name, - (char*)p_data->cfm_req.bd_name, BD_NAME_LEN); - } + bta_dm_cb.num_val = sec_event.key_notif.passkey = + p_data->key_notif.passkey; + + if (BTM_SP_CFM_REQ_EVT == event) { + /* Due to the switch case falling through below to BTM_SP_KEY_NOTIF_EVT, + call remote name request using values from cfm_req */ + if (p_data->cfm_req.bd_name[0] == 0) { + bta_dm_cb.pin_evt = pin_evt; + bdcpy(bta_dm_cb.pin_bd_addr, p_data->cfm_req.bd_addr); + BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, + p_data->cfm_req.dev_class); + if ((BTM_ReadRemoteDeviceName( + p_data->cfm_req.bd_addr, bta_dm_pinname_cback, + BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) + return BTM_CMD_STARTED; + APPL_TRACE_WARNING( + " bta_dm_sp_cback() -> Failed to start Remote Name Request "); + } else { + /* Due to the switch case falling through below to + BTM_SP_KEY_NOTIF_EVT, + copy these values into key_notif from cfm_req */ + bdcpy(sec_event.key_notif.bd_addr, p_data->cfm_req.bd_addr); + BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, + p_data->cfm_req.dev_class); + strlcpy((char*)sec_event.key_notif.bd_name, + (char*)p_data->cfm_req.bd_name, BD_NAME_LEN); } + } - if (BTM_SP_KEY_NOTIF_EVT == event) - { - /* If the device name is not known, save bdaddr and devclass - and initiate a name request with values from key_notif */ - if(p_data->key_notif.bd_name[0] == 0) - { - bta_dm_cb.pin_evt = pin_evt; - bdcpy(bta_dm_cb.pin_bd_addr, p_data->key_notif.bd_addr); - BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->key_notif.dev_class); - if ((BTM_ReadRemoteDeviceName(p_data->key_notif.bd_addr, bta_dm_pinname_cback, - BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) - return BTM_CMD_STARTED; - APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request "); - } - else - { - bdcpy(sec_event.key_notif.bd_addr, p_data->key_notif.bd_addr); - BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, p_data->key_notif.dev_class); - strlcpy((char*)sec_event.key_notif.bd_name, - (char*)p_data->key_notif.bd_name, BD_NAME_LEN); - sec_event.key_notif.bd_name[BD_NAME_LEN-1] = 0; - } + if (BTM_SP_KEY_NOTIF_EVT == event) { + /* If the device name is not known, save bdaddr and devclass + and initiate a name request with values from key_notif */ + if (p_data->key_notif.bd_name[0] == 0) { + bta_dm_cb.pin_evt = pin_evt; + bdcpy(bta_dm_cb.pin_bd_addr, p_data->key_notif.bd_addr); + BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, + p_data->key_notif.dev_class); + if ((BTM_ReadRemoteDeviceName( + p_data->key_notif.bd_addr, bta_dm_pinname_cback, + BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) + return BTM_CMD_STARTED; + APPL_TRACE_WARNING( + " bta_dm_sp_cback() -> Failed to start Remote Name Request "); + } else { + bdcpy(sec_event.key_notif.bd_addr, p_data->key_notif.bd_addr); + BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, + p_data->key_notif.dev_class); + strlcpy((char*)sec_event.key_notif.bd_name, + (char*)p_data->key_notif.bd_name, BD_NAME_LEN); + sec_event.key_notif.bd_name[BD_NAME_LEN - 1] = 0; } + } - bta_dm_cb.p_sec_cback(pin_evt, &sec_event); + bta_dm_cb.p_sec_cback(pin_evt, &sec_event); - break; + break; case BTM_SP_LOC_OOB_EVT: - bta_dm_co_loc_oob((bool)(p_data->loc_oob.status == BTM_SUCCESS), - p_data->loc_oob.c, p_data->loc_oob.r); - break; + bta_dm_co_loc_oob((bool)(p_data->loc_oob.status == BTM_SUCCESS), + p_data->loc_oob.c, p_data->loc_oob.r); + break; case BTM_SP_RMT_OOB_EVT: - /* If the device name is not known, save bdaddr and devclass and initiate a name request */ - if (p_data->rmt_oob.bd_name[0] == 0) - { - bta_dm_cb.pin_evt = BTA_DM_SP_RMT_OOB_EVT; - bdcpy(bta_dm_cb.pin_bd_addr, p_data->rmt_oob.bd_addr); - BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->rmt_oob.dev_class); - if ((BTM_ReadRemoteDeviceName(p_data->rmt_oob.bd_addr, bta_dm_pinname_cback, - BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) - return BTM_CMD_STARTED; - APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request "); - } + /* If the device name is not known, save bdaddr and devclass and initiate + * a name request */ + if (p_data->rmt_oob.bd_name[0] == 0) { + bta_dm_cb.pin_evt = BTA_DM_SP_RMT_OOB_EVT; + bdcpy(bta_dm_cb.pin_bd_addr, p_data->rmt_oob.bd_addr); + BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, + p_data->rmt_oob.dev_class); + if ((BTM_ReadRemoteDeviceName(p_data->rmt_oob.bd_addr, + bta_dm_pinname_cback, + BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED) + return BTM_CMD_STARTED; + APPL_TRACE_WARNING( + " bta_dm_sp_cback() -> Failed to start Remote Name Request "); + } - bdcpy(sec_event.rmt_oob.bd_addr, p_data->rmt_oob.bd_addr); - BTA_COPY_DEVICE_CLASS(sec_event.rmt_oob.dev_class, p_data->rmt_oob.dev_class); - strlcpy((char*)sec_event.rmt_oob.bd_name, (char*)p_data->rmt_oob.bd_name, BD_NAME_LEN); + bdcpy(sec_event.rmt_oob.bd_addr, p_data->rmt_oob.bd_addr); + BTA_COPY_DEVICE_CLASS(sec_event.rmt_oob.dev_class, + p_data->rmt_oob.dev_class); + strlcpy((char*)sec_event.rmt_oob.bd_name, (char*)p_data->rmt_oob.bd_name, + BD_NAME_LEN); - bta_dm_cb.p_sec_cback(BTA_DM_SP_RMT_OOB_EVT, &sec_event); + bta_dm_cb.p_sec_cback(BTA_DM_SP_RMT_OOB_EVT, &sec_event); - bta_dm_co_rmt_oob(p_data->rmt_oob.bd_addr); - break; + bta_dm_co_rmt_oob(p_data->rmt_oob.bd_addr); + break; case BTM_SP_COMPLT_EVT: - /* do not report this event - handled by link_key_callback or auth_complete_callback */ - break; + /* do not report this event - handled by link_key_callback or + * auth_complete_callback */ + break; case BTM_SP_KEYPRESS_EVT: - memcpy(&sec_event.key_press, &p_data->key_press, sizeof(tBTM_SP_KEYPRESS)); - bta_dm_cb.p_sec_cback(BTA_DM_SP_KEYPRESS_EVT, &sec_event); - break; + memcpy(&sec_event.key_press, &p_data->key_press, + sizeof(tBTM_SP_KEYPRESS)); + bta_dm_cb.p_sec_cback(BTA_DM_SP_KEYPRESS_EVT, &sec_event); + break; case BTM_SP_UPGRADE_EVT: - bta_dm_co_lk_upgrade(p_data->upgrade.bd_addr, &p_data->upgrade.upgrade ); - break; + bta_dm_co_lk_upgrade(p_data->upgrade.bd_addr, &p_data->upgrade.upgrade); + break; default: - status = BTM_NOT_AUTHORIZED; - break; - } - APPL_TRACE_EVENT("dm status: %d", status); - return status; + status = BTM_NOT_AUTHORIZED; + break; + } + APPL_TRACE_EVENT("dm status: %d", status); + return status; } /******************************************************************************* @@ -2995,15 +2867,13 @@ static uint8_t bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_local_name_cback(UNUSED_ATTR uint8_t *p_name) -{ - tBTA_DM_SEC sec_event; - - sec_event.enable.status = BTA_SUCCESS; +static void bta_dm_local_name_cback(UNUSED_ATTR uint8_t* p_name) { + tBTA_DM_SEC sec_event; - if(bta_dm_cb.p_sec_cback) - bta_dm_cb.p_sec_cback(BTA_DM_ENABLE_EVT, &sec_event); + sec_event.enable.status = BTA_SUCCESS; + if (bta_dm_cb.p_sec_cback) + bta_dm_cb.p_sec_cback(BTA_DM_ENABLE_EVT, &sec_event); } /******************************************************************************* @@ -3016,46 +2886,45 @@ static void bta_dm_local_name_cback(UNUSED_ATTR uint8_t *p_name) * Returns void * ******************************************************************************/ -static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data) -{ - tBTA_DM_ACL_CHANGE *p_msg = - (tBTA_DM_ACL_CHANGE *)osi_malloc(sizeof(tBTA_DM_ACL_CHANGE)); +static void bta_dm_bl_change_cback(tBTM_BL_EVENT_DATA* p_data) { + tBTA_DM_ACL_CHANGE* p_msg = + (tBTA_DM_ACL_CHANGE*)osi_malloc(sizeof(tBTA_DM_ACL_CHANGE)); - p_msg->event = p_data->event; - p_msg->is_new = false; + p_msg->event = p_data->event; + p_msg->is_new = false; - switch (p_msg->event) { + switch (p_msg->event) { case BTM_BL_CONN_EVT: - p_msg->is_new = true; - bdcpy(p_msg->bd_addr, p_data->conn.p_bda); + p_msg->is_new = true; + bdcpy(p_msg->bd_addr, p_data->conn.p_bda); #if (BLE_INCLUDED == TRUE) - p_msg->transport = p_data->conn.transport; - p_msg->handle = p_data->conn.handle; + p_msg->transport = p_data->conn.transport; + p_msg->handle = p_data->conn.handle; #endif - break; + break; case BTM_BL_DISCN_EVT: - bdcpy(p_msg->bd_addr, p_data->discn.p_bda); + bdcpy(p_msg->bd_addr, p_data->discn.p_bda); #if (BLE_INCLUDED == TRUE) - p_msg->transport = p_data->discn.transport; - p_msg->handle = p_data->discn.handle; + p_msg->transport = p_data->discn.transport; + p_msg->handle = p_data->discn.handle; #endif - break; + break; case BTM_BL_UPDATE_EVT: - p_msg->busy_level = p_data->update.busy_level; - p_msg->busy_level_flags = p_data->update.busy_level_flags; - break; + p_msg->busy_level = p_data->update.busy_level; + p_msg->busy_level_flags = p_data->update.busy_level_flags; + break; case BTM_BL_ROLE_CHG_EVT: - p_msg->new_role = p_data->role_chg.new_role; - p_msg->hci_status = p_data->role_chg.hci_status; - bdcpy(p_msg->bd_addr, p_data->role_chg.p_bda); - break; + p_msg->new_role = p_data->role_chg.new_role; + p_msg->hci_status = p_data->role_chg.hci_status; + bdcpy(p_msg->bd_addr, p_data->role_chg.p_bda); + break; case BTM_BL_COLLISION_EVT: - bdcpy(p_msg->bd_addr, p_data->conn.p_bda); - break; - } + bdcpy(p_msg->bd_addr, p_data->conn.p_bda); + break; + } - p_msg->hdr.event = BTA_DM_ACL_CHANGE_EVT; - bta_sys_sendmsg(p_msg); + p_msg->hdr.event = BTA_DM_ACL_CHANGE_EVT; + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -3067,15 +2936,14 @@ static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data) * Returns * ******************************************************************************/ -static void bta_dm_rs_cback (UNUSED_ATTR tBTM_ROLE_SWITCH_CMPL *p1) -{ - APPL_TRACE_WARNING("bta_dm_rs_cback:%d", bta_dm_cb.rs_event); - if(bta_dm_cb.rs_event == BTA_DM_API_SEARCH_EVT) - { - bta_dm_cb.search_msg.rs_res = BTA_DM_RS_OK; /* do not care about the result for now */ - bta_dm_cb.rs_event = 0; - bta_dm_search_start((tBTA_DM_MSG *)&bta_dm_cb.search_msg); - } +static void bta_dm_rs_cback(UNUSED_ATTR tBTM_ROLE_SWITCH_CMPL* p1) { + APPL_TRACE_WARNING("bta_dm_rs_cback:%d", bta_dm_cb.rs_event); + if (bta_dm_cb.rs_event == BTA_DM_API_SEARCH_EVT) { + bta_dm_cb.search_msg.rs_res = + BTA_DM_RS_OK; /* do not care about the result for now */ + bta_dm_cb.rs_event = 0; + bta_dm_search_start((tBTA_DM_MSG*)&bta_dm_cb.search_msg); + } } /******************************************************************************* @@ -3088,48 +2956,45 @@ static void bta_dm_rs_cback (UNUSED_ATTR tBTM_ROLE_SWITCH_CMPL *p1) * Returns bool - true, if switch is in progress * ******************************************************************************/ -static bool bta_dm_check_av(uint16_t event) -{ - bool avoid_roleswitch = false; - bool switching = false; - uint8_t i; - tBTA_DM_PEER_DEVICE *p_dev; +static bool bta_dm_check_av(uint16_t event) { + bool avoid_roleswitch = false; + bool switching = false; + uint8_t i; + tBTA_DM_PEER_DEVICE* p_dev; #if (BTA_DM_AVOID_A2DP_ROLESWITCH_ON_INQUIRY == TRUE) - /* avoid role switch upon inquiry if a2dp is actively streaming as it - introduces an audioglitch due to FW scheduling delays (unavoidable) */ - if (event == BTA_DM_API_SEARCH_EVT) - { - avoid_roleswitch = true; - } + /* avoid role switch upon inquiry if a2dp is actively streaming as it + introduces an audioglitch due to FW scheduling delays (unavoidable) */ + if (event == BTA_DM_API_SEARCH_EVT) { + avoid_roleswitch = true; + } #endif - APPL_TRACE_WARNING("bta_dm_check_av:%d", bta_dm_cb.cur_av_count); - if(bta_dm_cb.cur_av_count) - { - for(i=0; iconn_state, p_dev->info, avoid_roleswitch); - if((p_dev->conn_state == BTA_DM_CONNECTED) && (p_dev->info & BTA_DM_DI_AV_ACTIVE) && - (avoid_roleswitch == false)) - { - /* make master and take away the role switch policy */ - if(BTM_CMD_STARTED == BTM_SwitchRole (p_dev->peer_bdaddr, HCI_ROLE_MASTER, (tBTM_CMPL_CB *)bta_dm_rs_cback)) - { - /* the role switch command is actually sent */ - bta_dm_cb.rs_event = event; - switching = true; - } - /* else either already master or can not switch for some reasons */ - bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr); - break; - } + APPL_TRACE_WARNING("bta_dm_check_av:%d", bta_dm_cb.cur_av_count); + if (bta_dm_cb.cur_av_count) { + for (i = 0; i < bta_dm_cb.device_list.count; i++) { + p_dev = &bta_dm_cb.device_list.peer_device[i]; + APPL_TRACE_WARNING("[%d]: state:%d, info:x%x, avoid_rs %d", i, + p_dev->conn_state, p_dev->info, avoid_roleswitch); + if ((p_dev->conn_state == BTA_DM_CONNECTED) && + (p_dev->info & BTA_DM_DI_AV_ACTIVE) && (avoid_roleswitch == false)) { + /* make master and take away the role switch policy */ + if (BTM_CMD_STARTED == BTM_SwitchRole(p_dev->peer_bdaddr, + HCI_ROLE_MASTER, + (tBTM_CMPL_CB*)bta_dm_rs_cback)) { + /* the role switch command is actually sent */ + bta_dm_cb.rs_event = event; + switching = true; } + /* else either already master or can not switch for some reasons */ + bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, + p_dev->peer_bdaddr); + break; + } } - return switching; + } + return switching; } /******************************************************************************* @@ -3142,216 +3007,214 @@ static bool bta_dm_check_av(uint16_t event) * Returns void * ******************************************************************************/ -void bta_dm_acl_change(tBTA_DM_MSG *p_data) -{ - - uint8_t i; - uint8_t *p; - tBTA_DM_SEC conn; - bool is_new = p_data->acl_change.is_new; - BD_ADDR_PTR p_bda = p_data->acl_change.bd_addr; - bool need_policy_change = false; - bool issue_unpair_cb = false; - - tBTA_DM_PEER_DEVICE *p_dev; - memset(&conn, 0, sizeof(tBTA_DM_SEC)); - - switch(p_data->acl_change.event) - { - case BTM_BL_UPDATE_EVT: /* busy level update */ - if( bta_dm_cb.p_sec_cback ) - { - conn.busy_level.level = p_data->acl_change.busy_level; - conn.busy_level.level_flags = p_data->acl_change.busy_level_flags; - bta_dm_cb.p_sec_cback(BTA_DM_BUSY_LEVEL_EVT, &conn); - } - return; +void bta_dm_acl_change(tBTA_DM_MSG* p_data) { + uint8_t i; + uint8_t* p; + tBTA_DM_SEC conn; + bool is_new = p_data->acl_change.is_new; + BD_ADDR_PTR p_bda = p_data->acl_change.bd_addr; + bool need_policy_change = false; + bool issue_unpair_cb = false; + + tBTA_DM_PEER_DEVICE* p_dev; + memset(&conn, 0, sizeof(tBTA_DM_SEC)); + + switch (p_data->acl_change.event) { + case BTM_BL_UPDATE_EVT: /* busy level update */ + if (bta_dm_cb.p_sec_cback) { + conn.busy_level.level = p_data->acl_change.busy_level; + conn.busy_level.level_flags = p_data->acl_change.busy_level_flags; + bta_dm_cb.p_sec_cback(BTA_DM_BUSY_LEVEL_EVT, &conn); + } + return; + + case BTM_BL_ROLE_CHG_EVT: /* role change event */ + p_dev = bta_dm_find_peer_device(p_bda); + if (p_dev) { + APPL_TRACE_DEBUG( + "bta_dm_acl_change role chg info:x%x new_role:%d dev count:%d", + p_dev->info, p_data->acl_change.new_role, + bta_dm_cb.device_list.count); + if (p_dev->info & BTA_DM_DI_AV_ACTIVE) { + /* there's AV activity on this link */ + if (p_data->acl_change.new_role == HCI_ROLE_SLAVE && + bta_dm_cb.device_list.count > 1 && + p_data->acl_change.hci_status == HCI_SUCCESS) { + /* more than one connections and the AV connection is role switched + * to slave + * switch it back to master and remove the switch policy */ + BTM_SwitchRole(p_bda, BTM_ROLE_MASTER, NULL); + need_policy_change = true; + } else if (p_bta_dm_cfg->avoid_scatter && + (p_data->acl_change.new_role == HCI_ROLE_MASTER)) { + /* if the link updated to be master include AV activities, remove + * the switch policy */ + need_policy_change = true; + } - case BTM_BL_ROLE_CHG_EVT: /* role change event */ - p_dev = bta_dm_find_peer_device(p_bda); - if(p_dev) - { - APPL_TRACE_DEBUG("bta_dm_acl_change role chg info:x%x new_role:%d dev count:%d", - p_dev->info, p_data->acl_change.new_role, bta_dm_cb.device_list.count); - if(p_dev->info & BTA_DM_DI_AV_ACTIVE) - { - /* there's AV activity on this link */ - if(p_data->acl_change.new_role == HCI_ROLE_SLAVE && bta_dm_cb.device_list.count > 1 - && p_data->acl_change.hci_status == HCI_SUCCESS) - { - /* more than one connections and the AV connection is role switched to slave - * switch it back to master and remove the switch policy */ - BTM_SwitchRole(p_bda, BTM_ROLE_MASTER, NULL); - need_policy_change = true; - } - else if (p_bta_dm_cfg->avoid_scatter && (p_data->acl_change.new_role == HCI_ROLE_MASTER)) - { - /* if the link updated to be master include AV activities, remove the switch policy */ - need_policy_change = true; - } - - if(need_policy_change) - { - bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr); - } - } - else - { - /* there's AV no activity on this link and role switch happened - * check if AV is active - * if so, make sure the AV link is master */ - bta_dm_check_av(0); - } - bta_sys_notify_role_chg(p_data->acl_change.bd_addr, p_data->acl_change.new_role, p_data->acl_change.hci_status); - bdcpy(conn.role_chg.bd_addr, p_bda); - conn.role_chg.new_role = (uint8_t) p_data->acl_change.new_role; - if( bta_dm_cb.p_sec_cback ) - bta_dm_cb.p_sec_cback(BTA_DM_ROLE_CHG_EVT, (tBTA_DM_SEC *)&conn); + if (need_policy_change) { + bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, + HCI_ENABLE_MASTER_SLAVE_SWITCH, + p_dev->peer_bdaddr); + } + } else { + /* there's AV no activity on this link and role switch happened + * check if AV is active + * if so, make sure the AV link is master */ + bta_dm_check_av(0); } - return; - } + bta_sys_notify_role_chg(p_data->acl_change.bd_addr, + p_data->acl_change.new_role, + p_data->acl_change.hci_status); + bdcpy(conn.role_chg.bd_addr, p_bda); + conn.role_chg.new_role = (uint8_t)p_data->acl_change.new_role; + if (bta_dm_cb.p_sec_cback) + bta_dm_cb.p_sec_cback(BTA_DM_ROLE_CHG_EVT, (tBTA_DM_SEC*)&conn); + } + return; + } - /* Collision report from Stack: Notify profiles */ - if (p_data->acl_change.event == BTM_BL_COLLISION_EVT) - { - bta_sys_notify_collision (p_bda); - return; - } + /* Collision report from Stack: Notify profiles */ + if (p_data->acl_change.event == BTM_BL_COLLISION_EVT) { + bta_sys_notify_collision(p_bda); + return; + } - if(is_new) - { - for(i=0; iacl_change.handle + && + bta_dm_cb.device_list.peer_device[i].conn_handle == + p_data->acl_change.handle #endif - ) - break; - - } + ) + break; + } - if(i == bta_dm_cb.device_list.count) - { - if (bta_dm_cb.device_list.count < BTA_DM_NUM_PEER_DEVICE) - { - bdcpy(bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count].peer_bdaddr, p_bda); - bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count].link_policy = bta_dm_cb.cur_policy; - bta_dm_cb.device_list.count++; + if (i == bta_dm_cb.device_list.count) { + if (bta_dm_cb.device_list.count < BTA_DM_NUM_PEER_DEVICE) { + bdcpy(bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count] + .peer_bdaddr, + p_bda); + bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count] + .link_policy = bta_dm_cb.cur_policy; + bta_dm_cb.device_list.count++; #if (BLE_INCLUDED == TRUE) - bta_dm_cb.device_list.peer_device[i].conn_handle = p_data->acl_change.handle; - if (p_data->acl_change.transport == BT_TRANSPORT_LE) - bta_dm_cb.device_list.le_count++; + bta_dm_cb.device_list.peer_device[i].conn_handle = + p_data->acl_change.handle; + if (p_data->acl_change.transport == BT_TRANSPORT_LE) + bta_dm_cb.device_list.le_count++; #endif - } else { - APPL_TRACE_ERROR("%s max active connection reached, no resources", __func__); - return; - } - } + } else { + APPL_TRACE_ERROR("%s max active connection reached, no resources", + __func__); + return; + } + } - bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_CONNECTED; - bta_dm_cb.device_list.peer_device[i].pref_role = BTA_ANY_ROLE; - bdcpy(conn.link_up.bd_addr, p_bda); - bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_NONE; + bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_CONNECTED; + bta_dm_cb.device_list.peer_device[i].pref_role = BTA_ANY_ROLE; + bdcpy(conn.link_up.bd_addr, p_bda); + bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_NONE; #if (BLE_INCLUDED == TRUE) - conn.link_up.link_type = p_data->acl_change.transport; - bta_dm_cb.device_list.peer_device[i].transport = p_data->acl_change.transport; + conn.link_up.link_type = p_data->acl_change.transport; + bta_dm_cb.device_list.peer_device[i].transport = + p_data->acl_change.transport; #endif - if (((NULL != (p = BTM_ReadLocalFeatures ())) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)) && - ((NULL != (p = BTM_ReadRemoteFeatures (p_bda))) && HCI_SNIFF_SUB_RATE_SUPPORTED(p))) - { - /* both local and remote devices support SSR */ - bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_USE_SSR; - } - APPL_TRACE_WARNING("%s info: 0x%x", __func__, bta_dm_cb.device_list.peer_device[i].info); - - if (bta_dm_cb.p_sec_cback) - bta_dm_cb.p_sec_cback(BTA_DM_LINK_UP_EVT, (tBTA_DM_SEC *)&conn); - } else { - for(i=0; iacl_change.transport + || + bta_dm_cb.device_list.peer_device[i].transport != + p_data->acl_change.transport #endif - ) - continue; + ) + continue; - if( bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_UNPAIRING ) - { - if (BTM_SecDeleteDevice(bta_dm_cb.device_list.peer_device[i].peer_bdaddr)) - issue_unpair_cb = true; + if (bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_UNPAIRING) { + if (BTM_SecDeleteDevice( + bta_dm_cb.device_list.peer_device[i].peer_bdaddr)) + issue_unpair_cb = true; - APPL_TRACE_DEBUG("%s: Unpairing: issue unpair CB = %d ",__func__, issue_unpair_cb); - } + APPL_TRACE_DEBUG("%s: Unpairing: issue unpair CB = %d ", __func__, + issue_unpair_cb); + } - conn.link_down.is_removed = bta_dm_cb.device_list.peer_device[i].remove_dev_pending; + conn.link_down.is_removed = + bta_dm_cb.device_list.peer_device[i].remove_dev_pending; - for(; iacl_change.transport == BT_TRANSPORT_LE) && - (bta_dm_cb.device_list.le_count)) - bta_dm_cb.device_list.le_count--; - conn.link_down.link_type = p_data->acl_change.transport; + if ((p_data->acl_change.transport == BT_TRANSPORT_LE) && + (bta_dm_cb.device_list.le_count)) + bta_dm_cb.device_list.le_count--; + conn.link_down.link_type = p_data->acl_change.transport; #endif - if(bta_dm_search_cb.wait_disc && !bdcmp(bta_dm_search_cb.peer_bdaddr, p_bda)) - { - bta_dm_search_cb.wait_disc = false; + if (bta_dm_search_cb.wait_disc && + !bdcmp(bta_dm_search_cb.peer_bdaddr, p_bda)) { + bta_dm_search_cb.wait_disc = false; - if(bta_dm_search_cb.sdp_results) - { - APPL_TRACE_EVENT(" timer stopped "); - alarm_cancel(bta_dm_search_cb.search_timer); - bta_dm_discover_next_device(); - } - - } + if (bta_dm_search_cb.sdp_results) { + APPL_TRACE_EVENT(" timer stopped "); + alarm_cancel(bta_dm_search_cb.search_timer); + bta_dm_discover_next_device(); + } + } - if(bta_dm_cb.disabling) - { - if(!BTM_GetNumAclLinks()) - { - /* - * Start a timer to make sure that the profiles - * get the disconnect event. - */ - alarm_set_on_queue(bta_dm_cb.disable_timer, - BTA_DM_DISABLE_CONN_DOWN_TIMER_MS, - bta_dm_disable_conn_down_timer_cback, NULL, - btu_bta_alarm_queue); - } - } - if (conn.link_down.is_removed) - { - BTM_SecDeleteDevice(p_bda); + if (bta_dm_cb.disabling) { + if (!BTM_GetNumAclLinks()) { + /* + * Start a timer to make sure that the profiles + * get the disconnect event. + */ + alarm_set_on_queue( + bta_dm_cb.disable_timer, BTA_DM_DISABLE_CONN_DOWN_TIMER_MS, + bta_dm_disable_conn_down_timer_cback, NULL, btu_bta_alarm_queue); + } + } + if (conn.link_down.is_removed) { + BTM_SecDeleteDevice(p_bda); #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* need to remove all pending background connection */ - BTA_GATTC_CancelOpen(0, p_bda, false); - /* remove all cached GATT information */ - BTA_GATTC_Refresh(p_bda); + /* need to remove all pending background connection */ + BTA_GATTC_CancelOpen(0, p_bda, false); + /* remove all cached GATT information */ + BTA_GATTC_Refresh(p_bda); #endif - } + } - bdcpy(conn.link_down.bd_addr, p_bda); - conn.link_down.status = (uint8_t) btm_get_acl_disc_reason_code(); - if( bta_dm_cb.p_sec_cback ) - { - bta_dm_cb.p_sec_cback(BTA_DM_LINK_DOWN_EVT, &conn); - if( issue_unpair_cb ) - bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &conn); - } + bdcpy(conn.link_down.bd_addr, p_bda); + conn.link_down.status = (uint8_t)btm_get_acl_disc_reason_code(); + if (bta_dm_cb.p_sec_cback) { + bta_dm_cb.p_sec_cback(BTA_DM_LINK_DOWN_EVT, &conn); + if (issue_unpair_cb) + bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &conn); } + } - bta_dm_adjust_roles(true); + bta_dm_adjust_roles(true); } /******************************************************************************* @@ -3364,23 +3227,22 @@ void bta_dm_acl_change(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_disable_conn_down_timer_cback(UNUSED_ATTR void *data) -{ - tBTA_SYS_HW_MSG *sys_enable_event = - (tBTA_SYS_HW_MSG *)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); +static void bta_dm_disable_conn_down_timer_cback(UNUSED_ATTR void* data) { + tBTA_SYS_HW_MSG* sys_enable_event = + (tBTA_SYS_HW_MSG*)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); - /* disable the power managment module */ - bta_dm_disable_pm(); + /* disable the power managment module */ + bta_dm_disable_pm(); - /* register our callback to SYS HW manager */ - bta_sys_hw_register(BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback ); + /* register our callback to SYS HW manager */ + bta_sys_hw_register(BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback); - /* send a message to BTA SYS */ - sys_enable_event->hdr.event = BTA_SYS_API_DISABLE_EVT; - sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH; - bta_sys_sendmsg(sys_enable_event); + /* send a message to BTA SYS */ + sys_enable_event->hdr.event = BTA_SYS_API_DISABLE_EVT; + sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH; + bta_sys_sendmsg(sys_enable_event); - bta_dm_cb.disabling = false; + bta_dm_cb.disabling = false; } /******************************************************************************* @@ -3393,66 +3255,57 @@ static void bta_dm_disable_conn_down_timer_cback(UNUSED_ATTR void *data) * Returns void * ******************************************************************************/ -static void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - uint8_t j; - tBTA_PREF_ROLES role; - tBTA_DM_PEER_DEVICE *p_dev; - - p_dev = bta_dm_find_peer_device(peer_addr); - if( status == BTA_SYS_CONN_OPEN) - { - if(p_dev) - { - /* Do not set to connected if we are in the middle of unpairing. When AV stream is - * started it fakes out a SYS_CONN_OPEN to potentially trigger a role switch command. - * But this should not be done if we are in the middle of unpairing. - */ - if (p_dev->conn_state != BTA_DM_UNPAIRING) - p_dev->conn_state = BTA_DM_CONNECTED; - - for(j=1; j<= p_bta_dm_rm_cfg[0].app_id; j++) - { - if(((p_bta_dm_rm_cfg[j].app_id == app_id) || (p_bta_dm_rm_cfg[j].app_id == BTA_ALL_APP_ID)) - && (p_bta_dm_rm_cfg[j].id == id)) - { - role = p_bta_dm_rm_cfg[j].cfg; - - if(role > p_dev->pref_role ) - p_dev->pref_role = role; - break; - } - } +static void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr) { + uint8_t j; + tBTA_PREF_ROLES role; + tBTA_DM_PEER_DEVICE* p_dev; + + p_dev = bta_dm_find_peer_device(peer_addr); + if (status == BTA_SYS_CONN_OPEN) { + if (p_dev) { + /* Do not set to connected if we are in the middle of unpairing. When AV + * stream is + * started it fakes out a SYS_CONN_OPEN to potentially trigger a role + * switch command. + * But this should not be done if we are in the middle of unpairing. + */ + if (p_dev->conn_state != BTA_DM_UNPAIRING) + p_dev->conn_state = BTA_DM_CONNECTED; + + for (j = 1; j <= p_bta_dm_rm_cfg[0].app_id; j++) { + if (((p_bta_dm_rm_cfg[j].app_id == app_id) || + (p_bta_dm_rm_cfg[j].app_id == BTA_ALL_APP_ID)) && + (p_bta_dm_rm_cfg[j].id == id)) { + role = p_bta_dm_rm_cfg[j].cfg; + + if (role > p_dev->pref_role) p_dev->pref_role = role; + break; } + } } + } - if((BTA_ID_AV == id)||(BTA_ID_AVK ==id)) - { - if( status == BTA_SYS_CONN_BUSY) - { - if(p_dev) - p_dev->info |= BTA_DM_DI_AV_ACTIVE; - /* AV calls bta_sys_conn_open with the A2DP stream count as app_id */ - if(BTA_ID_AV == id) - bta_dm_cb.cur_av_count = bta_dm_get_av_count(); - } - else if( status == BTA_SYS_CONN_IDLE) - { - if(p_dev) - p_dev->info &= ~BTA_DM_DI_AV_ACTIVE; + if ((BTA_ID_AV == id) || (BTA_ID_AVK == id)) { + if (status == BTA_SYS_CONN_BUSY) { + if (p_dev) p_dev->info |= BTA_DM_DI_AV_ACTIVE; + /* AV calls bta_sys_conn_open with the A2DP stream count as app_id */ + if (BTA_ID_AV == id) bta_dm_cb.cur_av_count = bta_dm_get_av_count(); + } else if (status == BTA_SYS_CONN_IDLE) { + if (p_dev) p_dev->info &= ~BTA_DM_DI_AV_ACTIVE; - /* get cur_av_count from connected services */ - if(BTA_ID_AV == id) - bta_dm_cb.cur_av_count = bta_dm_get_av_count(); - } - APPL_TRACE_WARNING("bta_dm_rm_cback:%d, status:%d", bta_dm_cb.cur_av_count, status); + /* get cur_av_count from connected services */ + if (BTA_ID_AV == id) bta_dm_cb.cur_av_count = bta_dm_get_av_count(); } + APPL_TRACE_WARNING("bta_dm_rm_cback:%d, status:%d", bta_dm_cb.cur_av_count, + status); + } - /* Don't adjust roles for each busy/idle state transition to avoid - excessive switch requests when individual profile busy/idle status - changes */ - if ((status != BTA_SYS_CONN_BUSY) && (status != BTA_SYS_CONN_IDLE)) - bta_dm_adjust_roles(false); + /* Don't adjust roles for each busy/idle state transition to avoid + excessive switch requests when individual profile busy/idle status + changes */ + if ((status != BTA_SYS_CONN_BUSY) && (status != BTA_SYS_CONN_IDLE)) + bta_dm_adjust_roles(false); } /******************************************************************************* @@ -3464,10 +3317,9 @@ static void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app * Returns void * ******************************************************************************/ -static void bta_dm_delay_role_switch_cback(UNUSED_ATTR void *data) -{ - APPL_TRACE_EVENT("%s: initiating Delayed RS", __func__); - bta_dm_adjust_roles(false); +static void bta_dm_delay_role_switch_cback(UNUSED_ATTR void* data) { + APPL_TRACE_EVENT("%s: initiating Delayed RS", __func__); + bta_dm_adjust_roles(false); } /******************************************************************************* @@ -3481,59 +3333,54 @@ static void bta_dm_delay_role_switch_cback(UNUSED_ATTR void *data) * Returns void * ******************************************************************************/ -static void bta_dm_reset_sec_dev_pending(BD_ADDR remote_bd_addr) -{ - for (size_t i = 0; i < bta_dm_cb.device_list.count; i++) - { - if (bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, remote_bd_addr) == 0) - { - bta_dm_cb.device_list.peer_device[i].remove_dev_pending = false; - return; - } - } +static void bta_dm_reset_sec_dev_pending(BD_ADDR remote_bd_addr) { + for (size_t i = 0; i < bta_dm_cb.device_list.count; i++) { + if (bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, + remote_bd_addr) == 0) { + bta_dm_cb.device_list.peer_device[i].remove_dev_pending = false; + return; + } + } } /******************************************************************************* * * Function bta_dm_remove_sec_dev_entry * - * Description Removes device entry from Security device DB if ACL connection with - * remtoe device does not exist, else schedule for dev entry removal upon + * Description Removes device entry from Security device DB if ACL + connection with + * remtoe device does not exist, else schedule for dev entry + removal upon ACL close * * Returns void * ******************************************************************************/ -static void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr) -{ - if ( BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_LE) || - BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_BR_EDR)) - { - APPL_TRACE_DEBUG("%s ACL is not down. Schedule for Dev Removal when ACL closes", - __func__); - BTM_SecClearSecurityFlags (remote_bd_addr); - for (int i = 0; i < bta_dm_cb.device_list.count; i++) - { - if (!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, remote_bd_addr)) - { - bta_dm_cb.device_list.peer_device[i].remove_dev_pending = TRUE; - break; - } - } +static void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr) { + if (BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_LE) || + BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_BR_EDR)) { + APPL_TRACE_DEBUG( + "%s ACL is not down. Schedule for Dev Removal when ACL closes", + __func__); + BTM_SecClearSecurityFlags(remote_bd_addr); + for (int i = 0; i < bta_dm_cb.device_list.count; i++) { + if (!bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, + remote_bd_addr)) { + bta_dm_cb.device_list.peer_device[i].remove_dev_pending = TRUE; + break; + } } - else - { - BTM_SecDeleteDevice (remote_bd_addr); + } else { + BTM_SecDeleteDevice(remote_bd_addr); #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* need to remove all pending background connection */ - BTA_GATTC_CancelOpen(0, remote_bd_addr, false); - /* remove all cached GATT information */ - BTA_GATTC_Refresh(remote_bd_addr); + /* need to remove all pending background connection */ + BTA_GATTC_CancelOpen(0, remote_bd_addr, false); + /* remove all cached GATT information */ + BTA_GATTC_Refresh(remote_bd_addr); #endif - } + } } - /******************************************************************************* * * Function bta_dm_adjust_roles @@ -3544,109 +3391,93 @@ static void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr) * Returns void * ******************************************************************************/ -static void bta_dm_adjust_roles(bool delay_role_switch) -{ - - uint8_t i; - bool set_master_role = false; +static void bta_dm_adjust_roles(bool delay_role_switch) { + uint8_t i; + bool set_master_role = false; #if (BLE_INCLUDED == TRUE) - uint8_t br_count = bta_dm_cb.device_list.count - bta_dm_cb.device_list.le_count; + uint8_t br_count = + bta_dm_cb.device_list.count - bta_dm_cb.device_list.le_count; #else - uint8_t br_count = bta_dm_cb.device_list.count; + uint8_t br_count = bta_dm_cb.device_list.count; #endif - if (br_count) - { - - /* the configuration is no scatternet - * or AV connection exists and there are more than one ACL link */ - if ( (p_bta_dm_rm_cfg[0].cfg == BTA_DM_NO_SCATTERNET) || - (bta_dm_cb.cur_av_count && br_count > 1) ) - { - - L2CA_SetDesireRole (HCI_ROLE_MASTER); - set_master_role = true; - - } + if (br_count) { + /* the configuration is no scatternet + * or AV connection exists and there are more than one ACL link */ + if ((p_bta_dm_rm_cfg[0].cfg == BTA_DM_NO_SCATTERNET) || + (bta_dm_cb.cur_av_count && br_count > 1)) { + L2CA_SetDesireRole(HCI_ROLE_MASTER); + set_master_role = true; + } - for(i=0; i 1)) - { - - /* Initiating immediate role switch with certain remote devices - has caused issues due to role switch colliding with link encryption setup and - causing encryption (and in turn the link) to fail . These device . Firmware - versions are stored in a blacklist and role switch with these devices are - delayed to avoid the collision with link encryption setup */ - - if (bta_dm_cb.device_list.peer_device[i].pref_role != BTA_SLAVE_ROLE_ONLY && - delay_role_switch == false) - { - BTM_SwitchRole (bta_dm_cb.device_list.peer_device[i].peer_bdaddr, - HCI_ROLE_MASTER, NULL); - } - else - { - alarm_set_on_queue(bta_dm_cb.switch_delay_timer, - BTA_DM_SWITCH_DELAY_TIMER_MS, - bta_dm_delay_role_switch_cback, - NULL, btu_bta_alarm_queue); - } - } - } + ) { + if (!set_master_role && + (bta_dm_cb.device_list.peer_device[i].pref_role != BTA_ANY_ROLE) && + (p_bta_dm_rm_cfg[0].cfg == BTA_DM_PARTIAL_SCATTERNET)) { + L2CA_SetDesireRole(HCI_ROLE_MASTER); + set_master_role = true; } - - if(!set_master_role) - { - - L2CA_SetDesireRole (L2CAP_DESIRED_LINK_ROLE); - + if ((bta_dm_cb.device_list.peer_device[i].pref_role == + BTA_MASTER_ROLE_ONLY) || + (br_count > 1)) { + /* Initiating immediate role switch with certain remote devices + has caused issues due to role switch colliding with link encryption + setup and + causing encryption (and in turn the link) to fail . These device . + Firmware + versions are stored in a blacklist and role switch with these + devices are + delayed to avoid the collision with link encryption setup */ + + if (bta_dm_cb.device_list.peer_device[i].pref_role != + BTA_SLAVE_ROLE_ONLY && + delay_role_switch == false) { + BTM_SwitchRole(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, + HCI_ROLE_MASTER, NULL); + } else { + alarm_set_on_queue( + bta_dm_cb.switch_delay_timer, BTA_DM_SWITCH_DELAY_TIMER_MS, + bta_dm_delay_role_switch_cback, NULL, btu_bta_alarm_queue); + } } - - } - else - { - L2CA_SetDesireRole (L2CAP_DESIRED_LINK_ROLE); + } } + if (!set_master_role) { + L2CA_SetDesireRole(L2CAP_DESIRED_LINK_ROLE); + } + } else { + L2CA_SetDesireRole(L2CAP_DESIRED_LINK_ROLE); + } } /******************************************************************************* * * Function bta_dm_get_remname * - * Description Returns a pointer to the remote name stored in the DM control + * Description Returns a pointer to the remote name stored in the DM + *control * block if it exists, or from the BTM memory. * * Returns char * - Pointer to the remote device name ******************************************************************************/ -static char *bta_dm_get_remname(void) -{ - char *p_name = (char *)bta_dm_search_cb.peer_name; - char *p_temp; +static char* bta_dm_get_remname(void) { + char* p_name = (char*)bta_dm_search_cb.peer_name; + char* p_temp; - /* If the name isn't already stored, try retrieving from BTM */ - if (*p_name == '\0') - if ((p_temp = BTM_SecReadDevName(bta_dm_search_cb.peer_bdaddr)) != NULL) - p_name = p_temp; + /* If the name isn't already stored, try retrieving from BTM */ + if (*p_name == '\0') + if ((p_temp = BTM_SecReadDevName(bta_dm_search_cb.peer_bdaddr)) != NULL) + p_name = p_temp; - return p_name; + return p_name; } /******************************************************************************* @@ -3658,20 +3489,17 @@ static char *bta_dm_get_remname(void) * Returns void * ******************************************************************************/ -static void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result) -{ +static void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result) { + tBTA_DM_SEC sec_event; - tBTA_DM_SEC sec_event; - - if (result == BTM_SUCCESS) - sec_event.bond_cancel_cmpl.result = BTA_SUCCESS; - else - sec_event.bond_cancel_cmpl.result = BTA_FAILURE; + if (result == BTM_SUCCESS) + sec_event.bond_cancel_cmpl.result = BTA_SUCCESS; + else + sec_event.bond_cancel_cmpl.result = BTA_FAILURE; - if(bta_dm_cb.p_sec_cback) - { - bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event); - } + if (bta_dm_cb.p_sec_cback) { + bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event); + } } /******************************************************************************* @@ -3685,304 +3513,274 @@ static void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result) * Returns Offset of UTF8 character boundary * ******************************************************************************/ -static size_t find_utf8_char_boundary(const char *utf8str, size_t offset) -{ - assert(utf8str); - assert(offset > 0); - - while (--offset) - { - uint8_t ch = (uint8_t)utf8str[offset]; - if ((ch & 0x80) == 0x00) // ASCII - return offset + 1; - if ((ch & 0xC0) == 0xC0) // Multi-byte sequence start - return offset; - } - - return 0; +static size_t find_utf8_char_boundary(const char* utf8str, size_t offset) { + assert(utf8str); + assert(offset > 0); + + while (--offset) { + uint8_t ch = (uint8_t)utf8str[offset]; + if ((ch & 0x80) == 0x00) // ASCII + return offset + 1; + if ((ch & 0xC0) == 0xC0) // Multi-byte sequence start + return offset; + } + + return 0; } /******************************************************************************* * * Function bta_dm_set_eir * - * Description This function creates EIR tagged data and writes it to controller. + * Description This function creates EIR tagged data and writes it to + *controller. * * Returns None * ******************************************************************************/ -static void bta_dm_set_eir (char *local_name) -{ - uint8_t *p; - uint8_t *p_length; +static void bta_dm_set_eir(char* local_name) { + uint8_t* p; + uint8_t* p_length; #if (BTA_EIR_CANNED_UUID_LIST != TRUE) - uint8_t *p_type; - uint8_t max_num_uuid; + uint8_t* p_type; + uint8_t max_num_uuid; #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) - uint8_t custom_uuid_idx; + uint8_t custom_uuid_idx; #endif // BTA_EIR_SERVER_NUM_CUSTOM_UUID #endif // BTA_EIR_CANNED_UUID_LIST #if (BTM_EIR_DEFAULT_FEC_REQUIRED == FALSE) - uint8_t free_eir_length = HCI_EXT_INQ_RESPONSE_LEN; + uint8_t free_eir_length = HCI_EXT_INQ_RESPONSE_LEN; #else // BTM_EIR_DEFAULT_FEC_REQUIRED - uint8_t free_eir_length = HCI_DM5_PACKET_SIZE; + uint8_t free_eir_length = HCI_DM5_PACKET_SIZE; #endif // BTM_EIR_DEFAULT_FEC_REQUIRED - uint8_t num_uuid; - uint8_t data_type; - uint8_t local_name_len; + uint8_t num_uuid; + uint8_t data_type; + uint8_t local_name_len; - /* wait until complete to disable */ - if (alarm_is_scheduled(bta_dm_cb.disable_timer)) - return; + /* wait until complete to disable */ + if (alarm_is_scheduled(bta_dm_cb.disable_timer)) return; #if (BTA_EIR_CANNED_UUID_LIST != TRUE) - /* if local name is not provided, get it from controller */ - if( local_name == NULL ) - { - if( BTM_ReadLocalDeviceName( &local_name ) != BTM_SUCCESS ) - { - APPL_TRACE_ERROR("Fail to read local device name for EIR"); - } + /* if local name is not provided, get it from controller */ + if (local_name == NULL) { + if (BTM_ReadLocalDeviceName(&local_name) != BTM_SUCCESS) { + APPL_TRACE_ERROR("Fail to read local device name for EIR"); } + } #endif // BTA_EIR_CANNED_UUID_LIST - /* Allocate a buffer to hold HCI command */ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(BTM_CMD_BUF_SIZE); - p = (uint8_t *)p_buf + BTM_HCI_EIR_OFFSET; + /* Allocate a buffer to hold HCI command */ + BT_HDR* p_buf = (BT_HDR*)osi_malloc(BTM_CMD_BUF_SIZE); + p = (uint8_t*)p_buf + BTM_HCI_EIR_OFFSET; - memset(p, 0x00, HCI_EXT_INQ_RESPONSE_LEN ); + memset(p, 0x00, HCI_EXT_INQ_RESPONSE_LEN); - APPL_TRACE_DEBUG("BTA is generating EIR"); + APPL_TRACE_DEBUG("BTA is generating EIR"); - if( local_name ) - local_name_len = strlen( local_name ); - else - local_name_len = 0; - - data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE; - /* if local name is longer than minimum length of shortened name */ - /* check whether it needs to be shortened or not */ - if( local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len ) - { - /* get number of UUID 16-bit list */ + if (local_name) + local_name_len = strlen(local_name); + else + local_name_len = 0; + + data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE; + /* if local name is longer than minimum length of shortened name */ + /* check whether it needs to be shortened or not */ + if (local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len) { +/* get number of UUID 16-bit list */ #if (BTA_EIR_CANNED_UUID_LIST == TRUE) - num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len/LEN_UUID_16; -#else // BTA_EIR_CANNED_UUID_LIST - max_num_uuid = (free_eir_length - 2)/LEN_UUID_16; - data_type = BTM_GetEirSupportedServices( bta_dm_cb.eir_uuid, &p, - max_num_uuid, &num_uuid ); - p = (uint8_t *)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */ + num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16; +#else // BTA_EIR_CANNED_UUID_LIST + max_num_uuid = (free_eir_length - 2) / LEN_UUID_16; + data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, + max_num_uuid, &num_uuid); + p = (uint8_t*)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */ #endif // BTA_EIR_CANNED_UUID_LIST - /* if UUID doesn't fit remaing space, shorten local name */ - if (local_name_len > (free_eir_length - 4 - num_uuid*LEN_UUID_16)) - { - local_name_len = find_utf8_char_boundary(local_name, - p_bta_dm_eir_cfg->bta_dm_eir_min_name_len); - APPL_TRACE_WARNING("%s local name is shortened (%d)", __func__, local_name_len); - data_type = BTM_EIR_SHORTENED_LOCAL_NAME_TYPE; - } else { - data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE; - } + /* if UUID doesn't fit remaing space, shorten local name */ + if (local_name_len > (free_eir_length - 4 - num_uuid * LEN_UUID_16)) { + local_name_len = find_utf8_char_boundary( + local_name, p_bta_dm_eir_cfg->bta_dm_eir_min_name_len); + APPL_TRACE_WARNING("%s local name is shortened (%d)", __func__, + local_name_len); + data_type = BTM_EIR_SHORTENED_LOCAL_NAME_TYPE; + } else { + data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE; } + } - UINT8_TO_STREAM(p, local_name_len + 1); - UINT8_TO_STREAM(p, data_type); + UINT8_TO_STREAM(p, local_name_len + 1); + UINT8_TO_STREAM(p, data_type); - if (local_name != NULL) - { - memcpy(p, local_name, local_name_len); - p += local_name_len; - } - free_eir_length -= local_name_len + 2; + if (local_name != NULL) { + memcpy(p, local_name, local_name_len); + p += local_name_len; + } + free_eir_length -= local_name_len + 2; #if (BTA_EIR_CANNED_UUID_LIST == TRUE) - /* if UUID list is provided as static data in configuration */ - if(( p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0 ) - &&(p_bta_dm_eir_cfg->bta_dm_eir_uuid16)) - { - if( free_eir_length > LEN_UUID_16 + 2) - { - free_eir_length -= 2; - - if( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len) - { - num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16; - data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE; - } - else /* not enough room for all UUIDs */ - { - APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); - num_uuid = free_eir_length / LEN_UUID_16; - data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; - } - UINT8_TO_STREAM(p, num_uuid * LEN_UUID_16 + 1); - UINT8_TO_STREAM(p, data_type); - memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, num_uuid * LEN_UUID_16 ); - p += num_uuid * LEN_UUID_16; - free_eir_length -= num_uuid * LEN_UUID_16; - } + /* if UUID list is provided as static data in configuration */ + if ((p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0) && + (p_bta_dm_eir_cfg->bta_dm_eir_uuid16)) { + if (free_eir_length > LEN_UUID_16 + 2) { + free_eir_length -= 2; + + if (free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len) { + num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16; + data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE; + } else /* not enough room for all UUIDs */ + { + APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); + num_uuid = free_eir_length / LEN_UUID_16; + data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; + } + UINT8_TO_STREAM(p, num_uuid * LEN_UUID_16 + 1); + UINT8_TO_STREAM(p, data_type); + memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, num_uuid * LEN_UUID_16); + p += num_uuid * LEN_UUID_16; + free_eir_length -= num_uuid * LEN_UUID_16; } + } #else /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ - /* if UUID list is dynamic */ - if ( free_eir_length >= 2) - { - p_length = p++; - p_type = p++; - num_uuid = 0; + /* if UUID list is dynamic */ + if (free_eir_length >= 2) { + p_length = p++; + p_type = p++; + num_uuid = 0; - max_num_uuid = (free_eir_length - 2)/LEN_UUID_16; - data_type = BTM_GetEirSupportedServices( bta_dm_cb.eir_uuid, &p, max_num_uuid, &num_uuid ); + max_num_uuid = (free_eir_length - 2) / LEN_UUID_16; + data_type = BTM_GetEirSupportedServices(bta_dm_cb.eir_uuid, &p, + max_num_uuid, &num_uuid); - if( data_type == BTM_EIR_MORE_16BITS_UUID_TYPE ) - { - APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); - } + if (data_type == BTM_EIR_MORE_16BITS_UUID_TYPE) { + APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); + } #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) - else - { - for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) - { - if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_16) - { - if ( num_uuid < max_num_uuid ) - { - UINT16_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid16); - num_uuid++; - } - else - { - data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; - APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); - break; - } - } - } + else { + for (custom_uuid_idx = 0; + custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; + custom_uuid_idx++) { + if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_16) { + if (num_uuid < max_num_uuid) { + UINT16_TO_STREAM(p, + bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid16); + num_uuid++; + } else { + data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; + APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated"); + break; + } } + } + } #endif /* (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ - UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_16 + 1); - UINT8_TO_STREAM(p_type, data_type); - free_eir_length -= num_uuid * LEN_UUID_16 + 2; - } + UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_16 + 1); + UINT8_TO_STREAM(p_type, data_type); + free_eir_length -= num_uuid * LEN_UUID_16 + 2; + } #endif /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ #if (BTA_EIR_CANNED_UUID_LIST != TRUE && BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) - /* Adding 32-bit UUID list */ - if ( free_eir_length >= 2) - { - p_length = p++; - p_type = p++; - num_uuid = 0; - data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE; - - max_num_uuid = (free_eir_length - 2)/LEN_UUID_32; - - for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) - { - if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_32) - { - if ( num_uuid < max_num_uuid ) - { - UINT32_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid32); - num_uuid++; - } - else - { - data_type = BTM_EIR_MORE_32BITS_UUID_TYPE; - APPL_TRACE_WARNING("BTA EIR: UUID 32-bit list is truncated"); - break; - } - } - } - - UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_32 + 1); - UINT8_TO_STREAM(p_type, data_type); - free_eir_length -= num_uuid * LEN_UUID_32 + 2; - } - - /* Adding 128-bit UUID list */ - if ( free_eir_length >= 2) - { - p_length = p++; - p_type = p++; - num_uuid = 0; - data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE; - - max_num_uuid = (free_eir_length - 2)/LEN_UUID_128; - - for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) - { - if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_128) - { - if ( num_uuid < max_num_uuid ) - { - ARRAY16_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid128); - num_uuid++; - } - else - { - data_type = BTM_EIR_MORE_128BITS_UUID_TYPE; - APPL_TRACE_WARNING("BTA EIR: UUID 128-bit list is truncated"); - break; - } - } + /* Adding 32-bit UUID list */ + if (free_eir_length >= 2) { + p_length = p++; + p_type = p++; + num_uuid = 0; + data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE; + + max_num_uuid = (free_eir_length - 2) / LEN_UUID_32; + + for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; + custom_uuid_idx++) { + if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_32) { + if (num_uuid < max_num_uuid) { + UINT32_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid32); + num_uuid++; + } else { + data_type = BTM_EIR_MORE_32BITS_UUID_TYPE; + APPL_TRACE_WARNING("BTA EIR: UUID 32-bit list is truncated"); + break; } - - UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_128 + 1); - UINT8_TO_STREAM(p_type, data_type); - free_eir_length -= num_uuid * LEN_UUID_128 + 2; - } -#endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ - - /* if Flags are provided in configuration */ - if(( p_bta_dm_eir_cfg->bta_dm_eir_flag_len > 0 ) - &&( p_bta_dm_eir_cfg->bta_dm_eir_flags ) - &&( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2 )) - { - UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 1); - UINT8_TO_STREAM(p, BTM_EIR_FLAGS_TYPE); - memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_flags, - p_bta_dm_eir_cfg->bta_dm_eir_flag_len); - p += p_bta_dm_eir_cfg->bta_dm_eir_flag_len; - free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2; + } } - /* if Manufacturer Specific are provided in configuration */ - if(( p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len > 0 ) - &&( p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec ) - &&( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2 )) - { - p_length = p; + UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_32 + 1); + UINT8_TO_STREAM(p_type, data_type); + free_eir_length -= num_uuid * LEN_UUID_32 + 2; + } - UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 1); - UINT8_TO_STREAM(p, BTM_EIR_MANUFACTURER_SPECIFIC_TYPE); - memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec, - p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len); - p += p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len; - free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2; + /* Adding 128-bit UUID list */ + if (free_eir_length >= 2) { + p_length = p++; + p_type = p++; + num_uuid = 0; + data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE; - } - else - { - p_length = NULL; - } + max_num_uuid = (free_eir_length - 2) / LEN_UUID_128; - /* if Inquiry Tx Resp Power compiled */ - if ((p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power) && - (free_eir_length >= 3)) - { - UINT8_TO_STREAM(p, 2); /* Length field */ - UINT8_TO_STREAM(p, BTM_EIR_TX_POWER_LEVEL_TYPE); - UINT8_TO_STREAM(p, *(p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power)); - free_eir_length -= 3; + for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; + custom_uuid_idx++) { + if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_128) { + if (num_uuid < max_num_uuid) { + ARRAY16_TO_STREAM(p, + bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid128); + num_uuid++; + } else { + data_type = BTM_EIR_MORE_128BITS_UUID_TYPE; + APPL_TRACE_WARNING("BTA EIR: UUID 128-bit list is truncated"); + break; + } + } } - if( free_eir_length ) - UINT8_TO_STREAM(p, 0); /* terminator of significant part */ - - BTM_WriteEIR( p_buf ); - + UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_128 + 1); + UINT8_TO_STREAM(p_type, data_type); + free_eir_length -= num_uuid * LEN_UUID_128 + 2; + } +#endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE \ + )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ + + /* if Flags are provided in configuration */ + if ((p_bta_dm_eir_cfg->bta_dm_eir_flag_len > 0) && + (p_bta_dm_eir_cfg->bta_dm_eir_flags) && + (free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2)) { + UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 1); + UINT8_TO_STREAM(p, BTM_EIR_FLAGS_TYPE); + memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_flags, + p_bta_dm_eir_cfg->bta_dm_eir_flag_len); + p += p_bta_dm_eir_cfg->bta_dm_eir_flag_len; + free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2; + } + + /* if Manufacturer Specific are provided in configuration */ + if ((p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len > 0) && + (p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec) && + (free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2)) { + p_length = p; + + UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 1); + UINT8_TO_STREAM(p, BTM_EIR_MANUFACTURER_SPECIFIC_TYPE); + memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec, + p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len); + p += p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len; + free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2; + + } else { + p_length = NULL; + } + + /* if Inquiry Tx Resp Power compiled */ + if ((p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power) && (free_eir_length >= 3)) { + UINT8_TO_STREAM(p, 2); /* Length field */ + UINT8_TO_STREAM(p, BTM_EIR_TX_POWER_LEVEL_TYPE); + UINT8_TO_STREAM(p, *(p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power)); + free_eir_length -= 3; + } + + if (free_eir_length) + UINT8_TO_STREAM(p, 0); /* terminator of significant part */ + + BTM_WriteEIR(p_buf); } /******************************************************************************* @@ -3994,69 +3792,65 @@ static void bta_dm_set_eir (char *local_name) * Returns None * ******************************************************************************/ -static void bta_dm_eir_search_services( tBTM_INQ_RESULTS *p_result, - tBTA_SERVICE_MASK *p_services_to_search, - tBTA_SERVICE_MASK *p_services_found) -{ - tBTA_SERVICE_MASK service_index = 0; - tBTM_EIR_SEARCH_RESULT result; +static void bta_dm_eir_search_services(tBTM_INQ_RESULTS* p_result, + tBTA_SERVICE_MASK* p_services_to_search, + tBTA_SERVICE_MASK* p_services_found) { + tBTA_SERVICE_MASK service_index = 0; + tBTM_EIR_SEARCH_RESULT result; - APPL_TRACE_DEBUG("BTA searching services in EIR of BDA:0x%02X%02X%02X%02X%02X%02X", - p_result->remote_bd_addr[0],p_result->remote_bd_addr[1], - p_result->remote_bd_addr[2],p_result->remote_bd_addr[3], - p_result->remote_bd_addr[4],p_result->remote_bd_addr[5]); + APPL_TRACE_DEBUG( + "BTA searching services in EIR of BDA:0x%02X%02X%02X%02X%02X%02X", + p_result->remote_bd_addr[0], p_result->remote_bd_addr[1], + p_result->remote_bd_addr[2], p_result->remote_bd_addr[3], + p_result->remote_bd_addr[4], p_result->remote_bd_addr[5]); - APPL_TRACE_DEBUG(" with services_to_search=0x%08X", *p_services_to_search); + APPL_TRACE_DEBUG(" with services_to_search=0x%08X", *p_services_to_search); #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - /* always do GATT based service discovery by SDP instead of from EIR */ - /* if GATT based service is also to be put in EIR, need to modify this */ - while (service_index < (BTA_MAX_SERVICE_ID - 1)) + /* always do GATT based service discovery by SDP instead of from EIR */ + /* if GATT based service is also to be put in EIR, need to modify this */ + while (service_index < (BTA_MAX_SERVICE_ID - 1)) #else - while(service_index < BTA_MAX_SERVICE_ID) + while (service_index < BTA_MAX_SERVICE_ID) #endif - { - if( *p_services_to_search - & (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))) - { - result = BTM_HasInquiryEirService( p_result, - bta_service_id_to_uuid_lkup_tbl[service_index] ); - - /* Searching for HSP v1.2 only device */ - if ((result != BTM_EIR_FOUND) && - (bta_service_id_to_uuid_lkup_tbl[service_index] == UUID_SERVCLASS_HEADSET)) - { - result = BTM_HasInquiryEirService (p_result, UUID_SERVCLASS_HEADSET_HS); - } + { + if (*p_services_to_search & + (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))) { + result = BTM_HasInquiryEirService( + p_result, bta_service_id_to_uuid_lkup_tbl[service_index]); + + /* Searching for HSP v1.2 only device */ + if ((result != BTM_EIR_FOUND) && + (bta_service_id_to_uuid_lkup_tbl[service_index] == + UUID_SERVCLASS_HEADSET)) { + result = BTM_HasInquiryEirService(p_result, UUID_SERVCLASS_HEADSET_HS); + } - if( result == BTM_EIR_FOUND ) - { - /* If Plug and Play service record, need to check to see if Broadcom stack */ - /* However, EIR data doesn't have EXT_BRCM_VERSION so just skip it */ - if( bta_service_id_to_uuid_lkup_tbl[service_index] - != UUID_SERVCLASS_PNP_INFORMATION ) - { - - *p_services_found |= - (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)); - /* remove the service from services to be searched */ - *p_services_to_search &= - (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))); - } - } - else if( result == BTM_EIR_NOT_FOUND ) - { - /* remove the service from services to be searched */ - *p_services_to_search &= - (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))); - } + if (result == BTM_EIR_FOUND) { + /* If Plug and Play service record, need to check to see if Broadcom + * stack */ + /* However, EIR data doesn't have EXT_BRCM_VERSION so just skip it */ + if (bta_service_id_to_uuid_lkup_tbl[service_index] != + UUID_SERVCLASS_PNP_INFORMATION) { + *p_services_found |= (tBTA_SERVICE_MASK)( + BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)); + /* remove the service from services to be searched */ + *p_services_to_search &= (tBTA_SERVICE_MASK)( + ~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))); } - - service_index++; + } else if (result == BTM_EIR_NOT_FOUND) { + /* remove the service from services to be searched */ + *p_services_to_search &= (tBTA_SERVICE_MASK)( + ~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))); + } } - APPL_TRACE_ERROR("BTA EIR search result, services_to_search=0x%08X, services_found=0x%08X", - *p_services_to_search, *p_services_found); + service_index++; + } + + APPL_TRACE_ERROR( + "BTA EIR search result, services_to_search=0x%08X, services_found=0x%08X", + *p_services_to_search, *p_services_found); } #if (BTA_EIR_CANNED_UUID_LIST != TRUE) @@ -4069,29 +3863,24 @@ static void bta_dm_eir_search_services( tBTM_INQ_RESULTS *p_result, * Returns None * ******************************************************************************/ -void bta_dm_eir_update_uuid(uint16_t uuid16, bool adding) -{ - /* if this UUID is not advertised in EIR */ - if( !BTM_HasEirService( p_bta_dm_eir_cfg->uuid_mask, uuid16 )) - return; +void bta_dm_eir_update_uuid(uint16_t uuid16, bool adding) { + /* if this UUID is not advertised in EIR */ + if (!BTM_HasEirService(p_bta_dm_eir_cfg->uuid_mask, uuid16)) return; - if( adding ) - { - APPL_TRACE_EVENT("Adding UUID=0x%04X into EIR", uuid16); + if (adding) { + APPL_TRACE_EVENT("Adding UUID=0x%04X into EIR", uuid16); - BTM_AddEirService( bta_dm_cb.eir_uuid, uuid16 ); - } - else - { - APPL_TRACE_EVENT("Removing UUID=0x%04X from EIR", uuid16); + BTM_AddEirService(bta_dm_cb.eir_uuid, uuid16); + } else { + APPL_TRACE_EVENT("Removing UUID=0x%04X from EIR", uuid16); - BTM_RemoveEirService( bta_dm_cb.eir_uuid, uuid16 ); - } + BTM_RemoveEirService(bta_dm_cb.eir_uuid, uuid16); + } - bta_dm_set_eir (NULL); + bta_dm_set_eir(NULL); - APPL_TRACE_EVENT("bta_dm_eir_update_uuid UUID bit mask=0x%08X %08X", - bta_dm_cb.eir_uuid[1], bta_dm_cb.eir_uuid[0] ); + APPL_TRACE_EVENT("bta_dm_eir_update_uuid UUID bit mask=0x%08X %08X", + bta_dm_cb.eir_uuid[1], bta_dm_cb.eir_uuid[0]); } #endif @@ -4105,9 +3894,8 @@ void bta_dm_eir_update_uuid(uint16_t uuid16, bool adding) * Returns void * ******************************************************************************/ -void bta_dm_enable_test_mode(UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - BTM_EnableTestMode(); +void bta_dm_enable_test_mode(UNUSED_ATTR tBTA_DM_MSG* p_data) { + BTM_EnableTestMode(); } /******************************************************************************* @@ -4120,30 +3908,28 @@ void bta_dm_enable_test_mode(UNUSED_ATTR tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_disable_test_mode(UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - BTM_DeviceReset(NULL); +void bta_dm_disable_test_mode(UNUSED_ATTR tBTA_DM_MSG* p_data) { + BTM_DeviceReset(NULL); } /******************************************************************************* * * Function bta_dm_execute_callback * - * Description Just execute a generic call back in the context of the BTU/BTA tack + * Description Just execute a generic call back in the context of the + *BTU/BTA tack * * * Returns void * ******************************************************************************/ -void bta_dm_execute_callback(tBTA_DM_MSG *p_data) -{ - /* sanity check */ - if(p_data->exec_cback.p_exec_cback == NULL) - { - return; - } +void bta_dm_execute_callback(tBTA_DM_MSG* p_data) { + /* sanity check */ + if (p_data->exec_cback.p_exec_cback == NULL) { + return; + } - p_data->exec_cback.p_exec_cback(p_data->exec_cback.p_param); + p_data->exec_cback.p_exec_cback(p_data->exec_cback.p_param); } /******************************************************************************* @@ -4156,49 +3942,45 @@ void bta_dm_execute_callback(tBTA_DM_MSG *p_data) * ******************************************************************************/ void bta_dm_encrypt_cback(BD_ADDR bd_addr, tBT_TRANSPORT transport, - UNUSED_ATTR void *p_ref_data, tBTM_STATUS result) -{ - tBTA_STATUS bta_status = BTA_SUCCESS; - tBTA_DM_ENCRYPT_CBACK *p_callback = NULL; - uint8_t i ; - - for (i=0; iset_encryption.p_callback) - { - APPL_TRACE_ERROR("bta_dm_set_encryption callback is not provided"); - return; - } - for (i=0; iset_encryption.bd_addr) == 0 && - bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED) - break; - } - if (i < bta_dm_cb.device_list.count) - { - if (bta_dm_cb.device_list.peer_device[i].p_encrypt_cback) - { - APPL_TRACE_ERROR("earlier enc was not done for same device"); - (*p_data->set_encryption.p_callback)(p_data->set_encryption.bd_addr, - p_data->set_encryption.transport, - BTA_BUSY); - return; - } +void bta_dm_set_encryption(tBTA_DM_MSG* p_data) { + uint8_t i; - if (BTM_SetEncryption(p_data->set_encryption.bd_addr, p_data->set_encryption.transport, - bta_dm_encrypt_cback, NULL, p_data->set_encryption.sec_act) - == BTM_CMD_STARTED) - { - bta_dm_cb.device_list.peer_device[i].p_encrypt_cback = p_data->set_encryption.p_callback; - } - } + APPL_TRACE_DEBUG("bta_dm_set_encryption"); // todo + if (!p_data->set_encryption.p_callback) { + APPL_TRACE_ERROR("bta_dm_set_encryption callback is not provided"); + return; + } + for (i = 0; i < bta_dm_cb.device_list.count; i++) { + if (bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, + p_data->set_encryption.bd_addr) == 0 && + bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED) + break; + } + if (i < bta_dm_cb.device_list.count) { + if (bta_dm_cb.device_list.peer_device[i].p_encrypt_cback) { + APPL_TRACE_ERROR("earlier enc was not done for same device"); + (*p_data->set_encryption.p_callback)(p_data->set_encryption.bd_addr, + p_data->set_encryption.transport, + BTA_BUSY); + return; + } + + if (BTM_SetEncryption(p_data->set_encryption.bd_addr, + p_data->set_encryption.transport, + bta_dm_encrypt_cback, NULL, + p_data->set_encryption.sec_act) == BTM_CMD_STARTED) { + bta_dm_cb.device_list.peer_device[i].p_encrypt_cback = + p_data->set_encryption.p_callback; + } + } } #if (BLE_INCLUDED == TRUE) @@ -4257,39 +4036,37 @@ void bta_dm_set_encryption (tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, uint8_t *p_eir) -{ -; - tBTA_DM_SEARCH result; - tBTM_INQ_INFO *p_inq_info; - APPL_TRACE_DEBUG("bta_dm_observe_results_cb") - - bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr); - result.inq_res.rssi = p_inq->rssi; - result.inq_res.ble_addr_type = p_inq->ble_addr_type; - result.inq_res.inq_result_type = p_inq->inq_result_type; - result.inq_res.device_type = p_inq->device_type; - result.inq_res.flag = p_inq->flag; - - /* application will parse EIR to find out remote device name */ - result.inq_res.p_eir = p_eir; - - if((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL) - { - /* initialize remt_name_not_required to false so that we get the name by default */ - result.inq_res.remt_name_not_required = false; - } - - if(bta_dm_search_cb.p_scan_cback) - bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_RES_EVT, &result); - - if(p_inq_info) - { - /* application indicates if it knows the remote name, inside the callback - copy that to the inquiry data base*/ - if(result.inq_res.remt_name_not_required) - p_inq_info->appl_knows_rem_name = true; - } +static void bta_dm_observe_results_cb(tBTM_INQ_RESULTS* p_inq, uint8_t* p_eir) { + ; + tBTA_DM_SEARCH result; + tBTM_INQ_INFO* p_inq_info; + APPL_TRACE_DEBUG("bta_dm_observe_results_cb") + + bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr); + result.inq_res.rssi = p_inq->rssi; + result.inq_res.ble_addr_type = p_inq->ble_addr_type; + result.inq_res.inq_result_type = p_inq->inq_result_type; + result.inq_res.device_type = p_inq->device_type; + result.inq_res.flag = p_inq->flag; + + /* application will parse EIR to find out remote device name */ + result.inq_res.p_eir = p_eir; + + if ((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL) { + /* initialize remt_name_not_required to false so that we get the name by + * default */ + result.inq_res.remt_name_not_required = false; + } + + if (bta_dm_search_cb.p_scan_cback) + bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_RES_EVT, &result); + + if (p_inq_info) { + /* application indicates if it knows the remote name, inside the callback + copy that to the inquiry data base*/ + if (result.inq_res.remt_name_not_required) + p_inq_info->appl_knows_rem_name = true; + } } /******************************************************************************* @@ -4302,17 +4079,15 @@ static void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, uint8_t *p_eir) * Returns void * ******************************************************************************/ -static void bta_dm_observe_cmpl_cb (void * p_result) -{ - tBTA_DM_SEARCH data; +static void bta_dm_observe_cmpl_cb(void* p_result) { + tBTA_DM_SEARCH data; - APPL_TRACE_DEBUG("bta_dm_observe_cmpl_cb"); + APPL_TRACE_DEBUG("bta_dm_observe_cmpl_cb"); - data.inq_cmpl.num_resps = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp; - if (bta_dm_search_cb.p_scan_cback) - { - bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data); - } + data.inq_cmpl.num_resps = ((tBTM_INQUIRY_CMPL*)p_result)->num_resp; + if (bta_dm_search_cb.p_scan_cback) { + bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data); + } } #if (SMP_INCLUDED == TRUE) @@ -4326,119 +4101,114 @@ static void bta_dm_observe_cmpl_cb (void * p_result) * Returns void * ******************************************************************************/ -static uint8_t bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT_DATA *p_data) -{ - tBTM_STATUS status = BTM_SUCCESS; - tBTA_DM_SEC sec_event; - char *p_name = NULL; +static uint8_t bta_dm_ble_smp_cback(tBTM_LE_EVT event, BD_ADDR bda, + tBTM_LE_EVT_DATA* p_data) { + tBTM_STATUS status = BTM_SUCCESS; + tBTA_DM_SEC sec_event; + char* p_name = NULL; - if (!bta_dm_cb.p_sec_cback) - return BTM_NOT_AUTHORIZED; + if (!bta_dm_cb.p_sec_cback) return BTM_NOT_AUTHORIZED; - memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); - switch (event) - { - case BTM_LE_IO_REQ_EVT: + memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); + switch (event) { + case BTM_LE_IO_REQ_EVT: #if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) - bta_dm_co_ble_io_req(bda, - &p_data->io_req.io_cap, - &p_data->io_req.oob_data, - &p_data->io_req.auth_req, - &p_data->io_req.max_key_size, - &p_data->io_req.init_keys, - &p_data->io_req.resp_keys); + bta_dm_co_ble_io_req( + bda, &p_data->io_req.io_cap, &p_data->io_req.oob_data, + &p_data->io_req.auth_req, &p_data->io_req.max_key_size, + &p_data->io_req.init_keys, &p_data->io_req.resp_keys); #endif - APPL_TRACE_EVENT("io mitm: %d oob_data:%d", p_data->io_req.auth_req, p_data->io_req.oob_data); - - break; - - case BTM_LE_SEC_REQUEST_EVT: - bdcpy(sec_event.ble_req.bd_addr, bda); - p_name = BTM_SecReadDevName(bda); - if (p_name != NULL) - strlcpy((char*)sec_event.ble_req.bd_name, p_name, BD_NAME_LEN); - else - sec_event.ble_req.bd_name[0] = 0; - bta_dm_cb.p_sec_cback(BTA_DM_BLE_SEC_REQ_EVT, &sec_event); - break; - - case BTM_LE_KEY_NOTIF_EVT: - bdcpy(sec_event.key_notif.bd_addr, bda); - p_name = BTM_SecReadDevName(bda); - if (p_name != NULL) - strlcpy((char*)sec_event.key_notif.bd_name, p_name, BD_NAME_LEN); - else - sec_event.key_notif.bd_name[0] = 0; - sec_event.key_notif.passkey = p_data->key_notif; - bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_NOTIF_EVT, &sec_event); - break; - - case BTM_LE_KEY_REQ_EVT: - bdcpy(sec_event.ble_req.bd_addr, bda); - bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_REQ_EVT, &sec_event); - break; - - case BTM_LE_OOB_REQ_EVT: - bdcpy(sec_event.ble_req.bd_addr, bda); - bta_dm_cb.p_sec_cback(BTA_DM_BLE_OOB_REQ_EVT, &sec_event); - break; - - case BTM_LE_NC_REQ_EVT: - bdcpy(sec_event.key_notif.bd_addr, bda); - strlcpy((char*)sec_event.key_notif.bd_name, bta_dm_get_remname(), (BD_NAME_LEN)); - sec_event.key_notif.passkey = p_data->key_notif; - bta_dm_cb.p_sec_cback(BTA_DM_BLE_NC_REQ_EVT, &sec_event); - break; - - case BTM_LE_SC_OOB_REQ_EVT: - bdcpy(sec_event.ble_req.bd_addr, bda); - bta_dm_cb.p_sec_cback(BTA_DM_BLE_SC_OOB_REQ_EVT, &sec_event); - break; - - case BTM_LE_KEY_EVT: - bdcpy(sec_event.ble_key.bd_addr, bda); - sec_event.ble_key.key_type = p_data->key.key_type; - sec_event.ble_key.p_key_value = p_data->key.p_key_value; - bta_dm_cb.p_sec_cback(BTA_DM_BLE_KEY_EVT, &sec_event); - break; - - case BTM_LE_COMPLT_EVT: - bdcpy(sec_event.auth_cmpl.bd_addr, bda); + APPL_TRACE_EVENT("io mitm: %d oob_data:%d", p_data->io_req.auth_req, + p_data->io_req.oob_data); + + break; + + case BTM_LE_SEC_REQUEST_EVT: + bdcpy(sec_event.ble_req.bd_addr, bda); + p_name = BTM_SecReadDevName(bda); + if (p_name != NULL) + strlcpy((char*)sec_event.ble_req.bd_name, p_name, BD_NAME_LEN); + else + sec_event.ble_req.bd_name[0] = 0; + bta_dm_cb.p_sec_cback(BTA_DM_BLE_SEC_REQ_EVT, &sec_event); + break; + + case BTM_LE_KEY_NOTIF_EVT: + bdcpy(sec_event.key_notif.bd_addr, bda); + p_name = BTM_SecReadDevName(bda); + if (p_name != NULL) + strlcpy((char*)sec_event.key_notif.bd_name, p_name, BD_NAME_LEN); + else + sec_event.key_notif.bd_name[0] = 0; + sec_event.key_notif.passkey = p_data->key_notif; + bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_NOTIF_EVT, &sec_event); + break; + + case BTM_LE_KEY_REQ_EVT: + bdcpy(sec_event.ble_req.bd_addr, bda); + bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_REQ_EVT, &sec_event); + break; + + case BTM_LE_OOB_REQ_EVT: + bdcpy(sec_event.ble_req.bd_addr, bda); + bta_dm_cb.p_sec_cback(BTA_DM_BLE_OOB_REQ_EVT, &sec_event); + break; + + case BTM_LE_NC_REQ_EVT: + bdcpy(sec_event.key_notif.bd_addr, bda); + strlcpy((char*)sec_event.key_notif.bd_name, bta_dm_get_remname(), + (BD_NAME_LEN)); + sec_event.key_notif.passkey = p_data->key_notif; + bta_dm_cb.p_sec_cback(BTA_DM_BLE_NC_REQ_EVT, &sec_event); + break; + + case BTM_LE_SC_OOB_REQ_EVT: + bdcpy(sec_event.ble_req.bd_addr, bda); + bta_dm_cb.p_sec_cback(BTA_DM_BLE_SC_OOB_REQ_EVT, &sec_event); + break; + + case BTM_LE_KEY_EVT: + bdcpy(sec_event.ble_key.bd_addr, bda); + sec_event.ble_key.key_type = p_data->key.key_type; + sec_event.ble_key.p_key_value = p_data->key.p_key_value; + bta_dm_cb.p_sec_cback(BTA_DM_BLE_KEY_EVT, &sec_event); + break; + + case BTM_LE_COMPLT_EVT: + bdcpy(sec_event.auth_cmpl.bd_addr, bda); #if (BLE_INCLUDED == TRUE) - BTM_ReadDevInfo(bda, &sec_event.auth_cmpl.dev_type, &sec_event.auth_cmpl.addr_type); + BTM_ReadDevInfo(bda, &sec_event.auth_cmpl.dev_type, + &sec_event.auth_cmpl.addr_type); #endif - p_name = BTM_SecReadDevName(bda); - if (p_name != NULL) - strlcpy((char*)sec_event.auth_cmpl.bd_name, p_name, (BD_NAME_LEN)); - else - sec_event.auth_cmpl.bd_name[0] = 0; - - if (p_data->complt.reason != 0) - { - sec_event.auth_cmpl.fail_reason = BTA_DM_AUTH_CONVERT_SMP_CODE(((uint8_t)p_data->complt.reason)); - /* delete this device entry from Sec Dev DB */ - bta_dm_remove_sec_dev_entry (bda); - } - else - { - sec_event.auth_cmpl.success = true; - } + p_name = BTM_SecReadDevName(bda); + if (p_name != NULL) + strlcpy((char*)sec_event.auth_cmpl.bd_name, p_name, (BD_NAME_LEN)); + else + sec_event.auth_cmpl.bd_name[0] = 0; + + if (p_data->complt.reason != 0) { + sec_event.auth_cmpl.fail_reason = + BTA_DM_AUTH_CONVERT_SMP_CODE(((uint8_t)p_data->complt.reason)); + /* delete this device entry from Sec Dev DB */ + bta_dm_remove_sec_dev_entry(bda); + } else { + sec_event.auth_cmpl.success = true; + } - if (bta_dm_cb.p_sec_cback) - { - //bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); - bta_dm_cb.p_sec_cback(BTA_DM_BLE_AUTH_CMPL_EVT, &sec_event); - } - break; + if (bta_dm_cb.p_sec_cback) { + // bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); + bta_dm_cb.p_sec_cback(BTA_DM_BLE_AUTH_CMPL_EVT, &sec_event); + } + break; - default: - status = BTM_NOT_AUTHORIZED; - break; - } - return status; + default: + status = BTM_NOT_AUTHORIZED; + break; + } + return status; } -#endif /* SMP_INCLUDED == TRUE */ +#endif /* SMP_INCLUDED == TRUE */ /******************************************************************************* * @@ -4450,31 +4220,28 @@ static uint8_t bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT * Returns void * ******************************************************************************/ -static void bta_dm_ble_id_key_cback (uint8_t key_type, tBTM_BLE_LOCAL_KEYS *p_key) -{ - uint8_t evt; - tBTA_DM_SEC dm_key; - - switch (key_type) - { - case BTM_BLE_KEY_TYPE_ID: - case BTM_BLE_KEY_TYPE_ER: - if (bta_dm_cb.p_sec_cback) - { - memcpy(&dm_key.ble_id_keys, p_key, sizeof(tBTM_BLE_LOCAL_KEYS)); - - evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT :\ - BTA_DM_BLE_LOCAL_ER_EVT; - bta_dm_cb.p_sec_cback(evt, &dm_key); - } - break; - - default: - APPL_TRACE_DEBUG("Unknown key type %d", key_type); - break; - } - return; +static void bta_dm_ble_id_key_cback(uint8_t key_type, + tBTM_BLE_LOCAL_KEYS* p_key) { + uint8_t evt; + tBTA_DM_SEC dm_key; + + switch (key_type) { + case BTM_BLE_KEY_TYPE_ID: + case BTM_BLE_KEY_TYPE_ER: + if (bta_dm_cb.p_sec_cback) { + memcpy(&dm_key.ble_id_keys, p_key, sizeof(tBTM_BLE_LOCAL_KEYS)); + + evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT + : BTA_DM_BLE_LOCAL_ER_EVT; + bta_dm_cb.p_sec_cback(evt, &dm_key); + } + break; + default: + APPL_TRACE_DEBUG("Unknown key type %d", key_type); + break; + } + return; } /******************************************************************************* @@ -4482,72 +4249,77 @@ static void bta_dm_ble_id_key_cback (uint8_t key_type, tBTM_BLE_LOCAL_KEYS *p_ke * Function bta_dm_add_blekey * * Description This function adds an BLE Key to an security database entry. - * This function shall only be called AFTER BTA_DmAddBleDevice has been called. - * It is normally called during host startup to restore all required information + * This function shall only be called AFTER BTA_DmAddBleDevice + *has been called. + * It is normally called during host startup to restore all + *required information * stored in the NVRAM. * * Parameters: * ******************************************************************************/ -void bta_dm_add_blekey (tBTA_DM_MSG *p_data) -{ - if (!BTM_SecAddBleKey (p_data->add_ble_key.bd_addr, - (tBTM_LE_KEY_VALUE *)&p_data->add_ble_key.blekey, - p_data->add_ble_key.key_type)) - { - APPL_TRACE_ERROR ("BTA_DM: Error adding BLE Key for device %08x%04x", - (p_data->add_ble_key.bd_addr[0]<<24)+(p_data->add_ble_key.bd_addr[1]<<16)+\ - (p_data->add_ble_key.bd_addr[2]<<8)+p_data->add_ble_key.bd_addr[3], - (p_data->add_ble_key.bd_addr[4]<<8)+p_data->add_ble_key.bd_addr[5]); - } +void bta_dm_add_blekey(tBTA_DM_MSG* p_data) { + if (!BTM_SecAddBleKey(p_data->add_ble_key.bd_addr, + (tBTM_LE_KEY_VALUE*)&p_data->add_ble_key.blekey, + p_data->add_ble_key.key_type)) { + APPL_TRACE_ERROR( + "BTA_DM: Error adding BLE Key for device %08x%04x", + (p_data->add_ble_key.bd_addr[0] << 24) + + (p_data->add_ble_key.bd_addr[1] << 16) + + (p_data->add_ble_key.bd_addr[2] << 8) + + p_data->add_ble_key.bd_addr[3], + (p_data->add_ble_key.bd_addr[4] << 8) + p_data->add_ble_key.bd_addr[5]); + } } /******************************************************************************* * * Function bta_dm_add_ble_device * - * Description This function adds an BLE device to an security database entry. - * It is normally called during host startup to restore all required information + * Description This function adds an BLE device to an security database + *entry. + * It is normally called during host startup to restore all + *required information * stored in the NVRAM. * * Parameters: * ******************************************************************************/ -void bta_dm_add_ble_device (tBTA_DM_MSG *p_data) -{ - if (!BTM_SecAddBleDevice (p_data->add_ble_device.bd_addr, NULL, - p_data->add_ble_device.dev_type , - p_data->add_ble_device.addr_type)) - { - APPL_TRACE_ERROR ("BTA_DM: Error adding BLE Device for device %08x%04x", - (p_data->add_ble_device.bd_addr[0]<<24)+(p_data->add_ble_device.bd_addr[1]<<16)+ \ - (p_data->add_ble_device.bd_addr[2]<<8)+p_data->add_ble_device.bd_addr[3], - (p_data->add_ble_device.bd_addr[4]<<8)+p_data->add_ble_device.bd_addr[5]); - } +void bta_dm_add_ble_device(tBTA_DM_MSG* p_data) { + if (!BTM_SecAddBleDevice(p_data->add_ble_device.bd_addr, NULL, + p_data->add_ble_device.dev_type, + p_data->add_ble_device.addr_type)) { + APPL_TRACE_ERROR("BTA_DM: Error adding BLE Device for device %08x%04x", + (p_data->add_ble_device.bd_addr[0] << 24) + + (p_data->add_ble_device.bd_addr[1] << 16) + + (p_data->add_ble_device.bd_addr[2] << 8) + + p_data->add_ble_device.bd_addr[3], + (p_data->add_ble_device.bd_addr[4] << 8) + + p_data->add_ble_device.bd_addr[5]); + } } /******************************************************************************* * * Function bta_dm_add_ble_device * - * Description This function adds an BLE device to an security database entry. - * It is normally called during host startup to restore all required information + * Description This function adds an BLE device to an security database + *entry. + * It is normally called during host startup to restore all + *required information * stored in the NVRAM. * * Parameters: * ******************************************************************************/ -void bta_dm_ble_passkey_reply (tBTA_DM_MSG *p_data) -{ - if (p_data->pin_reply.accept) - { - BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_SUCCESS, p_data->ble_passkey_reply.passkey); - } - else - { - BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_NOT_AUTHORIZED, p_data->ble_passkey_reply.passkey); - } - +void bta_dm_ble_passkey_reply(tBTA_DM_MSG* p_data) { + if (p_data->pin_reply.accept) { + BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_SUCCESS, + p_data->ble_passkey_reply.passkey); + } else { + BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_NOT_AUTHORIZED, + p_data->ble_passkey_reply.passkey); + } } /******************************************************************************* @@ -4560,16 +4332,12 @@ void bta_dm_ble_passkey_reply (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_confirm_reply (tBTA_DM_MSG *p_data) -{ - if (p_data->confirm.accept) - { - BTM_BleConfirmReply(p_data->confirm.bd_addr, BTM_SUCCESS); - } - else - { - BTM_BleConfirmReply(p_data->ble_passkey_reply.bd_addr, BTM_NOT_AUTHORIZED); - } +void bta_dm_ble_confirm_reply(tBTA_DM_MSG* p_data) { + if (p_data->confirm.accept) { + BTM_BleConfirmReply(p_data->confirm.bd_addr, BTM_SUCCESS); + } else { + BTM_BleConfirmReply(p_data->ble_passkey_reply.bd_addr, BTM_NOT_AUTHORIZED); + } } /******************************************************************************* @@ -4581,9 +4349,8 @@ void bta_dm_ble_confirm_reply (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_security_grant (tBTA_DM_MSG *p_data) -{ - BTM_SecurityGrant(p_data->ble_sec_grant.bd_addr, p_data->ble_sec_grant.res); +void bta_dm_security_grant(tBTA_DM_MSG* p_data) { + BTM_SecurityGrant(p_data->ble_sec_grant.bd_addr, p_data->ble_sec_grant.res); } /******************************************************************************* @@ -4595,10 +4362,9 @@ void bta_dm_security_grant (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data) -{ - BTM_BleSetBgConnType(p_data->ble_set_bd_conn_type.bg_conn_type, - p_data->ble_set_bd_conn_type.p_select_cback); +void bta_dm_ble_set_bg_conn_type(tBTA_DM_MSG* p_data) { + BTM_BleSetBgConnType(p_data->ble_set_bd_conn_type.bg_conn_type, + p_data->ble_set_bd_conn_type.p_select_cback); } /******************************************************************************* @@ -4610,13 +4376,12 @@ void bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data) -{ - BTM_BleSetPrefConnParams(p_data->ble_set_conn_params.peer_bda, - p_data->ble_set_conn_params.conn_int_min, - p_data->ble_set_conn_params.conn_int_max, - p_data->ble_set_conn_params.slave_latency, - p_data->ble_set_conn_params.supervision_tout); +void bta_dm_ble_set_conn_params(tBTA_DM_MSG* p_data) { + BTM_BleSetPrefConnParams(p_data->ble_set_conn_params.peer_bda, + p_data->ble_set_conn_params.conn_int_min, + p_data->ble_set_conn_params.conn_int_max, + p_data->ble_set_conn_params.slave_latency, + p_data->ble_set_conn_params.supervision_tout); } /******************************************************************************* @@ -4628,13 +4393,12 @@ void bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_set_scan_params(tBTA_DM_MSG *p_data) -{ - BTM_BleSetScanParams(p_data->ble_set_scan_params.client_if, - p_data->ble_set_scan_params.scan_int, - p_data->ble_set_scan_params.scan_window, - p_data->ble_set_scan_params.scan_mode, - p_data->ble_set_scan_params.scan_param_setup_cback); +void bta_dm_ble_set_scan_params(tBTA_DM_MSG* p_data) { + BTM_BleSetScanParams(p_data->ble_set_scan_params.client_if, + p_data->ble_set_scan_params.scan_int, + p_data->ble_set_scan_params.scan_window, + p_data->ble_set_scan_params.scan_mode, + p_data->ble_set_scan_params.scan_param_setup_cback); } /******************************************************************************* @@ -4646,10 +4410,9 @@ void bta_dm_ble_set_scan_params(tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_set_conn_scan_params (tBTA_DM_MSG *p_data) -{ - BTM_BleSetConnScanParams(p_data->ble_set_conn_scan_params.scan_int, - p_data->ble_set_conn_scan_params.scan_window); +void bta_dm_ble_set_conn_scan_params(tBTA_DM_MSG* p_data) { + BTM_BleSetConnScanParams(p_data->ble_set_conn_scan_params.scan_int, + p_data->ble_set_conn_scan_params.scan_window); } /******************************************************************************* * @@ -4660,16 +4423,14 @@ void bta_dm_ble_set_conn_scan_params (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data) -{ - if (!L2CA_UpdateBleConnParams(p_data->ble_update_conn_params.bd_addr, - p_data->ble_update_conn_params.min_int, - p_data->ble_update_conn_params.max_int, - p_data->ble_update_conn_params.latency, - p_data->ble_update_conn_params.timeout)) - { - APPL_TRACE_ERROR("Update connection parameters failed!"); - } +void bta_dm_ble_update_conn_params(tBTA_DM_MSG* p_data) { + if (!L2CA_UpdateBleConnParams(p_data->ble_update_conn_params.bd_addr, + p_data->ble_update_conn_params.min_int, + p_data->ble_update_conn_params.max_int, + p_data->ble_update_conn_params.latency, + p_data->ble_update_conn_params.timeout)) { + APPL_TRACE_ERROR("Update connection parameters failed!"); + } } #if (BLE_PRIVACY_SPT == TRUE) @@ -4682,9 +4443,8 @@ void bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data) -{ - BTM_BleConfigPrivacy (p_data->ble_local_privacy.privacy_enable); +void bta_dm_ble_config_local_privacy(tBTA_DM_MSG* p_data) { + BTM_BleConfigPrivacy(p_data->ble_local_privacy.privacy_enable); } #endif @@ -4697,30 +4457,26 @@ void bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_observe (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS status; - if (p_data->ble_observe.start) - { - /*Save the callback to be called when a scan results are available */ - bta_dm_search_cb.p_scan_cback = p_data->ble_observe.p_cback; - if ((status = BTM_BleObserve(true, p_data->ble_observe.duration, - bta_dm_observe_results_cb, bta_dm_observe_cmpl_cb))!= BTM_CMD_STARTED) - { - tBTA_DM_SEARCH data; - APPL_TRACE_WARNING(" %s BTM_BleObserve failed. status %d",__func__,status); - data.inq_cmpl.num_resps = 0; - if (bta_dm_search_cb.p_scan_cback) - { - bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data); - } - } - } - else - { - bta_dm_search_cb.p_scan_cback = NULL; - BTM_BleObserve(false, 0, NULL,NULL ); +void bta_dm_ble_observe(tBTA_DM_MSG* p_data) { + tBTM_STATUS status; + if (p_data->ble_observe.start) { + /*Save the callback to be called when a scan results are available */ + bta_dm_search_cb.p_scan_cback = p_data->ble_observe.p_cback; + if ((status = BTM_BleObserve(true, p_data->ble_observe.duration, + bta_dm_observe_results_cb, + bta_dm_observe_cmpl_cb)) != BTM_CMD_STARTED) { + tBTA_DM_SEARCH data; + APPL_TRACE_WARNING(" %s BTM_BleObserve failed. status %d", __func__, + status); + data.inq_cmpl.num_resps = 0; + if (bta_dm_search_cb.p_scan_cback) { + bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data); + } } + } else { + bta_dm_search_cb.p_scan_cback = NULL; + BTM_BleObserve(false, 0, NULL, NULL); + } } /******************************************************************************* * @@ -4731,10 +4487,10 @@ void bta_dm_ble_observe (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_set_adv_params (uint16_t adv_int_min, uint16_t adv_int_max, - tBLE_BD_ADDR *p_dir_bda) -{ - BTM_BleSetAdvParams(adv_int_min, adv_int_max, p_dir_bda, BTA_DM_BLE_ADV_CHNL_MAP); +void bta_dm_ble_set_adv_params(uint16_t adv_int_min, uint16_t adv_int_max, + tBLE_BD_ADDR* p_dir_bda) { + BTM_BleSetAdvParams(adv_int_min, adv_int_max, p_dir_bda, + BTA_DM_BLE_ADV_CHNL_MAP); } /******************************************************************************* @@ -4746,45 +4502,44 @@ void bta_dm_ble_set_adv_params (uint16_t adv_int_min, uint16_t adv_int_max, * Parameters * ******************************************************************************/ -void bta_dm_ble_set_data_length(tBTA_DM_MSG *p_data) -{ - if (BTM_SetBleDataLength(p_data->ble_set_data_length.remote_bda, - p_data->ble_set_data_length.tx_data_length) != BTM_SUCCESS) - { - APPL_TRACE_ERROR("%s failed", __func__); - } +void bta_dm_ble_set_data_length(tBTA_DM_MSG* p_data) { + if (BTM_SetBleDataLength(p_data->ble_set_data_length.remote_bda, + p_data->ble_set_data_length.tx_data_length) != + BTM_SUCCESS) { + APPL_TRACE_ERROR("%s failed", __func__); + } } /******************************************************************************* * * Function bta_dm_ble_setup_storage * - * Description This function configures up the storage parameters for ADV batch scanning + * Description This function configures up the storage parameters for ADV + *batch scanning * * Parameters: * ******************************************************************************/ -void bta_dm_ble_setup_storage (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) - { - btm_status = BTM_BleSetStorageConfig(p_data->ble_set_storage.batch_scan_full_max, - p_data->ble_set_storage.batch_scan_trunc_max, - p_data->ble_set_storage.batch_scan_notify_threshold, - p_data->ble_set_storage.p_setup_cback, - p_data->ble_set_storage.p_thres_cback, - p_data->ble_set_storage.p_read_rep_cback, - p_data->ble_set_storage.ref_value); - } - - if(BTM_CMD_STARTED != btm_status) - bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_CFG_STRG_EVT, p_data->ble_set_storage.ref_value, - btm_status); +void bta_dm_ble_setup_storage(tBTA_DM_MSG* p_data) { + tBTM_STATUS btm_status = 0; + tBTM_BLE_VSC_CB cmn_ble_vsc_cb; + + BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); + + if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { + btm_status = BTM_BleSetStorageConfig( + p_data->ble_set_storage.batch_scan_full_max, + p_data->ble_set_storage.batch_scan_trunc_max, + p_data->ble_set_storage.batch_scan_notify_threshold, + p_data->ble_set_storage.p_setup_cback, + p_data->ble_set_storage.p_thres_cback, + p_data->ble_set_storage.p_read_rep_cback, + p_data->ble_set_storage.ref_value); + } + + if (BTM_CMD_STARTED != btm_status) + bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_CFG_STRG_EVT, + p_data->ble_set_storage.ref_value, btm_status); } /******************************************************************************* @@ -4796,26 +4551,23 @@ void bta_dm_ble_setup_storage (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_enable_batch_scan (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) - { - btm_status = BTM_BleEnableBatchScan(p_data->ble_enable_scan.scan_mode, - p_data->ble_enable_scan.scan_int, - p_data->ble_enable_scan.scan_window, - p_data->ble_enable_scan.discard_rule, - p_data->ble_enable_scan.addr_type, - p_data->ble_enable_scan.ref_value); - } - - if(BTM_CMD_STARTED != btm_status) - bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_ENABLE_EVT, p_data->ble_enable_scan.ref_value, - btm_status); +void bta_dm_ble_enable_batch_scan(tBTA_DM_MSG* p_data) { + tBTM_STATUS btm_status = 0; + tBTM_BLE_VSC_CB cmn_ble_vsc_cb; + + BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); + + if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { + btm_status = BTM_BleEnableBatchScan( + p_data->ble_enable_scan.scan_mode, p_data->ble_enable_scan.scan_int, + p_data->ble_enable_scan.scan_window, + p_data->ble_enable_scan.discard_rule, p_data->ble_enable_scan.addr_type, + p_data->ble_enable_scan.ref_value); + } + + if (BTM_CMD_STARTED != btm_status) + bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_ENABLE_EVT, + p_data->ble_enable_scan.ref_value, btm_status); } /******************************************************************************* @@ -4827,22 +4579,19 @@ void bta_dm_ble_enable_batch_scan (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_disable_batch_scan (UNUSED_ATTR tBTA_DM_MSG *p_data) -{ +void bta_dm_ble_disable_batch_scan(UNUSED_ATTR tBTA_DM_MSG* p_data) { + tBTM_STATUS btm_status = 0; + tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - tBTM_STATUS btm_status = 0; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; + BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) - { - btm_status = BTM_BleDisableBatchScan(p_data->ble_disable_scan.ref_value); - } + if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { + btm_status = BTM_BleDisableBatchScan(p_data->ble_disable_scan.ref_value); + } - if(BTM_CMD_STARTED != btm_status) - bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_DISABLE_EVT, p_data->ble_enable_scan.ref_value, - btm_status); + if (BTM_CMD_STARTED != btm_status) + bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_DISABLE_EVT, + p_data->ble_enable_scan.ref_value, btm_status); } /******************************************************************************* @@ -4854,22 +4603,20 @@ void bta_dm_ble_disable_batch_scan (UNUSED_ATTR tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_read_scan_reports(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; +void bta_dm_ble_read_scan_reports(tBTA_DM_MSG* p_data) { + tBTM_STATUS btm_status = 0; + tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); + BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) - { - btm_status = BTM_BleReadScanReports(p_data->ble_read_reports.scan_type, - p_data->ble_read_reports.ref_value); - } + if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { + btm_status = BTM_BleReadScanReports(p_data->ble_read_reports.scan_type, + p_data->ble_read_reports.ref_value); + } - if(BTM_CMD_STARTED != btm_status) - bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_READ_REPTS_EVT, p_data->ble_enable_scan.ref_value, - btm_status); + if (BTM_CMD_STARTED != btm_status) + bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_READ_REPTS_EVT, + p_data->ble_enable_scan.ref_value, btm_status); } /******************************************************************************* @@ -4881,72 +4628,68 @@ void bta_dm_ble_read_scan_reports(tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_ble_track_advertiser(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - BD_ADDR bda; - memset(&bda, 0 , sizeof(BD_ADDR)); - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - tBTA_DM_BLE_TRACK_ADV_DATA track_adv_data; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) - { - btm_status = BTM_BleTrackAdvertiser((tBTM_BLE_TRACK_ADV_CBACK *) - p_data->ble_track_advert.p_track_adv_cback, - p_data->ble_track_advert.ref_value); - } - - if(BTM_CMD_STARTED != btm_status) - { - memset(&track_adv_data, 0, sizeof(tBTA_DM_BLE_TRACK_ADV_DATA)); - track_adv_data.advertiser_info_present = NO_ADV_INFO_PRESENT; /* Indicates failure */ - track_adv_data.client_if = (uint8_t)p_data->ble_track_advert.ref_value; - p_data->ble_track_advert.p_track_adv_cback(&track_adv_data); - } +void bta_dm_ble_track_advertiser(tBTA_DM_MSG* p_data) { + tBTM_STATUS btm_status = 0; + BD_ADDR bda; + memset(&bda, 0, sizeof(BD_ADDR)); + tBTM_BLE_VSC_CB cmn_ble_vsc_cb; + tBTA_DM_BLE_TRACK_ADV_DATA track_adv_data; + + BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); + + if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { + btm_status = BTM_BleTrackAdvertiser( + (tBTM_BLE_TRACK_ADV_CBACK*)p_data->ble_track_advert.p_track_adv_cback, + p_data->ble_track_advert.ref_value); + } + + if (BTM_CMD_STARTED != btm_status) { + memset(&track_adv_data, 0, sizeof(tBTA_DM_BLE_TRACK_ADV_DATA)); + track_adv_data.advertiser_info_present = + NO_ADV_INFO_PRESENT; /* Indicates failure */ + track_adv_data.client_if = (uint8_t)p_data->ble_track_advert.ref_value; + p_data->ble_track_advert.p_track_adv_cback(&track_adv_data); + } } /******************************************************************************* * * Function bta_ble_scan_setup_cb * - * Description Handle the setup callback from BTM layer and forward it to app layer + * Description Handle the setup callback from BTM layer and forward it to + *app layer * * Parameters: * ******************************************************************************/ -void bta_ble_scan_setup_cb(tBTM_BLE_BATCH_SCAN_EVT evt, tBTM_BLE_REF_VALUE ref_value, - tBTM_STATUS status) -{ - tBTA_BLE_BATCH_SCAN_EVT bta_evt = 0; - - APPL_TRACE_DEBUG("bta_ble_scan_setup_cb : evt: %d, ref_value: %d, status:%d", evt, - ref_value, status); - - switch(evt) - { - case BTM_BLE_BATCH_SCAN_ENABLE_EVT: - bta_evt = BTA_BLE_BATCH_SCAN_ENB_EVT; - break; - case BTM_BLE_BATCH_SCAN_CFG_STRG_EVT: - bta_evt = BTA_BLE_BATCH_SCAN_CFG_STRG_EVT; - break; - case BTM_BLE_BATCH_SCAN_DISABLE_EVT: - bta_evt = BTA_BLE_BATCH_SCAN_DIS_EVT; - break; - case BTM_BLE_BATCH_SCAN_PARAM_EVT: - bta_evt = BTA_BLE_BATCH_SCAN_PARAM_EVT; - break; - default: - break; - } +void bta_ble_scan_setup_cb(tBTM_BLE_BATCH_SCAN_EVT evt, + tBTM_BLE_REF_VALUE ref_value, tBTM_STATUS status) { + tBTA_BLE_BATCH_SCAN_EVT bta_evt = 0; + + APPL_TRACE_DEBUG("bta_ble_scan_setup_cb : evt: %d, ref_value: %d, status:%d", + evt, ref_value, status); + + switch (evt) { + case BTM_BLE_BATCH_SCAN_ENABLE_EVT: + bta_evt = BTA_BLE_BATCH_SCAN_ENB_EVT; + break; + case BTM_BLE_BATCH_SCAN_CFG_STRG_EVT: + bta_evt = BTA_BLE_BATCH_SCAN_CFG_STRG_EVT; + break; + case BTM_BLE_BATCH_SCAN_DISABLE_EVT: + bta_evt = BTA_BLE_BATCH_SCAN_DIS_EVT; + break; + case BTM_BLE_BATCH_SCAN_PARAM_EVT: + bta_evt = BTA_BLE_BATCH_SCAN_PARAM_EVT; + break; + default: + break; + } - if(NULL != bta_dm_cb.p_setup_cback) - bta_dm_cb.p_setup_cback(bta_evt, ref_value, status); + if (NULL != bta_dm_cb.p_setup_cback) + bta_dm_cb.p_setup_cback(bta_evt, ref_value, status); } - #if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) /******************************************************************************* * @@ -4958,16 +4701,18 @@ void bta_ble_scan_setup_cb(tBTM_BLE_BATCH_SCAN_EVT evt, tBTM_BLE_REF_VALUE ref_v * Returns true if handled, otherwise false. * ******************************************************************************/ -static void bta_ble_scan_cfg_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_SCAN_COND_OP cfg_op, - tBTM_BLE_PF_AVBL_SPACE avbl_space, tBTM_STATUS status, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE; - - APPL_TRACE_DEBUG("bta_ble_scan_cfg_cmpl: %d, %d, %d, %d", action, cfg_op, avbl_space, status); - - if(bta_dm_cb.p_scan_filt_cfg_cback) - bta_dm_cb.p_scan_filt_cfg_cback(action, cfg_op, avbl_space, st, ref_value); +static void bta_ble_scan_cfg_cmpl(tBTM_BLE_PF_ACTION action, + tBTM_BLE_SCAN_COND_OP cfg_op, + tBTM_BLE_PF_AVBL_SPACE avbl_space, + tBTM_STATUS status, + tBTM_BLE_REF_VALUE ref_value) { + tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS : BTA_FAILURE; + + APPL_TRACE_DEBUG("bta_ble_scan_cfg_cmpl: %d, %d, %d, %d", action, cfg_op, + avbl_space, status); + + if (bta_dm_cb.p_scan_filt_cfg_cback) + bta_dm_cb.p_scan_filt_cfg_cback(action, cfg_op, avbl_space, st, ref_value); } /******************************************************************************* @@ -4979,34 +4724,33 @@ static void bta_ble_scan_cfg_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_SCAN_COND_ * Parameters: * ******************************************************************************/ -void bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS st = BTM_MODE_UNSUPPORTED; - tBTA_STATUS status = BTA_FAILURE; - - tBTM_BLE_VSC_CB cmn_vsc_cb; - - APPL_TRACE_DEBUG("bta_dm_cfg_filter_cond"); - BTM_BleGetVendorCapabilities(&cmn_vsc_cb); - if(0 != cmn_vsc_cb.filter_support) - { - if ((st = BTM_BleCfgFilterCondition(p_data->ble_cfg_filter_cond.action, - p_data->ble_cfg_filter_cond.cond_type, - (tBTM_BLE_PF_FILT_INDEX)p_data->ble_cfg_filter_cond.filt_index, - (tBTM_BLE_PF_COND_PARAM *)p_data->ble_cfg_filter_cond.p_cond_param, - bta_ble_scan_cfg_cmpl, p_data->ble_cfg_filter_cond.ref_value)) - == BTM_CMD_STARTED) - { - bta_dm_cb.p_scan_filt_cfg_cback = p_data->ble_cfg_filter_cond.p_filt_cfg_cback; - return; - } - } - - if (p_data->ble_cfg_filter_cond.p_filt_cfg_cback) - p_data->ble_cfg_filter_cond.p_filt_cfg_cback(BTA_DM_BLE_PF_CONFIG_EVT, - p_data->ble_cfg_filter_cond.cond_type, 0, status, - p_data->ble_cfg_filter_cond.ref_value); - return; +void bta_dm_cfg_filter_cond(tBTA_DM_MSG* p_data) { + tBTM_STATUS st = BTM_MODE_UNSUPPORTED; + tBTA_STATUS status = BTA_FAILURE; + + tBTM_BLE_VSC_CB cmn_vsc_cb; + + APPL_TRACE_DEBUG("bta_dm_cfg_filter_cond"); + BTM_BleGetVendorCapabilities(&cmn_vsc_cb); + if (0 != cmn_vsc_cb.filter_support) { + if ((st = BTM_BleCfgFilterCondition( + p_data->ble_cfg_filter_cond.action, + p_data->ble_cfg_filter_cond.cond_type, + (tBTM_BLE_PF_FILT_INDEX)p_data->ble_cfg_filter_cond.filt_index, + (tBTM_BLE_PF_COND_PARAM*)p_data->ble_cfg_filter_cond.p_cond_param, + bta_ble_scan_cfg_cmpl, p_data->ble_cfg_filter_cond.ref_value)) == + BTM_CMD_STARTED) { + bta_dm_cb.p_scan_filt_cfg_cback = + p_data->ble_cfg_filter_cond.p_filt_cfg_cback; + return; + } + } + + if (p_data->ble_cfg_filter_cond.p_filt_cfg_cback) + p_data->ble_cfg_filter_cond.p_filt_cfg_cback( + BTA_DM_BLE_PF_CONFIG_EVT, p_data->ble_cfg_filter_cond.cond_type, 0, + status, p_data->ble_cfg_filter_cond.ref_value); + return; } /******************************************************************************* @@ -5018,28 +4762,29 @@ void bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS st = BTM_MODE_UNSUPPORTED; - tBTA_STATUS status = BTA_FAILURE; - - tBTM_BLE_VSC_CB cmn_vsc_cb; - APPL_TRACE_DEBUG("bta_dm_enable_scan_filter"); - BTM_BleGetVendorCapabilities(&cmn_vsc_cb); - - if(0 != cmn_vsc_cb.filter_support) - { - if((st = BTM_BleEnableDisableFilterFeature(p_data->ble_enable_scan_filt.action, - p_data->ble_enable_scan_filt.p_filt_status_cback, - (tBTM_BLE_REF_VALUE)p_data->ble_enable_scan_filt.ref_value)) == BTM_CMD_STARTED) - bta_dm_cb.p_scan_filt_status_cback = p_data->ble_enable_scan_filt.p_filt_status_cback; - return; - } - - if (p_data->ble_enable_scan_filt.p_filt_status_cback) - p_data->ble_enable_scan_filt.p_filt_status_cback (BTA_DM_BLE_PF_ENABLE_EVT, - p_data->ble_enable_scan_filt.ref_value, status); +void bta_dm_enable_scan_filter(tBTA_DM_MSG* p_data) { + tBTM_STATUS st = BTM_MODE_UNSUPPORTED; + tBTA_STATUS status = BTA_FAILURE; + + tBTM_BLE_VSC_CB cmn_vsc_cb; + APPL_TRACE_DEBUG("bta_dm_enable_scan_filter"); + BTM_BleGetVendorCapabilities(&cmn_vsc_cb); + + if (0 != cmn_vsc_cb.filter_support) { + if ((st = BTM_BleEnableDisableFilterFeature( + p_data->ble_enable_scan_filt.action, + p_data->ble_enable_scan_filt.p_filt_status_cback, + (tBTM_BLE_REF_VALUE)p_data->ble_enable_scan_filt.ref_value)) == + BTM_CMD_STARTED) + bta_dm_cb.p_scan_filt_status_cback = + p_data->ble_enable_scan_filt.p_filt_status_cback; + return; + } + if (p_data->ble_enable_scan_filt.p_filt_status_cback) + p_data->ble_enable_scan_filt.p_filt_status_cback( + BTA_DM_BLE_PF_ENABLE_EVT, p_data->ble_enable_scan_filt.ref_value, + status); } /******************************************************************************* @@ -5051,34 +4796,35 @@ void bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data) * Parameters: * ******************************************************************************/ -void bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS st = BTM_MODE_UNSUPPORTED; - tBTA_STATUS status = BTA_FAILURE; - - tBTM_BLE_VSC_CB cmn_vsc_cb; - - APPL_TRACE_DEBUG("bta_dm_scan_filter_param_setup"); - BTM_BleGetVendorCapabilities(&cmn_vsc_cb); - if(0 != cmn_vsc_cb.filter_support) - { - if ((st = BTM_BleAdvFilterParamSetup(p_data->ble_scan_filt_param_setup.action, - p_data->ble_scan_filt_param_setup.filt_index, - (tBTM_BLE_PF_FILT_PARAMS *)&p_data->ble_scan_filt_param_setup.filt_params, - p_data->ble_scan_filt_param_setup.p_target, - p_data->ble_scan_filt_param_setup.p_filt_param_cback, - p_data->ble_scan_filt_param_setup.ref_value)) == BTM_CMD_STARTED) - { - bta_dm_cb.p_scan_filt_param_cback = p_data->ble_scan_filt_param_setup.p_filt_param_cback; - return; - } - } - - if (p_data->ble_scan_filt_param_setup.p_filt_param_cback) - p_data->ble_scan_filt_param_setup.p_filt_param_cback (BTA_DM_BLE_PF_ENABLE_EVT, 0, - p_data->ble_scan_filt_param_setup.ref_value, status); - - return; +void bta_dm_scan_filter_param_setup(tBTA_DM_MSG* p_data) { + tBTM_STATUS st = BTM_MODE_UNSUPPORTED; + tBTA_STATUS status = BTA_FAILURE; + + tBTM_BLE_VSC_CB cmn_vsc_cb; + + APPL_TRACE_DEBUG("bta_dm_scan_filter_param_setup"); + BTM_BleGetVendorCapabilities(&cmn_vsc_cb); + if (0 != cmn_vsc_cb.filter_support) { + if ((st = BTM_BleAdvFilterParamSetup( + p_data->ble_scan_filt_param_setup.action, + p_data->ble_scan_filt_param_setup.filt_index, + (tBTM_BLE_PF_FILT_PARAMS*)&p_data->ble_scan_filt_param_setup + .filt_params, + p_data->ble_scan_filt_param_setup.p_target, + p_data->ble_scan_filt_param_setup.p_filt_param_cback, + p_data->ble_scan_filt_param_setup.ref_value)) == BTM_CMD_STARTED) { + bta_dm_cb.p_scan_filt_param_cback = + p_data->ble_scan_filt_param_setup.p_filt_param_cback; + return; + } + } + + if (p_data->ble_scan_filt_param_setup.p_filt_param_cback) + p_data->ble_scan_filt_param_setup.p_filt_param_cback( + BTA_DM_BLE_PF_ENABLE_EVT, 0, + p_data->ble_scan_filt_param_setup.ref_value, status); + + return; } #endif @@ -5093,19 +4839,18 @@ void bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data) * ******************************************************************************/ static void bta_ble_energy_info_cmpl(tBTM_BLE_TX_TIME_MS tx_time, - tBTM_BLE_RX_TIME_MS rx_time, - tBTM_BLE_IDLE_TIME_MS idle_time, - tBTM_BLE_ENERGY_USED energy_used, - tBTM_STATUS status) -{ - tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE; - tBTA_DM_CONTRL_STATE ctrl_state = 0; - - if (BTA_SUCCESS == st) - ctrl_state = bta_dm_pm_obtain_controller_state(); - - if (bta_dm_cb.p_energy_info_cback) - bta_dm_cb.p_energy_info_cback(tx_time, rx_time, idle_time, energy_used, ctrl_state, st); + tBTM_BLE_RX_TIME_MS rx_time, + tBTM_BLE_IDLE_TIME_MS idle_time, + tBTM_BLE_ENERGY_USED energy_used, + tBTM_STATUS status) { + tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS : BTA_FAILURE; + tBTA_DM_CONTRL_STATE ctrl_state = 0; + + if (BTA_SUCCESS == st) ctrl_state = bta_dm_pm_obtain_controller_state(); + + if (bta_dm_cb.p_energy_info_cback) + bta_dm_cb.p_energy_info_cback(tx_time, rx_time, idle_time, energy_used, + ctrl_state, st); } /******************************************************************************* @@ -5117,19 +4862,18 @@ static void bta_ble_energy_info_cmpl(tBTM_BLE_TX_TIME_MS tx_time, * Parameters: * ******************************************************************************/ -void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - - bta_dm_cb.p_energy_info_cback = p_data->ble_energy_info.p_energy_info_cback; - btm_status = BTM_BleGetEnergyInfo(bta_ble_energy_info_cmpl); - if (BTM_CMD_STARTED != btm_status) - bta_ble_energy_info_cmpl(0, 0, 0, 0, btm_status); +void bta_dm_ble_get_energy_info(tBTA_DM_MSG* p_data) { + tBTM_STATUS btm_status = 0; + + bta_dm_cb.p_energy_info_cback = p_data->ble_energy_info.p_energy_info_cback; + btm_status = BTM_BleGetEnergyInfo(bta_ble_energy_info_cmpl); + if (BTM_CMD_STARTED != btm_status) + bta_ble_energy_info_cmpl(0, 0, 0, 0, btm_status); } #if (BTA_GATT_INCLUDED == TRUE) #ifndef BTA_DM_GATT_CLOSE_DELAY_TOUT -#define BTA_DM_GATT_CLOSE_DELAY_TOUT 1000 +#define BTA_DM_GATT_CLOSE_DELAY_TOUT 1000 #endif /******************************************************************************* @@ -5142,15 +4886,13 @@ void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_dm_gattc_register(void) -{ - tBT_UUID app_uuid = {LEN_UUID_128,{0}}; - - if (bta_dm_search_cb.client_if == BTA_GATTS_INVALID_IF) - { - memset (&app_uuid.uu.uuid128, 0x87, LEN_UUID_128); - BTA_GATTC_AppRegister(&app_uuid, bta_dm_gattc_callback); - } +static void bta_dm_gattc_register(void) { + tBT_UUID app_uuid = {LEN_UUID_128, {0}}; + + if (bta_dm_search_cb.client_if == BTA_GATTS_INVALID_IF) { + memset(&app_uuid.uu.uuid128, 0x87, LEN_UUID_128); + BTA_GATTC_AppRegister(&app_uuid, bta_dm_gattc_callback); + } } /******************************************************************************* @@ -5162,16 +4904,15 @@ static void bta_dm_gattc_register(void) * Parameters: * ******************************************************************************/ -static void btm_dm_start_disc_gatt_services (uint16_t conn_id) -{ - tBT_UUID *p_uuid = bta_dm_search_cb.p_srvc_uuid + - bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search; +static void btm_dm_start_disc_gatt_services(uint16_t conn_id) { + tBT_UUID* p_uuid = bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - + bta_dm_search_cb.uuid_to_search; - p_uuid = bta_dm_search_cb.p_srvc_uuid + - bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search; + p_uuid = bta_dm_search_cb.p_srvc_uuid + bta_dm_search_cb.num_uuid - + bta_dm_search_cb.uuid_to_search; - /* always search for all services */ - BTA_GATTC_ServiceSearchRequest(conn_id, p_uuid); + /* always search for all services */ + BTA_GATTC_ServiceSearchRequest(conn_id, p_uuid); } /******************************************************************************* @@ -5183,50 +4924,49 @@ static void btm_dm_start_disc_gatt_services (uint16_t conn_id) * Parameters: * ******************************************************************************/ -static void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id) -{ - tBTA_DM_SEARCH result; - - /* - * This logic will not work for gatt case. We are checking against the bluetooth profiles here - * just copy the GATTID in raw data field and send it across. - */ - - - if ( bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < bta_dm_search_cb.ble_raw_size ) - { - APPL_TRACE_DEBUG("ADDING BLE SERVICE uuid=0x%x, ble_ptr = 0x%x, ble_raw_used = 0x%x", - service_id.uuid.uu.uuid16,bta_dm_search_cb.p_ble_rawdata,bta_dm_search_cb.ble_raw_used); - - if(bta_dm_search_cb.p_ble_rawdata) - { - memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), &service_id, - sizeof(service_id) ); - - bta_dm_search_cb.ble_raw_used += sizeof(service_id); - } - else - { - APPL_TRACE_ERROR("p_ble_rawdata is NULL"); - } - - } - else - { - APPL_TRACE_ERROR("%s out of room to accomodate more service ids ble_raw_size = %d ble_raw_used = %d", __func__,bta_dm_search_cb.ble_raw_size, bta_dm_search_cb.ble_raw_used ); - } - - LOG_INFO(LOG_TAG, "%s service_id_uuid_len=%d ", __func__, service_id.uuid.len); - if ( bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) - { - - /* send result back to app now, one by one */ - bdcpy (result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr); - strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), BD_NAME_LEN); - memcpy(&result.disc_ble_res.service, &service_id.uuid, sizeof(tBT_UUID)); - - bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); - } +static void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id) { + tBTA_DM_SEARCH result; + + /* + * This logic will not work for gatt case. We are checking against the + * bluetooth profiles here + * just copy the GATTID in raw data field and send it across. + */ + + if (bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < + bta_dm_search_cb.ble_raw_size) { + APPL_TRACE_DEBUG( + "ADDING BLE SERVICE uuid=0x%x, ble_ptr = 0x%x, ble_raw_used = 0x%x", + service_id.uuid.uu.uuid16, bta_dm_search_cb.p_ble_rawdata, + bta_dm_search_cb.ble_raw_used); + + if (bta_dm_search_cb.p_ble_rawdata) { + memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), + &service_id, sizeof(service_id)); + + bta_dm_search_cb.ble_raw_used += sizeof(service_id); + } else { + APPL_TRACE_ERROR("p_ble_rawdata is NULL"); + } + + } else { + APPL_TRACE_ERROR( + "%s out of room to accomodate more service ids ble_raw_size = %d " + "ble_raw_used = %d", + __func__, bta_dm_search_cb.ble_raw_size, bta_dm_search_cb.ble_raw_used); + } + + LOG_INFO(LOG_TAG, "%s service_id_uuid_len=%d ", __func__, + service_id.uuid.len); + if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) { + /* send result back to app now, one by one */ + bdcpy(result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr); + strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), + BD_NAME_LEN); + memcpy(&result.disc_ble_res.service, &service_id.uuid, sizeof(tBT_UUID)); + + bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); + } } /******************************************************************************* @@ -5238,62 +4978,60 @@ static void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id) * Parameters: * ******************************************************************************/ -static void bta_dm_gatt_disc_complete(uint16_t conn_id, tBTA_GATT_STATUS status) -{ - APPL_TRACE_DEBUG("%s conn_id = %d", __func__, conn_id); +static void bta_dm_gatt_disc_complete(uint16_t conn_id, + tBTA_GATT_STATUS status) { + APPL_TRACE_DEBUG("%s conn_id = %d", __func__, conn_id); + + if (bta_dm_search_cb.uuid_to_search > 0) bta_dm_search_cb.uuid_to_search--; + + if (status == BTA_GATT_OK && bta_dm_search_cb.uuid_to_search > 0) { + btm_dm_start_disc_gatt_services(conn_id); + } else { + tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG)); - if (bta_dm_search_cb.uuid_to_search > 0) - bta_dm_search_cb.uuid_to_search --; + bta_dm_search_cb.uuid_to_search = 0; - if (status == BTA_GATT_OK && bta_dm_search_cb.uuid_to_search > 0) { - btm_dm_start_disc_gatt_services(conn_id); + /* no more services to be discovered */ + p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; + p_msg->disc_result.result.disc_res.result = + (status == BTA_GATT_OK) ? BTA_SUCCESS : BTA_FAILURE; + APPL_TRACE_DEBUG("%s service found: 0x%08x", __func__, + bta_dm_search_cb.services_found); + p_msg->disc_result.result.disc_res.services = + bta_dm_search_cb.services_found; + p_msg->disc_result.result.disc_res.num_uuids = 0; + p_msg->disc_result.result.disc_res.p_uuid_list = NULL; + bdcpy(p_msg->disc_result.result.disc_res.bd_addr, + bta_dm_search_cb.peer_bdaddr); + strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, + bta_dm_get_remname(), BD_NAME_LEN); + + p_msg->disc_result.result.disc_res.device_type |= BT_DEVICE_TYPE_BLE; + if (bta_dm_search_cb.ble_raw_used > 0) { + p_msg->disc_result.result.disc_res.p_raw_data = + (uint8_t*)osi_malloc(bta_dm_search_cb.ble_raw_used); + + memcpy(p_msg->disc_result.result.disc_res.p_raw_data, + bta_dm_search_cb.p_ble_rawdata, bta_dm_search_cb.ble_raw_used); + + p_msg->disc_result.result.disc_res.raw_data_size = + bta_dm_search_cb.ble_raw_used; } else { - tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG)); - - bta_dm_search_cb.uuid_to_search = 0; - - /* no more services to be discovered */ - p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; - p_msg->disc_result.result.disc_res.result = (status == BTA_GATT_OK) ? BTA_SUCCESS :BTA_FAILURE; - APPL_TRACE_DEBUG("%s service found: 0x%08x", __func__, - bta_dm_search_cb.services_found); - p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; - p_msg->disc_result.result.disc_res.num_uuids = 0; - p_msg->disc_result.result.disc_res.p_uuid_list = NULL; - bdcpy(p_msg->disc_result.result.disc_res.bd_addr, - bta_dm_search_cb.peer_bdaddr); - strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name, - bta_dm_get_remname(), BD_NAME_LEN); - - p_msg->disc_result.result.disc_res.device_type |= BT_DEVICE_TYPE_BLE; - if (bta_dm_search_cb.ble_raw_used > 0) { - p_msg->disc_result.result.disc_res.p_raw_data = - (uint8_t*) osi_malloc(bta_dm_search_cb.ble_raw_used); - - memcpy(p_msg->disc_result.result.disc_res.p_raw_data, - bta_dm_search_cb.p_ble_rawdata, - bta_dm_search_cb.ble_raw_used); - - p_msg->disc_result.result.disc_res.raw_data_size = - bta_dm_search_cb.ble_raw_used; - } else { - p_msg->disc_result.result.disc_res.p_raw_data = NULL; - bta_dm_search_cb.p_ble_rawdata = 0; - } + p_msg->disc_result.result.disc_res.p_raw_data = NULL; + bta_dm_search_cb.p_ble_rawdata = 0; + } - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - if (conn_id != BTA_GATT_INVALID_CONN_ID) - { - /* start a GATT channel close delay timer */ - bta_sys_start_timer(bta_dm_search_cb.gatt_close_timer, - BTA_DM_GATT_CLOSE_DELAY_TOUT, - BTA_DM_DISC_CLOSE_TOUT_EVT, 0); - bdcpy(bta_dm_search_cb.pending_close_bda, - bta_dm_search_cb.peer_bdaddr); - } - bta_dm_search_cb.gatt_disc_active = false; + if (conn_id != BTA_GATT_INVALID_CONN_ID) { + /* start a GATT channel close delay timer */ + bta_sys_start_timer(bta_dm_search_cb.gatt_close_timer, + BTA_DM_GATT_CLOSE_DELAY_TOUT, + BTA_DM_DISC_CLOSE_TOUT_EVT, 0); + bdcpy(bta_dm_search_cb.pending_close_bda, bta_dm_search_cb.peer_bdaddr); } + bta_dm_search_cb.gatt_disc_active = false; + } } /******************************************************************************* @@ -5305,38 +5043,36 @@ static void bta_dm_gatt_disc_complete(uint16_t conn_id, tBTA_GATT_STATUS status) * Parameters: * ******************************************************************************/ -void bta_dm_close_gatt_conn(UNUSED_ATTR tBTA_DM_MSG *p_data) -{ - if (bta_dm_search_cb.conn_id != BTA_GATT_INVALID_CONN_ID) - BTA_GATTC_Close(bta_dm_search_cb.conn_id); +void bta_dm_close_gatt_conn(UNUSED_ATTR tBTA_DM_MSG* p_data) { + if (bta_dm_search_cb.conn_id != BTA_GATT_INVALID_CONN_ID) + BTA_GATTC_Close(bta_dm_search_cb.conn_id); - memset(bta_dm_search_cb.pending_close_bda, 0, BD_ADDR_LEN); - bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID; + memset(bta_dm_search_cb.pending_close_bda, 0, BD_ADDR_LEN); + bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID; } /******************************************************************************* * * Function btm_dm_start_gatt_discovery * - * Description This is GATT initiate the service search by open a GATT connection + * Description This is GATT initiate the service search by open a GATT + *connection * first. * * Parameters: * ******************************************************************************/ -void btm_dm_start_gatt_discovery (BD_ADDR bd_addr) -{ - bta_dm_search_cb.gatt_disc_active = true; - - /* connection is already open */ - if (bdcmp(bta_dm_search_cb.pending_close_bda, bd_addr) == 0 && - bta_dm_search_cb.conn_id != BTA_GATT_INVALID_CONN_ID) - { - memset(bta_dm_search_cb.pending_close_bda, 0, BD_ADDR_LEN); - alarm_cancel(bta_dm_search_cb.gatt_close_timer); - btm_dm_start_disc_gatt_services(bta_dm_search_cb.conn_id); - } - else - BTA_GATTC_Open(bta_dm_search_cb.client_if, bd_addr, true, BTA_GATT_TRANSPORT_LE); +void btm_dm_start_gatt_discovery(BD_ADDR bd_addr) { + bta_dm_search_cb.gatt_disc_active = true; + + /* connection is already open */ + if (bdcmp(bta_dm_search_cb.pending_close_bda, bd_addr) == 0 && + bta_dm_search_cb.conn_id != BTA_GATT_INVALID_CONN_ID) { + memset(bta_dm_search_cb.pending_close_bda, 0, BD_ADDR_LEN); + alarm_cancel(bta_dm_search_cb.gatt_close_timer); + btm_dm_start_disc_gatt_services(bta_dm_search_cb.conn_id); + } else + BTA_GATTC_Open(bta_dm_search_cb.client_if, bd_addr, true, + BTA_GATT_TRANSPORT_LE); } /******************************************************************************* @@ -5348,14 +5084,13 @@ void btm_dm_start_gatt_discovery (BD_ADDR bd_addr) * Parameters: * ******************************************************************************/ -static void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr) -{ - if (bta_dm_search_cb.conn_id == BTA_GATT_INVALID_CONN_ID) - { - BTA_GATTC_CancelOpen(bta_dm_search_cb.client_if, bd_addr, true); - } +static void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr) { + if (bta_dm_search_cb.conn_id == BTA_GATT_INVALID_CONN_ID) { + BTA_GATTC_CancelOpen(bta_dm_search_cb.client_if, bd_addr, true); + } - bta_dm_gatt_disc_complete(bta_dm_search_cb.conn_id, (tBTA_GATT_STATUS) BTA_GATT_ERROR); + bta_dm_gatt_disc_complete(bta_dm_search_cb.conn_id, + (tBTA_GATT_STATUS)BTA_GATT_ERROR); } /******************************************************************************* @@ -5367,36 +5102,32 @@ static void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr) * Parameters: * ******************************************************************************/ -void bta_dm_proc_open_evt(tBTA_GATTC_OPEN *p_data) -{ - uint8_t *p1; - uint8_t *p2; - - p1 = bta_dm_search_cb.peer_bdaddr; - p2 = p_data->remote_bda; - - APPL_TRACE_DEBUG("DM Search state= %d search_cb.peer_dbaddr: [%08x%04x] connected_bda= [%08x%04x] ", - bta_dm_search_cb.state, - ((p1[0])<<24)+((p1[1])<<16)+((p1[2])<<8)+(p1[3]), - ((p1[4])<<8)+ p1[5], - ((p2[0])<<24)+((p2[1])<<16)+((p2[2])<<8)+(p2[3]), - ((p2[4])<<8)+ p2[5]); - - APPL_TRACE_DEBUG("BTA_GATTC_OPEN_EVT conn_id = %d client_if=%d status = %d" , - p_data->conn_id, - p_data->client_if, - p_data->status); - - bta_dm_search_cb.conn_id = p_data->conn_id; - - if (p_data->status == BTA_GATT_OK) - { - btm_dm_start_disc_gatt_services(p_data->conn_id); - } - else - { - bta_dm_gatt_disc_complete(BTA_GATT_INVALID_CONN_ID, p_data->status); - } +void bta_dm_proc_open_evt(tBTA_GATTC_OPEN* p_data) { + uint8_t* p1; + uint8_t* p2; + + p1 = bta_dm_search_cb.peer_bdaddr; + p2 = p_data->remote_bda; + + APPL_TRACE_DEBUG( + "DM Search state= %d search_cb.peer_dbaddr: [%08x%04x] connected_bda= " + "[%08x%04x] ", + bta_dm_search_cb.state, + ((p1[0]) << 24) + ((p1[1]) << 16) + ((p1[2]) << 8) + (p1[3]), + ((p1[4]) << 8) + p1[5], + ((p2[0]) << 24) + ((p2[1]) << 16) + ((p2[2]) << 8) + (p2[3]), + ((p2[4]) << 8) + p2[5]); + + APPL_TRACE_DEBUG("BTA_GATTC_OPEN_EVT conn_id = %d client_if=%d status = %d", + p_data->conn_id, p_data->client_if, p_data->status); + + bta_dm_search_cb.conn_id = p_data->conn_id; + + if (p_data->status == BTA_GATT_OK) { + btm_dm_start_disc_gatt_services(p_data->conn_id); + } else { + bta_dm_gatt_disc_complete(BTA_GATT_INVALID_CONN_ID, p_data->status); + } } /******************************************************************************* @@ -5408,47 +5139,48 @@ void bta_dm_proc_open_evt(tBTA_GATTC_OPEN *p_data) * Parameters: * ******************************************************************************/ -static void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data) -{ - APPL_TRACE_DEBUG("bta_dm_gattc_callback event = %d", event); - - switch (event) - { - case BTA_GATTC_REG_EVT: - APPL_TRACE_DEBUG("BTA_GATTC_REG_EVT client_if = %d", p_data->reg_oper.client_if); - if (p_data->reg_oper.status == BTA_GATT_OK) - bta_dm_search_cb.client_if = p_data->reg_oper.client_if; - else - bta_dm_search_cb.client_if = BTA_GATTS_INVALID_IF; - break; - - case BTA_GATTC_OPEN_EVT: - bta_dm_proc_open_evt(&p_data->open); - break; - - case BTA_GATTC_SEARCH_RES_EVT: - bta_dm_gatt_disc_result(p_data->srvc_res.service_uuid); - break; - - case BTA_GATTC_SEARCH_CMPL_EVT: - if ( bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) - bta_dm_gatt_disc_complete(p_data->search_cmpl.conn_id, p_data->search_cmpl.status); - break; - - case BTA_GATTC_CLOSE_EVT: - APPL_TRACE_DEBUG("BTA_GATTC_CLOSE_EVT reason = %d", p_data->close.reason); - /* in case of disconnect before search is completed */ - if ( (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) && - (bta_dm_search_cb.state != BTA_DM_SEARCH_ACTIVE) && - !memcmp(p_data->close.remote_bda, bta_dm_search_cb.peer_bdaddr, BD_ADDR_LEN)) - { - bta_dm_gatt_disc_complete((uint16_t)BTA_GATT_INVALID_CONN_ID, (tBTA_GATT_STATUS) BTA_GATT_ERROR); - } - break; +static void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC* p_data) { + APPL_TRACE_DEBUG("bta_dm_gattc_callback event = %d", event); + + switch (event) { + case BTA_GATTC_REG_EVT: + APPL_TRACE_DEBUG("BTA_GATTC_REG_EVT client_if = %d", + p_data->reg_oper.client_if); + if (p_data->reg_oper.status == BTA_GATT_OK) + bta_dm_search_cb.client_if = p_data->reg_oper.client_if; + else + bta_dm_search_cb.client_if = BTA_GATTS_INVALID_IF; + break; + + case BTA_GATTC_OPEN_EVT: + bta_dm_proc_open_evt(&p_data->open); + break; + + case BTA_GATTC_SEARCH_RES_EVT: + bta_dm_gatt_disc_result(p_data->srvc_res.service_uuid); + break; + + case BTA_GATTC_SEARCH_CMPL_EVT: + if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) + bta_dm_gatt_disc_complete(p_data->search_cmpl.conn_id, + p_data->search_cmpl.status); + break; + + case BTA_GATTC_CLOSE_EVT: + APPL_TRACE_DEBUG("BTA_GATTC_CLOSE_EVT reason = %d", p_data->close.reason); + /* in case of disconnect before search is completed */ + if ((bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) && + (bta_dm_search_cb.state != BTA_DM_SEARCH_ACTIVE) && + !memcmp(p_data->close.remote_bda, bta_dm_search_cb.peer_bdaddr, + BD_ADDR_LEN)) { + bta_dm_gatt_disc_complete((uint16_t)BTA_GATT_INVALID_CONN_ID, + (tBTA_GATT_STATUS)BTA_GATT_ERROR); + } + break; - default: - break; - } + default: + break; + } } #endif /* BTA_GATT_INCLUDED */ @@ -5463,20 +5195,16 @@ static void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data) * Parameters: * ******************************************************************************/ -static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result) -{ - APPL_TRACE_DEBUG("%s status = %d ", __func__, result); - if (result == BTM_SUCCESS) - { - if(bta_dm_cb.p_sec_cback) - bta_dm_cb.p_sec_cback(BTA_DM_LE_FEATURES_READ, NULL); - } - else - { - APPL_TRACE_ERROR("%s Ctrl BLE feature read failed: status :%d",__func__, result); - } - +static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result) { + APPL_TRACE_DEBUG("%s status = %d ", __func__, result); + if (result == BTM_SUCCESS) { + if (bta_dm_cb.p_sec_cback) + bta_dm_cb.p_sec_cback(BTA_DM_LE_FEATURES_READ, NULL); + } else { + APPL_TRACE_ERROR("%s Ctrl BLE feature read failed: status :%d", __func__, + result); + } } #endif /* BLE_VND_INCLUDED */ -#endif /* BLE_INCLUDED */ +#endif /* BLE_INCLUDED */ diff --git a/system/bta/dm/bta_dm_api.cc b/system/bta/dm/bta_dm_api.cc index efbfe81b5f3..c21647a3a30 100644 --- a/system/bta/dm/bta_dm_api.cc +++ b/system/bta/dm/bta_dm_api.cc @@ -24,10 +24,10 @@ #include #include "bt_common.h" -#include "bta_sys.h" #include "bta_api.h" #include "bta_closure_api.h" #include "bta_dm_int.h" +#include "bta_sys.h" #include "bta_sys_int.h" #include "btm_api.h" #include "btm_int.h" @@ -38,17 +38,10 @@ * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_dm_reg = -{ - bta_dm_sm_execute, - bta_dm_sm_disable -}; +static const tBTA_SYS_REG bta_dm_reg = {bta_dm_sm_execute, bta_dm_sm_disable}; -static const tBTA_SYS_REG bta_dm_search_reg = -{ - bta_dm_search_sm_execute, - bta_dm_search_sm_disable -}; +static const tBTA_SYS_REG bta_dm_search_reg = {bta_dm_search_sm_execute, + bta_dm_search_sm_disable}; /******************************************************************************* * @@ -61,26 +54,24 @@ static const tBTA_SYS_REG bta_dm_search_reg = * Returns tBTA_STATUS * ******************************************************************************/ -tBTA_STATUS BTA_EnableBluetooth(tBTA_DM_SEC_CBACK *p_cback) -{ - /* Bluetooth disabling is in progress */ - if (bta_dm_cb.disabling) - return BTA_FAILURE; +tBTA_STATUS BTA_EnableBluetooth(tBTA_DM_SEC_CBACK* p_cback) { + /* Bluetooth disabling is in progress */ + if (bta_dm_cb.disabling) return BTA_FAILURE; - bta_sys_register(BTA_ID_DM, &bta_dm_reg ); - bta_sys_register(BTA_ID_DM_SEARCH, &bta_dm_search_reg ); + bta_sys_register(BTA_ID_DM, &bta_dm_reg); + bta_sys_register(BTA_ID_DM_SEARCH, &bta_dm_search_reg); - /* if UUID list is not provided as static data */ - bta_sys_eir_register(bta_dm_eir_update_uuid); + /* if UUID list is not provided as static data */ + bta_sys_eir_register(bta_dm_eir_update_uuid); - tBTA_DM_API_ENABLE *p_msg = - (tBTA_DM_API_ENABLE *)osi_malloc(sizeof(tBTA_DM_API_ENABLE)); - p_msg->hdr.event = BTA_DM_API_ENABLE_EVT; - p_msg->p_sec_cback = p_cback; + tBTA_DM_API_ENABLE* p_msg = + (tBTA_DM_API_ENABLE*)osi_malloc(sizeof(tBTA_DM_API_ENABLE)); + p_msg->hdr.event = BTA_DM_API_ENABLE_EVT; + p_msg->p_sec_cback = p_cback; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_SUCCESS; + return BTA_SUCCESS; } /******************************************************************************* @@ -93,15 +84,14 @@ tBTA_STATUS BTA_EnableBluetooth(tBTA_DM_SEC_CBACK *p_cback) * Returns void * ******************************************************************************/ -tBTA_STATUS BTA_DisableBluetooth(void) -{ - BT_HDR *p_msg = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +tBTA_STATUS BTA_DisableBluetooth(void) { + BT_HDR* p_msg = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_msg->event = BTA_DM_API_DISABLE_EVT; + p_msg->event = BTA_DM_API_DISABLE_EVT; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_SUCCESS; + return BTA_SUCCESS; } /******************************************************************************* @@ -114,16 +104,15 @@ tBTA_STATUS BTA_DisableBluetooth(void) * Returns tBTA_STATUS * ******************************************************************************/ -tBTA_STATUS BTA_EnableTestMode(void) -{ - BT_HDR *p_msg = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +tBTA_STATUS BTA_EnableTestMode(void) { + BT_HDR* p_msg = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->event = BTA_DM_API_ENABLE_TEST_MODE_EVT; - bta_sys_sendmsg(p_msg); + p_msg->event = BTA_DM_API_ENABLE_TEST_MODE_EVT; + bta_sys_sendmsg(p_msg); - return BTA_SUCCESS; + return BTA_SUCCESS; } /******************************************************************************* @@ -136,14 +125,13 @@ tBTA_STATUS BTA_EnableTestMode(void) * Returns None * ******************************************************************************/ -void BTA_DisableTestMode(void) -{ - BT_HDR *p_msg = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_DisableTestMode(void) { + BT_HDR* p_msg = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->event = BTA_DM_API_DISABLE_TEST_MODE_EVT; - bta_sys_sendmsg(p_msg); + p_msg->event = BTA_DM_API_DISABLE_TEST_MODE_EVT; + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -156,15 +144,14 @@ void BTA_DisableTestMode(void) * Returns void * ******************************************************************************/ -void BTA_DmSetDeviceName(char *p_name) -{ - tBTA_DM_API_SET_NAME *p_msg = - (tBTA_DM_API_SET_NAME *)osi_malloc(sizeof(tBTA_DM_API_SET_NAME)); +void BTA_DmSetDeviceName(char* p_name) { + tBTA_DM_API_SET_NAME* p_msg = + (tBTA_DM_API_SET_NAME*)osi_malloc(sizeof(tBTA_DM_API_SET_NAME)); - p_msg->hdr.event = BTA_DM_API_SET_NAME_EVT; - strlcpy((char*)p_msg->name, p_name, BD_NAME_LEN); + p_msg->hdr.event = BTA_DM_API_SET_NAME_EVT; + strlcpy((char*)p_msg->name, p_name, BD_NAME_LEN); - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -172,31 +159,33 @@ void BTA_DmSetDeviceName(char *p_name) * Function BTA_DmSetVisibility * * Description This function sets the Bluetooth connectable, - * discoverable, pairable and conn paired only modes of local device + * discoverable, pairable and conn paired only modes of local + *device * * * Returns void * ******************************************************************************/ -void BTA_DmSetVisibility(tBTA_DM_DISC disc_mode, tBTA_DM_CONN conn_mode, uint8_t pairable_mode, uint8_t conn_filter ) -{ - tBTA_DM_API_SET_VISIBILITY *p_msg = - (tBTA_DM_API_SET_VISIBILITY *)osi_malloc(sizeof(tBTA_DM_MSG)); - - p_msg->hdr.event = BTA_DM_API_SET_VISIBILITY_EVT; - p_msg->disc_mode = disc_mode; - p_msg->conn_mode = conn_mode; - p_msg->pair_mode = pairable_mode; - p_msg->conn_paired_only = conn_filter; - - bta_sys_sendmsg(p_msg); +void BTA_DmSetVisibility(tBTA_DM_DISC disc_mode, tBTA_DM_CONN conn_mode, + uint8_t pairable_mode, uint8_t conn_filter) { + tBTA_DM_API_SET_VISIBILITY* p_msg = + (tBTA_DM_API_SET_VISIBILITY*)osi_malloc(sizeof(tBTA_DM_MSG)); + + p_msg->hdr.event = BTA_DM_API_SET_VISIBILITY_EVT; + p_msg->disc_mode = disc_mode; + p_msg->conn_mode = conn_mode; + p_msg->pair_mode = pairable_mode; + p_msg->conn_paired_only = conn_filter; + + bta_sys_sendmsg(p_msg); } /******************************************************************************* * * Function BTA_DmSearch * - * Description This function searches for peer Bluetooth devices. It performs + * Description This function searches for peer Bluetooth devices. It + *performs * an inquiry and gets the remote name for devices. Service * discovery is done if services is non zero * @@ -204,18 +193,18 @@ void BTA_DmSetVisibility(tBTA_DM_DISC disc_mode, tBTA_DM_CONN conn_mode, uint8_t * Returns void * ******************************************************************************/ -void BTA_DmSearch(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK services, tBTA_DM_SEARCH_CBACK *p_cback) -{ - tBTA_DM_API_SEARCH *p_msg = - (tBTA_DM_API_SEARCH *)osi_calloc(sizeof(tBTA_DM_API_SEARCH)); - - p_msg->hdr.event = BTA_DM_API_SEARCH_EVT; - memcpy(&p_msg->inq_params, p_dm_inq, sizeof(tBTA_DM_INQ)); - p_msg->services = services; - p_msg->p_cback = p_cback; - p_msg->rs_res = BTA_DM_RS_NONE; - - bta_sys_sendmsg(p_msg); +void BTA_DmSearch(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK services, + tBTA_DM_SEARCH_CBACK* p_cback) { + tBTA_DM_API_SEARCH* p_msg = + (tBTA_DM_API_SEARCH*)osi_calloc(sizeof(tBTA_DM_API_SEARCH)); + + p_msg->hdr.event = BTA_DM_API_SEARCH_EVT; + memcpy(&p_msg->inq_params, p_dm_inq, sizeof(tBTA_DM_INQ)); + p_msg->services = services; + p_msg->p_cback = p_cback; + p_msg->rs_res = BTA_DM_RS_NONE; + + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -228,12 +217,11 @@ void BTA_DmSearch(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK services, tBTA_DM_SEA * Returns void * ******************************************************************************/ -void BTA_DmSearchCancel(void) -{ - BT_HDR *p_msg = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_DmSearchCancel(void) { + BT_HDR* p_msg = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_msg->event = BTA_DM_API_SEARCH_CANCEL_EVT; - bta_sys_sendmsg(p_msg); + p_msg->event = BTA_DM_API_SEARCH_CANCEL_EVT; + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -248,18 +236,17 @@ void BTA_DmSearchCancel(void) * ******************************************************************************/ void BTA_DmDiscover(BD_ADDR bd_addr, tBTA_SERVICE_MASK services, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search) -{ - tBTA_DM_API_DISCOVER *p_msg = - (tBTA_DM_API_DISCOVER *)osi_calloc(sizeof(tBTA_DM_API_DISCOVER)); + tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search) { + tBTA_DM_API_DISCOVER* p_msg = + (tBTA_DM_API_DISCOVER*)osi_calloc(sizeof(tBTA_DM_API_DISCOVER)); - p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->services = services; - p_msg->p_cback = p_cback; - p_msg->sdp_search = sdp_search; + p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->services = services; + p_msg->p_cback = p_cback; + p_msg->sdp_search = sdp_search; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -273,25 +260,24 @@ void BTA_DmDiscover(BD_ADDR bd_addr, tBTA_SERVICE_MASK services, * Returns void * ******************************************************************************/ -void BTA_DmDiscoverUUID(BD_ADDR bd_addr, tSDP_UUID *uuid, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search) -{ - tBTA_DM_API_DISCOVER *p_msg = - (tBTA_DM_API_DISCOVER *)osi_malloc(sizeof(tBTA_DM_API_DISCOVER)); +void BTA_DmDiscoverUUID(BD_ADDR bd_addr, tSDP_UUID* uuid, + tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search) { + tBTA_DM_API_DISCOVER* p_msg = + (tBTA_DM_API_DISCOVER*)osi_malloc(sizeof(tBTA_DM_API_DISCOVER)); - p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->services = BTA_USER_SERVICE_MASK; //Not exposed at API level - p_msg->p_cback = p_cback; - p_msg->sdp_search = sdp_search; + p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->services = BTA_USER_SERVICE_MASK; // Not exposed at API level + p_msg->p_cback = p_cback; + p_msg->sdp_search = sdp_search; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - p_msg->num_uuid = 0; - p_msg->p_uuid = NULL; + p_msg->num_uuid = 0; + p_msg->p_uuid = NULL; #endif - memcpy(&p_msg->uuid, uuid, sizeof(tSDP_UUID) ); + memcpy(&p_msg->uuid, uuid, sizeof(tSDP_UUID)); - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -305,16 +291,15 @@ void BTA_DmDiscoverUUID(BD_ADDR bd_addr, tSDP_UUID *uuid, * Returns void * ******************************************************************************/ -void BTA_DmBond(BD_ADDR bd_addr) -{ - tBTA_DM_API_BOND *p_msg = - (tBTA_DM_API_BOND *)osi_malloc(sizeof(tBTA_DM_API_BOND)); +void BTA_DmBond(BD_ADDR bd_addr) { + tBTA_DM_API_BOND* p_msg = + (tBTA_DM_API_BOND*)osi_malloc(sizeof(tBTA_DM_API_BOND)); - p_msg->hdr.event = BTA_DM_API_BOND_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->transport = BTA_TRANSPORT_UNKNOWN; + p_msg->hdr.event = BTA_DM_API_BOND_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->transport = BTA_TRANSPORT_UNKNOWN; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -328,16 +313,15 @@ void BTA_DmBond(BD_ADDR bd_addr) * Returns void * ******************************************************************************/ -void BTA_DmBondByTransport(BD_ADDR bd_addr, tBTA_TRANSPORT transport) -{ - tBTA_DM_API_BOND *p_msg = - (tBTA_DM_API_BOND *)osi_malloc(sizeof(tBTA_DM_API_BOND)); +void BTA_DmBondByTransport(BD_ADDR bd_addr, tBTA_TRANSPORT transport) { + tBTA_DM_API_BOND* p_msg = + (tBTA_DM_API_BOND*)osi_malloc(sizeof(tBTA_DM_API_BOND)); - p_msg->hdr.event = BTA_DM_API_BOND_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->transport = transport; + p_msg->hdr.event = BTA_DM_API_BOND_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->transport = transport; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -351,15 +335,14 @@ void BTA_DmBondByTransport(BD_ADDR bd_addr, tBTA_TRANSPORT transport) * Returns void * ******************************************************************************/ -void BTA_DmBondCancel(BD_ADDR bd_addr) -{ - tBTA_DM_API_BOND_CANCEL *p_msg = - (tBTA_DM_API_BOND_CANCEL *)osi_malloc(sizeof(tBTA_DM_API_BOND_CANCEL)); +void BTA_DmBondCancel(BD_ADDR bd_addr) { + tBTA_DM_API_BOND_CANCEL* p_msg = + (tBTA_DM_API_BOND_CANCEL*)osi_malloc(sizeof(tBTA_DM_API_BOND_CANCEL)); - p_msg->hdr.event = BTA_DM_API_BOND_CANCEL_EVT; - bdcpy(p_msg->bd_addr, bd_addr); + p_msg->hdr.event = BTA_DM_API_BOND_CANCEL_EVT; + bdcpy(p_msg->bd_addr, bd_addr); - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -373,21 +356,22 @@ void BTA_DmBondCancel(BD_ADDR bd_addr) * Returns void * ******************************************************************************/ -void BTA_DmPinReply(BD_ADDR bd_addr, bool accept, uint8_t pin_len, uint8_t *p_pin) +void BTA_DmPinReply(BD_ADDR bd_addr, bool accept, uint8_t pin_len, + uint8_t* p_pin) { - tBTA_DM_API_PIN_REPLY *p_msg = - (tBTA_DM_API_PIN_REPLY *)osi_malloc(sizeof(tBTA_DM_API_PIN_REPLY)); - - p_msg->hdr.event = BTA_DM_API_PIN_REPLY_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->accept = accept; - if (accept) { - p_msg->pin_len = pin_len; - memcpy(p_msg->p_pin, p_pin, pin_len); - } - - bta_sys_sendmsg(p_msg); + tBTA_DM_API_PIN_REPLY* p_msg = + (tBTA_DM_API_PIN_REPLY*)osi_malloc(sizeof(tBTA_DM_API_PIN_REPLY)); + + p_msg->hdr.event = BTA_DM_API_PIN_REPLY_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->accept = accept; + if (accept) { + p_msg->pin_len = pin_len; + memcpy(p_msg->p_pin, p_pin, pin_len); + } + + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -403,13 +387,12 @@ void BTA_DmPinReply(BD_ADDR bd_addr, bool accept, uint8_t pin_len, uint8_t *p_pi * Returns void * ******************************************************************************/ -void BTA_DmLocalOob(void) -{ - tBTA_DM_API_LOC_OOB *p_msg = - (tBTA_DM_API_LOC_OOB *)osi_malloc(sizeof(tBTA_DM_API_LOC_OOB)); +void BTA_DmLocalOob(void) { + tBTA_DM_API_LOC_OOB* p_msg = + (tBTA_DM_API_LOC_OOB*)osi_malloc(sizeof(tBTA_DM_API_LOC_OOB)); - p_msg->hdr.event = BTA_DM_API_LOC_OOB_EVT; - bta_sys_sendmsg(p_msg); + p_msg->hdr.event = BTA_DM_API_LOC_OOB_EVT; + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -422,16 +405,15 @@ void BTA_DmLocalOob(void) * Returns void * ******************************************************************************/ -void BTA_DmConfirm(BD_ADDR bd_addr, bool accept) -{ - tBTA_DM_API_CONFIRM *p_msg = - (tBTA_DM_API_CONFIRM *)osi_malloc(sizeof(tBTA_DM_API_CONFIRM)); +void BTA_DmConfirm(BD_ADDR bd_addr, bool accept) { + tBTA_DM_API_CONFIRM* p_msg = + (tBTA_DM_API_CONFIRM*)osi_malloc(sizeof(tBTA_DM_API_CONFIRM)); - p_msg->hdr.event = BTA_DM_API_CONFIRM_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->accept = accept; + p_msg->hdr.event = BTA_DM_API_CONFIRM_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->accept = accept; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -447,58 +429,57 @@ void BTA_DmConfirm(BD_ADDR bd_addr, bool accept) ******************************************************************************/ void BTA_DmAddDevice(BD_ADDR bd_addr, DEV_CLASS dev_class, LINK_KEY link_key, tBTA_SERVICE_MASK trusted_mask, bool is_trusted, - uint8_t key_type, tBTA_IO_CAP io_cap, uint8_t pin_length) -{ - tBTA_DM_API_ADD_DEVICE *p_msg = - (tBTA_DM_API_ADD_DEVICE *)osi_calloc(sizeof(tBTA_DM_API_ADD_DEVICE)); - - p_msg->hdr.event = BTA_DM_API_ADD_DEVICE_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->tm = trusted_mask; - p_msg->is_trusted = is_trusted; - p_msg->io_cap = io_cap; - - if (link_key) { - p_msg->link_key_known = true; - p_msg->key_type = key_type; - memcpy(p_msg->link_key, link_key, LINK_KEY_LEN); - } + uint8_t key_type, tBTA_IO_CAP io_cap, uint8_t pin_length) { + tBTA_DM_API_ADD_DEVICE* p_msg = + (tBTA_DM_API_ADD_DEVICE*)osi_calloc(sizeof(tBTA_DM_API_ADD_DEVICE)); + + p_msg->hdr.event = BTA_DM_API_ADD_DEVICE_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->tm = trusted_mask; + p_msg->is_trusted = is_trusted; + p_msg->io_cap = io_cap; + + if (link_key) { + p_msg->link_key_known = true; + p_msg->key_type = key_type; + memcpy(p_msg->link_key, link_key, LINK_KEY_LEN); + } - /* Load device class if specified */ - if (dev_class) { - p_msg->dc_known = true; - memcpy(p_msg->dc, dev_class, DEV_CLASS_LEN); - } + /* Load device class if specified */ + if (dev_class) { + p_msg->dc_known = true; + memcpy(p_msg->dc, dev_class, DEV_CLASS_LEN); + } - memset(p_msg->bd_name, 0, BD_NAME_LEN + 1); - memset(p_msg->features, 0, sizeof (p_msg->features)); - p_msg->pin_length = pin_length; + memset(p_msg->bd_name, 0, BD_NAME_LEN + 1); + memset(p_msg->features, 0, sizeof(p_msg->features)); + p_msg->pin_length = pin_length; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* * * Function BTA_DmRemoveDevice * - * Description This function removes a device fromthe security database list of + * Description This function removes a device fromthe security database + *list of * peer device. It manages unpairing even while connected. * * * Returns void * ******************************************************************************/ -tBTA_STATUS BTA_DmRemoveDevice(BD_ADDR bd_addr) -{ - tBTA_DM_API_REMOVE_DEVICE *p_msg = - (tBTA_DM_API_REMOVE_DEVICE *)osi_calloc(sizeof(tBTA_DM_API_REMOVE_DEVICE)); +tBTA_STATUS BTA_DmRemoveDevice(BD_ADDR bd_addr) { + tBTA_DM_API_REMOVE_DEVICE* p_msg = + (tBTA_DM_API_REMOVE_DEVICE*)osi_calloc(sizeof(tBTA_DM_API_REMOVE_DEVICE)); - p_msg->hdr.event = BTA_DM_API_REMOVE_DEVICE_EVT; - bdcpy(p_msg->bd_addr, bd_addr); + p_msg->hdr.event = BTA_DM_API_REMOVE_DEVICE_EVT; + bdcpy(p_msg->bd_addr, bd_addr); - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_SUCCESS; + return BTA_SUCCESS; } /******************************************************************************* @@ -513,39 +494,35 @@ tBTA_STATUS BTA_DmRemoveDevice(BD_ADDR bd_addr) * Returns None * ******************************************************************************/ -extern const uint16_t bta_service_id_to_uuid_lkup_tbl []; -void BTA_GetEirService( uint8_t *p_eir, tBTA_SERVICE_MASK *p_services ) -{ - uint8_t xx, yy; - uint8_t num_uuid, max_num_uuid = 32; - uint8_t uuid_list[32*LEN_UUID_16]; - uint16_t *p_uuid16 = (uint16_t *)uuid_list; - tBTA_SERVICE_MASK mask; - - BTM_GetEirUuidList( p_eir, LEN_UUID_16, &num_uuid, uuid_list, max_num_uuid); - for( xx = 0; xx < num_uuid; xx++ ) - { - mask = 1; - for( yy = 0; yy < BTA_MAX_SERVICE_ID; yy++ ) - { - if( *(p_uuid16 + xx) == bta_service_id_to_uuid_lkup_tbl[yy] ) - { - *p_services |= mask; - break; - } - mask <<= 1; - } +extern const uint16_t bta_service_id_to_uuid_lkup_tbl[]; +void BTA_GetEirService(uint8_t* p_eir, tBTA_SERVICE_MASK* p_services) { + uint8_t xx, yy; + uint8_t num_uuid, max_num_uuid = 32; + uint8_t uuid_list[32 * LEN_UUID_16]; + uint16_t* p_uuid16 = (uint16_t*)uuid_list; + tBTA_SERVICE_MASK mask; + + BTM_GetEirUuidList(p_eir, LEN_UUID_16, &num_uuid, uuid_list, max_num_uuid); + for (xx = 0; xx < num_uuid; xx++) { + mask = 1; + for (yy = 0; yy < BTA_MAX_SERVICE_ID; yy++) { + if (*(p_uuid16 + xx) == bta_service_id_to_uuid_lkup_tbl[yy]) { + *p_services |= mask; + break; + } + mask <<= 1; + } - /* for HSP v1.2 only device */ - if (*(p_uuid16 + xx) == UUID_SERVCLASS_HEADSET_HS) - *p_services |= BTA_HSP_SERVICE_MASK; + /* for HSP v1.2 only device */ + if (*(p_uuid16 + xx) == UUID_SERVCLASS_HEADSET_HS) + *p_services |= BTA_HSP_SERVICE_MASK; - if (*(p_uuid16 + xx) == UUID_SERVCLASS_HDP_SOURCE) - *p_services |= BTA_HL_SERVICE_MASK; + if (*(p_uuid16 + xx) == UUID_SERVCLASS_HDP_SOURCE) + *p_services |= BTA_HL_SERVICE_MASK; - if (*(p_uuid16 + xx) == UUID_SERVCLASS_HDP_SINK) - *p_services |= BTA_HL_SERVICE_MASK; - } + if (*(p_uuid16 + xx) == UUID_SERVCLASS_HDP_SINK) + *p_services |= BTA_HL_SERVICE_MASK; + } } /******************************************************************************* @@ -557,13 +534,11 @@ void BTA_GetEirService( uint8_t *p_eir, tBTA_SERVICE_MASK *p_services ) * Returns 0 if the device is NOT connected. * ******************************************************************************/ -uint16_t BTA_DmGetConnectionState(const BD_ADDR bd_addr ) -{ - tBTA_DM_PEER_DEVICE * p_dev = bta_dm_find_peer_device(bd_addr); - return (p_dev && p_dev->conn_state == BTA_DM_CONNECTED); +uint16_t BTA_DmGetConnectionState(const BD_ADDR bd_addr) { + tBTA_DM_PEER_DEVICE* p_dev = bta_dm_find_peer_device(bd_addr); + return (p_dev && p_dev->conn_state == BTA_DM_CONNECTED); } - /******************************************************************************* * Device Identification (DI) Server Functions ******************************************************************************/ @@ -576,50 +551,47 @@ uint16_t BTA_DmGetConnectionState(const BD_ADDR bd_addr ) * Returns BTA_SUCCESS if record set sucessfully, otherwise error code. * ******************************************************************************/ -tBTA_STATUS BTA_DmSetLocalDiRecord( tBTA_DI_RECORD *p_device_info, - uint32_t *p_handle ) -{ - tBTA_STATUS status = BTA_FAILURE; - - if(bta_dm_di_cb.di_num < BTA_DI_NUM_MAX) - { - if(SDP_SetLocalDiRecord((tSDP_DI_RECORD *)p_device_info, p_handle) == SDP_SUCCESS) - { - if(!p_device_info->primary_record) - { - bta_dm_di_cb.di_handle[bta_dm_di_cb.di_num] = *p_handle; - bta_dm_di_cb.di_num ++; - } - - bta_sys_add_uuid(UUID_SERVCLASS_PNP_INFORMATION); - status = BTA_SUCCESS; - } +tBTA_STATUS BTA_DmSetLocalDiRecord(tBTA_DI_RECORD* p_device_info, + uint32_t* p_handle) { + tBTA_STATUS status = BTA_FAILURE; + + if (bta_dm_di_cb.di_num < BTA_DI_NUM_MAX) { + if (SDP_SetLocalDiRecord((tSDP_DI_RECORD*)p_device_info, p_handle) == + SDP_SUCCESS) { + if (!p_device_info->primary_record) { + bta_dm_di_cb.di_handle[bta_dm_di_cb.di_num] = *p_handle; + bta_dm_di_cb.di_num++; + } + + bta_sys_add_uuid(UUID_SERVCLASS_PNP_INFORMATION); + status = BTA_SUCCESS; } + } - return status; + return status; } /******************************************************************************* * * Function bta_dmexecutecallback * - * Description This function will request BTA to execute a call back in the context of BTU task + * Description This function will request BTA to execute a call back in the + *context of BTU task * This API was named in lower case because it is only intended * for the internal customers(like BTIF). * * Returns void * ******************************************************************************/ -void bta_dmexecutecallback (tBTA_DM_EXEC_CBACK* p_callback, void * p_param) -{ - tBTA_DM_API_EXECUTE_CBACK *p_msg = - (tBTA_DM_API_EXECUTE_CBACK *)osi_malloc(sizeof(tBTA_DM_MSG)); +void bta_dmexecutecallback(tBTA_DM_EXEC_CBACK* p_callback, void* p_param) { + tBTA_DM_API_EXECUTE_CBACK* p_msg = + (tBTA_DM_API_EXECUTE_CBACK*)osi_malloc(sizeof(tBTA_DM_MSG)); - p_msg->hdr.event = BTA_DM_API_EXECUTE_CBACK_EVT; - p_msg->p_param= p_param; - p_msg->p_exec_cback= p_callback; + p_msg->hdr.event = BTA_DM_API_EXECUTE_CBACK_EVT; + p_msg->p_param = p_param; + p_msg->p_exec_cback = p_callback; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -638,19 +610,19 @@ void bta_dmexecutecallback (tBTA_DM_EXEC_CBACK* p_callback, void * p_param) * BTA_FAIL if operation failed. * ******************************************************************************/ -void BTA_DmAddBleKey (BD_ADDR bd_addr, tBTA_LE_KEY_VALUE *p_le_key, tBTA_LE_KEY_TYPE key_type) -{ +void BTA_DmAddBleKey(BD_ADDR bd_addr, tBTA_LE_KEY_VALUE* p_le_key, + tBTA_LE_KEY_TYPE key_type) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_ADD_BLEKEY *p_msg = - (tBTA_DM_API_ADD_BLEKEY *)osi_calloc(sizeof(tBTA_DM_API_ADD_BLEKEY)); + tBTA_DM_API_ADD_BLEKEY* p_msg = + (tBTA_DM_API_ADD_BLEKEY*)osi_calloc(sizeof(tBTA_DM_API_ADD_BLEKEY)); - p_msg->hdr.event = BTA_DM_API_ADD_BLEKEY_EVT; - p_msg->key_type = key_type; - bdcpy(p_msg->bd_addr, bd_addr); - memcpy(&p_msg->blekey, p_le_key, sizeof(tBTA_LE_KEY_VALUE)); + p_msg->hdr.event = BTA_DM_API_ADD_BLEKEY_EVT; + p_msg->key_type = key_type; + bdcpy(p_msg->bd_addr, bd_addr); + memcpy(&p_msg->blekey, p_le_key, sizeof(tBTA_LE_KEY_VALUE)); - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #endif } @@ -669,18 +641,18 @@ void BTA_DmAddBleKey (BD_ADDR bd_addr, tBTA_LE_KEY_VALUE *p_le_key, tBTA_LE_KEY_ * Returns void * ******************************************************************************/ -void BTA_DmAddBleDevice(BD_ADDR bd_addr, tBLE_ADDR_TYPE addr_type, tBT_DEVICE_TYPE dev_type) -{ +void BTA_DmAddBleDevice(BD_ADDR bd_addr, tBLE_ADDR_TYPE addr_type, + tBT_DEVICE_TYPE dev_type) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_ADD_BLE_DEVICE *p_msg = - (tBTA_DM_API_ADD_BLE_DEVICE *)osi_calloc(sizeof(tBTA_DM_API_ADD_BLE_DEVICE)); + tBTA_DM_API_ADD_BLE_DEVICE* p_msg = (tBTA_DM_API_ADD_BLE_DEVICE*)osi_calloc( + sizeof(tBTA_DM_API_ADD_BLE_DEVICE)); - p_msg->hdr.event = BTA_DM_API_ADD_BLEDEVICE_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->addr_type = addr_type; - p_msg->dev_type = dev_type; + p_msg->hdr.event = BTA_DM_API_ADD_BLEDEVICE_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->addr_type = addr_type; + p_msg->dev_type = dev_type; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #endif } @@ -698,20 +670,18 @@ void BTA_DmAddBleDevice(BD_ADDR bd_addr, tBLE_ADDR_TYPE addr_type, tBT_DEVICE_TY * Returns void * ******************************************************************************/ -void BTA_DmBlePasskeyReply(BD_ADDR bd_addr, bool accept, uint32_t passkey) -{ +void BTA_DmBlePasskeyReply(BD_ADDR bd_addr, bool accept, uint32_t passkey) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_PASSKEY_REPLY *p_msg = - (tBTA_DM_API_PASSKEY_REPLY *)osi_calloc(sizeof(tBTA_DM_API_PASSKEY_REPLY)); + tBTA_DM_API_PASSKEY_REPLY* p_msg = + (tBTA_DM_API_PASSKEY_REPLY*)osi_calloc(sizeof(tBTA_DM_API_PASSKEY_REPLY)); - p_msg->hdr.event = BTA_DM_API_BLE_PASSKEY_REPLY_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->accept = accept; + p_msg->hdr.event = BTA_DM_API_BLE_PASSKEY_REPLY_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->accept = accept; - if (accept) - p_msg->passkey = passkey; + if (accept) p_msg->passkey = passkey; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #endif } @@ -722,22 +692,22 @@ void BTA_DmBlePasskeyReply(BD_ADDR bd_addr, bool accept, uint32_t passkey) * Description Send BLE SMP SC user confirmation reply. * * Parameters: bd_addr - BD address of the peer - * accept - numbers to compare are the same or different. + * accept - numbers to compare are the same or + *different. * * Returns void * ******************************************************************************/ -void BTA_DmBleConfirmReply(BD_ADDR bd_addr, bool accept) -{ +void BTA_DmBleConfirmReply(BD_ADDR bd_addr, bool accept) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_CONFIRM *p_msg = - (tBTA_DM_API_CONFIRM *)osi_calloc(sizeof(tBTA_DM_API_CONFIRM)); + tBTA_DM_API_CONFIRM* p_msg = + (tBTA_DM_API_CONFIRM*)osi_calloc(sizeof(tBTA_DM_API_CONFIRM)); - p_msg->hdr.event = BTA_DM_API_BLE_CONFIRM_REPLY_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->accept = accept; + p_msg->hdr.event = BTA_DM_API_BLE_CONFIRM_REPLY_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->accept = accept; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #endif } @@ -753,17 +723,16 @@ void BTA_DmBleConfirmReply(BD_ADDR bd_addr, bool accept) * Returns void * ******************************************************************************/ -void BTA_DmBleSecurityGrant(BD_ADDR bd_addr, tBTA_DM_BLE_SEC_GRANT res) -{ +void BTA_DmBleSecurityGrant(BD_ADDR bd_addr, tBTA_DM_BLE_SEC_GRANT res) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_BLE_SEC_GRANT *p_msg = - (tBTA_DM_API_BLE_SEC_GRANT *)osi_calloc(sizeof(tBTA_DM_API_BLE_SEC_GRANT)); + tBTA_DM_API_BLE_SEC_GRANT* p_msg = + (tBTA_DM_API_BLE_SEC_GRANT*)osi_calloc(sizeof(tBTA_DM_API_BLE_SEC_GRANT)); - p_msg->hdr.event = BTA_DM_API_BLE_SEC_GRANT_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->res = res; + p_msg->hdr.event = BTA_DM_API_BLE_SEC_GRANT_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->res = res; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #endif } @@ -786,22 +755,21 @@ void BTA_DmBleSecurityGrant(BD_ADDR bd_addr, tBTA_DM_BLE_SEC_GRANT res) * Returns void * ******************************************************************************/ -void BTA_DmSetBlePrefConnParams(const BD_ADDR bd_addr, - uint16_t min_conn_int, uint16_t max_conn_int, - uint16_t slave_latency, uint16_t supervision_tout ) -{ +void BTA_DmSetBlePrefConnParams(const BD_ADDR bd_addr, uint16_t min_conn_int, + uint16_t max_conn_int, uint16_t slave_latency, + uint16_t supervision_tout) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_BLE_CONN_PARAMS *p_msg = - (tBTA_DM_API_BLE_CONN_PARAMS *)osi_calloc(sizeof(tBTA_DM_API_BLE_CONN_PARAMS)); + tBTA_DM_API_BLE_CONN_PARAMS* p_msg = (tBTA_DM_API_BLE_CONN_PARAMS*)osi_calloc( + sizeof(tBTA_DM_API_BLE_CONN_PARAMS)); - p_msg->hdr.event = BTA_DM_API_BLE_CONN_PARAM_EVT; - memcpy(p_msg->peer_bda, bd_addr, BD_ADDR_LEN); - p_msg->conn_int_max = max_conn_int; - p_msg->conn_int_min = min_conn_int; - p_msg->slave_latency = slave_latency; - p_msg->supervision_tout = supervision_tout; + p_msg->hdr.event = BTA_DM_API_BLE_CONN_PARAM_EVT; + memcpy(p_msg->peer_bda, bd_addr, BD_ADDR_LEN); + p_msg->conn_int_max = max_conn_int; + p_msg->conn_int_min = min_conn_int; + p_msg->slave_latency = slave_latency; + p_msg->supervision_tout = supervision_tout; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #endif } @@ -818,17 +786,16 @@ void BTA_DmSetBlePrefConnParams(const BD_ADDR bd_addr, * Returns void * ******************************************************************************/ -void BTA_DmSetBleConnScanParams(uint32_t scan_interval, uint32_t scan_window) -{ +void BTA_DmSetBleConnScanParams(uint32_t scan_interval, uint32_t scan_window) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_BLE_SCAN_PARAMS *p_msg = - (tBTA_DM_API_BLE_SCAN_PARAMS *)osi_calloc(sizeof(tBTA_DM_API_BLE_SCAN_PARAMS)); + tBTA_DM_API_BLE_SCAN_PARAMS* p_msg = (tBTA_DM_API_BLE_SCAN_PARAMS*)osi_calloc( + sizeof(tBTA_DM_API_BLE_SCAN_PARAMS)); - p_msg->hdr.event = BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT; - p_msg->scan_int = scan_interval; - p_msg->scan_window = scan_window; + p_msg->hdr.event = BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT; + p_msg->scan_int = scan_interval; + p_msg->scan_window = scan_window; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #endif // BLE_INCLUDED == true } @@ -842,28 +809,29 @@ void BTA_DmSetBleConnScanParams(uint32_t scan_interval, uint32_t scan_window) * scan_interval - scan interval * scan_window - scan window * scan_mode - scan mode - * scan_param_setup_status_cback - Set scan param status callback + * scan_param_setup_status_cback - Set scan param status + *callback * * Returns void * ******************************************************************************/ #if (BLE_INCLUDED == TRUE) -void BTA_DmSetBleScanParams(tGATT_IF client_if, uint32_t scan_interval, - uint32_t scan_window, tBLE_SCAN_MODE scan_mode, - tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback) -{ - tBTA_DM_API_BLE_SCAN_PARAMS *p_msg = - (tBTA_DM_API_BLE_SCAN_PARAMS *)osi_calloc(sizeof(tBTA_DM_API_BLE_SCAN_PARAMS)); - - p_msg->hdr.event = BTA_DM_API_BLE_SCAN_PARAM_EVT; - p_msg->client_if = client_if; - p_msg->scan_int = scan_interval; - p_msg->scan_window = scan_window; - p_msg->scan_mode = scan_mode; - p_msg->scan_param_setup_cback = scan_param_setup_cback; - - bta_sys_sendmsg(p_msg); +void BTA_DmSetBleScanParams( + tGATT_IF client_if, uint32_t scan_interval, uint32_t scan_window, + tBLE_SCAN_MODE scan_mode, + tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback) { + tBTA_DM_API_BLE_SCAN_PARAMS* p_msg = (tBTA_DM_API_BLE_SCAN_PARAMS*)osi_calloc( + sizeof(tBTA_DM_API_BLE_SCAN_PARAMS)); + + p_msg->hdr.event = BTA_DM_API_BLE_SCAN_PARAM_EVT; + p_msg->client_if = client_if; + p_msg->scan_int = scan_interval; + p_msg->scan_window = scan_window; + p_msg->scan_mode = scan_mode; + p_msg->scan_param_setup_cback = scan_param_setup_cback; + + bta_sys_sendmsg(p_msg); } #endif // BLE_INCLUDED == true @@ -871,8 +839,10 @@ void BTA_DmSetBleScanParams(tGATT_IF client_if, uint32_t scan_interval, * * Function BTA_DmSetBleAdvParams * - * Description This function sets the advertising parameters BLE functionality. - * It is to be called when device act in peripheral or broadcaster + * Description This function sets the advertising parameters BLE + *functionality. + * It is to be called when device act in peripheral or + *broadcaster * role. * * @@ -880,18 +850,18 @@ void BTA_DmSetBleScanParams(tGATT_IF client_if, uint32_t scan_interval, * ******************************************************************************/ void BTA_DmSetBleAdvParams(uint16_t adv_int_min, uint16_t adv_int_max, - tBLE_BD_ADDR *p_dir_bda) -{ + tBLE_BD_ADDR* p_dir_bda) { #if (BLE_INCLUDED == TRUE) - if (p_dir_bda != NULL) { - tBLE_BD_ADDR *bda = new tBLE_BD_ADDR; - memcpy(bda, p_dir_bda, sizeof(tBLE_BD_ADDR)); - do_in_bta_thread(FROM_HERE, - base::Bind(&bta_dm_ble_set_adv_params, adv_int_min, adv_int_max, base::Owned(bda))); - } - + if (p_dir_bda != NULL) { + tBLE_BD_ADDR* bda = new tBLE_BD_ADDR; + memcpy(bda, p_dir_bda, sizeof(tBLE_BD_ADDR)); do_in_bta_thread(FROM_HERE, - base::Bind(&bta_dm_ble_set_adv_params, adv_int_min, adv_int_max, nullptr)); + base::Bind(&bta_dm_ble_set_adv_params, adv_int_min, + adv_int_max, base::Owned(bda))); + } + + do_in_bta_thread(FROM_HERE, base::Bind(&bta_dm_ble_set_adv_params, + adv_int_min, adv_int_max, nullptr)); #endif } @@ -907,9 +877,12 @@ void BTA_DmSetBleAdvParams(uint16_t adv_int_min, uint16_t adv_int_max, * * Description This function is called to override the BTA scan response. * - * Parameters batch_scan_full_max -Max storage space (in %) allocated to full scanning - * batch_scan_trunc_max -Max storage space (in %) allocated to truncated scanning - * batch_scan_notify_threshold -Setup notification level based on total space + * Parameters batch_scan_full_max -Max storage space (in %) allocated to + *full scanning + * batch_scan_trunc_max -Max storage space (in %) allocated to + *truncated scanning + * batch_scan_notify_threshold -Setup notification level based + *on total space * p_setup_cback - Setup callback pointer * p_thres_cback - Threshold callback pointer * p_rep_cback - Reports callback pointer @@ -918,29 +891,28 @@ void BTA_DmSetBleAdvParams(uint16_t adv_int_min, uint16_t adv_int_max, * Returns None * ******************************************************************************/ -extern void BTA_DmBleSetStorageParams(uint8_t batch_scan_full_max, - uint8_t batch_scan_trunc_max, - uint8_t batch_scan_notify_threshold, - tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback, - tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback, - tBTA_BLE_SCAN_REP_CBACK* p_rep_cback, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_SET_STORAGE_CONFIG *p_msg = - (tBTA_DM_API_SET_STORAGE_CONFIG *)osi_malloc(sizeof(tBTA_DM_API_SET_STORAGE_CONFIG)); - - bta_dm_cb.p_setup_cback = p_setup_cback; - - p_msg->hdr.event = BTA_DM_API_BLE_SETUP_STORAGE_EVT; - p_msg->p_setup_cback=bta_ble_scan_setup_cb; - p_msg->p_thres_cback=p_thres_cback; - p_msg->p_read_rep_cback=p_rep_cback; - p_msg->ref_value = ref_value; - p_msg->batch_scan_full_max = batch_scan_full_max; - p_msg->batch_scan_trunc_max = batch_scan_trunc_max; - p_msg->batch_scan_notify_threshold = batch_scan_notify_threshold; - - bta_sys_sendmsg(p_msg); +extern void BTA_DmBleSetStorageParams( + uint8_t batch_scan_full_max, uint8_t batch_scan_trunc_max, + uint8_t batch_scan_notify_threshold, + tBTA_BLE_SCAN_SETUP_CBACK* p_setup_cback, + tBTA_BLE_SCAN_THRESHOLD_CBACK* p_thres_cback, + tBTA_BLE_SCAN_REP_CBACK* p_rep_cback, tBTA_DM_BLE_REF_VALUE ref_value) { + tBTA_DM_API_SET_STORAGE_CONFIG* p_msg = + (tBTA_DM_API_SET_STORAGE_CONFIG*)osi_malloc( + sizeof(tBTA_DM_API_SET_STORAGE_CONFIG)); + + bta_dm_cb.p_setup_cback = p_setup_cback; + + p_msg->hdr.event = BTA_DM_API_BLE_SETUP_STORAGE_EVT; + p_msg->p_setup_cback = bta_ble_scan_setup_cb; + p_msg->p_thres_cback = p_thres_cback; + p_msg->p_read_rep_cback = p_rep_cback; + p_msg->ref_value = ref_value; + p_msg->batch_scan_full_max = batch_scan_full_max; + p_msg->batch_scan_trunc_max = batch_scan_trunc_max; + p_msg->batch_scan_notify_threshold = batch_scan_notify_threshold; + + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -960,23 +932,23 @@ extern void BTA_DmBleSetStorageParams(uint8_t batch_scan_full_max, * ******************************************************************************/ extern void BTA_DmBleEnableBatchScan(tBTA_BLE_BATCH_SCAN_MODE scan_mode, - uint32_t scan_interval, uint32_t scan_window, - tBTA_BLE_DISCARD_RULE discard_rule, - tBLE_ADDR_TYPE addr_type, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_ENABLE_SCAN *p_msg = - (tBTA_DM_API_ENABLE_SCAN *)osi_malloc(sizeof(tBTA_DM_API_ENABLE_SCAN)); - - p_msg->hdr.event = BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT; - p_msg->scan_mode = scan_mode; - p_msg->scan_int = scan_interval; - p_msg->scan_window = scan_window; - p_msg->discard_rule = discard_rule; - p_msg->addr_type = addr_type; - p_msg->ref_value = ref_value; - - bta_sys_sendmsg(p_msg); + uint32_t scan_interval, + uint32_t scan_window, + tBTA_BLE_DISCARD_RULE discard_rule, + tBLE_ADDR_TYPE addr_type, + tBTA_DM_BLE_REF_VALUE ref_value) { + tBTA_DM_API_ENABLE_SCAN* p_msg = + (tBTA_DM_API_ENABLE_SCAN*)osi_malloc(sizeof(tBTA_DM_API_ENABLE_SCAN)); + + p_msg->hdr.event = BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT; + p_msg->scan_mode = scan_mode; + p_msg->scan_int = scan_interval; + p_msg->scan_window = scan_window; + p_msg->discard_rule = discard_rule; + p_msg->addr_type = addr_type; + p_msg->ref_value = ref_value; + + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -990,15 +962,14 @@ extern void BTA_DmBleEnableBatchScan(tBTA_BLE_BATCH_SCAN_MODE scan_mode, * Returns None * ******************************************************************************/ -extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_DISABLE_SCAN *p_msg = - (tBTA_DM_API_DISABLE_SCAN *)osi_malloc(sizeof(tBTA_DM_API_DISABLE_SCAN)); +extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value) { + tBTA_DM_API_DISABLE_SCAN* p_msg = + (tBTA_DM_API_DISABLE_SCAN*)osi_malloc(sizeof(tBTA_DM_API_DISABLE_SCAN)); - p_msg->hdr.event = BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT; - p_msg->ref_value = ref_value; + p_msg->hdr.event = BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT; + p_msg->ref_value = ref_value; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -1014,16 +985,16 @@ extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value) * ******************************************************************************/ extern void BTA_DmBleReadScanReports(tBTA_BLE_BATCH_SCAN_MODE scan_type, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_READ_SCAN_REPORTS *p_msg = - (tBTA_DM_API_READ_SCAN_REPORTS *)osi_malloc(sizeof(tBTA_DM_API_READ_SCAN_REPORTS)); + tBTA_DM_BLE_REF_VALUE ref_value) { + tBTA_DM_API_READ_SCAN_REPORTS* p_msg = + (tBTA_DM_API_READ_SCAN_REPORTS*)osi_malloc( + sizeof(tBTA_DM_API_READ_SCAN_REPORTS)); - p_msg->hdr.event = BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT; - p_msg->scan_type = scan_type; - p_msg->ref_value = ref_value; + p_msg->hdr.event = BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT; + p_msg->scan_type = scan_type; + p_msg->ref_value = ref_value; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -1038,17 +1009,18 @@ extern void BTA_DmBleReadScanReports(tBTA_BLE_BATCH_SCAN_MODE scan_type, * Returns None * ******************************************************************************/ -extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, - tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback) -{ - tBTA_DM_API_TRACK_ADVERTISER *p_msg = - (tBTA_DM_API_TRACK_ADVERTISER *)osi_malloc(sizeof(tBTA_DM_API_TRACK_ADVERTISER)); - - p_msg->hdr.event = BTA_DM_API_BLE_TRACK_ADVERTISER_EVT; - p_msg->p_track_adv_cback = p_track_adv_cback; - p_msg->ref_value = ref_value; - - bta_sys_sendmsg(p_msg); +extern void BTA_DmBleTrackAdvertiser( + tBTA_DM_BLE_REF_VALUE ref_value, + tBTA_BLE_TRACK_ADV_CBACK* p_track_adv_cback) { + tBTA_DM_API_TRACK_ADVERTISER* p_msg = + (tBTA_DM_API_TRACK_ADVERTISER*)osi_malloc( + sizeof(tBTA_DM_API_TRACK_ADVERTISER)); + + p_msg->hdr.event = BTA_DM_API_BLE_TRACK_ADVERTISER_EVT; + p_msg->p_track_adv_cback = p_track_adv_cback; + p_msg->ref_value = ref_value; + + bta_sys_sendmsg(p_msg); } #endif @@ -1064,24 +1036,27 @@ extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, * Description This function is called to set BLE connectable mode for a * peripheral device. * - * Parameters bg_conn_type: it can be auto connection, or selective connection. - * p_select_cback: callback function when selective connection procedure + * Parameters bg_conn_type: it can be auto connection, or selective + *connection. + * p_select_cback: callback function when selective connection + *procedure * is being used. * * Returns void * ******************************************************************************/ -void BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type, tBTA_DM_BLE_SEL_CBACK *p_select_cback) -{ +void BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type, + tBTA_DM_BLE_SEL_CBACK* p_select_cback) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_BLE_SET_BG_CONN_TYPE *p_msg = - (tBTA_DM_API_BLE_SET_BG_CONN_TYPE *)osi_calloc(sizeof(tBTA_DM_API_BLE_SET_BG_CONN_TYPE)); + tBTA_DM_API_BLE_SET_BG_CONN_TYPE* p_msg = + (tBTA_DM_API_BLE_SET_BG_CONN_TYPE*)osi_calloc( + sizeof(tBTA_DM_API_BLE_SET_BG_CONN_TYPE)); - p_msg->hdr.event = BTA_DM_API_BLE_SET_BG_CONN_TYPE; - p_msg->bg_conn_type = bg_conn_type; - p_msg->p_select_cback = p_select_cback; + p_msg->hdr.event = BTA_DM_API_BLE_SET_BG_CONN_TYPE; + p_msg->bg_conn_type = bg_conn_type; + p_msg->p_select_cback = p_select_cback; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #endif } @@ -1095,34 +1070,35 @@ void BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type, tBTA_DM_BLE_SEL_ * ******************************************************************************/ #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) -static void bta_dm_discover_send_msg(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search, - tBTA_TRANSPORT transport) -{ - const size_t len = p_services ? - (sizeof(tBTA_DM_API_DISCOVER) + sizeof(tBT_UUID) * p_services->num_uuid) - : sizeof(tBTA_DM_API_DISCOVER); - tBTA_DM_API_DISCOVER *p_msg = (tBTA_DM_API_DISCOVER *)osi_calloc(len); - - p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->p_cback = p_cback; - p_msg->sdp_search = sdp_search; - p_msg->transport = transport; - - if (p_services != NULL) { +static void bta_dm_discover_send_msg(BD_ADDR bd_addr, + tBTA_SERVICE_MASK_EXT* p_services, + tBTA_DM_SEARCH_CBACK* p_cback, + bool sdp_search, + tBTA_TRANSPORT transport) { + const size_t len = p_services ? (sizeof(tBTA_DM_API_DISCOVER) + + sizeof(tBT_UUID) * p_services->num_uuid) + : sizeof(tBTA_DM_API_DISCOVER); + tBTA_DM_API_DISCOVER* p_msg = (tBTA_DM_API_DISCOVER*)osi_calloc(len); + + p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->p_cback = p_cback; + p_msg->sdp_search = sdp_search; + p_msg->transport = transport; + + if (p_services != NULL) { #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - p_msg->services = p_services->srvc_mask; - p_msg->num_uuid = p_services->num_uuid; - if (p_services->num_uuid != 0) { - p_msg->p_uuid = (tBT_UUID *)(p_msg + 1); - memcpy(p_msg->p_uuid, p_services->p_uuid, - sizeof(tBT_UUID) * p_services->num_uuid); - } -#endif + p_msg->services = p_services->srvc_mask; + p_msg->num_uuid = p_services->num_uuid; + if (p_services->num_uuid != 0) { + p_msg->p_uuid = (tBT_UUID*)(p_msg + 1); + memcpy(p_msg->p_uuid, p_services->p_uuid, + sizeof(tBT_UUID) * p_services->num_uuid); } +#endif + } - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } #endif @@ -1142,16 +1118,15 @@ static void bta_dm_discover_send_msg(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_s * Returns void * ******************************************************************************/ -void BTA_DmDiscoverByTransport(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search, - tBTA_TRANSPORT transport) -{ +void BTA_DmDiscoverByTransport(BD_ADDR bd_addr, + tBTA_SERVICE_MASK_EXT* p_services, + tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search, + tBTA_TRANSPORT transport) { #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - bta_dm_discover_send_msg(bd_addr, p_services, p_cback, sdp_search, transport); + bta_dm_discover_send_msg(bd_addr, p_services, p_cback, sdp_search, transport); #endif } - /******************************************************************************* * * Function BTA_DmDiscoverExt @@ -1167,26 +1142,28 @@ void BTA_DmDiscoverByTransport(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_service * Returns void * ******************************************************************************/ -void BTA_DmDiscoverExt(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search) -{ +void BTA_DmDiscoverExt(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT* p_services, + tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search) { #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - bta_dm_discover_send_msg(bd_addr, p_services, p_cback, sdp_search, BTA_TRANSPORT_UNKNOWN); + bta_dm_discover_send_msg(bd_addr, p_services, p_cback, sdp_search, + BTA_TRANSPORT_UNKNOWN); #endif - } /******************************************************************************* * * Function BTA_DmSearchExt * - * Description This function searches for peer Bluetooth devices. It performs + * Description This function searches for peer Bluetooth devices. It + *performs * an inquiry and gets the remote name for devices. Service * discovery is done if services is non zero * * Parameters p_dm_inq: inquiry conditions - * p_services: if service is not empty, service discovery will be done. - * for all GATT based service condition, put num_uuid, and + * p_services: if service is not empty, service discovery will + *be done. + * for all GATT based service condition, put + *num_uuid, and * p_uuid is the pointer to the list of UUID values. * p_cback: callback functino when search is completed. * @@ -1196,49 +1173,50 @@ void BTA_DmDiscoverExt(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services, * ******************************************************************************/ #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) -void BTA_DmSearchExt(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK_EXT *p_services, tBTA_DM_SEARCH_CBACK *p_cback) -{ - const size_t len = p_services ? - (sizeof(tBTA_DM_API_SEARCH) + sizeof(tBT_UUID) * p_services->num_uuid) - : sizeof(tBTA_DM_API_SEARCH); - tBTA_DM_API_SEARCH *p_msg = (tBTA_DM_API_SEARCH *)osi_calloc(len); - - p_msg->hdr.event = BTA_DM_API_SEARCH_EVT; - memcpy(&p_msg->inq_params, p_dm_inq, sizeof(tBTA_DM_INQ)); - p_msg->p_cback = p_cback; - p_msg->rs_res = BTA_DM_RS_NONE; - - if (p_services != NULL) { - p_msg->services = p_services->srvc_mask; - p_msg->num_uuid = p_services->num_uuid; - - if (p_services->num_uuid != 0) { - p_msg->p_uuid = (tBT_UUID *)(p_msg + 1); - memcpy(p_msg->p_uuid, p_services->p_uuid, - sizeof(tBT_UUID) * p_services->num_uuid); - } else { - p_msg->p_uuid = NULL; - } +void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK_EXT* p_services, + tBTA_DM_SEARCH_CBACK* p_cback) { + const size_t len = p_services ? (sizeof(tBTA_DM_API_SEARCH) + + sizeof(tBT_UUID) * p_services->num_uuid) + : sizeof(tBTA_DM_API_SEARCH); + tBTA_DM_API_SEARCH* p_msg = (tBTA_DM_API_SEARCH*)osi_calloc(len); + + p_msg->hdr.event = BTA_DM_API_SEARCH_EVT; + memcpy(&p_msg->inq_params, p_dm_inq, sizeof(tBTA_DM_INQ)); + p_msg->p_cback = p_cback; + p_msg->rs_res = BTA_DM_RS_NONE; + + if (p_services != NULL) { + p_msg->services = p_services->srvc_mask; + p_msg->num_uuid = p_services->num_uuid; + + if (p_services->num_uuid != 0) { + p_msg->p_uuid = (tBT_UUID*)(p_msg + 1); + memcpy(p_msg->p_uuid, p_services->p_uuid, + sizeof(tBT_UUID) * p_services->num_uuid); + } else { + p_msg->p_uuid = NULL; } + } - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } #else -void BTA_DmSearchExt(UNUSED_ATTR tBTA_DM_INQ *p_dm_inq, - UNUSED_ATTR tBTA_SERVICE_MASK_EXT *p_services, - UNUSED_ATTR tBTA_DM_SEARCH_CBACK *p_cback) -{ -} +void BTA_DmSearchExt(UNUSED_ATTR tBTA_DM_INQ* p_dm_inq, + UNUSED_ATTR tBTA_SERVICE_MASK_EXT* p_services, + UNUSED_ATTR tBTA_DM_SEARCH_CBACK* p_cback) {} #endif /******************************************************************************* * * Function BTA_DmBleUpdateConnectionParam * - * Description Update connection parameters, can only be used when connection is up. + * Description Update connection parameters, can only be used when + *connection is up. * * Parameters: bd_addr - BD address of the peer - * min_int - minimum connection interval, [0x0004~ 0x4000] - * max_int - maximum connection interval, [0x0004~ 0x4000] + * min_int - minimum connection interval, [0x0004~ + *0x4000] + * max_int - maximum connection interval, [0x0004~ + *0x4000] * latency - slave latency [0 ~ 500] * timeout - supervision timeout [0x000a ~ 0xc80] * @@ -1247,20 +1225,20 @@ void BTA_DmSearchExt(UNUSED_ATTR tBTA_DM_INQ *p_dm_inq, ******************************************************************************/ void BTA_DmBleUpdateConnectionParam(BD_ADDR bd_addr, uint16_t min_int, uint16_t max_int, uint16_t latency, - uint16_t timeout) -{ + uint16_t timeout) { #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_UPDATE_CONN_PARAM *p_msg = - (tBTA_DM_API_UPDATE_CONN_PARAM *)osi_calloc(sizeof(tBTA_DM_API_UPDATE_CONN_PARAM)); - - p_msg->hdr.event = BTA_DM_API_UPDATE_CONN_PARAM_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->min_int = min_int; - p_msg->max_int = max_int; - p_msg->latency = latency; - p_msg->timeout = timeout; - - bta_sys_sendmsg(p_msg); + tBTA_DM_API_UPDATE_CONN_PARAM* p_msg = + (tBTA_DM_API_UPDATE_CONN_PARAM*)osi_calloc( + sizeof(tBTA_DM_API_UPDATE_CONN_PARAM)); + + p_msg->hdr.event = BTA_DM_API_UPDATE_CONN_PARAM_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->min_int = min_int; + p_msg->max_int = max_int; + p_msg->latency = latency; + p_msg->timeout = timeout; + + bta_sys_sendmsg(p_msg); #endif } @@ -1275,18 +1253,17 @@ void BTA_DmBleUpdateConnectionParam(BD_ADDR bd_addr, uint16_t min_int, * Returns void * ******************************************************************************/ -void BTA_DmBleConfigLocalPrivacy(bool privacy_enable) -{ +void BTA_DmBleConfigLocalPrivacy(bool privacy_enable) { #if (BLE_INCLUDED == TRUE && BLE_PRIVACY_SPT == TRUE) - tBTA_DM_API_LOCAL_PRIVACY *p_msg = - (tBTA_DM_API_LOCAL_PRIVACY *)osi_calloc(sizeof(tBTA_DM_API_ENABLE_PRIVACY)); + tBTA_DM_API_LOCAL_PRIVACY* p_msg = (tBTA_DM_API_LOCAL_PRIVACY*)osi_calloc( + sizeof(tBTA_DM_API_ENABLE_PRIVACY)); - p_msg->hdr.event = BTA_DM_API_LOCAL_PRIVACY_EVT; - p_msg->privacy_enable = privacy_enable; + p_msg->hdr.event = BTA_DM_API_LOCAL_PRIVACY_EVT; + p_msg->privacy_enable = privacy_enable; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); #else - UNUSED (privacy_enable); + UNUSED(privacy_enable); #endif } @@ -1295,7 +1272,8 @@ void BTA_DmBleConfigLocalPrivacy(bool privacy_enable) * * Function BTA_DmBleCfgFilterCondition * - * Description This function is called to configure the adv data payload filter + * Description This function is called to configure the adv data payload + *filter * condition. * * Parameters action: to read/write/clear @@ -1312,120 +1290,115 @@ void BTA_DmBleConfigLocalPrivacy(bool privacy_enable) void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action, tBTA_DM_BLE_PF_COND_TYPE cond_type, tBTA_DM_BLE_PF_FILT_INDEX filt_index, - tBTA_DM_BLE_PF_COND_PARAM *p_cond, - tBTA_DM_BLE_PF_CFG_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_CFG_FILTER_COND *p_msg; - APPL_TRACE_API ("BTA_DmBleCfgFilterCondition: %d, %d", action, cond_type); - - uint16_t len = sizeof(tBTA_DM_API_CFG_FILTER_COND) + - sizeof(tBTA_DM_BLE_PF_COND_PARAM); - uint8_t *p; - - if (NULL != p_cond) - { - switch(cond_type) - { - case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: - case BTA_DM_BLE_PF_MANU_DATA: - /* Length of pattern and pattern mask and other elements in */ - /* tBTA_DM_BLE_PF_MANU_COND */ - len += ((p_cond->manu_data.data_len) * 2) + - sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint8_t); - break; - - case BTA_DM_BLE_PF_LOCAL_NAME: - len += ((p_cond->local_name.data_len) + sizeof(uint8_t)); - break; - - case BTM_BLE_PF_SRVC_UUID: - case BTM_BLE_PF_SRVC_SOL_UUID: - len += sizeof(tBLE_BD_ADDR) + sizeof(tBTA_DM_BLE_PF_COND_MASK); - break; - - default: - break; - } + tBTA_DM_BLE_PF_COND_PARAM* p_cond, + tBTA_DM_BLE_PF_CFG_CBACK* p_cmpl_cback, + tBTA_DM_BLE_REF_VALUE ref_value) { + tBTA_DM_API_CFG_FILTER_COND* p_msg; + APPL_TRACE_API("BTA_DmBleCfgFilterCondition: %d, %d", action, cond_type); + + uint16_t len = + sizeof(tBTA_DM_API_CFG_FILTER_COND) + sizeof(tBTA_DM_BLE_PF_COND_PARAM); + uint8_t* p; + + if (NULL != p_cond) { + switch (cond_type) { + case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: + case BTA_DM_BLE_PF_MANU_DATA: + /* Length of pattern and pattern mask and other elements in */ + /* tBTA_DM_BLE_PF_MANU_COND */ + len += ((p_cond->manu_data.data_len) * 2) + sizeof(uint16_t) + + sizeof(uint16_t) + sizeof(uint8_t); + break; + + case BTA_DM_BLE_PF_LOCAL_NAME: + len += ((p_cond->local_name.data_len) + sizeof(uint8_t)); + break; + + case BTM_BLE_PF_SRVC_UUID: + case BTM_BLE_PF_SRVC_SOL_UUID: + len += sizeof(tBLE_BD_ADDR) + sizeof(tBTA_DM_BLE_PF_COND_MASK); + break; + + default: + break; } - - p_msg = (tBTA_DM_API_CFG_FILTER_COND *)osi_calloc(len); - p_msg->hdr.event = BTA_DM_API_CFG_FILTER_COND_EVT; - p_msg->action = action; - p_msg->cond_type = cond_type; - p_msg->filt_index = filt_index; - p_msg->p_filt_cfg_cback = p_cmpl_cback; - p_msg->ref_value = ref_value; - if (p_cond) { - p_msg->p_cond_param = (tBTA_DM_BLE_PF_COND_PARAM *)(p_msg + 1); - memcpy(p_msg->p_cond_param, p_cond, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); - - p = (uint8_t *)(p_msg->p_cond_param + 1); - - if (cond_type == BTA_DM_BLE_PF_SRVC_DATA_PATTERN || - cond_type == BTA_DM_BLE_PF_MANU_DATA) { - p_msg->p_cond_param->manu_data.p_pattern = p; - p_msg->p_cond_param->manu_data.data_len = p_cond->manu_data.data_len; - memcpy(p_msg->p_cond_param->manu_data.p_pattern, p_cond->manu_data.p_pattern, - p_cond->manu_data.data_len); - p += p_cond->manu_data.data_len; - - if (cond_type == BTA_DM_BLE_PF_MANU_DATA) { - p_msg->p_cond_param->manu_data.company_id_mask = - p_cond->manu_data.company_id_mask; - if ( p_cond->manu_data.p_pattern_mask != NULL) { - p_msg->p_cond_param->manu_data.p_pattern_mask = p; - memcpy(p_msg->p_cond_param->manu_data.p_pattern_mask, - p_cond->manu_data.p_pattern_mask, - p_cond->manu_data.data_len); - } - } - } else if (cond_type == BTA_DM_BLE_PF_LOCAL_NAME) { - p_msg->p_cond_param->local_name.p_data = p; - p_msg->p_cond_param->local_name.data_len = - p_cond->local_name.data_len; - memcpy(p_msg->p_cond_param->local_name.p_data, - p_cond->local_name.p_data, p_cond->local_name.data_len); - } else if (cond_type == BTM_BLE_PF_SRVC_UUID || - cond_type == BTM_BLE_PF_SRVC_SOL_UUID) { - if (p_cond->srvc_uuid.p_target_addr != NULL) { - p_msg->p_cond_param->srvc_uuid.p_target_addr = (tBLE_BD_ADDR *)(p); - p_msg->p_cond_param->srvc_uuid.p_target_addr->type = - p_cond->srvc_uuid.p_target_addr->type; - memcpy(p_msg->p_cond_param->srvc_uuid.p_target_addr->bda, - p_cond->srvc_uuid.p_target_addr->bda, BD_ADDR_LEN); - p = (uint8_t *)(p_msg->p_cond_param->srvc_uuid.p_target_addr + 1); - } - if (p_cond->srvc_uuid.p_uuid_mask) { - p_msg->p_cond_param->srvc_uuid.p_uuid_mask = (tBTA_DM_BLE_PF_COND_MASK *)p; - memcpy(p_msg->p_cond_param->srvc_uuid.p_uuid_mask, - p_cond->srvc_uuid.p_uuid_mask, - sizeof(tBTA_DM_BLE_PF_COND_MASK)); - } + } + + p_msg = (tBTA_DM_API_CFG_FILTER_COND*)osi_calloc(len); + p_msg->hdr.event = BTA_DM_API_CFG_FILTER_COND_EVT; + p_msg->action = action; + p_msg->cond_type = cond_type; + p_msg->filt_index = filt_index; + p_msg->p_filt_cfg_cback = p_cmpl_cback; + p_msg->ref_value = ref_value; + if (p_cond) { + p_msg->p_cond_param = (tBTA_DM_BLE_PF_COND_PARAM*)(p_msg + 1); + memcpy(p_msg->p_cond_param, p_cond, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); + + p = (uint8_t*)(p_msg->p_cond_param + 1); + + if (cond_type == BTA_DM_BLE_PF_SRVC_DATA_PATTERN || + cond_type == BTA_DM_BLE_PF_MANU_DATA) { + p_msg->p_cond_param->manu_data.p_pattern = p; + p_msg->p_cond_param->manu_data.data_len = p_cond->manu_data.data_len; + memcpy(p_msg->p_cond_param->manu_data.p_pattern, + p_cond->manu_data.p_pattern, p_cond->manu_data.data_len); + p += p_cond->manu_data.data_len; + + if (cond_type == BTA_DM_BLE_PF_MANU_DATA) { + p_msg->p_cond_param->manu_data.company_id_mask = + p_cond->manu_data.company_id_mask; + if (p_cond->manu_data.p_pattern_mask != NULL) { + p_msg->p_cond_param->manu_data.p_pattern_mask = p; + memcpy(p_msg->p_cond_param->manu_data.p_pattern_mask, + p_cond->manu_data.p_pattern_mask, p_cond->manu_data.data_len); } + } + } else if (cond_type == BTA_DM_BLE_PF_LOCAL_NAME) { + p_msg->p_cond_param->local_name.p_data = p; + p_msg->p_cond_param->local_name.data_len = p_cond->local_name.data_len; + memcpy(p_msg->p_cond_param->local_name.p_data, p_cond->local_name.p_data, + p_cond->local_name.data_len); + } else if (cond_type == BTM_BLE_PF_SRVC_UUID || + cond_type == BTM_BLE_PF_SRVC_SOL_UUID) { + if (p_cond->srvc_uuid.p_target_addr != NULL) { + p_msg->p_cond_param->srvc_uuid.p_target_addr = (tBLE_BD_ADDR*)(p); + p_msg->p_cond_param->srvc_uuid.p_target_addr->type = + p_cond->srvc_uuid.p_target_addr->type; + memcpy(p_msg->p_cond_param->srvc_uuid.p_target_addr->bda, + p_cond->srvc_uuid.p_target_addr->bda, BD_ADDR_LEN); + p = (uint8_t*)(p_msg->p_cond_param->srvc_uuid.p_target_addr + 1); + } + if (p_cond->srvc_uuid.p_uuid_mask) { + p_msg->p_cond_param->srvc_uuid.p_uuid_mask = + (tBTA_DM_BLE_PF_COND_MASK*)p; + memcpy(p_msg->p_cond_param->srvc_uuid.p_uuid_mask, + p_cond->srvc_uuid.p_uuid_mask, sizeof(tBTA_DM_BLE_PF_COND_MASK)); + } } + } - bta_sys_sendmsg(p_msg); - + bta_sys_sendmsg(p_msg); } #else -void BTA_DmBleCfgFilterCondition(UNUSED_ATTR tBTA_DM_BLE_SCAN_COND_OP action, - UNUSED_ATTR tBTA_DM_BLE_PF_COND_TYPE cond_type, - UNUSED_ATTR tBTA_DM_BLE_PF_FILT_INDEX filt_index, - UNUSED_ATTR tBTA_DM_BLE_PF_COND_PARAM *p_cond, - UNUSED_ATTR tBTA_DM_BLE_PF_CFG_CBACK *p_cmpl_cback, - UNUSED_ATTR tBTA_DM_BLE_REF_VALUE ref_value) -{ -} +void BTA_DmBleCfgFilterCondition( + UNUSED_ATTR tBTA_DM_BLE_SCAN_COND_OP action, + UNUSED_ATTR tBTA_DM_BLE_PF_COND_TYPE cond_type, + UNUSED_ATTR tBTA_DM_BLE_PF_FILT_INDEX filt_index, + UNUSED_ATTR tBTA_DM_BLE_PF_COND_PARAM* p_cond, + UNUSED_ATTR tBTA_DM_BLE_PF_CFG_CBACK* p_cmpl_cback, + UNUSED_ATTR tBTA_DM_BLE_REF_VALUE ref_value) {} #endif /******************************************************************************* * * Function BTA_DmBleScanFilterSetup * - * Description This function is called to setup the adv data payload filter param + * Description This function is called to setup the adv data payload filter + *param * - * Parameters p_target: enable the filter condition on a target device; if NULL + * Parameters p_target: enable the filter condition on a target device; if + *NULL * filt_index - Filter index * p_filt_params -Filter parameters * ref_value - Reference value @@ -1438,42 +1411,42 @@ void BTA_DmBleCfgFilterCondition(UNUSED_ATTR tBTA_DM_BLE_SCAN_COND_OP action, #if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) void BTA_DmBleScanFilterSetup(uint8_t action, tBTA_DM_BLE_PF_FILT_INDEX filt_index, - tBTA_DM_BLE_PF_FILT_PARAMS *p_filt_params, - tBLE_BD_ADDR *p_target, - tBTA_DM_BLE_PF_PARAM_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - const size_t len = sizeof(tBTA_DM_API_SCAN_FILTER_PARAM_SETUP) + - sizeof(tBLE_BD_ADDR); - tBTA_DM_API_SCAN_FILTER_PARAM_SETUP *p_msg = - (tBTA_DM_API_SCAN_FILTER_PARAM_SETUP *)osi_calloc(len); - - APPL_TRACE_API("%s: %d", __func__, action); - - p_msg->hdr.event = BTA_DM_API_SCAN_FILTER_SETUP_EVT; - p_msg->action = action; - p_msg->filt_index = filt_index; - if (p_filt_params) { - memcpy(&p_msg->filt_params, p_filt_params, - sizeof(tBTA_DM_BLE_PF_FILT_PARAMS)); - } - p_msg->p_filt_param_cback = p_cmpl_cback; - p_msg->ref_value = ref_value; - - if (p_target) { - p_msg->p_target = (tBLE_BD_ADDR *)(p_msg + 1); - memcpy(p_msg->p_target, p_target, sizeof(tBLE_BD_ADDR)); - } - - bta_sys_sendmsg(p_msg); + tBTA_DM_BLE_PF_FILT_PARAMS* p_filt_params, + tBLE_BD_ADDR* p_target, + tBTA_DM_BLE_PF_PARAM_CBACK* p_cmpl_cback, + tBTA_DM_BLE_REF_VALUE ref_value) { + const size_t len = + sizeof(tBTA_DM_API_SCAN_FILTER_PARAM_SETUP) + sizeof(tBLE_BD_ADDR); + tBTA_DM_API_SCAN_FILTER_PARAM_SETUP* p_msg = + (tBTA_DM_API_SCAN_FILTER_PARAM_SETUP*)osi_calloc(len); + + APPL_TRACE_API("%s: %d", __func__, action); + + p_msg->hdr.event = BTA_DM_API_SCAN_FILTER_SETUP_EVT; + p_msg->action = action; + p_msg->filt_index = filt_index; + if (p_filt_params) { + memcpy(&p_msg->filt_params, p_filt_params, + sizeof(tBTA_DM_BLE_PF_FILT_PARAMS)); + } + p_msg->p_filt_param_cback = p_cmpl_cback; + p_msg->ref_value = ref_value; + + if (p_target) { + p_msg->p_target = (tBLE_BD_ADDR*)(p_msg + 1); + memcpy(p_msg->p_target, p_target, sizeof(tBLE_BD_ADDR)); + } + + bta_sys_sendmsg(p_msg); } #else -void BTA_DmBleScanFilterSetup(UNUSED_ATTR uint8_t action, - UNUSED_ATTR tBTA_DM_BLE_PF_FILT_INDEX filt_index, - UNUSED_ATTR tBTA_DM_BLE_PF_FILT_PARAMS *p_filt_params, - UNUSED_ATTR tBLE_BD_ADDR *p_target, - UNUSED_ATTR tBTA_DM_BLE_PF_PARAM_CBACK *p_cmpl_cback, - UNUSED_ATTR tBTA_DM_BLE_REF_VALUE ref_value) +void BTA_DmBleScanFilterSetup( + UNUSED_ATTR uint8_t action, + UNUSED_ATTR tBTA_DM_BLE_PF_FILT_INDEX filt_index, + UNUSED_ATTR tBTA_DM_BLE_PF_FILT_PARAMS* p_filt_params, + UNUSED_ATTR tBLE_BD_ADDR* p_target, + UNUSED_ATTR tBTA_DM_BLE_PF_PARAM_CBACK* p_cmpl_cback, + UNUSED_ATTR tBTA_DM_BLE_REF_VALUE ref_value) } #endif @@ -1488,24 +1461,24 @@ void BTA_DmBleScanFilterSetup(UNUSED_ATTR uint8_t action, * Returns void * ******************************************************************************/ -void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback) -{ - const size_t len = sizeof(tBTA_DM_API_ENERGY_INFO) + sizeof(tBLE_BD_ADDR); - tBTA_DM_API_ENERGY_INFO *p_msg = (tBTA_DM_API_ENERGY_INFO *)osi_calloc(len); +void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK* p_cmpl_cback) { + const size_t len = sizeof(tBTA_DM_API_ENERGY_INFO) + sizeof(tBLE_BD_ADDR); + tBTA_DM_API_ENERGY_INFO* p_msg = (tBTA_DM_API_ENERGY_INFO*)osi_calloc(len); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_DM_API_BLE_ENERGY_INFO_EVT; - p_msg->p_energy_info_cback = p_cmpl_cback; + p_msg->hdr.event = BTA_DM_API_BLE_ENERGY_INFO_EVT; + p_msg->p_energy_info_cback = p_cmpl_cback; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* * * Function BTA_DmEnableScanFilter * - * Description This function is called to enable the adv data payload filter + * Description This function is called to enable the adv data payload + *filter * * Parameters action - enable or disable the APCF feature * p_cmpl_cback - Command completed callback @@ -1515,61 +1488,63 @@ void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback) * ******************************************************************************/ #if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) -void BTA_DmEnableScanFilter(uint8_t action, tBTA_DM_BLE_PF_STATUS_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - const size_t len = sizeof(tBTA_DM_API_ENABLE_SCAN_FILTER) + - sizeof(tBLE_BD_ADDR); - tBTA_DM_API_ENABLE_SCAN_FILTER *p_msg = - (tBTA_DM_API_ENABLE_SCAN_FILTER *)osi_calloc(len); - - APPL_TRACE_API("%s: %d", __func__, action); - - p_msg->hdr.event = BTA_DM_API_SCAN_FILTER_ENABLE_EVT; - p_msg->action = action; - p_msg->ref_value = ref_value; - p_msg->p_filt_status_cback = p_cmpl_cback; - - bta_sys_sendmsg(p_msg); - +void BTA_DmEnableScanFilter(uint8_t action, + tBTA_DM_BLE_PF_STATUS_CBACK* p_cmpl_cback, + tBTA_DM_BLE_REF_VALUE ref_value) { + const size_t len = + sizeof(tBTA_DM_API_ENABLE_SCAN_FILTER) + sizeof(tBLE_BD_ADDR); + tBTA_DM_API_ENABLE_SCAN_FILTER* p_msg = + (tBTA_DM_API_ENABLE_SCAN_FILTER*)osi_calloc(len); + + APPL_TRACE_API("%s: %d", __func__, action); + + p_msg->hdr.event = BTA_DM_API_SCAN_FILTER_ENABLE_EVT; + p_msg->action = action; + p_msg->ref_value = ref_value; + p_msg->p_filt_status_cback = p_cmpl_cback; + + bta_sys_sendmsg(p_msg); } #else -void BTA_DmEnableScanFilter(UNUSED_ATTR uint8_t action, - UNUSED_ATTR tBTA_DM_BLE_PF_STATUS_CBACK *p_cmpl_cback, - UNUSED_ATTR tBTA_DM_BLE_REF_VALUE ref_value) -{ -} +void BTA_DmEnableScanFilter( + UNUSED_ATTR uint8_t action, + UNUSED_ATTR tBTA_DM_BLE_PF_STATUS_CBACK* p_cmpl_cback, + UNUSED_ATTR tBTA_DM_BLE_REF_VALUE ref_value) {} #endif /******************************************************************************* * * Function BTA_DmBleUpdateConnectionParams * - * Description Update connection parameters, can only be used when connection is up. + * Description Update connection parameters, can only be used when + *connection is up. * * Parameters: bd_addr - BD address of the peer - * min_int - minimum connection interval, [0x0004~ 0x4000] - * max_int - maximum connection interval, [0x0004~ 0x4000] + * min_int - minimum connection interval, [0x0004~ + *0x4000] + * max_int - maximum connection interval, [0x0004~ + *0x4000] * latency - slave latency [0 ~ 500] * timeout - supervision timeout [0x000a ~ 0xc80] * * Returns void * ******************************************************************************/ -void BTA_DmBleUpdateConnectionParams(const BD_ADDR bd_addr, uint16_t min_int, uint16_t max_int, - uint16_t latency, uint16_t timeout) -{ - tBTA_DM_API_UPDATE_CONN_PARAM *p_msg = - (tBTA_DM_API_UPDATE_CONN_PARAM *)osi_calloc(sizeof(tBTA_DM_API_UPDATE_CONN_PARAM)); - - p_msg->hdr.event = BTA_DM_API_UPDATE_CONN_PARAM_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->min_int = min_int; - p_msg->max_int = max_int; - p_msg->latency = latency; - p_msg->timeout = timeout; - - bta_sys_sendmsg(p_msg); +void BTA_DmBleUpdateConnectionParams(const BD_ADDR bd_addr, uint16_t min_int, + uint16_t max_int, uint16_t latency, + uint16_t timeout) { + tBTA_DM_API_UPDATE_CONN_PARAM* p_msg = + (tBTA_DM_API_UPDATE_CONN_PARAM*)osi_calloc( + sizeof(tBTA_DM_API_UPDATE_CONN_PARAM)); + + p_msg->hdr.event = BTA_DM_API_UPDATE_CONN_PARAM_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->min_int = min_int; + p_msg->max_int = max_int; + p_msg->latency = latency; + p_msg->timeout = timeout; + + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -1582,16 +1557,16 @@ void BTA_DmBleUpdateConnectionParams(const BD_ADDR bd_addr, uint16_t min_int, ui * * ******************************************************************************/ -void BTA_DmBleSetDataLength(BD_ADDR remote_device, uint16_t tx_data_length) -{ - tBTA_DM_API_BLE_SET_DATA_LENGTH *p_msg = - (tBTA_DM_API_BLE_SET_DATA_LENGTH *)osi_malloc(sizeof(tBTA_DM_API_BLE_SET_DATA_LENGTH)); +void BTA_DmBleSetDataLength(BD_ADDR remote_device, uint16_t tx_data_length) { + tBTA_DM_API_BLE_SET_DATA_LENGTH* p_msg = + (tBTA_DM_API_BLE_SET_DATA_LENGTH*)osi_malloc( + sizeof(tBTA_DM_API_BLE_SET_DATA_LENGTH)); - bdcpy(p_msg->remote_bda, remote_device); - p_msg->hdr.event = BTA_DM_API_SET_DATA_LENGTH_EVT; - p_msg->tx_data_length = tx_data_length; + bdcpy(p_msg->remote_bda, remote_device); + p_msg->hdr.event = BTA_DM_API_SET_DATA_LENGTH_EVT; + p_msg->tx_data_length = tx_data_length; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } #endif @@ -1610,35 +1585,39 @@ void BTA_DmBleSetDataLength(BD_ADDR remote_device, uint16_t tx_data_length) * p_callback - Pointer to callback function to indicat the * link encryption status * sec_act - This is the security action to indicate - * what knid of BLE security level is required for + * what knid of BLE security level is required + *for * the BLE link if the BLE is supported - * Note: This parameter is ignored for the BR/EDR link + * Note: This parameter is ignored for the + *BR/EDR link * or the BLE is not supported * * Returns void * ******************************************************************************/ -void BTA_DmSetEncryption(BD_ADDR bd_addr, tBTA_TRANSPORT transport, tBTA_DM_ENCRYPT_CBACK *p_callback, - tBTA_DM_BLE_SEC_ACT sec_act) -{ - tBTA_DM_API_SET_ENCRYPTION *p_msg = (tBTA_DM_API_SET_ENCRYPTION *)osi_calloc(sizeof(tBTA_DM_API_SET_ENCRYPTION)); +void BTA_DmSetEncryption(BD_ADDR bd_addr, tBTA_TRANSPORT transport, + tBTA_DM_ENCRYPT_CBACK* p_callback, + tBTA_DM_BLE_SEC_ACT sec_act) { + tBTA_DM_API_SET_ENCRYPTION* p_msg = (tBTA_DM_API_SET_ENCRYPTION*)osi_calloc( + sizeof(tBTA_DM_API_SET_ENCRYPTION)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_DM_API_SET_ENCRYPTION_EVT; - memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN); - p_msg->transport = transport; - p_msg->p_callback = p_callback; - p_msg->sec_act = sec_act; + p_msg->hdr.event = BTA_DM_API_SET_ENCRYPTION_EVT; + memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN); + p_msg->transport = transport; + p_msg->p_callback = p_callback; + p_msg->sec_act = sec_act; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* * * Function BTA_DmCloseACL * - * Description This function force to close an ACL connection and remove the + * Description This function force to close an ACL connection and remove + *the * device from the security database list of known devices. * * Parameters: bd_addr - Address of the peer device @@ -1647,19 +1626,19 @@ void BTA_DmSetEncryption(BD_ADDR bd_addr, tBTA_TRANSPORT transport, tBTA_DM_ENCR * Returns void * ******************************************************************************/ -void BTA_DmCloseACL(BD_ADDR bd_addr, bool remove_dev, tBTA_TRANSPORT transport) -{ - tBTA_DM_API_REMOVE_ACL *p_msg = - (tBTA_DM_API_REMOVE_ACL *)osi_calloc(sizeof(tBTA_DM_API_REMOVE_ACL)); +void BTA_DmCloseACL(BD_ADDR bd_addr, bool remove_dev, + tBTA_TRANSPORT transport) { + tBTA_DM_API_REMOVE_ACL* p_msg = + (tBTA_DM_API_REMOVE_ACL*)osi_calloc(sizeof(tBTA_DM_API_REMOVE_ACL)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_DM_API_REMOVE_ACL_EVT; - memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN); - p_msg->remove_dev = remove_dev; - p_msg->transport = transport; + p_msg->hdr.event = BTA_DM_API_REMOVE_ACL_EVT; + memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN); + p_msg->remove_dev = remove_dev; + p_msg->transport = transport; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } #if (BLE_INCLUDED == TRUE) @@ -1679,19 +1658,18 @@ void BTA_DmCloseACL(BD_ADDR bd_addr, bool remove_dev, tBTA_TRANSPORT transport) * ******************************************************************************/ extern void BTA_DmBleObserve(bool start, uint8_t duration, - tBTA_DM_SEARCH_CBACK *p_results_cb) -{ - tBTA_DM_API_BLE_OBSERVE *p_msg = - (tBTA_DM_API_BLE_OBSERVE *)osi_calloc(sizeof(tBTA_DM_API_BLE_OBSERVE)); + tBTA_DM_SEARCH_CBACK* p_results_cb) { + tBTA_DM_API_BLE_OBSERVE* p_msg = + (tBTA_DM_API_BLE_OBSERVE*)osi_calloc(sizeof(tBTA_DM_API_BLE_OBSERVE)); - APPL_TRACE_API("%s:start = %d ", __func__, start); + APPL_TRACE_API("%s:start = %d ", __func__, start); - p_msg->hdr.event = BTA_DM_API_BLE_OBSERVE_EVT; - p_msg->start = start; - p_msg->duration = duration; - p_msg->p_cback = p_results_cb; + p_msg->hdr.event = BTA_DM_API_BLE_OBSERVE_EVT; + p_msg->start = start; + p_msg->duration = duration; + p_msg->p_cback = p_results_cb; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -1703,40 +1681,34 @@ extern void BTA_DmBleObserve(bool start, uint8_t duration, * Returns void * ******************************************************************************/ -void BTA_VendorInit (void) -{ - APPL_TRACE_API("BTA_VendorInit"); -} +void BTA_VendorInit(void) { APPL_TRACE_API("BTA_VendorInit"); } /******************************************************************************* * * Function BTA_VendorCleanup * - * Description This function frees up Broadcom specific VS specific dynamic memory + * Description This function frees up Broadcom specific VS specific dynamic + *memory * * Returns void * ******************************************************************************/ -void BTA_VendorCleanup (void) -{ - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); +void BTA_VendorCleanup(void) { + tBTM_BLE_VSC_CB cmn_ble_vsc_cb; + BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); #if (BLE_INCLUDED == TRUE && BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) - if (cmn_ble_vsc_cb.max_filter > 0) - { - btm_ble_adv_filter_cleanup(); + if (cmn_ble_vsc_cb.max_filter > 0) { + btm_ble_adv_filter_cleanup(); #if (BLE_PRIVACY_SPT == TRUE) - btm_ble_resolving_list_cleanup (); + btm_ble_resolving_list_cleanup(); #endif - } + } - if (cmn_ble_vsc_cb.tot_scan_results_strg > 0) - btm_ble_batchscan_cleanup(); + if (cmn_ble_vsc_cb.tot_scan_results_strg > 0) btm_ble_batchscan_cleanup(); #endif - if(cmn_ble_vsc_cb.adv_inst_max > 0) - btm_ble_multi_adv_cleanup(); + if (cmn_ble_vsc_cb.adv_inst_max > 0) btm_ble_multi_adv_cleanup(); } #endif diff --git a/system/bta/dm/bta_dm_cfg.cc b/system/bta/dm/bta_dm_cfg.cc index 2e7f5ec2abe..37d9383dcd2 100644 --- a/system/bta/dm/bta_dm_cfg.cc +++ b/system/bta/dm/bta_dm_cfg.cc @@ -26,40 +26,41 @@ #include #include "bt_target.h" -#include "bta_sys.h" #include "bta_api.h" #include "bta_dm_int.h" #include "bta_jv_api.h" +#include "bta_sys.h" #ifndef BTA_DM_LINK_POLICY_SETTINGS -#define BTA_DM_LINK_POLICY_SETTINGS (HCI_ENABLE_MASTER_SLAVE_SWITCH | HCI_ENABLE_HOLD_MODE | HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE) +#define BTA_DM_LINK_POLICY_SETTINGS \ + (HCI_ENABLE_MASTER_SLAVE_SWITCH | HCI_ENABLE_HOLD_MODE | \ + HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE) #endif /* page timeout in 625uS */ #ifndef BTA_DM_PAGE_TIMEOUT -#define BTA_DM_PAGE_TIMEOUT 8192 +#define BTA_DM_PAGE_TIMEOUT 8192 #endif /* link supervision timeout in 625uS (5 secs) */ #ifndef BTA_DM_LINK_TIMEOUT -#define BTA_DM_LINK_TIMEOUT 8000 +#define BTA_DM_LINK_TIMEOUT 8000 #endif /* TRUE to avoid scatternet when av is streaming (be the master) */ #ifndef BTA_DM_AVOID_SCATTER_A2DP -#define BTA_DM_AVOID_SCATTER_A2DP TRUE +#define BTA_DM_AVOID_SCATTER_A2DP TRUE #endif -/* For Insight, PM cfg lookup tables are runtime configurable (to allow tweaking of params for power consumption measurements) */ +/* For Insight, PM cfg lookup tables are runtime configurable (to allow tweaking + * of params for power consumption measurements) */ #ifndef BTE_SIM_APP -#define tBTA_DM_PM_TYPE_QUALIFIER const +#define tBTA_DM_PM_TYPE_QUALIFIER const #else #define tBTA_DM_PM_TYPE_QUALIFIER #endif - -const tBTA_DM_CFG bta_dm_cfg = -{ +const tBTA_DM_CFG bta_dm_cfg = { /* mobile phone COD */ BTA_DM_COD, /* link policy settings */ @@ -69,8 +70,7 @@ const tBTA_DM_CFG bta_dm_cfg = /* link supervision timeout in 625uS*/ BTA_DM_LINK_TIMEOUT, /* true to avoid scatternet when av is streaming (be the master) */ - BTA_DM_AVOID_SCATTER_A2DP -}; + BTA_DM_AVOID_SCATTER_A2DP}; #ifndef BTA_DM_SCATTERNET /* By default, allow partial scatternet */ @@ -91,448 +91,499 @@ const tBTA_DM_CFG bta_dm_cfg = /* By default, AV role (backward BTA_MASTER_ROLE_PREF) */ #define BTA_PANU_ROLE BTA_SLAVE_ROLE_ONLY #endif -#define BTA_DM_NUM_RM_ENTRY 6 +#define BTA_DM_NUM_RM_ENTRY 6 /* appids for PAN used by insight sample application these have to be same as defined in btui_int.h */ -#define BTUI_PAN_ID_PANU 0 -#define BTUI_PAN_ID_NAP 1 -#define BTUI_PAN_ID_GN 2 +#define BTUI_PAN_ID_PANU 0 +#define BTUI_PAN_ID_NAP 1 +#define BTUI_PAN_ID_GN 2 /* First element is always for SYS: app_id = # of entries table, cfg is device scatternet support */ -const tBTA_DM_RM bta_dm_rm_cfg[] = -{ +const tBTA_DM_RM bta_dm_rm_cfg[] = { {BTA_ID_SYS, BTA_DM_NUM_RM_ENTRY, BTA_DM_SCATTERNET}, {BTA_ID_PAN, BTUI_PAN_ID_NAP, BTA_ANY_ROLE}, {BTA_ID_PAN, BTUI_PAN_ID_GN, BTA_ANY_ROLE}, {BTA_ID_PAN, BTA_APP_ID_PAN_MULTI, BTA_MASTER_ROLE_ONLY}, {BTA_ID_PAN, BTUI_PAN_ID_PANU, BTA_PANU_ROLE}, - {BTA_ID_HH, BTA_ALL_APP_ID, BTA_HH_ROLE}, - {BTA_ID_AV, BTA_ALL_APP_ID, BTA_AV_ROLE} -}; - + {BTA_ID_HH, BTA_ALL_APP_ID, BTA_HH_ROLE}, + {BTA_ID_AV, BTA_ALL_APP_ID, BTA_AV_ROLE}}; -tBTA_DM_CFG *p_bta_dm_cfg = (tBTA_DM_CFG *)&bta_dm_cfg; +tBTA_DM_CFG* p_bta_dm_cfg = (tBTA_DM_CFG*)&bta_dm_cfg; -tBTA_DM_RM *p_bta_dm_rm_cfg = (tBTA_DM_RM *)&bta_dm_rm_cfg; +tBTA_DM_RM* p_bta_dm_rm_cfg = (tBTA_DM_RM*)&bta_dm_rm_cfg; #if (BLE_INCLUDED == TRUE) -# define BTA_DM_NUM_PM_ENTRY 23 /* number of entries in bta_dm_pm_cfg except the first */ -# define BTA_DM_NUM_PM_SPEC 15 /* number of entries in bta_dm_pm_spec */ +#define BTA_DM_NUM_PM_ENTRY \ + 23 /* number of entries in bta_dm_pm_cfg except the first */ +#define BTA_DM_NUM_PM_SPEC 15 /* number of entries in bta_dm_pm_spec */ #else -# define BTA_DM_NUM_PM_ENTRY 21 /* number of entries in bta_dm_pm_cfg except the first */ -# define BTA_DM_NUM_PM_SPEC 13 /* number of entries in bta_dm_pm_spec */ +#define BTA_DM_NUM_PM_ENTRY \ + 21 /* number of entries in bta_dm_pm_cfg except the first */ +#define BTA_DM_NUM_PM_SPEC 13 /* number of entries in bta_dm_pm_spec */ #endif -tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_CFG bta_dm_pm_cfg[BTA_DM_NUM_PM_ENTRY + 1] = -{ - {BTA_ID_SYS, BTA_DM_NUM_PM_ENTRY, 0}, /* reserved: specifies length of this table. */ - {BTA_ID_AG, BTA_ALL_APP_ID, 0}, /* ag uses first spec table for app id 0 */ - {BTA_ID_CT, 1, 1}, /* ct (BTA_ID_CT,APP ID=1) spec table */ - {BTA_ID_CG, BTA_ALL_APP_ID, 1}, /* cg resue ct spec table */ - {BTA_ID_DG, BTA_ALL_APP_ID, 2}, /* dg spec table */ - {BTA_ID_AV, BTA_ALL_APP_ID, 4}, /* av spec table */ - {BTA_ID_AVK, BTA_ALL_APP_ID, 12}, /* avk spec table */ - {BTA_ID_FTC, BTA_ALL_APP_ID, 6}, /* ftc spec table */ - {BTA_ID_FTS, BTA_ALL_APP_ID, 7}, /* fts spec table */ - {BTA_ID_HD, BTA_ALL_APP_ID, 3}, /* hd spec table */ - {BTA_ID_HH, BTA_ALL_APP_ID, 5}, /* hh spec table */ - {BTA_ID_PBC, BTA_ALL_APP_ID, 2}, /* reuse dg spec table */ - {BTA_ID_PBS, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ - {BTA_ID_OPC, BTA_ALL_APP_ID, 6}, /* reuse ftc spec table */ - {BTA_ID_OPS, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ - {BTA_ID_MSE, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ - {BTA_ID_JV, BTA_JV_PM_ID_1, 6}, /* app BTA_JV_PM_ID_1, reuse ftc spec table */ - {BTA_ID_JV, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ - {BTA_ID_HL, BTA_ALL_APP_ID, 8}, /* reuse fts spec table */ - {BTA_ID_PAN, BTUI_PAN_ID_PANU, 9}, /* PANU spec table */ - {BTA_ID_PAN, BTUI_PAN_ID_NAP, 10}, /* NAP spec table */ - {BTA_ID_HS, BTA_ALL_APP_ID, 11} /* HS spec table */ +tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_CFG + bta_dm_pm_cfg[BTA_DM_NUM_PM_ENTRY + 1] = { + {BTA_ID_SYS, BTA_DM_NUM_PM_ENTRY, + 0}, /* reserved: specifies length of this table. */ + {BTA_ID_AG, BTA_ALL_APP_ID, + 0}, /* ag uses first spec table for app id 0 */ + {BTA_ID_CT, 1, 1}, /* ct (BTA_ID_CT,APP ID=1) spec table */ + {BTA_ID_CG, BTA_ALL_APP_ID, 1}, /* cg resue ct spec table */ + {BTA_ID_DG, BTA_ALL_APP_ID, 2}, /* dg spec table */ + {BTA_ID_AV, BTA_ALL_APP_ID, 4}, /* av spec table */ + {BTA_ID_AVK, BTA_ALL_APP_ID, 12}, /* avk spec table */ + {BTA_ID_FTC, BTA_ALL_APP_ID, 6}, /* ftc spec table */ + {BTA_ID_FTS, BTA_ALL_APP_ID, 7}, /* fts spec table */ + {BTA_ID_HD, BTA_ALL_APP_ID, 3}, /* hd spec table */ + {BTA_ID_HH, BTA_ALL_APP_ID, 5}, /* hh spec table */ + {BTA_ID_PBC, BTA_ALL_APP_ID, 2}, /* reuse dg spec table */ + {BTA_ID_PBS, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ + {BTA_ID_OPC, BTA_ALL_APP_ID, 6}, /* reuse ftc spec table */ + {BTA_ID_OPS, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ + {BTA_ID_MSE, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ + {BTA_ID_JV, BTA_JV_PM_ID_1, + 6}, /* app BTA_JV_PM_ID_1, reuse ftc spec table */ + {BTA_ID_JV, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ + {BTA_ID_HL, BTA_ALL_APP_ID, 8}, /* reuse fts spec table */ + {BTA_ID_PAN, BTUI_PAN_ID_PANU, 9}, /* PANU spec table */ + {BTA_ID_PAN, BTUI_PAN_ID_NAP, 10}, /* NAP spec table */ + {BTA_ID_HS, BTA_ALL_APP_ID, 11} /* HS spec table */ #if (BLE_INCLUDED == TRUE) - ,{BTA_ID_GATTC, BTA_ALL_APP_ID, 13} /* gattc spec table */ - ,{BTA_ID_GATTS, BTA_ALL_APP_ID, 14} /* gatts spec table */ + , + {BTA_ID_GATTC, BTA_ALL_APP_ID, 13} /* gattc spec table */ + , + {BTA_ID_GATTS, BTA_ALL_APP_ID, 14} /* gatts spec table */ #endif }; -tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_SPEC bta_dm_pm_spec[BTA_DM_NUM_PM_SPEC] = -{ - /* AG : 0 */ - { - (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ +tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_SPEC bta_dm_pm_spec[BTA_DM_NUM_PM_SPEC] = { + /* AG : 0 */ + {(BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_SNIFF_SCO_OPEN_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_RETRY, 7000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* CT, CG : 1 */ - { - (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ + { + {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_SNIFF_SCO_OPEN_IDX, 7000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ + {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_RETRY, 7000}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* CT, CG : 1 */ + {(BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_PARK, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open park */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open sniff */ - {{BTA_DM_PM_PARK, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close park */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* DG, PBC : 2 */ - { - (BTA_DM_PM_ACTIVE), /* no power saving mode allowed */ + { + {{BTA_DM_PM_PARK, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open park */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco open sniff */ + {{BTA_DM_PM_PARK, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco close park */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_RETRY, 5000}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* DG, PBC : 2 */ + {(BTA_DM_PM_ACTIVE), /* no power saving mode allowed */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF, 1000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* HD : 3 */ - { - (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ + { + {{BTA_DM_PM_SNIFF, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF, 1000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* HD : 3 */ + {(BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR3), /* the SSR entry */ + (BTA_DM_PM_SSR3), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF_HD_ACTIVE_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF_HD_IDLE_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_SNIFF_HD_ACTIVE_IDX, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* AV : 4 */ - { - (BTA_DM_PM_SNIFF), /* allow sniff */ + { + {{BTA_DM_PM_SNIFF_HD_ACTIVE_IDX, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF_HD_IDLE_IDX, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_SNIFF_HD_ACTIVE_IDX, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* AV : 4 */ + {(BTA_DM_PM_SNIFF), /* allow sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* HH : 5 */ - { - (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ + { + {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* HH : 5 */ + {(BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR1), /* the SSR entry */ + (BTA_DM_PM_SSR1), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF_HH_OPEN_IDX, BTA_DM_PM_HH_OPEN_DELAY},{BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close, used for HH suspend */ - {{BTA_DM_PM_SNIFF_HH_IDLE_IDX, BTA_DM_PM_HH_IDLE_DELAY}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_SNIFF_HH_ACTIVE_IDX, BTA_DM_PM_HH_ACTIVE_DELAY}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* FTC, OPC, JV : 6 */ - { - (BTA_DM_PM_SNIFF), /* allow sniff */ + { + {{BTA_DM_PM_SNIFF_HH_OPEN_IDX, BTA_DM_PM_HH_OPEN_DELAY}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco close, used for HH suspend */ + {{BTA_DM_PM_SNIFF_HH_IDLE_IDX, BTA_DM_PM_HH_IDLE_DELAY}, + {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_SNIFF_HH_ACTIVE_IDX, BTA_DM_PM_HH_ACTIVE_DELAY}, + {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* FTC, OPC, JV : 6 */ + {(BTA_DM_PM_SNIFF), /* allow sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* FTS, PBS, OPS, MSE, BTA_JV_PM_ID_1 : 7 */ - { - (BTA_DM_PM_SNIFF), /* allow sniff */ + { + {{BTA_DM_PM_ACTIVE, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* FTS, PBS, OPS, MSE, BTA_JV_PM_ID_1 : 7 */ + {(BTA_DM_PM_SNIFF), /* allow sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, BTA_FTS_OPS_IDLE_TO_SNIFF_DELAY_MS}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* HL : 8 */ - { - (BTA_DM_PM_SNIFF), /* allow sniff */ + { + {{BTA_DM_PM_ACTIVE, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF_A2DP_IDX, BTA_FTS_OPS_IDLE_TO_SNIFF_DELAY_MS}, + {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* HL : 8 */ + {(BTA_DM_PM_SNIFF), /* allow sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* PANU : 9 */ - { - (BTA_DM_PM_SNIFF), /* allow sniff */ + { + {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* PANU : 9 */ + {(BTA_DM_PM_SNIFF), /* allow sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* NAP : 10 */ - { - (BTA_DM_PM_SNIFF), /* allow sniff */ + { + {{BTA_DM_PM_ACTIVE, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* NAP : 10 */ + {(BTA_DM_PM_SNIFF), /* allow sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* HS : 11 */ - { - (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ + { + {{BTA_DM_PM_ACTIVE, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* HS : 11 */ + {(BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_SNIFF3, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ - {{BTA_DM_PM_SNIFF, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ - {{BTA_DM_PM_SNIFF, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_RETRY, 7000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - }, - - /* AVK : 12 */ - { - (BTA_DM_PM_SNIFF), /* allow sniff */ + { + {{BTA_DM_PM_SNIFF, 7000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_SNIFF3, 7000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ + {{BTA_DM_PM_SNIFF, 7000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ + {{BTA_DM_PM_SNIFF, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_RETRY, 7000}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }}, + + /* AVK : 12 */ + {(BTA_DM_PM_SNIFF), /* allow sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF, 3000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF4, 3000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - } + { + {{BTA_DM_PM_SNIFF, 3000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF4, 3000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + {{BTA_DM_PM_NO_ACTION, 0}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }} #if (BLE_INCLUDED == TRUE) /* GATTC : 13 */ - ,{ - (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ + , + {(BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_SNIFF_A2DP_IDX, 10000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, 10000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + { + {{BTA_DM_PM_SNIFF_A2DP_IDX, 10000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_SNIFF_A2DP_IDX, 10000}, + {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ #if (AMP_INCLUDED == TRUE) - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* amp */ + {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* amp */ #endif - {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - } + {{BTA_DM_PM_RETRY, 5000}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }} /* GATTS : 14 */ - ,{ - (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ + , + {(BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ #if (BTM_SSR_INCLUDED == TRUE) - (BTA_DM_PM_SSR2), /* the SSR entry */ + (BTA_DM_PM_SSR2), /* the SSR entry */ #endif - { - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ + { + {{BTA_DM_PM_NO_PREF, 0}, + {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ #if (AMP_INCLUDED == TRUE) - {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* amp */ + {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* amp */ #endif - {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ - } - } + {{BTA_DM_PM_RETRY, 5000}, + {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ + }} #endif -#ifdef BTE_SIM_APP /* For Insight builds only */ - /* Entries at the end of the pm_spec table are user-defined (runtime configurable), - for power consumption experiments. - Insight finds the first user-defined entry by looking for the first BTA_DM_PM_NO_PREF. - The number of user_defined specs is defined by BTA_SWRAP_UD_PM_SPEC_COUNT */ - , - {BTA_DM_PM_NO_PREF}, /* pm_spec USER_DEFINED_0 */ - {BTA_DM_PM_NO_PREF} /* pm_spec USER_DEFINED_1 */ -#endif /* BTE_SIM_APP */ +#ifdef BTE_SIM_APP /* For Insight builds only */ + /* Entries at the end of the pm_spec table are user-defined (runtime + configurable), + for power consumption experiments. + Insight finds the first user-defined entry by looking for the first + BTA_DM_PM_NO_PREF. + The number of user_defined specs is defined by + BTA_SWRAP_UD_PM_SPEC_COUNT */ + , + {BTA_DM_PM_NO_PREF}, /* pm_spec USER_DEFINED_0 */ + {BTA_DM_PM_NO_PREF} /* pm_spec USER_DEFINED_1 */ +#endif /* BTE_SIM_APP */ }; /* Please refer to the SNIFF table definitions in bta_api.h. * * Adding to or Modifying the Table - * Additional sniff parameter entries can be added for BTA_DM_PM_SNIFF5 - BTA_DM_PM_SNIFF7. - * Overrides of additional table entries can be specified in bdroid_buildcfg.h. If additional - * sniff parameter entries are added or an override of an existing entry is specified in - * bdroid_buildcfg.h then the BTA_DM_PM_*_IDX defines in bta_api.h will need to be match the new + * Additional sniff parameter entries can be added for BTA_DM_PM_SNIFF5 - + * BTA_DM_PM_SNIFF7. + * Overrides of additional table entries can be specified in bdroid_buildcfg.h. + * If additional + * sniff parameter entries are added or an override of an existing entry is + * specified in + * bdroid_buildcfg.h then the BTA_DM_PM_*_IDX defines in bta_api.h will need to + * be match the new * ordering. * * Table Ordering - * Sniff Table entries must be ordered from highest latency (biggest interval) to lowest latency. - * If there is a conflict among the connected services the setting with the lowest latency will + * Sniff Table entries must be ordered from highest latency (biggest interval) + * to lowest latency. + * If there is a conflict among the connected services the setting with the + * lowest latency will * be selected. */ -tBTA_DM_PM_TYPE_QUALIFIER tBTM_PM_PWR_MD bta_dm_pm_md[] = -{ -/* - * More sniff parameter entries can be added for - * BTA_DM_PM_SNIFF3 - BTA_DM_PM_SNIFF7, if needed. When entries are added or - * removed, BTA_DM_PM_PARK_IDX needs to be updated to reflect the actual index - * BTA_DM_PM_PARK_IDX is defined in bta_api.h and can be override by the - * bdroid_buildcfg.h settings. - * The SNIFF table entries must be in the order from highest latency (biggest - * interval) to lowest latency. If there's a conflict among the connected - * services, the setting with lowest latency wins. - */ -/* sniff modes: max interval, min interval, attempt, timeout */ - {BTA_DM_PM_SNIFF_MAX, BTA_DM_PM_SNIFF_MIN, BTA_DM_PM_SNIFF_ATTEMPT, BTA_DM_PM_SNIFF_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF - A2DP */ - {BTA_DM_PM_SNIFF1_MAX, BTA_DM_PM_SNIFF1_MIN, BTA_DM_PM_SNIFF1_ATTEMPT, BTA_DM_PM_SNIFF1_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF1 */ - {BTA_DM_PM_SNIFF2_MAX, BTA_DM_PM_SNIFF2_MIN, BTA_DM_PM_SNIFF2_ATTEMPT, BTA_DM_PM_SNIFF2_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF2- HD idle */ - {BTA_DM_PM_SNIFF3_MAX, BTA_DM_PM_SNIFF3_MIN, BTA_DM_PM_SNIFF3_ATTEMPT, BTA_DM_PM_SNIFF3_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF3- SCO open */ - {BTA_DM_PM_SNIFF4_MAX, BTA_DM_PM_SNIFF4_MIN, BTA_DM_PM_SNIFF4_ATTEMPT, BTA_DM_PM_SNIFF4_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF4- HD active */ - {BTA_DM_PM_SNIFF5_MAX, BTA_DM_PM_SNIFF5_MIN, BTA_DM_PM_SNIFF5_ATTEMPT, BTA_DM_PM_SNIFF5_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF5- HD active */ - {BTA_DM_PM_PARK_MAX, BTA_DM_PM_PARK_MIN, BTA_DM_PM_PARK_ATTEMPT, BTA_DM_PM_PARK_TIMEOUT, BTM_PM_MD_PARK} - -#ifdef BTE_SIM_APP /* For Insight builds only */ - /* Entries at the end of the bta_dm_pm_md table are user-defined (runtime configurable), - for power consumption experiments. - Insight finds the first user-defined entry by looking for the first 'max=0'. - The number of user_defined specs is defined by BTA_SWRAP_UD_PM_DM_COUNT */ - , - {0}, /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_0 */ - {0}, /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_0 */ - - {0}, /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_1 */ - {0} /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_1 */ -#endif /* BTE_SIM_APP */ +tBTA_DM_PM_TYPE_QUALIFIER tBTM_PM_PWR_MD bta_dm_pm_md[] = { + /* + * More sniff parameter entries can be added for + * BTA_DM_PM_SNIFF3 - BTA_DM_PM_SNIFF7, if needed. When entries are added or + * removed, BTA_DM_PM_PARK_IDX needs to be updated to reflect the actual + * index + * BTA_DM_PM_PARK_IDX is defined in bta_api.h and can be override by the + * bdroid_buildcfg.h settings. + * The SNIFF table entries must be in the order from highest latency + * (biggest + * interval) to lowest latency. If there's a conflict among the connected + * services, the setting with lowest latency wins. + */ + /* sniff modes: max interval, min interval, attempt, timeout */ + {BTA_DM_PM_SNIFF_MAX, BTA_DM_PM_SNIFF_MIN, BTA_DM_PM_SNIFF_ATTEMPT, + BTA_DM_PM_SNIFF_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF - A2DP */ + {BTA_DM_PM_SNIFF1_MAX, BTA_DM_PM_SNIFF1_MIN, BTA_DM_PM_SNIFF1_ATTEMPT, + BTA_DM_PM_SNIFF1_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF1 */ + {BTA_DM_PM_SNIFF2_MAX, BTA_DM_PM_SNIFF2_MIN, BTA_DM_PM_SNIFF2_ATTEMPT, + BTA_DM_PM_SNIFF2_TIMEOUT, + BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF2- HD idle */ + {BTA_DM_PM_SNIFF3_MAX, BTA_DM_PM_SNIFF3_MIN, BTA_DM_PM_SNIFF3_ATTEMPT, + BTA_DM_PM_SNIFF3_TIMEOUT, + BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF3- SCO open */ + {BTA_DM_PM_SNIFF4_MAX, BTA_DM_PM_SNIFF4_MIN, BTA_DM_PM_SNIFF4_ATTEMPT, + BTA_DM_PM_SNIFF4_TIMEOUT, + BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF4- HD active */ + {BTA_DM_PM_SNIFF5_MAX, BTA_DM_PM_SNIFF5_MIN, BTA_DM_PM_SNIFF5_ATTEMPT, + BTA_DM_PM_SNIFF5_TIMEOUT, + BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF5- HD active */ + {BTA_DM_PM_PARK_MAX, BTA_DM_PM_PARK_MIN, BTA_DM_PM_PARK_ATTEMPT, + BTA_DM_PM_PARK_TIMEOUT, BTM_PM_MD_PARK} + +#ifdef BTE_SIM_APP /* For Insight builds only */ + /* Entries at the end of the bta_dm_pm_md table are user-defined (runtime + configurable), + for power consumption experiments. + Insight finds the first user-defined entry by looking for the first + 'max=0'. + The number of user_defined specs is defined by BTA_SWRAP_UD_PM_DM_COUNT + */ + , + {0}, /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_0 + */ + {0}, /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_0 */ + + {0}, /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_1 + */ + {0} /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_1 */ +#endif /* BTE_SIM_APP */ }; /* 0=max_lat -> no SSR */ /* the smaller of the SSR max latency wins. - * the entries in this table must be from highest latency (biggest interval) to lowest latency */ + * the entries in this table must be from highest latency (biggest interval) to + * lowest latency */ #if (BTM_SSR_INCLUDED == TRUE) -tBTA_DM_SSR_SPEC bta_dm_ssr_spec[] = -{ +tBTA_DM_SSR_SPEC bta_dm_ssr_spec[] = { /*max_lat, min_rmt_to, min_loc_to*/ - {0, 0, 0}, /* BTA_DM_PM_SSR0 - do not use SSR */ - {0, 0, 2}, /* BTA_DM_PM_SSR1 - HH, can NOT share entry with any other profile, - seting default max latency and min remote timeout as 0, - and always read individual device preference from HH module */ - {1200, 2, 2}, /* BTA_DM_PM_SSR2 - others (as long as sniff is allowed)*/ - {360, 160, 2} /* BTA_DM_PM_SSR3 - HD */ + {0, 0, 0}, /* BTA_DM_PM_SSR0 - do not use SSR */ + {0, 0, + 2}, /* BTA_DM_PM_SSR1 - HH, can NOT share entry with any other profile, + seting default max latency and min remote timeout as 0, + and always read individual device preference from HH module */ + {1200, 2, 2}, /* BTA_DM_PM_SSR2 - others (as long as sniff is allowed)*/ + {360, 160, 2} /* BTA_DM_PM_SSR3 - HD */ }; -tBTA_DM_SSR_SPEC *p_bta_dm_ssr_spec = (tBTA_DM_SSR_SPEC *)&bta_dm_ssr_spec; +tBTA_DM_SSR_SPEC* p_bta_dm_ssr_spec = (tBTA_DM_SSR_SPEC*)&bta_dm_ssr_spec; #endif -tBTA_DM_PM_CFG *p_bta_dm_pm_cfg = (tBTA_DM_PM_CFG *)&bta_dm_pm_cfg; -tBTA_DM_PM_SPEC *p_bta_dm_pm_spec = (tBTA_DM_PM_SPEC *)&bta_dm_pm_spec; -tBTM_PM_PWR_MD *p_bta_dm_pm_md = (tBTM_PM_PWR_MD *)&bta_dm_pm_md; +tBTA_DM_PM_CFG* p_bta_dm_pm_cfg = (tBTA_DM_PM_CFG*)&bta_dm_pm_cfg; +tBTA_DM_PM_SPEC* p_bta_dm_pm_spec = (tBTA_DM_PM_SPEC*)&bta_dm_pm_spec; +tBTM_PM_PWR_MD* p_bta_dm_pm_md = (tBTM_PM_PWR_MD*)&bta_dm_pm_md; /* The performance impact of EIR packet size * @@ -547,42 +598,45 @@ tBTM_PM_PWR_MD *p_bta_dm_pm_md = (tBTM_PM_PWR_MD *)&bta_dm_pm_md; * * When BTM_EIR_DEFAULT_FEC_REQUIRED is false, * 1 to 27 bytes, DH1 is used but only robust at short range. - * 28 to 183 bytes, DH3 is used but only robust at short range and impacts inquiry + * 28 to 183 bytes, DH3 is used but only robust at short range and impacts + * inquiry * scan time with large number of devices. * 184 to 240 bytes, DH5 is used but it not recommended. */ #if (BTA_EIR_CANNED_UUID_LIST == TRUE) - /* for example */ -const uint8_t bta_dm_eir_uuid16_list[] = { 0x08, 0x11, /* Headset */ - 0x1E, 0x11, /* Handsfree */ - 0x0E, 0x11, /* AV Remote Control */ - 0x0B, 0x11, /* Audio Sink */ +/* for example */ +const uint8_t bta_dm_eir_uuid16_list[] = { + 0x08, 0x11, /* Headset */ + 0x1E, 0x11, /* Handsfree */ + 0x0E, 0x11, /* AV Remote Control */ + 0x0B, 0x11, /* Audio Sink */ }; #endif // BTA_EIR_CANNED_UUID_LIST /* Extended Inquiry Response */ -const tBTA_DM_EIR_CONF bta_dm_eir_cfg = -{ - 50, /* minimum length of local name when it is shortened */ - /* if length of local name is longer than this and EIR has not enough */ - /* room for all UUID list then local name is shortened to this length */ +const tBTA_DM_EIR_CONF bta_dm_eir_cfg = { + 50, /* minimum length of local name when it is shortened */ + /* if length of local name is longer than this and EIR has not enough */ + /* room for all UUID list then local name is shortened to this length */ #if (BTA_EIR_CANNED_UUID_LIST == TRUE) - 8, - (uint8_t *)bta_dm_eir_uuid16_list, -#else // BTA_EIR_CANNED_UUID_LIST - { /* mask of UUID list in EIR */ - 0xFFFFFFFF, /* LSB is the first UUID of the first 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */ - 0xFFFFFFFF /* LSB is the first UUID of the next 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */ + 8, (uint8_t*)bta_dm_eir_uuid16_list, +#else // BTA_EIR_CANNED_UUID_LIST + { + /* mask of UUID list in EIR */ + 0xFFFFFFFF, /* LSB is the first UUID of the first 32 UUIDs in + BTM_EIR_UUID_LKUP_TBL */ + 0xFFFFFFFF /* LSB is the first UUID of the next 32 UUIDs in + BTM_EIR_UUID_LKUP_TBL */ /* BTM_EIR_UUID_LKUP_TBL can be overrided */ }, -#endif // BTA_EIR_CANNED_UUID_LIST - NULL, /* Inquiry TX power */ - 0, /* length of flags in bytes */ - NULL, /* flags for EIR */ - 0, /* length of manufacturer specific in bytes */ - NULL, /* manufacturer specific */ - 0, /* length of additional data in bytes */ - NULL /* additional data */ +#endif // BTA_EIR_CANNED_UUID_LIST + NULL, /* Inquiry TX power */ + 0, /* length of flags in bytes */ + NULL, /* flags for EIR */ + 0, /* length of manufacturer specific in bytes */ + NULL, /* manufacturer specific */ + 0, /* length of additional data in bytes */ + NULL /* additional data */ }; -tBTA_DM_EIR_CONF *p_bta_dm_eir_cfg = (tBTA_DM_EIR_CONF*)&bta_dm_eir_cfg; +tBTA_DM_EIR_CONF* p_bta_dm_eir_cfg = (tBTA_DM_EIR_CONF*)&bta_dm_eir_cfg; diff --git a/system/bta/dm/bta_dm_ci.cc b/system/bta/dm/bta_dm_ci.cc index e0fe2862025..d3616d4957c 100644 --- a/system/bta/dm/bta_dm_ci.cc +++ b/system/bta/dm/bta_dm_ci.cc @@ -24,11 +24,10 @@ #include #include "bt_common.h" -#include "bta_sys.h" #include "bta_api.h" -#include "bta_dm_int.h" #include "bta_dm_ci.h" - +#include "bta_dm_int.h" +#include "bta_sys.h" /******************************************************************************* * @@ -41,20 +40,20 @@ * Returns void * ******************************************************************************/ -void bta_dm_ci_io_req(BD_ADDR bd_addr, tBTA_IO_CAP io_cap, tBTA_OOB_DATA oob_data, - tBTA_AUTH_REQ auth_req) +void bta_dm_ci_io_req(BD_ADDR bd_addr, tBTA_IO_CAP io_cap, + tBTA_OOB_DATA oob_data, tBTA_AUTH_REQ auth_req) { - tBTA_DM_CI_IO_REQ *p_msg = - (tBTA_DM_CI_IO_REQ *)osi_malloc(sizeof(tBTA_DM_CI_IO_REQ)); + tBTA_DM_CI_IO_REQ* p_msg = + (tBTA_DM_CI_IO_REQ*)osi_malloc(sizeof(tBTA_DM_CI_IO_REQ)); - p_msg->hdr.event = BTA_DM_CI_IO_REQ_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->io_cap = io_cap; - p_msg->oob_data = oob_data; - p_msg->auth_req = auth_req; + p_msg->hdr.event = BTA_DM_CI_IO_REQ_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->io_cap = io_cap; + p_msg->oob_data = oob_data; + p_msg->auth_req = auth_req; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } /******************************************************************************* @@ -68,18 +67,18 @@ void bta_dm_ci_io_req(BD_ADDR bd_addr, tBTA_IO_CAP io_cap, tBTA_OOB_DATA oob_dat * Returns void * ******************************************************************************/ -void bta_dm_ci_rmt_oob(bool accept, BD_ADDR bd_addr, BT_OCTET16 c, BT_OCTET16 r) -{ - tBTA_DM_CI_RMT_OOB *p_msg = - (tBTA_DM_CI_RMT_OOB *)osi_malloc(sizeof(tBTA_DM_CI_RMT_OOB)); +void bta_dm_ci_rmt_oob(bool accept, BD_ADDR bd_addr, BT_OCTET16 c, + BT_OCTET16 r) { + tBTA_DM_CI_RMT_OOB* p_msg = + (tBTA_DM_CI_RMT_OOB*)osi_malloc(sizeof(tBTA_DM_CI_RMT_OOB)); - p_msg->hdr.event = BTA_DM_CI_RMT_OOB_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->accept = accept; - memcpy(p_msg->c, c, BT_OCTET16_LEN); - memcpy(p_msg->r, r, BT_OCTET16_LEN); + p_msg->hdr.event = BTA_DM_CI_RMT_OOB_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->accept = accept; + memcpy(p_msg->c, c, BT_OCTET16_LEN); + memcpy(p_msg->r, r, BT_OCTET16_LEN); - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); } #if (BTM_SCO_HCI_INCLUDED == TRUE) @@ -98,13 +97,12 @@ void bta_dm_ci_rmt_oob(bool accept, BD_ADDR bd_addr, BT_OCTET16 c, BT_OCTET16 r) * Returns void * ******************************************************************************/ -void bta_dm_sco_ci_data_ready(uint16_t event, uint16_t sco_handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void bta_dm_sco_ci_data_ready(uint16_t event, uint16_t sco_handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = event; - p_buf->layer_specific = sco_handle; + p_buf->event = event; + p_buf->layer_specific = sco_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } #endif diff --git a/system/bta/dm/bta_dm_int.h b/system/bta/dm/bta_dm_int.h index be691bd105f..3d8b85df873 100644 --- a/system/bta/dm/bta_dm_int.h +++ b/system/bta/dm/bta_dm_int.h @@ -31,757 +31,689 @@ #include "bta_gatt_api.h" #endif - - /***************************************************************************** * Constants and data types ****************************************************************************/ - -#define BTA_COPY_DEVICE_CLASS(coddst, codsrc) {((uint8_t *)(coddst))[0] = ((uint8_t *)(codsrc))[0]; \ - ((uint8_t *)(coddst))[1] = ((uint8_t *)(codsrc))[1]; \ - ((uint8_t *)(coddst))[2] = ((uint8_t *)(codsrc))[2];} - +#define BTA_COPY_DEVICE_CLASS(coddst, codsrc) \ + { \ + ((uint8_t*)(coddst))[0] = ((uint8_t*)(codsrc))[0]; \ + ((uint8_t*)(coddst))[1] = ((uint8_t*)(codsrc))[1]; \ + ((uint8_t*)(coddst))[2] = ((uint8_t*)(codsrc))[2]; \ + } #define BTA_DM_MSG_LEN 50 -#define BTA_SERVICE_ID_TO_SERVICE_MASK(id) (1 << (id)) +#define BTA_SERVICE_ID_TO_SERVICE_MASK(id) (1 << (id)) /* DM events */ -enum -{ - /* device manager local device API events */ - BTA_DM_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_DM), - BTA_DM_API_DISABLE_EVT, - BTA_DM_API_SET_NAME_EVT, - BTA_DM_API_SET_VISIBILITY_EVT, - - BTA_DM_ACL_CHANGE_EVT, - BTA_DM_API_ADD_DEVICE_EVT, - BTA_DM_API_REMOVE_ACL_EVT, +enum { + /* device manager local device API events */ + BTA_DM_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_DM), + BTA_DM_API_DISABLE_EVT, + BTA_DM_API_SET_NAME_EVT, + BTA_DM_API_SET_VISIBILITY_EVT, - /* security API events */ - BTA_DM_API_BOND_EVT, - BTA_DM_API_BOND_CANCEL_EVT, - BTA_DM_API_PIN_REPLY_EVT, + BTA_DM_ACL_CHANGE_EVT, + BTA_DM_API_ADD_DEVICE_EVT, + BTA_DM_API_REMOVE_ACL_EVT, - /* power manger events */ - BTA_DM_PM_BTM_STATUS_EVT, - BTA_DM_PM_TIMER_EVT, + /* security API events */ + BTA_DM_API_BOND_EVT, + BTA_DM_API_BOND_CANCEL_EVT, + BTA_DM_API_PIN_REPLY_EVT, - /* simple pairing events */ - BTA_DM_API_CONFIRM_EVT, + /* power manger events */ + BTA_DM_PM_BTM_STATUS_EVT, + BTA_DM_PM_TIMER_EVT, - BTA_DM_API_SET_ENCRYPTION_EVT, + /* simple pairing events */ + BTA_DM_API_CONFIRM_EVT, - BTA_DM_API_LOC_OOB_EVT, - BTA_DM_CI_IO_REQ_EVT, - BTA_DM_CI_RMT_OOB_EVT, + BTA_DM_API_SET_ENCRYPTION_EVT, + BTA_DM_API_LOC_OOB_EVT, + BTA_DM_CI_IO_REQ_EVT, + BTA_DM_CI_RMT_OOB_EVT, #if (BLE_INCLUDED == TRUE) - BTA_DM_API_ADD_BLEKEY_EVT, - BTA_DM_API_ADD_BLEDEVICE_EVT, - BTA_DM_API_BLE_PASSKEY_REPLY_EVT, - BTA_DM_API_BLE_CONFIRM_REPLY_EVT, - BTA_DM_API_BLE_SEC_GRANT_EVT, - BTA_DM_API_BLE_SET_BG_CONN_TYPE, - BTA_DM_API_BLE_CONN_PARAM_EVT, - BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT, - BTA_DM_API_BLE_SCAN_PARAM_EVT, - BTA_DM_API_BLE_OBSERVE_EVT, - BTA_DM_API_UPDATE_CONN_PARAM_EVT, + BTA_DM_API_ADD_BLEKEY_EVT, + BTA_DM_API_ADD_BLEDEVICE_EVT, + BTA_DM_API_BLE_PASSKEY_REPLY_EVT, + BTA_DM_API_BLE_CONFIRM_REPLY_EVT, + BTA_DM_API_BLE_SEC_GRANT_EVT, + BTA_DM_API_BLE_SET_BG_CONN_TYPE, + BTA_DM_API_BLE_CONN_PARAM_EVT, + BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT, + BTA_DM_API_BLE_SCAN_PARAM_EVT, + BTA_DM_API_BLE_OBSERVE_EVT, + BTA_DM_API_UPDATE_CONN_PARAM_EVT, #if (BLE_PRIVACY_SPT == TRUE) - BTA_DM_API_LOCAL_PRIVACY_EVT, + BTA_DM_API_LOCAL_PRIVACY_EVT, #endif - BTA_DM_API_SET_DATA_LENGTH_EVT, + BTA_DM_API_SET_DATA_LENGTH_EVT, #if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) - BTA_DM_API_CFG_FILTER_COND_EVT, - BTA_DM_API_SCAN_FILTER_SETUP_EVT, - BTA_DM_API_SCAN_FILTER_ENABLE_EVT, + BTA_DM_API_CFG_FILTER_COND_EVT, + BTA_DM_API_SCAN_FILTER_SETUP_EVT, + BTA_DM_API_SCAN_FILTER_ENABLE_EVT, #endif - BTA_DM_API_BLE_SETUP_STORAGE_EVT, - BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT, - BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT, - BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT, - BTA_DM_API_BLE_TRACK_ADVERTISER_EVT, - BTA_DM_API_BLE_ENERGY_INFO_EVT, + BTA_DM_API_BLE_SETUP_STORAGE_EVT, + BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT, + BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT, + BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT, + BTA_DM_API_BLE_TRACK_ADVERTISER_EVT, + BTA_DM_API_BLE_ENERGY_INFO_EVT, #endif - BTA_DM_API_ENABLE_TEST_MODE_EVT, - BTA_DM_API_DISABLE_TEST_MODE_EVT, - BTA_DM_API_EXECUTE_CBACK_EVT, - BTA_DM_API_REMOVE_ALL_ACL_EVT, - BTA_DM_API_REMOVE_DEVICE_EVT, - BTA_DM_MAX_EVT + BTA_DM_API_ENABLE_TEST_MODE_EVT, + BTA_DM_API_DISABLE_TEST_MODE_EVT, + BTA_DM_API_EXECUTE_CBACK_EVT, + BTA_DM_API_REMOVE_ALL_ACL_EVT, + BTA_DM_API_REMOVE_DEVICE_EVT, + BTA_DM_MAX_EVT }; - /* DM search events */ -enum -{ - /* DM search API events */ - BTA_DM_API_SEARCH_EVT = BTA_SYS_EVT_START(BTA_ID_DM_SEARCH), - BTA_DM_API_SEARCH_CANCEL_EVT, - BTA_DM_API_DISCOVER_EVT, - BTA_DM_INQUIRY_CMPL_EVT, - BTA_DM_REMT_NAME_EVT, - BTA_DM_SDP_RESULT_EVT, - BTA_DM_SEARCH_CMPL_EVT, - BTA_DM_DISCOVERY_RESULT_EVT, - BTA_DM_API_DI_DISCOVER_EVT, - BTA_DM_DISC_CLOSE_TOUT_EVT +enum { + /* DM search API events */ + BTA_DM_API_SEARCH_EVT = BTA_SYS_EVT_START(BTA_ID_DM_SEARCH), + BTA_DM_API_SEARCH_CANCEL_EVT, + BTA_DM_API_DISCOVER_EVT, + BTA_DM_INQUIRY_CMPL_EVT, + BTA_DM_REMT_NAME_EVT, + BTA_DM_SDP_RESULT_EVT, + BTA_DM_SEARCH_CMPL_EVT, + BTA_DM_DISCOVERY_RESULT_EVT, + BTA_DM_API_DI_DISCOVER_EVT, + BTA_DM_DISC_CLOSE_TOUT_EVT }; /* data type for BTA_DM_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_DM_SEC_CBACK *p_sec_cback; +typedef struct { + BT_HDR hdr; + tBTA_DM_SEC_CBACK* p_sec_cback; } tBTA_DM_API_ENABLE; /* data type for BTA_DM_API_SET_NAME_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_NAME name; /* max 248 bytes name, plus must be Null terminated */ +typedef struct { + BT_HDR hdr; + BD_NAME name; /* max 248 bytes name, plus must be Null terminated */ } tBTA_DM_API_SET_NAME; /* data type for BTA_DM_API_SET_VISIBILITY_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_DM_DISC disc_mode; - tBTA_DM_CONN conn_mode; - uint8_t pair_mode; - uint8_t conn_paired_only; +typedef struct { + BT_HDR hdr; + tBTA_DM_DISC disc_mode; + tBTA_DM_CONN conn_mode; + uint8_t pair_mode; + uint8_t conn_paired_only; } tBTA_DM_API_SET_VISIBILITY; -enum -{ - BTA_DM_RS_NONE, /* straight API call */ - BTA_DM_RS_OK, /* the role switch result - successful */ - BTA_DM_RS_FAIL /* the role switch result - failed */ +enum { + BTA_DM_RS_NONE, /* straight API call */ + BTA_DM_RS_OK, /* the role switch result - successful */ + BTA_DM_RS_FAIL /* the role switch result - failed */ }; typedef uint8_t tBTA_DM_RS_RES; /* data type for BTA_DM_API_SEARCH_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_DM_INQ inq_params; - tBTA_SERVICE_MASK services; - tBTA_DM_SEARCH_CBACK * p_cback; - tBTA_DM_RS_RES rs_res; +typedef struct { + BT_HDR hdr; + tBTA_DM_INQ inq_params; + tBTA_SERVICE_MASK services; + tBTA_DM_SEARCH_CBACK* p_cback; + tBTA_DM_RS_RES rs_res; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - uint8_t num_uuid; - tBT_UUID *p_uuid; + uint8_t num_uuid; + tBT_UUID* p_uuid; #endif } tBTA_DM_API_SEARCH; /* data type for BTA_DM_API_DISCOVER_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_SERVICE_MASK services; - tBTA_DM_SEARCH_CBACK * p_cback; - bool sdp_search; - tBTA_TRANSPORT transport; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_SERVICE_MASK services; + tBTA_DM_SEARCH_CBACK* p_cback; + bool sdp_search; + tBTA_TRANSPORT transport; #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) - uint8_t num_uuid; - tBT_UUID *p_uuid; + uint8_t num_uuid; + tBT_UUID* p_uuid; #endif - tSDP_UUID uuid; + tSDP_UUID uuid; } tBTA_DM_API_DISCOVER; /* data type for BTA_DM_API_DI_DISC_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_DISCOVERY_DB *p_sdp_db; - uint32_t len; - tBTA_DM_SEARCH_CBACK * p_cback; -}tBTA_DM_API_DI_DISC; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_DISCOVERY_DB* p_sdp_db; + uint32_t len; + tBTA_DM_SEARCH_CBACK* p_cback; +} tBTA_DM_API_DI_DISC; /* data type for BTA_DM_API_BOND_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_TRANSPORT transport; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_TRANSPORT transport; } tBTA_DM_API_BOND; /* data type for BTA_DM_API_BOND_CANCEL_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_TRANSPORT transport; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_TRANSPORT transport; } tBTA_DM_API_BOND_CANCEL; /* data type for BTA_DM_API_PIN_REPLY_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - bool accept; - uint8_t pin_len; - uint8_t p_pin[PIN_CODE_LEN]; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + bool accept; + uint8_t pin_len; + uint8_t p_pin[PIN_CODE_LEN]; } tBTA_DM_API_PIN_REPLY; /* data type for BTA_DM_API_LOC_OOB_EVT */ -typedef struct -{ - BT_HDR hdr; -} tBTA_DM_API_LOC_OOB; +typedef struct { BT_HDR hdr; } tBTA_DM_API_LOC_OOB; /* data type for BTA_DM_API_CONFIRM_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - bool accept; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + bool accept; } tBTA_DM_API_CONFIRM; /* data type for BTA_DM_CI_IO_REQ_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_IO_CAP io_cap; - tBTA_OOB_DATA oob_data; - tBTA_AUTH_REQ auth_req; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_IO_CAP io_cap; + tBTA_OOB_DATA oob_data; + tBTA_AUTH_REQ auth_req; } tBTA_DM_CI_IO_REQ; /* data type for BTA_DM_CI_RMT_OOB_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - BT_OCTET16 c; - BT_OCTET16 r; - bool accept; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + BT_OCTET16 c; + BT_OCTET16 r; + bool accept; } tBTA_DM_CI_RMT_OOB; /* data type for BTA_DM_REMT_NAME_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_DM_SEARCH result; +typedef struct { + BT_HDR hdr; + tBTA_DM_SEARCH result; } tBTA_DM_REM_NAME; /* data type for tBTA_DM_DISC_RESULT */ -typedef struct -{ - BT_HDR hdr; - tBTA_DM_SEARCH result; +typedef struct { + BT_HDR hdr; + tBTA_DM_SEARCH result; } tBTA_DM_DISC_RESULT; - /* data type for BTA_DM_INQUIRY_CMPL_EVT */ -typedef struct -{ - BT_HDR hdr; - uint8_t num; +typedef struct { + BT_HDR hdr; + uint8_t num; } tBTA_DM_INQUIRY_CMPL; /* data type for BTA_DM_SDP_RESULT_EVT */ -typedef struct -{ - BT_HDR hdr; - uint16_t sdp_result; +typedef struct { + BT_HDR hdr; + uint16_t sdp_result; } tBTA_DM_SDP_RESULT; /* data type for BTA_DM_ACL_CHANGE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTM_BL_EVENT event; - uint8_t busy_level; - uint8_t busy_level_flags; - bool is_new; - uint8_t new_role; - BD_ADDR bd_addr; - uint8_t hci_status; +typedef struct { + BT_HDR hdr; + tBTM_BL_EVENT event; + uint8_t busy_level; + uint8_t busy_level_flags; + bool is_new; + uint8_t new_role; + BD_ADDR bd_addr; + uint8_t hci_status; #if (BLE_INCLUDED == TRUE) - uint16_t handle; - tBT_TRANSPORT transport; + uint16_t handle; + tBT_TRANSPORT transport; #endif } tBTA_DM_ACL_CHANGE; /* data type for BTA_DM_PM_BTM_STATUS_EVT */ -typedef struct -{ - - BT_HDR hdr; - BD_ADDR bd_addr; - tBTM_PM_STATUS status; - uint16_t value; - uint8_t hci_status; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTM_PM_STATUS status; + uint16_t value; + uint8_t hci_status; } tBTA_DM_PM_BTM_STATUS; /* data type for BTA_DM_PM_TIMER_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_DM_PM_ACTION pm_request; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_DM_PM_ACTION pm_request; } tBTA_DM_PM_TIMER; - /* data type for BTA_DM_API_ADD_DEVICE_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - DEV_CLASS dc; - LINK_KEY link_key; - tBTA_SERVICE_MASK tm; - bool is_trusted; - uint8_t key_type; - tBTA_IO_CAP io_cap; - bool link_key_known; - bool dc_known; - BD_NAME bd_name; - uint8_t features[BTA_FEATURE_BYTES_PER_PAGE * (BTA_EXT_FEATURES_PAGE_MAX + 1)]; - uint8_t pin_length; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + DEV_CLASS dc; + LINK_KEY link_key; + tBTA_SERVICE_MASK tm; + bool is_trusted; + uint8_t key_type; + tBTA_IO_CAP io_cap; + bool link_key_known; + bool dc_known; + BD_NAME bd_name; + uint8_t + features[BTA_FEATURE_BYTES_PER_PAGE * (BTA_EXT_FEATURES_PAGE_MAX + 1)]; + uint8_t pin_length; } tBTA_DM_API_ADD_DEVICE; /* data type for BTA_DM_API_REMOVE_ACL_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; } tBTA_DM_API_REMOVE_DEVICE; /* data type for BTA_DM_API_EXECUTE_CBACK_EVT */ -typedef struct -{ - BT_HDR hdr; - void * p_param; - tBTA_DM_EXEC_CBACK *p_exec_cback; +typedef struct { + BT_HDR hdr; + void* p_param; + tBTA_DM_EXEC_CBACK* p_exec_cback; } tBTA_DM_API_EXECUTE_CBACK; /* data type for tBTA_DM_API_SET_ENCRYPTION */ -typedef struct -{ - BT_HDR hdr; - tBTA_TRANSPORT transport; - tBTA_DM_ENCRYPT_CBACK *p_callback; - tBTA_DM_BLE_SEC_ACT sec_act; - BD_ADDR bd_addr; +typedef struct { + BT_HDR hdr; + tBTA_TRANSPORT transport; + tBTA_DM_ENCRYPT_CBACK* p_callback; + tBTA_DM_BLE_SEC_ACT sec_act; + BD_ADDR bd_addr; } tBTA_DM_API_SET_ENCRYPTION; #if (BLE_INCLUDED == TRUE) -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_LE_KEY_VALUE blekey; - tBTA_LE_KEY_TYPE key_type; - -}tBTA_DM_API_ADD_BLEKEY; - -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBT_DEVICE_TYPE dev_type ; - tBLE_ADDR_TYPE addr_type; - -}tBTA_DM_API_ADD_BLE_DEVICE; - -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - bool accept; - uint32_t passkey; -}tBTA_DM_API_PASSKEY_REPLY; - -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_DM_BLE_SEC_GRANT res; -}tBTA_DM_API_BLE_SEC_GRANT; - - -typedef struct -{ - BT_HDR hdr; - tBTA_DM_BLE_CONN_TYPE bg_conn_type; - tBTA_DM_BLE_SEL_CBACK *p_select_cback; -}tBTA_DM_API_BLE_SET_BG_CONN_TYPE; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_LE_KEY_VALUE blekey; + tBTA_LE_KEY_TYPE key_type; + +} tBTA_DM_API_ADD_BLEKEY; + +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBT_DEVICE_TYPE dev_type; + tBLE_ADDR_TYPE addr_type; + +} tBTA_DM_API_ADD_BLE_DEVICE; + +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + bool accept; + uint32_t passkey; +} tBTA_DM_API_PASSKEY_REPLY; + +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_DM_BLE_SEC_GRANT res; +} tBTA_DM_API_BLE_SEC_GRANT; + +typedef struct { + BT_HDR hdr; + tBTA_DM_BLE_CONN_TYPE bg_conn_type; + tBTA_DM_BLE_SEL_CBACK* p_select_cback; +} tBTA_DM_API_BLE_SET_BG_CONN_TYPE; /* set prefered BLE connection parameters for a device */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR peer_bda; - uint16_t conn_int_min; - uint16_t conn_int_max; - uint16_t supervision_tout; - uint16_t slave_latency; - -}tBTA_DM_API_BLE_CONN_PARAMS; - -typedef struct -{ - BT_HDR hdr; - BD_ADDR peer_bda; - bool privacy_enable; - -}tBTA_DM_API_ENABLE_PRIVACY; - -typedef struct -{ - BT_HDR hdr; - bool privacy_enable; -}tBTA_DM_API_LOCAL_PRIVACY; +typedef struct { + BT_HDR hdr; + BD_ADDR peer_bda; + uint16_t conn_int_min; + uint16_t conn_int_max; + uint16_t supervision_tout; + uint16_t slave_latency; + +} tBTA_DM_API_BLE_CONN_PARAMS; + +typedef struct { + BT_HDR hdr; + BD_ADDR peer_bda; + bool privacy_enable; + +} tBTA_DM_API_ENABLE_PRIVACY; + +typedef struct { + BT_HDR hdr; + bool privacy_enable; +} tBTA_DM_API_LOCAL_PRIVACY; /* set scan parameter for BLE connections */ -typedef struct -{ - BT_HDR hdr; - tBTA_GATTC_IF client_if; - uint32_t scan_int; - uint32_t scan_window; - tBLE_SCAN_MODE scan_mode; - tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback; -}tBTA_DM_API_BLE_SCAN_PARAMS; +typedef struct { + BT_HDR hdr; + tBTA_GATTC_IF client_if; + uint32_t scan_int; + uint32_t scan_window; + tBLE_SCAN_MODE scan_mode; + tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback; +} tBTA_DM_API_BLE_SCAN_PARAMS; /* set scan parameter for BLE connections */ -typedef struct -{ - BT_HDR hdr; - uint16_t scan_int; - uint16_t scan_window; +typedef struct { + BT_HDR hdr; + uint16_t scan_int; + uint16_t scan_window; } tBTA_DM_API_BLE_CONN_SCAN_PARAMS; /* Data type for start/stop observe */ -typedef struct -{ - BT_HDR hdr; - bool start; - uint16_t duration; - tBTA_DM_SEARCH_CBACK * p_cback; -}tBTA_DM_API_BLE_OBSERVE; - -typedef struct -{ - BT_HDR hdr; - BD_ADDR remote_bda; - uint16_t tx_data_length; -}tBTA_DM_API_BLE_SET_DATA_LENGTH; +typedef struct { + BT_HDR hdr; + bool start; + uint16_t duration; + tBTA_DM_SEARCH_CBACK* p_cback; +} tBTA_DM_API_BLE_OBSERVE; + +typedef struct { + BT_HDR hdr; + BD_ADDR remote_bda; + uint16_t tx_data_length; +} tBTA_DM_API_BLE_SET_DATA_LENGTH; /* set adv parameter for BLE advertising */ -typedef struct -{ - BT_HDR hdr; - bool enable; +typedef struct { + BT_HDR hdr; + bool enable; -}tBTA_DM_API_BLE_FEATURE; +} tBTA_DM_API_BLE_FEATURE; /* adv data structure */ -typedef struct -{ - BT_HDR hdr; - uint8_t batch_scan_full_max; - uint8_t batch_scan_trunc_max; - uint8_t batch_scan_notify_threshold; - tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback; - tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback; - tBTA_BLE_SCAN_REP_CBACK *p_read_rep_cback; - tBTA_DM_BLE_REF_VALUE ref_value; +typedef struct { + BT_HDR hdr; + uint8_t batch_scan_full_max; + uint8_t batch_scan_trunc_max; + uint8_t batch_scan_notify_threshold; + tBTA_BLE_SCAN_SETUP_CBACK* p_setup_cback; + tBTA_BLE_SCAN_THRESHOLD_CBACK* p_thres_cback; + tBTA_BLE_SCAN_REP_CBACK* p_read_rep_cback; + tBTA_DM_BLE_REF_VALUE ref_value; } tBTA_DM_API_SET_STORAGE_CONFIG; -typedef struct -{ - BT_HDR hdr; - tBTA_BLE_BATCH_SCAN_MODE scan_mode; - uint32_t scan_int; - uint32_t scan_window; - tBTA_BLE_DISCARD_RULE discard_rule; - tBLE_ADDR_TYPE addr_type; - tBTA_DM_BLE_REF_VALUE ref_value; +typedef struct { + BT_HDR hdr; + tBTA_BLE_BATCH_SCAN_MODE scan_mode; + uint32_t scan_int; + uint32_t scan_window; + tBTA_BLE_DISCARD_RULE discard_rule; + tBLE_ADDR_TYPE addr_type; + tBTA_DM_BLE_REF_VALUE ref_value; } tBTA_DM_API_ENABLE_SCAN; -typedef struct -{ - BT_HDR hdr; - tBTA_DM_BLE_REF_VALUE ref_value; +typedef struct { + BT_HDR hdr; + tBTA_DM_BLE_REF_VALUE ref_value; } tBTA_DM_API_DISABLE_SCAN; -typedef struct -{ - BT_HDR hdr; - tBTA_BLE_BATCH_SCAN_MODE scan_type; - tBTA_DM_BLE_REF_VALUE ref_value; +typedef struct { + BT_HDR hdr; + tBTA_BLE_BATCH_SCAN_MODE scan_type; + tBTA_DM_BLE_REF_VALUE ref_value; } tBTA_DM_API_READ_SCAN_REPORTS; -typedef struct -{ - BT_HDR hdr; - tBTA_DM_BLE_REF_VALUE ref_value; - tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback; +typedef struct { + BT_HDR hdr; + tBTA_DM_BLE_REF_VALUE ref_value; + tBTA_BLE_TRACK_ADV_CBACK* p_track_adv_cback; } tBTA_DM_API_TRACK_ADVERTISER; -typedef struct -{ - BT_HDR hdr; - tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback; +typedef struct { + BT_HDR hdr; + tBTA_BLE_ENERGY_INFO_CBACK* p_energy_info_cback; } tBTA_DM_API_ENERGY_INFO; #endif /* BLE_INCLUDED */ /* data type for BTA_DM_API_REMOVE_ACL_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - bool remove_dev; - tBTA_TRANSPORT transport; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + bool remove_dev; + tBTA_TRANSPORT transport; -}tBTA_DM_API_REMOVE_ACL; +} tBTA_DM_API_REMOVE_ACL; /* data type for BTA_DM_API_REMOVE_ALL_ACL_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_DM_LINK_TYPE link_type; +typedef struct { + BT_HDR hdr; + tBTA_DM_LINK_TYPE link_type; } tBTA_DM_API_REMOVE_ALL_ACL; -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - uint16_t min_int; - uint16_t max_int; - uint16_t latency; - uint16_t timeout; -}tBTA_DM_API_UPDATE_CONN_PARAM; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + uint16_t min_int; + uint16_t max_int; + uint16_t latency; + uint16_t timeout; +} tBTA_DM_API_UPDATE_CONN_PARAM; #if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) -typedef struct -{ - BT_HDR hdr; - tBTA_DM_BLE_SCAN_COND_OP action; - tBTA_DM_BLE_PF_COND_TYPE cond_type; - tBTA_DM_BLE_PF_FILT_INDEX filt_index; - tBTA_DM_BLE_PF_COND_PARAM *p_cond_param; - tBTA_DM_BLE_PF_CFG_CBACK *p_filt_cfg_cback; - tBTA_DM_BLE_REF_VALUE ref_value; -}tBTA_DM_API_CFG_FILTER_COND; - -typedef struct -{ - BT_HDR hdr; - uint8_t action; - tBTA_DM_BLE_PF_STATUS_CBACK *p_filt_status_cback; - tBTA_DM_BLE_REF_VALUE ref_value; -}tBTA_DM_API_ENABLE_SCAN_FILTER; - -typedef struct -{ - BT_HDR hdr; - uint8_t action; - tBTA_DM_BLE_PF_FILT_INDEX filt_index; - tBTA_DM_BLE_PF_FILT_PARAMS filt_params; - tBLE_BD_ADDR *p_target; - tBTA_DM_BLE_PF_PARAM_CBACK *p_filt_param_cback; - tBTA_DM_BLE_REF_VALUE ref_value; -}tBTA_DM_API_SCAN_FILTER_PARAM_SETUP; +typedef struct { + BT_HDR hdr; + tBTA_DM_BLE_SCAN_COND_OP action; + tBTA_DM_BLE_PF_COND_TYPE cond_type; + tBTA_DM_BLE_PF_FILT_INDEX filt_index; + tBTA_DM_BLE_PF_COND_PARAM* p_cond_param; + tBTA_DM_BLE_PF_CFG_CBACK* p_filt_cfg_cback; + tBTA_DM_BLE_REF_VALUE ref_value; +} tBTA_DM_API_CFG_FILTER_COND; + +typedef struct { + BT_HDR hdr; + uint8_t action; + tBTA_DM_BLE_PF_STATUS_CBACK* p_filt_status_cback; + tBTA_DM_BLE_REF_VALUE ref_value; +} tBTA_DM_API_ENABLE_SCAN_FILTER; + +typedef struct { + BT_HDR hdr; + uint8_t action; + tBTA_DM_BLE_PF_FILT_INDEX filt_index; + tBTA_DM_BLE_PF_FILT_PARAMS filt_params; + tBLE_BD_ADDR* p_target; + tBTA_DM_BLE_PF_PARAM_CBACK* p_filt_param_cback; + tBTA_DM_BLE_REF_VALUE ref_value; +} tBTA_DM_API_SCAN_FILTER_PARAM_SETUP; #endif /* union of all data types */ -typedef union -{ - /* GKI event buffer header */ - BT_HDR hdr; - tBTA_DM_API_ENABLE enable; +typedef union { + /* GKI event buffer header */ + BT_HDR hdr; + tBTA_DM_API_ENABLE enable; - tBTA_DM_API_SET_NAME set_name; + tBTA_DM_API_SET_NAME set_name; - tBTA_DM_API_SET_VISIBILITY set_visibility; + tBTA_DM_API_SET_VISIBILITY set_visibility; - tBTA_DM_API_ADD_DEVICE add_dev; + tBTA_DM_API_ADD_DEVICE add_dev; - tBTA_DM_API_REMOVE_DEVICE remove_dev; + tBTA_DM_API_REMOVE_DEVICE remove_dev; - tBTA_DM_API_SEARCH search; + tBTA_DM_API_SEARCH search; - tBTA_DM_API_DISCOVER discover; + tBTA_DM_API_DISCOVER discover; - tBTA_DM_API_BOND bond; + tBTA_DM_API_BOND bond; - tBTA_DM_API_BOND_CANCEL bond_cancel; + tBTA_DM_API_BOND_CANCEL bond_cancel; - tBTA_DM_API_PIN_REPLY pin_reply; + tBTA_DM_API_PIN_REPLY pin_reply; - tBTA_DM_API_LOC_OOB loc_oob; - tBTA_DM_API_CONFIRM confirm; - tBTA_DM_CI_IO_REQ ci_io_req; - tBTA_DM_CI_RMT_OOB ci_rmt_oob; + tBTA_DM_API_LOC_OOB loc_oob; + tBTA_DM_API_CONFIRM confirm; + tBTA_DM_CI_IO_REQ ci_io_req; + tBTA_DM_CI_RMT_OOB ci_rmt_oob; - tBTA_DM_REM_NAME rem_name; + tBTA_DM_REM_NAME rem_name; - tBTA_DM_DISC_RESULT disc_result; + tBTA_DM_DISC_RESULT disc_result; - tBTA_DM_INQUIRY_CMPL inq_cmpl; + tBTA_DM_INQUIRY_CMPL inq_cmpl; - tBTA_DM_SDP_RESULT sdp_event; + tBTA_DM_SDP_RESULT sdp_event; - tBTA_DM_ACL_CHANGE acl_change; + tBTA_DM_ACL_CHANGE acl_change; - tBTA_DM_PM_BTM_STATUS pm_status; + tBTA_DM_PM_BTM_STATUS pm_status; - tBTA_DM_PM_TIMER pm_timer; + tBTA_DM_PM_TIMER pm_timer; - tBTA_DM_API_DI_DISC di_disc; + tBTA_DM_API_DI_DISC di_disc; - tBTA_DM_API_EXECUTE_CBACK exec_cback; + tBTA_DM_API_EXECUTE_CBACK exec_cback; - tBTA_DM_API_SET_ENCRYPTION set_encryption; + tBTA_DM_API_SET_ENCRYPTION set_encryption; #if (BLE_INCLUDED == TRUE) - tBTA_DM_API_ADD_BLEKEY add_ble_key; - tBTA_DM_API_ADD_BLE_DEVICE add_ble_device; - tBTA_DM_API_PASSKEY_REPLY ble_passkey_reply; - tBTA_DM_API_BLE_SEC_GRANT ble_sec_grant; - tBTA_DM_API_BLE_SET_BG_CONN_TYPE ble_set_bd_conn_type; - tBTA_DM_API_BLE_CONN_PARAMS ble_set_conn_params; - tBTA_DM_API_BLE_CONN_SCAN_PARAMS ble_set_conn_scan_params; - tBTA_DM_API_BLE_SCAN_PARAMS ble_set_scan_params; - tBTA_DM_API_BLE_OBSERVE ble_observe; - tBTA_DM_API_ENABLE_PRIVACY ble_remote_privacy; - tBTA_DM_API_LOCAL_PRIVACY ble_local_privacy; + tBTA_DM_API_ADD_BLEKEY add_ble_key; + tBTA_DM_API_ADD_BLE_DEVICE add_ble_device; + tBTA_DM_API_PASSKEY_REPLY ble_passkey_reply; + tBTA_DM_API_BLE_SEC_GRANT ble_sec_grant; + tBTA_DM_API_BLE_SET_BG_CONN_TYPE ble_set_bd_conn_type; + tBTA_DM_API_BLE_CONN_PARAMS ble_set_conn_params; + tBTA_DM_API_BLE_CONN_SCAN_PARAMS ble_set_conn_scan_params; + tBTA_DM_API_BLE_SCAN_PARAMS ble_set_scan_params; + tBTA_DM_API_BLE_OBSERVE ble_observe; + tBTA_DM_API_ENABLE_PRIVACY ble_remote_privacy; + tBTA_DM_API_LOCAL_PRIVACY ble_local_privacy; #if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) - tBTA_DM_API_SCAN_FILTER_PARAM_SETUP ble_scan_filt_param_setup; - tBTA_DM_API_CFG_FILTER_COND ble_cfg_filter_cond; - tBTA_DM_API_ENABLE_SCAN_FILTER ble_enable_scan_filt; + tBTA_DM_API_SCAN_FILTER_PARAM_SETUP ble_scan_filt_param_setup; + tBTA_DM_API_CFG_FILTER_COND ble_cfg_filter_cond; + tBTA_DM_API_ENABLE_SCAN_FILTER ble_enable_scan_filt; #endif - tBTA_DM_API_UPDATE_CONN_PARAM ble_update_conn_params; - tBTA_DM_API_BLE_SET_DATA_LENGTH ble_set_data_length; - - tBTA_DM_API_SET_STORAGE_CONFIG ble_set_storage; - tBTA_DM_API_ENABLE_SCAN ble_enable_scan; - tBTA_DM_API_READ_SCAN_REPORTS ble_read_reports; - tBTA_DM_API_DISABLE_SCAN ble_disable_scan; - tBTA_DM_API_TRACK_ADVERTISER ble_track_advert; - tBTA_DM_API_ENERGY_INFO ble_energy_info; + tBTA_DM_API_UPDATE_CONN_PARAM ble_update_conn_params; + tBTA_DM_API_BLE_SET_DATA_LENGTH ble_set_data_length; + + tBTA_DM_API_SET_STORAGE_CONFIG ble_set_storage; + tBTA_DM_API_ENABLE_SCAN ble_enable_scan; + tBTA_DM_API_READ_SCAN_REPORTS ble_read_reports; + tBTA_DM_API_DISABLE_SCAN ble_disable_scan; + tBTA_DM_API_TRACK_ADVERTISER ble_track_advert; + tBTA_DM_API_ENERGY_INFO ble_energy_info; #endif - tBTA_DM_API_REMOVE_ACL remove_acl; - tBTA_DM_API_REMOVE_ALL_ACL remove_all_acl; + tBTA_DM_API_REMOVE_ACL remove_acl; + tBTA_DM_API_REMOVE_ALL_ACL remove_all_acl; } tBTA_DM_MSG; - #define BTA_DM_NUM_PEER_DEVICE 7 -#define BTA_DM_NOT_CONNECTED 0 -#define BTA_DM_CONNECTED 1 -#define BTA_DM_UNPAIRING 2 +#define BTA_DM_NOT_CONNECTED 0 +#define BTA_DM_CONNECTED 1 +#define BTA_DM_UNPAIRING 2 typedef uint8_t tBTA_DM_CONN_STATE; - -#define BTA_DM_DI_NONE 0x00 /* nothing special */ -#define BTA_DM_DI_USE_SSR 0x10 /* set this bit if ssr is supported for this link */ -#define BTA_DM_DI_AV_ACTIVE 0x20 /* set this bit if AV is active for this link */ -#define BTA_DM_DI_SET_SNIFF 0x01 /* set this bit if call BTM_SetPowerMode(sniff) */ -#define BTA_DM_DI_INT_SNIFF 0x02 /* set this bit if call BTM_SetPowerMode(sniff) & enter sniff mode */ -#define BTA_DM_DI_ACP_SNIFF 0x04 /* set this bit if peer init sniff */ +#define BTA_DM_DI_NONE 0x00 /* nothing special */ +#define BTA_DM_DI_USE_SSR \ + 0x10 /* set this bit if ssr is supported for this link */ +#define BTA_DM_DI_AV_ACTIVE \ + 0x20 /* set this bit if AV is active for this link */ +#define BTA_DM_DI_SET_SNIFF \ + 0x01 /* set this bit if call BTM_SetPowerMode(sniff) */ +#define BTA_DM_DI_INT_SNIFF \ + 0x02 /* set this bit if call BTM_SetPowerMode(sniff) & enter sniff mode */ +#define BTA_DM_DI_ACP_SNIFF 0x04 /* set this bit if peer init sniff */ typedef uint8_t tBTA_DM_DEV_INFO; /* set power mode request type */ -#define BTA_DM_PM_RESTART 1 -#define BTA_DM_PM_NEW_REQ 2 -#define BTA_DM_PM_EXECUTE 3 -typedef uint8_t tBTA_DM_PM_REQ; - -typedef struct -{ - BD_ADDR peer_bdaddr; - uint16_t link_policy; - tBTA_DM_CONN_STATE conn_state; - tBTA_PREF_ROLES pref_role; - bool in_use; - tBTA_DM_DEV_INFO info; - tBTA_DM_ENCRYPT_CBACK *p_encrypt_cback; +#define BTA_DM_PM_RESTART 1 +#define BTA_DM_PM_NEW_REQ 2 +#define BTA_DM_PM_EXECUTE 3 +typedef uint8_t tBTA_DM_PM_REQ; + +typedef struct { + BD_ADDR peer_bdaddr; + uint16_t link_policy; + tBTA_DM_CONN_STATE conn_state; + tBTA_PREF_ROLES pref_role; + bool in_use; + tBTA_DM_DEV_INFO info; + tBTA_DM_ENCRYPT_CBACK* p_encrypt_cback; #if (BTM_SSR_INCLUDED == TRUE) - tBTM_PM_STATUS prev_low; /* previous low power mode used */ + tBTM_PM_STATUS prev_low; /* previous low power mode used */ #endif - tBTA_DM_PM_ACTION pm_mode_attempted; - tBTA_DM_PM_ACTION pm_mode_failed; - bool remove_dev_pending; + tBTA_DM_PM_ACTION pm_mode_attempted; + tBTA_DM_PM_ACTION pm_mode_failed; + bool remove_dev_pending; #if (BLE_INCLUDED == TRUE) - uint16_t conn_handle; - tBT_TRANSPORT transport; + uint16_t conn_handle; + tBT_TRANSPORT transport; #endif } tBTA_DM_PEER_DEVICE; - - /* structure to store list of active connections */ -typedef struct -{ - tBTA_DM_PEER_DEVICE peer_device[BTA_DM_NUM_PEER_DEVICE]; - uint8_t count; +typedef struct { + tBTA_DM_PEER_DEVICE peer_device[BTA_DM_NUM_PEER_DEVICE]; + uint8_t count; #if (BLE_INCLUDED == TRUE) - uint8_t le_count; + uint8_t le_count; #endif } tBTA_DM_ACTIVE_LINK; - -typedef struct -{ - BD_ADDR peer_bdaddr; - tBTA_SYS_ID id; - uint8_t app_id; - tBTA_SYS_CONN_STATUS state; - bool new_request; +typedef struct { + BD_ADDR peer_bdaddr; + tBTA_SYS_ID id; + uint8_t app_id; + tBTA_SYS_CONN_STATUS state; + bool new_request; } tBTA_DM_SRVCS; #ifndef BTA_DM_NUM_CONN_SRVS -#define BTA_DM_NUM_CONN_SRVS 10 +#define BTA_DM_NUM_CONN_SRVS 10 #endif -typedef struct -{ - - uint8_t count; - tBTA_DM_SRVCS conn_srvc[BTA_DM_NUM_CONN_SRVS]; +typedef struct { + uint8_t count; + tBTA_DM_SRVCS conn_srvc[BTA_DM_NUM_CONN_SRVS]; -} tBTA_DM_CONNECTED_SRVCS; +} tBTA_DM_CONNECTED_SRVCS; -typedef struct -{ -#define BTA_DM_PM_SNIFF_TIMER_IDX 0 -#define BTA_DM_PM_PARK_TIMER_IDX 1 +typedef struct { +#define BTA_DM_PM_SNIFF_TIMER_IDX 0 +#define BTA_DM_PM_PARK_TIMER_IDX 1 #define BTA_DM_PM_SUSPEND_TIMER_IDX 2 -#define BTA_DM_PM_MODE_TIMER_MAX 3 - /* - * Keep three different timers for PARK, SNIFF and SUSPEND if TBFC is - * supported. - */ - alarm_t * timer[BTA_DM_PM_MODE_TIMER_MAX]; - - uint8_t srvc_id[BTA_DM_PM_MODE_TIMER_MAX]; - uint8_t pm_action[BTA_DM_PM_MODE_TIMER_MAX]; - uint8_t active; /* number of active timer */ - - BD_ADDR peer_bdaddr; - bool in_use; +#define BTA_DM_PM_MODE_TIMER_MAX 3 + /* + * Keep three different timers for PARK, SNIFF and SUSPEND if TBFC is + * supported. + */ + alarm_t* timer[BTA_DM_PM_MODE_TIMER_MAX]; + + uint8_t srvc_id[BTA_DM_PM_MODE_TIMER_MAX]; + uint8_t pm_action[BTA_DM_PM_MODE_TIMER_MAX]; + uint8_t active; /* number of active timer */ + + BD_ADDR peer_bdaddr; + bool in_use; } tBTA_PM_TIMER; extern tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs; @@ -789,310 +721,294 @@ extern tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs; #define BTA_DM_NUM_PM_TIMER 7 /* DM control block */ -typedef struct -{ - bool is_bta_dm_active; - tBTA_DM_ACTIVE_LINK device_list; - tBTA_DM_SEC_CBACK *p_sec_cback; +typedef struct { + bool is_bta_dm_active; + tBTA_DM_ACTIVE_LINK device_list; + tBTA_DM_SEC_CBACK* p_sec_cback; #if (BLE_INCLUDED == TRUE) - tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback; - tBTA_DM_BLE_PF_CFG_CBACK *p_scan_filt_cfg_cback; - tBTA_DM_BLE_PF_STATUS_CBACK *p_scan_filt_status_cback; - tBTA_DM_BLE_PF_PARAM_CBACK *p_scan_filt_param_cback; - tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback; + tBTA_BLE_SCAN_SETUP_CBACK* p_setup_cback; + tBTA_DM_BLE_PF_CFG_CBACK* p_scan_filt_cfg_cback; + tBTA_DM_BLE_PF_STATUS_CBACK* p_scan_filt_status_cback; + tBTA_DM_BLE_PF_PARAM_CBACK* p_scan_filt_param_cback; + tBTA_BLE_ENERGY_INFO_CBACK* p_energy_info_cback; #endif - uint16_t state; - bool disabling; - alarm_t *disable_timer; - uint32_t wbt_sdp_handle; /* WIDCOMM Extensions SDP record handle */ - uint8_t wbt_scn; /* WIDCOMM Extensions SCN */ - uint8_t num_master_only; - uint8_t pm_id; - tBTA_PM_TIMER pm_timer[BTA_DM_NUM_PM_TIMER]; - uint32_t role_policy_mask; /* the bits set indicates the modules that wants to remove role switch from the default link policy */ - uint16_t cur_policy; /* current default link policy */ - uint16_t rs_event; /* the event waiting for role switch */ - uint8_t cur_av_count; /* current AV connecions */ - bool disable_pair_mode; /* disable pair mode or not */ - bool conn_paired_only; /* allow connectable to paired device only or not */ - tBTA_DM_API_SEARCH search_msg; - uint16_t page_scan_interval; - uint16_t page_scan_window; - uint16_t inquiry_scan_interval; - uint16_t inquiry_scan_window; - - /* Storage for pin code request parameters */ - BD_ADDR pin_bd_addr; - DEV_CLASS pin_dev_class; - tBTA_DM_SEC_EVT pin_evt; - uint32_t num_val; /* the numeric value for comparison. If just_works, do not show this number to UI */ - bool just_works; /* true, if "Just Works" association model */ + uint16_t state; + bool disabling; + alarm_t* disable_timer; + uint32_t wbt_sdp_handle; /* WIDCOMM Extensions SDP record handle */ + uint8_t wbt_scn; /* WIDCOMM Extensions SCN */ + uint8_t num_master_only; + uint8_t pm_id; + tBTA_PM_TIMER pm_timer[BTA_DM_NUM_PM_TIMER]; + uint32_t + role_policy_mask; /* the bits set indicates the modules that wants to + remove role switch from the default link policy */ + uint16_t cur_policy; /* current default link policy */ + uint16_t rs_event; /* the event waiting for role switch */ + uint8_t cur_av_count; /* current AV connecions */ + bool disable_pair_mode; /* disable pair mode or not */ + bool conn_paired_only; /* allow connectable to paired device only or not */ + tBTA_DM_API_SEARCH search_msg; + uint16_t page_scan_interval; + uint16_t page_scan_window; + uint16_t inquiry_scan_interval; + uint16_t inquiry_scan_window; + + /* Storage for pin code request parameters */ + BD_ADDR pin_bd_addr; + DEV_CLASS pin_dev_class; + tBTA_DM_SEC_EVT pin_evt; + uint32_t num_val; /* the numeric value for comparison. If just_works, do not + show this number to UI */ + bool just_works; /* true, if "Just Works" association model */ #if (BTA_EIR_CANNED_UUID_LIST != TRUE) - /* store UUID list for EIR */ - uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE]; + /* store UUID list for EIR */ + uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE]; #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) - tBT_UUID custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID]; + tBT_UUID custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID]; #endif #endif - - tBTA_DM_ENCRYPT_CBACK *p_encrypt_cback; - alarm_t *switch_delay_timer; + tBTA_DM_ENCRYPT_CBACK* p_encrypt_cback; + alarm_t* switch_delay_timer; } tBTA_DM_CB; /* DM search control block */ -typedef struct -{ - - tBTA_DM_SEARCH_CBACK * p_search_cback; - tBTM_INQ_INFO * p_btm_inq_info; - tBTA_SERVICE_MASK services; - tBTA_SERVICE_MASK services_to_search; - tBTA_SERVICE_MASK services_found; - tSDP_DISCOVERY_DB * p_sdp_db; - uint16_t state; - BD_ADDR peer_bdaddr; - bool name_discover_done; - BD_NAME peer_name; - alarm_t * search_timer; - uint8_t service_index; - tBTA_DM_MSG * p_search_queue; /* search or discover commands during search cancel stored here */ - bool wait_disc; - bool sdp_results; - tSDP_UUID uuid; - uint8_t peer_scn; - bool sdp_search; - bool cancel_pending; /* inquiry cancel is pending */ - tBTA_TRANSPORT transport; +typedef struct { + tBTA_DM_SEARCH_CBACK* p_search_cback; + tBTM_INQ_INFO* p_btm_inq_info; + tBTA_SERVICE_MASK services; + tBTA_SERVICE_MASK services_to_search; + tBTA_SERVICE_MASK services_found; + tSDP_DISCOVERY_DB* p_sdp_db; + uint16_t state; + BD_ADDR peer_bdaddr; + bool name_discover_done; + BD_NAME peer_name; + alarm_t* search_timer; + uint8_t service_index; + tBTA_DM_MSG* p_search_queue; /* search or discover commands during search + cancel stored here */ + bool wait_disc; + bool sdp_results; + tSDP_UUID uuid; + uint8_t peer_scn; + bool sdp_search; + bool cancel_pending; /* inquiry cancel is pending */ + tBTA_TRANSPORT transport; #if (BLE_INCLUDED == TRUE) - tBTA_DM_SEARCH_CBACK * p_scan_cback; + tBTA_DM_SEARCH_CBACK* p_scan_cback; #if (BTA_GATT_INCLUDED == TRUE) - tBTA_GATTC_IF client_if; - uint8_t num_uuid; - tBT_UUID *p_srvc_uuid; - uint8_t uuid_to_search; - bool gatt_disc_active; - uint16_t conn_id; - uint8_t * p_ble_rawdata; - uint32_t ble_raw_size; - uint32_t ble_raw_used; - alarm_t * gatt_close_timer; /* GATT channel close delay timer */ - BD_ADDR pending_close_bda; /* pending GATT channel remote device address */ + tBTA_GATTC_IF client_if; + uint8_t num_uuid; + tBT_UUID* p_srvc_uuid; + uint8_t uuid_to_search; + bool gatt_disc_active; + uint16_t conn_id; + uint8_t* p_ble_rawdata; + uint32_t ble_raw_size; + uint32_t ble_raw_used; + alarm_t* gatt_close_timer; /* GATT channel close delay timer */ + BD_ADDR pending_close_bda; /* pending GATT channel remote device address */ #endif #endif - } tBTA_DM_SEARCH_CB; /* DI control block */ -typedef struct -{ - tSDP_DISCOVERY_DB * p_di_db; /* pointer to the DI discovery database */ - uint8_t di_num; /* total local DI record number */ - uint32_t di_handle[BTA_DI_NUM_MAX]; /* local DI record handle, the first one is primary record */ -}tBTA_DM_DI_CB; +typedef struct { + tSDP_DISCOVERY_DB* p_di_db; /* pointer to the DI discovery database */ + uint8_t di_num; /* total local DI record number */ + uint32_t di_handle[BTA_DI_NUM_MAX]; /* local DI record handle, the first one + is primary record */ +} tBTA_DM_DI_CB; /* DM search state */ -enum -{ +enum { - BTA_DM_SEARCH_IDLE, - BTA_DM_SEARCH_ACTIVE, - BTA_DM_SEARCH_CANCELLING, - BTA_DM_DISCOVER_ACTIVE + BTA_DM_SEARCH_IDLE, + BTA_DM_SEARCH_ACTIVE, + BTA_DM_SEARCH_CANCELLING, + BTA_DM_DISCOVER_ACTIVE }; - - -typedef struct -{ - DEV_CLASS dev_class; /* local device class */ - uint16_t policy_settings; /* link policy setting hold, sniff, park, MS switch */ - uint16_t page_timeout; /* timeout for page in slots */ - uint16_t link_timeout; /* link supervision timeout in slots */ - bool avoid_scatter; /* true to avoid scatternet when av is streaming (be the master) */ +typedef struct { + DEV_CLASS dev_class; /* local device class */ + uint16_t + policy_settings; /* link policy setting hold, sniff, park, MS switch */ + uint16_t page_timeout; /* timeout for page in slots */ + uint16_t link_timeout; /* link supervision timeout in slots */ + bool avoid_scatter; /* true to avoid scatternet when av is streaming (be the + master) */ } tBTA_DM_CFG; extern const uint32_t bta_service_id_to_btm_srv_id_lkup_tbl[]; +typedef struct { + uint8_t id; + uint8_t app_id; + uint8_t cfg; -typedef struct -{ - uint8_t id; - uint8_t app_id; - uint8_t cfg; - -} tBTA_DM_RM ; - -extern tBTA_DM_CFG *p_bta_dm_cfg; -extern tBTA_DM_RM *p_bta_dm_rm_cfg; +} tBTA_DM_RM; -typedef struct -{ +extern tBTA_DM_CFG* p_bta_dm_cfg; +extern tBTA_DM_RM* p_bta_dm_rm_cfg; - uint8_t id; - uint8_t app_id; - uint8_t spec_idx; /* index of spec table to use */ +typedef struct { + uint8_t id; + uint8_t app_id; + uint8_t spec_idx; /* index of spec table to use */ } tBTA_DM_PM_CFG; - -typedef struct -{ - - tBTA_DM_PM_ACTION power_mode; - uint16_t timeout; +typedef struct { + tBTA_DM_PM_ACTION power_mode; + uint16_t timeout; } tBTA_DM_PM_ACTN; -typedef struct -{ - - uint8_t allow_mask; /* mask of sniff/hold/park modes to allow */ +typedef struct { + uint8_t allow_mask; /* mask of sniff/hold/park modes to allow */ #if (BTM_SSR_INCLUDED == TRUE) - uint8_t ssr; /* set SSR on conn open/unpark */ + uint8_t ssr; /* set SSR on conn open/unpark */ #endif - tBTA_DM_PM_ACTN actn_tbl [BTA_DM_PM_NUM_EVTS][2]; + tBTA_DM_PM_ACTN actn_tbl[BTA_DM_PM_NUM_EVTS][2]; } tBTA_DM_PM_SPEC; -typedef struct -{ - uint16_t max_lat; - uint16_t min_rmt_to; - uint16_t min_loc_to; +typedef struct { + uint16_t max_lat; + uint16_t min_rmt_to; + uint16_t min_loc_to; } tBTA_DM_SSR_SPEC; -typedef struct -{ - uint16_t manufacturer; - uint16_t lmp_sub_version; - uint8_t lmp_version; -}tBTA_DM_LMP_VER_INFO; +typedef struct { + uint16_t manufacturer; + uint16_t lmp_sub_version; + uint8_t lmp_version; +} tBTA_DM_LMP_VER_INFO; -extern const uint16_t bta_service_id_to_uuid_lkup_tbl []; +extern const uint16_t bta_service_id_to_uuid_lkup_tbl[]; -extern tBTA_DM_PM_CFG *p_bta_dm_pm_cfg; -extern tBTA_DM_PM_SPEC *p_bta_dm_pm_spec; -extern tBTM_PM_PWR_MD *p_bta_dm_pm_md; +extern tBTA_DM_PM_CFG* p_bta_dm_pm_cfg; +extern tBTA_DM_PM_SPEC* p_bta_dm_pm_spec; +extern tBTM_PM_PWR_MD* p_bta_dm_pm_md; #if (BTM_SSR_INCLUDED == TRUE) -extern tBTA_DM_SSR_SPEC *p_bta_dm_ssr_spec; +extern tBTA_DM_SSR_SPEC* p_bta_dm_ssr_spec; #endif /* update dynamic BRCM Aware EIR data */ extern const tBTA_DM_EIR_CONF bta_dm_eir_cfg; -extern tBTA_DM_EIR_CONF *p_bta_dm_eir_cfg; +extern tBTA_DM_EIR_CONF* p_bta_dm_eir_cfg; /* DM control block */ -extern tBTA_DM_CB bta_dm_cb; +extern tBTA_DM_CB bta_dm_cb; /* DM search control block */ -extern tBTA_DM_SEARCH_CB bta_dm_search_cb; +extern tBTA_DM_SEARCH_CB bta_dm_search_cb; /* DI control block */ -extern tBTA_DM_DI_CB bta_dm_di_cb; - -extern bool bta_dm_sm_execute(BT_HDR *p_msg); -extern void bta_dm_sm_disable( void ); -extern bool bta_dm_search_sm_execute(BT_HDR *p_msg); -extern void bta_dm_search_sm_disable( void ); +extern tBTA_DM_DI_CB bta_dm_di_cb; +extern bool bta_dm_sm_execute(BT_HDR* p_msg); +extern void bta_dm_sm_disable(void); +extern bool bta_dm_search_sm_execute(BT_HDR* p_msg); +extern void bta_dm_search_sm_disable(void); -extern void bta_dm_enable (tBTA_DM_MSG *p_data); -extern void bta_dm_disable (tBTA_DM_MSG *p_data); +extern void bta_dm_enable(tBTA_DM_MSG* p_data); +extern void bta_dm_disable(tBTA_DM_MSG* p_data); extern void bta_dm_init_cb(void); -extern void bta_dm_set_dev_name (tBTA_DM_MSG *p_data); -extern void bta_dm_set_visibility (tBTA_DM_MSG *p_data); - -extern void bta_dm_set_scan_config(tBTA_DM_MSG *p_data); -extern void bta_dm_vendor_spec_command(tBTA_DM_MSG *p_data); -extern void bta_dm_bond (tBTA_DM_MSG *p_data); -extern void bta_dm_bond_cancel (tBTA_DM_MSG *p_data); -extern void bta_dm_pin_reply (tBTA_DM_MSG *p_data); -extern void bta_dm_acl_change(tBTA_DM_MSG *p_data); -extern void bta_dm_add_device (tBTA_DM_MSG *p_data); -extern void bta_dm_remove_device (tBTA_DM_MSG *p_data); -extern void bta_dm_close_acl(tBTA_DM_MSG *p_data); - - -extern void bta_dm_pm_btm_status(tBTA_DM_MSG *p_data); -extern void bta_dm_pm_timer(tBTA_DM_MSG *p_data); -extern void bta_dm_add_ampkey (tBTA_DM_MSG *p_data); +extern void bta_dm_set_dev_name(tBTA_DM_MSG* p_data); +extern void bta_dm_set_visibility(tBTA_DM_MSG* p_data); + +extern void bta_dm_set_scan_config(tBTA_DM_MSG* p_data); +extern void bta_dm_vendor_spec_command(tBTA_DM_MSG* p_data); +extern void bta_dm_bond(tBTA_DM_MSG* p_data); +extern void bta_dm_bond_cancel(tBTA_DM_MSG* p_data); +extern void bta_dm_pin_reply(tBTA_DM_MSG* p_data); +extern void bta_dm_acl_change(tBTA_DM_MSG* p_data); +extern void bta_dm_add_device(tBTA_DM_MSG* p_data); +extern void bta_dm_remove_device(tBTA_DM_MSG* p_data); +extern void bta_dm_close_acl(tBTA_DM_MSG* p_data); + +extern void bta_dm_pm_btm_status(tBTA_DM_MSG* p_data); +extern void bta_dm_pm_timer(tBTA_DM_MSG* p_data); +extern void bta_dm_add_ampkey(tBTA_DM_MSG* p_data); #if (BLE_INCLUDED == TRUE) -extern void bta_dm_add_blekey (tBTA_DM_MSG *p_data); -extern void bta_dm_add_ble_device (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_passkey_reply (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_confirm_reply (tBTA_DM_MSG *p_data); -extern void bta_dm_security_grant (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_set_scan_params(tBTA_DM_MSG *p_data); -extern void bta_dm_ble_set_conn_scan_params (tBTA_DM_MSG *p_data); -extern void bta_dm_close_gatt_conn(tBTA_DM_MSG *p_data); -extern void bta_dm_ble_observe (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_set_adv_params(uint16_t adv_int_min, uint16_t adv_int_max, - tBLE_BD_ADDR *p_dir_bda); - -extern void bta_dm_ble_set_data_length(tBTA_DM_MSG *p_data); +extern void bta_dm_add_blekey(tBTA_DM_MSG* p_data); +extern void bta_dm_add_ble_device(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_passkey_reply(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_confirm_reply(tBTA_DM_MSG* p_data); +extern void bta_dm_security_grant(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_set_bg_conn_type(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_set_conn_params(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_set_scan_params(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_set_conn_scan_params(tBTA_DM_MSG* p_data); +extern void bta_dm_close_gatt_conn(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_observe(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_update_conn_params(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_config_local_privacy(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_set_adv_params(uint16_t adv_int_min, + uint16_t adv_int_max, + tBLE_BD_ADDR* p_dir_bda); + +extern void bta_dm_ble_set_data_length(tBTA_DM_MSG* p_data); #if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) -extern void bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data); -extern void bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data); -extern void bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data); +extern void bta_dm_cfg_filter_cond(tBTA_DM_MSG* p_data); +extern void bta_dm_scan_filter_param_setup(tBTA_DM_MSG* p_data); +extern void bta_dm_enable_scan_filter(tBTA_DM_MSG* p_data); #endif -extern void bta_dm_ble_setup_storage(tBTA_DM_MSG *p_data); -extern void bta_dm_ble_enable_batch_scan(tBTA_DM_MSG * p_data); -extern void bta_dm_ble_disable_batch_scan(tBTA_DM_MSG * p_data); -extern void bta_dm_ble_read_scan_reports(tBTA_DM_MSG * p_data); -extern void bta_dm_ble_track_advertiser(tBTA_DM_MSG * p_data); -extern void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data); +extern void bta_dm_ble_setup_storage(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_enable_batch_scan(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_disable_batch_scan(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_read_scan_reports(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_track_advertiser(tBTA_DM_MSG* p_data); +extern void bta_dm_ble_get_energy_info(tBTA_DM_MSG* p_data); #endif -extern void bta_dm_set_encryption(tBTA_DM_MSG *p_data); -extern void bta_dm_confirm(tBTA_DM_MSG *p_data); -extern void bta_dm_loc_oob(tBTA_DM_MSG *p_data); -extern void bta_dm_ci_io_req_act(tBTA_DM_MSG *p_data); -extern void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data); +extern void bta_dm_set_encryption(tBTA_DM_MSG* p_data); +extern void bta_dm_confirm(tBTA_DM_MSG* p_data); +extern void bta_dm_loc_oob(tBTA_DM_MSG* p_data); +extern void bta_dm_ci_io_req_act(tBTA_DM_MSG* p_data); +extern void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG* p_data); extern void bta_dm_init_pm(void); extern void bta_dm_disable_pm(void); extern uint8_t bta_dm_get_av_count(void); -extern void bta_dm_search_start (tBTA_DM_MSG *p_data); -extern void bta_dm_search_cancel (tBTA_DM_MSG *p_data); -extern void bta_dm_discover (tBTA_DM_MSG *p_data); -extern void bta_dm_di_disc (tBTA_DM_MSG *p_data); -extern void bta_dm_inq_cmpl (tBTA_DM_MSG *p_data); -extern void bta_dm_rmt_name (tBTA_DM_MSG *p_data); -extern void bta_dm_sdp_result (tBTA_DM_MSG *p_data); -extern void bta_dm_search_cmpl (tBTA_DM_MSG *p_data); -extern void bta_dm_free_sdp_db (tBTA_DM_MSG *p_data); -extern void bta_dm_disc_result (tBTA_DM_MSG *p_data); -extern void bta_dm_search_result (tBTA_DM_MSG *p_data); -extern void bta_dm_discovery_cmpl (tBTA_DM_MSG *p_data); -extern void bta_dm_queue_search (tBTA_DM_MSG *p_data); -extern void bta_dm_queue_disc (tBTA_DM_MSG *p_data); -extern void bta_dm_search_clear_queue (tBTA_DM_MSG *p_data); -extern void bta_dm_search_cancel_cmpl (tBTA_DM_MSG *p_data); -extern void bta_dm_search_cancel_notify (tBTA_DM_MSG *p_data); -extern void bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG *p_data); -extern void bta_dm_disc_rmt_name (tBTA_DM_MSG *p_data); -extern tBTA_DM_PEER_DEVICE * bta_dm_find_peer_device(const BD_ADDR peer_addr); +extern void bta_dm_search_start(tBTA_DM_MSG* p_data); +extern void bta_dm_search_cancel(tBTA_DM_MSG* p_data); +extern void bta_dm_discover(tBTA_DM_MSG* p_data); +extern void bta_dm_di_disc(tBTA_DM_MSG* p_data); +extern void bta_dm_inq_cmpl(tBTA_DM_MSG* p_data); +extern void bta_dm_rmt_name(tBTA_DM_MSG* p_data); +extern void bta_dm_sdp_result(tBTA_DM_MSG* p_data); +extern void bta_dm_search_cmpl(tBTA_DM_MSG* p_data); +extern void bta_dm_free_sdp_db(tBTA_DM_MSG* p_data); +extern void bta_dm_disc_result(tBTA_DM_MSG* p_data); +extern void bta_dm_search_result(tBTA_DM_MSG* p_data); +extern void bta_dm_discovery_cmpl(tBTA_DM_MSG* p_data); +extern void bta_dm_queue_search(tBTA_DM_MSG* p_data); +extern void bta_dm_queue_disc(tBTA_DM_MSG* p_data); +extern void bta_dm_search_clear_queue(tBTA_DM_MSG* p_data); +extern void bta_dm_search_cancel_cmpl(tBTA_DM_MSG* p_data); +extern void bta_dm_search_cancel_notify(tBTA_DM_MSG* p_data); +extern void bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG* p_data); +extern void bta_dm_disc_rmt_name(tBTA_DM_MSG* p_data); +extern tBTA_DM_PEER_DEVICE* bta_dm_find_peer_device(const BD_ADDR peer_addr); void bta_dm_eir_update_uuid(uint16_t uuid16, bool adding); -extern void bta_dm_enable_test_mode(tBTA_DM_MSG *p_data); -extern void bta_dm_disable_test_mode(tBTA_DM_MSG *p_data); -extern void bta_dm_execute_callback(tBTA_DM_MSG *p_data); - +extern void bta_dm_enable_test_mode(tBTA_DM_MSG* p_data); +extern void bta_dm_disable_test_mode(tBTA_DM_MSG* p_data); +extern void bta_dm_execute_callback(tBTA_DM_MSG* p_data); -extern void bta_dm_remove_all_acl(tBTA_DM_MSG *p_data); +extern void bta_dm_remove_all_acl(tBTA_DM_MSG* p_data); #endif /* BTA_DM_INT_H */ diff --git a/system/bta/dm/bta_dm_main.cc b/system/bta/dm/bta_dm_main.cc index 0852e8dc895..ecbff69c7dd 100644 --- a/system/bta/dm/bta_dm_main.cc +++ b/system/bta/dm/bta_dm_main.cc @@ -23,73 +23,68 @@ ******************************************************************************/ #include "bta_api.h" -#include "bta_sys.h" #include "bta_dm_int.h" - +#include "bta_sys.h" /***************************************************************************** * Constants and types ****************************************************************************/ -tBTA_DM_CB bta_dm_cb; +tBTA_DM_CB bta_dm_cb; tBTA_DM_SEARCH_CB bta_dm_search_cb; -tBTA_DM_DI_CB bta_dm_di_cb; +tBTA_DM_DI_CB bta_dm_di_cb; - -#define BTA_DM_NUM_ACTIONS (BTA_DM_MAX_EVT & 0x00ff) +#define BTA_DM_NUM_ACTIONS (BTA_DM_MAX_EVT & 0x00ff) /* type for action functions */ -typedef void (*tBTA_DM_ACTION)(tBTA_DM_MSG *p_data); +typedef void (*tBTA_DM_ACTION)(tBTA_DM_MSG* p_data); /* action function list */ -const tBTA_DM_ACTION bta_dm_action[] = -{ +const tBTA_DM_ACTION bta_dm_action[] = { /* device manager local device API events */ - bta_dm_enable, /* 0 BTA_DM_API_ENABLE_EVT */ - bta_dm_disable, /* 1 BTA_DM_API_DISABLE_EVT */ - bta_dm_set_dev_name, /* 2 BTA_DM_API_SET_NAME_EVT */ - bta_dm_set_visibility, /* 3 BTA_DM_API_SET_VISIBILITY_EVT */ - bta_dm_acl_change, /* 8 BTA_DM_ACL_CHANGE_EVT */ - bta_dm_add_device, /* 9 BTA_DM_API_ADD_DEVICE_EVT */ - bta_dm_close_acl, /* 10 BTA_DM_API_ADD_DEVICE_EVT */ + bta_dm_enable, /* 0 BTA_DM_API_ENABLE_EVT */ + bta_dm_disable, /* 1 BTA_DM_API_DISABLE_EVT */ + bta_dm_set_dev_name, /* 2 BTA_DM_API_SET_NAME_EVT */ + bta_dm_set_visibility, /* 3 BTA_DM_API_SET_VISIBILITY_EVT */ + bta_dm_acl_change, /* 8 BTA_DM_ACL_CHANGE_EVT */ + bta_dm_add_device, /* 9 BTA_DM_API_ADD_DEVICE_EVT */ + bta_dm_close_acl, /* 10 BTA_DM_API_ADD_DEVICE_EVT */ /* security API events */ - bta_dm_bond, /* 11 BTA_DM_API_BOND_EVT */ - bta_dm_bond_cancel, /* 12 BTA_DM_API_BOND_CANCEL_EVT */ - bta_dm_pin_reply, /* 13 BTA_DM_API_PIN_REPLY_EVT */ + bta_dm_bond, /* 11 BTA_DM_API_BOND_EVT */ + bta_dm_bond_cancel, /* 12 BTA_DM_API_BOND_CANCEL_EVT */ + bta_dm_pin_reply, /* 13 BTA_DM_API_PIN_REPLY_EVT */ /* power manger events */ - bta_dm_pm_btm_status, /* 16 BTA_DM_PM_BTM_STATUS_EVT */ - bta_dm_pm_timer, /* 17 BTA_DM_PM_TIMER_EVT*/ + bta_dm_pm_btm_status, /* 16 BTA_DM_PM_BTM_STATUS_EVT */ + bta_dm_pm_timer, /* 17 BTA_DM_PM_TIMER_EVT*/ /* simple pairing events */ - bta_dm_confirm, /* 18 BTA_DM_API_CONFIRM_EVT */ + bta_dm_confirm, /* 18 BTA_DM_API_CONFIRM_EVT */ - bta_dm_set_encryption, /* BTA_DM_API_SET_ENCRYPTION_EVT */ + bta_dm_set_encryption, /* BTA_DM_API_SET_ENCRYPTION_EVT */ /* out of band pairing events */ - bta_dm_loc_oob, /* 20 BTA_DM_API_LOC_OOB_EVT */ - bta_dm_ci_io_req_act, /* 21 BTA_DM_CI_IO_REQ_EVT */ - bta_dm_ci_rmt_oob_act, /* 22 BTA_DM_CI_RMT_OOB_EVT */ - + bta_dm_loc_oob, /* 20 BTA_DM_API_LOC_OOB_EVT */ + bta_dm_ci_io_req_act, /* 21 BTA_DM_CI_IO_REQ_EVT */ + bta_dm_ci_rmt_oob_act, /* 22 BTA_DM_CI_RMT_OOB_EVT */ #if (BLE_INCLUDED == TRUE) - bta_dm_add_blekey, /* BTA_DM_API_ADD_BLEKEY_EVT */ - bta_dm_add_ble_device, /* BTA_DM_API_ADD_BLEDEVICE_EVT */ - bta_dm_ble_passkey_reply, /* BTA_DM_API_BLE_PASSKEY_REPLY_EVT */ - bta_dm_ble_confirm_reply, /* BTA_DM_API_BLE_CONFIRM_REPLY_EVT */ - bta_dm_security_grant, - bta_dm_ble_set_bg_conn_type, - bta_dm_ble_set_conn_params, /* BTA_DM_API_BLE_CONN_PARAM_EVT */ - bta_dm_ble_set_conn_scan_params, /* BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT */ - bta_dm_ble_set_scan_params, /* BTA_DM_API_BLE_SCAN_PARAM_EVT */ + bta_dm_add_blekey, /* BTA_DM_API_ADD_BLEKEY_EVT */ + bta_dm_add_ble_device, /* BTA_DM_API_ADD_BLEDEVICE_EVT */ + bta_dm_ble_passkey_reply, /* BTA_DM_API_BLE_PASSKEY_REPLY_EVT */ + bta_dm_ble_confirm_reply, /* BTA_DM_API_BLE_CONFIRM_REPLY_EVT */ + bta_dm_security_grant, bta_dm_ble_set_bg_conn_type, + bta_dm_ble_set_conn_params, /* BTA_DM_API_BLE_CONN_PARAM_EVT */ + bta_dm_ble_set_conn_scan_params, /* BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT */ + bta_dm_ble_set_scan_params, /* BTA_DM_API_BLE_SCAN_PARAM_EVT */ bta_dm_ble_observe, - bta_dm_ble_update_conn_params, /* BTA_DM_API_UPDATE_CONN_PARAM_EVT */ + bta_dm_ble_update_conn_params, /* BTA_DM_API_UPDATE_CONN_PARAM_EVT */ #if (BLE_PRIVACY_SPT == TRUE) - bta_dm_ble_config_local_privacy, /* BTA_DM_API_LOCAL_PRIVACY_EVT */ + bta_dm_ble_config_local_privacy, /* BTA_DM_API_LOCAL_PRIVACY_EVT */ #endif - bta_dm_ble_set_data_length, /* BTA_DM_API_SET_DATA_LENGTH_EVT */ + bta_dm_ble_set_data_length, /* BTA_DM_API_SET_DATA_LENGTH_EVT */ #if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) bta_dm_cfg_filter_cond, /* BTA_DM_API_CFG_FILTER_COND_EVT */ bta_dm_scan_filter_param_setup, /* BTA_DM_API_SCAN_FILTER_SETUP_EVT */ @@ -103,151 +98,188 @@ const tBTA_DM_ACTION bta_dm_action[] = bta_dm_ble_get_energy_info, /* BTA_DM_API_BLE_ENERGY_INFO_EVT */ #endif - bta_dm_enable_test_mode, /* BTA_DM_API_ENABLE_TEST_MODE_EVT */ - bta_dm_disable_test_mode, /* BTA_DM_API_DISABLE_TEST_MODE_EVT */ - bta_dm_execute_callback, /* BTA_DM_API_EXECUTE_CBACK_EVT */ + bta_dm_enable_test_mode, /* BTA_DM_API_ENABLE_TEST_MODE_EVT */ + bta_dm_disable_test_mode, /* BTA_DM_API_DISABLE_TEST_MODE_EVT */ + bta_dm_execute_callback, /* BTA_DM_API_EXECUTE_CBACK_EVT */ - bta_dm_remove_all_acl, /* BTA_DM_API_REMOVE_ALL_ACL_EVT */ - bta_dm_remove_device, /* BTA_DM_API_REMOVE_DEVICE_EVT */ + bta_dm_remove_all_acl, /* BTA_DM_API_REMOVE_ALL_ACL_EVT */ + bta_dm_remove_device, /* BTA_DM_API_REMOVE_DEVICE_EVT */ }; - - /* state machine action enumeration list */ -enum -{ - BTA_DM_API_SEARCH, /* 0 bta_dm_search_start */ - BTA_DM_API_SEARCH_CANCEL, /* 1 bta_dm_search_cancel */ - BTA_DM_API_DISCOVER, /* 2 bta_dm_discover */ - BTA_DM_INQUIRY_CMPL, /* 3 bta_dm_inq_cmpl */ - BTA_DM_REMT_NAME, /* 4 bta_dm_rmt_name */ - BTA_DM_SDP_RESULT, /* 5 bta_dm_sdp_result */ - BTA_DM_SEARCH_CMPL, /* 6 bta_dm_search_cmpl*/ - BTA_DM_FREE_SDP_DB, /* 7 bta_dm_free_sdp_db */ - BTA_DM_DISC_RESULT, /* 8 bta_dm_disc_result */ - BTA_DM_SEARCH_RESULT, /* 9 bta_dm_search_result */ - BTA_DM_QUEUE_SEARCH, /* 10 bta_dm_queue_search */ - BTA_DM_QUEUE_DISC, /* 11 bta_dm_queue_disc */ - BTA_DM_SEARCH_CLEAR_QUEUE, /* 12 bta_dm_search_clear_queue */ - BTA_DM_SEARCH_CANCEL_CMPL, /* 13 bta_dm_search_cancel_cmpl */ - BTA_DM_SEARCH_CANCEL_NOTIFY, /* 14 bta_dm_search_cancel_notify */ - BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, /* 15 bta_dm_search_cancel_transac_cmpl */ - BTA_DM_DISC_RMT_NAME, /* 16 bta_dm_disc_rmt_name */ - BTA_DM_API_DI_DISCOVER, /* 17 bta_dm_di_disc */ +enum { + BTA_DM_API_SEARCH, /* 0 bta_dm_search_start */ + BTA_DM_API_SEARCH_CANCEL, /* 1 bta_dm_search_cancel */ + BTA_DM_API_DISCOVER, /* 2 bta_dm_discover */ + BTA_DM_INQUIRY_CMPL, /* 3 bta_dm_inq_cmpl */ + BTA_DM_REMT_NAME, /* 4 bta_dm_rmt_name */ + BTA_DM_SDP_RESULT, /* 5 bta_dm_sdp_result */ + BTA_DM_SEARCH_CMPL, /* 6 bta_dm_search_cmpl*/ + BTA_DM_FREE_SDP_DB, /* 7 bta_dm_free_sdp_db */ + BTA_DM_DISC_RESULT, /* 8 bta_dm_disc_result */ + BTA_DM_SEARCH_RESULT, /* 9 bta_dm_search_result */ + BTA_DM_QUEUE_SEARCH, /* 10 bta_dm_queue_search */ + BTA_DM_QUEUE_DISC, /* 11 bta_dm_queue_disc */ + BTA_DM_SEARCH_CLEAR_QUEUE, /* 12 bta_dm_search_clear_queue */ + BTA_DM_SEARCH_CANCEL_CMPL, /* 13 bta_dm_search_cancel_cmpl */ + BTA_DM_SEARCH_CANCEL_NOTIFY, /* 14 bta_dm_search_cancel_notify */ + BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, /* 15 bta_dm_search_cancel_transac_cmpl */ + BTA_DM_DISC_RMT_NAME, /* 16 bta_dm_disc_rmt_name */ + BTA_DM_API_DI_DISCOVER, /* 17 bta_dm_di_disc */ #if (BLE_INCLUDED == TRUE) - BTA_DM_CLOSE_GATT_CONN, /* 18 bta_dm_close_gatt_conn */ + BTA_DM_CLOSE_GATT_CONN, /* 18 bta_dm_close_gatt_conn */ #endif - BTA_DM_SEARCH_NUM_ACTIONS /* 19 */ + BTA_DM_SEARCH_NUM_ACTIONS /* 19 */ }; - /* action function list */ -const tBTA_DM_ACTION bta_dm_search_action[] = -{ - - bta_dm_search_start, /* 0 BTA_DM_API_SEARCH */ - bta_dm_search_cancel, /* 1 BTA_DM_API_SEARCH_CANCEL */ - bta_dm_discover, /* 2 BTA_DM_API_DISCOVER */ - bta_dm_inq_cmpl, /* 3 BTA_DM_INQUIRY_CMPL */ - bta_dm_rmt_name, /* 4 BTA_DM_REMT_NAME */ - bta_dm_sdp_result, /* 5 BTA_DM_SDP_RESULT */ - bta_dm_search_cmpl, /* 6 BTA_DM_SEARCH_CMPL */ - bta_dm_free_sdp_db, /* 7 BTA_DM_FREE_SDP_DB */ - bta_dm_disc_result, /* 8 BTA_DM_DISC_RESULT */ - bta_dm_search_result, /* 9 BTA_DM_SEARCH_RESULT */ - bta_dm_queue_search, /* 10 BTA_DM_QUEUE_SEARCH */ - bta_dm_queue_disc, /* 11 BTA_DM_QUEUE_DISC */ - bta_dm_search_clear_queue, /* 12 BTA_DM_SEARCH_CLEAR_QUEUE */ - bta_dm_search_cancel_cmpl, /* 13 BTA_DM_SEARCH_CANCEL_CMPL */ - bta_dm_search_cancel_notify, /* 14 BTA_DM_SEARCH_CANCEL_NOTIFY */ - bta_dm_search_cancel_transac_cmpl, /* 15 BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL */ - bta_dm_disc_rmt_name, /* 16 BTA_DM_DISC_RMT_NAME */ - bta_dm_di_disc /* 17 BTA_DM_API_DI_DISCOVER */ +const tBTA_DM_ACTION bta_dm_search_action[] = { + + bta_dm_search_start, /* 0 BTA_DM_API_SEARCH */ + bta_dm_search_cancel, /* 1 BTA_DM_API_SEARCH_CANCEL */ + bta_dm_discover, /* 2 BTA_DM_API_DISCOVER */ + bta_dm_inq_cmpl, /* 3 BTA_DM_INQUIRY_CMPL */ + bta_dm_rmt_name, /* 4 BTA_DM_REMT_NAME */ + bta_dm_sdp_result, /* 5 BTA_DM_SDP_RESULT */ + bta_dm_search_cmpl, /* 6 BTA_DM_SEARCH_CMPL */ + bta_dm_free_sdp_db, /* 7 BTA_DM_FREE_SDP_DB */ + bta_dm_disc_result, /* 8 BTA_DM_DISC_RESULT */ + bta_dm_search_result, /* 9 BTA_DM_SEARCH_RESULT */ + bta_dm_queue_search, /* 10 BTA_DM_QUEUE_SEARCH */ + bta_dm_queue_disc, /* 11 BTA_DM_QUEUE_DISC */ + bta_dm_search_clear_queue, /* 12 BTA_DM_SEARCH_CLEAR_QUEUE */ + bta_dm_search_cancel_cmpl, /* 13 BTA_DM_SEARCH_CANCEL_CMPL */ + bta_dm_search_cancel_notify, /* 14 BTA_DM_SEARCH_CANCEL_NOTIFY */ + bta_dm_search_cancel_transac_cmpl, /* 15 BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL + */ + bta_dm_disc_rmt_name, /* 16 BTA_DM_DISC_RMT_NAME */ + bta_dm_di_disc /* 17 BTA_DM_API_DI_DISCOVER */ #if (BLE_INCLUDED == TRUE) - ,bta_dm_close_gatt_conn + , + bta_dm_close_gatt_conn #endif }; -#define BTA_DM_SEARCH_IGNORE BTA_DM_SEARCH_NUM_ACTIONS +#define BTA_DM_SEARCH_IGNORE BTA_DM_SEARCH_NUM_ACTIONS /* state table information */ -#define BTA_DM_SEARCH_ACTIONS 2 /* number of actions */ -#define BTA_DM_SEARCH_NEXT_STATE 2 /* position of next state */ -#define BTA_DM_SEARCH_NUM_COLS 3 /* number of columns in state tables */ - - +#define BTA_DM_SEARCH_ACTIONS 2 /* number of actions */ +#define BTA_DM_SEARCH_NEXT_STATE 2 /* position of next state */ +#define BTA_DM_SEARCH_NUM_COLS 3 /* number of columns in state tables */ /* state table for listen state */ -const uint8_t bta_dm_search_idle_st_table[][BTA_DM_SEARCH_NUM_COLS] = -{ - -/* Event Action 1 Action 2 Next State */ -/* API_SEARCH */ {BTA_DM_API_SEARCH, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE}, -/* API_SEARCH_CANCEL */ {BTA_DM_SEARCH_CANCEL_NOTIFY, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* API_SEARCH_DISC */ {BTA_DM_API_DISCOVER, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE}, -/* INQUIRY_CMPL */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* REMT_NAME_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* SDP_RESULT_EVT */ {BTA_DM_FREE_SDP_DB, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* SEARCH_CMPL_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* DISCV_RES_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* API_DI_DISCOVER_EVT */ {BTA_DM_API_DI_DISCOVER, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE} +const uint8_t bta_dm_search_idle_st_table[][BTA_DM_SEARCH_NUM_COLS] = { + + /* Event Action 1 + Action 2 Next State */ + /* API_SEARCH */ {BTA_DM_API_SEARCH, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE}, + /* API_SEARCH_CANCEL */ {BTA_DM_SEARCH_CANCEL_NOTIFY, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* API_SEARCH_DISC */ {BTA_DM_API_DISCOVER, BTA_DM_SEARCH_IGNORE, + BTA_DM_DISCOVER_ACTIVE}, + /* INQUIRY_CMPL */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* REMT_NAME_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* SDP_RESULT_EVT */ {BTA_DM_FREE_SDP_DB, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* SEARCH_CMPL_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* DISCV_RES_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* API_DI_DISCOVER_EVT */ {BTA_DM_API_DI_DISCOVER, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE} #if (BLE_INCLUDED == TRUE) -/* DISC_CLOSE_TOUT_EVT */ ,{BTA_DM_CLOSE_GATT_CONN, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE} + /* DISC_CLOSE_TOUT_EVT */, + {BTA_DM_CLOSE_GATT_CONN, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE} #endif }; -const uint8_t bta_dm_search_search_active_st_table[][BTA_DM_SEARCH_NUM_COLS] = -{ - -/* Event Action 1 Action 2 Next State */ -/* API_SEARCH */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE}, -/* API_SEARCH_CANCEL */ {BTA_DM_API_SEARCH_CANCEL, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_CANCELLING}, -/* API_SEARCH_DISC */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE}, -/* INQUIRY_CMPL */ {BTA_DM_INQUIRY_CMPL, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE}, -/* REMT_NAME_EVT */ {BTA_DM_REMT_NAME, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE}, -/* SDP_RESULT_EVT */ {BTA_DM_SDP_RESULT, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE}, -/* SEARCH_CMPL_EVT */ {BTA_DM_SEARCH_CMPL, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* DISCV_RES_EVT */ {BTA_DM_SEARCH_RESULT, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE}, -/* API_DI_DISCOVER_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE} +const uint8_t bta_dm_search_search_active_st_table[][BTA_DM_SEARCH_NUM_COLS] = { + + /* Event Action 1 + Action 2 Next State */ + /* API_SEARCH */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE}, + /* API_SEARCH_CANCEL */ {BTA_DM_API_SEARCH_CANCEL, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_CANCELLING}, + /* API_SEARCH_DISC */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE}, + /* INQUIRY_CMPL */ {BTA_DM_INQUIRY_CMPL, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE}, + /* REMT_NAME_EVT */ {BTA_DM_REMT_NAME, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE}, + /* SDP_RESULT_EVT */ {BTA_DM_SDP_RESULT, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE}, + /* SEARCH_CMPL_EVT */ {BTA_DM_SEARCH_CMPL, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* DISCV_RES_EVT */ {BTA_DM_SEARCH_RESULT, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE}, + /* API_DI_DISCOVER_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_ACTIVE} #if (BLE_INCLUDED == TRUE) -/* DISC_CLOSE_TOUT_EVT */ ,{BTA_DM_CLOSE_GATT_CONN, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE} + /* DISC_CLOSE_TOUT_EVT */, + {BTA_DM_CLOSE_GATT_CONN, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_ACTIVE} #endif }; -const uint8_t bta_dm_search_search_cancelling_st_table[][BTA_DM_SEARCH_NUM_COLS] = -{ - -/* Event Action 1 Action 2 Next State */ -/* API_SEARCH */ {BTA_DM_QUEUE_SEARCH, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_CANCELLING}, -/* API_SEARCH_CANCEL */ {BTA_DM_SEARCH_CLEAR_QUEUE, BTA_DM_SEARCH_CANCEL_NOTIFY, BTA_DM_SEARCH_CANCELLING}, -/* API_SEARCH_DISC */ {BTA_DM_QUEUE_DISC, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_CANCELLING}, -/* INQUIRY_CMPL */ {BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* REMT_NAME_EVT */ {BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IDLE}, -/* SDP_RESULT_EVT */ {BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IDLE}, -/* SEARCH_CMPL_EVT */ {BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IDLE}, -/* DISCV_RES_EVT */ {BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IDLE}, -/* API_DI_DISCOVER_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_CANCELLING} +const uint8_t + bta_dm_search_search_cancelling_st_table[][BTA_DM_SEARCH_NUM_COLS] = { + + /* Event Action 1 + Action 2 Next State */ + /* API_SEARCH */ {BTA_DM_QUEUE_SEARCH, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_CANCELLING}, + /* API_SEARCH_CANCEL */ {BTA_DM_SEARCH_CLEAR_QUEUE, + BTA_DM_SEARCH_CANCEL_NOTIFY, + BTA_DM_SEARCH_CANCELLING}, + /* API_SEARCH_DISC */ {BTA_DM_QUEUE_DISC, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_CANCELLING}, + /* INQUIRY_CMPL */ {BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* REMT_NAME_EVT */ {BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, + BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IDLE}, + /* SDP_RESULT_EVT */ {BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, + BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IDLE}, + /* SEARCH_CMPL_EVT */ {BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, + BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IDLE}, + /* DISCV_RES_EVT */ {BTA_DM_SEARCH_CANCEL_TRANSAC_CMPL, + BTA_DM_SEARCH_CANCEL_CMPL, BTA_DM_SEARCH_IDLE}, + /* API_DI_DISCOVER_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_CANCELLING} #if (BLE_INCLUDED == TRUE) -/* DISC_CLOSE_TOUT_EVT */ ,{BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_CANCELLING} + /* DISC_CLOSE_TOUT_EVT */, + {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_CANCELLING} #endif }; -const uint8_t bta_dm_search_disc_active_st_table[][BTA_DM_SEARCH_NUM_COLS] = -{ - -/* Event Action 1 Action 2 Next State */ -/* API_SEARCH */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE}, -/* API_SEARCH_CANCEL */ {BTA_DM_SEARCH_CANCEL_NOTIFY, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_CANCELLING}, -/* API_SEARCH_DISC */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE}, -/* INQUIRY_CMPL */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE}, -/* REMT_NAME_EVT */ {BTA_DM_DISC_RMT_NAME, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE}, -/* SDP_RESULT_EVT */ {BTA_DM_SDP_RESULT, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE}, -/* SEARCH_CMPL_EVT */ {BTA_DM_SEARCH_CMPL, BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IDLE}, -/* DISCV_RES_EVT */ {BTA_DM_DISC_RESULT, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE}, -/* API_DI_DISCOVER_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE} +const uint8_t bta_dm_search_disc_active_st_table[][BTA_DM_SEARCH_NUM_COLS] = { + + /* Event Action 1 + Action 2 Next State */ + /* API_SEARCH */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_DISCOVER_ACTIVE}, + /* API_SEARCH_CANCEL */ {BTA_DM_SEARCH_CANCEL_NOTIFY, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_CANCELLING}, + /* API_SEARCH_DISC */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_DISCOVER_ACTIVE}, + /* INQUIRY_CMPL */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_DISCOVER_ACTIVE}, + /* REMT_NAME_EVT */ {BTA_DM_DISC_RMT_NAME, BTA_DM_SEARCH_IGNORE, + BTA_DM_DISCOVER_ACTIVE}, + /* SDP_RESULT_EVT */ {BTA_DM_SDP_RESULT, BTA_DM_SEARCH_IGNORE, + BTA_DM_DISCOVER_ACTIVE}, + /* SEARCH_CMPL_EVT */ {BTA_DM_SEARCH_CMPL, BTA_DM_SEARCH_IGNORE, + BTA_DM_SEARCH_IDLE}, + /* DISCV_RES_EVT */ {BTA_DM_DISC_RESULT, BTA_DM_SEARCH_IGNORE, + BTA_DM_DISCOVER_ACTIVE}, + /* API_DI_DISCOVER_EVT */ {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, + BTA_DM_DISCOVER_ACTIVE} #if (BLE_INCLUDED == TRUE) -/* DISC_CLOSE_TOUT_EVT */ ,{BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE} + /* DISC_CLOSE_TOUT_EVT */, + {BTA_DM_SEARCH_IGNORE, BTA_DM_SEARCH_IGNORE, BTA_DM_DISCOVER_ACTIVE} #endif }; @@ -255,12 +287,9 @@ typedef const uint8_t (*tBTA_DM_ST_TBL)[BTA_DM_SEARCH_NUM_COLS]; /* state table */ const tBTA_DM_ST_TBL bta_dm_search_st_tbl[] = { - bta_dm_search_idle_st_table, - bta_dm_search_search_active_st_table, + bta_dm_search_idle_st_table, bta_dm_search_search_active_st_table, bta_dm_search_search_cancelling_st_table, - bta_dm_search_disc_active_st_table -}; - + bta_dm_search_disc_active_st_table}; /******************************************************************************* * @@ -272,11 +301,7 @@ const tBTA_DM_ST_TBL bta_dm_search_st_tbl[] = { * Returns void * ******************************************************************************/ -void bta_dm_sm_disable( ) -{ - bta_sys_deregister( BTA_ID_DM ); -} - +void bta_dm_sm_disable() { bta_sys_deregister(BTA_ID_DM); } /******************************************************************************* * @@ -288,19 +313,17 @@ void bta_dm_sm_disable( ) * Returns void * ******************************************************************************/ -bool bta_dm_sm_execute(BT_HDR *p_msg) -{ - uint16_t event = p_msg->event & 0x00ff; +bool bta_dm_sm_execute(BT_HDR* p_msg) { + uint16_t event = p_msg->event & 0x00ff; - APPL_TRACE_EVENT("bta_dm_sm_execute event:0x%x", event); + APPL_TRACE_EVENT("bta_dm_sm_execute event:0x%x", event); - /* execute action functions */ - if(event < BTA_DM_NUM_ACTIONS) - { - (*bta_dm_action[event])( (tBTA_DM_MSG*) p_msg); - } + /* execute action functions */ + if (event < BTA_DM_NUM_ACTIONS) { + (*bta_dm_action[event])((tBTA_DM_MSG*)p_msg); + } - return true; + return true; } /******************************************************************************* @@ -313,12 +336,7 @@ bool bta_dm_sm_execute(BT_HDR *p_msg) * Returns void * ******************************************************************************/ -void bta_dm_search_sm_disable( ) -{ - bta_sys_deregister( BTA_ID_DM_SEARCH ); - -} - +void bta_dm_search_sm_disable() { bta_sys_deregister(BTA_ID_DM_SEARCH); } /******************************************************************************* * @@ -330,33 +348,28 @@ void bta_dm_search_sm_disable( ) * Returns void * ******************************************************************************/ -bool bta_dm_search_sm_execute(BT_HDR *p_msg) -{ - tBTA_DM_ST_TBL state_table; - uint8_t action; - int i; - - APPL_TRACE_EVENT("bta_dm_search_sm_execute state:%d, event:0x%x", - bta_dm_search_cb.state, p_msg->event); - - /* look up the state table for the current state */ - state_table = bta_dm_search_st_tbl[bta_dm_search_cb.state]; - - bta_dm_search_cb.state = state_table[p_msg->event & 0x00ff][BTA_DM_SEARCH_NEXT_STATE]; - - - /* execute action functions */ - for (i = 0; i < BTA_DM_SEARCH_ACTIONS; i++) - { - if ((action = state_table[p_msg->event & 0x00ff][i]) != BTA_DM_SEARCH_IGNORE) - { - (*bta_dm_search_action[action])( (tBTA_DM_MSG*) p_msg); - } - else - { - break; - } +bool bta_dm_search_sm_execute(BT_HDR* p_msg) { + tBTA_DM_ST_TBL state_table; + uint8_t action; + int i; + + APPL_TRACE_EVENT("bta_dm_search_sm_execute state:%d, event:0x%x", + bta_dm_search_cb.state, p_msg->event); + + /* look up the state table for the current state */ + state_table = bta_dm_search_st_tbl[bta_dm_search_cb.state]; + + bta_dm_search_cb.state = + state_table[p_msg->event & 0x00ff][BTA_DM_SEARCH_NEXT_STATE]; + + /* execute action functions */ + for (i = 0; i < BTA_DM_SEARCH_ACTIONS; i++) { + if ((action = state_table[p_msg->event & 0x00ff][i]) != + BTA_DM_SEARCH_IGNORE) { + (*bta_dm_search_action[action])((tBTA_DM_MSG*)p_msg); + } else { + break; } - return true; + } + return true; } - diff --git a/system/bta/dm/bta_dm_pm.cc b/system/bta/dm/bta_dm_pm.cc index c75e4a45b97..646d03f7ce8 100644 --- a/system/bta/dm/bta_dm_pm.cc +++ b/system/bta/dm/bta_dm_pm.cc @@ -27,41 +27,43 @@ #include #include "bt_common.h" -#include "bta_sys.h" #include "bta_api.h" #include "bta_dm_api.h" #include "bta_dm_int.h" +#include "bta_sys.h" #include "btm_api.h" +extern fixed_queue_t* btu_bta_alarm_queue; -extern fixed_queue_t *btu_bta_alarm_queue; - -static void bta_dm_pm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app_id, BD_ADDR peer_addr); +static void bta_dm_pm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr); static void bta_dm_pm_set_mode(BD_ADDR peer_addr, tBTA_DM_PM_ACTION pm_mode, tBTA_DM_PM_REQ pm_req); -static void bta_dm_pm_timer_cback(void *data); -static void bta_dm_pm_btm_cback(BD_ADDR bd_addr, tBTM_PM_STATUS status, uint16_t value, uint8_t hci_status); +static void bta_dm_pm_timer_cback(void* data); +static void bta_dm_pm_btm_cback(BD_ADDR bd_addr, tBTM_PM_STATUS status, + uint16_t value, uint8_t hci_status); static bool bta_dm_pm_park(BD_ADDR peer_addr); -static bool bta_dm_pm_sniff(tBTA_DM_PEER_DEVICE *p_peer_dev, uint8_t index); -static bool bta_dm_pm_is_sco_active (); +static bool bta_dm_pm_sniff(tBTA_DM_PEER_DEVICE* p_peer_dev, uint8_t index); +static bool bta_dm_pm_is_sco_active(); static int bta_dm_get_sco_index(); static void bta_dm_pm_hid_check(bool bScoActive); -static void bta_dm_pm_set_sniff_policy(tBTA_DM_PEER_DEVICE *p_dev, bool bDisable); -static void bta_dm_pm_stop_timer_by_index(tBTA_PM_TIMER *p_timer, +static void bta_dm_pm_set_sniff_policy(tBTA_DM_PEER_DEVICE* p_dev, + bool bDisable); +static void bta_dm_pm_stop_timer_by_index(tBTA_PM_TIMER* p_timer, uint8_t timer_idx); #if (BTM_SSR_INCLUDED == TRUE) #if (BTA_HH_INCLUDED == TRUE) #include "../hh/bta_hh_int.h" -/* BTA_DM_PM_SSR1 will be dedicated for HH SSR setting entry, no other profile can use it */ -#define BTA_DM_PM_SSR_HH BTA_DM_PM_SSR1 +/* BTA_DM_PM_SSR1 will be dedicated for HH SSR setting entry, no other profile + * can use it */ +#define BTA_DM_PM_SSR_HH BTA_DM_PM_SSR1 #endif static void bta_dm_pm_ssr(BD_ADDR peer_addr); #endif tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs; - /******************************************************************************* * * Function bta_dm_init_pm @@ -72,28 +74,24 @@ tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs; * Returns void * ******************************************************************************/ -void bta_dm_init_pm(void) -{ - memset(&bta_dm_conn_srvcs, 0x00, sizeof(bta_dm_conn_srvcs)); - - /* if there are no power manger entries, so not register */ - if(p_bta_dm_pm_cfg[0].app_id != 0) - { - bta_sys_pm_register((tBTA_SYS_CONN_CBACK*)bta_dm_pm_cback); - - BTM_PmRegister((BTM_PM_REG_SET | BTM_PM_REG_NOTIF), &bta_dm_cb.pm_id, - bta_dm_pm_btm_cback); - } - - /* Need to initialize all PM timer service IDs */ - for (int i = 0; i < BTA_DM_NUM_PM_TIMER; i++) - { - for (int j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) - bta_dm_cb.pm_timer[i].srvc_id[j] = BTA_ID_MAX; - } +void bta_dm_init_pm(void) { + memset(&bta_dm_conn_srvcs, 0x00, sizeof(bta_dm_conn_srvcs)); + + /* if there are no power manger entries, so not register */ + if (p_bta_dm_pm_cfg[0].app_id != 0) { + bta_sys_pm_register((tBTA_SYS_CONN_CBACK*)bta_dm_pm_cback); + + BTM_PmRegister((BTM_PM_REG_SET | BTM_PM_REG_NOTIF), &bta_dm_cb.pm_id, + bta_dm_pm_btm_cback); + } + + /* Need to initialize all PM timer service IDs */ + for (int i = 0; i < BTA_DM_NUM_PM_TIMER; i++) { + for (int j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) + bta_dm_cb.pm_timer[i].srvc_id[j] = BTA_ID_MAX; + } } - /******************************************************************************* * * Function bta_dm_disable_pm @@ -104,25 +102,22 @@ void bta_dm_init_pm(void) * Returns void * ******************************************************************************/ -void bta_dm_disable_pm(void) -{ - BTM_PmRegister( BTM_PM_DEREG, &bta_dm_cb.pm_id, NULL); - - /* - * Deregister the PM callback from the system handling to prevent - * re-enabling the PM timers after this call if the callback is invoked. - */ - bta_sys_pm_register((tBTA_SYS_CONN_CBACK*)NULL); - - /* Need to stop all active timers. */ - for (int i = 0; i < BTA_DM_NUM_PM_TIMER; i++) - { - for (int j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) - { - bta_dm_pm_stop_timer_by_index(&bta_dm_cb.pm_timer[i], j); - bta_dm_cb.pm_timer[i].pm_action[j] = BTA_DM_PM_NO_ACTION; - } +void bta_dm_disable_pm(void) { + BTM_PmRegister(BTM_PM_DEREG, &bta_dm_cb.pm_id, NULL); + + /* + * Deregister the PM callback from the system handling to prevent + * re-enabling the PM timers after this call if the callback is invoked. + */ + bta_sys_pm_register((tBTA_SYS_CONN_CBACK*)NULL); + + /* Need to stop all active timers. */ + for (int i = 0; i < BTA_DM_NUM_PM_TIMER; i++) { + for (int j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) { + bta_dm_pm_stop_timer_by_index(&bta_dm_cb.pm_timer[i], j); + bta_dm_cb.pm_timer[i].pm_action[j] = BTA_DM_PM_NO_ACTION; } + } } /******************************************************************************* @@ -135,15 +130,12 @@ void bta_dm_disable_pm(void) * Returns number of av connections * ******************************************************************************/ -uint8_t bta_dm_get_av_count(void) -{ - uint8_t count = 0; - for (int i = 0; i < bta_dm_conn_srvcs.count; i++) - { - if (bta_dm_conn_srvcs.conn_srvc[i].id == BTA_ID_AV) - ++count; - } - return count; +uint8_t bta_dm_get_av_count(void) { + uint8_t count = 0; + for (int i = 0; i < bta_dm_conn_srvcs.count; i++) { + if (bta_dm_conn_srvcs.conn_srvc[i].id == BTA_ID_AV) ++count; + } + return count; } /******************************************************************************* @@ -156,54 +148,51 @@ uint8_t bta_dm_get_av_count(void) * Returns void * ******************************************************************************/ -static void bta_dm_pm_stop_timer(BD_ADDR peer_addr) -{ - APPL_TRACE_DEBUG("%s: ", __func__); - - for(int i=0; iin_use = true; + uint8_t pm_action) { + p_timer->in_use = true; - if (p_timer->srvc_id[timer_idx] == BTA_ID_MAX) - p_timer->active++; + if (p_timer->srvc_id[timer_idx] == BTA_ID_MAX) p_timer->active++; - if (p_timer->pm_action[timer_idx] < pm_action) - p_timer->pm_action[timer_idx] = pm_action; + if (p_timer->pm_action[timer_idx] < pm_action) + p_timer->pm_action[timer_idx] = pm_action; - p_timer->srvc_id[timer_idx] = srvc_id; + p_timer->srvc_id[timer_idx] = srvc_id; - alarm_set_on_queue(p_timer->timer[timer_idx], timeout_ms, - bta_dm_pm_timer_cback, p_timer->timer[timer_idx], - btu_bta_alarm_queue); + alarm_set_on_queue(p_timer->timer[timer_idx], timeout_ms, + bta_dm_pm_timer_cback, p_timer->timer[timer_idx], + btu_bta_alarm_queue); } /******************************************************************************* @@ -310,24 +291,21 @@ static void bta_dm_pm_start_timer(tBTA_PM_TIMER *p_timer, uint8_t timer_idx, * Returns void * ******************************************************************************/ -static void bta_dm_pm_stop_timer_by_index(tBTA_PM_TIMER *p_timer, - uint8_t timer_idx) -{ - if ((p_timer == NULL) || (timer_idx >= BTA_DM_PM_MODE_TIMER_MAX)) - return; +static void bta_dm_pm_stop_timer_by_index(tBTA_PM_TIMER* p_timer, + uint8_t timer_idx) { + if ((p_timer == NULL) || (timer_idx >= BTA_DM_PM_MODE_TIMER_MAX)) return; - if (p_timer->srvc_id[timer_idx] == BTA_ID_MAX) - return; /* The timer was not scheduled */ + if (p_timer->srvc_id[timer_idx] == BTA_ID_MAX) + return; /* The timer was not scheduled */ - assert(p_timer->in_use && (p_timer->active > 0)); + assert(p_timer->in_use && (p_timer->active > 0)); - alarm_cancel(p_timer->timer[timer_idx]); - p_timer->srvc_id[timer_idx] = BTA_ID_MAX; - /* NOTE: pm_action[timer_idx] intentionally not reset */ + alarm_cancel(p_timer->timer[timer_idx]); + p_timer->srvc_id[timer_idx] = BTA_ID_MAX; + /* NOTE: pm_action[timer_idx] intentionally not reset */ - p_timer->active--; - if (p_timer->active == 0) - p_timer->in_use = false; + p_timer->active--; + if (p_timer->active == 0) p_timer->in_use = false; } /******************************************************************************* @@ -340,182 +318,163 @@ static void bta_dm_pm_stop_timer_by_index(tBTA_PM_TIMER *p_timer, * Returns void * ******************************************************************************/ -static void bta_dm_pm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - - uint8_t i,j; - uint8_t *p = NULL; - tBTA_DM_PEER_DEVICE *p_dev; - tBTA_DM_PM_REQ pm_req = BTA_DM_PM_NEW_REQ; +static void bta_dm_pm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr) { + uint8_t i, j; + uint8_t* p = NULL; + tBTA_DM_PEER_DEVICE* p_dev; + tBTA_DM_PM_REQ pm_req = BTA_DM_PM_NEW_REQ; #if (BTM_SSR_INCLUDED == TRUE) - int index = BTA_DM_PM_SSR0; + int index = BTA_DM_PM_SSR0; #endif - APPL_TRACE_DEBUG("bta_dm_pm_cback: st(%d), id(%d), app(%d)", status, id, app_id); - - p_dev = bta_dm_find_peer_device(peer_addr); - - /* find if there is an power mode entry for the service */ - for(i=1; i<=p_bta_dm_pm_cfg[0].app_id; i++) - { + APPL_TRACE_DEBUG("bta_dm_pm_cback: st(%d), id(%d), app(%d)", status, id, + app_id); - if((p_bta_dm_pm_cfg[i].id == id) - && ((p_bta_dm_pm_cfg[i].app_id == BTA_ALL_APP_ID ) || (p_bta_dm_pm_cfg[i].app_id == app_id ))) - break; + p_dev = bta_dm_find_peer_device(peer_addr); - } + /* find if there is an power mode entry for the service */ + for (i = 1; i <= p_bta_dm_pm_cfg[0].app_id; i++) { + if ((p_bta_dm_pm_cfg[i].id == id) && + ((p_bta_dm_pm_cfg[i].app_id == BTA_ALL_APP_ID) || + (p_bta_dm_pm_cfg[i].app_id == app_id))) + break; + } - /* if no entries are there for the app_id and subsystem in p_bta_dm_pm_spec*/ - if(i> p_bta_dm_pm_cfg[0].app_id) - return; + /* if no entries are there for the app_id and subsystem in p_bta_dm_pm_spec*/ + if (i > p_bta_dm_pm_cfg[0].app_id) return; - bta_dm_pm_stop_timer_by_srvc_id(peer_addr, id); - /*p_dev = bta_dm_find_peer_device(peer_addr);*/ + bta_dm_pm_stop_timer_by_srvc_id(peer_addr, id); +/*p_dev = bta_dm_find_peer_device(peer_addr);*/ #if (BTM_SSR_INCLUDED == TRUE) - /* set SSR parameters on SYS CONN OPEN */ - if((BTA_SYS_CONN_OPEN == status) && p_dev && (p_dev->info & BTA_DM_DI_USE_SSR)) - { - index = p_bta_dm_pm_spec[p_bta_dm_pm_cfg[i].spec_idx].ssr; - } + /* set SSR parameters on SYS CONN OPEN */ + if ((BTA_SYS_CONN_OPEN == status) && p_dev && + (p_dev->info & BTA_DM_DI_USE_SSR)) { + index = p_bta_dm_pm_spec[p_bta_dm_pm_cfg[i].spec_idx].ssr; + } #endif - /* if no action for the event */ - if(p_bta_dm_pm_spec[p_bta_dm_pm_cfg[i].spec_idx].actn_tbl[status][0].power_mode == BTA_DM_PM_NO_ACTION) - { + /* if no action for the event */ + if (p_bta_dm_pm_spec[p_bta_dm_pm_cfg[i].spec_idx] + .actn_tbl[status][0] + .power_mode == BTA_DM_PM_NO_ACTION) { #if (BTM_SSR_INCLUDED == TRUE) - if(BTA_DM_PM_SSR0 == index) /* and do not need to set SSR, return. */ + if (BTA_DM_PM_SSR0 == index) /* and do not need to set SSR, return. */ #endif - return; - } - - for(j=0; j 0) { - pm_req = BTA_DM_PM_RESTART; - APPL_TRACE_DEBUG("%s bta_dm_pm_stop_timer for current service, restart other " - "service timers: count = %d", __func__, bta_dm_conn_srvcs.count); + } else if (j == bta_dm_conn_srvcs.count) { + /* check if we have more connected service that cbs */ + if (bta_dm_conn_srvcs.count == BTA_DM_NUM_CONN_SRVS) { + APPL_TRACE_WARNING("bta_dm_act no more connected service cbs"); + return; } - if(p_dev) - { - p_dev->pm_mode_attempted = 0; - p_dev->pm_mode_failed = 0; - } + /* fill in a new cb */ + bta_dm_conn_srvcs.conn_srvc[j].id = id; + bta_dm_conn_srvcs.conn_srvc[j].app_id = app_id; + bta_dm_conn_srvcs.conn_srvc[j].new_request = true; + bdcpy(bta_dm_conn_srvcs.conn_srvc[j].peer_bdaddr, peer_addr); + + APPL_TRACE_WARNING("new conn_srvc id:%d, app_id:%d", id, app_id); + + bta_dm_conn_srvcs.count++; + bta_dm_conn_srvcs.conn_srvc[j].state = status; + } else { + /* no service is added or removed. only updating status. */ + bta_dm_conn_srvcs.conn_srvc[j].state = status; + } + + /* stop timer */ + bta_dm_pm_stop_timer(peer_addr); + if (bta_dm_conn_srvcs.count > 0) { + pm_req = BTA_DM_PM_RESTART; + APPL_TRACE_DEBUG( + "%s bta_dm_pm_stop_timer for current service, restart other " + "service timers: count = %d", + __func__, bta_dm_conn_srvcs.count); + } + + if (p_dev) { + p_dev->pm_mode_attempted = 0; + p_dev->pm_mode_failed = 0; + } #if (BTM_SSR_INCLUDED == TRUE) - if(p_bta_dm_ssr_spec[index].max_lat + if (p_bta_dm_ssr_spec[index].max_lat #if (BTA_HH_INCLUDED == TRUE) - || index == BTA_DM_PM_SSR_HH + || index == BTA_DM_PM_SSR_HH #endif - ) - { + ) { + bta_dm_pm_ssr(peer_addr); + } else { + if (((NULL != (p = BTM_ReadLocalFeatures())) && + HCI_SNIFF_SUB_RATE_SUPPORTED(p)) && + ((NULL != (p = BTM_ReadRemoteFeatures(peer_addr))) && + HCI_SNIFF_SUB_RATE_SUPPORTED(p)) && + (index == BTA_DM_PM_SSR0)) { + if (status == BTA_SYS_SCO_OPEN) { + APPL_TRACE_DEBUG("%s: SCO inactive, reset SSR to zero", __func__); + BTM_SetSsrParams(peer_addr, 0, 0, 0); + } else if (status == BTA_SYS_SCO_CLOSE) { + APPL_TRACE_DEBUG("%s: SCO active, back to old SSR", __func__); bta_dm_pm_ssr(peer_addr); + } } - else - { - if( ((NULL != (p = BTM_ReadLocalFeatures ())) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)) && - ((NULL != (p = BTM_ReadRemoteFeatures (peer_addr))) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)) && - (index == BTA_DM_PM_SSR0)) - { - if (status == BTA_SYS_SCO_OPEN) - { - APPL_TRACE_DEBUG("%s: SCO inactive, reset SSR to zero", __func__); - BTM_SetSsrParams (peer_addr, 0,0,0 ); - } - else if (status == BTA_SYS_SCO_CLOSE) - { - APPL_TRACE_DEBUG("%s: SCO active, back to old SSR", __func__); - bta_dm_pm_ssr(peer_addr); - } - } - } + } #endif - bta_dm_pm_set_mode(peer_addr, BTA_DM_PM_NO_ACTION, pm_req); - - /* perform the HID link workaround if needed - ** 1. If SCO up/down event is received OR - ** 2. If HID connection open is received and SCO is already active. - ** This will handle the case where HID connects when SCO already active - */ - if ( BTM_IsDeviceUp() && - ( ((status == BTA_SYS_SCO_OPEN) || (status == BTA_SYS_SCO_CLOSE)) || - ((status == BTA_SYS_CONN_OPEN) && (id == BTA_ID_HH) && bta_dm_pm_is_sco_active()) ) ) - { - bool bScoActive; - if (status == BTA_SYS_CONN_OPEN) - bScoActive = true; - else - bScoActive = (status == BTA_SYS_SCO_OPEN); - - bta_dm_pm_hid_check(bScoActive); - } + bta_dm_pm_set_mode(peer_addr, BTA_DM_PM_NO_ACTION, pm_req); + + /* perform the HID link workaround if needed + ** 1. If SCO up/down event is received OR + ** 2. If HID connection open is received and SCO is already active. + ** This will handle the case where HID connects when SCO already active + */ + if (BTM_IsDeviceUp() && + (((status == BTA_SYS_SCO_OPEN) || (status == BTA_SYS_SCO_CLOSE)) || + ((status == BTA_SYS_CONN_OPEN) && (id == BTA_ID_HH) && + bta_dm_pm_is_sco_active()))) { + bool bScoActive; + if (status == BTA_SYS_CONN_OPEN) + bScoActive = true; + else + bScoActive = (status == BTA_SYS_SCO_OPEN); + bta_dm_pm_hid_check(bScoActive); + } } - /******************************************************************************* * * Function bta_dm_pm_set_mode @@ -528,197 +487,161 @@ static void bta_dm_pm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app ******************************************************************************/ static void bta_dm_pm_set_mode(BD_ADDR peer_addr, tBTA_DM_PM_ACTION pm_request, - tBTA_DM_PM_REQ pm_req ) -{ - - tBTA_DM_PM_ACTION pm_action = BTA_DM_PM_NO_ACTION; - period_ms_t timeout_ms = 0; - uint8_t i,j; - tBTA_DM_PM_ACTION failed_pm = 0; - tBTA_DM_PEER_DEVICE *p_peer_device = NULL; - tBTA_DM_PM_ACTION allowed_modes = 0; - tBTA_DM_PM_ACTION pref_modes = 0; - tBTA_DM_PM_CFG *p_pm_cfg; - tBTA_DM_PM_SPEC *p_pm_spec; - tBTA_DM_PM_ACTN *p_act0, *p_act1; - tBTA_DM_SRVCS *p_srvcs = NULL; - bool timer_started = false; - uint8_t timer_idx, available_timer = BTA_DM_PM_MODE_TIMER_MAX; - period_ms_t remaining_ms = 0; - - if(!bta_dm_cb.device_list.count) - return; - - /* see if any attempt to put device in low power mode failed */ - p_peer_device = bta_dm_find_peer_device(peer_addr); - /* if no peer device found return */ - if (p_peer_device == NULL) - return; - - failed_pm = p_peer_device->pm_mode_failed; - - for(i=0; ipeer_bdaddr, peer_addr)) - { - - /* p_bta_dm_pm_cfg[0].app_id is the number of entries */ - for(j=1; j<=p_bta_dm_pm_cfg[0].app_id; j++) - { - if((p_bta_dm_pm_cfg[j].id == p_srvcs->id) - && ((p_bta_dm_pm_cfg[j].app_id == BTA_ALL_APP_ID ) || - (p_bta_dm_pm_cfg[j].app_id == p_srvcs->app_id))) - break; - } - - p_pm_cfg = &p_bta_dm_pm_cfg[j]; - p_pm_spec = &p_bta_dm_pm_spec[p_pm_cfg->spec_idx]; - p_act0 = &p_pm_spec->actn_tbl[p_srvcs->state][0]; - p_act1 = &p_pm_spec->actn_tbl[p_srvcs->state][1]; - - APPL_TRACE_DEBUG("bta_dm_pm_set_mode: srvcsid: %d, state: %d, j: %d", p_srvcs->id, p_srvcs->state, j); - allowed_modes |= p_pm_spec->allow_mask; - - /* PM actions are in the order of strictness */ - - /* first check if the first preference is ok */ - if(!(failed_pm & p_act0->power_mode)) - { - pref_modes |= p_act0->power_mode; - - if(p_act0->power_mode >= pm_action) - { - pm_action = p_act0->power_mode; - - if (pm_req != BTA_DM_PM_NEW_REQ || p_srvcs->new_request) - { - p_srvcs->new_request = false; - timeout_ms = p_act0->timeout; - } - } - } - /* if first preference has already failed, try second preference */ - else if(!(failed_pm & p_act1->power_mode)) - { - pref_modes |= p_act1->power_mode; - - if(p_act1->power_mode > pm_action) - { - pm_action = p_act1->power_mode; - timeout_ms = p_act1->timeout; - } - } + tBTA_DM_PM_REQ pm_req) { + tBTA_DM_PM_ACTION pm_action = BTA_DM_PM_NO_ACTION; + period_ms_t timeout_ms = 0; + uint8_t i, j; + tBTA_DM_PM_ACTION failed_pm = 0; + tBTA_DM_PEER_DEVICE* p_peer_device = NULL; + tBTA_DM_PM_ACTION allowed_modes = 0; + tBTA_DM_PM_ACTION pref_modes = 0; + tBTA_DM_PM_CFG* p_pm_cfg; + tBTA_DM_PM_SPEC* p_pm_spec; + tBTA_DM_PM_ACTN *p_act0, *p_act1; + tBTA_DM_SRVCS* p_srvcs = NULL; + bool timer_started = false; + uint8_t timer_idx, available_timer = BTA_DM_PM_MODE_TIMER_MAX; + period_ms_t remaining_ms = 0; + + if (!bta_dm_cb.device_list.count) return; + + /* see if any attempt to put device in low power mode failed */ + p_peer_device = bta_dm_find_peer_device(peer_addr); + /* if no peer device found return */ + if (p_peer_device == NULL) return; + + failed_pm = p_peer_device->pm_mode_failed; + + for (i = 0; i < bta_dm_conn_srvcs.count; i++) { + p_srvcs = &bta_dm_conn_srvcs.conn_srvc[i]; + if (!bdcmp(p_srvcs->peer_bdaddr, peer_addr)) { + /* p_bta_dm_pm_cfg[0].app_id is the number of entries */ + for (j = 1; j <= p_bta_dm_pm_cfg[0].app_id; j++) { + if ((p_bta_dm_pm_cfg[j].id == p_srvcs->id) && + ((p_bta_dm_pm_cfg[j].app_id == BTA_ALL_APP_ID) || + (p_bta_dm_pm_cfg[j].app_id == p_srvcs->app_id))) + break; + } + + p_pm_cfg = &p_bta_dm_pm_cfg[j]; + p_pm_spec = &p_bta_dm_pm_spec[p_pm_cfg->spec_idx]; + p_act0 = &p_pm_spec->actn_tbl[p_srvcs->state][0]; + p_act1 = &p_pm_spec->actn_tbl[p_srvcs->state][1]; + + APPL_TRACE_DEBUG("bta_dm_pm_set_mode: srvcsid: %d, state: %d, j: %d", + p_srvcs->id, p_srvcs->state, j); + allowed_modes |= p_pm_spec->allow_mask; + + /* PM actions are in the order of strictness */ + + /* first check if the first preference is ok */ + if (!(failed_pm & p_act0->power_mode)) { + pref_modes |= p_act0->power_mode; + + if (p_act0->power_mode >= pm_action) { + pm_action = p_act0->power_mode; + + if (pm_req != BTA_DM_PM_NEW_REQ || p_srvcs->new_request) { + p_srvcs->new_request = false; + timeout_ms = p_act0->timeout; + } } - } - - if(pm_action & (BTA_DM_PM_PARK | BTA_DM_PM_SNIFF)) - { - /* some service don't like the mode */ - if(!(allowed_modes & pm_action)) - { - - /* select the other mode if its allowed and preferred, otherwise 0 which is BTA_DM_PM_NO_ACTION */ - pm_action = (allowed_modes & (BTA_DM_PM_PARK | BTA_DM_PM_SNIFF) & pref_modes); - - /* no timeout needed if no action is required */ - if(pm_action == BTA_DM_PM_NO_ACTION) - { - timeout_ms = 0; - } - + } + /* if first preference has already failed, try second preference */ + else if (!(failed_pm & p_act1->power_mode)) { + pref_modes |= p_act1->power_mode; + + if (p_act1->power_mode > pm_action) { + pm_action = p_act1->power_mode; + timeout_ms = p_act1->timeout; } + } } - /* if need to start a timer */ - if ((pm_req != BTA_DM_PM_EXECUTE) && (timeout_ms > 0)) - { - for (i=0; iid, pm_action); - } - timer_started = true; - } - break; - } - else if (!bta_dm_cb.pm_timer[i].in_use) - { - APPL_TRACE_DEBUG("%s dm_pm_timer:%d, %d ms", __func__, i, - timeout_ms); - if (available_timer == BTA_DM_PM_MODE_TIMER_MAX) - available_timer = i; - } - } - /* new power mode for a new active connection */ - if (!timer_started) - { - if( available_timer != BTA_DM_PM_MODE_TIMER_MAX) - { - bdcpy(bta_dm_cb.pm_timer[available_timer].peer_bdaddr, peer_addr); - if ((timer_idx = bta_pm_action_to_timer_idx(pm_action)) != BTA_DM_PM_MODE_TIMER_MAX) - { - bta_dm_pm_start_timer(&bta_dm_cb.pm_timer[available_timer], - timer_idx, timeout_ms, - p_srvcs->id, pm_action); - timer_started = true; - } - } - /* no more timers */ - else - { - APPL_TRACE_WARNING("bta_dm_act dm_pm_timer no more"); - } - } - return; - } - /* if pending power mode timer expires, and currecnt link is in a - lower power mode than current profile requirement, igonre it */ - if (pm_req == BTA_DM_PM_EXECUTE && pm_request < pm_action) - { - APPL_TRACE_ERROR("Ignore the power mode request: %d", pm_request) - return; - } - if(pm_action == BTA_DM_PM_PARK) - { - p_peer_device->pm_mode_attempted = BTA_DM_PM_PARK; - bta_dm_pm_park(peer_addr); + } + + if (pm_action & (BTA_DM_PM_PARK | BTA_DM_PM_SNIFF)) { + /* some service don't like the mode */ + if (!(allowed_modes & pm_action)) { + /* select the other mode if its allowed and preferred, otherwise 0 which + * is BTA_DM_PM_NO_ACTION */ + pm_action = + (allowed_modes & (BTA_DM_PM_PARK | BTA_DM_PM_SNIFF) & pref_modes); + + /* no timeout needed if no action is required */ + if (pm_action == BTA_DM_PM_NO_ACTION) { + timeout_ms = 0; + } } - else if(pm_action & BTA_DM_PM_SNIFF) - { - /* dont initiate SNIFF, if link_policy has it disabled */ - if (p_peer_device->link_policy & HCI_ENABLE_SNIFF_MODE) - { - p_peer_device->pm_mode_attempted = BTA_DM_PM_SNIFF; - bta_dm_pm_sniff(p_peer_device, (uint8_t)(pm_action & 0x0F) ); + } + /* if need to start a timer */ + if ((pm_req != BTA_DM_PM_EXECUTE) && (timeout_ms > 0)) { + for (i = 0; i < BTA_DM_NUM_PM_TIMER; i++) { + if (bta_dm_cb.pm_timer[i].in_use && + bdcmp(bta_dm_cb.pm_timer[i].peer_bdaddr, peer_addr) == 0) { + if ((timer_idx = bta_pm_action_to_timer_idx(pm_action)) != + BTA_DM_PM_MODE_TIMER_MAX) { + remaining_ms = + alarm_get_remaining_ms(bta_dm_cb.pm_timer[i].timer[timer_idx]); + if (remaining_ms < timeout_ms) { + /* Cancel and restart the timer */ + /* + * TODO: The value of pm_action[timer_idx] is + * conditionally updated between the two function + * calls below when the timer is restarted. + * This logic is error-prone and should be eliminated + * in the future. + */ + bta_dm_pm_stop_timer_by_index(&bta_dm_cb.pm_timer[i], timer_idx); + bta_dm_pm_start_timer(&bta_dm_cb.pm_timer[i], timer_idx, timeout_ms, + p_srvcs->id, pm_action); + } + timer_started = true; } - else - { - APPL_TRACE_DEBUG("bta_dm_pm_set_mode: Link policy disallows SNIFF, ignore request"); + break; + } else if (!bta_dm_cb.pm_timer[i].in_use) { + APPL_TRACE_DEBUG("%s dm_pm_timer:%d, %d ms", __func__, i, timeout_ms); + if (available_timer == BTA_DM_PM_MODE_TIMER_MAX) available_timer = i; + } + } + /* new power mode for a new active connection */ + if (!timer_started) { + if (available_timer != BTA_DM_PM_MODE_TIMER_MAX) { + bdcpy(bta_dm_cb.pm_timer[available_timer].peer_bdaddr, peer_addr); + if ((timer_idx = bta_pm_action_to_timer_idx(pm_action)) != + BTA_DM_PM_MODE_TIMER_MAX) { + bta_dm_pm_start_timer(&bta_dm_cb.pm_timer[available_timer], timer_idx, + timeout_ms, p_srvcs->id, pm_action); + timer_started = true; } + } + /* no more timers */ + else { + APPL_TRACE_WARNING("bta_dm_act dm_pm_timer no more"); + } } - else if(pm_action == BTA_DM_PM_ACTIVE) - { - bta_dm_pm_active(peer_addr); + return; + } + /* if pending power mode timer expires, and currecnt link is in a + lower power mode than current profile requirement, igonre it */ + if (pm_req == BTA_DM_PM_EXECUTE && pm_request < pm_action) { + APPL_TRACE_ERROR("Ignore the power mode request: %d", pm_request) + return; + } + if (pm_action == BTA_DM_PM_PARK) { + p_peer_device->pm_mode_attempted = BTA_DM_PM_PARK; + bta_dm_pm_park(peer_addr); + } else if (pm_action & BTA_DM_PM_SNIFF) { + /* dont initiate SNIFF, if link_policy has it disabled */ + if (p_peer_device->link_policy & HCI_ENABLE_SNIFF_MODE) { + p_peer_device->pm_mode_attempted = BTA_DM_PM_SNIFF; + bta_dm_pm_sniff(p_peer_device, (uint8_t)(pm_action & 0x0F)); + } else { + APPL_TRACE_DEBUG( + "bta_dm_pm_set_mode: Link policy disallows SNIFF, ignore request"); } + } else if (pm_action == BTA_DM_PM_ACTIVE) { + bta_dm_pm_active(peer_addr); + } } /******************************************************************************* * @@ -730,20 +653,17 @@ static void bta_dm_pm_set_mode(BD_ADDR peer_addr, tBTA_DM_PM_ACTION pm_request, * Returns true if park attempted, false otherwise. * ******************************************************************************/ -static bool bta_dm_pm_park(BD_ADDR peer_addr) -{ - - tBTM_PM_MODE mode = BTM_PM_STS_ACTIVE; +static bool bta_dm_pm_park(BD_ADDR peer_addr) { + tBTM_PM_MODE mode = BTM_PM_STS_ACTIVE; - /* if not in park mode, switch to park */ - BTM_ReadPowerMode(peer_addr, &mode); - - if(mode != BTM_PM_MD_PARK) - { - BTM_SetPowerMode (bta_dm_cb.pm_id, peer_addr, &p_bta_dm_pm_md[BTA_DM_PM_PARK_IDX]); - } - return true; + /* if not in park mode, switch to park */ + BTM_ReadPowerMode(peer_addr, &mode); + if (mode != BTM_PM_MD_PARK) { + BTM_SetPowerMode(bta_dm_cb.pm_id, peer_addr, + &p_bta_dm_pm_md[BTA_DM_PM_PARK_IDX]); + } + return true; } /******************************************************************************* @@ -756,65 +676,63 @@ static bool bta_dm_pm_park(BD_ADDR peer_addr) * Returns true if sniff attempted, false otherwise. * ******************************************************************************/ -static bool bta_dm_pm_sniff(tBTA_DM_PEER_DEVICE *p_peer_dev, uint8_t index) -{ - tBTM_PM_MODE mode = BTM_PM_STS_ACTIVE; - tBTM_PM_PWR_MD pwr_md; - tBTM_STATUS status; +static bool bta_dm_pm_sniff(tBTA_DM_PEER_DEVICE* p_peer_dev, uint8_t index) { + tBTM_PM_MODE mode = BTM_PM_STS_ACTIVE; + tBTM_PM_PWR_MD pwr_md; + tBTM_STATUS status; #if (BTM_SSR_INCLUDED == TRUE) - uint8_t *p_rem_feat = NULL; + uint8_t* p_rem_feat = NULL; #endif - BTM_ReadPowerMode(p_peer_dev->peer_bdaddr, &mode); - p_rem_feat = BTM_ReadRemoteFeatures (p_peer_dev->peer_bdaddr); + BTM_ReadPowerMode(p_peer_dev->peer_bdaddr, &mode); + p_rem_feat = BTM_ReadRemoteFeatures(p_peer_dev->peer_bdaddr); #if (BTM_SSR_INCLUDED == TRUE) - APPL_TRACE_DEBUG("bta_dm_pm_sniff cur:%d, idx:%d, info:x%x", mode, index, p_peer_dev->info); - if (mode != BTM_PM_MD_SNIFF || - (HCI_SNIFF_SUB_RATE_SUPPORTED(BTM_ReadLocalFeatures ()) && p_rem_feat && - HCI_SNIFF_SUB_RATE_SUPPORTED(p_rem_feat) && - !(p_peer_dev->info & BTA_DM_DI_USE_SSR))) + APPL_TRACE_DEBUG("bta_dm_pm_sniff cur:%d, idx:%d, info:x%x", mode, index, + p_peer_dev->info); + if (mode != BTM_PM_MD_SNIFF || + (HCI_SNIFF_SUB_RATE_SUPPORTED(BTM_ReadLocalFeatures()) && p_rem_feat && + HCI_SNIFF_SUB_RATE_SUPPORTED(p_rem_feat) && + !(p_peer_dev->info & BTA_DM_DI_USE_SSR))) #else - APPL_TRACE_DEBUG("bta_dm_pm_sniff cur:%d, idx:%d", mode, index); - if(mode != BTM_PM_MD_SNIFF) + APPL_TRACE_DEBUG("bta_dm_pm_sniff cur:%d, idx:%d", mode, index); + if (mode != BTM_PM_MD_SNIFF) #endif - { + { #if (BTM_SSR_INCLUDED == TRUE) - /* Dont initiate Sniff if controller has alreay accepted - * remote sniff params. This avoid sniff loop issue with - * some agrresive headsets who use sniff latencies more than - * DUT supported range of Sniff intervals.*/ - if ((mode == BTM_PM_MD_SNIFF) && (p_peer_dev->info & BTA_DM_DI_ACP_SNIFF)) - { - APPL_TRACE_DEBUG("%s: already in remote initiate sniff", __func__); - return true; - } + /* Dont initiate Sniff if controller has alreay accepted + * remote sniff params. This avoid sniff loop issue with + * some agrresive headsets who use sniff latencies more than + * DUT supported range of Sniff intervals.*/ + if ((mode == BTM_PM_MD_SNIFF) && (p_peer_dev->info & BTA_DM_DI_ACP_SNIFF)) { + APPL_TRACE_DEBUG("%s: already in remote initiate sniff", __func__); + return true; + } #endif - /* if the current mode is not sniff, issue the sniff command. - * If sniff, but SSR is not used in this link, still issue the command */ - memcpy(&pwr_md, &p_bta_dm_pm_md[index], sizeof (tBTM_PM_PWR_MD)); - if (p_peer_dev->info & BTA_DM_DI_INT_SNIFF) - { - pwr_md.mode |= BTM_PM_MD_FORCE; - } - status = BTM_SetPowerMode (bta_dm_cb.pm_id, p_peer_dev->peer_bdaddr, &pwr_md); - if (status == BTM_CMD_STORED|| status == BTM_CMD_STARTED) - { - p_peer_dev->info &= ~(BTA_DM_DI_INT_SNIFF|BTA_DM_DI_ACP_SNIFF); - p_peer_dev->info |= BTA_DM_DI_SET_SNIFF; - } - else if (status == BTM_SUCCESS) - { - APPL_TRACE_DEBUG("bta_dm_pm_sniff BTM_SetPowerMode() returns BTM_SUCCESS"); - p_peer_dev->info &= ~(BTA_DM_DI_INT_SNIFF|BTA_DM_DI_ACP_SNIFF|BTA_DM_DI_SET_SNIFF); - } - else /* error */ - { - APPL_TRACE_ERROR("bta_dm_pm_sniff BTM_SetPowerMode() returns ERROR status=%d", status); - p_peer_dev->info &= ~(BTA_DM_DI_INT_SNIFF|BTA_DM_DI_ACP_SNIFF|BTA_DM_DI_SET_SNIFF); - } + /* if the current mode is not sniff, issue the sniff command. + * If sniff, but SSR is not used in this link, still issue the command */ + memcpy(&pwr_md, &p_bta_dm_pm_md[index], sizeof(tBTM_PM_PWR_MD)); + if (p_peer_dev->info & BTA_DM_DI_INT_SNIFF) { + pwr_md.mode |= BTM_PM_MD_FORCE; } - return true; - + status = + BTM_SetPowerMode(bta_dm_cb.pm_id, p_peer_dev->peer_bdaddr, &pwr_md); + if (status == BTM_CMD_STORED || status == BTM_CMD_STARTED) { + p_peer_dev->info &= ~(BTA_DM_DI_INT_SNIFF | BTA_DM_DI_ACP_SNIFF); + p_peer_dev->info |= BTA_DM_DI_SET_SNIFF; + } else if (status == BTM_SUCCESS) { + APPL_TRACE_DEBUG( + "bta_dm_pm_sniff BTM_SetPowerMode() returns BTM_SUCCESS"); + p_peer_dev->info &= + ~(BTA_DM_DI_INT_SNIFF | BTA_DM_DI_ACP_SNIFF | BTA_DM_DI_SET_SNIFF); + } else /* error */ + { + APPL_TRACE_ERROR( + "bta_dm_pm_sniff BTM_SetPowerMode() returns ERROR status=%d", status); + p_peer_dev->info &= + ~(BTA_DM_DI_INT_SNIFF | BTA_DM_DI_ACP_SNIFF | BTA_DM_DI_SET_SNIFF); + } + } + return true; } /******************************************************************************* * @@ -826,75 +744,73 @@ static bool bta_dm_pm_sniff(tBTA_DM_PEER_DEVICE *p_peer_dev, uint8_t index) * ******************************************************************************/ #if (BTM_SSR_INCLUDED == TRUE) -static void bta_dm_pm_ssr(BD_ADDR peer_addr) -{ - tBTA_DM_SSR_SPEC *p_spec, *p_spec_cur; - uint8_t i,j; - int ssr = BTA_DM_PM_SSR0; - - /* go through the connected services */ - for(i=0; imax_lat, &p_spec_cur->min_rmt_to) == BTA_HH_ERR) - continue; - } + /* HH has the per connection SSR preference, already read the SSR params + * from BTA HH */ + if (p_bta_dm_pm_spec[p_bta_dm_pm_cfg[j].spec_idx].ssr == + BTA_DM_PM_SSR_HH) { + if (bta_hh_read_ssr_param(peer_addr, &p_spec_cur->max_lat, + &p_spec_cur->min_rmt_to) == BTA_HH_ERR) + continue; + } #endif - if (p_spec_cur->max_lat < p_spec->max_lat || - (ssr == BTA_DM_PM_SSR0 && p_bta_dm_pm_spec[p_bta_dm_pm_cfg[j].spec_idx].ssr != BTA_DM_PM_SSR0)) - { - ssr = p_bta_dm_pm_spec[p_bta_dm_pm_cfg[j].spec_idx].ssr; - } - - } + if (p_spec_cur->max_lat < p_spec->max_lat || + (ssr == BTA_DM_PM_SSR0 && + p_bta_dm_pm_spec[p_bta_dm_pm_cfg[j].spec_idx].ssr != + BTA_DM_PM_SSR0)) { + ssr = p_bta_dm_pm_spec[p_bta_dm_pm_cfg[j].spec_idx].ssr; + } } - - p_spec = &p_bta_dm_ssr_spec[ssr]; - APPL_TRACE_WARNING("%s ssr:%d, lat:%d", __func__, ssr, p_spec->max_lat); - - if (p_spec->max_lat) - { - /* Avoid SSR reset on device which has SCO connected */ - if (bta_dm_pm_is_sco_active()) - { - int idx = bta_dm_get_sco_index(); - if (idx != -1) - { - if (bdcmp(bta_dm_conn_srvcs.conn_srvc[idx].peer_bdaddr, peer_addr) == 0) - { - APPL_TRACE_WARNING("%s SCO is active on device, ignore SSR", __func__); - return; - } - } + } + + p_spec = &p_bta_dm_ssr_spec[ssr]; + APPL_TRACE_WARNING("%s ssr:%d, lat:%d", __func__, ssr, p_spec->max_lat); + + if (p_spec->max_lat) { + /* Avoid SSR reset on device which has SCO connected */ + if (bta_dm_pm_is_sco_active()) { + int idx = bta_dm_get_sco_index(); + if (idx != -1) { + if (bdcmp(bta_dm_conn_srvcs.conn_srvc[idx].peer_bdaddr, peer_addr) == + 0) { + APPL_TRACE_WARNING("%s SCO is active on device, ignore SSR", + __func__); + return; } - - /* set the SSR parameters. */ - BTM_SetSsrParams (peer_addr, p_spec->max_lat, - p_spec->min_rmt_to, p_spec->min_loc_to); + } } + + /* set the SSR parameters. */ + BTM_SetSsrParams(peer_addr, p_spec->max_lat, p_spec->min_rmt_to, + p_spec->min_loc_to); + } } #endif /******************************************************************************* @@ -907,20 +823,16 @@ static void bta_dm_pm_ssr(BD_ADDR peer_addr) * Returns void * ******************************************************************************/ -void bta_dm_pm_active(BD_ADDR peer_addr) -{ - tBTM_PM_PWR_MD pm; - - memset( (void*)&pm, 0, sizeof(pm)); - - /* switch to active mode */ - pm.mode = BTM_PM_MD_ACTIVE; - BTM_SetPowerMode (bta_dm_cb.pm_id, peer_addr, &pm); +void bta_dm_pm_active(BD_ADDR peer_addr) { + tBTM_PM_PWR_MD pm; + memset((void*)&pm, 0, sizeof(pm)); + /* switch to active mode */ + pm.mode = BTM_PM_MD_ACTIVE; + BTM_SetPowerMode(bta_dm_cb.pm_id, peer_addr, &pm); } - /******************************************************************************* * * Function bta_dm_pm_btm_cback @@ -931,18 +843,18 @@ void bta_dm_pm_active(BD_ADDR peer_addr) * Returns void * ******************************************************************************/ -static void bta_dm_pm_btm_cback(BD_ADDR bd_addr, tBTM_PM_STATUS status, uint16_t value, uint8_t hci_status) -{ - tBTA_DM_PM_BTM_STATUS *p_buf = - (tBTA_DM_PM_BTM_STATUS *)osi_malloc(sizeof(tBTA_DM_PM_BTM_STATUS)); - - p_buf->hdr.event = BTA_DM_PM_BTM_STATUS_EVT; - p_buf->status = status; - p_buf->value = value; - p_buf->hci_status = hci_status; - bdcpy(p_buf->bd_addr, bd_addr); - - bta_sys_sendmsg(p_buf); +static void bta_dm_pm_btm_cback(BD_ADDR bd_addr, tBTM_PM_STATUS status, + uint16_t value, uint8_t hci_status) { + tBTA_DM_PM_BTM_STATUS* p_buf = + (tBTA_DM_PM_BTM_STATUS*)osi_malloc(sizeof(tBTA_DM_PM_BTM_STATUS)); + + p_buf->hdr.event = BTA_DM_PM_BTM_STATUS_EVT; + p_buf->status = status; + p_buf->value = value; + p_buf->hci_status = hci_status; + bdcpy(p_buf->bd_addr, bd_addr); + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -955,44 +867,38 @@ static void bta_dm_pm_btm_cback(BD_ADDR bd_addr, tBTM_PM_STATUS status, uint16_t * Returns void * ******************************************************************************/ -static void bta_dm_pm_timer_cback(void *data) -{ - uint8_t i, j; - alarm_t *alarm = (alarm_t *)data; - - for (i=0; ihdr.event = BTA_DM_PM_TIMER_EVT; - p_buf->pm_request = bta_dm_cb.pm_timer[i].pm_action[j]; - bdcpy(p_buf->bd_addr, bta_dm_cb.pm_timer[i].peer_bdaddr); + tBTA_DM_PM_TIMER* p_buf = + (tBTA_DM_PM_TIMER*)osi_malloc(sizeof(tBTA_DM_PM_TIMER)); + p_buf->hdr.event = BTA_DM_PM_TIMER_EVT; + p_buf->pm_request = bta_dm_cb.pm_timer[i].pm_action[j]; + bdcpy(p_buf->bd_addr, bta_dm_cb.pm_timer[i].peer_bdaddr); - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -1005,98 +911,92 @@ static void bta_dm_pm_timer_cback(void *data) * Returns void * ******************************************************************************/ -void bta_dm_pm_btm_status(tBTA_DM_MSG *p_data) -{ - APPL_TRACE_DEBUG("%s status: %d", __func__, p_data->pm_status.status); - - tBTA_DM_PEER_DEVICE *p_dev = bta_dm_find_peer_device(p_data->pm_status.bd_addr); - if (NULL == p_dev) - return; - - tBTA_DM_DEV_INFO info = p_dev->info; - /* check new mode */ - switch (p_data->pm_status.status) - { - case BTM_PM_STS_ACTIVE: - /* if our sniff or park attempt failed - we should not try it again*/ - if (p_data->pm_status.hci_status != 0) - { - APPL_TRACE_ERROR("%s hci_status=%d", __func__, p_data->pm_status.hci_status); - p_dev->info &= ~(BTA_DM_DI_INT_SNIFF|BTA_DM_DI_ACP_SNIFF|BTA_DM_DI_SET_SNIFF); - - if(p_dev->pm_mode_attempted &(BTA_DM_PM_PARK | BTA_DM_PM_SNIFF)) - { - p_dev->pm_mode_failed - |= ((BTA_DM_PM_PARK | BTA_DM_PM_SNIFF) & p_dev->pm_mode_attempted); - bta_dm_pm_stop_timer_by_mode(p_data->pm_status.bd_addr, p_dev->pm_mode_attempted); - bta_dm_pm_set_mode(p_data->pm_status.bd_addr, BTA_DM_PM_NO_ACTION, BTA_DM_PM_RESTART); - } - } - else - { +void bta_dm_pm_btm_status(tBTA_DM_MSG* p_data) { + APPL_TRACE_DEBUG("%s status: %d", __func__, p_data->pm_status.status); + + tBTA_DM_PEER_DEVICE* p_dev = + bta_dm_find_peer_device(p_data->pm_status.bd_addr); + if (NULL == p_dev) return; + + tBTA_DM_DEV_INFO info = p_dev->info; + /* check new mode */ + switch (p_data->pm_status.status) { + case BTM_PM_STS_ACTIVE: + /* if our sniff or park attempt failed + we should not try it again*/ + if (p_data->pm_status.hci_status != 0) { + APPL_TRACE_ERROR("%s hci_status=%d", __func__, + p_data->pm_status.hci_status); + p_dev->info &= + ~(BTA_DM_DI_INT_SNIFF | BTA_DM_DI_ACP_SNIFF | BTA_DM_DI_SET_SNIFF); + + if (p_dev->pm_mode_attempted & (BTA_DM_PM_PARK | BTA_DM_PM_SNIFF)) { + p_dev->pm_mode_failed |= + ((BTA_DM_PM_PARK | BTA_DM_PM_SNIFF) & p_dev->pm_mode_attempted); + bta_dm_pm_stop_timer_by_mode(p_data->pm_status.bd_addr, + p_dev->pm_mode_attempted); + bta_dm_pm_set_mode(p_data->pm_status.bd_addr, BTA_DM_PM_NO_ACTION, + BTA_DM_PM_RESTART); + } + } else { #if (BTM_SSR_INCLUDED == TRUE) - if(p_dev->prev_low) - { - /* need to send the SSR paramaters to controller again */ - bta_dm_pm_ssr(p_dev->peer_bdaddr); - } - p_dev->prev_low = BTM_PM_STS_ACTIVE; + if (p_dev->prev_low) { + /* need to send the SSR paramaters to controller again */ + bta_dm_pm_ssr(p_dev->peer_bdaddr); + } + p_dev->prev_low = BTM_PM_STS_ACTIVE; #endif - /* link to active mode, need to restart the timer for next low power mode if needed */ - bta_dm_pm_stop_timer(p_data->pm_status.bd_addr); - bta_dm_pm_set_mode(p_data->pm_status.bd_addr, BTA_DM_PM_NO_ACTION, BTA_DM_PM_RESTART); - } - break; + /* link to active mode, need to restart the timer for next low power + * mode if needed */ + bta_dm_pm_stop_timer(p_data->pm_status.bd_addr); + bta_dm_pm_set_mode(p_data->pm_status.bd_addr, BTA_DM_PM_NO_ACTION, + BTA_DM_PM_RESTART); + } + break; #if (BTM_SSR_INCLUDED == TRUE) - case BTM_PM_STS_PARK: - case BTM_PM_STS_HOLD: - /* save the previous low power mode - for SSR. - * SSR parameters are sent to controller on "conn open". - * the numbers stay good until park/hold/detach */ - if(p_dev->info & BTA_DM_DI_USE_SSR) - p_dev->prev_low = p_data->pm_status.status; - break; - - case BTM_PM_STS_SSR: - if(p_data->pm_status.value) - p_dev->info |= BTA_DM_DI_USE_SSR; - else - p_dev->info &= ~BTA_DM_DI_USE_SSR; - break; + case BTM_PM_STS_PARK: + case BTM_PM_STS_HOLD: + /* save the previous low power mode - for SSR. + * SSR parameters are sent to controller on "conn open". + * the numbers stay good until park/hold/detach */ + if (p_dev->info & BTA_DM_DI_USE_SSR) + p_dev->prev_low = p_data->pm_status.status; + break; + + case BTM_PM_STS_SSR: + if (p_data->pm_status.value) + p_dev->info |= BTA_DM_DI_USE_SSR; + else + p_dev->info &= ~BTA_DM_DI_USE_SSR; + break; #endif - case BTM_PM_STS_SNIFF: - if (p_data->pm_status.hci_status == 0) - { - /* Stop PM timer now if already active for - * particular device since link is already - * put in sniff mode by remote device, and - * PM timer sole purpose is to put the link - * in sniff mode from host side. - */ - bta_dm_pm_stop_timer(p_data->pm_status.bd_addr); - } - else - { - p_dev->info &= ~(BTA_DM_DI_SET_SNIFF | BTA_DM_DI_INT_SNIFF | BTA_DM_DI_ACP_SNIFF); - if (info & BTA_DM_DI_SET_SNIFF) - p_dev->info |= BTA_DM_DI_INT_SNIFF; - else - p_dev->info |= BTA_DM_DI_ACP_SNIFF; - } - break; - - case BTM_PM_STS_ERROR: - p_dev->info &= ~BTA_DM_DI_SET_SNIFF; - break; - - default: - break; - } - + case BTM_PM_STS_SNIFF: + if (p_data->pm_status.hci_status == 0) { + /* Stop PM timer now if already active for + * particular device since link is already + * put in sniff mode by remote device, and + * PM timer sole purpose is to put the link + * in sniff mode from host side. + */ + bta_dm_pm_stop_timer(p_data->pm_status.bd_addr); + } else { + p_dev->info &= + ~(BTA_DM_DI_SET_SNIFF | BTA_DM_DI_INT_SNIFF | BTA_DM_DI_ACP_SNIFF); + if (info & BTA_DM_DI_SET_SNIFF) + p_dev->info |= BTA_DM_DI_INT_SNIFF; + else + p_dev->info |= BTA_DM_DI_ACP_SNIFF; + } + break; + case BTM_PM_STS_ERROR: + p_dev->info &= ~BTA_DM_DI_SET_SNIFF; + break; + default: + break; + } } /******************************************************************************* @@ -1109,10 +1009,10 @@ void bta_dm_pm_btm_status(tBTA_DM_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_dm_pm_timer(tBTA_DM_MSG *p_data) -{ - APPL_TRACE_EVENT("%s", __func__); - bta_dm_pm_set_mode(p_data->pm_timer.bd_addr, p_data->pm_timer.pm_request, BTA_DM_PM_EXECUTE); +void bta_dm_pm_timer(tBTA_DM_MSG* p_data) { + APPL_TRACE_EVENT("%s", __func__); + bta_dm_pm_set_mode(p_data->pm_timer.bd_addr, p_data->pm_timer.pm_request, + BTA_DM_PM_EXECUTE); } /******************************************************************************* @@ -1124,20 +1024,16 @@ void bta_dm_pm_timer(tBTA_DM_MSG *p_data) * Returns tBTA_DM_PEER_DEVICE * ******************************************************************************/ -tBTA_DM_PEER_DEVICE * bta_dm_find_peer_device(const BD_ADDR peer_addr) -{ - tBTA_DM_PEER_DEVICE *p_dev = NULL; - - for (int i=0; ipeer_bdaddr); + } else { + /* allow sniff after sco is closed */ + policy_setting = bta_dm_cb.cur_policy; + } - /* update device record and set link policy */ - p_dev->link_policy = policy_setting; - BTM_SetLinkPolicy(p_dev->peer_bdaddr, &policy_setting); + /* if disabling SNIFF, make sure link is Active */ + if (bDisable) bta_dm_pm_active(p_dev->peer_bdaddr); + /* update device record and set link policy */ + p_dev->link_policy = policy_setting; + BTM_SetLinkPolicy(p_dev->peer_bdaddr, &policy_setting); } #if (BLE_INCLUDED == TRUE) @@ -1269,20 +1152,21 @@ static void bta_dm_pm_set_sniff_policy(tBTA_DM_PEER_DEVICE *p_dev, bool bDisable * * Function bta_dm_pm_obtain_controller_state * - * Description This function obtains the consolidated controller power state + * Description This function obtains the consolidated controller power + *state * * Parameters: * ******************************************************************************/ -tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void) -{ - /* Did not use counts as it is not sure, how accurate the count values are in - ** bta_dm_cb.device_list.count > 0 || bta_dm_cb.device_list.le_count > 0 */ +tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void) { + /* Did not use counts as it is not sure, how accurate the count values are + *in + ** bta_dm_cb.device_list.count > 0 || bta_dm_cb.device_list.le_count > 0 */ - tBTA_DM_CONTRL_STATE cur_state = BTA_DM_CONTRL_UNKNOWN; - cur_state = BTM_PM_ReadControllerState(); + tBTA_DM_CONTRL_STATE cur_state = BTA_DM_CONTRL_UNKNOWN; + cur_state = BTM_PM_ReadControllerState(); - APPL_TRACE_DEBUG("bta_dm_pm_obtain_controller_state: %d", cur_state); - return cur_state; + APPL_TRACE_DEBUG("bta_dm_pm_obtain_controller_state: %d", cur_state); + return cur_state; } #endif diff --git a/system/bta/dm/bta_dm_sco.cc b/system/bta/dm/bta_dm_sco.cc index 059e3a3eb44..107c175f9e2 100644 --- a/system/bta/dm/bta_dm_sco.cc +++ b/system/bta/dm/bta_dm_sco.cc @@ -33,40 +33,43 @@ #if (BTM_SCO_HCI_INCLUDED == TRUE) #ifndef BTA_DM_SCO_DEBUG -#define BTA_DM_SCO_DEBUG false +#define BTA_DM_SCO_DEBUG false #endif /***************************************************************************** * Constants ****************************************************************************/ -#define BTA_DM_PCM_OVERLAP_SIZE 48 +#define BTA_DM_PCM_OVERLAP_SIZE 48 -#define BTA_DM_PCM_SMPL_RATE_44100 44100 -#define BTA_DM_PCM_SMPL_RATE_22050 22050 -#define BTA_DM_PCM_SMPL_RATE_11025 11025 +#define BTA_DM_PCM_SMPL_RATE_44100 44100 +#define BTA_DM_PCM_SMPL_RATE_22050 22050 +#define BTA_DM_PCM_SMPL_RATE_11025 11025 /***************************************************************************** * Data types for PCM Resampling utility ****************************************************************************/ -typedef int32_t (*PCONVERT_TO_BT_FILTERED) (uint8_t *pSrc, void *pDst, uint32_t dwSrcSamples, - uint32_t dwSrcSps,int32_t *pLastCurPos, uint8_t *pOverlapArea); -typedef int32_t (*PCONVERT_TO_BT_NOFILTER) (void *pSrc, void *pDst, uint32_t dwSrcSamples, - uint32_t dwSrcSps); -typedef struct -{ - uint8_t overlap_area[BTA_DM_PCM_OVERLAP_SIZE * 4]; - uint32_t cur_pos; /* current position */ - uint32_t src_sps; /* samples per second (source audio data) */ - PCONVERT_TO_BT_FILTERED filter; /* the action function to do the - conversion 44100, 22050, 11025*/ - PCONVERT_TO_BT_NOFILTER nofilter; /* the action function to do - the conversion 48000, 32000, 16000*/ - uint32_t bits; /* number of bits per pcm sample */ - uint32_t n_channels; /* number of channels (i.e. mono(1), stereo(2)...) */ - uint32_t sample_size; - uint32_t can_be_filtered; - uint32_t divisor; +typedef int32_t (*PCONVERT_TO_BT_FILTERED)(uint8_t* pSrc, void* pDst, + uint32_t dwSrcSamples, + uint32_t dwSrcSps, + int32_t* pLastCurPos, + uint8_t* pOverlapArea); +typedef int32_t (*PCONVERT_TO_BT_NOFILTER)(void* pSrc, void* pDst, + uint32_t dwSrcSamples, + uint32_t dwSrcSps); +typedef struct { + uint8_t overlap_area[BTA_DM_PCM_OVERLAP_SIZE * 4]; + uint32_t cur_pos; /* current position */ + uint32_t src_sps; /* samples per second (source audio data) */ + PCONVERT_TO_BT_FILTERED filter; /* the action function to do the + conversion 44100, 22050, 11025*/ + PCONVERT_TO_BT_NOFILTER nofilter; /* the action function to do + the conversion 48000, 32000, 16000*/ + uint32_t bits; /* number of bits per pcm sample */ + uint32_t n_channels; /* number of channels (i.e. mono(1), stereo(2)...) */ + uint32_t sample_size; + uint32_t can_be_filtered; + uint32_t divisor; } tBTA_DM_PCM_RESAMPLE_CB; tBTA_DM_PCM_RESAMPLE_CB bta_dm_pcm_cb; @@ -221,349 +224,332 @@ tBTA_DM_PCM_RESAMPLE_CB bta_dm_pcm_cb; //////////////////////////////////////////////////////////////////////////////////////////////////// // -#undef SRC_CHANNELS -#undef SRC_SAMPLE -#undef SRC_TYPE +#undef SRC_CHANNELS +#undef SRC_SAMPLE +#undef SRC_TYPE -#define SRC_TYPE uint8_t -#define SRC_CHANNELS 1 -#define SRC_SAMPLE(x) ((pS[x] - 0x80) << 8) +#define SRC_TYPE uint8_t +#define SRC_CHANNELS 1 +#define SRC_SAMPLE(x) ((pS[x] - 0x80) << 8) /***************************************************************************** * Local Function ****************************************************************************/ -int32_t Convert_8M_ToBT_Filtered (uint8_t *pSrc, void *pDst, uint32_t dwSrcSamples, - uint32_t dwSrcSps, int32_t *pLastCurPos, uint8_t *pOverlapArea) -{ - int32_t CurrentPos = *pLastCurPos; - SRC_TYPE *pIn, *pInEnd; - SRC_TYPE *pOv, *pOvEnd; - int16_t *psBtOut = (int16_t *)pDst; +int32_t Convert_8M_ToBT_Filtered(uint8_t* pSrc, void* pDst, + uint32_t dwSrcSamples, uint32_t dwSrcSps, + int32_t* pLastCurPos, uint8_t* pOverlapArea) { + int32_t CurrentPos = *pLastCurPos; + SRC_TYPE *pIn, *pInEnd; + SRC_TYPE *pOv, *pOvEnd; + int16_t* psBtOut = (int16_t*)pDst; #if (BTA_DM_SCO_DEBUG == TRUE) - APPL_TRACE_DEBUG("Convert_8M_ToBT_Filtered, CurrentPos %d\n", CurrentPos); + APPL_TRACE_DEBUG("Convert_8M_ToBT_Filtered, CurrentPos %d\n", CurrentPos); #endif - memcpy (pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 2), pSrc, BTA_DM_PCM_OVERLAP_SIZE * 2); - - pOv = (SRC_TYPE *)(pOverlapArea + BTA_DM_PCM_OVERLAP_SIZE); - pOvEnd = (SRC_TYPE *)(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 3)); + memcpy(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 2), pSrc, + BTA_DM_PCM_OVERLAP_SIZE * 2); + + pOv = (SRC_TYPE*)(pOverlapArea + BTA_DM_PCM_OVERLAP_SIZE); + pOvEnd = (SRC_TYPE*)(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 3)); + + pIn = (SRC_TYPE*)(pSrc + BTA_DM_PCM_OVERLAP_SIZE); + pInEnd = (SRC_TYPE*)(pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof(SRC_TYPE)) - + BTA_DM_PCM_OVERLAP_SIZE); + + if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_44100) { + CONVERT_44100_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_44100_TO_BLUETOOTH(pIn, pInEnd); + } else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_22050) { + CONVERT_22050_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_22050_TO_BLUETOOTH(pIn, pInEnd); + } else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_11025) { + CONVERT_11025_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_11025_TO_BLUETOOTH(pIn, pInEnd); + } + + memcpy(pOverlapArea, pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof(SRC_TYPE)) - + (BTA_DM_PCM_OVERLAP_SIZE * 2), + BTA_DM_PCM_OVERLAP_SIZE * 2); + + *pLastCurPos = CurrentPos; + + return (psBtOut - (int16_t*)pDst); +} - pIn = (SRC_TYPE *)(pSrc + BTA_DM_PCM_OVERLAP_SIZE); - pInEnd = (SRC_TYPE *)(pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof (SRC_TYPE)) - \ - BTA_DM_PCM_OVERLAP_SIZE); +int32_t Convert_8M_ToBT_NoFilter(void* pSrc, void* pDst, uint32_t dwSrcSamples, + uint32_t dwSrcSps) { + int32_t CurrentPos; + uint8_t* pbSrc = (uint8_t*)pSrc; + int16_t* psDst = (int16_t*)pDst; + int16_t sWorker; - if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_44100) - { - CONVERT_44100_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_44100_TO_BLUETOOTH(pIn, pInEnd); - } - else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_22050) - { - CONVERT_22050_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_22050_TO_BLUETOOTH(pIn, pInEnd); - } - else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_11025) - { - CONVERT_11025_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_11025_TO_BLUETOOTH(pIn, pInEnd); - } + // start at dwSpsSrc / 2, decrement by 8000 + // + CurrentPos = (dwSrcSps >> 1); - memcpy (pOverlapArea, pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof (SRC_TYPE)) - \ - (BTA_DM_PCM_OVERLAP_SIZE * 2), BTA_DM_PCM_OVERLAP_SIZE * 2); + while (dwSrcSamples--) { + CurrentPos -= 8000; - *pLastCurPos = CurrentPos; + if (CurrentPos >= 0) + pbSrc++; + else { + sWorker = *pbSrc++; + sWorker -= 0x80; + sWorker <<= 8; - return (psBtOut - (int16_t *)pDst); -} + *psDst++ = sWorker; -int32_t Convert_8M_ToBT_NoFilter (void *pSrc, void *pDst, uint32_t dwSrcSamples, uint32_t dwSrcSps) -{ - int32_t CurrentPos; - uint8_t *pbSrc = (uint8_t *)pSrc; - int16_t *psDst = (int16_t *)pDst; - int16_t sWorker; - - // start at dwSpsSrc / 2, decrement by 8000 - // - CurrentPos = (dwSrcSps >> 1); - - while (dwSrcSamples--) - { - CurrentPos -= 8000; - - if (CurrentPos >= 0) - pbSrc++; - else - { - sWorker = *pbSrc++; - sWorker -= 0x80; - sWorker <<= 8; - - *psDst++ = sWorker; - - CurrentPos += dwSrcSps; - } + CurrentPos += dwSrcSps; } + } - return (psDst - (int16_t *)pDst); + return (psDst - (int16_t*)pDst); } - //////////////////////////////////////////////////////////////////////////////////////////////////// // -#undef SRC_CHANNELS -#undef SRC_SAMPLE -#undef SRC_TYPE - -#define SRC_TYPE int16_t -#define SRC_CHANNELS 1 -#define SRC_SAMPLE(x) pS[x] - -int32_t Convert_16M_ToBT_Filtered (uint8_t *pSrc, void *pDst, uint32_t dwSrcSamples, - uint32_t dwSrcSps, int32_t *pLastCurPos, uint8_t *pOverlapArea) -{ - int32_t CurrentPos = *pLastCurPos; - SRC_TYPE *pIn, *pInEnd; - SRC_TYPE *pOv, *pOvEnd; - int16_t *psBtOut = (int16_t *)pDst; - - memcpy (pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 2), pSrc, BTA_DM_PCM_OVERLAP_SIZE * 2); - - pOv = (SRC_TYPE *)(pOverlapArea + BTA_DM_PCM_OVERLAP_SIZE); - pOvEnd = (SRC_TYPE *)(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 3)); - - pIn = (SRC_TYPE *)(pSrc + BTA_DM_PCM_OVERLAP_SIZE); - pInEnd = (SRC_TYPE *)(pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof (SRC_TYPE)) - BTA_DM_PCM_OVERLAP_SIZE); - - if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_44100) - { - CONVERT_44100_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_44100_TO_BLUETOOTH(pIn, pInEnd); - } - else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_22050) - { - CONVERT_22050_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_22050_TO_BLUETOOTH(pIn, pInEnd); - } - else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_11025) - { - CONVERT_11025_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_11025_TO_BLUETOOTH(pIn, pInEnd); - } - - memcpy (pOverlapArea, pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof (SRC_TYPE)) - \ - (BTA_DM_PCM_OVERLAP_SIZE * 2), BTA_DM_PCM_OVERLAP_SIZE * 2); - - *pLastCurPos = CurrentPos; - - return (psBtOut - (int16_t *)pDst); +#undef SRC_CHANNELS +#undef SRC_SAMPLE +#undef SRC_TYPE + +#define SRC_TYPE int16_t +#define SRC_CHANNELS 1 +#define SRC_SAMPLE(x) pS[x] + +int32_t Convert_16M_ToBT_Filtered(uint8_t* pSrc, void* pDst, + uint32_t dwSrcSamples, uint32_t dwSrcSps, + int32_t* pLastCurPos, uint8_t* pOverlapArea) { + int32_t CurrentPos = *pLastCurPos; + SRC_TYPE *pIn, *pInEnd; + SRC_TYPE *pOv, *pOvEnd; + int16_t* psBtOut = (int16_t*)pDst; + + memcpy(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 2), pSrc, + BTA_DM_PCM_OVERLAP_SIZE * 2); + + pOv = (SRC_TYPE*)(pOverlapArea + BTA_DM_PCM_OVERLAP_SIZE); + pOvEnd = (SRC_TYPE*)(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 3)); + + pIn = (SRC_TYPE*)(pSrc + BTA_DM_PCM_OVERLAP_SIZE); + pInEnd = (SRC_TYPE*)(pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof(SRC_TYPE)) - + BTA_DM_PCM_OVERLAP_SIZE); + + if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_44100) { + CONVERT_44100_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_44100_TO_BLUETOOTH(pIn, pInEnd); + } else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_22050) { + CONVERT_22050_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_22050_TO_BLUETOOTH(pIn, pInEnd); + } else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_11025) { + CONVERT_11025_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_11025_TO_BLUETOOTH(pIn, pInEnd); + } + + memcpy(pOverlapArea, pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof(SRC_TYPE)) - + (BTA_DM_PCM_OVERLAP_SIZE * 2), + BTA_DM_PCM_OVERLAP_SIZE * 2); + + *pLastCurPos = CurrentPos; + + return (psBtOut - (int16_t*)pDst); } -int32_t Convert_16M_ToBT_NoFilter (void *pSrc, void *pDst, uint32_t dwSrcSamples, uint32_t dwSrcSps) -{ - int32_t CurrentPos; - int16_t *psSrc = (int16_t *)pSrc; - int16_t *psDst = (int16_t *)pDst; +int32_t Convert_16M_ToBT_NoFilter(void* pSrc, void* pDst, uint32_t dwSrcSamples, + uint32_t dwSrcSps) { + int32_t CurrentPos; + int16_t* psSrc = (int16_t*)pSrc; + int16_t* psDst = (int16_t*)pDst; - // start at dwSpsSrc / 2, decrement by 8000 - // - CurrentPos = (dwSrcSps >> 1); + // start at dwSpsSrc / 2, decrement by 8000 + // + CurrentPos = (dwSrcSps >> 1); - while (dwSrcSamples--) - { - CurrentPos -= 8000; + while (dwSrcSamples--) { + CurrentPos -= 8000; - if (CurrentPos >= 0) - psSrc++; - else - { - *psDst++ = *psSrc++; + if (CurrentPos >= 0) + psSrc++; + else { + *psDst++ = *psSrc++; - CurrentPos += dwSrcSps; - } + CurrentPos += dwSrcSps; } + } - return (psDst - (int16_t *)pDst); + return (psDst - (int16_t*)pDst); } //////////////////////////////////////////////////////////////////////////////////////////////////// // -#undef SRC_CHANNELS -#undef SRC_SAMPLE -#undef SRC_TYPE - -#define SRC_TYPE uint8_t -#define SRC_CHANNELS 2 -#define SRC_SAMPLE(x) ((((pS[x * 2] - 0x80) << 8) + ((pS[(x * 2) + 1] - 0x80) << 8)) >> 1) - -int32_t Convert_8S_ToBT_Filtered (uint8_t *pSrc, void *pDst, uint32_t dwSrcSamples, - uint32_t dwSrcSps, int32_t *pLastCurPos, uint8_t *pOverlapArea) -{ - int32_t CurrentPos = *pLastCurPos; - SRC_TYPE *pIn, *pInEnd; - SRC_TYPE *pOv, *pOvEnd; - int16_t *psBtOut = (int16_t *)pDst; +#undef SRC_CHANNELS +#undef SRC_SAMPLE +#undef SRC_TYPE + +#define SRC_TYPE uint8_t +#define SRC_CHANNELS 2 +#define SRC_SAMPLE(x) \ + ((((pS[x * 2] - 0x80) << 8) + ((pS[(x * 2) + 1] - 0x80) << 8)) >> 1) + +int32_t Convert_8S_ToBT_Filtered(uint8_t* pSrc, void* pDst, + uint32_t dwSrcSamples, uint32_t dwSrcSps, + int32_t* pLastCurPos, uint8_t* pOverlapArea) { + int32_t CurrentPos = *pLastCurPos; + SRC_TYPE *pIn, *pInEnd; + SRC_TYPE *pOv, *pOvEnd; + int16_t* psBtOut = (int16_t*)pDst; #if (BTA_DM_SCO_DEBUG == TRUE) - APPL_TRACE_DEBUG("Convert_8S_ToBT_Filtered CurrentPos %d, SRC_TYPE %d, SRC_CHANNELS %d, \ - dwSrcSamples %d, dwSrcSps %d", CurrentPos, sizeof (SRC_TYPE), SRC_CHANNELS, \ - dwSrcSamples, dwSrcSps); + APPL_TRACE_DEBUG( + "Convert_8S_ToBT_Filtered CurrentPos %d, SRC_TYPE %d, SRC_CHANNELS %d, \ + dwSrcSamples %d, dwSrcSps %d", + CurrentPos, sizeof(SRC_TYPE), SRC_CHANNELS, dwSrcSamples, dwSrcSps); #endif - memcpy (pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 2), pSrc, BTA_DM_PCM_OVERLAP_SIZE * 2); + memcpy(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 2), pSrc, + BTA_DM_PCM_OVERLAP_SIZE * 2); + + pOv = (SRC_TYPE*)(pOverlapArea + BTA_DM_PCM_OVERLAP_SIZE); + pOvEnd = (SRC_TYPE*)(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 3)); + + pIn = (SRC_TYPE*)(pSrc + BTA_DM_PCM_OVERLAP_SIZE); + pInEnd = (SRC_TYPE*)(pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof(SRC_TYPE)) - + BTA_DM_PCM_OVERLAP_SIZE); + + if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_44100) { + CONVERT_44100_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_44100_TO_BLUETOOTH(pIn, pInEnd); + } else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_22050) { + CONVERT_22050_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_22050_TO_BLUETOOTH(pIn, pInEnd); + } else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_11025) { + CONVERT_11025_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_11025_TO_BLUETOOTH(pIn, pInEnd); + } + + memcpy(pOverlapArea, pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof(SRC_TYPE)) - + (BTA_DM_PCM_OVERLAP_SIZE * 2), + BTA_DM_PCM_OVERLAP_SIZE * 2); + + *pLastCurPos = CurrentPos; + + return (psBtOut - (int16_t*)pDst); +} - pOv = (SRC_TYPE *)(pOverlapArea + BTA_DM_PCM_OVERLAP_SIZE); - pOvEnd = (SRC_TYPE *)(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 3)); +int32_t Convert_8S_ToBT_NoFilter(void* pSrc, void* pDst, uint32_t dwSrcSamples, + uint32_t dwSrcSps) { + int32_t CurrentPos; + uint8_t* pbSrc = (uint8_t*)pSrc; + int16_t* psDst = (int16_t*)pDst; + int16_t sWorker, sWorker2; - pIn = (SRC_TYPE *)(pSrc + BTA_DM_PCM_OVERLAP_SIZE); - pInEnd = (SRC_TYPE *)(pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof (SRC_TYPE)) - BTA_DM_PCM_OVERLAP_SIZE); + // start at dwSpsSrc / 2, decrement by 8000 + // + CurrentPos = (dwSrcSps >> 1); - if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_44100) - { - CONVERT_44100_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_44100_TO_BLUETOOTH(pIn, pInEnd); - } - else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_22050) - { - CONVERT_22050_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_22050_TO_BLUETOOTH(pIn, pInEnd); - } - else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_11025) - { - CONVERT_11025_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_11025_TO_BLUETOOTH(pIn, pInEnd); - } + while (dwSrcSamples--) { + CurrentPos -= 8000; - memcpy (pOverlapArea, pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof (SRC_TYPE)) - \ - (BTA_DM_PCM_OVERLAP_SIZE * 2), BTA_DM_PCM_OVERLAP_SIZE * 2); + if (CurrentPos >= 0) + pbSrc += 2; + else { + sWorker = *(unsigned char*)pbSrc; + sWorker -= 0x80; + sWorker <<= 8; + pbSrc++; - *pLastCurPos = CurrentPos; + sWorker2 = *(unsigned char*)pbSrc; + sWorker2 -= 0x80; + sWorker2 <<= 8; + pbSrc++; - return (psBtOut - (int16_t *)pDst); -} + sWorker += sWorker2; + sWorker >>= 1; + + *psDst++ = sWorker; -int32_t Convert_8S_ToBT_NoFilter (void *pSrc, void *pDst, uint32_t dwSrcSamples, uint32_t dwSrcSps) -{ - int32_t CurrentPos; - uint8_t *pbSrc = (uint8_t *)pSrc; - int16_t *psDst = (int16_t *)pDst; - int16_t sWorker, sWorker2; - - // start at dwSpsSrc / 2, decrement by 8000 - // - CurrentPos = (dwSrcSps >> 1); - - while (dwSrcSamples--) - { - CurrentPos -= 8000; - - if (CurrentPos >= 0) - pbSrc += 2; - else - { - sWorker = *(unsigned char *)pbSrc; - sWorker -= 0x80; - sWorker <<= 8; - pbSrc++; - - sWorker2 = *(unsigned char *)pbSrc; - sWorker2 -= 0x80; - sWorker2 <<= 8; - pbSrc++; - - sWorker += sWorker2; - sWorker >>= 1; - - *psDst++ = sWorker; - - CurrentPos += dwSrcSps; - } + CurrentPos += dwSrcSps; } + } - return (psDst - (int16_t *)pDst); + return (psDst - (int16_t*)pDst); } - //////////////////////////////////////////////////////////////////////////////////////////////////// // -#undef SRC_CHANNELS -#undef SRC_SAMPLE -#undef SRC_TYPE +#undef SRC_CHANNELS +#undef SRC_SAMPLE +#undef SRC_TYPE -#define SRC_TYPE int16_t -#define SRC_CHANNELS 2 +#define SRC_TYPE int16_t +#define SRC_CHANNELS 2 #define SRC_SAMPLE(x) ((pS[x * 2] + pS[(x * 2) + 1]) >> 1) -int32_t Convert_16S_ToBT_Filtered (uint8_t *pSrc, void *pDst, uint32_t dwSrcSamples, - uint32_t dwSrcSps, int32_t *pLastCurPos, uint8_t *pOverlapArea) -{ - int32_t CurrentPos = *pLastCurPos; - SRC_TYPE *pIn, *pInEnd; - SRC_TYPE *pOv, *pOvEnd; - int16_t *psBtOut = (int16_t *)pDst; +int32_t Convert_16S_ToBT_Filtered(uint8_t* pSrc, void* pDst, + uint32_t dwSrcSamples, uint32_t dwSrcSps, + int32_t* pLastCurPos, uint8_t* pOverlapArea) { + int32_t CurrentPos = *pLastCurPos; + SRC_TYPE *pIn, *pInEnd; + SRC_TYPE *pOv, *pOvEnd; + int16_t* psBtOut = (int16_t*)pDst; + + memcpy(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 2), pSrc, + BTA_DM_PCM_OVERLAP_SIZE * 2); + + pOv = (SRC_TYPE*)(pOverlapArea + BTA_DM_PCM_OVERLAP_SIZE); + pOvEnd = (SRC_TYPE*)(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 3)); + + pIn = (SRC_TYPE*)(pSrc + BTA_DM_PCM_OVERLAP_SIZE); + pInEnd = (SRC_TYPE*)(pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof(SRC_TYPE)) - + BTA_DM_PCM_OVERLAP_SIZE); + + if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_44100) { + CONVERT_44100_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_44100_TO_BLUETOOTH(pIn, pInEnd); + } else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_22050) { + CONVERT_22050_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_22050_TO_BLUETOOTH(pIn, pInEnd); + } else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_11025) { + CONVERT_11025_TO_BLUETOOTH(pOv, pOvEnd); + CONVERT_11025_TO_BLUETOOTH(pIn, pInEnd); + } + + memcpy(pOverlapArea, pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof(SRC_TYPE)) - + (BTA_DM_PCM_OVERLAP_SIZE * 2), + BTA_DM_PCM_OVERLAP_SIZE * 2); + + *pLastCurPos = CurrentPos; + + return (psBtOut - (int16_t*)pDst); +} - memcpy (pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 2), pSrc, BTA_DM_PCM_OVERLAP_SIZE * 2); +int32_t Convert_16S_ToBT_NoFilter(void* pSrc, void* pDst, uint32_t dwSrcSamples, + uint32_t dwSrcSps) { + int32_t CurrentPos; + int16_t* psSrc = (int16_t*)pSrc; + int16_t* psDst = (int16_t*)pDst; + int16_t sWorker; - pOv = (SRC_TYPE *)(pOverlapArea + BTA_DM_PCM_OVERLAP_SIZE); - pOvEnd = (SRC_TYPE *)(pOverlapArea + (BTA_DM_PCM_OVERLAP_SIZE * 3)); + // start at dwSpsSrc / 2, decrement by 8000 + // + CurrentPos = (dwSrcSps >> 1); - pIn = (SRC_TYPE *)(pSrc + BTA_DM_PCM_OVERLAP_SIZE); - pInEnd = (SRC_TYPE *)(pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof (SRC_TYPE)) - BTA_DM_PCM_OVERLAP_SIZE); + while (dwSrcSamples--) { + CurrentPos -= 8000; - if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_44100) - { - CONVERT_44100_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_44100_TO_BLUETOOTH(pIn, pInEnd); - } - else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_22050) - { - CONVERT_22050_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_22050_TO_BLUETOOTH(pIn, pInEnd); - } - else if (dwSrcSps == BTA_DM_PCM_SMPL_RATE_11025) - { - CONVERT_11025_TO_BLUETOOTH(pOv, pOvEnd); - CONVERT_11025_TO_BLUETOOTH(pIn, pInEnd); - } - - memcpy (pOverlapArea, pSrc + (dwSrcSamples * SRC_CHANNELS * sizeof (SRC_TYPE)) - \ - (BTA_DM_PCM_OVERLAP_SIZE * 2), BTA_DM_PCM_OVERLAP_SIZE * 2); + if (CurrentPos >= 0) + psSrc += 2; + else { + /* CR 82894, to avoid overflow, divide before add */ + sWorker = ((*psSrc) >> 1); + psSrc++; + sWorker += ((*psSrc) >> 1); + psSrc++; - *pLastCurPos = CurrentPos; - - return (psBtOut - (int16_t *)pDst); -} + *psDst++ = sWorker; -int32_t Convert_16S_ToBT_NoFilter (void *pSrc, void *pDst, uint32_t dwSrcSamples, uint32_t dwSrcSps) -{ - int32_t CurrentPos; - int16_t *psSrc = (int16_t *)pSrc; - int16_t *psDst = (int16_t *)pDst; - int16_t sWorker; - - // start at dwSpsSrc / 2, decrement by 8000 - // - CurrentPos = (dwSrcSps >> 1); - - while (dwSrcSamples--) - { - CurrentPos -= 8000; - - if (CurrentPos >= 0) - psSrc += 2; - else - { - /* CR 82894, to avoid overflow, divide before add */ - sWorker = ((*psSrc) >> 1 ); - psSrc++; - sWorker += ((*psSrc) >> 1 ); - psSrc++; - - *psDst++ = sWorker; - - CurrentPos += dwSrcSps; - } + CurrentPos += dwSrcSps; } + } - return (psDst - (int16_t *)pDst); + return (psDst - (int16_t*)pDst); } /******************************************************************************* @@ -580,109 +566,104 @@ int32_t Convert_16S_ToBT_NoFilter (void *pSrc, void *pDst, uint32_t dwSrcSamples * Returns none * ******************************************************************************/ -void BTA_DmPcmInitSamples (uint32_t src_sps, uint32_t bits, uint32_t n_channels) -{ - tBTA_DM_PCM_RESAMPLE_CB *p_cb = &bta_dm_pcm_cb; - - p_cb->cur_pos = src_sps / 2; - p_cb->src_sps = src_sps; - p_cb->bits = bits; - p_cb->n_channels = n_channels; - p_cb->sample_size = 2; - p_cb->divisor = 2; - - memset(p_cb->overlap_area, 0, sizeof(p_cb->overlap_area) ); - - if ((src_sps == BTA_DM_PCM_SMPL_RATE_44100) || - (src_sps == BTA_DM_PCM_SMPL_RATE_22050) || - (src_sps == BTA_DM_PCM_SMPL_RATE_11025)) - p_cb->can_be_filtered = 1; - else - p_cb->can_be_filtered = 0; +void BTA_DmPcmInitSamples(uint32_t src_sps, uint32_t bits, + uint32_t n_channels) { + tBTA_DM_PCM_RESAMPLE_CB* p_cb = &bta_dm_pcm_cb; + + p_cb->cur_pos = src_sps / 2; + p_cb->src_sps = src_sps; + p_cb->bits = bits; + p_cb->n_channels = n_channels; + p_cb->sample_size = 2; + p_cb->divisor = 2; + + memset(p_cb->overlap_area, 0, sizeof(p_cb->overlap_area)); + + if ((src_sps == BTA_DM_PCM_SMPL_RATE_44100) || + (src_sps == BTA_DM_PCM_SMPL_RATE_22050) || + (src_sps == BTA_DM_PCM_SMPL_RATE_11025)) + p_cb->can_be_filtered = 1; + else + p_cb->can_be_filtered = 0; #if (BTA_DM_SCO_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_dm_pcm_init_samples: n_channels = %d bits = %d", n_channels, bits); + APPL_TRACE_DEBUG("bta_dm_pcm_init_samples: n_channels = %d bits = %d", + n_channels, bits); #endif - if(n_channels == 1) - { - /* mono */ - if(bits == 8) - { - p_cb->filter = (PCONVERT_TO_BT_FILTERED) Convert_8M_ToBT_Filtered; - p_cb->nofilter = (PCONVERT_TO_BT_NOFILTER) Convert_8M_ToBT_NoFilter; - p_cb->divisor = 1; - } - else - { - p_cb->filter = (PCONVERT_TO_BT_FILTERED) Convert_16M_ToBT_Filtered; - p_cb->nofilter = (PCONVERT_TO_BT_NOFILTER) Convert_16M_ToBT_NoFilter; - } + if (n_channels == 1) { + /* mono */ + if (bits == 8) { + p_cb->filter = (PCONVERT_TO_BT_FILTERED)Convert_8M_ToBT_Filtered; + p_cb->nofilter = (PCONVERT_TO_BT_NOFILTER)Convert_8M_ToBT_NoFilter; + p_cb->divisor = 1; + } else { + p_cb->filter = (PCONVERT_TO_BT_FILTERED)Convert_16M_ToBT_Filtered; + p_cb->nofilter = (PCONVERT_TO_BT_NOFILTER)Convert_16M_ToBT_NoFilter; } - else - { - /* stereo */ - if(bits == 8) - { - p_cb->filter = (PCONVERT_TO_BT_FILTERED) Convert_8S_ToBT_Filtered; - p_cb->nofilter = (PCONVERT_TO_BT_NOFILTER) Convert_8S_ToBT_NoFilter; - } - else - { - p_cb->filter = (PCONVERT_TO_BT_FILTERED) Convert_16S_ToBT_Filtered; - p_cb->nofilter = (PCONVERT_TO_BT_NOFILTER) Convert_16S_ToBT_NoFilter; - p_cb->divisor = 4; - } + } else { + /* stereo */ + if (bits == 8) { + p_cb->filter = (PCONVERT_TO_BT_FILTERED)Convert_8S_ToBT_Filtered; + p_cb->nofilter = (PCONVERT_TO_BT_NOFILTER)Convert_8S_ToBT_NoFilter; + } else { + p_cb->filter = (PCONVERT_TO_BT_FILTERED)Convert_16S_ToBT_Filtered; + p_cb->nofilter = (PCONVERT_TO_BT_NOFILTER)Convert_16S_ToBT_NoFilter; + p_cb->divisor = 4; } + } #if (BTA_DM_SCO_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_pcm_init_dwn_sample: cur_pos %d, src_sps %d", \ - p_cb->cur_pos, p_cb->src_sps); - APPL_TRACE_DEBUG("bta_pcm_init_dwn_sample: bits %d, n_channels %d, sample_size %d, ", \ - p_cb->bits, p_cb->n_channels, p_cb->sample_size); - APPL_TRACE_DEBUG("bta_pcm_init_dwn_sample: can_be_filtered %d, n_channels: %d, \ - divisor %d", p_cb->can_be_filtered, p_cb->n_channels, p_cb->divisor); + APPL_TRACE_DEBUG("bta_pcm_init_dwn_sample: cur_pos %d, src_sps %d", + p_cb->cur_pos, p_cb->src_sps); + APPL_TRACE_DEBUG( + "bta_pcm_init_dwn_sample: bits %d, n_channels %d, sample_size %d, ", + p_cb->bits, p_cb->n_channels, p_cb->sample_size); + APPL_TRACE_DEBUG( + "bta_pcm_init_dwn_sample: can_be_filtered %d, n_channels: %d, \ + divisor %d", + p_cb->can_be_filtered, p_cb->n_channels, p_cb->divisor); #endif - } /************************************************************************************** * Function BTA_DmPcmResample * - * Description Down sampling utility to convert higher sampling rate into 8K/16bits + * Description Down sampling utility to convert higher sampling rate into + *8K/16bits * PCM samples. * * Parameters p_src: pointer to the buffer where the original sampling PCM * are stored. * in_bytes: Length of the input PCM sample buffer in byte. - * p_dst: pointer to the buffer which is to be used to store + * p_dst: pointer to the buffer which is to be used to + *store * the converted PCM samples. * * * Returns int32_t: number of samples converted. * *************************************************************************************/ -int32_t BTA_DmPcmResample (void *p_src, uint32_t in_bytes, void *p_dst) -{ - uint32_t out_sample; +int32_t BTA_DmPcmResample(void* p_src, uint32_t in_bytes, void* p_dst) { + uint32_t out_sample; #if (BTA_DM_SCO_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_pcm_resample : insamples %d", (in_bytes / bta_dm_pcm_cb.divisor)); + APPL_TRACE_DEBUG("bta_pcm_resample : insamples %d", + (in_bytes / bta_dm_pcm_cb.divisor)); #endif - if(bta_dm_pcm_cb.can_be_filtered) - { - out_sample = (*bta_dm_pcm_cb.filter) (p_src, p_dst, (in_bytes / bta_dm_pcm_cb.divisor), - bta_dm_pcm_cb.src_sps, (int32_t *) &bta_dm_pcm_cb.cur_pos, bta_dm_pcm_cb.overlap_area); - } - else - { - out_sample = (*bta_dm_pcm_cb.nofilter) (p_src, p_dst, - (in_bytes / bta_dm_pcm_cb.divisor), bta_dm_pcm_cb.src_sps); - } + if (bta_dm_pcm_cb.can_be_filtered) { + out_sample = (*bta_dm_pcm_cb.filter)( + p_src, p_dst, (in_bytes / bta_dm_pcm_cb.divisor), bta_dm_pcm_cb.src_sps, + (int32_t*)&bta_dm_pcm_cb.cur_pos, bta_dm_pcm_cb.overlap_area); + } else { + out_sample = (*bta_dm_pcm_cb.nofilter)(p_src, p_dst, + (in_bytes / bta_dm_pcm_cb.divisor), + bta_dm_pcm_cb.src_sps); + } #if (BTA_DM_SCO_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_pcm_resample : outsamples %d", out_sample); + APPL_TRACE_DEBUG("bta_pcm_resample : outsamples %d", out_sample); #endif - return (out_sample * bta_dm_pcm_cb.sample_size); + return (out_sample * bta_dm_pcm_cb.sample_size); } #endif diff --git a/system/bta/gatt/bta_gattc_act.cc b/system/bta/gatt/bta_gattc_act.cc index 717cbb99e28..fc660702cd3 100644 --- a/system/bta/gatt/bta_gattc_act.cc +++ b/system/bta/gatt/bta_gattc_act.cc @@ -27,11 +27,11 @@ #include +#include "bt_common.h" #include "bt_target.h" #include "bta_gattc_int.h" #include "bta_sys.h" #include "btif/include/btif_debug_conn.h" -#include "bt_common.h" #include "l2c_api.h" #include "osi/include/log.h" #include "osi/include/osi.h" @@ -47,59 +47,46 @@ /***************************************************************************** * Constants ****************************************************************************/ -static void bta_gattc_conn_cback(tGATT_IF gattc_if, BD_ADDR bda, uint16_t conn_id, - bool connected, tGATT_DISCONN_REASON reason, +static void bta_gattc_conn_cback(tGATT_IF gattc_if, BD_ADDR bda, + uint16_t conn_id, bool connected, + tGATT_DISCONN_REASON reason, tBT_TRANSPORT transport); -static void bta_gattc_cmpl_cback(uint16_t conn_id, tGATTC_OPTYPE op, tGATT_STATUS status, - tGATT_CL_COMPLETE *p_data); +static void bta_gattc_cmpl_cback(uint16_t conn_id, tGATTC_OPTYPE op, + tGATT_STATUS status, + tGATT_CL_COMPLETE* p_data); static void bta_gattc_cmpl_sendmsg(uint16_t conn_id, tGATTC_OPTYPE op, tBTA_GATT_STATUS status, - tGATT_CL_COMPLETE *p_data); + tGATT_CL_COMPLETE* p_data); -static void bta_gattc_deregister_cmpl(tBTA_GATTC_RCB *p_clreg); +static void bta_gattc_deregister_cmpl(tBTA_GATTC_RCB* p_clreg); static void bta_gattc_enc_cmpl_cback(tGATT_IF gattc_if, BD_ADDR bda); -static void bta_gattc_cong_cback (uint16_t conn_id, bool congested); - -static tGATT_CBACK bta_gattc_cl_cback = -{ - bta_gattc_conn_cback, - bta_gattc_cmpl_cback, - bta_gattc_disc_res_cback, - bta_gattc_disc_cmpl_cback, - NULL, - bta_gattc_enc_cmpl_cback, - bta_gattc_cong_cback -}; +static void bta_gattc_cong_cback(uint16_t conn_id, bool congested); + +static tGATT_CBACK bta_gattc_cl_cback = {bta_gattc_conn_cback, + bta_gattc_cmpl_cback, + bta_gattc_disc_res_cback, + bta_gattc_disc_cmpl_cback, + NULL, + bta_gattc_enc_cmpl_cback, + bta_gattc_cong_cback}; /* opcode(tGATTC_OPTYPE) order has to be comply with internal event order */ -static uint16_t bta_gattc_opcode_to_int_evt[] = -{ - BTA_GATTC_API_READ_EVT, - BTA_GATTC_API_WRITE_EVT, - BTA_GATTC_API_EXEC_EVT, - BTA_GATTC_API_CFG_MTU_EVT -}; +static uint16_t bta_gattc_opcode_to_int_evt[] = { + BTA_GATTC_API_READ_EVT, BTA_GATTC_API_WRITE_EVT, BTA_GATTC_API_EXEC_EVT, + BTA_GATTC_API_CFG_MTU_EVT}; #if (BT_TRACE_VERBOSE == TRUE) -static const char *bta_gattc_op_code_name[] = -{ - "Unknown", - "Discovery", - "Read", - "Write", - "Exec", - "Config", - "Notification", - "Indication" -}; -#endif // BT_TRACE_VERBOSE +static const char* bta_gattc_op_code_name[] = { + "Unknown", "Discovery", "Read", "Write", + "Exec", "Config", "Notification", "Indication"}; +#endif // BT_TRACE_VERBOSE /***************************************************************************** * Action Functions ****************************************************************************/ - -void bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS status); +void bta_gattc_reset_discover_st(tBTA_GATTC_SERV* p_srcb, + tBTA_GATT_STATUS status); /******************************************************************************* * @@ -111,20 +98,16 @@ void bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS statu * Returns void * ******************************************************************************/ -static void bta_gattc_enable() -{ - APPL_TRACE_DEBUG("bta_gattc_enable"); - - if (bta_gattc_cb.state == BTA_GATTC_STATE_DISABLED) - { - /* initialize control block */ - memset(&bta_gattc_cb, 0, sizeof(tBTA_GATTC_CB)); - bta_gattc_cb.state = BTA_GATTC_STATE_ENABLED; - } - else - { - APPL_TRACE_DEBUG("GATTC is arelady enabled"); - } +static void bta_gattc_enable() { + APPL_TRACE_DEBUG("bta_gattc_enable"); + + if (bta_gattc_cb.state == BTA_GATTC_STATE_DISABLED) { + /* initialize control block */ + memset(&bta_gattc_cb, 0, sizeof(tBTA_GATTC_CB)); + bta_gattc_cb.state = BTA_GATTC_STATE_ENABLED; + } else { + APPL_TRACE_DEBUG("GATTC is arelady enabled"); + } } /******************************************************************************* @@ -137,41 +120,36 @@ static void bta_gattc_enable() * Returns void * ******************************************************************************/ -void bta_gattc_disable() -{ - uint8_t i; +void bta_gattc_disable() { + uint8_t i; - APPL_TRACE_DEBUG("bta_gattc_disable"); + APPL_TRACE_DEBUG("bta_gattc_disable"); - if (bta_gattc_cb.state != BTA_GATTC_STATE_ENABLED) - { - APPL_TRACE_ERROR("not enabled or disable in pogress"); - return; - } + if (bta_gattc_cb.state != BTA_GATTC_STATE_ENABLED) { + APPL_TRACE_ERROR("not enabled or disable in pogress"); + return; + } - for (i = 0; i api_reg.app_uuid; - tBTA_GATT_STATUS status = BTA_GATT_NO_RESOURCES; - - APPL_TRACE_DEBUG("bta_gattc_register state %d",bta_gattc_cb.state); - memset(&cb_data, 0, sizeof(cb_data)); - cb_data.reg_oper.status = BTA_GATT_NO_RESOURCES; - - /* check if GATTC module is already enabled . Else enable */ - if (bta_gattc_cb.state == BTA_GATTC_STATE_DISABLED) - { - bta_gattc_enable (); - } - /* todo need to check duplicate uuid */ - for (i = 0; i < BTA_GATTC_CL_MAX; i ++) - { - if (!bta_gattc_cb.cl_rcb[i].in_use) - { - if ((p_app_uuid == NULL) || (bta_gattc_cb.cl_rcb[i].client_if = GATT_Register(p_app_uuid, &bta_gattc_cl_cback)) == 0) - { - APPL_TRACE_ERROR("Register with GATT stack failed."); - status = BTA_GATT_ERROR; - } - else - { - bta_gattc_cb.cl_rcb[i].in_use = true; - bta_gattc_cb.cl_rcb[i].p_cback = p_data->api_reg.p_cback; - memcpy(&bta_gattc_cb.cl_rcb[i].app_uuid, p_app_uuid, sizeof(tBT_UUID)); - - /* BTA use the same client interface as BTE GATT statck */ - cb_data.reg_oper.client_if = bta_gattc_cb.cl_rcb[i].client_if; - - tBTA_GATTC_INT_START_IF *p_buf = - (tBTA_GATTC_INT_START_IF *)osi_malloc(sizeof(tBTA_GATTC_INT_START_IF)); - p_buf->hdr.event = BTA_GATTC_INT_START_IF_EVT; - p_buf->client_if = bta_gattc_cb.cl_rcb[i].client_if; - - bta_sys_sendmsg(p_buf); - status = BTA_GATT_OK; - break; - } - } +void bta_gattc_register(tBTA_GATTC_DATA* p_data) { + tBTA_GATTC cb_data; + uint8_t i; + tBT_UUID* p_app_uuid = &p_data->api_reg.app_uuid; + tBTA_GATT_STATUS status = BTA_GATT_NO_RESOURCES; + + APPL_TRACE_DEBUG("bta_gattc_register state %d", bta_gattc_cb.state); + memset(&cb_data, 0, sizeof(cb_data)); + cb_data.reg_oper.status = BTA_GATT_NO_RESOURCES; + + /* check if GATTC module is already enabled . Else enable */ + if (bta_gattc_cb.state == BTA_GATTC_STATE_DISABLED) { + bta_gattc_enable(); + } + /* todo need to check duplicate uuid */ + for (i = 0; i < BTA_GATTC_CL_MAX; i++) { + if (!bta_gattc_cb.cl_rcb[i].in_use) { + if ((p_app_uuid == NULL) || + (bta_gattc_cb.cl_rcb[i].client_if = + GATT_Register(p_app_uuid, &bta_gattc_cl_cback)) == 0) { + APPL_TRACE_ERROR("Register with GATT stack failed."); + status = BTA_GATT_ERROR; + } else { + bta_gattc_cb.cl_rcb[i].in_use = true; + bta_gattc_cb.cl_rcb[i].p_cback = p_data->api_reg.p_cback; + memcpy(&bta_gattc_cb.cl_rcb[i].app_uuid, p_app_uuid, sizeof(tBT_UUID)); + + /* BTA use the same client interface as BTE GATT statck */ + cb_data.reg_oper.client_if = bta_gattc_cb.cl_rcb[i].client_if; + + tBTA_GATTC_INT_START_IF* p_buf = (tBTA_GATTC_INT_START_IF*)osi_malloc( + sizeof(tBTA_GATTC_INT_START_IF)); + p_buf->hdr.event = BTA_GATTC_INT_START_IF_EVT; + p_buf->client_if = bta_gattc_cb.cl_rcb[i].client_if; + + bta_sys_sendmsg(p_buf); + status = BTA_GATT_OK; + break; + } } + } - /* callback with register event */ - if (p_data->api_reg.p_cback) - { - if (p_app_uuid != NULL) - memcpy(&(cb_data.reg_oper.app_uuid),p_app_uuid,sizeof(tBT_UUID)); + /* callback with register event */ + if (p_data->api_reg.p_cback) { + if (p_app_uuid != NULL) + memcpy(&(cb_data.reg_oper.app_uuid), p_app_uuid, sizeof(tBT_UUID)); - cb_data.reg_oper.status = status; - (*p_data->api_reg.p_cback)(BTA_GATTC_REG_EVT, (tBTA_GATTC *)&cb_data); - } + cb_data.reg_oper.status = status; + (*p_data->api_reg.p_cback)(BTA_GATTC_REG_EVT, (tBTA_GATTC*)&cb_data); + } } /******************************************************************************* * @@ -249,16 +221,13 @@ void bta_gattc_register(tBTA_GATTC_DATA *p_data) * Returns none. * ******************************************************************************/ -void bta_gattc_start_if(tBTA_GATTC_DATA *p_msg) -{ - if (bta_gattc_cl_get_regcb(p_msg->int_start_if.client_if) !=NULL ) - { - GATT_StartIf(p_msg->int_start_if.client_if); - } - else - { - APPL_TRACE_ERROR("Unable to start app.: Unknown interface =%d",p_msg->int_start_if.client_if ); - } +void bta_gattc_start_if(tBTA_GATTC_DATA* p_msg) { + if (bta_gattc_cl_get_regcb(p_msg->int_start_if.client_if) != NULL) { + GATT_StartIf(p_msg->int_start_if.client_if); + } else { + APPL_TRACE_ERROR("Unable to start app.: Unknown interface =%d", + p_msg->int_start_if.client_if); + } } /******************************************************************************* * @@ -269,48 +238,42 @@ void bta_gattc_start_if(tBTA_GATTC_DATA *p_msg) * Returns void * ******************************************************************************/ -void bta_gattc_deregister(tBTA_GATTC_RCB *p_clreg) -{ - uint8_t i; - BT_HDR buf; - - if (p_clreg != NULL) - { - /* remove bg connection associated with this rcb */ - for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i ++) - { - if (bta_gattc_cb.bg_track[i].in_use) - { - if (bta_gattc_cb.bg_track[i].cif_mask & (1 <<(p_clreg->client_if - 1))) - { - bta_gattc_mark_bg_conn(p_clreg->client_if, bta_gattc_cb.bg_track[i].remote_bda, false); - GATT_CancelConnect(p_clreg->client_if, bta_gattc_cb.bg_track[i].remote_bda, false); - } - } +void bta_gattc_deregister(tBTA_GATTC_RCB* p_clreg) { + uint8_t i; + BT_HDR buf; + + if (p_clreg != NULL) { + /* remove bg connection associated with this rcb */ + for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i++) { + if (bta_gattc_cb.bg_track[i].in_use) { + if (bta_gattc_cb.bg_track[i].cif_mask & + (1 << (p_clreg->client_if - 1))) { + bta_gattc_mark_bg_conn(p_clreg->client_if, + bta_gattc_cb.bg_track[i].remote_bda, false); + GATT_CancelConnect(p_clreg->client_if, + bta_gattc_cb.bg_track[i].remote_bda, false); } + } + } + + if (p_clreg->num_clcb > 0) { + /* close all CLCB related to this app */ + for (i = 0; i < BTA_GATTC_CLCB_MAX; i++) { + if (bta_gattc_cb.clcb[i].in_use && + (bta_gattc_cb.clcb[i].p_rcb == p_clreg)) { + p_clreg->dereg_pending = true; - if (p_clreg->num_clcb > 0) - { - /* close all CLCB related to this app */ - for (i= 0; i < BTA_GATTC_CLCB_MAX; i ++) - { - if (bta_gattc_cb.clcb[i].in_use && (bta_gattc_cb.clcb[i].p_rcb == p_clreg)) - { - p_clreg->dereg_pending = true; - - buf.event = BTA_GATTC_API_CLOSE_EVT; - buf.layer_specific = bta_gattc_cb.clcb[i].bta_conn_id; - bta_gattc_close(&bta_gattc_cb.clcb[i], (tBTA_GATTC_DATA *)&buf) ; - } - } + buf.event = BTA_GATTC_API_CLOSE_EVT; + buf.layer_specific = bta_gattc_cb.clcb[i].bta_conn_id; + bta_gattc_close(&bta_gattc_cb.clcb[i], (tBTA_GATTC_DATA*)&buf); } - else - bta_gattc_deregister_cmpl(p_clreg); - } - else - { - APPL_TRACE_ERROR("bta_gattc_deregister Deregister Failedm unknown client cif"); - } + } + } else + bta_gattc_deregister_cmpl(p_clreg); + } else { + APPL_TRACE_ERROR( + "bta_gattc_deregister Deregister Failedm unknown client cif"); + } } /******************************************************************************* * @@ -321,43 +284,31 @@ void bta_gattc_deregister(tBTA_GATTC_RCB *p_clreg) * Returns void * ******************************************************************************/ -void bta_gattc_process_api_open (tBTA_GATTC_DATA * p_msg) -{ - uint16_t event = ((BT_HDR *)p_msg)->event; - tBTA_GATTC_CLCB *p_clcb = NULL; - tBTA_GATTC_RCB *p_clreg = bta_gattc_cl_get_regcb(p_msg->api_conn.client_if); - - if (p_clreg != NULL) - { - if (p_msg->api_conn.is_direct) - { - if ((p_clcb = bta_gattc_find_alloc_clcb(p_msg->api_conn.client_if, - p_msg->api_conn.remote_bda, - p_msg->api_conn.transport)) != NULL) - { - bta_gattc_sm_execute(p_clcb, event, p_msg); - } - else - { - APPL_TRACE_ERROR("No resources to open a new connection."); - - bta_gattc_send_open_cback(p_clreg, - BTA_GATT_NO_RESOURCES, - p_msg->api_conn.remote_bda, - BTA_GATT_INVALID_CONN_ID, - p_msg->api_conn.transport, 0); - } - } - else - { - bta_gattc_init_bk_conn(&p_msg->api_conn, p_clreg); - } - } - else - { - APPL_TRACE_ERROR("bta_gattc_process_api_open Failed, unknown client_if: %d", - p_msg->api_conn.client_if); +void bta_gattc_process_api_open(tBTA_GATTC_DATA* p_msg) { + uint16_t event = ((BT_HDR*)p_msg)->event; + tBTA_GATTC_CLCB* p_clcb = NULL; + tBTA_GATTC_RCB* p_clreg = bta_gattc_cl_get_regcb(p_msg->api_conn.client_if); + + if (p_clreg != NULL) { + if (p_msg->api_conn.is_direct) { + if ((p_clcb = bta_gattc_find_alloc_clcb( + p_msg->api_conn.client_if, p_msg->api_conn.remote_bda, + p_msg->api_conn.transport)) != NULL) { + bta_gattc_sm_execute(p_clcb, event, p_msg); + } else { + APPL_TRACE_ERROR("No resources to open a new connection."); + + bta_gattc_send_open_cback( + p_clreg, BTA_GATT_NO_RESOURCES, p_msg->api_conn.remote_bda, + BTA_GATT_INVALID_CONN_ID, p_msg->api_conn.transport, 0); + } + } else { + bta_gattc_init_bk_conn(&p_msg->api_conn, p_clreg); } + } else { + APPL_TRACE_ERROR("bta_gattc_process_api_open Failed, unknown client_if: %d", + p_msg->api_conn.client_if); + } } /******************************************************************************* * @@ -368,39 +319,30 @@ void bta_gattc_process_api_open (tBTA_GATTC_DATA * p_msg) * Returns void * ******************************************************************************/ -void bta_gattc_process_api_open_cancel (tBTA_GATTC_DATA * p_msg) -{ - uint16_t event = ((BT_HDR *)p_msg)->event; - tBTA_GATTC_CLCB *p_clcb = NULL; - tBTA_GATTC_RCB *p_clreg; - tBTA_GATTC cb_data; - - if (p_msg->api_cancel_conn.is_direct) - { - if ((p_clcb = bta_gattc_find_clcb_by_cif(p_msg->api_cancel_conn.client_if, - p_msg->api_cancel_conn.remote_bda, - BTA_GATT_TRANSPORT_LE)) != NULL) - { - bta_gattc_sm_execute(p_clcb, event, p_msg); - } - else - { - APPL_TRACE_ERROR("No such connection need to be cancelled"); - - p_clreg = bta_gattc_cl_get_regcb(p_msg->api_cancel_conn.client_if); +void bta_gattc_process_api_open_cancel(tBTA_GATTC_DATA* p_msg) { + uint16_t event = ((BT_HDR*)p_msg)->event; + tBTA_GATTC_CLCB* p_clcb = NULL; + tBTA_GATTC_RCB* p_clreg; + tBTA_GATTC cb_data; + + if (p_msg->api_cancel_conn.is_direct) { + if ((p_clcb = bta_gattc_find_clcb_by_cif(p_msg->api_cancel_conn.client_if, + p_msg->api_cancel_conn.remote_bda, + BTA_GATT_TRANSPORT_LE)) != NULL) { + bta_gattc_sm_execute(p_clcb, event, p_msg); + } else { + APPL_TRACE_ERROR("No such connection need to be cancelled"); - if (p_clreg && p_clreg->p_cback) - { - cb_data.status = BTA_GATT_ERROR; - (*p_clreg->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); - } - } - } - else - { - bta_gattc_cancel_bk_conn(&p_msg->api_cancel_conn); + p_clreg = bta_gattc_cl_get_regcb(p_msg->api_cancel_conn.client_if); + if (p_clreg && p_clreg->p_cback) { + cb_data.status = BTA_GATT_ERROR; + (*p_clreg->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); + } } + } else { + bta_gattc_cancel_bk_conn(&p_msg->api_cancel_conn); + } } /******************************************************************************* @@ -412,22 +354,20 @@ void bta_gattc_process_api_open_cancel (tBTA_GATTC_DATA * p_msg) * Returns void * ******************************************************************************/ -void bta_gattc_process_enc_cmpl(tBTA_GATTC_DATA *p_msg) -{ - tBTA_GATTC_RCB *p_clreg; - tBTA_GATTC cb_data; +void bta_gattc_process_enc_cmpl(tBTA_GATTC_DATA* p_msg) { + tBTA_GATTC_RCB* p_clreg; + tBTA_GATTC cb_data; - p_clreg = bta_gattc_cl_get_regcb(p_msg->enc_cmpl.client_if); + p_clreg = bta_gattc_cl_get_regcb(p_msg->enc_cmpl.client_if); - if (p_clreg && p_clreg->p_cback) - { - memset(&cb_data, 0, sizeof(tBTA_GATTC)); + if (p_clreg && p_clreg->p_cback) { + memset(&cb_data, 0, sizeof(tBTA_GATTC)); - cb_data.enc_cmpl.client_if = p_msg->enc_cmpl.client_if; - bdcpy(cb_data.enc_cmpl.remote_bda, p_msg->enc_cmpl.remote_bda); + cb_data.enc_cmpl.client_if = p_msg->enc_cmpl.client_if; + bdcpy(cb_data.enc_cmpl.remote_bda, p_msg->enc_cmpl.remote_bda); - (*p_clreg->p_cback)(BTA_GATTC_ENC_CMPL_CB_EVT, &cb_data); - } + (*p_clreg->p_cback)(BTA_GATTC_ENC_CMPL_CB_EVT, &cb_data); + } } /******************************************************************************* @@ -439,15 +379,14 @@ void bta_gattc_process_enc_cmpl(tBTA_GATTC_DATA *p_msg) * Returns void * ******************************************************************************/ -void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB *p_clcb, - UNUSED_ATTR tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC cb_data; +void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB* p_clcb, + UNUSED_ATTR tBTA_GATTC_DATA* p_data) { + tBTA_GATTC cb_data; - cb_data.status=BTA_GATT_ERROR; + cb_data.status = BTA_GATT_ERROR; - if ( p_clcb && p_clcb->p_rcb && p_clcb->p_rcb->p_cback ) - (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); + if (p_clcb && p_clcb->p_rcb && p_clcb->p_rcb->p_cback) + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); } /******************************************************************************* @@ -459,17 +398,12 @@ void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB *p_clcb, * Returns void * ******************************************************************************/ -void bta_gattc_open_error(tBTA_GATTC_CLCB *p_clcb, - UNUSED_ATTR tBTA_GATTC_DATA *p_data) -{ - APPL_TRACE_ERROR("Connection already opened. wrong state"); - - bta_gattc_send_open_cback(p_clcb->p_rcb, - BTA_GATT_OK, - p_clcb->bda, - p_clcb->bta_conn_id, - p_clcb->transport, - 0); +void bta_gattc_open_error(tBTA_GATTC_CLCB* p_clcb, + UNUSED_ATTR tBTA_GATTC_DATA* p_data) { + APPL_TRACE_ERROR("Connection already opened. wrong state"); + + bta_gattc_send_open_cback(p_clcb->p_rcb, BTA_GATT_OK, p_clcb->bda, + p_clcb->bta_conn_id, p_clcb->transport, 0); } /******************************************************************************* * @@ -480,17 +414,12 @@ void bta_gattc_open_error(tBTA_GATTC_CLCB *p_clcb, * Returns void * ******************************************************************************/ -void bta_gattc_open_fail(tBTA_GATTC_CLCB *p_clcb, - UNUSED_ATTR tBTA_GATTC_DATA *p_data) -{ - bta_gattc_send_open_cback(p_clcb->p_rcb, - BTA_GATT_ERROR, - p_clcb->bda, - p_clcb->bta_conn_id, - p_clcb->transport, - 0); - /* open failure, remove clcb */ - bta_gattc_clcb_dealloc(p_clcb); +void bta_gattc_open_fail(tBTA_GATTC_CLCB* p_clcb, + UNUSED_ATTR tBTA_GATTC_DATA* p_data) { + bta_gattc_send_open_cback(p_clcb->p_rcb, BTA_GATT_ERROR, p_clcb->bda, + p_clcb->bta_conn_id, p_clcb->transport, 0); + /* open failure, remove clcb */ + bta_gattc_clcb_dealloc(p_clcb); } /******************************************************************************* @@ -502,32 +431,26 @@ void bta_gattc_open_fail(tBTA_GATTC_CLCB *p_clcb, * Returns void * ******************************************************************************/ -void bta_gattc_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC_DATA gattc_data; - - /* open/hold a connection */ - if (!GATT_Connect(p_clcb->p_rcb->client_if, p_data->api_conn.remote_bda, - true, p_data->api_conn.transport, false)) - { - APPL_TRACE_ERROR("Connection open failure"); - - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_OPEN_FAIL_EVT, p_data); - } - else - { - /* a connected remote device */ - if (GATT_GetConnIdIfConnected(p_clcb->p_rcb->client_if, - p_data->api_conn.remote_bda, - &p_clcb->bta_conn_id, - p_data->api_conn.transport)) - { - gattc_data.int_conn.hdr.layer_specific = p_clcb->bta_conn_id; - - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, &gattc_data); - } - /* else wait for the callback event */ - } +void bta_gattc_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATTC_DATA gattc_data; + + /* open/hold a connection */ + if (!GATT_Connect(p_clcb->p_rcb->client_if, p_data->api_conn.remote_bda, true, + p_data->api_conn.transport, false)) { + APPL_TRACE_ERROR("Connection open failure"); + + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_OPEN_FAIL_EVT, p_data); + } else { + /* a connected remote device */ + if (GATT_GetConnIdIfConnected( + p_clcb->p_rcb->client_if, p_data->api_conn.remote_bda, + &p_clcb->bta_conn_id, p_data->api_conn.transport)) { + gattc_data.int_conn.hdr.layer_specific = p_clcb->bta_conn_id; + + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, &gattc_data); + } + /* else wait for the callback event */ + } } /******************************************************************************* * @@ -538,53 +461,49 @@ void bta_gattc_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN *p_data, tBTA_GATTC_RCB *p_clreg) -{ - tBTA_GATT_STATUS status = BTA_GATT_NO_RESOURCES; - uint16_t conn_id; - tBTA_GATTC_CLCB *p_clcb; - tBTA_GATTC_DATA gattc_data; - - if (bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, true)) - { - /* always call open to hold a connection */ - if (!GATT_Connect(p_data->client_if, p_data->remote_bda, false, p_data->transport, false)) - { - uint8_t *bda = (uint8_t *)p_data->remote_bda; - status = BTA_GATT_ERROR; - APPL_TRACE_ERROR("%s unable to connect to remote bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", - __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); +void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN* p_data, + tBTA_GATTC_RCB* p_clreg) { + tBTA_GATT_STATUS status = BTA_GATT_NO_RESOURCES; + uint16_t conn_id; + tBTA_GATTC_CLCB* p_clcb; + tBTA_GATTC_DATA gattc_data; + + if (bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, true)) { + /* always call open to hold a connection */ + if (!GATT_Connect(p_data->client_if, p_data->remote_bda, false, + p_data->transport, false)) { + uint8_t* bda = (uint8_t*)p_data->remote_bda; + status = BTA_GATT_ERROR; + APPL_TRACE_ERROR( + "%s unable to connect to remote " + "bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", + __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); + } else { + status = BTA_GATT_OK; + + /* if is a connected remote device */ + if (GATT_GetConnIdIfConnected(p_data->client_if, p_data->remote_bda, + &conn_id, p_data->transport)) { + if ((p_clcb = bta_gattc_find_alloc_clcb( + p_data->client_if, p_data->remote_bda, + BTA_GATT_TRANSPORT_LE)) != NULL) { + gattc_data.hdr.layer_specific = p_clcb->bta_conn_id = conn_id; + + /* open connection */ + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, &gattc_data); + status = BTA_GATT_OK; } - else - { - status = BTA_GATT_OK; - - /* if is a connected remote device */ - if (GATT_GetConnIdIfConnected(p_data->client_if, - p_data->remote_bda, - &conn_id, - p_data->transport)) - { - if ((p_clcb = bta_gattc_find_alloc_clcb(p_data->client_if, p_data->remote_bda, - BTA_GATT_TRANSPORT_LE)) != NULL) - { - gattc_data.hdr.layer_specific = p_clcb->bta_conn_id = conn_id; - - /* open connection */ - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, &gattc_data); - status = BTA_GATT_OK; - } - } - } + } } + } - /* open failure, report OPEN_EVT */ - if (status != BTA_GATT_OK) - { - bta_gattc_send_open_cback(p_clreg, status, p_data->remote_bda, - BTA_GATT_INVALID_CONN_ID, BTA_GATT_TRANSPORT_LE, 0); - } + /* open failure, report OPEN_EVT */ + if (status != BTA_GATT_OK) { + bta_gattc_send_open_cback(p_clreg, status, p_data->remote_bda, + BTA_GATT_INVALID_CONN_ID, BTA_GATT_TRANSPORT_LE, + 0); + } } /******************************************************************************* * @@ -595,31 +514,24 @@ void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN *p_data, tBTA_GATTC_RCB *p_clreg * Returns void * ******************************************************************************/ -void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN *p_data) -{ - tBTA_GATTC_RCB *p_clreg; - tBTA_GATTC cb_data; - cb_data.status = BTA_GATT_ERROR; - - /* remove the device from the bg connection mask */ - if (bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, false)) - { - if (GATT_CancelConnect(p_data->client_if, p_data->remote_bda, false)) - { - cb_data.status = BTA_GATT_OK; - } - else - { - APPL_TRACE_ERROR("bta_gattc_cancel_bk_conn failed"); - } - } - p_clreg = bta_gattc_cl_get_regcb(p_data->client_if); - - if (p_clreg && p_clreg->p_cback) - { - (*p_clreg->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); +void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN* p_data) { + tBTA_GATTC_RCB* p_clreg; + tBTA_GATTC cb_data; + cb_data.status = BTA_GATT_ERROR; + + /* remove the device from the bg connection mask */ + if (bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, false)) { + if (GATT_CancelConnect(p_data->client_if, p_data->remote_bda, false)) { + cb_data.status = BTA_GATT_OK; + } else { + APPL_TRACE_ERROR("bta_gattc_cancel_bk_conn failed"); } + } + p_clreg = bta_gattc_cl_get_regcb(p_data->client_if); + if (p_clreg && p_clreg->p_cback) { + (*p_clreg->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); + } } /******************************************************************************* * @@ -630,18 +542,16 @@ void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN *p_data) * Returns void * ******************************************************************************/ -void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB *p_clcb, - UNUSED_ATTR tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC cb_data; - - if ( p_clcb->p_rcb->p_cback ) - { - cb_data.status = BTA_GATT_OK; - (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); - } +void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB* p_clcb, + UNUSED_ATTR tBTA_GATTC_DATA* p_data) { + tBTA_GATTC cb_data; - bta_gattc_clcb_dealloc(p_clcb); + if (p_clcb->p_rcb->p_cback) { + cb_data.status = BTA_GATT_OK; + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); + } + + bta_gattc_clcb_dealloc(p_clcb); } /******************************************************************************* * @@ -652,22 +562,18 @@ void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB *p_clcb, * Returns void * ******************************************************************************/ -void bta_gattc_cancel_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC cb_data; - - if (GATT_CancelConnect(p_clcb->p_rcb->client_if, p_data->api_cancel_conn.remote_bda, true)) - { - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CANCEL_OPEN_OK_EVT, p_data); - } - else - { - if ( p_clcb->p_rcb->p_cback ) - { - cb_data.status = BTA_GATT_ERROR; - (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); - } - } +void bta_gattc_cancel_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATTC cb_data; + + if (GATT_CancelConnect(p_clcb->p_rcb->client_if, + p_data->api_cancel_conn.remote_bda, true)) { + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CANCEL_OPEN_OK_EVT, p_data); + } else { + if (p_clcb->p_rcb->p_cback) { + cb_data.status = BTA_GATT_ERROR; + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); + } + } } /******************************************************************************* * @@ -678,70 +584,59 @@ void bta_gattc_cancel_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_gattc_conn(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC_IF gatt_if; - APPL_TRACE_DEBUG("bta_gattc_conn server cache state=%d",p_clcb->p_srcb->state); - - if (p_data != NULL) - { - APPL_TRACE_DEBUG("bta_gattc_conn conn_id=%d",p_data->hdr.layer_specific); - p_clcb->bta_conn_id = p_data->int_conn.hdr.layer_specific; - - GATT_GetConnectionInfor(p_data->hdr.layer_specific, - &gatt_if, p_clcb->bda, &p_clcb->transport); - } - - p_clcb->p_srcb->connected = true; - - if (p_clcb->p_srcb->mtu == 0) - p_clcb->p_srcb->mtu = GATT_DEF_BLE_MTU_SIZE; - - /* start database cache if needed */ - if (p_clcb->p_srcb->p_srvc_cache == NULL || - p_clcb->p_srcb->state != BTA_GATTC_SERV_IDLE) - { - if (p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) - { - p_clcb->p_srcb->state = BTA_GATTC_SERV_LOAD; - if (bta_gattc_cache_load(p_clcb)) { - p_clcb->p_srcb->state = BTA_GATTC_SERV_IDLE; - bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_OK); - } else { - p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC; - /* cache load failure, start discovery */ - bta_gattc_start_discover(p_clcb, NULL); - } - } - else /* cache is building */ - p_clcb->state = BTA_GATTC_DISCOVER_ST; - } - - else - { - /* a pending service handle change indication */ - if (p_clcb->p_srcb->srvc_hdl_chg) - { - p_clcb->p_srcb->srvc_hdl_chg = false; - /* start discovery */ - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); - } - } +void bta_gattc_conn(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATTC_IF gatt_if; + APPL_TRACE_DEBUG("bta_gattc_conn server cache state=%d", + p_clcb->p_srcb->state); + + if (p_data != NULL) { + APPL_TRACE_DEBUG("bta_gattc_conn conn_id=%d", p_data->hdr.layer_specific); + p_clcb->bta_conn_id = p_data->int_conn.hdr.layer_specific; + + GATT_GetConnectionInfor(p_data->hdr.layer_specific, &gatt_if, p_clcb->bda, + &p_clcb->transport); + } + + p_clcb->p_srcb->connected = true; + + if (p_clcb->p_srcb->mtu == 0) p_clcb->p_srcb->mtu = GATT_DEF_BLE_MTU_SIZE; + + /* start database cache if needed */ + if (p_clcb->p_srcb->p_srvc_cache == NULL || + p_clcb->p_srcb->state != BTA_GATTC_SERV_IDLE) { + if (p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) { + p_clcb->p_srcb->state = BTA_GATTC_SERV_LOAD; + if (bta_gattc_cache_load(p_clcb)) { + p_clcb->p_srcb->state = BTA_GATTC_SERV_IDLE; + bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_OK); + } else { + p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC; + /* cache load failure, start discovery */ + bta_gattc_start_discover(p_clcb, NULL); + } + } else /* cache is building */ + p_clcb->state = BTA_GATTC_DISCOVER_ST; + } + + else { + /* a pending service handle change indication */ + if (p_clcb->p_srcb->srvc_hdl_chg) { + p_clcb->p_srcb->srvc_hdl_chg = false; + /* start discovery */ + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); + } + } + + if (p_clcb->p_rcb) { + /* there is no RM for GATT */ + if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) + bta_sys_conn_open(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); - if (p_clcb->p_rcb) - { - /* there is no RM for GATT */ - if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) - bta_sys_conn_open(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); - - bta_gattc_send_open_cback(p_clcb->p_rcb, - BTA_GATT_OK, - p_clcb->bda, - p_clcb->bta_conn_id, - p_clcb->transport, - p_clcb->p_srcb->mtu); - } - } + bta_gattc_send_open_cback(p_clcb->p_rcb, BTA_GATT_OK, p_clcb->bda, + p_clcb->bta_conn_id, p_clcb->transport, + p_clcb->p_srcb->mtu); + } +} /******************************************************************************* * * Function bta_gattc_close_fail @@ -751,21 +646,19 @@ void bta_gattc_conn(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_gattc_close_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC cb_data; - - if ( p_clcb->p_rcb->p_cback ) - { - memset(&cb_data, 0, sizeof(tBTA_GATTC)); - cb_data.close.client_if = p_clcb->p_rcb->client_if; - cb_data.close.conn_id = p_data->hdr.layer_specific; - bdcpy(cb_data.close.remote_bda, p_clcb->bda); - cb_data.close.status = BTA_GATT_ERROR; - cb_data.close.reason = BTA_GATT_CONN_NONE; - - (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CLOSE_EVT, &cb_data); - } +void bta_gattc_close_fail(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATTC cb_data; + + if (p_clcb->p_rcb->p_cback) { + memset(&cb_data, 0, sizeof(tBTA_GATTC)); + cb_data.close.client_if = p_clcb->p_rcb->client_if; + cb_data.close.conn_id = p_data->hdr.layer_specific; + bdcpy(cb_data.close.remote_bda, p_clcb->bda); + cb_data.close.status = BTA_GATT_ERROR; + cb_data.close.reason = BTA_GATT_CONN_NONE; + + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CLOSE_EVT, &cb_data); + } } /******************************************************************************* * @@ -776,42 +669,36 @@ void bta_gattc_close_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_gattc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC_CBACK *p_cback = p_clcb->p_rcb->p_cback; - tBTA_GATTC_RCB *p_clreg = p_clcb->p_rcb; - tBTA_GATTC cb_data; +void bta_gattc_close(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATTC_CBACK* p_cback = p_clcb->p_rcb->p_cback; + tBTA_GATTC_RCB* p_clreg = p_clcb->p_rcb; + tBTA_GATTC cb_data; - APPL_TRACE_DEBUG("bta_gattc_close conn_id=%d",p_clcb->bta_conn_id); + APPL_TRACE_DEBUG("bta_gattc_close conn_id=%d", p_clcb->bta_conn_id); - cb_data.close.client_if = p_clcb->p_rcb->client_if; - cb_data.close.conn_id = p_clcb->bta_conn_id; - cb_data.close.reason = p_clcb->reason; - cb_data.close.status = p_clcb->status; - bdcpy(cb_data.close.remote_bda, p_clcb->bda); + cb_data.close.client_if = p_clcb->p_rcb->client_if; + cb_data.close.conn_id = p_clcb->bta_conn_id; + cb_data.close.reason = p_clcb->reason; + cb_data.close.status = p_clcb->status; + bdcpy(cb_data.close.remote_bda, p_clcb->bda); - if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) - bta_sys_conn_close( BTA_ID_GATTC ,BTA_ALL_APP_ID, p_clcb->bda); + if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) + bta_sys_conn_close(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); - bta_gattc_clcb_dealloc(p_clcb); + bta_gattc_clcb_dealloc(p_clcb); - if (p_data->hdr.event == BTA_GATTC_API_CLOSE_EVT) - { - cb_data.close.status = GATT_Disconnect(p_data->hdr.layer_specific); - } - else if (p_data->hdr.event == BTA_GATTC_INT_DISCONN_EVT) - { - cb_data.close.status = p_data->int_conn.reason; - cb_data.close.reason = p_data->int_conn.reason; - } + if (p_data->hdr.event == BTA_GATTC_API_CLOSE_EVT) { + cb_data.close.status = GATT_Disconnect(p_data->hdr.layer_specific); + } else if (p_data->hdr.event == BTA_GATTC_INT_DISCONN_EVT) { + cb_data.close.status = p_data->int_conn.reason; + cb_data.close.reason = p_data->int_conn.reason; + } - if(p_cback) - (* p_cback)(BTA_GATTC_CLOSE_EVT, (tBTA_GATTC *)&cb_data); + if (p_cback) (*p_cback)(BTA_GATTC_CLOSE_EVT, (tBTA_GATTC*)&cb_data); - if (p_clreg->num_clcb == 0 && p_clreg->dereg_pending) - { - bta_gattc_deregister_cmpl(p_clreg); - } + if (p_clreg->num_clcb == 0 && p_clreg->dereg_pending) { + bta_gattc_deregister_cmpl(p_clreg); + } } /******************************************************************************* * @@ -822,18 +709,17 @@ void bta_gattc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS status) -{ - uint8_t i; - - for (i = 0; i < BTA_GATTC_CLCB_MAX; i ++) - { - if (bta_gattc_cb.clcb[i].p_srcb == p_srcb) - { - bta_gattc_cb.clcb[i].status = status; - bta_gattc_sm_execute(&bta_gattc_cb.clcb[i], BTA_GATTC_DISCOVER_CMPL_EVT, NULL); - } +void bta_gattc_reset_discover_st(tBTA_GATTC_SERV* p_srcb, + tBTA_GATT_STATUS status) { + uint8_t i; + + for (i = 0; i < BTA_GATTC_CLCB_MAX; i++) { + if (bta_gattc_cb.clcb[i].p_srcb == p_srcb) { + bta_gattc_cb.clcb[i].status = status; + bta_gattc_sm_execute(&bta_gattc_cb.clcb[i], BTA_GATTC_DISCOVER_CMPL_EVT, + NULL); } + } } /******************************************************************************* * @@ -844,25 +730,24 @@ void bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS statu * Returns void * ******************************************************************************/ -void bta_gattc_disc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s: Discovery cancel conn_id=%d", __func__, - p_clcb->bta_conn_id); - - if (p_clcb->disc_active) - bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_ERROR); - else - p_clcb->state = BTA_GATTC_CONN_ST; - - // This function only gets called as the result of a BTA_GATTC_API_CLOSE_EVT - // while in the BTA_GATTC_DISCOVER_ST state. Once the state changes, the - // connection itself still needs to be closed to resolve the original event. - if (p_clcb->state == BTA_GATTC_CONN_ST) - { - APPL_TRACE_DEBUG("State is back to BTA_GATTC_CONN_ST. " - "Trigger connection close"); - bta_gattc_close(p_clcb, p_data); - } +void bta_gattc_disc_close(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + APPL_TRACE_DEBUG("%s: Discovery cancel conn_id=%d", __func__, + p_clcb->bta_conn_id); + + if (p_clcb->disc_active) + bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_ERROR); + else + p_clcb->state = BTA_GATTC_CONN_ST; + + // This function only gets called as the result of a BTA_GATTC_API_CLOSE_EVT + // while in the BTA_GATTC_DISCOVER_ST state. Once the state changes, the + // connection itself still needs to be closed to resolve the original event. + if (p_clcb->state == BTA_GATTC_CONN_ST) { + APPL_TRACE_DEBUG( + "State is back to BTA_GATTC_CONN_ST. " + "Trigger connection close"); + bta_gattc_close(p_clcb, p_data); + } } /******************************************************************************* * @@ -874,38 +759,35 @@ void bta_gattc_disc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_set_discover_st(tBTA_GATTC_SERV *p_srcb) -{ - uint8_t i; +void bta_gattc_set_discover_st(tBTA_GATTC_SERV* p_srcb) { + uint8_t i; #if (BLE_INCLUDED == TRUE) - L2CA_EnableUpdateBleConnParams(p_srcb->server_bda, false); + L2CA_EnableUpdateBleConnParams(p_srcb->server_bda, false); #endif - for (i = 0; i < BTA_GATTC_CLCB_MAX; i ++) - { - if (bta_gattc_cb.clcb[i].p_srcb == p_srcb) - { - bta_gattc_cb.clcb[i].status = BTA_GATT_OK; - bta_gattc_cb.clcb[i].state = BTA_GATTC_DISCOVER_ST; - } + for (i = 0; i < BTA_GATTC_CLCB_MAX; i++) { + if (bta_gattc_cb.clcb[i].p_srcb == p_srcb) { + bta_gattc_cb.clcb[i].status = BTA_GATT_OK; + bta_gattc_cb.clcb[i].state = BTA_GATTC_DISCOVER_ST; } + } } /******************************************************************************* * * Function bta_gattc_restart_discover * * Description process service change in discovery state, mark up the auto - * update flag and set status to be discovery cancel for current + * update flag and set status to be discovery cancel for + *current * discovery. * * Returns None. * ******************************************************************************/ -void bta_gattc_restart_discover(tBTA_GATTC_CLCB *p_clcb, - UNUSED_ATTR tBTA_GATTC_DATA *p_data) -{ - p_clcb->status = BTA_GATT_CANCEL; - p_clcb->auto_update = BTA_GATTC_DISC_WAITING; +void bta_gattc_restart_discover(tBTA_GATTC_CLCB* p_clcb, + UNUSED_ATTR tBTA_GATTC_DATA* p_data) { + p_clcb->status = BTA_GATT_CANCEL; + p_clcb->auto_update = BTA_GATTC_DISC_WAITING; } /******************************************************************************* @@ -917,24 +799,21 @@ void bta_gattc_restart_discover(tBTA_GATTC_CLCB *p_clcb, * Returns None. * ******************************************************************************/ -void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATT_STATUS status; - - if (bta_gattc_enqueue(p_clcb, p_data)) - { - status = GATTC_ConfigureMTU (p_clcb->bta_conn_id, p_data->api_mtu.mtu); - - /* if failed, return callback here */ - if (status != GATT_SUCCESS && status != GATT_CMD_STARTED) - { - /* Dequeue the data, if it was enqueued */ - if (p_clcb->p_q_cmd == p_data) - p_clcb->p_q_cmd = NULL; - - bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_CONFIG, status, NULL); - } +void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATT_STATUS status; + + if (bta_gattc_enqueue(p_clcb, p_data)) { + status = GATTC_ConfigureMTU(p_clcb->bta_conn_id, p_data->api_mtu.mtu); + + /* if failed, return callback here */ + if (status != GATT_SUCCESS && status != GATT_CMD_STARTED) { + /* Dequeue the data, if it was enqueued */ + if (p_clcb->p_q_cmd == p_data) p_clcb->p_q_cmd = NULL; + + bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_CONFIG, status, + NULL); } + } } /******************************************************************************* * @@ -945,59 +824,53 @@ void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_start_discover(tBTA_GATTC_CLCB *p_clcb, - UNUSED_ATTR tBTA_GATTC_DATA *p_data) -{ - APPL_TRACE_DEBUG("bta_gattc_start_discover conn_id=%d p_clcb->p_srcb->state = %d ", - p_clcb->bta_conn_id, p_clcb->p_srcb->state); - - if (((p_clcb->p_q_cmd == NULL || p_clcb->auto_update == BTA_GATTC_REQ_WAITING) && - p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) || - p_clcb->p_srcb->state == BTA_GATTC_SERV_DISC) - /* no pending operation, start discovery right away */ - { - p_clcb->auto_update = BTA_GATTC_NO_SCHEDULE; - - if (p_clcb->p_srcb != NULL) - { - /* clear the service change mask */ - p_clcb->p_srcb->srvc_hdl_chg = false; - p_clcb->p_srcb->update_count = 0; - p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC_ACT; - - if (p_clcb->transport == BTA_TRANSPORT_LE) - L2CA_EnableUpdateBleConnParams(p_clcb->p_srcb->server_bda, false); - - /* set all srcb related clcb into discovery ST */ - bta_gattc_set_discover_st(p_clcb->p_srcb); - - if ((p_clcb->status = bta_gattc_init_cache(p_clcb->p_srcb)) == BTA_GATT_OK) - { - p_clcb->status = bta_gattc_discover_pri_service(p_clcb->bta_conn_id, - p_clcb->p_srcb, GATT_DISC_SRVC_ALL); - } - if (p_clcb->status != BTA_GATT_OK) - { - APPL_TRACE_ERROR("discovery on server failed"); - bta_gattc_reset_discover_st(p_clcb->p_srcb, p_clcb->status); - } - else - p_clcb->disc_active = true; - } - else - { - APPL_TRACE_ERROR("unknown device, can not start discovery"); - } - } - /* pending operation, wait until it finishes */ - else - { - p_clcb->auto_update = BTA_GATTC_DISC_WAITING; - - if (p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) - p_clcb->state = BTA_GATTC_CONN_ST; /* set clcb state */ +void bta_gattc_start_discover(tBTA_GATTC_CLCB* p_clcb, + UNUSED_ATTR tBTA_GATTC_DATA* p_data) { + APPL_TRACE_DEBUG( + "bta_gattc_start_discover conn_id=%d p_clcb->p_srcb->state = %d ", + p_clcb->bta_conn_id, p_clcb->p_srcb->state); + + if (((p_clcb->p_q_cmd == NULL || + p_clcb->auto_update == BTA_GATTC_REQ_WAITING) && + p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) || + p_clcb->p_srcb->state == BTA_GATTC_SERV_DISC) + /* no pending operation, start discovery right away */ + { + p_clcb->auto_update = BTA_GATTC_NO_SCHEDULE; + + if (p_clcb->p_srcb != NULL) { + /* clear the service change mask */ + p_clcb->p_srcb->srvc_hdl_chg = false; + p_clcb->p_srcb->update_count = 0; + p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC_ACT; + + if (p_clcb->transport == BTA_TRANSPORT_LE) + L2CA_EnableUpdateBleConnParams(p_clcb->p_srcb->server_bda, false); + + /* set all srcb related clcb into discovery ST */ + bta_gattc_set_discover_st(p_clcb->p_srcb); + + if ((p_clcb->status = bta_gattc_init_cache(p_clcb->p_srcb)) == + BTA_GATT_OK) { + p_clcb->status = bta_gattc_discover_pri_service( + p_clcb->bta_conn_id, p_clcb->p_srcb, GATT_DISC_SRVC_ALL); + } + if (p_clcb->status != BTA_GATT_OK) { + APPL_TRACE_ERROR("discovery on server failed"); + bta_gattc_reset_discover_st(p_clcb->p_srcb, p_clcb->status); + } else + p_clcb->disc_active = true; + } else { + APPL_TRACE_ERROR("unknown device, can not start discovery"); } + } + /* pending operation, wait until it finishes */ + else { + p_clcb->auto_update = BTA_GATTC_DISC_WAITING; + if (p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) + p_clcb->state = BTA_GATTC_CONN_ST; /* set clcb state */ + } } /******************************************************************************* * @@ -1008,57 +881,53 @@ void bta_gattc_start_discover(tBTA_GATTC_CLCB *p_clcb, * Returns None. * ******************************************************************************/ -void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, - UNUSED_ATTR tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC_DATA *p_q_cmd = p_clcb->p_q_cmd; +void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB* p_clcb, + UNUSED_ATTR tBTA_GATTC_DATA* p_data) { + tBTA_GATTC_DATA* p_q_cmd = p_clcb->p_q_cmd; - APPL_TRACE_DEBUG("bta_gattc_disc_cmpl conn_id=%d",p_clcb->bta_conn_id); + APPL_TRACE_DEBUG("bta_gattc_disc_cmpl conn_id=%d", p_clcb->bta_conn_id); #if (BLE_INCLUDED == TRUE) - if(p_clcb->transport == BTA_TRANSPORT_LE) - L2CA_EnableUpdateBleConnParams(p_clcb->p_srcb->server_bda, true); + if (p_clcb->transport == BTA_TRANSPORT_LE) + L2CA_EnableUpdateBleConnParams(p_clcb->p_srcb->server_bda, true); #endif - p_clcb->p_srcb->state = BTA_GATTC_SERV_IDLE; - p_clcb->disc_active = false; - - if (p_clcb->status != GATT_SUCCESS) - { - /* clean up cache */ - if(p_clcb->p_srcb && p_clcb->p_srcb->p_srvc_cache) { - list_free(p_clcb->p_srcb->p_srvc_cache); - p_clcb->p_srcb->p_srvc_cache = NULL; - } + p_clcb->p_srcb->state = BTA_GATTC_SERV_IDLE; + p_clcb->disc_active = false; - /* used to reset cache in application */ - bta_gattc_cache_reset(p_clcb->p_srcb->server_bda); - } - if (p_clcb->p_srcb && p_clcb->p_srcb->p_srvc_list) { - /* release pending attribute list buffer */ - osi_free_and_reset((void **)&p_clcb->p_srcb->p_srvc_list); + if (p_clcb->status != GATT_SUCCESS) { + /* clean up cache */ + if (p_clcb->p_srcb && p_clcb->p_srcb->p_srvc_cache) { + list_free(p_clcb->p_srcb->p_srvc_cache); + p_clcb->p_srcb->p_srvc_cache = NULL; } - if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING) - { - /* start discovery again */ - p_clcb->auto_update = BTA_GATTC_REQ_WAITING; - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); - } - /* get any queued command to proceed */ - else if (p_q_cmd != NULL) - { - p_clcb->p_q_cmd = NULL; - /* execute pending operation of link block still present */ - if (l2cu_find_lcb_by_bd_addr(p_clcb->p_srcb->server_bda, BT_TRANSPORT_LE) != NULL) { - bta_gattc_sm_execute(p_clcb, p_q_cmd->hdr.event, p_q_cmd); - } - /* if the command executed requeued the cmd, we don't - * want to free the underlying buffer that's being - * referenced by p_clcb->p_q_cmd - */ - if (p_q_cmd != p_clcb->p_q_cmd) - osi_free_and_reset((void **)&p_q_cmd); - } + /* used to reset cache in application */ + bta_gattc_cache_reset(p_clcb->p_srcb->server_bda); + } + if (p_clcb->p_srcb && p_clcb->p_srcb->p_srvc_list) { + /* release pending attribute list buffer */ + osi_free_and_reset((void**)&p_clcb->p_srcb->p_srvc_list); + } + + if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING) { + /* start discovery again */ + p_clcb->auto_update = BTA_GATTC_REQ_WAITING; + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); + } + /* get any queued command to proceed */ + else if (p_q_cmd != NULL) { + p_clcb->p_q_cmd = NULL; + /* execute pending operation of link block still present */ + if (l2cu_find_lcb_by_bd_addr(p_clcb->p_srcb->server_bda, BT_TRANSPORT_LE) != + NULL) { + bta_gattc_sm_execute(p_clcb, p_q_cmd->hdr.event, p_q_cmd); + } + /* if the command executed requeued the cmd, we don't + * want to free the underlying buffer that's being + * referenced by p_clcb->p_q_cmd + */ + if (p_q_cmd != p_clcb->p_q_cmd) osi_free_and_reset((void**)&p_q_cmd); + } } /******************************************************************************* * @@ -1069,27 +938,25 @@ void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, * Returns None. * ******************************************************************************/ -void bta_gattc_read(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - if (!bta_gattc_enqueue(p_clcb, p_data)) - return; +void bta_gattc_read(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + if (!bta_gattc_enqueue(p_clcb, p_data)) return; - tGATT_READ_PARAM read_param; - memset (&read_param, 0 ,sizeof(tGATT_READ_PARAM)); - read_param.by_handle.handle = p_data->api_read.handle; - read_param.by_handle.auth_req = p_data->api_read.auth_req; + tGATT_READ_PARAM read_param; + memset(&read_param, 0, sizeof(tGATT_READ_PARAM)); + read_param.by_handle.handle = p_data->api_read.handle; + read_param.by_handle.auth_req = p_data->api_read.auth_req; - tBTA_GATT_STATUS status = GATTC_Read(p_clcb->bta_conn_id, GATT_READ_BY_HANDLE, &read_param); + tBTA_GATT_STATUS status = + GATTC_Read(p_clcb->bta_conn_id, GATT_READ_BY_HANDLE, &read_param); - /* read fail */ - if (status != BTA_GATT_OK) - { - /* Dequeue the data, if it was enqueued */ - if (p_clcb->p_q_cmd == p_data) - p_clcb->p_q_cmd = NULL; + /* read fail */ + if (status != BTA_GATT_OK) { + /* Dequeue the data, if it was enqueued */ + if (p_clcb->p_q_cmd == p_data) p_clcb->p_q_cmd = NULL; - bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_READ, status, NULL); - } + bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_READ, status, + NULL); + } } /******************************************************************************* * @@ -1099,35 +966,31 @@ void bta_gattc_read(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * * Returns None. ********************************************************************************/ -void bta_gattc_read_multi(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATT_STATUS status = BTA_GATT_OK; - tGATT_READ_PARAM read_param; - - if (bta_gattc_enqueue(p_clcb, p_data)) - { - memset(&read_param, 0, sizeof(tGATT_READ_PARAM)); - - if (status == BTA_GATT_OK) - { - read_param.read_multiple.num_handles = p_data->api_read_multi.num_attr; - read_param.read_multiple.auth_req = p_data->api_read_multi.auth_req; - memcpy(&read_param.read_multiple.handles, p_data->api_read_multi.handles, - sizeof(uint16_t) * p_data->api_read_multi.num_attr); - - status = GATTC_Read(p_clcb->bta_conn_id, GATT_READ_MULTIPLE, &read_param); - } +void bta_gattc_read_multi(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATT_STATUS status = BTA_GATT_OK; + tGATT_READ_PARAM read_param; - /* read fail */ - if (status != BTA_GATT_OK) - { - /* Dequeue the data, if it was enqueued */ - if (p_clcb->p_q_cmd == p_data) - p_clcb->p_q_cmd = NULL; + if (bta_gattc_enqueue(p_clcb, p_data)) { + memset(&read_param, 0, sizeof(tGATT_READ_PARAM)); - bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_READ, status, NULL); - } + if (status == BTA_GATT_OK) { + read_param.read_multiple.num_handles = p_data->api_read_multi.num_attr; + read_param.read_multiple.auth_req = p_data->api_read_multi.auth_req; + memcpy(&read_param.read_multiple.handles, p_data->api_read_multi.handles, + sizeof(uint16_t) * p_data->api_read_multi.num_attr); + + status = GATTC_Read(p_clcb->bta_conn_id, GATT_READ_MULTIPLE, &read_param); } + + /* read fail */ + if (status != BTA_GATT_OK) { + /* Dequeue the data, if it was enqueued */ + if (p_clcb->p_q_cmd == p_data) p_clcb->p_q_cmd = NULL; + + bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_READ, status, + NULL); + } + } } /******************************************************************************* * @@ -1138,34 +1001,32 @@ void bta_gattc_read_multi(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_write(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - if (!bta_gattc_enqueue(p_clcb, p_data)) - return; +void bta_gattc_write(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + if (!bta_gattc_enqueue(p_clcb, p_data)) return; - tBTA_GATT_STATUS status = BTA_GATT_OK; - tGATT_VALUE attr; + tBTA_GATT_STATUS status = BTA_GATT_OK; + tGATT_VALUE attr; - attr.conn_id = p_clcb->bta_conn_id; - attr.handle = p_data->api_write.handle; - attr.offset = p_data->api_write.offset; - attr.len = p_data->api_write.len; - attr.auth_req = p_data->api_write.auth_req; + attr.conn_id = p_clcb->bta_conn_id; + attr.handle = p_data->api_write.handle; + attr.offset = p_data->api_write.offset; + attr.len = p_data->api_write.len; + attr.auth_req = p_data->api_write.auth_req; - if (p_data->api_write.p_value) - memcpy(attr.value, p_data->api_write.p_value, p_data->api_write.len); + if (p_data->api_write.p_value) + memcpy(attr.value, p_data->api_write.p_value, p_data->api_write.len); - status = GATTC_Write(p_clcb->bta_conn_id, p_data->api_write.write_type, &attr); + status = + GATTC_Write(p_clcb->bta_conn_id, p_data->api_write.write_type, &attr); - /* write fail */ - if (status != BTA_GATT_OK) - { - /* Dequeue the data, if it was enqueued */ - if (p_clcb->p_q_cmd == p_data) - p_clcb->p_q_cmd = NULL; + /* write fail */ + if (status != BTA_GATT_OK) { + /* Dequeue the data, if it was enqueued */ + if (p_clcb->p_q_cmd == p_data) p_clcb->p_q_cmd = NULL; - bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_WRITE, status, NULL); - } + bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_WRITE, status, + NULL); + } } /******************************************************************************* * @@ -1175,23 +1036,21 @@ void bta_gattc_write(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * * Returns None. ********************************************************************************/ -void bta_gattc_execute(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATT_STATUS status; +void bta_gattc_execute(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATT_STATUS status; - if (bta_gattc_enqueue(p_clcb, p_data)) - { - status = GATTC_ExecuteWrite(p_clcb->bta_conn_id, p_data->api_exec.is_execute); + if (bta_gattc_enqueue(p_clcb, p_data)) { + status = + GATTC_ExecuteWrite(p_clcb->bta_conn_id, p_data->api_exec.is_execute); - if (status != BTA_GATT_OK) - { - /* Dequeue the data, if it was enqueued */ - if (p_clcb->p_q_cmd == p_data) - p_clcb->p_q_cmd = NULL; + if (status != BTA_GATT_OK) { + /* Dequeue the data, if it was enqueued */ + if (p_clcb->p_q_cmd == p_data) p_clcb->p_q_cmd = NULL; - bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_EXE_WRITE, status, NULL); - } + bta_gattc_cmpl_sendmsg(p_clcb->bta_conn_id, GATTC_OPTYPE_EXE_WRITE, + status, NULL); } + } } /******************************************************************************* * @@ -1202,20 +1061,19 @@ void bta_gattc_execute(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_confirm(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - uint16_t handle = p_data->api_confirm.handle; +void bta_gattc_confirm(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + uint16_t handle = p_data->api_confirm.handle; - if (GATTC_SendHandleValueConfirm(p_data->api_confirm.hdr.layer_specific, handle) - != GATT_SUCCESS) { - APPL_TRACE_ERROR("bta_gattc_confirm to handle [0x%04x] failed", handle); - } else { - /* if over BR_EDR, inform PM for mode change */ - if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) { - bta_sys_busy(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); - bta_sys_idle(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); - } + if (GATTC_SendHandleValueConfirm(p_data->api_confirm.hdr.layer_specific, + handle) != GATT_SUCCESS) { + APPL_TRACE_ERROR("bta_gattc_confirm to handle [0x%04x] failed", handle); + } else { + /* if over BR_EDR, inform PM for mode change */ + if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) { + bta_sys_busy(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); + bta_sys_idle(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); } + } } /******************************************************************************* * @@ -1226,18 +1084,18 @@ void bta_gattc_confirm(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_read_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) -{ - GATT_READ_OP_CB cb = p_clcb->p_q_cmd->api_read.read_cb; - void *my_cb_data = p_clcb->p_q_cmd->api_read.read_cb_data; - - uint16_t handle = p_clcb->p_q_cmd->api_read.handle; - osi_free_and_reset((void **)&p_clcb->p_q_cmd); - - if (cb) { - cb(p_clcb->bta_conn_id, p_data->status, handle, - p_data->p_cmpl->att_value.len, p_data->p_cmpl->att_value.value, my_cb_data); - } +void bta_gattc_read_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_OP_CMPL* p_data) { + GATT_READ_OP_CB cb = p_clcb->p_q_cmd->api_read.read_cb; + void* my_cb_data = p_clcb->p_q_cmd->api_read.read_cb_data; + + uint16_t handle = p_clcb->p_q_cmd->api_read.handle; + osi_free_and_reset((void**)&p_clcb->p_q_cmd); + + if (cb) { + cb(p_clcb->bta_conn_id, p_data->status, handle, + p_data->p_cmpl->att_value.len, p_data->p_cmpl->att_value.value, + my_cb_data); + } } /******************************************************************************* * @@ -1248,16 +1106,16 @@ void bta_gattc_read_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_write_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) -{ - GATT_WRITE_OP_CB cb = p_clcb->p_q_cmd->api_write.write_cb; - void *my_cb_data = p_clcb->p_q_cmd->api_write.write_cb_data; +void bta_gattc_write_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_OP_CMPL* p_data) { + GATT_WRITE_OP_CB cb = p_clcb->p_q_cmd->api_write.write_cb; + void* my_cb_data = p_clcb->p_q_cmd->api_write.write_cb_data; - osi_free_and_reset((void **)&p_clcb->p_q_cmd); + osi_free_and_reset((void**)&p_clcb->p_q_cmd); - if (cb) { - cb(p_clcb->bta_conn_id, p_data->status, p_data->p_cmpl->att_value.handle, my_cb_data); - } + if (cb) { + cb(p_clcb->bta_conn_id, p_data->status, p_data->p_cmpl->att_value.handle, + my_cb_data); + } } /******************************************************************************* * @@ -1268,19 +1126,17 @@ void bta_gattc_write_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_exec_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) -{ - tBTA_GATTC cb_data; - - osi_free_and_reset((void **)&p_clcb->p_q_cmd); - p_clcb->status = BTA_GATT_OK; +void bta_gattc_exec_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_OP_CMPL* p_data) { + tBTA_GATTC cb_data; - /* execute complete, callback */ - cb_data.exec_cmpl.conn_id = p_clcb->bta_conn_id; - cb_data.exec_cmpl.status = p_data->status; + osi_free_and_reset((void**)&p_clcb->p_q_cmd); + p_clcb->status = BTA_GATT_OK; - ( *p_clcb->p_rcb->p_cback)(BTA_GATTC_EXEC_EVT, &cb_data); + /* execute complete, callback */ + cb_data.exec_cmpl.conn_id = p_clcb->bta_conn_id; + cb_data.exec_cmpl.status = p_data->status; + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_EXEC_EVT, &cb_data); } /******************************************************************************* @@ -1292,23 +1148,22 @@ void bta_gattc_exec_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_cfg_mtu_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) -{ - tBTA_GATTC cb_data; +void bta_gattc_cfg_mtu_cmpl(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_OP_CMPL* p_data) { + tBTA_GATTC cb_data; - osi_free_and_reset((void **)&p_clcb->p_q_cmd); + osi_free_and_reset((void**)&p_clcb->p_q_cmd); - if (p_data->p_cmpl && p_data->status == BTA_GATT_OK) - p_clcb->p_srcb->mtu = p_data->p_cmpl->mtu; + if (p_data->p_cmpl && p_data->status == BTA_GATT_OK) + p_clcb->p_srcb->mtu = p_data->p_cmpl->mtu; - /* configure MTU complete, callback */ - p_clcb->status = p_data->status; - cb_data.cfg_mtu.conn_id = p_clcb->bta_conn_id; - cb_data.cfg_mtu.status = p_data->status; - cb_data.cfg_mtu.mtu = p_clcb->p_srcb->mtu; - - (*p_clcb->p_rcb->p_cback) (BTA_GATTC_CFG_MTU_EVT, &cb_data); + /* configure MTU complete, callback */ + p_clcb->status = p_data->status; + cb_data.cfg_mtu.conn_id = p_clcb->bta_conn_id; + cb_data.cfg_mtu.status = p_data->status; + cb_data.cfg_mtu.mtu = p_clcb->p_srcb->mtu; + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CFG_MTU_EVT, &cb_data); } /******************************************************************************* * @@ -1319,66 +1174,65 @@ void bta_gattc_cfg_mtu_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_op_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - uint8_t op = (uint8_t)p_data->op_cmpl.op_code; - uint8_t mapped_op = 0; +void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + uint8_t op = (uint8_t)p_data->op_cmpl.op_code; + uint8_t mapped_op = 0; - APPL_TRACE_DEBUG("bta_gattc_op_cmpl op = %d", op); + APPL_TRACE_DEBUG("bta_gattc_op_cmpl op = %d", op); - if (op == GATTC_OPTYPE_INDICATION || op == GATTC_OPTYPE_NOTIFICATION) - { - APPL_TRACE_ERROR("unexpected operation, ignored"); + if (op == GATTC_OPTYPE_INDICATION || op == GATTC_OPTYPE_NOTIFICATION) { + APPL_TRACE_ERROR("unexpected operation, ignored"); + } else if (op >= GATTC_OPTYPE_READ) { + if (p_clcb->p_q_cmd == NULL) { + APPL_TRACE_ERROR("No pending command"); + return; } - else if (op >= GATTC_OPTYPE_READ) - { - if (p_clcb->p_q_cmd == NULL) - { - APPL_TRACE_ERROR("No pending command"); - return; - } - if (p_clcb->p_q_cmd->hdr.event != bta_gattc_opcode_to_int_evt[op - GATTC_OPTYPE_READ]) - { - mapped_op = p_clcb->p_q_cmd->hdr.event - BTA_GATTC_API_READ_EVT + GATTC_OPTYPE_READ; - if ( mapped_op > GATTC_OPTYPE_INDICATION) mapped_op = 0; + if (p_clcb->p_q_cmd->hdr.event != + bta_gattc_opcode_to_int_evt[op - GATTC_OPTYPE_READ]) { + mapped_op = p_clcb->p_q_cmd->hdr.event - BTA_GATTC_API_READ_EVT + + GATTC_OPTYPE_READ; + if (mapped_op > GATTC_OPTYPE_INDICATION) mapped_op = 0; #if (BT_TRACE_VERBOSE == TRUE) - APPL_TRACE_ERROR("expect op:(%s :0x%04x), receive unexpected operation (%s).", - bta_gattc_op_code_name[mapped_op] , p_clcb->p_q_cmd->hdr.event, - bta_gattc_op_code_name[op]); + APPL_TRACE_ERROR( + "expect op:(%s :0x%04x), receive unexpected operation (%s).", + bta_gattc_op_code_name[mapped_op], p_clcb->p_q_cmd->hdr.event, + bta_gattc_op_code_name[op]); #else - APPL_TRACE_ERROR("expect op:(%u :0x%04x), receive unexpected operation (%u).", - mapped_op , p_clcb->p_q_cmd->hdr.event, op); + APPL_TRACE_ERROR( + "expect op:(%u :0x%04x), receive unexpected operation (%u).", + mapped_op, p_clcb->p_q_cmd->hdr.event, op); #endif - return; - } + return; + } - /* discard responses if service change indication is received before operation completed */ - if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING && p_clcb->p_srcb->srvc_hdl_chg) - { - APPL_TRACE_DEBUG("Discard all responses when service change indication is received."); - p_data->op_cmpl.status = GATT_ERROR; - } + /* discard responses if service change indication is received before + * operation completed */ + if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING && + p_clcb->p_srcb->srvc_hdl_chg) { + APPL_TRACE_DEBUG( + "Discard all responses when service change indication is received."); + p_data->op_cmpl.status = GATT_ERROR; + } - /* service handle change void the response, discard it */ - if (op == GATTC_OPTYPE_READ) - bta_gattc_read_cmpl(p_clcb, &p_data->op_cmpl); + /* service handle change void the response, discard it */ + if (op == GATTC_OPTYPE_READ) + bta_gattc_read_cmpl(p_clcb, &p_data->op_cmpl); - else if (op == GATTC_OPTYPE_WRITE) - bta_gattc_write_cmpl(p_clcb, &p_data->op_cmpl); + else if (op == GATTC_OPTYPE_WRITE) + bta_gattc_write_cmpl(p_clcb, &p_data->op_cmpl); - else if (op == GATTC_OPTYPE_EXE_WRITE) - bta_gattc_exec_cmpl(p_clcb, &p_data->op_cmpl); + else if (op == GATTC_OPTYPE_EXE_WRITE) + bta_gattc_exec_cmpl(p_clcb, &p_data->op_cmpl); - else if (op == GATTC_OPTYPE_CONFIG) - bta_gattc_cfg_mtu_cmpl(p_clcb, &p_data->op_cmpl); + else if (op == GATTC_OPTYPE_CONFIG) + bta_gattc_cfg_mtu_cmpl(p_clcb, &p_data->op_cmpl); - if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING) - { - p_clcb->auto_update = BTA_GATTC_REQ_WAITING; - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); - } + if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING) { + p_clcb->auto_update = BTA_GATTC_REQ_WAITING; + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); } + } } /******************************************************************************* * @@ -1389,12 +1243,12 @@ void bta_gattc_op_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_ignore_op_cmpl(UNUSED_ATTR tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - /* receive op complete when discovery is started, ignore the response, - and wait for discovery finish and resent */ - APPL_TRACE_DEBUG("bta_gattc_ignore_op_cmpl op = %d", p_data->hdr.layer_specific); - +void bta_gattc_ignore_op_cmpl(UNUSED_ATTR tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data) { + /* receive op complete when discovery is started, ignore the response, + and wait for discovery finish and resent */ + APPL_TRACE_DEBUG("bta_gattc_ignore_op_cmpl op = %d", + p_data->hdr.layer_specific); } /******************************************************************************* * @@ -1405,36 +1259,34 @@ void bta_gattc_ignore_op_cmpl(UNUSED_ATTR tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_D * Returns None. * ******************************************************************************/ -void bta_gattc_search(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATT_STATUS status = GATT_INTERNAL_ERROR; - tBTA_GATTC cb_data; - APPL_TRACE_DEBUG("bta_gattc_search conn_id=%d",p_clcb->bta_conn_id); - if (p_clcb->p_srcb && p_clcb->p_srcb->p_srvc_cache) - { - status = BTA_GATT_OK; - /* search the local cache of a server device */ - bta_gattc_search_service(p_clcb, p_data->api_search.p_srvc_uuid); - } - cb_data.search_cmpl.status = status; - cb_data.search_cmpl.conn_id = p_clcb->bta_conn_id; - - /* end of search or no server cache available */ - ( *p_clcb->p_rcb->p_cback)(BTA_GATTC_SEARCH_CMPL_EVT, &cb_data); +void bta_gattc_search(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + tBTA_GATT_STATUS status = GATT_INTERNAL_ERROR; + tBTA_GATTC cb_data; + APPL_TRACE_DEBUG("bta_gattc_search conn_id=%d", p_clcb->bta_conn_id); + if (p_clcb->p_srcb && p_clcb->p_srcb->p_srvc_cache) { + status = BTA_GATT_OK; + /* search the local cache of a server device */ + bta_gattc_search_service(p_clcb, p_data->api_search.p_srvc_uuid); + } + cb_data.search_cmpl.status = status; + cb_data.search_cmpl.conn_id = p_clcb->bta_conn_id; + + /* end of search or no server cache available */ + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_SEARCH_CMPL_EVT, &cb_data); } /******************************************************************************* * * Function bta_gattc_q_cmd * - * Description enqueue a command into control block, usually because discovery + * Description enqueue a command into control block, usually because + *discovery * operation is busy. * * Returns None. * ******************************************************************************/ -void bta_gattc_q_cmd(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - bta_gattc_enqueue(p_clcb, p_data); +void bta_gattc_q_cmd(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + bta_gattc_enqueue(p_clcb, p_data); } /******************************************************************************* @@ -1446,13 +1298,12 @@ void bta_gattc_q_cmd(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns None. * ******************************************************************************/ -void bta_gattc_fail(tBTA_GATTC_CLCB *p_clcb, - UNUSED_ATTR tBTA_GATTC_DATA *p_data) -{ - if (p_clcb->status == BTA_GATT_OK) - { - APPL_TRACE_ERROR("operation not supported at current state [%d]", p_clcb->state); - } +void bta_gattc_fail(tBTA_GATTC_CLCB* p_clcb, + UNUSED_ATTR tBTA_GATTC_DATA* p_data) { + if (p_clcb->status == BTA_GATT_OK) { + APPL_TRACE_ERROR("operation not supported at current state [%d]", + p_clcb->state); + } } /******************************************************************************* @@ -1464,28 +1315,26 @@ void bta_gattc_fail(tBTA_GATTC_CLCB *p_clcb, * Returns void * ******************************************************************************/ -static void bta_gattc_deregister_cmpl(tBTA_GATTC_RCB *p_clreg) -{ - tBTA_GATTC_IF client_if = p_clreg->client_if; - tBTA_GATTC cb_data; - tBTA_GATTC_CBACK *p_cback = p_clreg->p_cback; +static void bta_gattc_deregister_cmpl(tBTA_GATTC_RCB* p_clreg) { + tBTA_GATTC_IF client_if = p_clreg->client_if; + tBTA_GATTC cb_data; + tBTA_GATTC_CBACK* p_cback = p_clreg->p_cback; - memset(&cb_data, 0, sizeof(tBTA_GATTC)); + memset(&cb_data, 0, sizeof(tBTA_GATTC)); - GATT_Deregister(p_clreg->client_if); - memset(p_clreg, 0, sizeof(tBTA_GATTC_RCB)); + GATT_Deregister(p_clreg->client_if); + memset(p_clreg, 0, sizeof(tBTA_GATTC_RCB)); - cb_data.reg_oper.client_if = client_if; - cb_data.reg_oper.status = BTA_GATT_OK; + cb_data.reg_oper.client_if = client_if; + cb_data.reg_oper.status = BTA_GATT_OK; - if (p_cback) - /* callback with de-register event */ - (*p_cback)(BTA_GATTC_DEREG_EVT, (tBTA_GATTC *)&cb_data); + if (p_cback) /* callback with de-register event */ + (*p_cback)(BTA_GATTC_DEREG_EVT, (tBTA_GATTC*)&cb_data); - if (bta_gattc_num_reg_app() == 0 && bta_gattc_cb.state == BTA_GATTC_STATE_DISABLING) - { - bta_gattc_cb.state = BTA_GATTC_STATE_DISABLED; - } + if (bta_gattc_num_reg_app() == 0 && + bta_gattc_cb.state == BTA_GATTC_STATE_DISABLING) { + bta_gattc_cb.state = BTA_GATTC_STATE_DISABLED; + } } /******************************************************************************* * @@ -1496,34 +1345,34 @@ static void bta_gattc_deregister_cmpl(tBTA_GATTC_RCB *p_clreg) * Returns void * ******************************************************************************/ -static void bta_gattc_conn_cback(tGATT_IF gattc_if, BD_ADDR bda, uint16_t conn_id, - bool connected, tGATT_DISCONN_REASON reason, - tBT_TRANSPORT transport) -{ - if (reason != 0) { - APPL_TRACE_WARNING("%s() - cif=%d connected=%d conn_id=%d reason=0x%04x", - __func__, gattc_if, connected, conn_id, reason); - } - - bt_bdaddr_t bdaddr; - bdcpy(bdaddr.address, bda); - if (connected) - btif_debug_conn_state(bdaddr, BTIF_DEBUG_CONNECTED, GATT_CONN_UNKNOWN); - else - btif_debug_conn_state(bdaddr, BTIF_DEBUG_DISCONNECTED, reason); - - tBTA_GATTC_DATA *p_buf = - (tBTA_GATTC_DATA *)osi_calloc(sizeof(tBTA_GATTC_DATA)); - p_buf->int_conn.hdr.event = connected ? BTA_GATTC_INT_CONN_EVT : - BTA_GATTC_INT_DISCONN_EVT; - p_buf->int_conn.hdr.layer_specific = conn_id; - p_buf->int_conn.client_if = gattc_if; - p_buf->int_conn.role = L2CA_GetBleConnRole(bda); - p_buf->int_conn.reason = reason; - p_buf->int_conn.transport = transport; - bdcpy(p_buf->int_conn.remote_bda, bda); - - bta_sys_sendmsg(p_buf); +static void bta_gattc_conn_cback(tGATT_IF gattc_if, BD_ADDR bda, + uint16_t conn_id, bool connected, + tGATT_DISCONN_REASON reason, + tBT_TRANSPORT transport) { + if (reason != 0) { + APPL_TRACE_WARNING("%s() - cif=%d connected=%d conn_id=%d reason=0x%04x", + __func__, gattc_if, connected, conn_id, reason); + } + + bt_bdaddr_t bdaddr; + bdcpy(bdaddr.address, bda); + if (connected) + btif_debug_conn_state(bdaddr, BTIF_DEBUG_CONNECTED, GATT_CONN_UNKNOWN); + else + btif_debug_conn_state(bdaddr, BTIF_DEBUG_DISCONNECTED, reason); + + tBTA_GATTC_DATA* p_buf = + (tBTA_GATTC_DATA*)osi_calloc(sizeof(tBTA_GATTC_DATA)); + p_buf->int_conn.hdr.event = + connected ? BTA_GATTC_INT_CONN_EVT : BTA_GATTC_INT_DISCONN_EVT; + p_buf->int_conn.hdr.layer_specific = conn_id; + p_buf->int_conn.client_if = gattc_if; + p_buf->int_conn.role = L2CA_GetBleConnRole(bda); + p_buf->int_conn.reason = reason; + p_buf->int_conn.transport = transport; + bdcpy(p_buf->int_conn.remote_bda, bda); + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -1535,81 +1384,73 @@ static void bta_gattc_conn_cback(tGATT_IF gattc_if, BD_ADDR bda, uint16_t conn_i * Returns void * ******************************************************************************/ -static void bta_gattc_enc_cmpl_cback(tGATT_IF gattc_if, BD_ADDR bda) -{ - tBTA_GATTC_CLCB *p_clcb = - bta_gattc_find_clcb_by_cif(gattc_if, bda, BTA_GATT_TRANSPORT_LE); +static void bta_gattc_enc_cmpl_cback(tGATT_IF gattc_if, BD_ADDR bda) { + tBTA_GATTC_CLCB* p_clcb = + bta_gattc_find_clcb_by_cif(gattc_if, bda, BTA_GATT_TRANSPORT_LE); - if (p_clcb == NULL) - return; + if (p_clcb == NULL) return; #if (BTA_HH_LE_INCLUDED == TRUE) - /* filter this event just for BTA HH LE GATT client, - In the future, if we want to enable encryption complete event - for all GATT clients, we can remove this code */ - if (!bta_hh_le_is_hh_gatt_if(gattc_if)) - { - return; - } + /* filter this event just for BTA HH LE GATT client, + In the future, if we want to enable encryption complete event + for all GATT clients, we can remove this code */ + if (!bta_hh_le_is_hh_gatt_if(gattc_if)) { + return; + } #endif - APPL_TRACE_DEBUG("%s: cif = %d", __func__, gattc_if); + APPL_TRACE_DEBUG("%s: cif = %d", __func__, gattc_if); - tBTA_GATTC_DATA *p_buf = - (tBTA_GATTC_DATA *)osi_calloc(sizeof(tBTA_GATTC_DATA)); - p_buf->enc_cmpl.hdr.event = BTA_GATTC_ENC_CMPL_EVT; - p_buf->enc_cmpl.hdr.layer_specific = p_clcb->bta_conn_id; - p_buf->enc_cmpl.client_if = gattc_if; - bdcpy(p_buf->enc_cmpl.remote_bda, bda); + tBTA_GATTC_DATA* p_buf = + (tBTA_GATTC_DATA*)osi_calloc(sizeof(tBTA_GATTC_DATA)); + p_buf->enc_cmpl.hdr.event = BTA_GATTC_ENC_CMPL_EVT; + p_buf->enc_cmpl.hdr.layer_specific = p_clcb->bta_conn_id; + p_buf->enc_cmpl.client_if = gattc_if; + bdcpy(p_buf->enc_cmpl.remote_bda, bda); - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function bta_gattc_process_api_refresh * - * Description process refresh API to delete cache and start a new discovery + * Description process refresh API to delete cache and start a new + *discovery * if currently connected. * * Returns None. * ******************************************************************************/ -void bta_gattc_process_api_refresh(tBTA_GATTC_DATA * p_msg) -{ - tBTA_GATTC_SERV *p_srvc_cb = bta_gattc_find_srvr_cache(p_msg->api_conn.remote_bda); - tBTA_GATTC_CLCB *p_clcb = &bta_gattc_cb.clcb[0]; - bool found = false; - uint8_t i; - - if (p_srvc_cb != NULL) - { - /* try to find a CLCB */ - if (p_srvc_cb->connected && p_srvc_cb->num_clcb != 0) - { - for (i = 0; i < BTA_GATTC_CLCB_MAX; i ++, p_clcb ++) - { - if (p_clcb->in_use && p_clcb->p_srcb == p_srvc_cb) - { - found = true; - break; - } - } - if (found) - { - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); - return; - } - } - /* in all other cases, mark it and delete the cache */ - if (p_srvc_cb->p_srvc_cache != NULL) { - list_free(p_srvc_cb->p_srvc_cache); - p_srvc_cb->p_srvc_cache = NULL; +void bta_gattc_process_api_refresh(tBTA_GATTC_DATA* p_msg) { + tBTA_GATTC_SERV* p_srvc_cb = + bta_gattc_find_srvr_cache(p_msg->api_conn.remote_bda); + tBTA_GATTC_CLCB* p_clcb = &bta_gattc_cb.clcb[0]; + bool found = false; + uint8_t i; + + if (p_srvc_cb != NULL) { + /* try to find a CLCB */ + if (p_srvc_cb->connected && p_srvc_cb->num_clcb != 0) { + for (i = 0; i < BTA_GATTC_CLCB_MAX; i++, p_clcb++) { + if (p_clcb->in_use && p_clcb->p_srcb == p_srvc_cb) { + found = true; + break; } + } + if (found) { + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); + return; + } } - /* used to reset cache in application */ - bta_gattc_cache_reset(p_msg->api_conn.remote_bda); - + /* in all other cases, mark it and delete the cache */ + if (p_srvc_cb->p_srvc_cache != NULL) { + list_free(p_srvc_cb->p_srvc_cache); + p_srvc_cb->p_srvc_cache = NULL; + } + } + /* used to reset cache in application */ + bta_gattc_cache_reset(p_msg->api_conn.remote_bda); } /******************************************************************************* * @@ -1620,79 +1461,74 @@ void bta_gattc_process_api_refresh(tBTA_GATTC_DATA * p_msg) * Returns None. * ******************************************************************************/ -bool bta_gattc_process_srvc_chg_ind(uint16_t conn_id, - tBTA_GATTC_RCB *p_clrcb, - tBTA_GATTC_SERV *p_srcb, - tBTA_GATTC_CLCB *p_clcb, - tBTA_GATTC_NOTIFY *p_notify, - tGATT_VALUE *att_value) -{ - tBT_UUID gattp_uuid, srvc_chg_uuid; - bool processed = false; - uint8_t i; - - gattp_uuid.len = 2; - gattp_uuid.uu.uuid16 = UUID_SERVCLASS_GATT_SERVER; - - srvc_chg_uuid.len = 2; - srvc_chg_uuid.uu.uuid16 = GATT_UUID_GATT_SRV_CHGD; - - const tBTA_GATTC_CHARACTERISTIC *p_char = bta_gattc_get_characteristic_srcb(p_srcb, p_notify->handle); - if (p_char && bta_gattc_uuid_compare(&p_char->service->uuid, &gattp_uuid, true) && - bta_gattc_uuid_compare(&p_char->uuid, &srvc_chg_uuid, true)) - { - if (att_value->len != BTA_GATTC_SERVICE_CHANGED_LEN) { - APPL_TRACE_ERROR("%s: received malformed service changed indication, skipping", __func__); - return false; - } - - uint8_t *p = att_value->value; - uint16_t s_handle = ((uint16_t)(*(p )) + (((uint16_t)(*(p + 1))) << 8)); - uint16_t e_handle = ((uint16_t)(*(p + 2)) + (((uint16_t)(*(p + 3))) << 8)); - - APPL_TRACE_ERROR("%s: service changed s_handle:0x%04x e_handle:0x%04x", - __func__, s_handle, e_handle); - - processed = true; - /* mark service handle change pending */ - p_srcb->srvc_hdl_chg = true; - /* clear up all notification/indication registration */ - bta_gattc_clear_notif_registration(p_srcb, conn_id, s_handle, e_handle); - /* service change indication all received, do discovery update */ - if ( ++ p_srcb->update_count == bta_gattc_num_reg_app()) - { - /* not an opened connection; or connection busy */ - /* search for first available clcb and start discovery */ - if (p_clcb == NULL || (p_clcb && p_clcb->p_q_cmd != NULL)) - { - for (i = 0 ; i < BTA_GATTC_CLCB_MAX; i ++) - { - if (bta_gattc_cb.clcb[i].in_use && - bta_gattc_cb.clcb[i].p_srcb == p_srcb && - bta_gattc_cb.clcb[i].p_q_cmd == NULL) - { - p_clcb = &bta_gattc_cb.clcb[i]; - break; - } - } - } - /* send confirmation here if this is an indication, it should always be */ - GATTC_SendHandleValueConfirm(conn_id, att_value->handle); - - /* if connection available, refresh cache by doing discovery now */ - if (p_clcb != NULL) - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); - } - /* notify applicationf or service change */ - if (p_clrcb->p_cback != NULL) - { - (* p_clrcb->p_cback)(BTA_GATTC_SRVC_CHG_EVT, (tBTA_GATTC *)p_srcb->server_bda); +bool bta_gattc_process_srvc_chg_ind(uint16_t conn_id, tBTA_GATTC_RCB* p_clrcb, + tBTA_GATTC_SERV* p_srcb, + tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_NOTIFY* p_notify, + tGATT_VALUE* att_value) { + tBT_UUID gattp_uuid, srvc_chg_uuid; + bool processed = false; + uint8_t i; + + gattp_uuid.len = 2; + gattp_uuid.uu.uuid16 = UUID_SERVCLASS_GATT_SERVER; + + srvc_chg_uuid.len = 2; + srvc_chg_uuid.uu.uuid16 = GATT_UUID_GATT_SRV_CHGD; + + const tBTA_GATTC_CHARACTERISTIC* p_char = + bta_gattc_get_characteristic_srcb(p_srcb, p_notify->handle); + if (p_char && + bta_gattc_uuid_compare(&p_char->service->uuid, &gattp_uuid, true) && + bta_gattc_uuid_compare(&p_char->uuid, &srvc_chg_uuid, true)) { + if (att_value->len != BTA_GATTC_SERVICE_CHANGED_LEN) { + APPL_TRACE_ERROR( + "%s: received malformed service changed indication, skipping", + __func__); + return false; + } + + uint8_t* p = att_value->value; + uint16_t s_handle = ((uint16_t)(*(p)) + (((uint16_t)(*(p + 1))) << 8)); + uint16_t e_handle = ((uint16_t)(*(p + 2)) + (((uint16_t)(*(p + 3))) << 8)); + + APPL_TRACE_ERROR("%s: service changed s_handle:0x%04x e_handle:0x%04x", + __func__, s_handle, e_handle); + + processed = true; + /* mark service handle change pending */ + p_srcb->srvc_hdl_chg = true; + /* clear up all notification/indication registration */ + bta_gattc_clear_notif_registration(p_srcb, conn_id, s_handle, e_handle); + /* service change indication all received, do discovery update */ + if (++p_srcb->update_count == bta_gattc_num_reg_app()) { + /* not an opened connection; or connection busy */ + /* search for first available clcb and start discovery */ + if (p_clcb == NULL || (p_clcb && p_clcb->p_q_cmd != NULL)) { + for (i = 0; i < BTA_GATTC_CLCB_MAX; i++) { + if (bta_gattc_cb.clcb[i].in_use && + bta_gattc_cb.clcb[i].p_srcb == p_srcb && + bta_gattc_cb.clcb[i].p_q_cmd == NULL) { + p_clcb = &bta_gattc_cb.clcb[i]; + break; + } } + } + /* send confirmation here if this is an indication, it should always be */ + GATTC_SendHandleValueConfirm(conn_id, att_value->handle); + /* if connection available, refresh cache by doing discovery now */ + if (p_clcb != NULL) + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); } + /* notify applicationf or service change */ + if (p_clrcb->p_cback != NULL) { + (*p_clrcb->p_cback)(BTA_GATTC_SRVC_CHG_EVT, + (tBTA_GATTC*)p_srcb->server_bda); + } + } - return processed; - + return processed; } /******************************************************************************* * @@ -1703,24 +1539,23 @@ bool bta_gattc_process_srvc_chg_ind(uint16_t conn_id, * Returns None. * ******************************************************************************/ -void bta_gattc_proc_other_indication(tBTA_GATTC_CLCB *p_clcb, uint8_t op, - tGATT_CL_COMPLETE *p_data, - tBTA_GATTC_NOTIFY *p_notify) -{ - APPL_TRACE_DEBUG("bta_gattc_proc_other_indication check \ +void bta_gattc_proc_other_indication(tBTA_GATTC_CLCB* p_clcb, uint8_t op, + tGATT_CL_COMPLETE* p_data, + tBTA_GATTC_NOTIFY* p_notify) { + APPL_TRACE_DEBUG( + "bta_gattc_proc_other_indication check \ p_data->att_value.handle=%d p_data->handle=%d", - p_data->att_value.handle, p_data->handle); - APPL_TRACE_DEBUG("is_notify", p_notify->is_notify); - - p_notify->is_notify = (op == GATTC_OPTYPE_INDICATION) ? false : true; - p_notify->len = p_data->att_value.len; - bdcpy(p_notify->bda, p_clcb->bda); - memcpy(p_notify->value, p_data->att_value.value, p_data->att_value.len); - p_notify->conn_id = p_clcb->bta_conn_id; + p_data->att_value.handle, p_data->handle); + APPL_TRACE_DEBUG("is_notify", p_notify->is_notify); - if (p_clcb->p_rcb->p_cback) - (*p_clcb->p_rcb->p_cback)(BTA_GATTC_NOTIF_EVT, (tBTA_GATTC *)p_notify); + p_notify->is_notify = (op == GATTC_OPTYPE_INDICATION) ? false : true; + p_notify->len = p_data->att_value.len; + bdcpy(p_notify->bda, p_clcb->bda); + memcpy(p_notify->value, p_data->att_value.value, p_data->att_value.len); + p_notify->conn_id = p_clcb->bta_conn_id; + if (p_clcb->p_rcb->p_cback) + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_NOTIF_EVT, (tBTA_GATTC*)p_notify); } /******************************************************************************* * @@ -1731,76 +1566,71 @@ void bta_gattc_proc_other_indication(tBTA_GATTC_CLCB *p_clcb, uint8_t op, * Returns None. * ******************************************************************************/ -void bta_gattc_process_indicate(uint16_t conn_id, tGATTC_OPTYPE op, tGATT_CL_COMPLETE *p_data) -{ - uint16_t handle = p_data->att_value.handle; - tBTA_GATTC_CLCB *p_clcb ; - tBTA_GATTC_RCB *p_clrcb = NULL; - tBTA_GATTC_SERV *p_srcb = NULL; - tBTA_GATTC_NOTIFY notify; - BD_ADDR remote_bda; - tBTA_GATTC_IF gatt_if; - tBTA_TRANSPORT transport; - - if (!GATT_GetConnectionInfor(conn_id, &gatt_if, remote_bda, &transport)) - { - APPL_TRACE_ERROR("%s indication/notif for unknown app", __func__); - if (op == GATTC_OPTYPE_INDICATION) - GATTC_SendHandleValueConfirm(conn_id, handle); - return; - } +void bta_gattc_process_indicate(uint16_t conn_id, tGATTC_OPTYPE op, + tGATT_CL_COMPLETE* p_data) { + uint16_t handle = p_data->att_value.handle; + tBTA_GATTC_CLCB* p_clcb; + tBTA_GATTC_RCB* p_clrcb = NULL; + tBTA_GATTC_SERV* p_srcb = NULL; + tBTA_GATTC_NOTIFY notify; + BD_ADDR remote_bda; + tBTA_GATTC_IF gatt_if; + tBTA_TRANSPORT transport; + + if (!GATT_GetConnectionInfor(conn_id, &gatt_if, remote_bda, &transport)) { + APPL_TRACE_ERROR("%s indication/notif for unknown app", __func__); + if (op == GATTC_OPTYPE_INDICATION) + GATTC_SendHandleValueConfirm(conn_id, handle); + return; + } + + if ((p_clrcb = bta_gattc_cl_get_regcb(gatt_if)) == NULL) { + APPL_TRACE_ERROR("%s indication/notif for unregistered app", __func__); + if (op == GATTC_OPTYPE_INDICATION) + GATTC_SendHandleValueConfirm(conn_id, handle); + return; + } + + if ((p_srcb = bta_gattc_find_srcb(remote_bda)) == NULL) { + APPL_TRACE_ERROR("%s indication/notif for unknown device, ignore", + __func__); + if (op == GATTC_OPTYPE_INDICATION) + GATTC_SendHandleValueConfirm(conn_id, handle); + return; + } + + p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); + + notify.handle = handle; + /* if non-service change indication/notification, forward to application */ + if (!bta_gattc_process_srvc_chg_ind(conn_id, p_clrcb, p_srcb, p_clcb, ¬ify, + &p_data->att_value)) { + /* if app registered for the notification */ + if (bta_gattc_check_notif_registry(p_clrcb, p_srcb, ¬ify)) { + /* connection not open yet */ + if (p_clcb == NULL) { + p_clcb = bta_gattc_clcb_alloc(gatt_if, remote_bda, transport); + + if (p_clcb == NULL) { + APPL_TRACE_ERROR("No resources"); + return; + } - if ((p_clrcb = bta_gattc_cl_get_regcb(gatt_if)) == NULL) - { - APPL_TRACE_ERROR("%s indication/notif for unregistered app", __func__); - if (op == GATTC_OPTYPE_INDICATION) - GATTC_SendHandleValueConfirm(conn_id, handle); - return; - } + p_clcb->bta_conn_id = conn_id; + p_clcb->transport = transport; - if ((p_srcb = bta_gattc_find_srcb(remote_bda)) == NULL) - { - APPL_TRACE_ERROR("%s indication/notif for unknown device, ignore", __func__); - if (op == GATTC_OPTYPE_INDICATION) - GATTC_SendHandleValueConfirm(conn_id, handle); - return; - } + bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, NULL); + } - p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - - notify.handle = handle; - /* if non-service change indication/notification, forward to application */ - if (!bta_gattc_process_srvc_chg_ind(conn_id, p_clrcb, p_srcb, p_clcb, ¬ify, &p_data->att_value)) - { - /* if app registered for the notification */ - if (bta_gattc_check_notif_registry(p_clrcb, p_srcb, ¬ify)) - { - /* connection not open yet */ - if (p_clcb == NULL) - { - p_clcb = bta_gattc_clcb_alloc(gatt_if, remote_bda, transport); - - if (p_clcb == NULL) { - APPL_TRACE_ERROR("No resources"); - return; - } - - p_clcb->bta_conn_id = conn_id; - p_clcb->transport = transport; - - bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, NULL); - } - - if (p_clcb != NULL) - bta_gattc_proc_other_indication(p_clcb, op, p_data, ¬ify); - } - /* no one intersted and need ack? */ - else if (op == GATTC_OPTYPE_INDICATION) - { - APPL_TRACE_DEBUG("%s no one interested, ack now", __func__); - GATTC_SendHandleValueConfirm(conn_id, handle); - } + if (p_clcb != NULL) + bta_gattc_proc_other_indication(p_clcb, op, p_data, ¬ify); } + /* no one intersted and need ack? */ + else if (op == GATTC_OPTYPE_INDICATION) { + APPL_TRACE_DEBUG("%s no one interested, ack now", __func__); + GATTC_SendHandleValueConfirm(conn_id, handle); + } + } } /******************************************************************************* * @@ -1811,34 +1641,32 @@ void bta_gattc_process_indicate(uint16_t conn_id, tGATTC_OPTYPE op, tGATT_CL_COM * Returns None. * ******************************************************************************/ -static void bta_gattc_cmpl_cback(uint16_t conn_id, tGATTC_OPTYPE op, tGATT_STATUS status, - tGATT_CL_COMPLETE *p_data) -{ - tBTA_GATTC_CLCB *p_clcb; - APPL_TRACE_DEBUG("bta_gattc_cmpl_cback: conn_id = %d op = %d status = %d", - conn_id, op, status); - - /* notification and indication processed right away */ - if (op == GATTC_OPTYPE_NOTIFICATION || op == GATTC_OPTYPE_INDICATION) - { - bta_gattc_process_indicate(conn_id, op, p_data); - return; - } - /* for all other operation, not expected if w/o connection */ - else if ((p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id)) == NULL) - { - APPL_TRACE_ERROR("bta_gattc_cmpl_cback unknown conn_id = %d, ignore data", conn_id); - return; - } - - /* if over BR_EDR, inform PM for mode change */ - if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) - { - bta_sys_busy(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); - bta_sys_idle(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); - } - - bta_gattc_cmpl_sendmsg(conn_id, op, status, p_data); +static void bta_gattc_cmpl_cback(uint16_t conn_id, tGATTC_OPTYPE op, + tGATT_STATUS status, + tGATT_CL_COMPLETE* p_data) { + tBTA_GATTC_CLCB* p_clcb; + APPL_TRACE_DEBUG("bta_gattc_cmpl_cback: conn_id = %d op = %d status = %d", + conn_id, op, status); + + /* notification and indication processed right away */ + if (op == GATTC_OPTYPE_NOTIFICATION || op == GATTC_OPTYPE_INDICATION) { + bta_gattc_process_indicate(conn_id, op, p_data); + return; + } + /* for all other operation, not expected if w/o connection */ + else if ((p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id)) == NULL) { + APPL_TRACE_ERROR("bta_gattc_cmpl_cback unknown conn_id = %d, ignore data", + conn_id); + return; + } + + /* if over BR_EDR, inform PM for mode change */ + if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) { + bta_sys_busy(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); + bta_sys_idle(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); + } + + bta_gattc_cmpl_sendmsg(conn_id, op, status, p_data); } /******************************************************************************* @@ -1852,22 +1680,21 @@ static void bta_gattc_cmpl_cback(uint16_t conn_id, tGATTC_OPTYPE op, tGATT_STAT ******************************************************************************/ static void bta_gattc_cmpl_sendmsg(uint16_t conn_id, tGATTC_OPTYPE op, tBTA_GATT_STATUS status, - tGATT_CL_COMPLETE *p_data) -{ - const size_t len = sizeof(tBTA_GATTC_OP_CMPL) + sizeof(tGATT_CL_COMPLETE); - tBTA_GATTC_OP_CMPL *p_buf = (tBTA_GATTC_OP_CMPL *)osi_calloc(len); - - p_buf->hdr.event = BTA_GATTC_OP_CMPL_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->status = status; - p_buf->op_code = op; - - if (p_data != NULL) { - p_buf->p_cmpl = (tGATT_CL_COMPLETE *)(p_buf + 1); - memcpy(p_buf->p_cmpl, p_data, sizeof(tGATT_CL_COMPLETE)); - } + tGATT_CL_COMPLETE* p_data) { + const size_t len = sizeof(tBTA_GATTC_OP_CMPL) + sizeof(tGATT_CL_COMPLETE); + tBTA_GATTC_OP_CMPL* p_buf = (tBTA_GATTC_OP_CMPL*)osi_calloc(len); - bta_sys_sendmsg(p_buf); + p_buf->hdr.event = BTA_GATTC_OP_CMPL_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->status = status; + p_buf->op_code = op; + + if (p_data != NULL) { + p_buf->p_cmpl = (tGATT_CL_COMPLETE*)(p_buf + 1); + memcpy(p_buf->p_cmpl, p_data, sizeof(tGATT_CL_COMPLETE)); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -1879,20 +1706,17 @@ static void bta_gattc_cmpl_sendmsg(uint16_t conn_id, tGATTC_OPTYPE op, * Returns void * *******************************************************************************/ -static void bta_gattc_cong_cback (uint16_t conn_id, bool congested) -{ - tBTA_GATTC_CLCB *p_clcb; - tBTA_GATTC cb_data; - - if ((p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id)) != NULL) - { - if (p_clcb->p_rcb->p_cback) - { - cb_data.congest.conn_id = conn_id; - cb_data.congest.congested = congested; - - (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CONGEST_EVT, &cb_data); - } +static void bta_gattc_cong_cback(uint16_t conn_id, bool congested) { + tBTA_GATTC_CLCB* p_clcb; + tBTA_GATTC cb_data; + + if ((p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id)) != NULL) { + if (p_clcb->p_rcb->p_cback) { + cb_data.congest.conn_id = conn_id; + cb_data.congest.congested = congested; + + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CONGEST_EVT, &cb_data); } + } } -#endif // BTA_GATT_INCLUDED == TRUE && BLE_INCLUDED == TRUE +#endif // BTA_GATT_INCLUDED == TRUE && BLE_INCLUDED == TRUE diff --git a/system/bta/gatt/bta_gattc_api.cc b/system/bta/gatt/bta_gattc_api.cc index 226ea1c12be..f29090528bc 100644 --- a/system/bta/gatt/bta_gattc_api.cc +++ b/system/bta/gatt/bta_gattc_api.cc @@ -30,20 +30,16 @@ #include #include "bt_common.h" -#include "bta_sys.h" #include "bta_gatt_api.h" #include "bta_gattc_int.h" +#include "bta_sys.h" /***************************************************************************** * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_gattc_reg = -{ - bta_gattc_hdl_event, - BTA_GATTC_Disable -}; - +static const tBTA_SYS_REG bta_gattc_reg = {bta_gattc_hdl_event, + BTA_GATTC_Disable}; /******************************************************************************* * @@ -56,19 +52,17 @@ static const tBTA_SYS_REG bta_gattc_reg = * Returns None * ******************************************************************************/ -void BTA_GATTC_Disable(void) -{ - if (bta_sys_is_register(BTA_ID_GATTC) == false) - { - APPL_TRACE_WARNING("GATTC Module not enabled/already disabled"); - return; - } +void BTA_GATTC_Disable(void) { + if (bta_sys_is_register(BTA_ID_GATTC) == false) { + APPL_TRACE_WARNING("GATTC Module not enabled/already disabled"); + return; + } - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_GATTC_API_DISABLE_EVT; + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->event = BTA_GATTC_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); - bta_sys_deregister(BTA_ID_GATTC); + bta_sys_sendmsg(p_buf); + bta_sys_deregister(BTA_ID_GATTC); } /******************************************************************************* @@ -84,20 +78,20 @@ void BTA_GATTC_Disable(void) * Returns None * ******************************************************************************/ -void BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb) -{ - tBTA_GATTC_API_REG *p_buf = - (tBTA_GATTC_API_REG *)osi_malloc(sizeof(tBTA_GATTC_API_REG)); +void BTA_GATTC_AppRegister(tBT_UUID* p_app_uuid, + tBTA_GATTC_CBACK* p_client_cb) { + tBTA_GATTC_API_REG* p_buf = + (tBTA_GATTC_API_REG*)osi_malloc(sizeof(tBTA_GATTC_API_REG)); - if (bta_sys_is_register(BTA_ID_GATTC) == false) - bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg); + if (bta_sys_is_register(BTA_ID_GATTC) == false) + bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg); - p_buf->hdr.event = BTA_GATTC_API_REG_EVT; - if (p_app_uuid != NULL) - memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID)); - p_buf->p_cback = p_client_cb; + p_buf->hdr.event = BTA_GATTC_API_REG_EVT; + if (p_app_uuid != NULL) + memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID)); + p_buf->p_cback = p_client_cb; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -112,15 +106,14 @@ void BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb) * Returns None * ******************************************************************************/ -void BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if) -{ - tBTA_GATTC_API_DEREG *p_buf = - (tBTA_GATTC_API_DEREG *)osi_malloc(sizeof(tBTA_GATTC_API_DEREG)); +void BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if) { + tBTA_GATTC_API_DEREG* p_buf = + (tBTA_GATTC_API_DEREG*)osi_malloc(sizeof(tBTA_GATTC_API_DEREG)); - p_buf->hdr.event = BTA_GATTC_API_DEREG_EVT; - p_buf->client_if = client_if; + p_buf->hdr.event = BTA_GATTC_API_DEREG_EVT; + p_buf->client_if = client_if; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -133,31 +126,32 @@ void BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if) * Parameters client_if: server interface. * remote_bda: remote device BD address. * is_direct: direct connection or background auto connection - * transport: Transport to be used for GATT connection (BREDR/LE) + * transport: Transport to be used for GATT connection + *(BREDR/LE) * * Returns void * ******************************************************************************/ -void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, - bool is_direct, tBTA_GATT_TRANSPORT transport) -{ - tBTA_GATTC_API_OPEN *p_buf = - (tBTA_GATTC_API_OPEN *) osi_malloc(sizeof(tBTA_GATTC_API_OPEN)); - - p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT; - p_buf->client_if = client_if; - p_buf->is_direct = is_direct; - p_buf->transport = transport; - memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); - - bta_sys_sendmsg(p_buf); +void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, bool is_direct, + tBTA_GATT_TRANSPORT transport) { + tBTA_GATTC_API_OPEN* p_buf = + (tBTA_GATTC_API_OPEN*)osi_malloc(sizeof(tBTA_GATTC_API_OPEN)); + + p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT; + p_buf->client_if = client_if; + p_buf->is_direct = is_direct; + p_buf->transport = transport; + memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); + + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_GATTC_CancelOpen * - * Description Cancel a direct open connection or remove a background auto connection + * Description Cancel a direct open connection or remove a background auto + *connection * bd address * * Parameters client_if: server interface. @@ -167,17 +161,17 @@ void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, * Returns void * ******************************************************************************/ -void BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, bool is_direct) -{ - tBTA_GATTC_API_CANCEL_OPEN *p_buf = - (tBTA_GATTC_API_CANCEL_OPEN *)osi_malloc(sizeof(tBTA_GATTC_API_CANCEL_OPEN)); +void BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, + bool is_direct) { + tBTA_GATTC_API_CANCEL_OPEN* p_buf = (tBTA_GATTC_API_CANCEL_OPEN*)osi_malloc( + sizeof(tBTA_GATTC_API_CANCEL_OPEN)); - p_buf->hdr.event = BTA_GATTC_API_CANCEL_OPEN_EVT; - p_buf->client_if = client_if; - p_buf->is_direct = is_direct; - memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); + p_buf->hdr.event = BTA_GATTC_API_CANCEL_OPEN_EVT; + p_buf->client_if = client_if; + p_buf->is_direct = is_direct; + memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -191,14 +185,13 @@ void BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, bool is_d * Returns void * ******************************************************************************/ -void BTA_GATTC_Close(uint16_t conn_id) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_GATTC_Close(uint16_t conn_id) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_GATTC_API_CLOSE_EVT; - p_buf->layer_specific = conn_id; + p_buf->event = BTA_GATTC_API_CLOSE_EVT; + p_buf->layer_specific = conn_id; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -214,16 +207,15 @@ void BTA_GATTC_Close(uint16_t conn_id) * Returns void * ******************************************************************************/ -void BTA_GATTC_ConfigureMTU (uint16_t conn_id, uint16_t mtu) -{ - tBTA_GATTC_API_CFG_MTU *p_buf = - (tBTA_GATTC_API_CFG_MTU *)osi_malloc(sizeof(tBTA_GATTC_API_CFG_MTU)); +void BTA_GATTC_ConfigureMTU(uint16_t conn_id, uint16_t mtu) { + tBTA_GATTC_API_CFG_MTU* p_buf = + (tBTA_GATTC_API_CFG_MTU*)osi_malloc(sizeof(tBTA_GATTC_API_CFG_MTU)); - p_buf->hdr.event = BTA_GATTC_API_CFG_MTU_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->mtu = mtu; + p_buf->hdr.event = BTA_GATTC_API_CFG_MTU_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->mtu = mtu; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -231,39 +223,42 @@ void BTA_GATTC_ConfigureMTU (uint16_t conn_id, uint16_t mtu) * Function BTA_GATTC_ServiceSearchRequest * * Description This function is called to request a GATT service discovery - * on a GATT server. This function report service search result - * by a callback event, and followed by a service search complete + * on a GATT server. This function report service search + *result + * by a callback event, and followed by a service search + *complete * event. * * Parameters conn_id: connection ID. - * p_srvc_uuid: a UUID of the service application is interested in. + * p_srvc_uuid: a UUID of the service application is interested + *in. * If Null, discover for all services. * * Returns None * ******************************************************************************/ -void BTA_GATTC_ServiceSearchRequest (uint16_t conn_id, tBT_UUID *p_srvc_uuid) -{ - const size_t len = sizeof(tBTA_GATTC_API_SEARCH) + sizeof(tBT_UUID); - tBTA_GATTC_API_SEARCH *p_buf = (tBTA_GATTC_API_SEARCH *)osi_calloc(len); - - p_buf->hdr.event = BTA_GATTC_API_SEARCH_EVT; - p_buf->hdr.layer_specific = conn_id; - if (p_srvc_uuid) { - p_buf->p_srvc_uuid = (tBT_UUID *)(p_buf + 1); - memcpy(p_buf->p_srvc_uuid, p_srvc_uuid, sizeof(tBT_UUID)); - } else { - p_buf->p_srvc_uuid = NULL; - } - - bta_sys_sendmsg(p_buf); +void BTA_GATTC_ServiceSearchRequest(uint16_t conn_id, tBT_UUID* p_srvc_uuid) { + const size_t len = sizeof(tBTA_GATTC_API_SEARCH) + sizeof(tBT_UUID); + tBTA_GATTC_API_SEARCH* p_buf = (tBTA_GATTC_API_SEARCH*)osi_calloc(len); + + p_buf->hdr.event = BTA_GATTC_API_SEARCH_EVT; + p_buf->hdr.layer_specific = conn_id; + if (p_srvc_uuid) { + p_buf->p_srvc_uuid = (tBT_UUID*)(p_buf + 1); + memcpy(p_buf->p_srvc_uuid, p_srvc_uuid, sizeof(tBT_UUID)); + } else { + p_buf->p_srvc_uuid = NULL; + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_GATTC_GetServices * - * Description This function is called to find the services on the given server. + * Description This function is called to find the services on the given + *server. * * Parameters conn_id: connection ID which identify the server. * @@ -271,14 +266,15 @@ void BTA_GATTC_ServiceSearchRequest (uint16_t conn_id, tBT_UUID *p_srvc_uuid) * ******************************************************************************/ const list_t* BTA_GATTC_GetServices(uint16_t conn_id) { - return bta_gattc_get_services(conn_id); + return bta_gattc_get_services(conn_id); } /******************************************************************************* * * Function BTA_GATTC_GetCharacteristic * - * Description This function is called to find the characteristic on the given server. + * Description This function is called to find the characteristic on the + *given server. * * Parameters conn_id - connection ID which identify the server. * handle - characteristic handle @@ -286,15 +282,17 @@ const list_t* BTA_GATTC_GetServices(uint16_t conn_id) { * Returns returns pointer to tBTA_GATTC_CHARACTERISTIC or NULL. * ******************************************************************************/ -const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t conn_id, uint16_t handle) { - return bta_gattc_get_characteristic(conn_id, handle); +const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t conn_id, + uint16_t handle) { + return bta_gattc_get_characteristic(conn_id, handle); } /******************************************************************************* * * Function BTA_GATTC_GetDescriptor * - * Description This function is called to find the characteristic on the given server. + * Description This function is called to find the characteristic on the + *given server. * * Parameters conn_id - connection ID which identify the server. * handle - descriptor handle @@ -302,8 +300,9 @@ const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t conn_id, u * Returns returns pointer to tBTA_GATTC_DESCRIPTOR or NULL. * ******************************************************************************/ -const tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, uint16_t handle) { - return bta_gattc_get_descriptor(conn_id, handle); +const tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, + uint16_t handle) { + return bta_gattc_get_descriptor(conn_id, handle); } /******************************************************************************* @@ -313,15 +312,16 @@ const tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, uint16_t * Description This function is called to get the GATT database. * * Parameters conn_id: connection ID which identify the server. - * db: output parameter which will contain the GATT database copy. + * db: output parameter which will contain the GATT database + *copy. * Caller is responsible for freeing it. * count: number of elements in database. * ******************************************************************************/ -void BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, - btgatt_db_element_t **db, int *count) -{ - bta_gattc_get_gatt_db(conn_id, start_handle, end_handle, db, count); +void BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, + uint16_t end_handle, btgatt_db_element_t** db, + int* count) { + bta_gattc_get_gatt_db(conn_id, start_handle, end_handle, db, count); } /******************************************************************************* @@ -336,20 +336,20 @@ void BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, uint16_t end_ * Returns None * ******************************************************************************/ -void BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, tBTA_GATT_AUTH_REQ auth_req, - GATT_READ_OP_CB callback, void* cb_data) -{ - tBTA_GATTC_API_READ *p_buf = - (tBTA_GATTC_API_READ *)osi_calloc(sizeof(tBTA_GATTC_API_READ)); - - p_buf->hdr.event = BTA_GATTC_API_READ_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->auth_req = auth_req; - p_buf->handle = handle; - p_buf->read_cb = callback; - p_buf->read_cb_data = cb_data; - - bta_sys_sendmsg(p_buf); +void BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, + tBTA_GATT_AUTH_REQ auth_req, + GATT_READ_OP_CB callback, void* cb_data) { + tBTA_GATTC_API_READ* p_buf = + (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); + + p_buf->hdr.event = BTA_GATTC_API_READ_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->auth_req = auth_req; + p_buf->handle = handle; + p_buf->read_cb = callback; + p_buf->read_cb_data = cb_data; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -364,20 +364,20 @@ void BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, tBTA_GATT_A * Returns None * ******************************************************************************/ -void BTA_GATTC_ReadCharDescr(uint16_t conn_id, uint16_t handle, tBTA_GATT_AUTH_REQ auth_req, - GATT_READ_OP_CB callback, void* cb_data) -{ - tBTA_GATTC_API_READ *p_buf = - (tBTA_GATTC_API_READ *)osi_calloc(sizeof(tBTA_GATTC_API_READ)); - - p_buf->hdr.event = BTA_GATTC_API_READ_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->auth_req = auth_req; - p_buf->handle = handle; - p_buf->read_cb = callback; - p_buf->read_cb_data = cb_data; - - bta_sys_sendmsg(p_buf); +void BTA_GATTC_ReadCharDescr(uint16_t conn_id, uint16_t handle, + tBTA_GATT_AUTH_REQ auth_req, + GATT_READ_OP_CB callback, void* cb_data) { + tBTA_GATTC_API_READ* p_buf = + (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); + + p_buf->hdr.event = BTA_GATTC_API_READ_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->auth_req = auth_req; + p_buf->handle = handle; + p_buf->read_cb = callback; + p_buf->read_cb_data = cb_data; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -393,21 +393,21 @@ void BTA_GATTC_ReadCharDescr(uint16_t conn_id, uint16_t handle, tBTA_GATT_AUTH_R * Returns None * ******************************************************************************/ -void BTA_GATTC_ReadMultiple(uint16_t conn_id, tBTA_GATTC_MULTI *p_read_multi, - tBTA_GATT_AUTH_REQ auth_req) -{ - tBTA_GATTC_API_READ_MULTI *p_buf = - (tBTA_GATTC_API_READ_MULTI *)osi_calloc(sizeof(tBTA_GATTC_API_READ_MULTI)); +void BTA_GATTC_ReadMultiple(uint16_t conn_id, tBTA_GATTC_MULTI* p_read_multi, + tBTA_GATT_AUTH_REQ auth_req) { + tBTA_GATTC_API_READ_MULTI* p_buf = + (tBTA_GATTC_API_READ_MULTI*)osi_calloc(sizeof(tBTA_GATTC_API_READ_MULTI)); - p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->auth_req = auth_req; - p_buf->num_attr = p_read_multi->num_attr; + p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->auth_req = auth_req; + p_buf->num_attr = p_read_multi->num_attr; - if (p_buf->num_attr > 0) - memcpy(p_buf->handles, p_read_multi->handles, sizeof(uint16_t) * p_read_multi->num_attr); + if (p_buf->num_attr > 0) + memcpy(p_buf->handles, p_read_multi->handles, + sizeof(uint16_t) * p_read_multi->num_attr); - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -424,32 +424,29 @@ void BTA_GATTC_ReadMultiple(uint16_t conn_id, tBTA_GATTC_MULTI *p_read_multi, * Returns None * ******************************************************************************/ -void BTA_GATTC_WriteCharValue ( uint16_t conn_id, - uint16_t handle, - tBTA_GATTC_WRITE_TYPE write_type, - std::vector value, - tBTA_GATT_AUTH_REQ auth_req, - GATT_WRITE_OP_CB callback, - void* cb_data) -{ - tBTA_GATTC_API_WRITE *p_buf = (tBTA_GATTC_API_WRITE *) - osi_calloc(sizeof(tBTA_GATTC_API_WRITE) + value.size()); - - p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->auth_req = auth_req; - p_buf->handle = handle; - p_buf->write_type = write_type; - p_buf->len = value.size(); - p_buf->write_cb = callback; - p_buf->write_cb_data = cb_data; - - if (value.size() > 0) { - p_buf->p_value = (uint8_t *)(p_buf + 1); - memcpy(p_buf->p_value, value.data(), value.size()); - } - - bta_sys_sendmsg(p_buf); +void BTA_GATTC_WriteCharValue(uint16_t conn_id, uint16_t handle, + tBTA_GATTC_WRITE_TYPE write_type, + std::vector value, + tBTA_GATT_AUTH_REQ auth_req, + GATT_WRITE_OP_CB callback, void* cb_data) { + tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( + sizeof(tBTA_GATTC_API_WRITE) + value.size()); + + p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->auth_req = auth_req; + p_buf->handle = handle; + p_buf->write_type = write_type; + p_buf->len = value.size(); + p_buf->write_cb = callback; + p_buf->write_cb_data = cb_data; + + if (value.size() > 0) { + p_buf->p_value = (uint8_t*)(p_buf + 1); + memcpy(p_buf->p_value, value.data(), value.size()); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -465,38 +462,36 @@ void BTA_GATTC_WriteCharValue ( uint16_t conn_id, * Returns None * ******************************************************************************/ -void BTA_GATTC_WriteCharDescr (uint16_t conn_id, - uint16_t handle, - std::vector value, - tBTA_GATT_AUTH_REQ auth_req, - GATT_WRITE_OP_CB callback, - void* cb_data) -{ - tBTA_GATTC_API_WRITE *p_buf = (tBTA_GATTC_API_WRITE *) - osi_calloc(sizeof(tBTA_GATTC_API_WRITE) + value.size()); - - p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->auth_req = auth_req; - p_buf->handle = handle; - p_buf->write_type = BTA_GATTC_TYPE_WRITE; - p_buf->write_cb = callback; - p_buf->write_cb_data = cb_data; - - if (value.size() != 0) { - p_buf->p_value = (uint8_t *)(p_buf + 1); - p_buf->len = value.size(); - memcpy(p_buf->p_value, value.data(), value.size()); - } +void BTA_GATTC_WriteCharDescr(uint16_t conn_id, uint16_t handle, + std::vector value, + tBTA_GATT_AUTH_REQ auth_req, + GATT_WRITE_OP_CB callback, void* cb_data) { + tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( + sizeof(tBTA_GATTC_API_WRITE) + value.size()); + + p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->auth_req = auth_req; + p_buf->handle = handle; + p_buf->write_type = BTA_GATTC_TYPE_WRITE; + p_buf->write_cb = callback; + p_buf->write_cb_data = cb_data; + + if (value.size() != 0) { + p_buf->p_value = (uint8_t*)(p_buf + 1); + p_buf->len = value.size(); + memcpy(p_buf->p_value, value.data(), value.size()); + } - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_GATTC_PrepareWrite * - * Description This function is called to prepare write a characteristic value. + * Description This function is called to prepare write a characteristic + *value. * * Parameters conn_id - connection ID. * p_char_id - GATT characteritic ID of the service. @@ -506,38 +501,38 @@ void BTA_GATTC_WriteCharDescr (uint16_t conn_id, * Returns None * ******************************************************************************/ -void BTA_GATTC_PrepareWrite (uint16_t conn_id, uint16_t handle, uint16_t offset, - std::vector value, - tBTA_GATT_AUTH_REQ auth_req, - GATT_WRITE_OP_CB callback, void* cb_data) -{ - tBTA_GATTC_API_WRITE *p_buf = - (tBTA_GATTC_API_WRITE *)osi_calloc(sizeof(tBTA_GATTC_API_WRITE) + value.size()); - - p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->auth_req = auth_req; - p_buf->handle = handle; - p_buf->write_cb = callback; - p_buf->write_cb_data = cb_data; - - p_buf->write_type = BTA_GATTC_WRITE_PREPARE; - p_buf->offset = offset; - p_buf->len = value.size(); - - if (value.size() > 0) { - p_buf->p_value = (uint8_t *)(p_buf + 1); - memcpy(p_buf->p_value, value.data(), value.size()); - } - - bta_sys_sendmsg(p_buf); +void BTA_GATTC_PrepareWrite(uint16_t conn_id, uint16_t handle, uint16_t offset, + std::vector value, + tBTA_GATT_AUTH_REQ auth_req, + GATT_WRITE_OP_CB callback, void* cb_data) { + tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( + sizeof(tBTA_GATTC_API_WRITE) + value.size()); + + p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->auth_req = auth_req; + p_buf->handle = handle; + p_buf->write_cb = callback; + p_buf->write_cb_data = cb_data; + + p_buf->write_type = BTA_GATTC_WRITE_PREPARE; + p_buf->offset = offset; + p_buf->len = value.size(); + + if (value.size() > 0) { + p_buf->p_value = (uint8_t*)(p_buf + 1); + memcpy(p_buf->p_value, value.data(), value.size()); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_GATTC_ExecuteWrite * - * Description This function is called to execute write a prepare write sequence. + * Description This function is called to execute write a prepare write + *sequence. * * Parameters conn_id - connection ID. * is_execute - execute or cancel. @@ -545,16 +540,15 @@ void BTA_GATTC_PrepareWrite (uint16_t conn_id, uint16_t handle, uint16_t offset * Returns None * ******************************************************************************/ -void BTA_GATTC_ExecuteWrite (uint16_t conn_id, bool is_execute) -{ - tBTA_GATTC_API_EXEC *p_buf = - (tBTA_GATTC_API_EXEC *)osi_calloc(sizeof(tBTA_GATTC_API_EXEC)); +void BTA_GATTC_ExecuteWrite(uint16_t conn_id, bool is_execute) { + tBTA_GATTC_API_EXEC* p_buf = + (tBTA_GATTC_API_EXEC*)osi_calloc(sizeof(tBTA_GATTC_API_EXEC)); - p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->is_execute = is_execute; + p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->is_execute = is_execute; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -569,25 +563,25 @@ void BTA_GATTC_ExecuteWrite (uint16_t conn_id, bool is_execute) * Returns None * ******************************************************************************/ -void BTA_GATTC_SendIndConfirm (uint16_t conn_id, uint16_t handle) -{ - tBTA_GATTC_API_CONFIRM *p_buf = - (tBTA_GATTC_API_CONFIRM *)osi_calloc(sizeof(tBTA_GATTC_API_CONFIRM)); +void BTA_GATTC_SendIndConfirm(uint16_t conn_id, uint16_t handle) { + tBTA_GATTC_API_CONFIRM* p_buf = + (tBTA_GATTC_API_CONFIRM*)osi_calloc(sizeof(tBTA_GATTC_API_CONFIRM)); - APPL_TRACE_API("%s conn_id=%d handle=0x%04x", __func__, conn_id, handle); + APPL_TRACE_API("%s conn_id=%d handle=0x%04x", __func__, conn_id, handle); - p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->handle = handle; + p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->handle = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_GATTC_RegisterForNotifications * - * Description This function is called to register for notification of a service. + * Description This function is called to register for notification of a + *service. * * Parameters client_if - client interface. * bda - target GATT server. @@ -596,68 +590,60 @@ void BTA_GATTC_SendIndConfirm (uint16_t conn_id, uint16_t handle) * Returns OK if registration succeed, otherwise failed. * ******************************************************************************/ -tBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF client_if, - const BD_ADDR bda, uint16_t handle) -{ - tBTA_GATTC_RCB *p_clreg; - tBTA_GATT_STATUS status = BTA_GATT_ILLEGAL_PARAMETER; - uint8_t i; - - if (!handle) - { - APPL_TRACE_ERROR("deregistration failed, handle is 0"); - return status; +tBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications(tBTA_GATTC_IF client_if, + const BD_ADDR bda, + uint16_t handle) { + tBTA_GATTC_RCB* p_clreg; + tBTA_GATT_STATUS status = BTA_GATT_ILLEGAL_PARAMETER; + uint8_t i; + + if (!handle) { + APPL_TRACE_ERROR("deregistration failed, handle is 0"); + return status; + } + + if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL) { + for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { + if (p_clreg->notif_reg[i].in_use && + !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) && + p_clreg->notif_reg[i].handle == handle) { + APPL_TRACE_WARNING("notification already registered"); + status = BTA_GATT_OK; + break; + } } - - if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL) - { - for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++) - { - if ( p_clreg->notif_reg[i].in_use && - !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) && - p_clreg->notif_reg[i].handle == handle) - { - APPL_TRACE_WARNING("notification already registered"); - status = BTA_GATT_OK; - break; - } + if (status != BTA_GATT_OK) { + for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { + if (!p_clreg->notif_reg[i].in_use) { + memset((void*)&p_clreg->notif_reg[i], 0, + sizeof(tBTA_GATTC_NOTIF_REG)); + + p_clreg->notif_reg[i].in_use = true; + memcpy(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN); + + p_clreg->notif_reg[i].handle = handle; + status = BTA_GATT_OK; + break; } - if (status != BTA_GATT_OK) - { - for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++) - { - if (!p_clreg->notif_reg[i].in_use) - { - memset((void *)&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG)); - - p_clreg->notif_reg[i].in_use = true; - memcpy(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN); - - p_clreg->notif_reg[i].handle = handle; - status = BTA_GATT_OK; - break; - } - } - if (i == BTA_GATTC_NOTIF_REG_MAX) - { - status = BTA_GATT_NO_RESOURCES; - APPL_TRACE_ERROR("Max Notification Reached, registration failed."); - } - } - } - else - { - APPL_TRACE_ERROR("Client_if: %d Not Registered", client_if); + } + if (i == BTA_GATTC_NOTIF_REG_MAX) { + status = BTA_GATT_NO_RESOURCES; + APPL_TRACE_ERROR("Max Notification Reached, registration failed."); + } } + } else { + APPL_TRACE_ERROR("Client_if: %d Not Registered", client_if); + } - return status; + return status; } /******************************************************************************* * * Function BTA_GATTC_DeregisterForNotifications * - * Description This function is called to de-register for notification of a servbice. + * Description This function is called to de-register for notification of a + *servbice. * * Parameters client_if - client interface. * remote_bda - target GATT server. @@ -666,35 +652,38 @@ tBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF client_if, * Returns OK if deregistration succeed, otherwise failed. * ******************************************************************************/ -tBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF client_if, - const BD_ADDR bda, uint16_t handle) -{ - if (!handle) { - APPL_TRACE_ERROR("%s: deregistration failed, handle is 0", __func__); - return BTA_GATT_ILLEGAL_PARAMETER; - } - - tBTA_GATTC_RCB *p_clreg = bta_gattc_cl_get_regcb(client_if); - if (p_clreg == NULL) { - APPL_TRACE_ERROR("%s client_if: %d not registered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", - __func__, client_if, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); - return BTA_GATT_ILLEGAL_PARAMETER; - } - - for (int i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i ++) { - if (p_clreg->notif_reg[i].in_use && - !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) && - p_clreg->notif_reg[i].handle == handle) { - APPL_TRACE_DEBUG("%s deregistered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", - __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); - memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG)); - return BTA_GATT_OK; - } +tBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications(tBTA_GATTC_IF client_if, + const BD_ADDR bda, + uint16_t handle) { + if (!handle) { + APPL_TRACE_ERROR("%s: deregistration failed, handle is 0", __func__); + return BTA_GATT_ILLEGAL_PARAMETER; + } + + tBTA_GATTC_RCB* p_clreg = bta_gattc_cl_get_regcb(client_if); + if (p_clreg == NULL) { + APPL_TRACE_ERROR( + "%s client_if: %d not registered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", + __func__, client_if, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); + return BTA_GATT_ILLEGAL_PARAMETER; + } + + for (int i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { + if (p_clreg->notif_reg[i].in_use && + !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) && + p_clreg->notif_reg[i].handle == handle) { + APPL_TRACE_DEBUG("%s deregistered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", + __func__, bda[0], bda[1], bda[2], bda[3], bda[4], + bda[5]); + memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG)); + return BTA_GATT_OK; } + } - APPL_TRACE_ERROR("%s registration not found bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", - __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); - return BTA_GATT_ERROR; + APPL_TRACE_ERROR( + "%s registration not found bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", + __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); + return BTA_GATT_ERROR; } /******************************************************************************* @@ -708,15 +697,14 @@ tBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF client_if, * Returns void * ******************************************************************************/ -void BTA_GATTC_Refresh(const BD_ADDR remote_bda) -{ - tBTA_GATTC_API_OPEN *p_buf = - (tBTA_GATTC_API_OPEN *)osi_malloc(sizeof(tBTA_GATTC_API_OPEN)); +void BTA_GATTC_Refresh(const BD_ADDR remote_bda) { + tBTA_GATTC_API_OPEN* p_buf = + (tBTA_GATTC_API_OPEN*)osi_malloc(sizeof(tBTA_GATTC_API_OPEN)); - p_buf->hdr.event = BTA_GATTC_API_REFRESH_EVT; - memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); + p_buf->hdr.event = BTA_GATTC_API_REFRESH_EVT; + memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } #endif /* BTA_GATT_INCLUDED */ diff --git a/system/bta/gatt/bta_gattc_cache.cc b/system/bta/gatt/bta_gattc_cache.cc index b4530bc3d26..31280c53112 100644 --- a/system/bta/gatt/bta_gattc_cache.cc +++ b/system/bta/gatt/bta_gattc_cache.cc @@ -34,78 +34,80 @@ #include #include +#include "bt_common.h" #include "bta_gattc_int.h" #include "bta_sys.h" #include "btm_api.h" #include "btm_ble_api.h" #include "btm_int.h" -#include "bt_common.h" #include "osi/include/log.h" #include "osi/include/osi.h" #include "sdp_api.h" #include "sdpdefs.h" #include "utl.h" -static void bta_gattc_cache_write(BD_ADDR server_bda, uint16_t num_attr, tBTA_GATTC_NV_ATTR *attr); -static void bta_gattc_char_dscpt_disc_cmpl(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb); -static tBTA_GATT_STATUS bta_gattc_sdp_service_disc(uint16_t conn_id, tBTA_GATTC_SERV *p_server_cb); -extern void bta_to_btif_uuid(bt_uuid_t *p_dest, tBT_UUID *p_src); -tBTA_GATTC_SERVICE* bta_gattc_find_matching_service(const list_t *services, uint16_t handle); -tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor_srcb(tBTA_GATTC_SERV *p_srcb, uint16_t handle); -tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic_srcb(tBTA_GATTC_SERV *p_srcb, uint16_t handle); +static void bta_gattc_cache_write(BD_ADDR server_bda, uint16_t num_attr, + tBTA_GATTC_NV_ATTR* attr); +static void bta_gattc_char_dscpt_disc_cmpl(uint16_t conn_id, + tBTA_GATTC_SERV* p_srvc_cb); +static tBTA_GATT_STATUS bta_gattc_sdp_service_disc( + uint16_t conn_id, tBTA_GATTC_SERV* p_server_cb); +extern void bta_to_btif_uuid(bt_uuid_t* p_dest, tBT_UUID* p_src); +tBTA_GATTC_SERVICE* bta_gattc_find_matching_service(const list_t* services, + uint16_t handle); +tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor_srcb(tBTA_GATTC_SERV* p_srcb, + uint16_t handle); +tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic_srcb( + tBTA_GATTC_SERV* p_srcb, uint16_t handle); #define BTA_GATT_SDP_DB_SIZE 4096 #define GATT_CACHE_PREFIX "/data/misc/bluetooth/gatt_cache_" #define GATT_CACHE_VERSION 2 -static void bta_gattc_generate_cache_file_name(char *buffer, - size_t buffer_len, BD_ADDR bda) -{ - snprintf(buffer, buffer_len, "%s%02x%02x%02x%02x%02x%02x", GATT_CACHE_PREFIX, - bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); +static void bta_gattc_generate_cache_file_name(char* buffer, size_t buffer_len, + BD_ADDR bda) { + snprintf(buffer, buffer_len, "%s%02x%02x%02x%02x%02x%02x", GATT_CACHE_PREFIX, + bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); } /***************************************************************************** * Constants and data types ****************************************************************************/ -typedef struct -{ - tSDP_DISCOVERY_DB *p_sdp_db; - uint16_t sdp_conn_id; +typedef struct { + tSDP_DISCOVERY_DB* p_sdp_db; + uint16_t sdp_conn_id; } tBTA_GATTC_CB_DATA; #if (BTA_GATT_DEBUG == TRUE) -static char *bta_gattc_attr_type[] = -{ +static char* bta_gattc_attr_type[] = { "I", /* Included Service */ "C", /* Characteristic */ - "D" /* Characteristic Descriptor */ + "D" /* Characteristic Descriptor */ }; /* utility functions */ -bool display_cache_attribute(void *data, void *context) { - tBTA_GATTC_CACHE_ATTR *p_attr = data; - APPL_TRACE_ERROR("\t Attr handle[%d] uuid[0x%04x] type[%s] prop[0x%1x]", - p_attr->handle, p_attr->uuid.uu.uuid16, - bta_gattc_attr_type[p_attr->attr_type], p_attr->property); - return true; +bool display_cache_attribute(void* data, void* context) { + tBTA_GATTC_CACHE_ATTR* p_attr = data; + APPL_TRACE_ERROR("\t Attr handle[%d] uuid[0x%04x] type[%s] prop[0x%1x]", + p_attr->handle, p_attr->uuid.uu.uuid16, + bta_gattc_attr_type[p_attr->attr_type], p_attr->property); + return true; } -bool display_cache_service(void *data, void *context) { - tBTA_GATTC_SERVICE *p_cur_srvc = data; - APPL_TRACE_ERROR("Service: handle[%d ~ %d] %s[0x%04x] inst[%d]", - p_cur_srvc->s_handle, p_cur_srvc->e_handle, - ((p_cur_srvc->uuid.len == 2) ? "uuid16" : "uuid128"), - p_cur_srvc->uuid.uu.uuid16, - p_cur_srvc->handle); +bool display_cache_service(void* data, void* context) { + tBTA_GATTC_SERVICE* p_cur_srvc = data; + APPL_TRACE_ERROR("Service: handle[%d ~ %d] %s[0x%04x] inst[%d]", + p_cur_srvc->s_handle, p_cur_srvc->e_handle, + ((p_cur_srvc->uuid.len == 2) ? "uuid16" : "uuid128"), + p_cur_srvc->uuid.uu.uuid16, p_cur_srvc->handle); - if (p_cur_srvc->characteristics != NULL) { - list_foreach(p_cur_srvc->characteristics, display_cache_attribute, NULL); - } + if (p_cur_srvc->characteristics != NULL) { + list_foreach(p_cur_srvc->characteristics, display_cache_attribute, NULL); + } - return true; + return true; } /******************************************************************************* @@ -117,12 +119,11 @@ bool display_cache_service(void *data, void *context) { * Returns none. * ******************************************************************************/ -static void bta_gattc_display_cache_server(list_t *p_cache) -{ - APPL_TRACE_ERROR("<================Start Server Cache =============>"); - list_foreach(p_cache, display_cache_service, NULL); - APPL_TRACE_ERROR("<================End Server Cache =============>"); - APPL_TRACE_ERROR(" "); +static void bta_gattc_display_cache_server(list_t* p_cache) { + APPL_TRACE_ERROR("<================Start Server Cache =============>"); + list_foreach(p_cache, display_cache_service, NULL); + APPL_TRACE_ERROR("<================End Server Cache =============>"); + APPL_TRACE_ERROR(" "); } /******************************************************************************* @@ -134,58 +135,57 @@ static void bta_gattc_display_cache_server(list_t *p_cache) * Returns none. * ******************************************************************************/ -static void bta_gattc_display_explore_record(tBTA_GATTC_ATTR_REC *p_rec, uint8_t num_rec) -{ - uint8_t i; - tBTA_GATTC_ATTR_REC *pp = p_rec; - - APPL_TRACE_ERROR("<================Start Explore Queue =============>"); - for (i = 0; i < num_rec; i ++, pp ++) - { - APPL_TRACE_ERROR("\t rec[%d] uuid[0x%04x] s_handle[%d] e_handle[%d] is_primary[%d]", - i + 1, pp->uuid.uu.uuid16, pp->s_handle, pp->e_handle, pp->is_primary); - } - APPL_TRACE_ERROR("<================ End Explore Queue =============>"); - APPL_TRACE_ERROR(" "); - +static void bta_gattc_display_explore_record(tBTA_GATTC_ATTR_REC* p_rec, + uint8_t num_rec) { + uint8_t i; + tBTA_GATTC_ATTR_REC* pp = p_rec; + + APPL_TRACE_ERROR("<================Start Explore Queue =============>"); + for (i = 0; i < num_rec; i++, pp++) { + APPL_TRACE_ERROR( + "\t rec[%d] uuid[0x%04x] s_handle[%d] e_handle[%d] is_primary[%d]", + i + 1, pp->uuid.uu.uuid16, pp->s_handle, pp->e_handle, pp->is_primary); + } + APPL_TRACE_ERROR("<================ End Explore Queue =============>"); + APPL_TRACE_ERROR(" "); } -#endif /* BTA_GATT_DEBUG == TRUE */ +#endif /* BTA_GATT_DEBUG == TRUE */ /******************************************************************************* * * Function bta_gattc_init_cache * - * Description Initialize the database cache and discovery related resources. + * Description Initialize the database cache and discovery related + *resources. * * Returns status * ******************************************************************************/ -tBTA_GATT_STATUS bta_gattc_init_cache(tBTA_GATTC_SERV *p_srvc_cb) -{ - if (p_srvc_cb->p_srvc_cache != NULL) { - list_free(p_srvc_cb->p_srvc_cache); - p_srvc_cb->p_srvc_cache = NULL; - } +tBTA_GATT_STATUS bta_gattc_init_cache(tBTA_GATTC_SERV* p_srvc_cb) { + if (p_srvc_cb->p_srvc_cache != NULL) { + list_free(p_srvc_cb->p_srvc_cache); + p_srvc_cb->p_srvc_cache = NULL; + } - osi_free(p_srvc_cb->p_srvc_list); - p_srvc_cb->p_srvc_list = - (tBTA_GATTC_ATTR_REC *)osi_malloc(BTA_GATTC_ATTR_LIST_SIZE); - p_srvc_cb->total_srvc = 0; - p_srvc_cb->cur_srvc_idx = 0; - p_srvc_cb->cur_char_idx = 0; - p_srvc_cb->next_avail_idx = 0; + osi_free(p_srvc_cb->p_srvc_list); + p_srvc_cb->p_srvc_list = + (tBTA_GATTC_ATTR_REC*)osi_malloc(BTA_GATTC_ATTR_LIST_SIZE); + p_srvc_cb->total_srvc = 0; + p_srvc_cb->cur_srvc_idx = 0; + p_srvc_cb->cur_char_idx = 0; + p_srvc_cb->next_avail_idx = 0; - return BTA_GATT_OK; + return BTA_GATT_OK; } -static void characteristic_free(void *ptr) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*)ptr; +static void characteristic_free(void* ptr) { + tBTA_GATTC_CHARACTERISTIC* p_char = (tBTA_GATTC_CHARACTERISTIC*)ptr; list_free(p_char->descriptors); osi_free(p_char); } -static void service_free(void *ptr) { - tBTA_GATTC_SERVICE *srvc = (tBTA_GATTC_SERVICE*)ptr; +static void service_free(void* ptr) { + tBTA_GATTC_SERVICE* srvc = (tBTA_GATTC_SERVICE*)ptr; list_free(srvc->characteristics); list_free(srvc->included_svc); osi_free(srvc); @@ -200,70 +200,72 @@ static void service_free(void *ptr) { * Returns status * ******************************************************************************/ -static tBTA_GATT_STATUS bta_gattc_add_srvc_to_cache(tBTA_GATTC_SERV *p_srvc_cb, - uint16_t s_handle, uint16_t e_handle, - tBT_UUID *p_uuid, - bool is_primary) -{ +static tBTA_GATT_STATUS bta_gattc_add_srvc_to_cache(tBTA_GATTC_SERV* p_srvc_cb, + uint16_t s_handle, + uint16_t e_handle, + tBT_UUID* p_uuid, + bool is_primary) { #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("Add a service into Service"); + APPL_TRACE_DEBUG("Add a service into Service"); #endif - tBTA_GATTC_SERVICE *p_new_srvc = (tBTA_GATTC_SERVICE*)osi_malloc(sizeof(tBTA_GATTC_SERVICE)); + tBTA_GATTC_SERVICE* p_new_srvc = + (tBTA_GATTC_SERVICE*)osi_malloc(sizeof(tBTA_GATTC_SERVICE)); - /* update service information */ - p_new_srvc->s_handle = s_handle; - p_new_srvc->e_handle = e_handle; - p_new_srvc->is_primary = is_primary; - memcpy(&p_new_srvc->uuid, p_uuid, sizeof(tBT_UUID)); - p_new_srvc->handle = s_handle; - p_new_srvc->characteristics = list_new(characteristic_free); - p_new_srvc->included_svc = list_new(osi_free); + /* update service information */ + p_new_srvc->s_handle = s_handle; + p_new_srvc->e_handle = e_handle; + p_new_srvc->is_primary = is_primary; + memcpy(&p_new_srvc->uuid, p_uuid, sizeof(tBT_UUID)); + p_new_srvc->handle = s_handle; + p_new_srvc->characteristics = list_new(characteristic_free); + p_new_srvc->included_svc = list_new(osi_free); - if (p_srvc_cb->p_srvc_cache == NULL) { - p_srvc_cb->p_srvc_cache = list_new(service_free); - } + if (p_srvc_cb->p_srvc_cache == NULL) { + p_srvc_cb->p_srvc_cache = list_new(service_free); + } - list_append(p_srvc_cb->p_srvc_cache, p_new_srvc); - return BTA_GATT_OK; + list_append(p_srvc_cb->p_srvc_cache, p_new_srvc); + return BTA_GATT_OK; } -static tBTA_GATT_STATUS bta_gattc_add_char_to_cache(tBTA_GATTC_SERV *p_srvc_cb, +static tBTA_GATT_STATUS bta_gattc_add_char_to_cache(tBTA_GATTC_SERV* p_srvc_cb, uint16_t attr_handle, uint16_t value_handle, - tBT_UUID *p_uuid, - uint8_t property) -{ + tBT_UUID* p_uuid, + uint8_t property) { #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s: Add a characteristic into Service", __func__); - APPL_TRACE_DEBUG("handle=%d uuid16=0x%x property=0x%x", - value_handle, p_uuid->uu.uuid16, property); + APPL_TRACE_DEBUG("%s: Add a characteristic into Service", __func__); + APPL_TRACE_DEBUG("handle=%d uuid16=0x%x property=0x%x", value_handle, + p_uuid->uu.uuid16, property); #endif - tBTA_GATTC_SERVICE *service = bta_gattc_find_matching_service(p_srvc_cb->p_srvc_cache, attr_handle); - if (!service) { - APPL_TRACE_ERROR("Illegal action to add char/descr/incl srvc for non-existing service!"); - return GATT_WRONG_STATE; - } + tBTA_GATTC_SERVICE* service = + bta_gattc_find_matching_service(p_srvc_cb->p_srvc_cache, attr_handle); + if (!service) { + APPL_TRACE_ERROR( + "Illegal action to add char/descr/incl srvc for non-existing service!"); + return GATT_WRONG_STATE; + } - /* TODO(jpawlowski): We should use attribute handle, not value handle to refer to characteristic. - This is just a temporary workaround. - */ - if (service->e_handle < value_handle) - service->e_handle = value_handle; + /* TODO(jpawlowski): We should use attribute handle, not value handle to refer + to characteristic. + This is just a temporary workaround. + */ + if (service->e_handle < value_handle) service->e_handle = value_handle; - tBTA_GATTC_CHARACTERISTIC *characteristic = (tBTA_GATTC_CHARACTERISTIC*) - osi_malloc(sizeof(tBTA_GATTC_CHARACTERISTIC)); + tBTA_GATTC_CHARACTERISTIC* characteristic = + (tBTA_GATTC_CHARACTERISTIC*)osi_malloc(sizeof(tBTA_GATTC_CHARACTERISTIC)); - characteristic->handle = value_handle; - characteristic->properties = property; - characteristic->descriptors = list_new(osi_free); - memcpy(&characteristic->uuid, p_uuid, sizeof(tBT_UUID)); + characteristic->handle = value_handle; + characteristic->properties = property; + characteristic->descriptors = list_new(osi_free); + memcpy(&characteristic->uuid, p_uuid, sizeof(tBT_UUID)); - characteristic->service = service; - list_append(service->characteristics, characteristic); + characteristic->service = service; + list_append(service->characteristics, characteristic); - return BTA_GATT_OK; + return BTA_GATT_OK; } /******************************************************************************* @@ -275,63 +277,65 @@ static tBTA_GATT_STATUS bta_gattc_add_char_to_cache(tBTA_GATTC_SERV *p_srvc_cb, * Returns status * ******************************************************************************/ -static tBTA_GATT_STATUS bta_gattc_add_attr_to_cache(tBTA_GATTC_SERV *p_srvc_cb, - uint16_t handle, - tBT_UUID *p_uuid, - uint8_t property, - uint16_t incl_srvc_s_handle, - tBTA_GATTC_ATTR_TYPE type) -{ +static tBTA_GATT_STATUS bta_gattc_add_attr_to_cache( + tBTA_GATTC_SERV* p_srvc_cb, uint16_t handle, tBT_UUID* p_uuid, + uint8_t property, uint16_t incl_srvc_s_handle, tBTA_GATTC_ATTR_TYPE type) { #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s: Add a [%s] into Service", __func__, bta_gattc_attr_type[type]); - APPL_TRACE_DEBUG("handle=%d uuid16=0x%x property=0x%x type=%d", - handle, p_uuid->uu.uuid16, property, type); + APPL_TRACE_DEBUG("%s: Add a [%s] into Service", __func__, + bta_gattc_attr_type[type]); + APPL_TRACE_DEBUG("handle=%d uuid16=0x%x property=0x%x type=%d", handle, + p_uuid->uu.uuid16, property, type); #endif - tBTA_GATTC_SERVICE *service = bta_gattc_find_matching_service(p_srvc_cb->p_srvc_cache, handle); - if (!service) { - APPL_TRACE_ERROR("Illegal action to add char/descr/incl srvc for non-existing service!"); - return GATT_WRONG_STATE; + tBTA_GATTC_SERVICE* service = + bta_gattc_find_matching_service(p_srvc_cb->p_srvc_cache, handle); + if (!service) { + APPL_TRACE_ERROR( + "Illegal action to add char/descr/incl srvc for non-existing service!"); + return GATT_WRONG_STATE; + } + + if (type == BTA_GATTC_ATTR_TYPE_INCL_SRVC) { + tBTA_GATTC_INCLUDED_SVC* isvc = + (tBTA_GATTC_INCLUDED_SVC*)osi_malloc(sizeof(tBTA_GATTC_INCLUDED_SVC)); + + isvc->handle = handle; + memcpy(&isvc->uuid, p_uuid, sizeof(tBT_UUID)); + + isvc->owning_service = service; + isvc->included_service = bta_gattc_find_matching_service( + p_srvc_cb->p_srvc_cache, incl_srvc_s_handle); + if (!isvc->included_service) { + APPL_TRACE_ERROR( + "%s: Illegal action to add non-existing included service!", __func__); + osi_free(isvc); + return GATT_WRONG_STATE; } - if (type == BTA_GATTC_ATTR_TYPE_INCL_SRVC) { - tBTA_GATTC_INCLUDED_SVC *isvc = (tBTA_GATTC_INCLUDED_SVC*) - osi_malloc(sizeof(tBTA_GATTC_INCLUDED_SVC)); - - isvc->handle = handle; - memcpy(&isvc->uuid, p_uuid, sizeof(tBT_UUID)); - - isvc->owning_service = service; - isvc->included_service = bta_gattc_find_matching_service( - p_srvc_cb->p_srvc_cache, incl_srvc_s_handle); - if (!isvc->included_service) { - APPL_TRACE_ERROR("%s: Illegal action to add non-existing included service!", __func__); - osi_free(isvc); - return GATT_WRONG_STATE; - } - - list_append(service->included_svc, isvc); - } else if (type == BTA_GATTC_ATTR_TYPE_CHAR_DESCR) { - tBTA_GATTC_DESCRIPTOR *descriptor = (tBTA_GATTC_DESCRIPTOR*) - osi_malloc(sizeof(tBTA_GATTC_DESCRIPTOR)); - - descriptor->handle = handle; - memcpy(&descriptor->uuid, p_uuid, sizeof(tBT_UUID)); - - if (service->characteristics == NULL) { - APPL_TRACE_ERROR("%s: Illegal action to add descriptor before adding a characteristic!", - __func__); - osi_free(descriptor); - return GATT_WRONG_STATE; - } + list_append(service->included_svc, isvc); + } else if (type == BTA_GATTC_ATTR_TYPE_CHAR_DESCR) { + tBTA_GATTC_DESCRIPTOR* descriptor = + (tBTA_GATTC_DESCRIPTOR*)osi_malloc(sizeof(tBTA_GATTC_DESCRIPTOR)); + + descriptor->handle = handle; + memcpy(&descriptor->uuid, p_uuid, sizeof(tBT_UUID)); + + if (service->characteristics == NULL) { + APPL_TRACE_ERROR( + "%s: Illegal action to add descriptor before adding a " + "characteristic!", + __func__); + osi_free(descriptor); + return GATT_WRONG_STATE; + } - tBTA_GATTC_CHARACTERISTIC *char_node = (tBTA_GATTC_CHARACTERISTIC*) - list_back(service->characteristics); + tBTA_GATTC_CHARACTERISTIC* char_node = + (tBTA_GATTC_CHARACTERISTIC*)list_back(service->characteristics); - descriptor->characteristic = char_node; - list_append(char_node->descriptors, descriptor); - } - return BTA_GATT_OK; + descriptor->characteristic = char_node; + list_append(char_node->descriptors, descriptor); + } + return BTA_GATT_OK; } /******************************************************************************* @@ -343,26 +347,24 @@ static tBTA_GATT_STATUS bta_gattc_add_attr_to_cache(tBTA_GATTC_SERV *p_srvc_cb, * Returns None. * ******************************************************************************/ -void bta_gattc_get_disc_range(tBTA_GATTC_SERV *p_srvc_cb, uint16_t *p_s_hdl, uint16_t *p_e_hdl, bool is_srvc) -{ - tBTA_GATTC_ATTR_REC *p_rec = NULL; - - if (is_srvc) - { - p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->cur_srvc_idx; - *p_s_hdl = p_rec->s_handle; - } - else - { - p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->cur_char_idx; - *p_s_hdl = p_rec->s_handle + 1; - } - - *p_e_hdl = p_rec->e_handle; +void bta_gattc_get_disc_range(tBTA_GATTC_SERV* p_srvc_cb, uint16_t* p_s_hdl, + uint16_t* p_e_hdl, bool is_srvc) { + tBTA_GATTC_ATTR_REC* p_rec = NULL; + + if (is_srvc) { + p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->cur_srvc_idx; + *p_s_hdl = p_rec->s_handle; + } else { + p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->cur_char_idx; + *p_s_hdl = p_rec->s_handle + 1; + } + + *p_e_hdl = p_rec->e_handle; #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("discover range [%d ~ %d]",p_rec->s_handle, p_rec->e_handle); + APPL_TRACE_DEBUG("discover range [%d ~ %d]", p_rec->s_handle, + p_rec->e_handle); #endif - return; + return; } /******************************************************************************* * @@ -373,21 +375,20 @@ void bta_gattc_get_disc_range(tBTA_GATTC_SERV *p_srvc_cb, uint16_t *p_s_hdl, uin * Returns status of the operation. * ******************************************************************************/ -tBTA_GATT_STATUS bta_gattc_discover_pri_service(uint16_t conn_id, tBTA_GATTC_SERV *p_server_cb, - uint8_t disc_type) -{ - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - tBTA_GATT_STATUS status = BTA_GATT_ERROR; - - if (p_clcb) - { - if (p_clcb->transport == BTA_TRANSPORT_LE) - status = bta_gattc_discover_procedure(conn_id, p_server_cb, disc_type); - else - status = bta_gattc_sdp_service_disc(conn_id, p_server_cb); - } +tBTA_GATT_STATUS bta_gattc_discover_pri_service(uint16_t conn_id, + tBTA_GATTC_SERV* p_server_cb, + uint8_t disc_type) { + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); + tBTA_GATT_STATUS status = BTA_GATT_ERROR; + + if (p_clcb) { + if (p_clcb->transport == BTA_TRANSPORT_LE) + status = bta_gattc_discover_procedure(conn_id, p_server_cb, disc_type); + else + status = bta_gattc_sdp_service_disc(conn_id, p_server_cb); + } - return status; + return status; } /******************************************************************************* * @@ -398,33 +399,28 @@ tBTA_GATT_STATUS bta_gattc_discover_pri_service(uint16_t conn_id, tBTA_GATTC_SER * Returns status of the operation. * ******************************************************************************/ -tBTA_GATT_STATUS bta_gattc_discover_procedure(uint16_t conn_id, tBTA_GATTC_SERV *p_server_cb, - uint8_t disc_type) -{ - tGATT_DISC_PARAM param; - bool is_service = true; - - memset(¶m, 0, sizeof(tGATT_DISC_PARAM)); - - if (disc_type == GATT_DISC_SRVC_ALL || disc_type == GATT_DISC_SRVC_BY_UUID) - { - param.s_handle = 1; - param.e_handle = 0xFFFF; - } - else - { - if (disc_type == GATT_DISC_CHAR_DSCPT) - is_service = false; +tBTA_GATT_STATUS bta_gattc_discover_procedure(uint16_t conn_id, + tBTA_GATTC_SERV* p_server_cb, + uint8_t disc_type) { + tGATT_DISC_PARAM param; + bool is_service = true; - bta_gattc_get_disc_range(p_server_cb, ¶m.s_handle, ¶m.e_handle, is_service); + memset(¶m, 0, sizeof(tGATT_DISC_PARAM)); - if (param.s_handle > param.e_handle) - { - return GATT_ERROR; - } - } - return GATTC_Discover (conn_id, disc_type, ¶m); + if (disc_type == GATT_DISC_SRVC_ALL || disc_type == GATT_DISC_SRVC_BY_UUID) { + param.s_handle = 1; + param.e_handle = 0xFFFF; + } else { + if (disc_type == GATT_DISC_CHAR_DSCPT) is_service = false; + + bta_gattc_get_disc_range(p_server_cb, ¶m.s_handle, ¶m.e_handle, + is_service); + if (param.s_handle > param.e_handle) { + return GATT_ERROR; + } + } + return GATTC_Discover(conn_id, disc_type, ¶m); } /******************************************************************************* * @@ -435,9 +431,9 @@ tBTA_GATT_STATUS bta_gattc_discover_procedure(uint16_t conn_id, tBTA_GATTC_SERV * Returns status of the operation. * ******************************************************************************/ -tBTA_GATT_STATUS bta_gattc_start_disc_include_srvc(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb) -{ - return bta_gattc_discover_procedure(conn_id, p_srvc_cb, GATT_DISC_INC_SRVC); +tBTA_GATT_STATUS bta_gattc_start_disc_include_srvc(uint16_t conn_id, + tBTA_GATTC_SERV* p_srvc_cb) { + return bta_gattc_discover_procedure(conn_id, p_srvc_cb, GATT_DISC_INC_SRVC); } /******************************************************************************* * @@ -448,11 +444,11 @@ tBTA_GATT_STATUS bta_gattc_start_disc_include_srvc(uint16_t conn_id, tBTA_GATTC_ * Returns status of the operation. * ******************************************************************************/ -tBTA_GATT_STATUS bta_gattc_start_disc_char(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb) -{ - p_srvc_cb->total_char = 0; +tBTA_GATT_STATUS bta_gattc_start_disc_char(uint16_t conn_id, + tBTA_GATTC_SERV* p_srvc_cb) { + p_srvc_cb->total_char = 0; - return bta_gattc_discover_procedure(conn_id, p_srvc_cb, GATT_DISC_CHAR); + return bta_gattc_discover_procedure(conn_id, p_srvc_cb, GATT_DISC_CHAR); } /******************************************************************************* * @@ -463,13 +459,13 @@ tBTA_GATT_STATUS bta_gattc_start_disc_char(uint16_t conn_id, tBTA_GATTC_SERV *p_ * Returns none. * ******************************************************************************/ -void bta_gattc_start_disc_char_dscp(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb) -{ - APPL_TRACE_DEBUG("starting discover characteristics descriptor"); - - if (bta_gattc_discover_procedure(conn_id, p_srvc_cb, GATT_DISC_CHAR_DSCPT) != 0) - bta_gattc_char_dscpt_disc_cmpl(conn_id, p_srvc_cb); +void bta_gattc_start_disc_char_dscp(uint16_t conn_id, + tBTA_GATTC_SERV* p_srvc_cb) { + APPL_TRACE_DEBUG("starting discover characteristics descriptor"); + if (bta_gattc_discover_procedure(conn_id, p_srvc_cb, GATT_DISC_CHAR_DSCPT) != + 0) + bta_gattc_char_dscpt_disc_cmpl(conn_id, p_srvc_cb); } /******************************************************************************* * @@ -480,49 +476,44 @@ void bta_gattc_start_disc_char_dscp(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb * Returns status * ******************************************************************************/ -static void bta_gattc_explore_srvc(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb) -{ - tBTA_GATTC_ATTR_REC *p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->cur_srvc_idx; - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); +static void bta_gattc_explore_srvc(uint16_t conn_id, + tBTA_GATTC_SERV* p_srvc_cb) { + tBTA_GATTC_ATTR_REC* p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->cur_srvc_idx; + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - APPL_TRACE_DEBUG("Start service discovery: srvc_idx = %d", p_srvc_cb->cur_srvc_idx); + APPL_TRACE_DEBUG("Start service discovery: srvc_idx = %d", + p_srvc_cb->cur_srvc_idx); - p_srvc_cb->cur_char_idx = p_srvc_cb->next_avail_idx = p_srvc_cb->total_srvc; + p_srvc_cb->cur_char_idx = p_srvc_cb->next_avail_idx = p_srvc_cb->total_srvc; - if (p_clcb == NULL) - { - APPL_TRACE_ERROR("unknown connection ID"); - return; - } - /* start expore a service if there is service not been explored */ - if (p_srvc_cb->cur_srvc_idx < p_srvc_cb->total_srvc) - { - /* add the first service into cache */ - if (bta_gattc_add_srvc_to_cache (p_srvc_cb, - p_rec->s_handle, - p_rec->e_handle, - &p_rec->uuid, - p_rec->is_primary) == 0) - { - /* start discovering included services */ - bta_gattc_start_disc_include_srvc(conn_id, p_srvc_cb); - return; - } + if (p_clcb == NULL) { + APPL_TRACE_ERROR("unknown connection ID"); + return; + } + /* start expore a service if there is service not been explored */ + if (p_srvc_cb->cur_srvc_idx < p_srvc_cb->total_srvc) { + /* add the first service into cache */ + if (bta_gattc_add_srvc_to_cache(p_srvc_cb, p_rec->s_handle, p_rec->e_handle, + &p_rec->uuid, p_rec->is_primary) == 0) { + /* start discovering included services */ + bta_gattc_start_disc_include_srvc(conn_id, p_srvc_cb); + return; } - /* no service found at all, the end of server discovery*/ - LOG_WARN(LOG_TAG, "%s no more services found", __func__); + } + /* no service found at all, the end of server discovery*/ + LOG_WARN(LOG_TAG, "%s no more services found", __func__); #if (BTA_GATT_DEBUG == TRUE) - bta_gattc_display_cache_server(p_srvc_cb->p_srvc_cache); + bta_gattc_display_cache_server(p_srvc_cb->p_srvc_cache); #endif - /* save cache to NV */ - p_clcb->p_srcb->state = BTA_GATTC_SERV_SAVE; + /* save cache to NV */ + p_clcb->p_srcb->state = BTA_GATTC_SERV_SAVE; - if (btm_sec_is_a_bonded_dev(p_srvc_cb->server_bda)) { - bta_gattc_cache_save(p_clcb->p_srcb, p_clcb->bta_conn_id); - } + if (btm_sec_is_a_bonded_dev(p_srvc_cb->server_bda)) { + bta_gattc_cache_save(p_clcb->p_srcb, p_clcb->bta_conn_id); + } - bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_OK); + bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_OK); } /******************************************************************************* * @@ -533,12 +524,12 @@ static void bta_gattc_explore_srvc(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb) * Returns status * ******************************************************************************/ -static void bta_gattc_incl_srvc_disc_cmpl(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb) -{ - p_srvc_cb->cur_char_idx = p_srvc_cb->total_srvc; +static void bta_gattc_incl_srvc_disc_cmpl(uint16_t conn_id, + tBTA_GATTC_SERV* p_srvc_cb) { + p_srvc_cb->cur_char_idx = p_srvc_cb->total_srvc; - /* start discoverying characteristic */ - bta_gattc_start_disc_char(conn_id, p_srvc_cb); + /* start discoverying characteristic */ + bta_gattc_start_disc_char(conn_id, p_srvc_cb); } /******************************************************************************* * @@ -549,29 +540,25 @@ static void bta_gattc_incl_srvc_disc_cmpl(uint16_t conn_id, tBTA_GATTC_SERV *p_s * Returns status * ******************************************************************************/ -static void bta_gattc_char_disc_cmpl(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb) -{ - tBTA_GATTC_ATTR_REC *p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->cur_char_idx; - - /* if there are characteristic needs to be explored */ - if (p_srvc_cb->total_char > 0) - { - /* add the first characteristic into cache */ - bta_gattc_add_char_to_cache (p_srvc_cb, - p_rec->char_decl_handle, - p_rec->s_handle, - &p_rec->uuid, - p_rec->property); - - /* start discoverying characteristic descriptor , if failed, disc for next char*/ - bta_gattc_start_disc_char_dscp(conn_id, p_srvc_cb); - } - else /* otherwise start with next service */ - { - p_srvc_cb->cur_srvc_idx ++; - - bta_gattc_explore_srvc (conn_id, p_srvc_cb); - } +static void bta_gattc_char_disc_cmpl(uint16_t conn_id, + tBTA_GATTC_SERV* p_srvc_cb) { + tBTA_GATTC_ATTR_REC* p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->cur_char_idx; + + /* if there are characteristic needs to be explored */ + if (p_srvc_cb->total_char > 0) { + /* add the first characteristic into cache */ + bta_gattc_add_char_to_cache(p_srvc_cb, p_rec->char_decl_handle, + p_rec->s_handle, &p_rec->uuid, p_rec->property); + + /* start discoverying characteristic descriptor , if failed, disc for next + * char*/ + bta_gattc_start_disc_char_dscp(conn_id, p_srvc_cb); + } else /* otherwise start with next service */ + { + p_srvc_cb->cur_srvc_idx++; + + bta_gattc_explore_srvc(conn_id, p_srvc_cb); + } } /******************************************************************************* * @@ -582,62 +569,52 @@ static void bta_gattc_char_disc_cmpl(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_c * Returns status * ******************************************************************************/ -static void bta_gattc_char_dscpt_disc_cmpl(uint16_t conn_id, tBTA_GATTC_SERV *p_srvc_cb) -{ - tBTA_GATTC_ATTR_REC *p_rec = NULL; - - if (-- p_srvc_cb->total_char > 0) - { - p_rec = p_srvc_cb->p_srvc_list + (++ p_srvc_cb->cur_char_idx); - /* add the next characteristic into cache */ - bta_gattc_add_char_to_cache (p_srvc_cb, - p_rec->char_decl_handle, - p_rec->s_handle, - &p_rec->uuid, - p_rec->property); - - /* start discoverying next characteristic for char descriptor */ - bta_gattc_start_disc_char_dscp(conn_id, p_srvc_cb); - } - else - /* all characteristic has been explored, start with next service if any */ - { +static void bta_gattc_char_dscpt_disc_cmpl(uint16_t conn_id, + tBTA_GATTC_SERV* p_srvc_cb) { + tBTA_GATTC_ATTR_REC* p_rec = NULL; + + if (--p_srvc_cb->total_char > 0) { + p_rec = p_srvc_cb->p_srvc_list + (++p_srvc_cb->cur_char_idx); + /* add the next characteristic into cache */ + bta_gattc_add_char_to_cache(p_srvc_cb, p_rec->char_decl_handle, + p_rec->s_handle, &p_rec->uuid, p_rec->property); + + /* start discoverying next characteristic for char descriptor */ + bta_gattc_start_disc_char_dscp(conn_id, p_srvc_cb); + } else + /* all characteristic has been explored, start with next service if any */ + { #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_ERROR("all char has been explored"); + APPL_TRACE_ERROR("all char has been explored"); #endif - p_srvc_cb->cur_srvc_idx ++; - bta_gattc_explore_srvc (conn_id, p_srvc_cb); - } - + p_srvc_cb->cur_srvc_idx++; + bta_gattc_explore_srvc(conn_id, p_srvc_cb); + } } -static bool bta_gattc_srvc_in_list(tBTA_GATTC_SERV *p_srvc_cb, uint16_t s_handle, - uint16_t e_handle, - UNUSED_ATTR tBT_UUID uuid) -{ - tBTA_GATTC_ATTR_REC *p_rec = NULL; - uint8_t i; - bool exist_srvc = false; - - if (!GATT_HANDLE_IS_VALID(s_handle) || !GATT_HANDLE_IS_VALID(e_handle)) - { - APPL_TRACE_ERROR("invalid included service handle: [0x%04x ~ 0x%04x]", s_handle, e_handle); +static bool bta_gattc_srvc_in_list(tBTA_GATTC_SERV* p_srvc_cb, + uint16_t s_handle, uint16_t e_handle, + UNUSED_ATTR tBT_UUID uuid) { + tBTA_GATTC_ATTR_REC* p_rec = NULL; + uint8_t i; + bool exist_srvc = false; + + if (!GATT_HANDLE_IS_VALID(s_handle) || !GATT_HANDLE_IS_VALID(e_handle)) { + APPL_TRACE_ERROR("invalid included service handle: [0x%04x ~ 0x%04x]", + s_handle, e_handle); + exist_srvc = true; + } else { + for (i = 0; i < p_srvc_cb->next_avail_idx; i++) { + p_rec = p_srvc_cb->p_srvc_list + i; + + /* a new service should not have any overlap with other service handle + * range */ + if (p_rec->s_handle == s_handle || p_rec->e_handle == e_handle) { exist_srvc = true; + break; + } } - else - { - for (i = 0; i < p_srvc_cb->next_avail_idx; i ++) - { - p_rec = p_srvc_cb->p_srvc_list + i; - - /* a new service should not have any overlap with other service handle range */ - if (p_rec->s_handle == s_handle || p_rec->e_handle == e_handle) - { - exist_srvc = true; - break; - } - } - } - return exist_srvc; + } + return exist_srvc; } /******************************************************************************* * @@ -648,35 +625,34 @@ static bool bta_gattc_srvc_in_list(tBTA_GATTC_SERV *p_srvc_cb, uint16_t s_handle * Returns status * ******************************************************************************/ -static tBTA_GATT_STATUS bta_gattc_add_srvc_to_list(tBTA_GATTC_SERV *p_srvc_cb, - uint16_t s_handle, uint16_t e_handle, - tBT_UUID uuid, bool is_primary) -{ - tBTA_GATTC_ATTR_REC *p_rec = NULL; - tBTA_GATT_STATUS status = BTA_GATT_OK; - - if (p_srvc_cb->p_srvc_list && p_srvc_cb->next_avail_idx < BTA_GATTC_MAX_CACHE_CHAR) - { - p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->next_avail_idx; - - APPL_TRACE_DEBUG("%s handle=%d, service type=0x%04x", - __func__, s_handle, uuid.uu.uuid16); - - p_rec->s_handle = s_handle; - p_rec->e_handle = e_handle; - p_rec->is_primary = is_primary; - memcpy(&p_rec->uuid, &uuid, sizeof(tBT_UUID)); - - p_srvc_cb->total_srvc ++; - p_srvc_cb->next_avail_idx ++; - } - else - { /* allocate bigger buffer ?? */ - status = GATT_DB_FULL; - - APPL_TRACE_ERROR("service not added, no resources or wrong state"); - } - return status; +static tBTA_GATT_STATUS bta_gattc_add_srvc_to_list(tBTA_GATTC_SERV* p_srvc_cb, + uint16_t s_handle, + uint16_t e_handle, + tBT_UUID uuid, + bool is_primary) { + tBTA_GATTC_ATTR_REC* p_rec = NULL; + tBTA_GATT_STATUS status = BTA_GATT_OK; + + if (p_srvc_cb->p_srvc_list && + p_srvc_cb->next_avail_idx < BTA_GATTC_MAX_CACHE_CHAR) { + p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->next_avail_idx; + + APPL_TRACE_DEBUG("%s handle=%d, service type=0x%04x", __func__, s_handle, + uuid.uu.uuid16); + + p_rec->s_handle = s_handle; + p_rec->e_handle = e_handle; + p_rec->is_primary = is_primary; + memcpy(&p_rec->uuid, &uuid, sizeof(tBT_UUID)); + + p_srvc_cb->total_srvc++; + p_srvc_cb->next_avail_idx++; + } else { /* allocate bigger buffer ?? */ + status = GATT_DB_FULL; + + APPL_TRACE_ERROR("service not added, no resources or wrong state"); + } + return status; } /******************************************************************************* * @@ -687,47 +663,41 @@ static tBTA_GATT_STATUS bta_gattc_add_srvc_to_list(tBTA_GATTC_SERV *p_srvc_cb, * Returns status * ******************************************************************************/ -static tBTA_GATT_STATUS bta_gattc_add_char_to_list(tBTA_GATTC_SERV *p_srvc_cb, - uint16_t decl_handle, uint16_t value_handle, - tBT_UUID uuid, uint8_t property) -{ - tBTA_GATTC_ATTR_REC *p_rec = NULL; - tBTA_GATT_STATUS status = BTA_GATT_OK; - - if (p_srvc_cb->p_srvc_list == NULL) - { - APPL_TRACE_ERROR("No service available, unexpected char discovery result"); - status = BTA_GATT_INTERNAL_ERROR; - } - else if (p_srvc_cb->next_avail_idx < BTA_GATTC_MAX_CACHE_CHAR) - { - - p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->next_avail_idx; - - p_srvc_cb->total_char ++; - - p_rec->s_handle = value_handle; - p_rec->char_decl_handle = decl_handle; - p_rec->property = property; - p_rec->e_handle = (p_srvc_cb->p_srvc_list + p_srvc_cb->cur_srvc_idx)->e_handle; - memcpy(&p_rec->uuid, &uuid, sizeof(tBT_UUID)); - - /* update the endind handle of pervious characteristic if available */ - if (p_srvc_cb->total_char > 1) - { - p_rec -= 1; - p_rec->e_handle = decl_handle - 1; - } - p_srvc_cb->next_avail_idx ++; +static tBTA_GATT_STATUS bta_gattc_add_char_to_list(tBTA_GATTC_SERV* p_srvc_cb, + uint16_t decl_handle, + uint16_t value_handle, + tBT_UUID uuid, + uint8_t property) { + tBTA_GATTC_ATTR_REC* p_rec = NULL; + tBTA_GATT_STATUS status = BTA_GATT_OK; + + if (p_srvc_cb->p_srvc_list == NULL) { + APPL_TRACE_ERROR("No service available, unexpected char discovery result"); + status = BTA_GATT_INTERNAL_ERROR; + } else if (p_srvc_cb->next_avail_idx < BTA_GATTC_MAX_CACHE_CHAR) { + p_rec = p_srvc_cb->p_srvc_list + p_srvc_cb->next_avail_idx; + + p_srvc_cb->total_char++; + + p_rec->s_handle = value_handle; + p_rec->char_decl_handle = decl_handle; + p_rec->property = property; + p_rec->e_handle = + (p_srvc_cb->p_srvc_list + p_srvc_cb->cur_srvc_idx)->e_handle; + memcpy(&p_rec->uuid, &uuid, sizeof(tBT_UUID)); + + /* update the endind handle of pervious characteristic if available */ + if (p_srvc_cb->total_char > 1) { + p_rec -= 1; + p_rec->e_handle = decl_handle - 1; } - else - { - APPL_TRACE_ERROR("char not added, no resources"); - /* allocate bigger buffer ?? */ - status = BTA_GATT_DB_FULL; - } - return status; - + p_srvc_cb->next_avail_idx++; + } else { + APPL_TRACE_ERROR("char not added, no resources"); + /* allocate bigger buffer ?? */ + status = BTA_GATT_DB_FULL; + } + return status; } /******************************************************************************* @@ -739,72 +709,57 @@ static tBTA_GATT_STATUS bta_gattc_add_char_to_list(tBTA_GATTC_SERV *p_srvc_cb, * Returns void * ******************************************************************************/ -void bta_gattc_sdp_callback(uint16_t sdp_status, void* user_data) -{ - tSDP_DISC_REC *p_sdp_rec = NULL; - tBT_UUID service_uuid; - tSDP_PROTOCOL_ELEM pe; - uint16_t start_handle = 0, end_handle = 0; - tBTA_GATTC_CB_DATA *cb_data = (tBTA_GATTC_CB_DATA *)user_data; - tBTA_GATTC_SERV *p_srvc_cb = bta_gattc_find_scb_by_cid(cb_data->sdp_conn_id); - - if (((sdp_status == SDP_SUCCESS) || (sdp_status == SDP_DB_FULL)) && p_srvc_cb != NULL) - { - do - { - /* find a service record, report it */ - p_sdp_rec = SDP_FindServiceInDb(cb_data->p_sdp_db, 0, p_sdp_rec); - if (p_sdp_rec) - { - if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) - { - - if (SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_ATT, &pe)) - { - start_handle = (uint16_t) pe.params[0]; - end_handle = (uint16_t) pe.params[1]; +void bta_gattc_sdp_callback(uint16_t sdp_status, void* user_data) { + tSDP_DISC_REC* p_sdp_rec = NULL; + tBT_UUID service_uuid; + tSDP_PROTOCOL_ELEM pe; + uint16_t start_handle = 0, end_handle = 0; + tBTA_GATTC_CB_DATA* cb_data = (tBTA_GATTC_CB_DATA*)user_data; + tBTA_GATTC_SERV* p_srvc_cb = bta_gattc_find_scb_by_cid(cb_data->sdp_conn_id); + + if (((sdp_status == SDP_SUCCESS) || (sdp_status == SDP_DB_FULL)) && + p_srvc_cb != NULL) { + do { + /* find a service record, report it */ + p_sdp_rec = SDP_FindServiceInDb(cb_data->p_sdp_db, 0, p_sdp_rec); + if (p_sdp_rec) { + if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) { + if (SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_ATT, + &pe)) { + start_handle = (uint16_t)pe.params[0]; + end_handle = (uint16_t)pe.params[1]; #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_EVENT("Found ATT service [0x%04x] handle[0x%04x ~ 0x%04x]", - service_uuid.uu.uuid16, start_handle, end_handle); + APPL_TRACE_EVENT( + "Found ATT service [0x%04x] handle[0x%04x ~ 0x%04x]", + service_uuid.uu.uuid16, start_handle, end_handle); #endif - if (GATT_HANDLE_IS_VALID(start_handle) && GATT_HANDLE_IS_VALID(end_handle)&& - p_srvc_cb != NULL) - { - /* discover services result, add services into a service list */ - bta_gattc_add_srvc_to_list(p_srvc_cb, - start_handle, - end_handle, - service_uuid, - true); - } - else - { - APPL_TRACE_ERROR("invalid start_handle = %d end_handle = %d", - start_handle, end_handle); - } - } - - - } + if (GATT_HANDLE_IS_VALID(start_handle) && + GATT_HANDLE_IS_VALID(end_handle) && p_srvc_cb != NULL) { + /* discover services result, add services into a service list */ + bta_gattc_add_srvc_to_list(p_srvc_cb, start_handle, end_handle, + service_uuid, true); + } else { + APPL_TRACE_ERROR("invalid start_handle = %d end_handle = %d", + start_handle, end_handle); } - } while (p_sdp_rec); - } - - if ( p_srvc_cb != NULL) - { - /* start discover primary service */ - bta_gattc_explore_srvc(cb_data->sdp_conn_id, p_srvc_cb); - } - else - { - APPL_TRACE_ERROR("GATT service discovery is done on unknown connection"); - } - - /* both were allocated in bta_gattc_sdp_service_disc */ - osi_free(cb_data->p_sdp_db); - osi_free(cb_data); + } + } + } + } while (p_sdp_rec); + } + + if (p_srvc_cb != NULL) { + /* start discover primary service */ + bta_gattc_explore_srvc(cb_data->sdp_conn_id, p_srvc_cb); + } else { + APPL_TRACE_ERROR("GATT service discovery is done on unknown connection"); + } + + /* both were allocated in bta_gattc_sdp_service_disc */ + osi_free(cb_data->p_sdp_db); + osi_free(cb_data); } /******************************************************************************* * @@ -815,41 +770,41 @@ void bta_gattc_sdp_callback(uint16_t sdp_status, void* user_data) * Returns void * ******************************************************************************/ -static tBTA_GATT_STATUS bta_gattc_sdp_service_disc(uint16_t conn_id, tBTA_GATTC_SERV *p_server_cb) -{ - tSDP_UUID uuid; - uint16_t num_attrs = 2; - uint16_t attr_list[2]; - - memset (&uuid, 0, sizeof(tSDP_UUID)); - - uuid.len = LEN_UUID_16; - uuid.uu.uuid16 = UUID_PROTOCOL_ATT; - - /* - * On success, cb_data will be freed inside bta_gattc_sdp_callback, - * otherwise it will be freed within this function. - */ - tBTA_GATTC_CB_DATA *cb_data = - (tBTA_GATTC_CB_DATA *)osi_malloc(sizeof(tBTA_GATTC_CB_DATA)); - - cb_data->p_sdp_db = (tSDP_DISCOVERY_DB *)osi_malloc(BTA_GATT_SDP_DB_SIZE); - attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; - attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; - - SDP_InitDiscoveryDb(cb_data->p_sdp_db, BTA_GATT_SDP_DB_SIZE, 1, - &uuid, num_attrs, attr_list); - - if (!SDP_ServiceSearchAttributeRequest2(p_server_cb->server_bda, - cb_data->p_sdp_db, &bta_gattc_sdp_callback, cb_data)) - { - osi_free(cb_data->p_sdp_db); - osi_free(cb_data); - return BTA_GATT_ERROR; - } +static tBTA_GATT_STATUS bta_gattc_sdp_service_disc( + uint16_t conn_id, tBTA_GATTC_SERV* p_server_cb) { + tSDP_UUID uuid; + uint16_t num_attrs = 2; + uint16_t attr_list[2]; + + memset(&uuid, 0, sizeof(tSDP_UUID)); + + uuid.len = LEN_UUID_16; + uuid.uu.uuid16 = UUID_PROTOCOL_ATT; + + /* + * On success, cb_data will be freed inside bta_gattc_sdp_callback, + * otherwise it will be freed within this function. + */ + tBTA_GATTC_CB_DATA* cb_data = + (tBTA_GATTC_CB_DATA*)osi_malloc(sizeof(tBTA_GATTC_CB_DATA)); + + cb_data->p_sdp_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_GATT_SDP_DB_SIZE); + attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; + attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; + + SDP_InitDiscoveryDb(cb_data->p_sdp_db, BTA_GATT_SDP_DB_SIZE, 1, &uuid, + num_attrs, attr_list); + + if (!SDP_ServiceSearchAttributeRequest2(p_server_cb->server_bda, + cb_data->p_sdp_db, + &bta_gattc_sdp_callback, cb_data)) { + osi_free(cb_data->p_sdp_db); + osi_free(cb_data); + return BTA_GATT_ERROR; + } - cb_data->sdp_conn_id = conn_id; - return BTA_GATT_OK; + cb_data->sdp_conn_id = conn_id; + return BTA_GATT_OK; } /******************************************************************************* * @@ -861,118 +816,108 @@ static tBTA_GATT_STATUS bta_gattc_sdp_service_disc(uint16_t conn_id, tBTA_GATTC_ * Returns void * ******************************************************************************/ -void bta_gattc_disc_res_cback (uint16_t conn_id, tGATT_DISC_TYPE disc_type, tGATT_DISC_RES *p_data) -{ - tBTA_GATTC_SERV * p_srvc_cb = NULL; - bool pri_srvc; - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - - p_srvc_cb = bta_gattc_find_scb_by_cid(conn_id); - - if (p_srvc_cb != NULL && p_clcb != NULL && p_clcb->state == BTA_GATTC_DISCOVER_ST) - { - switch (disc_type) - { - case GATT_DISC_SRVC_ALL: - /* discover services result, add services into a service list */ - bta_gattc_add_srvc_to_list(p_srvc_cb, - p_data->handle, - p_data->value.group_value.e_handle, - p_data->value.group_value.service_type, - true); - - break; - case GATT_DISC_SRVC_BY_UUID: - bta_gattc_add_srvc_to_list(p_srvc_cb, - p_data->handle, - p_data->value.group_value.e_handle, - p_data->value.group_value.service_type, - true); - break; - - case GATT_DISC_INC_SRVC: - /* add included service into service list if it's secondary or it never showed up - in the primary service search */ - pri_srvc = bta_gattc_srvc_in_list(p_srvc_cb, - p_data->value.incl_service.s_handle, - p_data->value.incl_service.e_handle, - p_data->value.incl_service.service_type); - - if (!pri_srvc) - bta_gattc_add_srvc_to_list(p_srvc_cb, - p_data->value.incl_service.s_handle, - p_data->value.incl_service.e_handle, - p_data->value.incl_service.service_type, - false); - /* add into database */ - bta_gattc_add_attr_to_cache(p_srvc_cb, - p_data->handle, - &p_data->value.incl_service.service_type, - pri_srvc, - p_data->value.incl_service.s_handle, - BTA_GATTC_ATTR_TYPE_INCL_SRVC); - break; - - case GATT_DISC_CHAR: - /* add char value into database */ - bta_gattc_add_char_to_list(p_srvc_cb, - p_data->handle, - p_data->value.dclr_value.val_handle, - p_data->value.dclr_value.char_uuid, - p_data->value.dclr_value.char_prop); - break; - - case GATT_DISC_CHAR_DSCPT: - bta_gattc_add_attr_to_cache(p_srvc_cb, p_data->handle, &p_data->type, 0, - 0 /* incl_srvc_handle */, - BTA_GATTC_ATTR_TYPE_CHAR_DESCR); - break; - } +void bta_gattc_disc_res_cback(uint16_t conn_id, tGATT_DISC_TYPE disc_type, + tGATT_DISC_RES* p_data) { + tBTA_GATTC_SERV* p_srvc_cb = NULL; + bool pri_srvc; + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); + + p_srvc_cb = bta_gattc_find_scb_by_cid(conn_id); + + if (p_srvc_cb != NULL && p_clcb != NULL && + p_clcb->state == BTA_GATTC_DISCOVER_ST) { + switch (disc_type) { + case GATT_DISC_SRVC_ALL: + /* discover services result, add services into a service list */ + bta_gattc_add_srvc_to_list( + p_srvc_cb, p_data->handle, p_data->value.group_value.e_handle, + p_data->value.group_value.service_type, true); + + break; + case GATT_DISC_SRVC_BY_UUID: + bta_gattc_add_srvc_to_list( + p_srvc_cb, p_data->handle, p_data->value.group_value.e_handle, + p_data->value.group_value.service_type, true); + break; + + case GATT_DISC_INC_SRVC: + /* add included service into service list if it's secondary or it never + showed up + in the primary service search */ + pri_srvc = bta_gattc_srvc_in_list( + p_srvc_cb, p_data->value.incl_service.s_handle, + p_data->value.incl_service.e_handle, + p_data->value.incl_service.service_type); + + if (!pri_srvc) + bta_gattc_add_srvc_to_list( + p_srvc_cb, p_data->value.incl_service.s_handle, + p_data->value.incl_service.e_handle, + p_data->value.incl_service.service_type, false); + /* add into database */ + bta_gattc_add_attr_to_cache( + p_srvc_cb, p_data->handle, &p_data->value.incl_service.service_type, + pri_srvc, p_data->value.incl_service.s_handle, + BTA_GATTC_ATTR_TYPE_INCL_SRVC); + break; + + case GATT_DISC_CHAR: + /* add char value into database */ + bta_gattc_add_char_to_list(p_srvc_cb, p_data->handle, + p_data->value.dclr_value.val_handle, + p_data->value.dclr_value.char_uuid, + p_data->value.dclr_value.char_prop); + break; + + case GATT_DISC_CHAR_DSCPT: + bta_gattc_add_attr_to_cache(p_srvc_cb, p_data->handle, &p_data->type, 0, + 0 /* incl_srvc_handle */, + BTA_GATTC_ATTR_TYPE_CHAR_DESCR); + break; } + } } -void bta_gattc_disc_cmpl_cback (uint16_t conn_id, tGATT_DISC_TYPE disc_type, tGATT_STATUS status) -{ - tBTA_GATTC_SERV * p_srvc_cb; - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - - if ( p_clcb && (status != GATT_SUCCESS || p_clcb->status != GATT_SUCCESS) ) - { - if (status == GATT_SUCCESS) - p_clcb->status = status; - bta_gattc_sm_execute(p_clcb, BTA_GATTC_DISCOVER_CMPL_EVT, NULL); - return; - } - p_srvc_cb = bta_gattc_find_scb_by_cid(conn_id); - - if (p_srvc_cb != NULL) - { - switch (disc_type) - { - case GATT_DISC_SRVC_ALL: - case GATT_DISC_SRVC_BY_UUID: +void bta_gattc_disc_cmpl_cback(uint16_t conn_id, tGATT_DISC_TYPE disc_type, + tGATT_STATUS status) { + tBTA_GATTC_SERV* p_srvc_cb; + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); + + if (p_clcb && (status != GATT_SUCCESS || p_clcb->status != GATT_SUCCESS)) { + if (status == GATT_SUCCESS) p_clcb->status = status; + bta_gattc_sm_execute(p_clcb, BTA_GATTC_DISCOVER_CMPL_EVT, NULL); + return; + } + p_srvc_cb = bta_gattc_find_scb_by_cid(conn_id); + + if (p_srvc_cb != NULL) { + switch (disc_type) { + case GATT_DISC_SRVC_ALL: + case GATT_DISC_SRVC_BY_UUID: #if (BTA_GATT_DEBUG == TRUE) - bta_gattc_display_explore_record(p_srvc_cb->p_srvc_list, p_srvc_cb->next_avail_idx); + bta_gattc_display_explore_record(p_srvc_cb->p_srvc_list, + p_srvc_cb->next_avail_idx); #endif - bta_gattc_explore_srvc(conn_id, p_srvc_cb); - break; + bta_gattc_explore_srvc(conn_id, p_srvc_cb); + break; - case GATT_DISC_INC_SRVC: - bta_gattc_incl_srvc_disc_cmpl(conn_id, p_srvc_cb); + case GATT_DISC_INC_SRVC: + bta_gattc_incl_srvc_disc_cmpl(conn_id, p_srvc_cb); - break; + break; - case GATT_DISC_CHAR: + case GATT_DISC_CHAR: #if (BTA_GATT_DEBUG == TRUE) - bta_gattc_display_explore_record(p_srvc_cb->p_srvc_list, p_srvc_cb->next_avail_idx); + bta_gattc_display_explore_record(p_srvc_cb->p_srvc_list, + p_srvc_cb->next_avail_idx); #endif - bta_gattc_char_disc_cmpl(conn_id, p_srvc_cb); - break; + bta_gattc_char_disc_cmpl(conn_id, p_srvc_cb); + break; - case GATT_DISC_CHAR_DSCPT: - bta_gattc_char_dscpt_disc_cmpl(conn_id, p_srvc_cb); - break; - } + case GATT_DISC_CHAR_DSCPT: + bta_gattc_char_dscpt_disc_cmpl(conn_id, p_srvc_cb); + break; } + } } /******************************************************************************* @@ -984,139 +929,141 @@ void bta_gattc_disc_cmpl_cback (uint16_t conn_id, tGATT_DISC_TYPE disc_type, tGA * Returns false if map can not be found. * ******************************************************************************/ -void bta_gattc_search_service(tBTA_GATTC_CLCB *p_clcb, tBT_UUID *p_uuid) -{ - tBTA_GATTC cb_data; +void bta_gattc_search_service(tBTA_GATTC_CLCB* p_clcb, tBT_UUID* p_uuid) { + tBTA_GATTC cb_data; - if (!p_clcb->p_srcb->p_srvc_cache || list_is_empty(p_clcb->p_srcb->p_srvc_cache)) - return; + if (!p_clcb->p_srcb->p_srvc_cache || + list_is_empty(p_clcb->p_srcb->p_srvc_cache)) + return; - for (list_node_t *sn = list_begin(p_clcb->p_srcb->p_srvc_cache); - sn != list_end(p_clcb->p_srcb->p_srvc_cache); sn = list_next(sn)) { - tBTA_GATTC_SERVICE *p_cache = (tBTA_GATTC_SERVICE*) list_node(sn); + for (list_node_t* sn = list_begin(p_clcb->p_srcb->p_srvc_cache); + sn != list_end(p_clcb->p_srcb->p_srvc_cache); sn = list_next(sn)) { + tBTA_GATTC_SERVICE* p_cache = (tBTA_GATTC_SERVICE*)list_node(sn); - if (!bta_gattc_uuid_compare(p_uuid, &p_cache->uuid, false)) - continue; + if (!bta_gattc_uuid_compare(p_uuid, &p_cache->uuid, false)) continue; #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("found service [0x%04x], inst[%d] handle [%d]", - p_cache->uuid.uu.uuid16, - p_cache->handle, - p_cache->s_handle); + APPL_TRACE_DEBUG("found service [0x%04x], inst[%d] handle [%d]", + p_cache->uuid.uu.uuid16, p_cache->handle, + p_cache->s_handle); #endif - if (!p_clcb->p_rcb->p_cback) - continue; + if (!p_clcb->p_rcb->p_cback) continue; - memset(&cb_data, 0, sizeof(tBTA_GATTC)); + memset(&cb_data, 0, sizeof(tBTA_GATTC)); - cb_data.srvc_res.conn_id = p_clcb->bta_conn_id; - cb_data.srvc_res.service_uuid.inst_id = p_cache->handle; - memcpy(&cb_data.srvc_res.service_uuid.uuid, &p_cache->uuid, sizeof(tBTA_GATT_ID)); + cb_data.srvc_res.conn_id = p_clcb->bta_conn_id; + cb_data.srvc_res.service_uuid.inst_id = p_cache->handle; + memcpy(&cb_data.srvc_res.service_uuid.uuid, &p_cache->uuid, + sizeof(tBTA_GATT_ID)); - (* p_clcb->p_rcb->p_cback)(BTA_GATTC_SEARCH_RES_EVT, &cb_data); - } + (*p_clcb->p_rcb->p_cback)(BTA_GATTC_SEARCH_RES_EVT, &cb_data); + } } -list_t* bta_gattc_get_services_srcb(tBTA_GATTC_SERV *p_srcb) { - if (!p_srcb || !p_srcb->p_srvc_cache || list_is_empty(p_srcb->p_srvc_cache)) - return NULL; +list_t* bta_gattc_get_services_srcb(tBTA_GATTC_SERV* p_srcb) { + if (!p_srcb || !p_srcb->p_srvc_cache || list_is_empty(p_srcb->p_srvc_cache)) + return NULL; - return p_srcb->p_srvc_cache; + return p_srcb->p_srvc_cache; } const list_t* bta_gattc_get_services(uint16_t conn_id) { - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - if (p_clcb == NULL ) - return NULL; + if (p_clcb == NULL) return NULL; - tBTA_GATTC_SERV *p_srcb = p_clcb->p_srcb; + tBTA_GATTC_SERV* p_srcb = p_clcb->p_srcb; - return bta_gattc_get_services_srcb(p_srcb); + return bta_gattc_get_services_srcb(p_srcb); } -tBTA_GATTC_SERVICE* bta_gattc_find_matching_service(const list_t *services, uint16_t handle) { - if (!services || list_is_empty(services)) - return NULL; +tBTA_GATTC_SERVICE* bta_gattc_find_matching_service(const list_t* services, + uint16_t handle) { + if (!services || list_is_empty(services)) return NULL; - for (list_node_t *sn = list_begin(services); - sn != list_end(services); sn = list_next(sn)) { - tBTA_GATTC_SERVICE *service = (tBTA_GATTC_SERVICE*) list_node(sn); + for (list_node_t* sn = list_begin(services); sn != list_end(services); + sn = list_next(sn)) { + tBTA_GATTC_SERVICE* service = (tBTA_GATTC_SERVICE*)list_node(sn); - if (handle >= service->s_handle && handle <= service->e_handle) - return service; - } + if (handle >= service->s_handle && handle <= service->e_handle) + return service; + } - return NULL; + return NULL; } -const tBTA_GATTC_SERVICE* bta_gattc_get_service_for_handle_srcb(tBTA_GATTC_SERV *p_srcb, uint16_t handle) { - const list_t *services = bta_gattc_get_services_srcb(p_srcb); +const tBTA_GATTC_SERVICE* bta_gattc_get_service_for_handle_srcb( + tBTA_GATTC_SERV* p_srcb, uint16_t handle) { + const list_t* services = bta_gattc_get_services_srcb(p_srcb); - return bta_gattc_find_matching_service(services, handle); + return bta_gattc_find_matching_service(services, handle); } -const tBTA_GATTC_SERVICE* bta_gattc_get_service_for_handle(uint16_t conn_id, uint16_t handle) { - const list_t *services = bta_gattc_get_services(conn_id); +const tBTA_GATTC_SERVICE* bta_gattc_get_service_for_handle(uint16_t conn_id, + uint16_t handle) { + const list_t* services = bta_gattc_get_services(conn_id); - return bta_gattc_find_matching_service(services, handle); + return bta_gattc_find_matching_service(services, handle); } -tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic_srcb(tBTA_GATTC_SERV *p_srcb, uint16_t handle) { - const tBTA_GATTC_SERVICE* service = bta_gattc_get_service_for_handle_srcb(p_srcb, handle); +tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic_srcb( + tBTA_GATTC_SERV* p_srcb, uint16_t handle) { + const tBTA_GATTC_SERVICE* service = + bta_gattc_get_service_for_handle_srcb(p_srcb, handle); - if (!service) - return NULL; + if (!service) return NULL; - for (list_node_t *cn = list_begin(service->characteristics); - cn != list_end(service->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); - if (handle == p_char->handle) - return p_char; - } + for (list_node_t* cn = list_begin(service->characteristics); + cn != list_end(service->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); + if (handle == p_char->handle) return p_char; + } - return NULL; + return NULL; } -tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic(uint16_t conn_id, uint16_t handle) { - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); +tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic(uint16_t conn_id, + uint16_t handle) { + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - if (p_clcb == NULL ) - return NULL; + if (p_clcb == NULL) return NULL; - tBTA_GATTC_SERV *p_srcb = p_clcb->p_srcb; - return bta_gattc_get_characteristic_srcb(p_srcb, handle); + tBTA_GATTC_SERV* p_srcb = p_clcb->p_srcb; + return bta_gattc_get_characteristic_srcb(p_srcb, handle); } -tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor_srcb(tBTA_GATTC_SERV *p_srcb, uint16_t handle) { - const tBTA_GATTC_SERVICE* service = bta_gattc_get_service_for_handle_srcb(p_srcb, handle); - - if (!service) { - return NULL; - } +tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor_srcb(tBTA_GATTC_SERV* p_srcb, + uint16_t handle) { + const tBTA_GATTC_SERVICE* service = + bta_gattc_get_service_for_handle_srcb(p_srcb, handle); - for (list_node_t *cn = list_begin(service->characteristics); - cn != list_end(service->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); - for (list_node_t *dn = list_begin(p_char->descriptors); - dn != list_end(p_char->descriptors); dn = list_next(dn)) { - tBTA_GATTC_DESCRIPTOR *p_desc = (tBTA_GATTC_DESCRIPTOR*) list_node(dn); - if (handle == p_desc->handle) - return p_desc; - } + if (!service) { + return NULL; + } + + for (list_node_t* cn = list_begin(service->characteristics); + cn != list_end(service->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); + for (list_node_t* dn = list_begin(p_char->descriptors); + dn != list_end(p_char->descriptors); dn = list_next(dn)) { + tBTA_GATTC_DESCRIPTOR* p_desc = (tBTA_GATTC_DESCRIPTOR*)list_node(dn); + if (handle == p_desc->handle) return p_desc; } + } - return NULL; + return NULL; } -tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor(uint16_t conn_id, uint16_t handle) { - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); +tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor(uint16_t conn_id, + uint16_t handle) { + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - if (p_clcb == NULL ) - return NULL; + if (p_clcb == NULL) return NULL; - tBTA_GATTC_SERV *p_srcb = p_clcb->p_srcb; - return bta_gattc_get_descriptor_srcb(p_srcb, handle); + tBTA_GATTC_SERV* p_srcb = p_clcb->p_srcb; + return bta_gattc_get_descriptor_srcb(p_srcb, handle); } /******************************************************************************* @@ -1128,60 +1075,57 @@ tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor(uint16_t conn_id, uint16_t hand * Returns None. * ******************************************************************************/ -void bta_gattc_fill_gatt_db_el(btgatt_db_element_t *p_attr, +void bta_gattc_fill_gatt_db_el(btgatt_db_element_t* p_attr, bt_gatt_db_attribute_type_t type, - uint16_t att_handle, - uint16_t s_handle, uint16_t e_handle, - uint16_t id, tBT_UUID uuid, uint8_t prop) -{ - p_attr->type = type; - p_attr->attribute_handle = att_handle; - p_attr->start_handle = s_handle; - p_attr->end_handle = e_handle; - p_attr->id = id; - p_attr->properties = prop; - bta_to_btif_uuid(&p_attr->uuid, &uuid); + uint16_t att_handle, uint16_t s_handle, + uint16_t e_handle, uint16_t id, tBT_UUID uuid, + uint8_t prop) { + p_attr->type = type; + p_attr->attribute_handle = att_handle; + p_attr->start_handle = s_handle; + p_attr->end_handle = e_handle; + p_attr->id = id; + p_attr->properties = prop; + bta_to_btif_uuid(&p_attr->uuid, &uuid); } /******************************************************************************* * Returns number of elements inside db from start_handle to end_handle ******************************************************************************/ -static size_t bta_gattc_get_db_size(list_t *services, - uint16_t start_handle, uint16_t end_handle) { - if (!services || list_is_empty(services)) - return 0; +static size_t bta_gattc_get_db_size(list_t* services, uint16_t start_handle, + uint16_t end_handle) { + if (!services || list_is_empty(services)) return 0; - size_t db_size = 0; + size_t db_size = 0; - for (list_node_t *sn = list_begin(services); - sn != list_end(services); sn = list_next(sn)) { - tBTA_GATTC_SERVICE *p_cur_srvc = (tBTA_GATTC_SERVICE*) list_node(sn); + for (list_node_t* sn = list_begin(services); sn != list_end(services); + sn = list_next(sn)) { + tBTA_GATTC_SERVICE* p_cur_srvc = (tBTA_GATTC_SERVICE*)list_node(sn); - if (p_cur_srvc->s_handle < start_handle) - continue; + if (p_cur_srvc->s_handle < start_handle) continue; - if (p_cur_srvc->e_handle > end_handle) - break; + if (p_cur_srvc->e_handle > end_handle) break; - db_size++; - if (!p_cur_srvc->characteristics || list_is_empty(p_cur_srvc->characteristics)) - continue; + db_size++; + if (!p_cur_srvc->characteristics || + list_is_empty(p_cur_srvc->characteristics)) + continue; - for (list_node_t *cn = list_begin(p_cur_srvc->characteristics); - cn != list_end(p_cur_srvc->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); - db_size++; + for (list_node_t* cn = list_begin(p_cur_srvc->characteristics); + cn != list_end(p_cur_srvc->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); + db_size++; - if (p_char->descriptors) - db_size += list_length(p_char->descriptors); - } + if (p_char->descriptors) db_size += list_length(p_char->descriptors); + } - if (p_cur_srvc->included_svc) { - db_size += list_length(p_cur_srvc->included_svc); - } + if (p_cur_srvc->included_svc) { + db_size += list_length(p_cur_srvc->included_svc); } + } - return db_size; + return db_size; } /******************************************************************************* @@ -1199,104 +1143,87 @@ static size_t bta_gattc_get_db_size(list_t *services, * Returns None. * ******************************************************************************/ -static void bta_gattc_get_gatt_db_impl(tBTA_GATTC_SERV *p_srvc_cb, - uint16_t start_handle, uint16_t end_handle, - btgatt_db_element_t **db, - int *count) -{ - APPL_TRACE_DEBUG("%s: start_handle 0x%04x, end_handle 0x%04x", - __func__, start_handle, end_handle); - - if (!p_srvc_cb->p_srvc_cache || list_is_empty(p_srvc_cb->p_srvc_cache)) { - *count = 0; - *db = NULL; - return; - } +static void bta_gattc_get_gatt_db_impl(tBTA_GATTC_SERV* p_srvc_cb, + uint16_t start_handle, + uint16_t end_handle, + btgatt_db_element_t** db, int* count) { + APPL_TRACE_DEBUG("%s: start_handle 0x%04x, end_handle 0x%04x", __func__, + start_handle, end_handle); + + if (!p_srvc_cb->p_srvc_cache || list_is_empty(p_srvc_cb->p_srvc_cache)) { + *count = 0; + *db = NULL; + return; + } + + size_t db_size = + bta_gattc_get_db_size(p_srvc_cb->p_srvc_cache, start_handle, end_handle); + + void* buffer = osi_malloc(db_size * sizeof(btgatt_db_element_t)); + btgatt_db_element_t* curr_db_attr = (btgatt_db_element_t*)buffer; + + for (list_node_t* sn = list_begin(p_srvc_cb->p_srvc_cache); + sn != list_end(p_srvc_cb->p_srvc_cache); sn = list_next(sn)) { + tBTA_GATTC_SERVICE* p_cur_srvc = (tBTA_GATTC_SERVICE*)list_node(sn); + + if (p_cur_srvc->s_handle < start_handle) continue; - size_t db_size = bta_gattc_get_db_size(p_srvc_cb->p_srvc_cache, start_handle, end_handle); + if (p_cur_srvc->e_handle > end_handle) break; - void* buffer = osi_malloc(db_size * sizeof(btgatt_db_element_t)); - btgatt_db_element_t *curr_db_attr = (btgatt_db_element_t*) buffer; + bta_gattc_fill_gatt_db_el( + curr_db_attr, p_cur_srvc->is_primary ? BTGATT_DB_PRIMARY_SERVICE + : BTGATT_DB_SECONDARY_SERVICE, + 0 /* att_handle */, p_cur_srvc->s_handle, p_cur_srvc->e_handle, + p_cur_srvc->s_handle, p_cur_srvc->uuid, 0 /* prop */); + curr_db_attr++; - for (list_node_t *sn = list_begin(p_srvc_cb->p_srvc_cache); - sn != list_end(p_srvc_cb->p_srvc_cache); sn = list_next(sn)) { - tBTA_GATTC_SERVICE *p_cur_srvc = (tBTA_GATTC_SERVICE*) list_node(sn); + if (!p_cur_srvc->characteristics || + list_is_empty(p_cur_srvc->characteristics)) + continue; - if (p_cur_srvc->s_handle < start_handle) - continue; + for (list_node_t* cn = list_begin(p_cur_srvc->characteristics); + cn != list_end(p_cur_srvc->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); - if (p_cur_srvc->e_handle > end_handle) - break; + bta_gattc_fill_gatt_db_el(curr_db_attr, BTGATT_DB_CHARACTERISTIC, + p_char->handle, 0 /* s_handle */, + 0 /* e_handle */, p_char->handle, p_char->uuid, + p_char->properties); + curr_db_attr++; - bta_gattc_fill_gatt_db_el(curr_db_attr, - p_cur_srvc->is_primary ? - BTGATT_DB_PRIMARY_SERVICE : - BTGATT_DB_SECONDARY_SERVICE, - 0 /* att_handle */, - p_cur_srvc->s_handle, - p_cur_srvc->e_handle, - p_cur_srvc->s_handle, - p_cur_srvc->uuid, - 0 /* prop */); + if (!p_char->descriptors || list_is_empty(p_char->descriptors)) continue; + + for (list_node_t* dn = list_begin(p_char->descriptors); + dn != list_end(p_char->descriptors); dn = list_next(dn)) { + tBTA_GATTC_DESCRIPTOR* p_desc = (tBTA_GATTC_DESCRIPTOR*)list_node(dn); + + bta_gattc_fill_gatt_db_el(curr_db_attr, BTGATT_DB_DESCRIPTOR, + p_desc->handle, 0 /* s_handle */, + 0 /* e_handle */, p_desc->handle, + p_desc->uuid, 0 /* property */); curr_db_attr++; + } + } - if (!p_cur_srvc->characteristics || list_is_empty(p_cur_srvc->characteristics)) - continue; - - for (list_node_t *cn = list_begin(p_cur_srvc->characteristics); - cn != list_end(p_cur_srvc->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); - - bta_gattc_fill_gatt_db_el(curr_db_attr, - BTGATT_DB_CHARACTERISTIC, - p_char->handle, - 0 /* s_handle */, - 0 /* e_handle */, - p_char->handle, - p_char->uuid, - p_char->properties); - curr_db_attr++; - - if (!p_char->descriptors || list_is_empty(p_char->descriptors)) - continue; - - for (list_node_t *dn = list_begin(p_char->descriptors); - dn != list_end(p_char->descriptors); dn = list_next(dn)) { - tBTA_GATTC_DESCRIPTOR *p_desc = (tBTA_GATTC_DESCRIPTOR*) list_node(dn); - - bta_gattc_fill_gatt_db_el(curr_db_attr, - BTGATT_DB_DESCRIPTOR, - p_desc->handle, - 0 /* s_handle */, - 0 /* e_handle */, - p_desc->handle, - p_desc->uuid, - 0 /* property */); - curr_db_attr++; - } - } + if (!p_cur_srvc->included_svc || list_is_empty(p_cur_srvc->included_svc)) + continue; - if (!p_cur_srvc->included_svc || list_is_empty(p_cur_srvc->included_svc)) - continue; - - for (list_node_t *isn = list_begin(p_cur_srvc->included_svc); - isn != list_end(p_cur_srvc->included_svc); isn = list_next(isn)) { - tBTA_GATTC_INCLUDED_SVC *p_isvc = (tBTA_GATTC_INCLUDED_SVC*) list_node(isn); - - bta_gattc_fill_gatt_db_el(curr_db_attr, - BTGATT_DB_INCLUDED_SERVICE, - p_isvc->handle, - 0 /* s_handle */, - 0 /* e_handle */, - p_isvc->handle, - p_isvc->uuid, - 0 /* property */); - curr_db_attr++; - } + for (list_node_t* isn = list_begin(p_cur_srvc->included_svc); + isn != list_end(p_cur_srvc->included_svc); isn = list_next(isn)) { + tBTA_GATTC_INCLUDED_SVC* p_isvc = + (tBTA_GATTC_INCLUDED_SVC*)list_node(isn); + + bta_gattc_fill_gatt_db_el(curr_db_attr, BTGATT_DB_INCLUDED_SERVICE, + p_isvc->handle, 0 /* s_handle */, + 0 /* e_handle */, p_isvc->handle, p_isvc->uuid, + 0 /* property */); + curr_db_attr++; } + } - *db = (btgatt_db_element_t*) buffer; - *count = db_size; + *db = (btgatt_db_element_t*)buffer; + *count = db_size; } /******************************************************************************* @@ -1313,29 +1240,32 @@ static void bta_gattc_get_gatt_db_impl(tBTA_GATTC_SERV *p_srvc_cb, * Returns None. * ******************************************************************************/ -void bta_gattc_get_gatt_db(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, btgatt_db_element_t **db, int *count) -{ - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - - LOG_DEBUG(LOG_TAG, "%s", __func__); - if (p_clcb == NULL) { - APPL_TRACE_ERROR("Unknown conn ID: %d", conn_id); - return; - } +void bta_gattc_get_gatt_db(uint16_t conn_id, uint16_t start_handle, + uint16_t end_handle, btgatt_db_element_t** db, + int* count) { + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); + + LOG_DEBUG(LOG_TAG, "%s", __func__); + if (p_clcb == NULL) { + APPL_TRACE_ERROR("Unknown conn ID: %d", conn_id); + return; + } - if (p_clcb->state != BTA_GATTC_CONN_ST) { - APPL_TRACE_ERROR("server cache not available, CLCB state = %d", - p_clcb->state); - return; - } + if (p_clcb->state != BTA_GATTC_CONN_ST) { + APPL_TRACE_ERROR("server cache not available, CLCB state = %d", + p_clcb->state); + return; + } - if (!p_clcb->p_srcb || p_clcb->p_srcb->p_srvc_list || /* no active discovery */ - !p_clcb->p_srcb->p_srvc_cache) { - APPL_TRACE_ERROR("No server cache available"); - return; - } + if (!p_clcb->p_srcb || + p_clcb->p_srcb->p_srvc_list || /* no active discovery */ + !p_clcb->p_srcb->p_srvc_cache) { + APPL_TRACE_ERROR("No server cache available"); + return; + } - bta_gattc_get_gatt_db_impl(p_clcb->p_srcb, start_handle, end_handle, db, count); + bta_gattc_get_gatt_db_impl(p_clcb->p_srcb, start_handle, end_handle, db, + count); } /******************************************************************************* @@ -1349,49 +1279,39 @@ void bta_gattc_get_gatt_db(uint16_t conn_id, uint16_t start_handle, uint16_t end * Returns None. * ******************************************************************************/ -void bta_gattc_rebuild_cache(tBTA_GATTC_SERV *p_srvc_cb, uint16_t num_attr, - tBTA_GATTC_NV_ATTR *p_attr) -{ - /* first attribute loading, initialize buffer */ - APPL_TRACE_ERROR("%s: bta_gattc_rebuild_cache", __func__); - - list_free(p_srvc_cb->p_srvc_cache); - p_srvc_cb->p_srvc_cache = NULL; - - while (num_attr > 0 && p_attr != NULL) - { - switch (p_attr->attr_type) - { - case BTA_GATTC_ATTR_TYPE_SRVC: - bta_gattc_add_srvc_to_cache(p_srvc_cb, - p_attr->s_handle, - p_attr->e_handle, - &p_attr->uuid, - p_attr->is_primary); - break; - - case BTA_GATTC_ATTR_TYPE_CHAR: - //TODO(jpawlowski): store decl_handle properly. - bta_gattc_add_char_to_cache(p_srvc_cb, - p_attr->s_handle, - p_attr->s_handle, - &p_attr->uuid, - p_attr->prop); - break; - - case BTA_GATTC_ATTR_TYPE_CHAR_DESCR: - case BTA_GATTC_ATTR_TYPE_INCL_SRVC: - bta_gattc_add_attr_to_cache(p_srvc_cb, - p_attr->s_handle, - &p_attr->uuid, - p_attr->prop, - p_attr->incl_srvc_handle, - p_attr->attr_type); - break; - } - p_attr ++; - num_attr --; +void bta_gattc_rebuild_cache(tBTA_GATTC_SERV* p_srvc_cb, uint16_t num_attr, + tBTA_GATTC_NV_ATTR* p_attr) { + /* first attribute loading, initialize buffer */ + APPL_TRACE_ERROR("%s: bta_gattc_rebuild_cache", __func__); + + list_free(p_srvc_cb->p_srvc_cache); + p_srvc_cb->p_srvc_cache = NULL; + + while (num_attr > 0 && p_attr != NULL) { + switch (p_attr->attr_type) { + case BTA_GATTC_ATTR_TYPE_SRVC: + bta_gattc_add_srvc_to_cache(p_srvc_cb, p_attr->s_handle, + p_attr->e_handle, &p_attr->uuid, + p_attr->is_primary); + break; + + case BTA_GATTC_ATTR_TYPE_CHAR: + // TODO(jpawlowski): store decl_handle properly. + bta_gattc_add_char_to_cache(p_srvc_cb, p_attr->s_handle, + p_attr->s_handle, &p_attr->uuid, + p_attr->prop); + break; + + case BTA_GATTC_ATTR_TYPE_CHAR_DESCR: + case BTA_GATTC_ATTR_TYPE_INCL_SRVC: + bta_gattc_add_attr_to_cache(p_srvc_cb, p_attr->s_handle, &p_attr->uuid, + p_attr->prop, p_attr->incl_srvc_handle, + p_attr->attr_type); + break; } + p_attr++; + num_attr--; + } } /******************************************************************************* @@ -1403,19 +1323,19 @@ void bta_gattc_rebuild_cache(tBTA_GATTC_SERV *p_srvc_cb, uint16_t num_attr, * Returns None. * ******************************************************************************/ -void bta_gattc_fill_nv_attr(tBTA_GATTC_NV_ATTR *p_attr, uint8_t type, uint16_t s_handle, - uint16_t e_handle, tBT_UUID uuid, uint8_t prop, uint16_t incl_srvc_handle, - bool is_primary) -{ - p_attr->s_handle = s_handle; - p_attr->e_handle = e_handle; - p_attr->attr_type = type; - p_attr->is_primary = is_primary; - p_attr->id = 0; - p_attr->prop = prop; - p_attr->incl_srvc_handle = incl_srvc_handle; - - memcpy(&p_attr->uuid, &uuid, sizeof(tBT_UUID)); +void bta_gattc_fill_nv_attr(tBTA_GATTC_NV_ATTR* p_attr, uint8_t type, + uint16_t s_handle, uint16_t e_handle, tBT_UUID uuid, + uint8_t prop, uint16_t incl_srvc_handle, + bool is_primary) { + p_attr->s_handle = s_handle; + p_attr->e_handle = e_handle; + p_attr->attr_type = type; + p_attr->is_primary = is_primary; + p_attr->id = 0; + p_attr->prop = prop; + p_attr->incl_srvc_handle = incl_srvc_handle; + + memcpy(&p_attr->uuid, &uuid, sizeof(tBT_UUID)); } /******************************************************************************* @@ -1427,87 +1347,71 @@ void bta_gattc_fill_nv_attr(tBTA_GATTC_NV_ATTR *p_attr, uint8_t type, uint16_t s * Returns None. * ******************************************************************************/ -void bta_gattc_cache_save(tBTA_GATTC_SERV *p_srvc_cb, uint16_t conn_id) -{ - if (!p_srvc_cb->p_srvc_cache || list_is_empty(p_srvc_cb->p_srvc_cache)) - return; - - int i = 0; - size_t db_size = bta_gattc_get_db_size(p_srvc_cb->p_srvc_cache, 0x0000, 0xFFFF); - tBTA_GATTC_NV_ATTR *nv_attr = (tBTA_GATTC_NV_ATTR*) osi_malloc(db_size * sizeof(tBTA_GATTC_NV_ATTR)); - - for (list_node_t *sn = list_begin(p_srvc_cb->p_srvc_cache); - sn != list_end(p_srvc_cb->p_srvc_cache); sn = list_next(sn)) { - tBTA_GATTC_SERVICE *p_cur_srvc = (tBTA_GATTC_SERVICE*) list_node(sn); - - bta_gattc_fill_nv_attr(&nv_attr[i++], - BTA_GATTC_ATTR_TYPE_SRVC, - p_cur_srvc->s_handle, - p_cur_srvc->e_handle, - p_cur_srvc->uuid, - 0 /* properties */, - 0 /* incl_srvc_handle */, - p_cur_srvc->is_primary); +void bta_gattc_cache_save(tBTA_GATTC_SERV* p_srvc_cb, uint16_t conn_id) { + if (!p_srvc_cb->p_srvc_cache || list_is_empty(p_srvc_cb->p_srvc_cache)) + return; + + int i = 0; + size_t db_size = + bta_gattc_get_db_size(p_srvc_cb->p_srvc_cache, 0x0000, 0xFFFF); + tBTA_GATTC_NV_ATTR* nv_attr = + (tBTA_GATTC_NV_ATTR*)osi_malloc(db_size * sizeof(tBTA_GATTC_NV_ATTR)); + + for (list_node_t* sn = list_begin(p_srvc_cb->p_srvc_cache); + sn != list_end(p_srvc_cb->p_srvc_cache); sn = list_next(sn)) { + tBTA_GATTC_SERVICE* p_cur_srvc = (tBTA_GATTC_SERVICE*)list_node(sn); + + bta_gattc_fill_nv_attr(&nv_attr[i++], BTA_GATTC_ATTR_TYPE_SRVC, + p_cur_srvc->s_handle, p_cur_srvc->e_handle, + p_cur_srvc->uuid, 0 /* properties */, + 0 /* incl_srvc_handle */, p_cur_srvc->is_primary); + } + + for (list_node_t* sn = list_begin(p_srvc_cb->p_srvc_cache); + sn != list_end(p_srvc_cb->p_srvc_cache); sn = list_next(sn)) { + tBTA_GATTC_SERVICE* p_cur_srvc = (tBTA_GATTC_SERVICE*)list_node(sn); + + if (!p_cur_srvc->characteristics || + list_is_empty(p_cur_srvc->characteristics)) + continue; + + for (list_node_t* cn = list_begin(p_cur_srvc->characteristics); + cn != list_end(p_cur_srvc->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); + + bta_gattc_fill_nv_attr( + &nv_attr[i++], BTA_GATTC_ATTR_TYPE_CHAR, p_char->handle, 0, + p_char->uuid, p_char->properties, 0 /* incl_srvc_handle */, false); + + if (!p_char->descriptors || list_is_empty(p_char->descriptors)) continue; + + for (list_node_t* dn = list_begin(p_char->descriptors); + dn != list_end(p_char->descriptors); dn = list_next(dn)) { + tBTA_GATTC_DESCRIPTOR* p_desc = (tBTA_GATTC_DESCRIPTOR*)list_node(dn); + + bta_gattc_fill_nv_attr( + &nv_attr[i++], BTA_GATTC_ATTR_TYPE_CHAR_DESCR, p_desc->handle, 0, + p_desc->uuid, 0 /* properties */, 0 /* incl_srvc_handle */, false); + } } - for (list_node_t *sn = list_begin(p_srvc_cb->p_srvc_cache); - sn != list_end(p_srvc_cb->p_srvc_cache); sn = list_next(sn)) { - tBTA_GATTC_SERVICE *p_cur_srvc = (tBTA_GATTC_SERVICE*) list_node(sn); - - if (!p_cur_srvc->characteristics || list_is_empty(p_cur_srvc->characteristics)) - continue; - - for (list_node_t *cn = list_begin(p_cur_srvc->characteristics); - cn != list_end(p_cur_srvc->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); - - bta_gattc_fill_nv_attr(&nv_attr[i++], - BTA_GATTC_ATTR_TYPE_CHAR, - p_char->handle, - 0, - p_char->uuid, - p_char->properties, - 0 /* incl_srvc_handle */, - false); - - if (!p_char->descriptors || list_is_empty(p_char->descriptors)) - continue; - - for (list_node_t *dn = list_begin(p_char->descriptors); - dn != list_end(p_char->descriptors); dn = list_next(dn)) { - tBTA_GATTC_DESCRIPTOR *p_desc = (tBTA_GATTC_DESCRIPTOR*) list_node(dn); - - bta_gattc_fill_nv_attr(&nv_attr[i++], - BTA_GATTC_ATTR_TYPE_CHAR_DESCR, - p_desc->handle, - 0, - p_desc->uuid, - 0 /* properties */, - 0 /* incl_srvc_handle */, - false); - } - } + if (!p_cur_srvc->included_svc || list_is_empty(p_cur_srvc->included_svc)) + continue; - if (!p_cur_srvc->included_svc || list_is_empty(p_cur_srvc->included_svc)) - continue; - - for (list_node_t *an = list_begin(p_cur_srvc->included_svc); - an != list_end(p_cur_srvc->included_svc); an = list_next(an)) { - tBTA_GATTC_INCLUDED_SVC *p_isvc = (tBTA_GATTC_INCLUDED_SVC*) list_node(an); - - bta_gattc_fill_nv_attr(&nv_attr[i++], - BTA_GATTC_ATTR_TYPE_INCL_SRVC, - p_isvc->handle, - 0, - p_isvc->uuid, - 0 /* properties */, - p_isvc->included_service->s_handle, - false); - } + for (list_node_t* an = list_begin(p_cur_srvc->included_svc); + an != list_end(p_cur_srvc->included_svc); an = list_next(an)) { + tBTA_GATTC_INCLUDED_SVC* p_isvc = (tBTA_GATTC_INCLUDED_SVC*)list_node(an); + + bta_gattc_fill_nv_attr(&nv_attr[i++], BTA_GATTC_ATTR_TYPE_INCL_SRVC, + p_isvc->handle, 0, p_isvc->uuid, + 0 /* properties */, + p_isvc->included_service->s_handle, false); } + } - bta_gattc_cache_write(p_srvc_cb->server_bda, db_size, nv_attr); - osi_free(nv_attr); + bta_gattc_cache_write(p_srvc_cb->server_bda, db_size, nv_attr); + osi_free(nv_attr); } /******************************************************************************* @@ -1521,61 +1425,63 @@ void bta_gattc_cache_save(tBTA_GATTC_SERV *p_srvc_cb, uint16_t conn_id) * Returns true on success, false otherwise * ******************************************************************************/ -bool bta_gattc_cache_load(tBTA_GATTC_CLCB *p_clcb) -{ - char fname[255] = {0}; - bta_gattc_generate_cache_file_name(fname, sizeof(fname), p_clcb->p_srcb->server_bda); - - FILE *fd = fopen(fname, "rb"); - if (!fd) { - APPL_TRACE_ERROR("%s: can't open GATT cache file %s for reading, error: %s", - __func__, fname, strerror(errno)); - return false; - } - - uint16_t cache_ver = 0; - tBTA_GATTC_NV_ATTR *attr = NULL; - bool success = false; - uint16_t num_attr = 0; - - if (fread(&cache_ver, sizeof(uint16_t), 1, fd) != 1) { - APPL_TRACE_ERROR("%s: can't read GATT cache version from: %s", __func__, fname); - goto done; - } - - if (cache_ver != GATT_CACHE_VERSION) { - APPL_TRACE_ERROR("%s: wrong GATT cache version: %s", __func__, fname); - goto done; - } - - - if (fread(&num_attr, sizeof(uint16_t), 1, fd) != 1) { - APPL_TRACE_ERROR("%s: can't read number of GATT attributes: %s", __func__, fname); - goto done; - } - - attr = (tBTA_GATTC_NV_ATTR*) osi_malloc(sizeof(tBTA_GATTC_NV_ATTR) * num_attr); - - if (fread(attr, sizeof(tBTA_GATTC_NV_ATTR), 0xFF, fd) != num_attr) { - APPL_TRACE_ERROR("%s: can't read GATT attributes: %s", __func__, fname); - goto done; - } - - bta_gattc_rebuild_cache(p_clcb->p_srcb, num_attr, attr); - - success = true; +bool bta_gattc_cache_load(tBTA_GATTC_CLCB* p_clcb) { + char fname[255] = {0}; + bta_gattc_generate_cache_file_name(fname, sizeof(fname), + p_clcb->p_srcb->server_bda); + + FILE* fd = fopen(fname, "rb"); + if (!fd) { + APPL_TRACE_ERROR("%s: can't open GATT cache file %s for reading, error: %s", + __func__, fname, strerror(errno)); + return false; + } + + uint16_t cache_ver = 0; + tBTA_GATTC_NV_ATTR* attr = NULL; + bool success = false; + uint16_t num_attr = 0; + + if (fread(&cache_ver, sizeof(uint16_t), 1, fd) != 1) { + APPL_TRACE_ERROR("%s: can't read GATT cache version from: %s", __func__, + fname); + goto done; + } + + if (cache_ver != GATT_CACHE_VERSION) { + APPL_TRACE_ERROR("%s: wrong GATT cache version: %s", __func__, fname); + goto done; + } + + if (fread(&num_attr, sizeof(uint16_t), 1, fd) != 1) { + APPL_TRACE_ERROR("%s: can't read number of GATT attributes: %s", __func__, + fname); + goto done; + } + + attr = (tBTA_GATTC_NV_ATTR*)osi_malloc(sizeof(tBTA_GATTC_NV_ATTR) * num_attr); + + if (fread(attr, sizeof(tBTA_GATTC_NV_ATTR), 0xFF, fd) != num_attr) { + APPL_TRACE_ERROR("%s: can't read GATT attributes: %s", __func__, fname); + goto done; + } + + bta_gattc_rebuild_cache(p_clcb->p_srcb, num_attr, attr); + + success = true; done: - osi_free(attr); - fclose(fd); - return success; + osi_free(attr); + fclose(fd); + return success; } /******************************************************************************* * * Function bta_gattc_cache_write * - * Description This callout function is executed by GATT when a server cache + * Description This callout function is executed by GATT when a server + *cache * is available to save. * * Parameter server_bda: server bd address of this cache belongs to @@ -1585,37 +1491,39 @@ done: * ******************************************************************************/ static void bta_gattc_cache_write(BD_ADDR server_bda, uint16_t num_attr, - tBTA_GATTC_NV_ATTR *attr) -{ - char fname[255] = {0}; - bta_gattc_generate_cache_file_name(fname, sizeof(fname), server_bda); - - FILE *fd = fopen(fname, "wb"); - if (!fd) { - APPL_TRACE_ERROR("%s: can't open GATT cache file for writing: %s", __func__, fname); - return; - } - - uint16_t cache_ver = GATT_CACHE_VERSION; - if (fwrite(&cache_ver, sizeof(uint16_t), 1, fd) != 1) { - APPL_TRACE_ERROR("%s: can't write GATT cache version: %s", __func__, fname); - fclose(fd); - return; - } + tBTA_GATTC_NV_ATTR* attr) { + char fname[255] = {0}; + bta_gattc_generate_cache_file_name(fname, sizeof(fname), server_bda); + + FILE* fd = fopen(fname, "wb"); + if (!fd) { + APPL_TRACE_ERROR("%s: can't open GATT cache file for writing: %s", __func__, + fname); + return; + } - if (fwrite(&num_attr, sizeof(uint16_t), 1, fd) != 1) { - APPL_TRACE_ERROR("%s: can't write GATT cache attribute count: %s", __func__, fname); - fclose(fd); - return; - } + uint16_t cache_ver = GATT_CACHE_VERSION; + if (fwrite(&cache_ver, sizeof(uint16_t), 1, fd) != 1) { + APPL_TRACE_ERROR("%s: can't write GATT cache version: %s", __func__, fname); + fclose(fd); + return; + } - if (fwrite(attr, sizeof(tBTA_GATTC_NV_ATTR), num_attr, fd) != num_attr) { - APPL_TRACE_ERROR("%s: can't write GATT cache attributes: %s", __func__, fname); - fclose(fd); - return; - } + if (fwrite(&num_attr, sizeof(uint16_t), 1, fd) != 1) { + APPL_TRACE_ERROR("%s: can't write GATT cache attribute count: %s", __func__, + fname); + fclose(fd); + return; + } + if (fwrite(attr, sizeof(tBTA_GATTC_NV_ATTR), num_attr, fd) != num_attr) { + APPL_TRACE_ERROR("%s: can't write GATT cache attributes: %s", __func__, + fname); fclose(fd); + return; + } + + fclose(fd); } /******************************************************************************* @@ -1630,12 +1538,10 @@ static void bta_gattc_cache_write(BD_ADDR server_bda, uint16_t num_attr, * Returns void. * ******************************************************************************/ -void bta_gattc_cache_reset(BD_ADDR server_bda) -{ - BTIF_TRACE_DEBUG("%s", __func__); - char fname[255] = {0}; - bta_gattc_generate_cache_file_name(fname, sizeof(fname), server_bda); - unlink(fname); +void bta_gattc_cache_reset(BD_ADDR server_bda) { + BTIF_TRACE_DEBUG("%s", __func__); + char fname[255] = {0}; + bta_gattc_generate_cache_file_name(fname, sizeof(fname), server_bda); + unlink(fname); } #endif /* BTA_GATT_INCLUDED */ - diff --git a/system/bta/gatt/bta_gattc_int.h b/system/bta/gatt/bta_gattc_int.h index 04ac8dabf44..53c56705bfe 100644 --- a/system/bta/gatt/bta_gattc_int.h +++ b/system/bta/gatt/bta_gattc_int.h @@ -26,460 +26,479 @@ #include "bt_target.h" -#include "osi/include/fixed_queue.h" -#include "bta_sys.h" #include "bta_gatt_api.h" +#include "bta_sys.h" +#include "osi/include/fixed_queue.h" #include "bt_common.h" /***************************************************************************** * Constants and data types ****************************************************************************/ -enum -{ - BTA_GATTC_API_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_GATTC), - BTA_GATTC_INT_OPEN_FAIL_EVT, - BTA_GATTC_API_CANCEL_OPEN_EVT, - BTA_GATTC_INT_CANCEL_OPEN_OK_EVT, - - BTA_GATTC_API_READ_EVT, - BTA_GATTC_API_WRITE_EVT, - BTA_GATTC_API_EXEC_EVT, - BTA_GATTC_API_CFG_MTU_EVT, - - BTA_GATTC_API_CLOSE_EVT, - - BTA_GATTC_API_SEARCH_EVT, - BTA_GATTC_API_CONFIRM_EVT, - BTA_GATTC_API_READ_MULTI_EVT, - BTA_GATTC_API_REFRESH_EVT, - - BTA_GATTC_INT_CONN_EVT, - BTA_GATTC_INT_DISCOVER_EVT, - BTA_GATTC_DISCOVER_CMPL_EVT, - BTA_GATTC_OP_CMPL_EVT, - BTA_GATTC_INT_DISCONN_EVT, - - BTA_GATTC_INT_START_IF_EVT, - BTA_GATTC_API_REG_EVT, - BTA_GATTC_API_DEREG_EVT, - BTA_GATTC_API_DISABLE_EVT, - BTA_GATTC_ENC_CMPL_EVT +enum { + BTA_GATTC_API_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_GATTC), + BTA_GATTC_INT_OPEN_FAIL_EVT, + BTA_GATTC_API_CANCEL_OPEN_EVT, + BTA_GATTC_INT_CANCEL_OPEN_OK_EVT, + + BTA_GATTC_API_READ_EVT, + BTA_GATTC_API_WRITE_EVT, + BTA_GATTC_API_EXEC_EVT, + BTA_GATTC_API_CFG_MTU_EVT, + + BTA_GATTC_API_CLOSE_EVT, + + BTA_GATTC_API_SEARCH_EVT, + BTA_GATTC_API_CONFIRM_EVT, + BTA_GATTC_API_READ_MULTI_EVT, + BTA_GATTC_API_REFRESH_EVT, + + BTA_GATTC_INT_CONN_EVT, + BTA_GATTC_INT_DISCOVER_EVT, + BTA_GATTC_DISCOVER_CMPL_EVT, + BTA_GATTC_OP_CMPL_EVT, + BTA_GATTC_INT_DISCONN_EVT, + + BTA_GATTC_INT_START_IF_EVT, + BTA_GATTC_API_REG_EVT, + BTA_GATTC_API_DEREG_EVT, + BTA_GATTC_API_DISABLE_EVT, + BTA_GATTC_ENC_CMPL_EVT }; typedef uint16_t tBTA_GATTC_INT_EVT; -#define BTA_GATTC_SERVICE_CHANGED_LEN 4 +#define BTA_GATTC_SERVICE_CHANGED_LEN 4 /* max client application GATTC can support */ -#ifndef BTA_GATTC_CL_MAX -#define BTA_GATTC_CL_MAX 32 +#ifndef BTA_GATTC_CL_MAX +#define BTA_GATTC_CL_MAX 32 #endif /* max known devices GATTC can support */ -#ifndef BTA_GATTC_KNOWN_SR_MAX -#define BTA_GATTC_KNOWN_SR_MAX 10 +#ifndef BTA_GATTC_KNOWN_SR_MAX +#define BTA_GATTC_KNOWN_SR_MAX 10 #endif -#define BTA_GATTC_CONN_MAX GATT_MAX_PHY_CHANNEL +#define BTA_GATTC_CONN_MAX GATT_MAX_PHY_CHANNEL #ifndef BTA_GATTC_CLCB_MAX - #define BTA_GATTC_CLCB_MAX GATT_CL_MAX_LCB +#define BTA_GATTC_CLCB_MAX GATT_CL_MAX_LCB #endif -#define BTA_GATTC_WRITE_PREPARE GATT_WRITE_PREPARE - +#define BTA_GATTC_WRITE_PREPARE GATT_WRITE_PREPARE /* internal strucutre for GATTC register API */ -typedef struct -{ - BT_HDR hdr; - tBT_UUID app_uuid; - tBTA_GATTC_CBACK *p_cback; -}tBTA_GATTC_API_REG; - -typedef struct -{ - BT_HDR hdr; - tBTA_GATTC_IF client_if; -}tBTA_GATTC_INT_START_IF; +typedef struct { + BT_HDR hdr; + tBT_UUID app_uuid; + tBTA_GATTC_CBACK* p_cback; +} tBTA_GATTC_API_REG; + +typedef struct { + BT_HDR hdr; + tBTA_GATTC_IF client_if; +} tBTA_GATTC_INT_START_IF; typedef tBTA_GATTC_INT_START_IF tBTA_GATTC_API_DEREG; typedef tBTA_GATTC_INT_START_IF tBTA_GATTC_INT_DEREG; -typedef struct -{ - BT_HDR hdr; - BD_ADDR remote_bda; - tBTA_GATTC_IF client_if; - bool is_direct; - tBTA_TRANSPORT transport; +typedef struct { + BT_HDR hdr; + BD_ADDR remote_bda; + tBTA_GATTC_IF client_if; + bool is_direct; + tBTA_TRANSPORT transport; } tBTA_GATTC_API_OPEN; typedef tBTA_GATTC_API_OPEN tBTA_GATTC_API_CANCEL_OPEN; -typedef struct -{ - BT_HDR hdr; - tBTA_GATT_AUTH_REQ auth_req; - uint16_t handle; - tBTA_GATTC_EVT cmpl_evt; - GATT_READ_OP_CB read_cb; - void* read_cb_data; +typedef struct { + BT_HDR hdr; + tBTA_GATT_AUTH_REQ auth_req; + uint16_t handle; + tBTA_GATTC_EVT cmpl_evt; + GATT_READ_OP_CB read_cb; + void* read_cb_data; } tBTA_GATTC_API_READ; -typedef struct -{ - BT_HDR hdr; - tBTA_GATT_AUTH_REQ auth_req; - uint16_t handle; - tBTA_GATTC_WRITE_TYPE write_type; - uint16_t offset; - uint16_t len; - uint8_t *p_value; - GATT_WRITE_OP_CB write_cb; - void* write_cb_data; -}tBTA_GATTC_API_WRITE; - -typedef struct -{ - BT_HDR hdr; - bool is_execute; -}tBTA_GATTC_API_EXEC; - -typedef struct -{ - BT_HDR hdr; - uint16_t handle; +typedef struct { + BT_HDR hdr; + tBTA_GATT_AUTH_REQ auth_req; + uint16_t handle; + tBTA_GATTC_WRITE_TYPE write_type; + uint16_t offset; + uint16_t len; + uint8_t* p_value; + GATT_WRITE_OP_CB write_cb; + void* write_cb_data; +} tBTA_GATTC_API_WRITE; + +typedef struct { + BT_HDR hdr; + bool is_execute; +} tBTA_GATTC_API_EXEC; + +typedef struct { + BT_HDR hdr; + uint16_t handle; } tBTA_GATTC_API_CONFIRM; typedef tGATT_CL_COMPLETE tBTA_GATTC_CMPL; -typedef struct -{ - BT_HDR hdr; - uint8_t op_code; - tGATT_STATUS status; - tBTA_GATTC_CMPL *p_cmpl; -}tBTA_GATTC_OP_CMPL; - -typedef struct -{ - BT_HDR hdr; - tBT_UUID *p_srvc_uuid; -}tBTA_GATTC_API_SEARCH; - -typedef struct -{ - BT_HDR hdr; - tBTA_GATT_AUTH_REQ auth_req; - uint8_t num_attr; - uint16_t handles[GATT_MAX_READ_MULTI_HANDLES]; -}tBTA_GATTC_API_READ_MULTI; - -typedef struct -{ - BT_HDR hdr; - uint16_t mtu; -}tBTA_GATTC_API_CFG_MTU; - -typedef struct -{ - BT_HDR hdr; - BD_ADDR remote_bda; - tBTA_GATTC_IF client_if; - uint8_t role; - tBT_TRANSPORT transport; - tGATT_DISCONN_REASON reason; -}tBTA_GATTC_INT_CONN; - -typedef struct -{ - BT_HDR hdr; - BD_ADDR remote_bda; - tBTA_GATTC_IF client_if; -}tBTA_GATTC_ENC_CMPL; - -typedef union -{ - BT_HDR hdr; - tBTA_GATTC_API_REG api_reg; - tBTA_GATTC_API_DEREG api_dereg; - tBTA_GATTC_API_OPEN api_conn; - tBTA_GATTC_API_CANCEL_OPEN api_cancel_conn; - tBTA_GATTC_API_READ api_read; - tBTA_GATTC_API_SEARCH api_search; - tBTA_GATTC_API_WRITE api_write; - tBTA_GATTC_API_CONFIRM api_confirm; - tBTA_GATTC_API_EXEC api_exec; - tBTA_GATTC_API_READ_MULTI api_read_multi; - tBTA_GATTC_API_CFG_MTU api_mtu; - tBTA_GATTC_OP_CMPL op_cmpl; - tBTA_GATTC_INT_CONN int_conn; - tBTA_GATTC_ENC_CMPL enc_cmpl; - - tBTA_GATTC_INT_START_IF int_start_if; - tBTA_GATTC_INT_DEREG int_dereg; +typedef struct { + BT_HDR hdr; + uint8_t op_code; + tGATT_STATUS status; + tBTA_GATTC_CMPL* p_cmpl; +} tBTA_GATTC_OP_CMPL; + +typedef struct { + BT_HDR hdr; + tBT_UUID* p_srvc_uuid; +} tBTA_GATTC_API_SEARCH; + +typedef struct { + BT_HDR hdr; + tBTA_GATT_AUTH_REQ auth_req; + uint8_t num_attr; + uint16_t handles[GATT_MAX_READ_MULTI_HANDLES]; +} tBTA_GATTC_API_READ_MULTI; + +typedef struct { + BT_HDR hdr; + uint16_t mtu; +} tBTA_GATTC_API_CFG_MTU; + +typedef struct { + BT_HDR hdr; + BD_ADDR remote_bda; + tBTA_GATTC_IF client_if; + uint8_t role; + tBT_TRANSPORT transport; + tGATT_DISCONN_REASON reason; +} tBTA_GATTC_INT_CONN; + +typedef struct { + BT_HDR hdr; + BD_ADDR remote_bda; + tBTA_GATTC_IF client_if; +} tBTA_GATTC_ENC_CMPL; + +typedef union { + BT_HDR hdr; + tBTA_GATTC_API_REG api_reg; + tBTA_GATTC_API_DEREG api_dereg; + tBTA_GATTC_API_OPEN api_conn; + tBTA_GATTC_API_CANCEL_OPEN api_cancel_conn; + tBTA_GATTC_API_READ api_read; + tBTA_GATTC_API_SEARCH api_search; + tBTA_GATTC_API_WRITE api_write; + tBTA_GATTC_API_CONFIRM api_confirm; + tBTA_GATTC_API_EXEC api_exec; + tBTA_GATTC_API_READ_MULTI api_read_multi; + tBTA_GATTC_API_CFG_MTU api_mtu; + tBTA_GATTC_OP_CMPL op_cmpl; + tBTA_GATTC_INT_CONN int_conn; + tBTA_GATTC_ENC_CMPL enc_cmpl; + + tBTA_GATTC_INT_START_IF int_start_if; + tBTA_GATTC_INT_DEREG int_dereg; } tBTA_GATTC_DATA; - /* GATT server cache on the client */ -typedef struct -{ - tBT_UUID uuid; - uint16_t s_handle; - uint16_t e_handle; - // this field is set only for characteristic - uint16_t char_decl_handle; - bool is_primary; - tBTA_GATT_CHAR_PROP property; -}tBTA_GATTC_ATTR_REC; - +typedef struct { + tBT_UUID uuid; + uint16_t s_handle; + uint16_t e_handle; + // this field is set only for characteristic + uint16_t char_decl_handle; + bool is_primary; + tBTA_GATT_CHAR_PROP property; +} tBTA_GATTC_ATTR_REC; -#define BTA_GATTC_MAX_CACHE_CHAR 40 -#define BTA_GATTC_ATTR_LIST_SIZE (BTA_GATTC_MAX_CACHE_CHAR * sizeof(tBTA_GATTC_ATTR_REC)) +#define BTA_GATTC_MAX_CACHE_CHAR 40 +#define BTA_GATTC_ATTR_LIST_SIZE \ + (BTA_GATTC_MAX_CACHE_CHAR * sizeof(tBTA_GATTC_ATTR_REC)) #ifndef BTA_GATTC_CACHE_SRVR_SIZE - #define BTA_GATTC_CACHE_SRVR_SIZE 600 +#define BTA_GATTC_CACHE_SRVR_SIZE 600 #endif -enum -{ - BTA_GATTC_IDLE_ST = 0, /* Idle */ - BTA_GATTC_W4_CONN_ST, /* Wait for connection - (optional) */ - BTA_GATTC_CONN_ST, /* connected state */ - BTA_GATTC_DISCOVER_ST /* discover is in progress */ +enum { + BTA_GATTC_IDLE_ST = 0, /* Idle */ + BTA_GATTC_W4_CONN_ST, /* Wait for connection - (optional) */ + BTA_GATTC_CONN_ST, /* connected state */ + BTA_GATTC_DISCOVER_ST /* discover is in progress */ }; typedef uint8_t tBTA_GATTC_STATE; -typedef struct -{ - bool in_use; - BD_ADDR server_bda; - bool connected; +typedef struct { + bool in_use; + BD_ADDR server_bda; + bool connected; -#define BTA_GATTC_SERV_IDLE 0 -#define BTA_GATTC_SERV_LOAD 1 -#define BTA_GATTC_SERV_SAVE 2 -#define BTA_GATTC_SERV_DISC 3 +#define BTA_GATTC_SERV_IDLE 0 +#define BTA_GATTC_SERV_LOAD 1 +#define BTA_GATTC_SERV_SAVE 2 +#define BTA_GATTC_SERV_DISC 3 #define BTA_GATTC_SERV_DISC_ACT 4 - uint8_t state; - - list_t *p_srvc_cache; /* list of tBTA_GATTC_SERVICE */ - uint8_t update_count; /* indication received */ - uint8_t num_clcb; /* number of associated CLCB */ + uint8_t state; + list_t* p_srvc_cache; /* list of tBTA_GATTC_SERVICE */ + uint8_t update_count; /* indication received */ + uint8_t num_clcb; /* number of associated CLCB */ - tBTA_GATTC_ATTR_REC *p_srvc_list; - uint8_t cur_srvc_idx; - uint8_t cur_char_idx; - uint8_t next_avail_idx; - uint8_t total_srvc; - uint8_t total_char; + tBTA_GATTC_ATTR_REC* p_srvc_list; + uint8_t cur_srvc_idx; + uint8_t cur_char_idx; + uint8_t next_avail_idx; + uint8_t total_srvc; + uint8_t total_char; - uint8_t srvc_hdl_chg; /* service handle change indication pending */ - uint16_t attr_index; /* cahce NV saving/loading attribute index */ + uint8_t srvc_hdl_chg; /* service handle change indication pending */ + uint16_t attr_index; /* cahce NV saving/loading attribute index */ - uint16_t mtu; + uint16_t mtu; } tBTA_GATTC_SERV; #ifndef BTA_GATTC_NOTIF_REG_MAX -#define BTA_GATTC_NOTIF_REG_MAX 15 +#define BTA_GATTC_NOTIF_REG_MAX 15 #endif -typedef struct -{ - bool in_use; - BD_ADDR remote_bda; - uint16_t handle; -}tBTA_GATTC_NOTIF_REG; - -typedef struct -{ - tBTA_GATTC_CBACK *p_cback; - bool in_use; - tBTA_GATTC_IF client_if; /* client interface with BTE stack for this application */ - uint8_t num_clcb; /* number of associated CLCB */ - bool dereg_pending; - tBT_UUID app_uuid; - tBTA_GATTC_NOTIF_REG notif_reg[BTA_GATTC_NOTIF_REG_MAX]; -}tBTA_GATTC_RCB; - -/* client channel is a mapping between a BTA client(cl_id) and a remote BD address */ -typedef struct -{ - uint16_t bta_conn_id; /* client channel ID, unique for clcb */ - BD_ADDR bda; - tBTA_TRANSPORT transport; /* channel transport */ - tBTA_GATTC_RCB *p_rcb; /* pointer to the registration CB */ - tBTA_GATTC_SERV *p_srcb; /* server cache CB */ - tBTA_GATTC_DATA *p_q_cmd; /* command in queue waiting for execution */ - -#define BTA_GATTC_NO_SCHEDULE 0 -#define BTA_GATTC_DISC_WAITING 0x01 -#define BTA_GATTC_REQ_WAITING 0x10 - - uint8_t auto_update; /* auto update is waiting */ - bool disc_active; - bool in_use; - tBTA_GATTC_STATE state; - tBTA_GATT_STATUS status; - uint16_t reason; +typedef struct { + bool in_use; + BD_ADDR remote_bda; + uint16_t handle; +} tBTA_GATTC_NOTIF_REG; + +typedef struct { + tBTA_GATTC_CBACK* p_cback; + bool in_use; + tBTA_GATTC_IF + client_if; /* client interface with BTE stack for this application */ + uint8_t num_clcb; /* number of associated CLCB */ + bool dereg_pending; + tBT_UUID app_uuid; + tBTA_GATTC_NOTIF_REG notif_reg[BTA_GATTC_NOTIF_REG_MAX]; +} tBTA_GATTC_RCB; + +/* client channel is a mapping between a BTA client(cl_id) and a remote BD + * address */ +typedef struct { + uint16_t bta_conn_id; /* client channel ID, unique for clcb */ + BD_ADDR bda; + tBTA_TRANSPORT transport; /* channel transport */ + tBTA_GATTC_RCB* p_rcb; /* pointer to the registration CB */ + tBTA_GATTC_SERV* p_srcb; /* server cache CB */ + tBTA_GATTC_DATA* p_q_cmd; /* command in queue waiting for execution */ + +#define BTA_GATTC_NO_SCHEDULE 0 +#define BTA_GATTC_DISC_WAITING 0x01 +#define BTA_GATTC_REQ_WAITING 0x10 + + uint8_t auto_update; /* auto update is waiting */ + bool disc_active; + bool in_use; + tBTA_GATTC_STATE state; + tBTA_GATT_STATUS status; + uint16_t reason; } tBTA_GATTC_CLCB; /* back ground connection tracking information */ #if GATT_MAX_APPS <= 8 -typedef uint8_t tBTA_GATTC_CIF_MASK ; +typedef uint8_t tBTA_GATTC_CIF_MASK; #elif GATT_MAX_APPS <= 16 typedef uint16_t tBTA_GATTC_CIF_MASK; #elif GATT_MAX_APPS <= 32 typedef uint32_t tBTA_GATTC_CIF_MASK; #endif -typedef struct -{ - bool in_use; - BD_ADDR remote_bda; - tBTA_GATTC_CIF_MASK cif_mask; - -}tBTA_GATTC_BG_TCK; - -typedef struct -{ - bool in_use; - BD_ADDR remote_bda; -}tBTA_GATTC_CONN; - -enum -{ - BTA_GATTC_STATE_DISABLED, - BTA_GATTC_STATE_ENABLING, - BTA_GATTC_STATE_ENABLED, - BTA_GATTC_STATE_DISABLING +typedef struct { + bool in_use; + BD_ADDR remote_bda; + tBTA_GATTC_CIF_MASK cif_mask; + +} tBTA_GATTC_BG_TCK; + +typedef struct { + bool in_use; + BD_ADDR remote_bda; +} tBTA_GATTC_CONN; + +enum { + BTA_GATTC_STATE_DISABLED, + BTA_GATTC_STATE_ENABLING, + BTA_GATTC_STATE_ENABLED, + BTA_GATTC_STATE_DISABLING }; -typedef struct -{ - uint8_t state; +typedef struct { + uint8_t state; - tBTA_GATTC_CONN conn_track[BTA_GATTC_CONN_MAX]; - tBTA_GATTC_BG_TCK bg_track[BTA_GATTC_KNOWN_SR_MAX]; - tBTA_GATTC_RCB cl_rcb[BTA_GATTC_CL_MAX]; + tBTA_GATTC_CONN conn_track[BTA_GATTC_CONN_MAX]; + tBTA_GATTC_BG_TCK bg_track[BTA_GATTC_KNOWN_SR_MAX]; + tBTA_GATTC_RCB cl_rcb[BTA_GATTC_CL_MAX]; - tBTA_GATTC_CLCB clcb[BTA_GATTC_CLCB_MAX]; - tBTA_GATTC_SERV known_server[BTA_GATTC_KNOWN_SR_MAX]; -}tBTA_GATTC_CB; + tBTA_GATTC_CLCB clcb[BTA_GATTC_CLCB_MAX]; + tBTA_GATTC_SERV known_server[BTA_GATTC_KNOWN_SR_MAX]; +} tBTA_GATTC_CB; /***************************************************************************** * Global data ****************************************************************************/ /* GATTC control block */ -extern tBTA_GATTC_CB bta_gattc_cb; +extern tBTA_GATTC_CB bta_gattc_cb; /***************************************************************************** * Function prototypes ****************************************************************************/ -extern bool bta_gattc_hdl_event(BT_HDR *p_msg); -extern bool bta_gattc_sm_execute(tBTA_GATTC_CLCB *p_clcb, uint16_t event, tBTA_GATTC_DATA *p_data); +extern bool bta_gattc_hdl_event(BT_HDR* p_msg); +extern bool bta_gattc_sm_execute(tBTA_GATTC_CLCB* p_clcb, uint16_t event, + tBTA_GATTC_DATA* p_data); /* function processed outside SM */ extern void bta_gattc_disable(); -extern void bta_gattc_register(tBTA_GATTC_DATA *p_data); -extern void bta_gattc_start_if(tBTA_GATTC_DATA *p_data); -extern void bta_gattc_process_api_open (tBTA_GATTC_DATA * p_msg); -extern void bta_gattc_process_api_open_cancel (tBTA_GATTC_DATA * p_msg); -extern void bta_gattc_deregister(tBTA_GATTC_RCB *p_clreg); -extern void bta_gattc_process_enc_cmpl(tBTA_GATTC_DATA *p_msg); +extern void bta_gattc_register(tBTA_GATTC_DATA* p_data); +extern void bta_gattc_start_if(tBTA_GATTC_DATA* p_data); +extern void bta_gattc_process_api_open(tBTA_GATTC_DATA* p_msg); +extern void bta_gattc_process_api_open_cancel(tBTA_GATTC_DATA* p_msg); +extern void bta_gattc_deregister(tBTA_GATTC_RCB* p_clreg); +extern void bta_gattc_process_enc_cmpl(tBTA_GATTC_DATA* p_msg); /* function within state machine */ -extern void bta_gattc_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_open_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_open_error(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); - -extern void bta_gattc_cancel_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); - -extern void bta_gattc_conn(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); - -extern void bta_gattc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_close_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_disc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); - -extern void bta_gattc_start_discover(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_read(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_write(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_op_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_q_cmd(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_search(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_confirm(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_execute(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_read_multi(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_ci_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_ci_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_ignore_op_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); -extern void bta_gattc_restart_discover(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA * p_msg); -extern void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN *p_data, tBTA_GATTC_RCB *p_clreg); -extern void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN *p_data); -extern void bta_gattc_send_open_cback( tBTA_GATTC_RCB *p_clreg, tBTA_GATT_STATUS status, - BD_ADDR remote_bda, uint16_t conn_id, tBTA_TRANSPORT transport, uint16_t mtu); -extern void bta_gattc_process_api_refresh(tBTA_GATTC_DATA * p_msg); -extern void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); +extern void bta_gattc_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_open_fail(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_open_error(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); + +extern void bta_gattc_cancel_open(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); + +extern void bta_gattc_conn(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); + +extern void bta_gattc_close(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_close_fail(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_disc_close(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); + +extern void bta_gattc_start_discover(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_read(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_write(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_q_cmd(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_search(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_fail(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_confirm(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_execute(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_read_multi(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_ci_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); +extern void bta_gattc_ci_close(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_ignore_op_cmpl(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); +extern void bta_gattc_restart_discover(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_msg); +extern void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN* p_data, + tBTA_GATTC_RCB* p_clreg); +extern void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN* p_data); +extern void bta_gattc_send_open_cback(tBTA_GATTC_RCB* p_clreg, + tBTA_GATT_STATUS status, + BD_ADDR remote_bda, uint16_t conn_id, + tBTA_TRANSPORT transport, uint16_t mtu); +extern void bta_gattc_process_api_refresh(tBTA_GATTC_DATA* p_msg); +extern void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); #if (BLE_INCLUDED == TRUE) -extern void bta_gattc_listen(tBTA_GATTC_DATA * p_msg); -extern void bta_gattc_broadcast(tBTA_GATTC_DATA * p_msg); +extern void bta_gattc_listen(tBTA_GATTC_DATA* p_msg); +extern void bta_gattc_broadcast(tBTA_GATTC_DATA* p_msg); #endif /* utility functions */ -extern tBTA_GATTC_CLCB * bta_gattc_find_clcb_by_cif (uint8_t client_if, BD_ADDR remote_bda, tBTA_TRANSPORT transport); -extern tBTA_GATTC_CLCB * bta_gattc_find_clcb_by_conn_id (uint16_t conn_id); -extern tBTA_GATTC_CLCB * bta_gattc_clcb_alloc(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, tBTA_TRANSPORT transport); -extern void bta_gattc_clcb_dealloc(tBTA_GATTC_CLCB *p_clcb); -extern tBTA_GATTC_CLCB * bta_gattc_find_alloc_clcb(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, tBTA_TRANSPORT transport); -extern tBTA_GATTC_RCB * bta_gattc_cl_get_regcb(uint8_t client_if); -extern tBTA_GATTC_SERV * bta_gattc_find_srcb(BD_ADDR bda); -extern tBTA_GATTC_SERV * bta_gattc_srcb_alloc(BD_ADDR bda); -extern tBTA_GATTC_SERV * bta_gattc_find_scb_by_cid (uint16_t conn_id); -extern tBTA_GATTC_CLCB * bta_gattc_find_int_conn_clcb(tBTA_GATTC_DATA *p_msg); -extern tBTA_GATTC_CLCB * bta_gattc_find_int_disconn_clcb(tBTA_GATTC_DATA *p_msg); - -extern bool bta_gattc_enqueue(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); - -extern bool bta_gattc_uuid_compare (const tBT_UUID *p_src, const tBT_UUID *p_tar, bool is_precise); -extern bool bta_gattc_check_notif_registry(tBTA_GATTC_RCB *p_clreg, tBTA_GATTC_SERV *p_srcb, tBTA_GATTC_NOTIFY *p_notify); -extern bool bta_gattc_mark_bg_conn (tBTA_GATTC_IF client_if, BD_ADDR_PTR remote_bda, bool add); -extern bool bta_gattc_check_bg_conn (tBTA_GATTC_IF client_if, BD_ADDR remote_bda, uint8_t role); +extern tBTA_GATTC_CLCB* bta_gattc_find_clcb_by_cif(uint8_t client_if, + BD_ADDR remote_bda, + tBTA_TRANSPORT transport); +extern tBTA_GATTC_CLCB* bta_gattc_find_clcb_by_conn_id(uint16_t conn_id); +extern tBTA_GATTC_CLCB* bta_gattc_clcb_alloc(tBTA_GATTC_IF client_if, + BD_ADDR remote_bda, + tBTA_TRANSPORT transport); +extern void bta_gattc_clcb_dealloc(tBTA_GATTC_CLCB* p_clcb); +extern tBTA_GATTC_CLCB* bta_gattc_find_alloc_clcb(tBTA_GATTC_IF client_if, + BD_ADDR remote_bda, + tBTA_TRANSPORT transport); +extern tBTA_GATTC_RCB* bta_gattc_cl_get_regcb(uint8_t client_if); +extern tBTA_GATTC_SERV* bta_gattc_find_srcb(BD_ADDR bda); +extern tBTA_GATTC_SERV* bta_gattc_srcb_alloc(BD_ADDR bda); +extern tBTA_GATTC_SERV* bta_gattc_find_scb_by_cid(uint16_t conn_id); +extern tBTA_GATTC_CLCB* bta_gattc_find_int_conn_clcb(tBTA_GATTC_DATA* p_msg); +extern tBTA_GATTC_CLCB* bta_gattc_find_int_disconn_clcb(tBTA_GATTC_DATA* p_msg); + +extern bool bta_gattc_enqueue(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); + +extern bool bta_gattc_uuid_compare(const tBT_UUID* p_src, const tBT_UUID* p_tar, + bool is_precise); +extern bool bta_gattc_check_notif_registry(tBTA_GATTC_RCB* p_clreg, + tBTA_GATTC_SERV* p_srcb, + tBTA_GATTC_NOTIFY* p_notify); +extern bool bta_gattc_mark_bg_conn(tBTA_GATTC_IF client_if, + BD_ADDR_PTR remote_bda, bool add); +extern bool bta_gattc_check_bg_conn(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, + uint8_t role); extern uint8_t bta_gattc_num_reg_app(void); -extern void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV *p_srcb, uint16_t conn_id, uint16_t start_handle, uint16_t end_handle); -extern tBTA_GATTC_SERV * bta_gattc_find_srvr_cache(BD_ADDR bda); +extern void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV* p_srcb, + uint16_t conn_id, + uint16_t start_handle, + uint16_t end_handle); +extern tBTA_GATTC_SERV* bta_gattc_find_srvr_cache(BD_ADDR bda); /* discovery functions */ -extern void bta_gattc_disc_res_cback (uint16_t conn_id, tGATT_DISC_TYPE disc_type, tGATT_DISC_RES *p_data); -extern void bta_gattc_disc_cmpl_cback (uint16_t conn_id, tGATT_DISC_TYPE disc_type, tGATT_STATUS status); -extern tBTA_GATT_STATUS bta_gattc_discover_procedure(uint16_t conn_id, tBTA_GATTC_SERV *p_server_cb, uint8_t disc_type); -extern tBTA_GATT_STATUS bta_gattc_discover_pri_service(uint16_t conn_id, tBTA_GATTC_SERV *p_server_cb, uint8_t disc_type); -extern void bta_gattc_search_service(tBTA_GATTC_CLCB *p_clcb, tBT_UUID *p_uuid); +extern void bta_gattc_disc_res_cback(uint16_t conn_id, + tGATT_DISC_TYPE disc_type, + tGATT_DISC_RES* p_data); +extern void bta_gattc_disc_cmpl_cback(uint16_t conn_id, + tGATT_DISC_TYPE disc_type, + tGATT_STATUS status); +extern tBTA_GATT_STATUS bta_gattc_discover_procedure( + uint16_t conn_id, tBTA_GATTC_SERV* p_server_cb, uint8_t disc_type); +extern tBTA_GATT_STATUS bta_gattc_discover_pri_service( + uint16_t conn_id, tBTA_GATTC_SERV* p_server_cb, uint8_t disc_type); +extern void bta_gattc_search_service(tBTA_GATTC_CLCB* p_clcb, tBT_UUID* p_uuid); extern const list_t* bta_gattc_get_services(uint16_t conn_id); -extern const tBTA_GATTC_SERVICE* bta_gattc_get_service_for_handle(uint16_t conn_id, uint16_t handle); -tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic_srcb(tBTA_GATTC_SERV *p_srcb, uint16_t handle); -extern tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic(uint16_t conn_id, uint16_t handle); -extern tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor(uint16_t conn_id, uint16_t handle); -extern void bta_gattc_get_gatt_db(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, btgatt_db_element_t **db, int *count); -extern tBTA_GATT_STATUS bta_gattc_init_cache(tBTA_GATTC_SERV *p_srvc_cb); -extern void bta_gattc_rebuild_cache(tBTA_GATTC_SERV *p_srcv, uint16_t num_attr, tBTA_GATTC_NV_ATTR *attr); -extern void bta_gattc_cache_save(tBTA_GATTC_SERV *p_srvc_cb, uint16_t conn_id); -extern void bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS status); - -extern tBTA_GATTC_CONN * bta_gattc_conn_alloc(BD_ADDR remote_bda); -extern tBTA_GATTC_CONN * bta_gattc_conn_find(BD_ADDR remote_bda); -extern tBTA_GATTC_CONN * bta_gattc_conn_find_alloc(BD_ADDR remote_bda); +extern const tBTA_GATTC_SERVICE* bta_gattc_get_service_for_handle( + uint16_t conn_id, uint16_t handle); +tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic_srcb( + tBTA_GATTC_SERV* p_srcb, uint16_t handle); +extern tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic(uint16_t conn_id, + uint16_t handle); +extern tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor(uint16_t conn_id, + uint16_t handle); +extern void bta_gattc_get_gatt_db(uint16_t conn_id, uint16_t start_handle, + uint16_t end_handle, btgatt_db_element_t** db, + int* count); +extern tBTA_GATT_STATUS bta_gattc_init_cache(tBTA_GATTC_SERV* p_srvc_cb); +extern void bta_gattc_rebuild_cache(tBTA_GATTC_SERV* p_srcv, uint16_t num_attr, + tBTA_GATTC_NV_ATTR* attr); +extern void bta_gattc_cache_save(tBTA_GATTC_SERV* p_srvc_cb, uint16_t conn_id); +extern void bta_gattc_reset_discover_st(tBTA_GATTC_SERV* p_srcb, + tBTA_GATT_STATUS status); + +extern tBTA_GATTC_CONN* bta_gattc_conn_alloc(BD_ADDR remote_bda); +extern tBTA_GATTC_CONN* bta_gattc_conn_find(BD_ADDR remote_bda); +extern tBTA_GATTC_CONN* bta_gattc_conn_find_alloc(BD_ADDR remote_bda); extern bool bta_gattc_conn_dealloc(BD_ADDR remote_bda); -extern bool bta_gattc_cache_load(tBTA_GATTC_CLCB *p_clcb); +extern bool bta_gattc_cache_load(tBTA_GATTC_CLCB* p_clcb); extern void bta_gattc_cache_reset(BD_ADDR server_bda); #endif /* BTA_GATTC_INT_H */ diff --git a/system/bta/gatt/bta_gattc_main.cc b/system/bta/gatt/bta_gattc_main.cc index b69cd59fb31..667b78a7710 100644 --- a/system/bta/gatt/bta_gattc_main.cc +++ b/system/bta/gatt/bta_gattc_main.cc @@ -28,201 +28,247 @@ #include -#include "bta_gattc_int.h" #include "bt_common.h" - +#include "bta_gattc_int.h" /***************************************************************************** * Constants and types ****************************************************************************/ - /* state machine action enumeration list */ -enum -{ - BTA_GATTC_OPEN, - BTA_GATTC_OPEN_FAIL, - BTA_GATTC_OPEN_ERROR, - BTA_GATTC_CANCEL_OPEN, - BTA_GATTC_CANCEL_OPEN_OK, - BTA_GATTC_CANCEL_OPEN_ERROR, - BTA_GATTC_CONN, - BTA_GATTC_START_DISCOVER, - BTA_GATTC_DISC_CMPL, - - BTA_GATTC_Q_CMD, - BTA_GATTC_CLOSE, - BTA_GATTC_CLOSE_FAIL, - BTA_GATTC_READ, - BTA_GATTC_WRITE, - - BTA_GATTC_OP_CMPL, - BTA_GATTC_SEARCH, - BTA_GATTC_FAIL, - BTA_GATTC_CONFIRM, - BTA_GATTC_EXEC, - BTA_GATTC_READ_MULTI, - BTA_GATTC_IGNORE_OP_CMPL, - BTA_GATTC_DISC_CLOSE, - BTA_GATTC_RESTART_DISCOVER, - BTA_GATTC_CFG_MTU, - - BTA_GATTC_IGNORE +enum { + BTA_GATTC_OPEN, + BTA_GATTC_OPEN_FAIL, + BTA_GATTC_OPEN_ERROR, + BTA_GATTC_CANCEL_OPEN, + BTA_GATTC_CANCEL_OPEN_OK, + BTA_GATTC_CANCEL_OPEN_ERROR, + BTA_GATTC_CONN, + BTA_GATTC_START_DISCOVER, + BTA_GATTC_DISC_CMPL, + + BTA_GATTC_Q_CMD, + BTA_GATTC_CLOSE, + BTA_GATTC_CLOSE_FAIL, + BTA_GATTC_READ, + BTA_GATTC_WRITE, + + BTA_GATTC_OP_CMPL, + BTA_GATTC_SEARCH, + BTA_GATTC_FAIL, + BTA_GATTC_CONFIRM, + BTA_GATTC_EXEC, + BTA_GATTC_READ_MULTI, + BTA_GATTC_IGNORE_OP_CMPL, + BTA_GATTC_DISC_CLOSE, + BTA_GATTC_RESTART_DISCOVER, + BTA_GATTC_CFG_MTU, + + BTA_GATTC_IGNORE }; /* type for action functions */ -typedef void (*tBTA_GATTC_ACTION)(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data); +typedef void (*tBTA_GATTC_ACTION)(tBTA_GATTC_CLCB* p_clcb, + tBTA_GATTC_DATA* p_data); /* action function list */ -const tBTA_GATTC_ACTION bta_gattc_action[] = -{ - bta_gattc_open, - bta_gattc_open_fail, - bta_gattc_open_error, - bta_gattc_cancel_open, - bta_gattc_cancel_open_ok, - bta_gattc_cancel_open_error, - bta_gattc_conn, - bta_gattc_start_discover, - bta_gattc_disc_cmpl, - - bta_gattc_q_cmd, - bta_gattc_close, - bta_gattc_close_fail, - bta_gattc_read, - bta_gattc_write, - - bta_gattc_op_cmpl, - bta_gattc_search, - bta_gattc_fail, - bta_gattc_confirm, - bta_gattc_execute, - bta_gattc_read_multi, - bta_gattc_ignore_op_cmpl, - bta_gattc_disc_close, - bta_gattc_restart_discover, - bta_gattc_cfg_mtu -}; - +const tBTA_GATTC_ACTION bta_gattc_action[] = {bta_gattc_open, + bta_gattc_open_fail, + bta_gattc_open_error, + bta_gattc_cancel_open, + bta_gattc_cancel_open_ok, + bta_gattc_cancel_open_error, + bta_gattc_conn, + bta_gattc_start_discover, + bta_gattc_disc_cmpl, + + bta_gattc_q_cmd, + bta_gattc_close, + bta_gattc_close_fail, + bta_gattc_read, + bta_gattc_write, + + bta_gattc_op_cmpl, + bta_gattc_search, + bta_gattc_fail, + bta_gattc_confirm, + bta_gattc_execute, + bta_gattc_read_multi, + bta_gattc_ignore_op_cmpl, + bta_gattc_disc_close, + bta_gattc_restart_discover, + bta_gattc_cfg_mtu}; /* state table information */ -#define BTA_GATTC_ACTIONS 1 /* number of actions */ -#define BTA_GATTC_NEXT_STATE 1 /* position of next state */ -#define BTA_GATTC_NUM_COLS 2 /* number of columns in state tables */ +#define BTA_GATTC_ACTIONS 1 /* number of actions */ +#define BTA_GATTC_NEXT_STATE 1 /* position of next state */ +#define BTA_GATTC_NUM_COLS 2 /* number of columns in state tables */ /* state table for idle state */ -static const uint8_t bta_gattc_st_idle[][BTA_GATTC_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, - -/* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, - -/* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CLOSE_FAIL, BTA_GATTC_IDLE_ST}, - -/* BTA_GATTC_API_SEARCH_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_API_CONFIRM_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_API_READ_MULTI_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_API_REFRESH_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, - -/* BTA_GATTC_INT_CONN_EVT */ {BTA_GATTC_CONN, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_INT_DISCOVER_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_DISCOVER_CMPL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_OP_CMPL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_INT_DISCONN_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, +static const uint8_t bta_gattc_st_idle[][BTA_GATTC_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_IDLE_ST}, + + /* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_IDLE_ST}, + + /* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CLOSE_FAIL, + BTA_GATTC_IDLE_ST}, + + /* BTA_GATTC_API_SEARCH_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_API_CONFIRM_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_API_READ_MULTI_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_API_REFRESH_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_IDLE_ST}, + + /* BTA_GATTC_INT_CONN_EVT */ {BTA_GATTC_CONN, BTA_GATTC_CONN_ST}, + /* BTA_GATTC_INT_DISCOVER_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_DISCOVER_CMPL_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_OP_CMPL_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_INT_DISCONN_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST}, }; /* state table for wait for open state */ -static const uint8_t bta_gattc_st_w4_conn[][BTA_GATTC_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_OPEN_FAIL, BTA_GATTC_IDLE_ST}, -/* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_CANCEL_OPEN, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_CANCEL_OPEN_OK, BTA_GATTC_IDLE_ST}, - -/* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_W4_CONN_ST}, - -/* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CANCEL_OPEN, BTA_GATTC_W4_CONN_ST}, - -/* BTA_GATTC_API_SEARCH_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_API_CONFIRM_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_API_READ_MULTI_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_API_REFRESH_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_W4_CONN_ST}, - -/* BTA_GATTC_INT_CONN_EVT */ {BTA_GATTC_CONN, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_INT_DISCOVER_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_DISCOVER_CMPL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_OP_CMPL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_W4_CONN_ST}, -/* BTA_GATTC_INT_DISCONN_EVT */ {BTA_GATTC_OPEN_FAIL, BTA_GATTC_IDLE_ST}, +static const uint8_t bta_gattc_st_w4_conn[][BTA_GATTC_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_OPEN_FAIL, + BTA_GATTC_IDLE_ST}, + /* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_CANCEL_OPEN, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_CANCEL_OPEN_OK, + BTA_GATTC_IDLE_ST}, + + /* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_FAIL, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_FAIL, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_FAIL, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_W4_CONN_ST}, + + /* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CANCEL_OPEN, + BTA_GATTC_W4_CONN_ST}, + + /* BTA_GATTC_API_SEARCH_EVT */ {BTA_GATTC_FAIL, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_API_CONFIRM_EVT */ {BTA_GATTC_FAIL, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_API_READ_MULTI_EVT */ {BTA_GATTC_FAIL, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_API_REFRESH_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_W4_CONN_ST}, + + /* BTA_GATTC_INT_CONN_EVT */ {BTA_GATTC_CONN, BTA_GATTC_CONN_ST}, + /* BTA_GATTC_INT_DISCOVER_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_DISCOVER_CMPL_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_OP_CMPL_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_W4_CONN_ST}, + /* BTA_GATTC_INT_DISCONN_EVT */ {BTA_GATTC_OPEN_FAIL, + BTA_GATTC_IDLE_ST}, }; /* state table for open state */ -static const uint8_t bta_gattc_st_connected[][BTA_GATTC_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_CANCEL_OPEN_ERROR, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_CONN_ST}, - -/* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_READ, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_WRITE, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_EXEC, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_CFG_MTU, BTA_GATTC_CONN_ST}, - -/* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CLOSE, BTA_GATTC_IDLE_ST}, - -/* BTA_GATTC_API_SEARCH_EVT */ {BTA_GATTC_SEARCH, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_API_CONFIRM_EVT */ {BTA_GATTC_CONFIRM, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_API_READ_MULTI_EVT */ {BTA_GATTC_READ_MULTI, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_API_REFRESH_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_CONN_ST}, - -/* BTA_GATTC_INT_CONN_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_INT_DISCOVER_EVT */ {BTA_GATTC_START_DISCOVER, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_DISCOVER_CMPL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_OP_CMPL_EVT */ {BTA_GATTC_OP_CMPL, BTA_GATTC_CONN_ST}, - -/* BTA_GATTC_INT_DISCONN_EVT */ {BTA_GATTC_CLOSE, BTA_GATTC_IDLE_ST}, +static const uint8_t bta_gattc_st_connected[][BTA_GATTC_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, BTA_GATTC_CONN_ST}, + /* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_CONN_ST}, + /* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_CANCEL_OPEN_ERROR, + BTA_GATTC_CONN_ST}, + /* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_CONN_ST}, + + /* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_READ, BTA_GATTC_CONN_ST}, + /* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_WRITE, BTA_GATTC_CONN_ST}, + /* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_EXEC, BTA_GATTC_CONN_ST}, + /* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_CFG_MTU, + BTA_GATTC_CONN_ST}, + + /* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CLOSE, BTA_GATTC_IDLE_ST}, + + /* BTA_GATTC_API_SEARCH_EVT */ {BTA_GATTC_SEARCH, + BTA_GATTC_CONN_ST}, + /* BTA_GATTC_API_CONFIRM_EVT */ {BTA_GATTC_CONFIRM, + BTA_GATTC_CONN_ST}, + /* BTA_GATTC_API_READ_MULTI_EVT */ {BTA_GATTC_READ_MULTI, + BTA_GATTC_CONN_ST}, + /* BTA_GATTC_API_REFRESH_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_CONN_ST}, + + /* BTA_GATTC_INT_CONN_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_CONN_ST}, + /* BTA_GATTC_INT_DISCOVER_EVT */ {BTA_GATTC_START_DISCOVER, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_DISCOVER_CMPL_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_CONN_ST}, + /* BTA_GATTC_OP_CMPL_EVT */ {BTA_GATTC_OP_CMPL, + BTA_GATTC_CONN_ST}, + + /* BTA_GATTC_INT_DISCONN_EVT */ {BTA_GATTC_CLOSE, BTA_GATTC_IDLE_ST}, }; /* state table for discover state */ -static const uint8_t bta_gattc_st_discover[][BTA_GATTC_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_CANCEL_OPEN_ERROR, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_DISCOVER_ST}, - -/* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST}, - -/* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_DISC_CLOSE, BTA_GATTC_DISCOVER_ST}, - -/* BTA_GATTC_API_SEARCH_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_API_CONFIRM_EVT */ {BTA_GATTC_CONFIRM, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_API_READ_MULTI_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_API_REFRESH_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_DISCOVER_ST}, - -/* BTA_GATTC_INT_CONN_EVT */ {BTA_GATTC_CONN, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_INT_DISCOVER_EVT */ {BTA_GATTC_RESTART_DISCOVER, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_DISCOVER_CMPL_EVT */ {BTA_GATTC_DISC_CMPL, BTA_GATTC_CONN_ST}, -/* BTA_GATTC_OP_CMPL_EVT */ {BTA_GATTC_IGNORE_OP_CMPL, BTA_GATTC_DISCOVER_ST}, -/* BTA_GATTC_INT_DISCONN_EVT */ {BTA_GATTC_CLOSE, BTA_GATTC_IDLE_ST}, +static const uint8_t bta_gattc_st_discover[][BTA_GATTC_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_CANCEL_OPEN_ERROR, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_FAIL, + BTA_GATTC_DISCOVER_ST}, + + /* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_Q_CMD, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_Q_CMD, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_Q_CMD, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_Q_CMD, + BTA_GATTC_DISCOVER_ST}, + + /* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_DISC_CLOSE, + BTA_GATTC_DISCOVER_ST}, + + /* BTA_GATTC_API_SEARCH_EVT */ {BTA_GATTC_Q_CMD, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_API_CONFIRM_EVT */ {BTA_GATTC_CONFIRM, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_API_READ_MULTI_EVT */ {BTA_GATTC_Q_CMD, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_API_REFRESH_EVT */ {BTA_GATTC_IGNORE, + BTA_GATTC_DISCOVER_ST}, + + /* BTA_GATTC_INT_CONN_EVT */ {BTA_GATTC_CONN, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_INT_DISCOVER_EVT */ {BTA_GATTC_RESTART_DISCOVER, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_DISCOVER_CMPL_EVT */ {BTA_GATTC_DISC_CMPL, + BTA_GATTC_CONN_ST}, + /* BTA_GATTC_OP_CMPL_EVT */ {BTA_GATTC_IGNORE_OP_CMPL, + BTA_GATTC_DISCOVER_ST}, + /* BTA_GATTC_INT_DISCONN_EVT */ {BTA_GATTC_CLOSE, BTA_GATTC_IDLE_ST}, }; @@ -230,24 +276,20 @@ static const uint8_t bta_gattc_st_discover[][BTA_GATTC_NUM_COLS] = typedef const uint8_t (*tBTA_GATTC_ST_TBL)[BTA_GATTC_NUM_COLS]; /* state table */ -const tBTA_GATTC_ST_TBL bta_gattc_st_tbl[] = -{ - bta_gattc_st_idle, - bta_gattc_st_w4_conn, - bta_gattc_st_connected, - bta_gattc_st_discover -}; +const tBTA_GATTC_ST_TBL bta_gattc_st_tbl[] = { + bta_gattc_st_idle, bta_gattc_st_w4_conn, bta_gattc_st_connected, + bta_gattc_st_discover}; /***************************************************************************** * Global data ****************************************************************************/ /* GATTC control block */ -tBTA_GATTC_CB bta_gattc_cb; +tBTA_GATTC_CB bta_gattc_cb; #if (BTA_GATT_DEBUG == TRUE) -static char *gattc_evt_code(tBTA_GATTC_INT_EVT evt_code); -static char *gattc_state_code(tBTA_GATTC_STATE state_code); +static char* gattc_evt_code(tBTA_GATTC_INT_EVT evt_code); +static char* gattc_state_code(tBTA_GATTC_STATE state_code); #endif /******************************************************************************* @@ -257,63 +299,56 @@ static char *gattc_state_code(tBTA_GATTC_STATE state_code); * Description State machine event handling function for GATTC * * - * Returns bool : true if queued client request buffer can be immediately released + * Returns bool : true if queued client request buffer can be + *immediately released * else false * ******************************************************************************/ -bool bta_gattc_sm_execute(tBTA_GATTC_CLCB *p_clcb, uint16_t event, tBTA_GATTC_DATA *p_data) -{ - tBTA_GATTC_ST_TBL state_table; - uint8_t action; - int i; - bool rt = true; +bool bta_gattc_sm_execute(tBTA_GATTC_CLCB* p_clcb, uint16_t event, + tBTA_GATTC_DATA* p_data) { + tBTA_GATTC_ST_TBL state_table; + uint8_t action; + int i; + bool rt = true; #if (BTA_GATT_DEBUG == TRUE) - tBTA_GATTC_STATE in_state = p_clcb->state; - uint16_t in_event = event; - APPL_TRACE_DEBUG("bta_gattc_sm_execute: State 0x%02x [%s], Event 0x%x[%s]", in_state, - gattc_state_code(in_state), - in_event, - gattc_evt_code(in_event)); + tBTA_GATTC_STATE in_state = p_clcb->state; + uint16_t in_event = event; + APPL_TRACE_DEBUG("bta_gattc_sm_execute: State 0x%02x [%s], Event 0x%x[%s]", + in_state, gattc_state_code(in_state), in_event, + gattc_evt_code(in_event)); #endif - - /* look up the state table for the current state */ - state_table = bta_gattc_st_tbl[p_clcb->state]; - - event &= 0x00FF; - - /* set next state */ - p_clcb->state = state_table[event][BTA_GATTC_NEXT_STATE]; - - /* execute action functions */ - for (i = 0; i < BTA_GATTC_ACTIONS; i++) - { - if ((action = state_table[event][i]) != BTA_GATTC_IGNORE) - { - (*bta_gattc_action[action])(p_clcb, p_data); - if (p_clcb->p_q_cmd == p_data) { - /* buffer is queued, don't free in the bta dispatcher. - * we free it ourselves when a completion event is received. - */ - rt = false; - } - } - else - { - break; - } + /* look up the state table for the current state */ + state_table = bta_gattc_st_tbl[p_clcb->state]; + + event &= 0x00FF; + + /* set next state */ + p_clcb->state = state_table[event][BTA_GATTC_NEXT_STATE]; + + /* execute action functions */ + for (i = 0; i < BTA_GATTC_ACTIONS; i++) { + if ((action = state_table[event][i]) != BTA_GATTC_IGNORE) { + (*bta_gattc_action[action])(p_clcb, p_data); + if (p_clcb->p_q_cmd == p_data) { + /* buffer is queued, don't free in the bta dispatcher. + * we free it ourselves when a completion event is received. + */ + rt = false; + } + } else { + break; } + } #if (BTA_GATT_DEBUG == TRUE) - if (in_state != p_clcb->state) - { - APPL_TRACE_DEBUG("GATTC State Change: [%s] -> [%s] after Event [%s]", - gattc_state_code(in_state), - gattc_state_code(p_clcb->state), - gattc_evt_code(in_event)); - } + if (in_state != p_clcb->state) { + APPL_TRACE_DEBUG("GATTC State Change: [%s] -> [%s] after Event [%s]", + gattc_state_code(in_state), + gattc_state_code(p_clcb->state), gattc_evt_code(in_event)); + } #endif - return rt; + return rt; } /******************************************************************************* @@ -326,74 +361,70 @@ bool bta_gattc_sm_execute(tBTA_GATTC_CLCB *p_clcb, uint16_t event, tBTA_GATTC_DA * Returns bool * ******************************************************************************/ -bool bta_gattc_hdl_event(BT_HDR *p_msg) -{ - tBTA_GATTC_CLCB *p_clcb = NULL; - tBTA_GATTC_RCB *p_clreg; - bool rt = true; +bool bta_gattc_hdl_event(BT_HDR* p_msg) { + tBTA_GATTC_CLCB* p_clcb = NULL; + tBTA_GATTC_RCB* p_clreg; + bool rt = true; #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_gattc_hdl_event: Event [%s]", gattc_evt_code(p_msg->event)); + APPL_TRACE_DEBUG("bta_gattc_hdl_event: Event [%s]", + gattc_evt_code(p_msg->event)); #endif - switch (p_msg->event) - { - case BTA_GATTC_API_DISABLE_EVT: - bta_gattc_disable(); - break; - - case BTA_GATTC_API_REG_EVT: - bta_gattc_register((tBTA_GATTC_DATA *) p_msg); - break; - - case BTA_GATTC_INT_START_IF_EVT: - bta_gattc_start_if((tBTA_GATTC_DATA *) p_msg); - break; - - case BTA_GATTC_API_DEREG_EVT: - p_clreg = bta_gattc_cl_get_regcb(((tBTA_GATTC_DATA *)p_msg)->api_dereg.client_if); - bta_gattc_deregister(p_clreg); - break; - - case BTA_GATTC_API_OPEN_EVT: - bta_gattc_process_api_open((tBTA_GATTC_DATA *) p_msg); - break; - - case BTA_GATTC_API_CANCEL_OPEN_EVT: - bta_gattc_process_api_open_cancel((tBTA_GATTC_DATA *) p_msg); - break; - - case BTA_GATTC_API_REFRESH_EVT: - bta_gattc_process_api_refresh((tBTA_GATTC_DATA *) p_msg); - break; - - case BTA_GATTC_ENC_CMPL_EVT: - bta_gattc_process_enc_cmpl((tBTA_GATTC_DATA *) p_msg); - break; - - default: - if (p_msg->event == BTA_GATTC_INT_CONN_EVT) - p_clcb = bta_gattc_find_int_conn_clcb((tBTA_GATTC_DATA *) p_msg); - else if (p_msg->event == BTA_GATTC_INT_DISCONN_EVT) - p_clcb = bta_gattc_find_int_disconn_clcb((tBTA_GATTC_DATA *) p_msg); - else - p_clcb = bta_gattc_find_clcb_by_conn_id(p_msg->layer_specific); - - if (p_clcb != NULL) - { - rt = bta_gattc_sm_execute(p_clcb, p_msg->event, (tBTA_GATTC_DATA *) p_msg); - } - else - { - APPL_TRACE_DEBUG("Ignore unknown conn ID: %d", p_msg->layer_specific); - } - - break; - } - - - return rt; + switch (p_msg->event) { + case BTA_GATTC_API_DISABLE_EVT: + bta_gattc_disable(); + break; + + case BTA_GATTC_API_REG_EVT: + bta_gattc_register((tBTA_GATTC_DATA*)p_msg); + break; + + case BTA_GATTC_INT_START_IF_EVT: + bta_gattc_start_if((tBTA_GATTC_DATA*)p_msg); + break; + + case BTA_GATTC_API_DEREG_EVT: + p_clreg = bta_gattc_cl_get_regcb( + ((tBTA_GATTC_DATA*)p_msg)->api_dereg.client_if); + bta_gattc_deregister(p_clreg); + break; + + case BTA_GATTC_API_OPEN_EVT: + bta_gattc_process_api_open((tBTA_GATTC_DATA*)p_msg); + break; + + case BTA_GATTC_API_CANCEL_OPEN_EVT: + bta_gattc_process_api_open_cancel((tBTA_GATTC_DATA*)p_msg); + break; + + case BTA_GATTC_API_REFRESH_EVT: + bta_gattc_process_api_refresh((tBTA_GATTC_DATA*)p_msg); + break; + + case BTA_GATTC_ENC_CMPL_EVT: + bta_gattc_process_enc_cmpl((tBTA_GATTC_DATA*)p_msg); + break; + + default: + if (p_msg->event == BTA_GATTC_INT_CONN_EVT) + p_clcb = bta_gattc_find_int_conn_clcb((tBTA_GATTC_DATA*)p_msg); + else if (p_msg->event == BTA_GATTC_INT_DISCONN_EVT) + p_clcb = bta_gattc_find_int_disconn_clcb((tBTA_GATTC_DATA*)p_msg); + else + p_clcb = bta_gattc_find_clcb_by_conn_id(p_msg->layer_specific); + + if (p_clcb != NULL) { + rt = + bta_gattc_sm_execute(p_clcb, p_msg->event, (tBTA_GATTC_DATA*)p_msg); + } else { + APPL_TRACE_DEBUG("Ignore unknown conn ID: %d", p_msg->layer_specific); + } + + break; + } + + return rt; } - /***************************************************************************** * Debug Functions ****************************************************************************/ @@ -408,57 +439,55 @@ bool bta_gattc_hdl_event(BT_HDR *p_msg) * Returns void * ******************************************************************************/ -static char *gattc_evt_code(tBTA_GATTC_INT_EVT evt_code) -{ - switch (evt_code) - { - case BTA_GATTC_API_OPEN_EVT: - return "BTA_GATTC_API_OPEN_EVT"; - case BTA_GATTC_INT_OPEN_FAIL_EVT: - return "BTA_GATTC_INT_OPEN_FAIL_EVT"; - case BTA_GATTC_API_CANCEL_OPEN_EVT: - return "BTA_GATTC_API_CANCEL_OPEN_EVT"; - case BTA_GATTC_INT_CANCEL_OPEN_OK_EVT: - return "BTA_GATTC_INT_CANCEL_OPEN_OK_EVT"; - case BTA_GATTC_API_READ_EVT: - return "BTA_GATTC_API_READ_EVT"; - case BTA_GATTC_API_WRITE_EVT: - return "BTA_GATTC_API_WRITE_EVT"; - case BTA_GATTC_API_EXEC_EVT: - return "BTA_GATTC_API_EXEC_EVT"; - case BTA_GATTC_API_CLOSE_EVT: - return "BTA_GATTC_API_CLOSE_EVT"; - case BTA_GATTC_API_SEARCH_EVT: - return "BTA_GATTC_API_SEARCH_EVT"; - case BTA_GATTC_API_CONFIRM_EVT: - return "BTA_GATTC_API_CONFIRM_EVT"; - case BTA_GATTC_API_READ_MULTI_EVT: - return "BTA_GATTC_API_READ_MULTI_EVT"; - case BTA_GATTC_INT_CONN_EVT: - return "BTA_GATTC_INT_CONN_EVT"; - case BTA_GATTC_INT_DISCOVER_EVT: - return "BTA_GATTC_INT_DISCOVER_EVT"; - case BTA_GATTC_DISCOVER_CMPL_EVT: - return "BTA_GATTC_DISCOVER_CMPL_EVT"; - case BTA_GATTC_OP_CMPL_EVT: - return "BTA_GATTC_OP_CMPL_EVT"; - case BTA_GATTC_INT_DISCONN_EVT: - return "BTA_GATTC_INT_DISCONN_EVT"; - case BTA_GATTC_INT_START_IF_EVT: - return "BTA_GATTC_INT_START_IF_EVT"; - case BTA_GATTC_API_REG_EVT: - return "BTA_GATTC_API_REG_EVT"; - case BTA_GATTC_API_DEREG_EVT: - return "BTA_GATTC_API_DEREG_EVT"; - case BTA_GATTC_API_REFRESH_EVT: - return "BTA_GATTC_API_REFRESH_EVT"; - case BTA_GATTC_API_DISABLE_EVT: - return "BTA_GATTC_API_DISABLE_EVT"; - case BTA_GATTC_API_CFG_MTU_EVT: - return "BTA_GATTC_API_CFG_MTU_EVT"; - default: - return "unknown GATTC event code"; - } +static char* gattc_evt_code(tBTA_GATTC_INT_EVT evt_code) { + switch (evt_code) { + case BTA_GATTC_API_OPEN_EVT: + return "BTA_GATTC_API_OPEN_EVT"; + case BTA_GATTC_INT_OPEN_FAIL_EVT: + return "BTA_GATTC_INT_OPEN_FAIL_EVT"; + case BTA_GATTC_API_CANCEL_OPEN_EVT: + return "BTA_GATTC_API_CANCEL_OPEN_EVT"; + case BTA_GATTC_INT_CANCEL_OPEN_OK_EVT: + return "BTA_GATTC_INT_CANCEL_OPEN_OK_EVT"; + case BTA_GATTC_API_READ_EVT: + return "BTA_GATTC_API_READ_EVT"; + case BTA_GATTC_API_WRITE_EVT: + return "BTA_GATTC_API_WRITE_EVT"; + case BTA_GATTC_API_EXEC_EVT: + return "BTA_GATTC_API_EXEC_EVT"; + case BTA_GATTC_API_CLOSE_EVT: + return "BTA_GATTC_API_CLOSE_EVT"; + case BTA_GATTC_API_SEARCH_EVT: + return "BTA_GATTC_API_SEARCH_EVT"; + case BTA_GATTC_API_CONFIRM_EVT: + return "BTA_GATTC_API_CONFIRM_EVT"; + case BTA_GATTC_API_READ_MULTI_EVT: + return "BTA_GATTC_API_READ_MULTI_EVT"; + case BTA_GATTC_INT_CONN_EVT: + return "BTA_GATTC_INT_CONN_EVT"; + case BTA_GATTC_INT_DISCOVER_EVT: + return "BTA_GATTC_INT_DISCOVER_EVT"; + case BTA_GATTC_DISCOVER_CMPL_EVT: + return "BTA_GATTC_DISCOVER_CMPL_EVT"; + case BTA_GATTC_OP_CMPL_EVT: + return "BTA_GATTC_OP_CMPL_EVT"; + case BTA_GATTC_INT_DISCONN_EVT: + return "BTA_GATTC_INT_DISCONN_EVT"; + case BTA_GATTC_INT_START_IF_EVT: + return "BTA_GATTC_INT_START_IF_EVT"; + case BTA_GATTC_API_REG_EVT: + return "BTA_GATTC_API_REG_EVT"; + case BTA_GATTC_API_DEREG_EVT: + return "BTA_GATTC_API_DEREG_EVT"; + case BTA_GATTC_API_REFRESH_EVT: + return "BTA_GATTC_API_REFRESH_EVT"; + case BTA_GATTC_API_DISABLE_EVT: + return "BTA_GATTC_API_DISABLE_EVT"; + case BTA_GATTC_API_CFG_MTU_EVT: + return "BTA_GATTC_API_CFG_MTU_EVT"; + default: + return "unknown GATTC event code"; + } } /******************************************************************************* @@ -470,22 +499,20 @@ static char *gattc_evt_code(tBTA_GATTC_INT_EVT evt_code) * Returns void * ******************************************************************************/ -static char *gattc_state_code(tBTA_GATTC_STATE state_code) -{ - switch (state_code) - { - case BTA_GATTC_IDLE_ST: - return "GATTC_IDLE_ST"; - case BTA_GATTC_W4_CONN_ST: - return "GATTC_W4_CONN_ST"; - case BTA_GATTC_CONN_ST: - return "GATTC_CONN_ST"; - case BTA_GATTC_DISCOVER_ST: - return "GATTC_DISCOVER_ST"; - default: - return "unknown GATTC state code"; - } +static char* gattc_state_code(tBTA_GATTC_STATE state_code) { + switch (state_code) { + case BTA_GATTC_IDLE_ST: + return "GATTC_IDLE_ST"; + case BTA_GATTC_W4_CONN_ST: + return "GATTC_W4_CONN_ST"; + case BTA_GATTC_CONN_ST: + return "GATTC_CONN_ST"; + case BTA_GATTC_DISCOVER_ST: + return "GATTC_DISCOVER_ST"; + default: + return "unknown GATTC state code"; + } } -#endif /* Debug Functions */ +#endif /* Debug Functions */ #endif /* BTA_GATT_INCLUDED */ diff --git a/system/bta/gatt/bta_gattc_utils.cc b/system/bta/gatt/bta_gattc_utils.cc index 9790228d8e2..b575af8b42a 100644 --- a/system/bta/gatt/bta_gattc_utils.cc +++ b/system/bta/gatt/bta_gattc_utils.cc @@ -30,10 +30,10 @@ #include +#include "bt_common.h" #include "bta_gattc_int.h" #include "bta_sys.h" #include "btcore/include/bdaddr.h" -#include "bt_common.h" #include "l2c_api.h" #include "utl.h" @@ -41,10 +41,11 @@ * Constants ****************************************************************************/ -static const uint8_t base_uuid[LEN_UUID_128] = {0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, +static const uint8_t base_uuid[LEN_UUID_128] = { + 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; -static const BD_ADDR dummy_bda = {0,0,0,0,0,0}; +static const BD_ADDR dummy_bda = {0, 0, 0, 0, 0, 0}; /******************************************************************************* * @@ -55,13 +56,13 @@ static const BD_ADDR dummy_bda = {0,0,0,0,0,0}; * Returns true if two uuid match; false otherwise. * ******************************************************************************/ -void bta_gatt_convert_uuid16_to_uuid128(uint8_t uuid_128[LEN_UUID_128], uint16_t uuid_16) -{ - uint8_t *p = &uuid_128[LEN_UUID_128 - 4]; +void bta_gatt_convert_uuid16_to_uuid128(uint8_t uuid_128[LEN_UUID_128], + uint16_t uuid_16) { + uint8_t* p = &uuid_128[LEN_UUID_128 - 4]; - memcpy (uuid_128, base_uuid, LEN_UUID_128); + memcpy(uuid_128, base_uuid, LEN_UUID_128); - UINT16_TO_STREAM(p, uuid_16); + UINT16_TO_STREAM(p, uuid_16); } /******************************************************************************* * @@ -72,46 +73,40 @@ void bta_gatt_convert_uuid16_to_uuid128(uint8_t uuid_128[LEN_UUID_128], uint16_t * Returns true if two uuid match; false otherwise. * ******************************************************************************/ -bool bta_gattc_uuid_compare (const tBT_UUID *p_src, const tBT_UUID *p_tar, bool is_precise) -{ - uint8_t su[LEN_UUID_128], tu[LEN_UUID_128]; - const uint8_t *ps, *pt; - - /* any of the UUID is unspecified */ - if (p_src == 0 || p_tar == 0) - { - if (is_precise) - return false; - else - return true; - } - - /* If both are 16-bit, we can do a simple compare */ - if (p_src->len == 2 && p_tar->len == 2) - { - return p_src->uu.uuid16 == p_tar->uu.uuid16; - } - - /* One or both of the UUIDs is 128-bit */ - if (p_src->len == LEN_UUID_16) - { - /* convert a 16 bits UUID to 128 bits value */ - bta_gatt_convert_uuid16_to_uuid128(su, p_src->uu.uuid16); - ps = su; - } - else - ps = p_src->uu.uuid128; - - if (p_tar->len == LEN_UUID_16) - { - /* convert a 16 bits UUID to 128 bits value */ - bta_gatt_convert_uuid16_to_uuid128(tu, p_tar->uu.uuid16); - pt = tu; - } +bool bta_gattc_uuid_compare(const tBT_UUID* p_src, const tBT_UUID* p_tar, + bool is_precise) { + uint8_t su[LEN_UUID_128], tu[LEN_UUID_128]; + const uint8_t *ps, *pt; + + /* any of the UUID is unspecified */ + if (p_src == 0 || p_tar == 0) { + if (is_precise) + return false; else - pt = p_tar->uu.uuid128; - - return(memcmp(ps, pt, LEN_UUID_128) == 0); + return true; + } + + /* If both are 16-bit, we can do a simple compare */ + if (p_src->len == 2 && p_tar->len == 2) { + return p_src->uu.uuid16 == p_tar->uu.uuid16; + } + + /* One or both of the UUIDs is 128-bit */ + if (p_src->len == LEN_UUID_16) { + /* convert a 16 bits UUID to 128 bits value */ + bta_gatt_convert_uuid16_to_uuid128(su, p_src->uu.uuid16); + ps = su; + } else + ps = p_src->uu.uuid128; + + if (p_tar->len == LEN_UUID_16) { + /* convert a 16 bits UUID to 128 bits value */ + bta_gatt_convert_uuid16_to_uuid128(tu, p_tar->uu.uuid16); + pt = tu; + } else + pt = p_tar->uu.uuid128; + + return (memcmp(ps, pt, LEN_UUID_128) == 0); } /******************************************************************************* @@ -123,18 +118,14 @@ bool bta_gattc_uuid_compare (const tBT_UUID *p_src, const tBT_UUID *p_tar, bool * Returns pointer to the regcb * ******************************************************************************/ -tBTA_GATTC_RCB * bta_gattc_cl_get_regcb(uint8_t client_if) -{ - uint8_t i = 0; - tBTA_GATTC_RCB *p_clrcb = &bta_gattc_cb.cl_rcb[0]; - - for (i = 0; i < BTA_GATTC_CL_MAX; i ++, p_clrcb ++) - { - if (p_clrcb->in_use && - p_clrcb->client_if == client_if) - return p_clrcb; - } - return NULL; +tBTA_GATTC_RCB* bta_gattc_cl_get_regcb(uint8_t client_if) { + uint8_t i = 0; + tBTA_GATTC_RCB* p_clrcb = &bta_gattc_cb.cl_rcb[0]; + + for (i = 0; i < BTA_GATTC_CL_MAX; i++, p_clrcb++) { + if (p_clrcb->in_use && p_clrcb->client_if == client_if) return p_clrcb; + } + return NULL; } /******************************************************************************* * @@ -145,16 +136,13 @@ tBTA_GATTC_RCB * bta_gattc_cl_get_regcb(uint8_t client_if) * Returns pointer to the regcb * ******************************************************************************/ -uint8_t bta_gattc_num_reg_app(void) -{ - uint8_t i = 0, j = 0; - - for (i = 0; i < BTA_GATTC_CL_MAX; i ++) - { - if (bta_gattc_cb.cl_rcb[i].in_use) - j ++; - } - return j; +uint8_t bta_gattc_num_reg_app(void) { + uint8_t i = 0, j = 0; + + for (i = 0; i < BTA_GATTC_CL_MAX; i++) { + if (bta_gattc_cb.cl_rcb[i].in_use) j++; + } + return j; } /******************************************************************************* * @@ -165,21 +153,18 @@ uint8_t bta_gattc_num_reg_app(void) * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CLCB * bta_gattc_find_clcb_by_cif (uint8_t client_if, BD_ADDR remote_bda, - tBTA_TRANSPORT transport) -{ - tBTA_GATTC_CLCB *p_clcb = &bta_gattc_cb.clcb[0]; - uint8_t i; - - for (i = 0; i < BTA_GATTC_CLCB_MAX; i ++, p_clcb ++) - { - if (p_clcb->in_use && - p_clcb->p_rcb->client_if == client_if && - p_clcb->transport == transport && - bdcmp(p_clcb->bda, remote_bda) == 0) - return p_clcb; - } - return NULL; +tBTA_GATTC_CLCB* bta_gattc_find_clcb_by_cif(uint8_t client_if, + BD_ADDR remote_bda, + tBTA_TRANSPORT transport) { + tBTA_GATTC_CLCB* p_clcb = &bta_gattc_cb.clcb[0]; + uint8_t i; + + for (i = 0; i < BTA_GATTC_CLCB_MAX; i++, p_clcb++) { + if (p_clcb->in_use && p_clcb->p_rcb->client_if == client_if && + p_clcb->transport == transport && bdcmp(p_clcb->bda, remote_bda) == 0) + return p_clcb; + } + return NULL; } /******************************************************************************* * @@ -190,18 +175,14 @@ tBTA_GATTC_CLCB * bta_gattc_find_clcb_by_cif (uint8_t client_if, BD_ADDR remote_ * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CLCB * bta_gattc_find_clcb_by_conn_id (uint16_t conn_id) -{ - tBTA_GATTC_CLCB *p_clcb = &bta_gattc_cb.clcb[0]; - uint8_t i; - - for (i = 0; i < BTA_GATTC_CLCB_MAX; i ++, p_clcb ++) - { - if (p_clcb->in_use && - p_clcb->bta_conn_id == conn_id) - return p_clcb; - } - return NULL; +tBTA_GATTC_CLCB* bta_gattc_find_clcb_by_conn_id(uint16_t conn_id) { + tBTA_GATTC_CLCB* p_clcb = &bta_gattc_cb.clcb[0]; + uint8_t i; + + for (i = 0; i < BTA_GATTC_CLCB_MAX; i++, p_clcb++) { + if (p_clcb->in_use && p_clcb->bta_conn_id == conn_id) return p_clcb; + } + return NULL; } /******************************************************************************* @@ -213,45 +194,41 @@ tBTA_GATTC_CLCB * bta_gattc_find_clcb_by_conn_id (uint16_t conn_id) * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CLCB * bta_gattc_clcb_alloc(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, - tBTA_TRANSPORT transport) -{ - uint8_t i_clcb = 0; - tBTA_GATTC_CLCB *p_clcb = NULL; - - for (i_clcb = 0; i_clcb < BTA_GATTC_CLCB_MAX; i_clcb++) - { - if (!bta_gattc_cb.clcb[i_clcb].in_use) - { +tBTA_GATTC_CLCB* bta_gattc_clcb_alloc(tBTA_GATTC_IF client_if, + BD_ADDR remote_bda, + tBTA_TRANSPORT transport) { + uint8_t i_clcb = 0; + tBTA_GATTC_CLCB* p_clcb = NULL; + + for (i_clcb = 0; i_clcb < BTA_GATTC_CLCB_MAX; i_clcb++) { + if (!bta_gattc_cb.clcb[i_clcb].in_use) { #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_gattc_clcb_alloc: found clcb[%d] available",i_clcb); + APPL_TRACE_DEBUG("bta_gattc_clcb_alloc: found clcb[%d] available", + i_clcb); #endif - p_clcb = &bta_gattc_cb.clcb[i_clcb]; - p_clcb->in_use = true; - p_clcb->status = BTA_GATT_OK; - p_clcb->transport = transport; - bdcpy(p_clcb->bda, remote_bda); - - p_clcb->p_rcb = bta_gattc_cl_get_regcb(client_if); - - if ((p_clcb->p_srcb = bta_gattc_find_srcb(remote_bda)) == NULL) - p_clcb->p_srcb = bta_gattc_srcb_alloc(remote_bda); - - if (p_clcb->p_rcb != NULL && p_clcb->p_srcb != NULL) - { - p_clcb->p_srcb->num_clcb ++; - p_clcb->p_rcb->num_clcb ++; - } - else - { - /* release this clcb if clcb or srcb allocation failed */ - p_clcb->in_use = false; - p_clcb = NULL; - } - break; - } + p_clcb = &bta_gattc_cb.clcb[i_clcb]; + p_clcb->in_use = true; + p_clcb->status = BTA_GATT_OK; + p_clcb->transport = transport; + bdcpy(p_clcb->bda, remote_bda); + + p_clcb->p_rcb = bta_gattc_cl_get_regcb(client_if); + + if ((p_clcb->p_srcb = bta_gattc_find_srcb(remote_bda)) == NULL) + p_clcb->p_srcb = bta_gattc_srcb_alloc(remote_bda); + + if (p_clcb->p_rcb != NULL && p_clcb->p_srcb != NULL) { + p_clcb->p_srcb->num_clcb++; + p_clcb->p_rcb->num_clcb++; + } else { + /* release this clcb if clcb or srcb allocation failed */ + p_clcb->in_use = false; + p_clcb = NULL; + } + break; } - return p_clcb; + } + return p_clcb; } /******************************************************************************* * @@ -262,16 +239,16 @@ tBTA_GATTC_CLCB * bta_gattc_clcb_alloc(tBTA_GATTC_IF client_if, BD_ADDR remote_b * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CLCB *bta_gattc_find_alloc_clcb(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, - tBTA_TRANSPORT transport) -{ - tBTA_GATTC_CLCB *p_clcb ; - - if ((p_clcb = bta_gattc_find_clcb_by_cif(client_if, remote_bda, transport)) == NULL) - { - p_clcb = bta_gattc_clcb_alloc(client_if, remote_bda, transport); - } - return p_clcb; +tBTA_GATTC_CLCB* bta_gattc_find_alloc_clcb(tBTA_GATTC_IF client_if, + BD_ADDR remote_bda, + tBTA_TRANSPORT transport) { + tBTA_GATTC_CLCB* p_clcb; + + if ((p_clcb = bta_gattc_find_clcb_by_cif(client_if, remote_bda, transport)) == + NULL) { + p_clcb = bta_gattc_clcb_alloc(client_if, remote_bda, transport); + } + return p_clcb; } /******************************************************************************* @@ -283,32 +260,27 @@ tBTA_GATTC_CLCB *bta_gattc_find_alloc_clcb(tBTA_GATTC_IF client_if, BD_ADDR remo * Returns pointer to the clcb * ******************************************************************************/ -void bta_gattc_clcb_dealloc(tBTA_GATTC_CLCB *p_clcb) -{ - tBTA_GATTC_SERV *p_srcb = NULL; - - if (p_clcb) - { - p_srcb = p_clcb->p_srcb; - if (p_srcb->num_clcb) - p_srcb->num_clcb --; - - if (p_clcb->p_rcb->num_clcb) - p_clcb->p_rcb->num_clcb --; - - /* if the srcb is no longer needed, reset the state */ - if ( p_srcb->num_clcb == 0) - { - p_srcb->connected = false; - p_srcb->state = BTA_GATTC_SERV_IDLE; - p_srcb->mtu = 0; - } +void bta_gattc_clcb_dealloc(tBTA_GATTC_CLCB* p_clcb) { + tBTA_GATTC_SERV* p_srcb = NULL; - osi_free_and_reset((void **)&p_clcb->p_q_cmd); - memset(p_clcb, 0, sizeof(tBTA_GATTC_CLCB)); - } else { - APPL_TRACE_ERROR("bta_gattc_clcb_dealloc p_clcb=NULL"); + if (p_clcb) { + p_srcb = p_clcb->p_srcb; + if (p_srcb->num_clcb) p_srcb->num_clcb--; + + if (p_clcb->p_rcb->num_clcb) p_clcb->p_rcb->num_clcb--; + + /* if the srcb is no longer needed, reset the state */ + if (p_srcb->num_clcb == 0) { + p_srcb->connected = false; + p_srcb->state = BTA_GATTC_SERV_IDLE; + p_srcb->mtu = 0; } + + osi_free_and_reset((void**)&p_clcb->p_q_cmd); + memset(p_clcb, 0, sizeof(tBTA_GATTC_CLCB)); + } else { + APPL_TRACE_ERROR("bta_gattc_clcb_dealloc p_clcb=NULL"); + } } /******************************************************************************* @@ -320,17 +292,14 @@ void bta_gattc_clcb_dealloc(tBTA_GATTC_CLCB *p_clcb) * Returns pointer to the server cache. * ******************************************************************************/ -tBTA_GATTC_SERV * bta_gattc_find_srcb(BD_ADDR bda) -{ - tBTA_GATTC_SERV *p_srcb = &bta_gattc_cb.known_server[0]; - uint8_t i; - - for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i ++, p_srcb ++) - { - if (p_srcb->in_use && bdcmp(p_srcb->server_bda, bda) == 0) - return p_srcb; - } - return NULL; +tBTA_GATTC_SERV* bta_gattc_find_srcb(BD_ADDR bda) { + tBTA_GATTC_SERV* p_srcb = &bta_gattc_cb.known_server[0]; + uint8_t i; + + for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i++, p_srcb++) { + if (p_srcb->in_use && bdcmp(p_srcb->server_bda, bda) == 0) return p_srcb; + } + return NULL; } /******************************************************************************* @@ -342,17 +311,14 @@ tBTA_GATTC_SERV * bta_gattc_find_srcb(BD_ADDR bda) * Returns pointer to the server cache. * ******************************************************************************/ -tBTA_GATTC_SERV * bta_gattc_find_srvr_cache(BD_ADDR bda) -{ - tBTA_GATTC_SERV *p_srcb = &bta_gattc_cb.known_server[0]; - uint8_t i; - - for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i ++, p_srcb ++) - { - if (bdcmp(p_srcb->server_bda, bda) == 0) - return p_srcb; - } - return NULL; +tBTA_GATTC_SERV* bta_gattc_find_srvr_cache(BD_ADDR bda) { + tBTA_GATTC_SERV* p_srcb = &bta_gattc_cb.known_server[0]; + uint8_t i; + + for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i++, p_srcb++) { + if (bdcmp(p_srcb->server_bda, bda) == 0) return p_srcb; + } + return NULL; } /******************************************************************************* * @@ -363,14 +329,13 @@ tBTA_GATTC_SERV * bta_gattc_find_srvr_cache(BD_ADDR bda) * Returns pointer to the server cache. * ******************************************************************************/ -tBTA_GATTC_SERV * bta_gattc_find_scb_by_cid (uint16_t conn_id) -{ - tBTA_GATTC_CLCB *p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); +tBTA_GATTC_SERV* bta_gattc_find_scb_by_cid(uint16_t conn_id) { + tBTA_GATTC_CLCB* p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); - if (p_clcb) - return p_clcb->p_srcb; - else - return NULL; + if (p_clcb) + return p_clcb->p_srcb; + else + return NULL; } /******************************************************************************* * @@ -381,44 +346,36 @@ tBTA_GATTC_SERV * bta_gattc_find_scb_by_cid (uint16_t conn_id) * Returns pointer to the server cache. * ******************************************************************************/ -tBTA_GATTC_SERV * bta_gattc_srcb_alloc(BD_ADDR bda) -{ - tBTA_GATTC_SERV *p_tcb = &bta_gattc_cb.known_server[0], - *p_recycle = NULL; - bool found = false; - uint8_t i; - - for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i ++, p_tcb ++) - { - if (!p_tcb->in_use) - { - found = true; - break; - } - else if (!p_tcb->connected) - { - p_recycle = p_tcb; - } +tBTA_GATTC_SERV* bta_gattc_srcb_alloc(BD_ADDR bda) { + tBTA_GATTC_SERV *p_tcb = &bta_gattc_cb.known_server[0], *p_recycle = NULL; + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i++, p_tcb++) { + if (!p_tcb->in_use) { + found = true; + break; + } else if (!p_tcb->connected) { + p_recycle = p_tcb; } + } - /* if not found, try to recycle one known device */ - if (!found && !p_recycle) - p_tcb = NULL; - else if (!found && p_recycle) - p_tcb = p_recycle; + /* if not found, try to recycle one known device */ + if (!found && !p_recycle) + p_tcb = NULL; + else if (!found && p_recycle) + p_tcb = p_recycle; - if (p_tcb != NULL) - { - if (p_tcb->p_srvc_cache != NULL) - list_free(p_tcb->p_srvc_cache); + if (p_tcb != NULL) { + if (p_tcb->p_srvc_cache != NULL) list_free(p_tcb->p_srvc_cache); - osi_free_and_reset((void **)&p_tcb->p_srvc_list); - memset(p_tcb, 0 , sizeof(tBTA_GATTC_SERV)); + osi_free_and_reset((void**)&p_tcb->p_srvc_list); + memset(p_tcb, 0, sizeof(tBTA_GATTC_SERV)); - p_tcb->in_use = true; - bdcpy(p_tcb->server_bda, bda); - } - return p_tcb; + p_tcb->in_use = true; + bdcpy(p_tcb->server_bda, bda); + } + return p_tcb; } /******************************************************************************* * @@ -429,18 +386,15 @@ tBTA_GATTC_SERV * bta_gattc_srcb_alloc(BD_ADDR bda) * Returns success or failure. * ******************************************************************************/ -bool bta_gattc_enqueue(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) -{ - - if (p_clcb->p_q_cmd == NULL) - { - p_clcb->p_q_cmd = p_data; - return true; - } - - APPL_TRACE_ERROR ("%s: already has a pending command!!", __func__); - /* skip the callback now. ----- need to send callback ? */ - return false; +bool bta_gattc_enqueue(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data) { + if (p_clcb->p_q_cmd == NULL) { + p_clcb->p_q_cmd = p_data; + return true; + } + + APPL_TRACE_ERROR("%s: already has a pending command!!", __func__); + /* skip the callback now. ----- need to send callback ? */ + return false; } /******************************************************************************* @@ -452,29 +406,27 @@ bool bta_gattc_enqueue(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) * Returns * ******************************************************************************/ -bool bta_gattc_check_notif_registry(tBTA_GATTC_RCB *p_clreg, tBTA_GATTC_SERV *p_srcb, - tBTA_GATTC_NOTIFY *p_notify) -{ - uint8_t i; - - for (i = 0 ; i < BTA_GATTC_NOTIF_REG_MAX; i ++) - { - if (p_clreg->notif_reg[i].in_use && - bdcmp(p_clreg->notif_reg[i].remote_bda, p_srcb->server_bda) == 0 && - p_clreg->notif_reg[i].handle == p_notify->handle) - { - APPL_TRACE_DEBUG("Notification registered!"); - return true; - } +bool bta_gattc_check_notif_registry(tBTA_GATTC_RCB* p_clreg, + tBTA_GATTC_SERV* p_srcb, + tBTA_GATTC_NOTIFY* p_notify) { + uint8_t i; + + for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { + if (p_clreg->notif_reg[i].in_use && + bdcmp(p_clreg->notif_reg[i].remote_bda, p_srcb->server_bda) == 0 && + p_clreg->notif_reg[i].handle == p_notify->handle) { + APPL_TRACE_DEBUG("Notification registered!"); + return true; } - return false; - + } + return false; } /******************************************************************************* * * Function bta_gattc_clear_notif_registration * - * Description Clear up the notification registration information by BD_ADDR. + * Description Clear up the notification registration information by + *BD_ADDR. * Where handle is between start_handle and end_handle, and * start_handle and end_handle are boundaries of service * containing characteristic. @@ -482,140 +434,131 @@ bool bta_gattc_check_notif_registry(tBTA_GATTC_RCB *p_clreg, tBTA_GATTC_SERV *p * Returns None. * ******************************************************************************/ -void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV *p_srcb, uint16_t conn_id, - uint16_t start_handle, uint16_t end_handle) -{ - BD_ADDR remote_bda; - tBTA_GATTC_IF gatt_if; - tBTA_GATTC_RCB *p_clrcb ; - uint8_t i; - tGATT_TRANSPORT transport; - uint16_t handle; - - if (GATT_GetConnectionInfor(conn_id, &gatt_if, remote_bda, &transport)) { - if ((p_clrcb = bta_gattc_cl_get_regcb(gatt_if)) != NULL) { - for (i = 0 ; i < BTA_GATTC_NOTIF_REG_MAX; i ++) { - if (p_clrcb->notif_reg[i].in_use && - !bdcmp(p_clrcb->notif_reg[i].remote_bda, remote_bda)) { - - /* It's enough to get service or characteristic handle, as - * clear boundaries are always around service. - */ - handle = p_clrcb->notif_reg[i].handle; - if (handle >= start_handle && handle <= end_handle) - memset(&p_clrcb->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG)); - } - } +void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV* p_srcb, + uint16_t conn_id, uint16_t start_handle, + uint16_t end_handle) { + BD_ADDR remote_bda; + tBTA_GATTC_IF gatt_if; + tBTA_GATTC_RCB* p_clrcb; + uint8_t i; + tGATT_TRANSPORT transport; + uint16_t handle; + + if (GATT_GetConnectionInfor(conn_id, &gatt_if, remote_bda, &transport)) { + if ((p_clrcb = bta_gattc_cl_get_regcb(gatt_if)) != NULL) { + for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { + if (p_clrcb->notif_reg[i].in_use && + !bdcmp(p_clrcb->notif_reg[i].remote_bda, remote_bda)) { + /* It's enough to get service or characteristic handle, as + * clear boundaries are always around service. + */ + handle = p_clrcb->notif_reg[i].handle; + if (handle >= start_handle && handle <= end_handle) + memset(&p_clrcb->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG)); } - } else { - APPL_TRACE_ERROR("can not clear indication/notif registration for unknown app"); + } } - return; + } else { + APPL_TRACE_ERROR( + "can not clear indication/notif registration for unknown app"); + } + return; } /******************************************************************************* * * Function bta_gattc_mark_bg_conn * - * Description mark background connection status when a bg connection is initiated + * Description mark background connection status when a bg connection is + *initiated * or terminated. * * Returns true if success; false otherwise. * ******************************************************************************/ -bool bta_gattc_mark_bg_conn (tBTA_GATTC_IF client_if, BD_ADDR_PTR remote_bda_ptr, - bool add) -{ - tBTA_GATTC_BG_TCK *p_bg_tck = &bta_gattc_cb.bg_track[0]; - uint8_t i = 0; - tBTA_GATTC_CIF_MASK *p_cif_mask; - - for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i ++, p_bg_tck ++) - { - if (p_bg_tck->in_use && - ((remote_bda_ptr != NULL && bdcmp(p_bg_tck->remote_bda, remote_bda_ptr) == 0) || - (remote_bda_ptr == NULL && bdcmp(p_bg_tck->remote_bda, dummy_bda) == 0))) - { - p_cif_mask = &p_bg_tck->cif_mask; - - if (add) - /* mask on the cif bit */ - *p_cif_mask |= (1 <<(client_if - 1)); - else - { - if (client_if != 0) - *p_cif_mask &= (~(1 <<(client_if - 1))); - else - *p_cif_mask = 0; - } - /* no BG connection for this device, make it available */ - if (p_bg_tck->cif_mask == 0) - { - memset(p_bg_tck, 0, sizeof(tBTA_GATTC_BG_TCK)); - } - return true; - } +bool bta_gattc_mark_bg_conn(tBTA_GATTC_IF client_if, BD_ADDR_PTR remote_bda_ptr, + bool add) { + tBTA_GATTC_BG_TCK* p_bg_tck = &bta_gattc_cb.bg_track[0]; + uint8_t i = 0; + tBTA_GATTC_CIF_MASK* p_cif_mask; + + for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX; i++, p_bg_tck++) { + if (p_bg_tck->in_use && + ((remote_bda_ptr != NULL && + bdcmp(p_bg_tck->remote_bda, remote_bda_ptr) == 0) || + (remote_bda_ptr == NULL && + bdcmp(p_bg_tck->remote_bda, dummy_bda) == 0))) { + p_cif_mask = &p_bg_tck->cif_mask; + + if (add) /* mask on the cif bit */ + *p_cif_mask |= (1 << (client_if - 1)); + else { + if (client_if != 0) + *p_cif_mask &= (~(1 << (client_if - 1))); + else + *p_cif_mask = 0; + } + /* no BG connection for this device, make it available */ + if (p_bg_tck->cif_mask == 0) { + memset(p_bg_tck, 0, sizeof(tBTA_GATTC_BG_TCK)); + } + return true; } - if (!add) - { - if (remote_bda_ptr) - { - bdstr_t bdstr = {0}; - APPL_TRACE_ERROR("%s unable to find the bg connection mask for: %s", __func__, - bdaddr_to_string((bt_bdaddr_t *)remote_bda_ptr, bdstr, sizeof(bdstr))); - } - return false; + } + if (!add) { + if (remote_bda_ptr) { + bdstr_t bdstr = {0}; + APPL_TRACE_ERROR( + "%s unable to find the bg connection mask for: %s", __func__, + bdaddr_to_string((bt_bdaddr_t*)remote_bda_ptr, bdstr, sizeof(bdstr))); } - else /* adding a new device mask */ - { - for (i = 0, p_bg_tck = &bta_gattc_cb.bg_track[0]; - i < BTA_GATTC_KNOWN_SR_MAX; i ++, p_bg_tck ++) - { - if (!p_bg_tck->in_use) - { - p_bg_tck->in_use = true; - if (remote_bda_ptr) - bdcpy(p_bg_tck->remote_bda, remote_bda_ptr); - else - bdcpy(p_bg_tck->remote_bda, dummy_bda); - - p_cif_mask = &p_bg_tck->cif_mask; - - *p_cif_mask = (1 <<(client_if - 1)); - return true; - } - } - APPL_TRACE_ERROR("no available space to mark the bg connection status"); - return false; + return false; + } else /* adding a new device mask */ + { + for (i = 0, p_bg_tck = &bta_gattc_cb.bg_track[0]; + i < BTA_GATTC_KNOWN_SR_MAX; i++, p_bg_tck++) { + if (!p_bg_tck->in_use) { + p_bg_tck->in_use = true; + if (remote_bda_ptr) + bdcpy(p_bg_tck->remote_bda, remote_bda_ptr); + else + bdcpy(p_bg_tck->remote_bda, dummy_bda); + + p_cif_mask = &p_bg_tck->cif_mask; + + *p_cif_mask = (1 << (client_if - 1)); + return true; + } } + APPL_TRACE_ERROR("no available space to mark the bg connection status"); + return false; + } } /******************************************************************************* * * Function bta_gattc_check_bg_conn * - * Description check if this is a background connection background connection. + * Description check if this is a background connection background + *connection. * * Returns true if success; false otherwise. * ******************************************************************************/ -bool bta_gattc_check_bg_conn (tBTA_GATTC_IF client_if, BD_ADDR remote_bda, uint8_t role) -{ - tBTA_GATTC_BG_TCK *p_bg_tck = &bta_gattc_cb.bg_track[0]; - uint8_t i = 0; - bool is_bg_conn = false; - - for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX && !is_bg_conn; i ++, p_bg_tck ++) - { - if (p_bg_tck->in_use && - (bdcmp(p_bg_tck->remote_bda, remote_bda) == 0 || - bdcmp(p_bg_tck->remote_bda, dummy_bda) == 0)) - { - if (((p_bg_tck->cif_mask &(1 <<(client_if - 1))) != 0) && - role == HCI_ROLE_MASTER) - is_bg_conn = true; - } +bool bta_gattc_check_bg_conn(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, + uint8_t role) { + tBTA_GATTC_BG_TCK* p_bg_tck = &bta_gattc_cb.bg_track[0]; + uint8_t i = 0; + bool is_bg_conn = false; + + for (i = 0; i < BTA_GATTC_KNOWN_SR_MAX && !is_bg_conn; i++, p_bg_tck++) { + if (p_bg_tck->in_use && (bdcmp(p_bg_tck->remote_bda, remote_bda) == 0 || + bdcmp(p_bg_tck->remote_bda, dummy_bda) == 0)) { + if (((p_bg_tck->cif_mask & (1 << (client_if - 1))) != 0) && + role == HCI_ROLE_MASTER) + is_bg_conn = true; } - return is_bg_conn; + } + return is_bg_conn; } /******************************************************************************* * @@ -626,25 +569,23 @@ bool bta_gattc_check_bg_conn (tBTA_GATTC_IF client_if, BD_ADDR remote_bda, uint * Returns * ******************************************************************************/ -void bta_gattc_send_open_cback( tBTA_GATTC_RCB *p_clreg, tBTA_GATT_STATUS status, - BD_ADDR remote_bda, uint16_t conn_id, - tBTA_TRANSPORT transport, uint16_t mtu) -{ - tBTA_GATTC cb_data; - - if (p_clreg->p_cback) - { - memset(&cb_data, 0, sizeof(tBTA_GATTC)); - - cb_data.open.status = status; - cb_data.open.client_if = p_clreg->client_if; - cb_data.open.conn_id = conn_id; - cb_data.open.mtu = mtu; - cb_data.open.transport = transport; - bdcpy(cb_data.open.remote_bda, remote_bda); - - (*p_clreg->p_cback)(BTA_GATTC_OPEN_EVT, &cb_data); - } +void bta_gattc_send_open_cback(tBTA_GATTC_RCB* p_clreg, tBTA_GATT_STATUS status, + BD_ADDR remote_bda, uint16_t conn_id, + tBTA_TRANSPORT transport, uint16_t mtu) { + tBTA_GATTC cb_data; + + if (p_clreg->p_cback) { + memset(&cb_data, 0, sizeof(tBTA_GATTC)); + + cb_data.open.status = status; + cb_data.open.client_if = p_clreg->client_if; + cb_data.open.conn_id = conn_id; + cb_data.open.mtu = mtu; + cb_data.open.transport = transport; + bdcpy(cb_data.open.remote_bda, remote_bda); + + (*p_clreg->p_cback)(BTA_GATTC_OPEN_EVT, &cb_data); + } } /******************************************************************************* * @@ -655,24 +596,22 @@ void bta_gattc_send_open_cback( tBTA_GATTC_RCB *p_clreg, tBTA_GATT_STATUS status * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CONN * bta_gattc_conn_alloc(BD_ADDR remote_bda) -{ - uint8_t i_conn = 0; - tBTA_GATTC_CONN *p_conn = &bta_gattc_cb.conn_track[0]; - - for (i_conn = 0; i_conn < BTA_GATTC_CONN_MAX; i_conn++, p_conn ++) - { - if (!p_conn->in_use) - { +tBTA_GATTC_CONN* bta_gattc_conn_alloc(BD_ADDR remote_bda) { + uint8_t i_conn = 0; + tBTA_GATTC_CONN* p_conn = &bta_gattc_cb.conn_track[0]; + + for (i_conn = 0; i_conn < BTA_GATTC_CONN_MAX; i_conn++, p_conn++) { + if (!p_conn->in_use) { #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_gattc_conn_alloc: found conn_track[%d] available",i_conn); + APPL_TRACE_DEBUG("bta_gattc_conn_alloc: found conn_track[%d] available", + i_conn); #endif - p_conn->in_use = true; - bdcpy(p_conn->remote_bda, remote_bda); - return p_conn; - } + p_conn->in_use = true; + bdcpy(p_conn->remote_bda, remote_bda); + return p_conn; } - return NULL; + } + return NULL; } /******************************************************************************* @@ -684,22 +623,20 @@ tBTA_GATTC_CONN * bta_gattc_conn_alloc(BD_ADDR remote_bda) * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CONN * bta_gattc_conn_find(BD_ADDR remote_bda) -{ - uint8_t i_conn = 0; - tBTA_GATTC_CONN *p_conn = &bta_gattc_cb.conn_track[0]; - - for (i_conn = 0; i_conn < BTA_GATTC_CONN_MAX; i_conn++, p_conn ++) - { - if (p_conn->in_use && bdcmp(remote_bda, p_conn->remote_bda) == 0) - { +tBTA_GATTC_CONN* bta_gattc_conn_find(BD_ADDR remote_bda) { + uint8_t i_conn = 0; + tBTA_GATTC_CONN* p_conn = &bta_gattc_cb.conn_track[0]; + + for (i_conn = 0; i_conn < BTA_GATTC_CONN_MAX; i_conn++, p_conn++) { + if (p_conn->in_use && bdcmp(remote_bda, p_conn->remote_bda) == 0) { #if (BTA_GATT_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_gattc_conn_find: found conn_track[%d] matched",i_conn); + APPL_TRACE_DEBUG("bta_gattc_conn_find: found conn_track[%d] matched", + i_conn); #endif - return p_conn; - } + return p_conn; } - return NULL; + } + return NULL; } /******************************************************************************* @@ -711,15 +648,13 @@ tBTA_GATTC_CONN * bta_gattc_conn_find(BD_ADDR remote_bda) * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CONN * bta_gattc_conn_find_alloc(BD_ADDR remote_bda) -{ - tBTA_GATTC_CONN *p_conn = bta_gattc_conn_find (remote_bda); +tBTA_GATTC_CONN* bta_gattc_conn_find_alloc(BD_ADDR remote_bda) { + tBTA_GATTC_CONN* p_conn = bta_gattc_conn_find(remote_bda); - if (p_conn == NULL) - { - p_conn = bta_gattc_conn_alloc(remote_bda); - } - return p_conn; + if (p_conn == NULL) { + p_conn = bta_gattc_conn_alloc(remote_bda); + } + return p_conn; } /******************************************************************************* @@ -731,82 +666,77 @@ tBTA_GATTC_CONN * bta_gattc_conn_find_alloc(BD_ADDR remote_bda) * Returns pointer to the clcb * ******************************************************************************/ -bool bta_gattc_conn_dealloc(BD_ADDR remote_bda) -{ - tBTA_GATTC_CONN *p_conn = bta_gattc_conn_find (remote_bda); - - if (p_conn != NULL) - { - p_conn->in_use = false; - memset(p_conn->remote_bda, 0, BD_ADDR_LEN); - return true; - } - return false; +bool bta_gattc_conn_dealloc(BD_ADDR remote_bda) { + tBTA_GATTC_CONN* p_conn = bta_gattc_conn_find(remote_bda); + + if (p_conn != NULL) { + p_conn->in_use = false; + memset(p_conn->remote_bda, 0, BD_ADDR_LEN); + return true; + } + return false; } /******************************************************************************* * * Function bta_gattc_find_int_conn_clcb * - * Description try to locate a clcb when an internal connecion event arrives. + * Description try to locate a clcb when an internal connecion event + *arrives. * * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CLCB * bta_gattc_find_int_conn_clcb(tBTA_GATTC_DATA *p_msg) -{ - tBTA_GATTC_CLCB *p_clcb = NULL; - - if (p_msg->int_conn.role == HCI_ROLE_SLAVE) - bta_gattc_conn_find_alloc(p_msg->int_conn.remote_bda); - - /* try to locate a logic channel */ - if ((p_clcb = bta_gattc_find_clcb_by_cif(p_msg->int_conn.client_if, - p_msg->int_conn.remote_bda, - p_msg->int_conn.transport)) == NULL) - { - /* for a background connection or listening connection */ - if (/*p_msg->int_conn.role == HCI_ROLE_SLAVE || */ - bta_gattc_check_bg_conn(p_msg->int_conn.client_if, +tBTA_GATTC_CLCB* bta_gattc_find_int_conn_clcb(tBTA_GATTC_DATA* p_msg) { + tBTA_GATTC_CLCB* p_clcb = NULL; + + if (p_msg->int_conn.role == HCI_ROLE_SLAVE) + bta_gattc_conn_find_alloc(p_msg->int_conn.remote_bda); + + /* try to locate a logic channel */ + if ((p_clcb = bta_gattc_find_clcb_by_cif( + p_msg->int_conn.client_if, p_msg->int_conn.remote_bda, + p_msg->int_conn.transport)) == NULL) { + /* for a background connection or listening connection */ + if (/*p_msg->int_conn.role == HCI_ROLE_SLAVE || */ + bta_gattc_check_bg_conn(p_msg->int_conn.client_if, + p_msg->int_conn.remote_bda, + p_msg->int_conn.role)) { + /* allocate a new channel */ + p_clcb = bta_gattc_clcb_alloc(p_msg->int_conn.client_if, p_msg->int_conn.remote_bda, - p_msg->int_conn.role)) - { - /* allocate a new channel */ - p_clcb = bta_gattc_clcb_alloc(p_msg->int_conn.client_if, - p_msg->int_conn.remote_bda, - p_msg->int_conn.transport); - } + p_msg->int_conn.transport); } - return p_clcb; + } + return p_clcb; } /******************************************************************************* * * Function bta_gattc_find_int_disconn_clcb * - * Description try to locate a clcb when an internal disconnect callback arrives. + * Description try to locate a clcb when an internal disconnect callback + *arrives. * * Returns pointer to the clcb * ******************************************************************************/ -tBTA_GATTC_CLCB * bta_gattc_find_int_disconn_clcb(tBTA_GATTC_DATA *p_msg) -{ - tBTA_GATTC_CLCB *p_clcb = NULL; - - bta_gattc_conn_dealloc(p_msg->int_conn.remote_bda); - if ((p_clcb = bta_gattc_find_clcb_by_conn_id(p_msg->int_conn.hdr.layer_specific)) == NULL) - { - /* connection attempt failed, send connection callback event */ - p_clcb = bta_gattc_find_clcb_by_cif(p_msg->int_conn.client_if, - p_msg->int_conn.remote_bda, - p_msg->int_conn.transport); - } - if (p_clcb == NULL) - { - APPL_TRACE_DEBUG(" disconnection ID: [%d] not used by BTA", - p_msg->int_conn.hdr.layer_specific); - } - return p_clcb; +tBTA_GATTC_CLCB* bta_gattc_find_int_disconn_clcb(tBTA_GATTC_DATA* p_msg) { + tBTA_GATTC_CLCB* p_clcb = NULL; + + bta_gattc_conn_dealloc(p_msg->int_conn.remote_bda); + if ((p_clcb = bta_gattc_find_clcb_by_conn_id( + p_msg->int_conn.hdr.layer_specific)) == NULL) { + /* connection attempt failed, send connection callback event */ + p_clcb = bta_gattc_find_clcb_by_cif(p_msg->int_conn.client_if, + p_msg->int_conn.remote_bda, + p_msg->int_conn.transport); + } + if (p_clcb == NULL) { + APPL_TRACE_DEBUG(" disconnection ID: [%d] not used by BTA", + p_msg->int_conn.hdr.layer_specific); + } + return p_clcb; } #endif /* BTA_GATT_INCLUDED */ diff --git a/system/bta/gatt/bta_gatts_act.cc b/system/bta/gatt/bta_gatts_act.cc index 768b5a64ca3..61179bcf4ad 100644 --- a/system/bta/gatt/bta_gatts_act.cc +++ b/system/bta/gatt/bta_gatts_act.cc @@ -23,49 +23,41 @@ * ******************************************************************************/ - #include "bt_target.h" #if (BTA_GATT_INCLUDED == TRUE) -#include "utl.h" +#include #include "bt_common.h" -#include "bta_sys.h" -#include "bta_gatts_int.h" #include "bta_gatts_co.h" -#include "btm_ble_api.h" +#include "bta_gatts_int.h" +#include "bta_sys.h" #include "btif/include/btif_debug_conn.h" +#include "btm_ble_api.h" #include "osi/include/osi.h" -#include +#include "utl.h" + +static void bta_gatts_nv_save_cback(bool is_saved, + tGATTS_HNDL_RANGE* p_hndl_range); +static bool bta_gatts_nv_srv_chg_cback(tGATTS_SRV_CHG_CMD cmd, + tGATTS_SRV_CHG_REQ* p_req, + tGATTS_SRV_CHG_RSP* p_rsp); + +static void bta_gatts_conn_cback(tGATT_IF gatt_if, BD_ADDR bda, + uint16_t conn_id, bool connected, + tGATT_DISCONN_REASON reason, + tGATT_TRANSPORT transport); +static void bta_gatts_send_request_cback(uint16_t conn_id, uint32_t trans_id, + tGATTS_REQ_TYPE req_type, + tGATTS_DATA* p_data); +static void bta_gatts_cong_cback(uint16_t conn_id, bool congested); -static void bta_gatts_nv_save_cback(bool is_saved, tGATTS_HNDL_RANGE *p_hndl_range); -static bool bta_gatts_nv_srv_chg_cback(tGATTS_SRV_CHG_CMD cmd, tGATTS_SRV_CHG_REQ *p_req, - tGATTS_SRV_CHG_RSP *p_rsp); - -static void bta_gatts_conn_cback (tGATT_IF gatt_if, BD_ADDR bda, uint16_t conn_id, - bool connected, tGATT_DISCONN_REASON reason, - tGATT_TRANSPORT transport); -static void bta_gatts_send_request_cback (uint16_t conn_id, - uint32_t trans_id, - tGATTS_REQ_TYPE req_type, tGATTS_DATA *p_data); -static void bta_gatts_cong_cback (uint16_t conn_id, bool congested); - -static tGATT_CBACK bta_gatts_cback = -{ - bta_gatts_conn_cback, - NULL, - NULL, - NULL, - bta_gatts_send_request_cback, - NULL, - bta_gatts_cong_cback -}; - -tGATT_APPL_INFO bta_gatts_nv_cback = -{ - bta_gatts_nv_save_cback, - bta_gatts_nv_srv_chg_cback -}; +static tGATT_CBACK bta_gatts_cback = { + bta_gatts_conn_cback, NULL, NULL, NULL, bta_gatts_send_request_cback, NULL, + bta_gatts_cong_cback}; + +tGATT_APPL_INFO bta_gatts_nv_cback = {bta_gatts_nv_save_cback, + bta_gatts_nv_srv_chg_cback}; /******************************************************************************* * @@ -73,35 +65,36 @@ tGATT_APPL_INFO bta_gatts_nv_cback = * * Description NV save callback function. * - * Parameter is_add: true is to add a handle range; otherwise is to delete. + * Parameter is_add: true is to add a handle range; otherwise is to + *delete. * Returns none. * ******************************************************************************/ -static void bta_gatts_nv_save_cback(bool is_add, tGATTS_HNDL_RANGE *p_hndl_range) -{ - bta_gatts_co_update_handle_range(is_add, (tBTA_GATTS_HNDL_RANGE *)p_hndl_range); +static void bta_gatts_nv_save_cback(bool is_add, + tGATTS_HNDL_RANGE* p_hndl_range) { + bta_gatts_co_update_handle_range(is_add, + (tBTA_GATTS_HNDL_RANGE*)p_hndl_range); } - /******************************************************************************* * * Function bta_gatts_nv_srv_chg_cback * * Description NV save callback function. * - * Parameter is_add: true is to add a handle range; otherwise is to delete. + * Parameter is_add: true is to add a handle range; otherwise is to + *delete. * Returns none. * ******************************************************************************/ static bool bta_gatts_nv_srv_chg_cback(tGATTS_SRV_CHG_CMD cmd, - tGATTS_SRV_CHG_REQ *p_req, tGATTS_SRV_CHG_RSP *p_rsp) -{ - return bta_gatts_co_srv_chg((tBTA_GATTS_SRV_CHG_CMD) cmd, - (tBTA_GATTS_SRV_CHG_REQ *) p_req, - (tBTA_GATTS_SRV_CHG_RSP *) p_rsp); + tGATTS_SRV_CHG_REQ* p_req, + tGATTS_SRV_CHG_RSP* p_rsp) { + return bta_gatts_co_srv_chg((tBTA_GATTS_SRV_CHG_CMD)cmd, + (tBTA_GATTS_SRV_CHG_REQ*)p_req, + (tBTA_GATTS_SRV_CHG_RSP*)p_rsp); } - /******************************************************************************* * * Function bta_gatts_enable @@ -111,35 +104,29 @@ static bool bta_gatts_nv_srv_chg_cback(tGATTS_SRV_CHG_CMD cmd, * Returns none. * ******************************************************************************/ -void bta_gatts_enable(tBTA_GATTS_CB *p_cb) -{ - uint8_t index=0; - tBTA_GATTS_HNDL_RANGE handle_range; - - if (p_cb->enabled) - { - APPL_TRACE_DEBUG("GATTS already enabled."); - } - else - { - memset(p_cb, 0, sizeof(tBTA_GATTS_CB)); +void bta_gatts_enable(tBTA_GATTS_CB* p_cb) { + uint8_t index = 0; + tBTA_GATTS_HNDL_RANGE handle_range; - p_cb->enabled = true; + if (p_cb->enabled) { + APPL_TRACE_DEBUG("GATTS already enabled."); + } else { + memset(p_cb, 0, sizeof(tBTA_GATTS_CB)); - while ( bta_gatts_co_load_handle_range(index, &handle_range)) - { - GATTS_AddHandleRange((tGATTS_HNDL_RANGE *)&handle_range); - memset(&handle_range, 0, sizeof(tGATTS_HNDL_RANGE)); - index++; - } + p_cb->enabled = true; - APPL_TRACE_DEBUG("bta_gatts_enable: num of handle range added=%d", index); + while (bta_gatts_co_load_handle_range(index, &handle_range)) { + GATTS_AddHandleRange((tGATTS_HNDL_RANGE*)&handle_range); + memset(&handle_range, 0, sizeof(tGATTS_HNDL_RANGE)); + index++; + } + + APPL_TRACE_DEBUG("bta_gatts_enable: num of handle range added=%d", index); - if (!GATTS_NVRegister(&bta_gatts_nv_cback)) - { - APPL_TRACE_ERROR("BTA GATTS NV register failed."); - } + if (!GATTS_NVRegister(&bta_gatts_nv_cback)) { + APPL_TRACE_ERROR("BTA GATTS NV register failed."); } + } } /******************************************************************************* @@ -151,25 +138,19 @@ void bta_gatts_enable(tBTA_GATTS_CB *p_cb) * Returns none. * ******************************************************************************/ -void bta_gatts_api_disable(tBTA_GATTS_CB *p_cb) -{ - uint8_t i; - - if (p_cb->enabled) - { - for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i ++) - { - if (p_cb->rcb[i].in_use) - { - GATT_Deregister(p_cb->rcb[i].gatt_if); - } - } - memset(p_cb, 0, sizeof(tBTA_GATTS_CB)); - } - else - { - APPL_TRACE_ERROR("GATTS not enabled"); +void bta_gatts_api_disable(tBTA_GATTS_CB* p_cb) { + uint8_t i; + + if (p_cb->enabled) { + for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i++) { + if (p_cb->rcb[i].in_use) { + GATT_Deregister(p_cb->rcb[i].gatt_if); + } } + memset(p_cb, 0, sizeof(tBTA_GATTS_CB)); + } else { + APPL_TRACE_ERROR("GATTS not enabled"); + } } /******************************************************************************* @@ -181,74 +162,65 @@ void bta_gatts_api_disable(tBTA_GATTS_CB *p_cb) * Returns none. * ******************************************************************************/ -void bta_gatts_register(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg) -{ - tBTA_GATTS cb_data; - tBTA_GATT_STATUS status = BTA_GATT_OK; - uint8_t i, first_unuse = 0xff; - - if (p_cb->enabled == false) - { - bta_gatts_enable(p_cb); +void bta_gatts_register(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg) { + tBTA_GATTS cb_data; + tBTA_GATT_STATUS status = BTA_GATT_OK; + uint8_t i, first_unuse = 0xff; + + if (p_cb->enabled == false) { + bta_gatts_enable(p_cb); + } + + for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i++) { + if (p_cb->rcb[i].in_use) { + if (bta_gatts_uuid_compare(p_cb->rcb[i].app_uuid, + p_msg->api_reg.app_uuid)) { + APPL_TRACE_ERROR("application already registered."); + status = BTA_GATT_DUP_REG; + break; + } } - - for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i ++) - { - if (p_cb->rcb[i].in_use) - { - if (bta_gatts_uuid_compare(p_cb->rcb[i].app_uuid, p_msg->api_reg.app_uuid)) - { - APPL_TRACE_ERROR("application already registered."); - status = BTA_GATT_DUP_REG; - break; - } - } + } + + if (status == BTA_GATT_OK) { + for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i++) { + if (first_unuse == 0xff && !p_cb->rcb[i].in_use) { + first_unuse = i; + break; + } } - if (status == BTA_GATT_OK) - { - for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i ++) - { - if (first_unuse == 0xff && !p_cb->rcb[i].in_use) - { - first_unuse = i; - break; - } - } - - cb_data.reg_oper.server_if = BTA_GATTS_INVALID_IF; - memcpy(&cb_data.reg_oper.uuid, &p_msg->api_reg.app_uuid, sizeof(tBT_UUID)); - if (first_unuse != 0xff) - { - APPL_TRACE_ERROR("register application first_unuse rcb_idx = %d", first_unuse); - - p_cb->rcb[first_unuse].in_use = true; - p_cb->rcb[first_unuse].p_cback = p_msg->api_reg.p_cback; - memcpy(&p_cb->rcb[first_unuse].app_uuid, &p_msg->api_reg.app_uuid, sizeof(tBT_UUID)); - cb_data.reg_oper.server_if = - p_cb->rcb[first_unuse].gatt_if = - GATT_Register(&p_msg->api_reg.app_uuid, &bta_gatts_cback); - if ( !p_cb->rcb[first_unuse].gatt_if) { - status = BTA_GATT_NO_RESOURCES; - } else { - tBTA_GATTS_INT_START_IF *p_buf = - (tBTA_GATTS_INT_START_IF *)osi_malloc(sizeof(tBTA_GATTS_INT_START_IF)); - p_buf->hdr.event = BTA_GATTS_INT_START_IF_EVT; - p_buf->server_if = p_cb->rcb[first_unuse].gatt_if; - - bta_sys_sendmsg(p_buf); - } - } else { - status = BTA_GATT_NO_RESOURCES; - } - + cb_data.reg_oper.server_if = BTA_GATTS_INVALID_IF; + memcpy(&cb_data.reg_oper.uuid, &p_msg->api_reg.app_uuid, sizeof(tBT_UUID)); + if (first_unuse != 0xff) { + APPL_TRACE_ERROR("register application first_unuse rcb_idx = %d", + first_unuse); + + p_cb->rcb[first_unuse].in_use = true; + p_cb->rcb[first_unuse].p_cback = p_msg->api_reg.p_cback; + memcpy(&p_cb->rcb[first_unuse].app_uuid, &p_msg->api_reg.app_uuid, + sizeof(tBT_UUID)); + cb_data.reg_oper.server_if = p_cb->rcb[first_unuse].gatt_if = + GATT_Register(&p_msg->api_reg.app_uuid, &bta_gatts_cback); + if (!p_cb->rcb[first_unuse].gatt_if) { + status = BTA_GATT_NO_RESOURCES; + } else { + tBTA_GATTS_INT_START_IF* p_buf = (tBTA_GATTS_INT_START_IF*)osi_malloc( + sizeof(tBTA_GATTS_INT_START_IF)); + p_buf->hdr.event = BTA_GATTS_INT_START_IF_EVT; + p_buf->server_if = p_cb->rcb[first_unuse].gatt_if; + + bta_sys_sendmsg(p_buf); + } + } else { + status = BTA_GATT_NO_RESOURCES; } - cb_data.reg_oper.status = status; - if (p_msg->api_reg.p_cback) - (*p_msg->api_reg.p_cback)(BTA_GATTS_REG_EVT, &cb_data); + } + cb_data.reg_oper.status = status; + if (p_msg->api_reg.p_cback) + (*p_msg->api_reg.p_cback)(BTA_GATTS_REG_EVT, &cb_data); } - /******************************************************************************* * * Function bta_gatts_start_if @@ -258,17 +230,14 @@ void bta_gatts_register(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg) * Returns none. * ******************************************************************************/ -void bta_gatts_start_if(UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg) -{ - if (bta_gatts_find_app_rcb_by_app_if(p_msg->int_start_if.server_if)) - { - GATT_StartIf(p_msg->int_start_if.server_if); - } - else - { - APPL_TRACE_ERROR("Unable to start app.: Unknown interface =%d", - p_msg->int_start_if.server_if ); - } +void bta_gatts_start_if(UNUSED_ATTR tBTA_GATTS_CB* p_cb, + tBTA_GATTS_DATA* p_msg) { + if (bta_gatts_find_app_rcb_by_app_if(p_msg->int_start_if.server_if)) { + GATT_StartIf(p_msg->int_start_if.server_if); + } else { + APPL_TRACE_ERROR("Unable to start app.: Unknown interface =%d", + p_msg->int_start_if.server_if); + } } /******************************************************************************* * @@ -279,41 +248,36 @@ void bta_gatts_start_if(UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg) * Returns none. * ******************************************************************************/ -void bta_gatts_deregister(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg) -{ - tBTA_GATT_STATUS status = BTA_GATT_ERROR; - tBTA_GATTS_CBACK *p_cback = NULL; - uint8_t i; - tBTA_GATTS cb_data; - - cb_data.reg_oper.server_if = p_msg->api_dereg.server_if; - cb_data.reg_oper.status = status; - - for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i ++) - { - if (p_cb->rcb[i].in_use && p_cb->rcb[i].gatt_if == p_msg->api_dereg.server_if) - { - p_cback = p_cb->rcb[i].p_cback; - status = BTA_GATT_OK; - - /* deregister the app */ - GATT_Deregister(p_cb->rcb[i].gatt_if); - - /* reset cb */ - memset(&p_cb->rcb[i], 0, sizeof(tBTA_GATTS_RCB)); - cb_data.reg_oper.status = status; - break; - } +void bta_gatts_deregister(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg) { + tBTA_GATT_STATUS status = BTA_GATT_ERROR; + tBTA_GATTS_CBACK* p_cback = NULL; + uint8_t i; + tBTA_GATTS cb_data; + + cb_data.reg_oper.server_if = p_msg->api_dereg.server_if; + cb_data.reg_oper.status = status; + + for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i++) { + if (p_cb->rcb[i].in_use && + p_cb->rcb[i].gatt_if == p_msg->api_dereg.server_if) { + p_cback = p_cb->rcb[i].p_cback; + status = BTA_GATT_OK; + + /* deregister the app */ + GATT_Deregister(p_cb->rcb[i].gatt_if); + + /* reset cb */ + memset(&p_cb->rcb[i], 0, sizeof(tBTA_GATTS_RCB)); + cb_data.reg_oper.status = status; + break; } + } - if (p_cback) - { - (*p_cback)(BTA_GATTS_DEREG_EVT, &cb_data); - } - else - { - APPL_TRACE_ERROR("application not registered."); - } + if (p_cback) { + (*p_cback)(BTA_GATTS_DEREG_EVT, &cb_data); + } else { + APPL_TRACE_ERROR("application not registered."); + } } /******************************************************************************* @@ -325,29 +289,23 @@ void bta_gatts_deregister(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg) * Returns none. * ******************************************************************************/ -void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg) -{ - tBTA_GATTS_RCB *p_rcb = &bta_gatts_cb.rcb[p_srvc_cb->rcb_idx]; - tBTA_GATTS cb_data; - - cb_data.srvc_oper.server_if = p_rcb->gatt_if; - // cb_data.srvc_oper.service_id = p_msg->api_add_incl_srvc.hdr.layer_specific; - - if (GATTS_DeleteService(p_rcb->gatt_if, - &p_srvc_cb->service_uuid, - p_srvc_cb->service_id)) - { - cb_data.srvc_oper.status = BTA_GATT_OK; - memset(p_srvc_cb, 0, sizeof(tBTA_GATTS_SRVC_CB)); - } - else - { - cb_data.srvc_oper.status = BTA_GATT_ERROR; - } +void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB* p_srvc_cb, + tBTA_GATTS_DATA* p_msg) { + tBTA_GATTS_RCB* p_rcb = &bta_gatts_cb.rcb[p_srvc_cb->rcb_idx]; + tBTA_GATTS cb_data; - if (p_rcb->p_cback) - (*p_rcb->p_cback)(BTA_GATTS_DELELTE_EVT, &cb_data); + cb_data.srvc_oper.server_if = p_rcb->gatt_if; + // cb_data.srvc_oper.service_id = p_msg->api_add_incl_srvc.hdr.layer_specific; + if (GATTS_DeleteService(p_rcb->gatt_if, &p_srvc_cb->service_uuid, + p_srvc_cb->service_id)) { + cb_data.srvc_oper.status = BTA_GATT_OK; + memset(p_srvc_cb, 0, sizeof(tBTA_GATTS_SRVC_CB)); + } else { + cb_data.srvc_oper.status = BTA_GATT_ERROR; + } + + if (p_rcb->p_cback) (*p_rcb->p_cback)(BTA_GATTS_DELELTE_EVT, &cb_data); } /******************************************************************************* @@ -359,21 +317,19 @@ void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p * Returns none. * ******************************************************************************/ -void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, - UNUSED_ATTR tBTA_GATTS_DATA *p_msg) -{ - tBTA_GATTS_RCB *p_rcb = &bta_gatts_cb.rcb[p_srvc_cb->rcb_idx]; - tBTA_GATTS cb_data; - - GATTS_StopService(p_srvc_cb->service_id); - cb_data.srvc_oper.server_if = p_rcb->gatt_if; - cb_data.srvc_oper.service_id = p_srvc_cb->service_id; - cb_data.srvc_oper.status = BTA_GATT_OK; - APPL_TRACE_ERROR("bta_gatts_stop_service service_id= %d", p_srvc_cb->service_id); - - if (p_rcb->p_cback) - (*p_rcb->p_cback)(BTA_GATTS_STOP_EVT, &cb_data); - +void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB* p_srvc_cb, + UNUSED_ATTR tBTA_GATTS_DATA* p_msg) { + tBTA_GATTS_RCB* p_rcb = &bta_gatts_cb.rcb[p_srvc_cb->rcb_idx]; + tBTA_GATTS cb_data; + + GATTS_StopService(p_srvc_cb->service_id); + cb_data.srvc_oper.server_if = p_rcb->gatt_if; + cb_data.srvc_oper.service_id = p_srvc_cb->service_id; + cb_data.srvc_oper.status = BTA_GATT_OK; + APPL_TRACE_ERROR("bta_gatts_stop_service service_id= %d", + p_srvc_cb->service_id); + + if (p_rcb->p_cback) (*p_rcb->p_cback)(BTA_GATTS_STOP_EVT, &cb_data); } /******************************************************************************* * @@ -384,16 +340,13 @@ void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, * Returns none. * ******************************************************************************/ -void bta_gatts_send_rsp (UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg) -{ - if (GATTS_SendRsp (p_msg->api_rsp.hdr.layer_specific, - p_msg->api_rsp.trans_id, - p_msg->api_rsp.status, - (tGATTS_RSP *)p_msg->api_rsp.p_rsp) != GATT_SUCCESS) - { - APPL_TRACE_ERROR("Sending response failed"); - } - +void bta_gatts_send_rsp(UNUSED_ATTR tBTA_GATTS_CB* p_cb, + tBTA_GATTS_DATA* p_msg) { + if (GATTS_SendRsp(p_msg->api_rsp.hdr.layer_specific, p_msg->api_rsp.trans_id, + p_msg->api_rsp.status, + (tGATTS_RSP*)p_msg->api_rsp.p_rsp) != GATT_SUCCESS) { + APPL_TRACE_ERROR("Sending response failed"); + } } /******************************************************************************* * @@ -404,67 +357,56 @@ void bta_gatts_send_rsp (UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_ms * Returns none. * ******************************************************************************/ -void bta_gatts_indicate_handle (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg) -{ - tBTA_GATTS_SRVC_CB *p_srvc_cb; - tBTA_GATTS_RCB *p_rcb = NULL; - tBTA_GATT_STATUS status = BTA_GATT_ILLEGAL_PARAMETER; - tGATT_IF gatt_if; - BD_ADDR remote_bda; - tBTA_TRANSPORT transport; - tBTA_GATTS cb_data; - - p_srvc_cb = bta_gatts_find_srvc_cb_by_attr_id (p_cb, p_msg->api_indicate.attr_id); - - if (p_srvc_cb ) - { - if (GATT_GetConnectionInfor(p_msg->api_indicate.hdr.layer_specific, - &gatt_if, remote_bda, &transport)) - { - p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); - - if (p_msg->api_indicate.need_confirm) - - status = GATTS_HandleValueIndication (p_msg->api_indicate.hdr.layer_specific, - p_msg->api_indicate.attr_id, - p_msg->api_indicate.len, - p_msg->api_indicate.value); - else - status = GATTS_HandleValueNotification (p_msg->api_indicate.hdr.layer_specific, - p_msg->api_indicate.attr_id, - p_msg->api_indicate.len, - p_msg->api_indicate.value); - - /* if over BR_EDR, inform PM for mode change */ - if (transport == BTA_TRANSPORT_BR_EDR) - { - bta_sys_busy(BTA_ID_GATTS, BTA_ALL_APP_ID, remote_bda); - bta_sys_idle(BTA_ID_GATTS, BTA_ALL_APP_ID, remote_bda); - } - } - else - { - APPL_TRACE_ERROR("Unknown connection ID: %d fail sending notification", - p_msg->api_indicate.hdr.layer_specific); - } - - if ((status != GATT_SUCCESS || !p_msg->api_indicate.need_confirm) && - p_rcb && p_cb->rcb[p_srvc_cb->rcb_idx].p_cback) - { - cb_data.req_data.status = status; - cb_data.req_data.conn_id = p_msg->api_indicate.hdr.layer_specific; - - (*p_rcb->p_cback)(BTA_GATTS_CONF_EVT, &cb_data); - } +void bta_gatts_indicate_handle(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg) { + tBTA_GATTS_SRVC_CB* p_srvc_cb; + tBTA_GATTS_RCB* p_rcb = NULL; + tBTA_GATT_STATUS status = BTA_GATT_ILLEGAL_PARAMETER; + tGATT_IF gatt_if; + BD_ADDR remote_bda; + tBTA_TRANSPORT transport; + tBTA_GATTS cb_data; + + p_srvc_cb = + bta_gatts_find_srvc_cb_by_attr_id(p_cb, p_msg->api_indicate.attr_id); + + if (p_srvc_cb) { + if (GATT_GetConnectionInfor(p_msg->api_indicate.hdr.layer_specific, + &gatt_if, remote_bda, &transport)) { + p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); + + if (p_msg->api_indicate.need_confirm) + + status = GATTS_HandleValueIndication( + p_msg->api_indicate.hdr.layer_specific, p_msg->api_indicate.attr_id, + p_msg->api_indicate.len, p_msg->api_indicate.value); + else + status = GATTS_HandleValueNotification( + p_msg->api_indicate.hdr.layer_specific, p_msg->api_indicate.attr_id, + p_msg->api_indicate.len, p_msg->api_indicate.value); + + /* if over BR_EDR, inform PM for mode change */ + if (transport == BTA_TRANSPORT_BR_EDR) { + bta_sys_busy(BTA_ID_GATTS, BTA_ALL_APP_ID, remote_bda); + bta_sys_idle(BTA_ID_GATTS, BTA_ALL_APP_ID, remote_bda); + } + } else { + APPL_TRACE_ERROR("Unknown connection ID: %d fail sending notification", + p_msg->api_indicate.hdr.layer_specific); } - else - { - APPL_TRACE_ERROR("Not an registered servce attribute ID: 0x%04x", - p_msg->api_indicate.attr_id); + + if ((status != GATT_SUCCESS || !p_msg->api_indicate.need_confirm) && + p_rcb && p_cb->rcb[p_srvc_cb->rcb_idx].p_cback) { + cb_data.req_data.status = status; + cb_data.req_data.conn_id = p_msg->api_indicate.hdr.layer_specific; + + (*p_rcb->p_cback)(BTA_GATTS_CONF_EVT, &cb_data); } + } else { + APPL_TRACE_ERROR("Not an registered servce attribute ID: 0x%04x", + p_msg->api_indicate.attr_id); + } } - /******************************************************************************* * * Function bta_gatts_open @@ -474,35 +416,30 @@ void bta_gatts_indicate_handle (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg) * Returns none. * ******************************************************************************/ -void bta_gatts_open (UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg) -{ - tBTA_GATTS_RCB *p_rcb=NULL; - tBTA_GATT_STATUS status= BTA_GATT_ERROR; - uint16_t conn_id; - - if ((p_rcb = bta_gatts_find_app_rcb_by_app_if(p_msg->api_open.server_if)) != NULL) - { - /* should always get the connection ID */ - if (GATT_Connect(p_rcb->gatt_if, p_msg->api_open.remote_bda, - p_msg->api_open.is_direct, p_msg->api_open.transport, false)) - { - status = BTA_GATT_OK; - - if (GATT_GetConnIdIfConnected(p_rcb->gatt_if, p_msg->api_open.remote_bda, - &conn_id, p_msg->api_open.transport)) - { - status = BTA_GATT_ALREADY_OPEN; - } - } +void bta_gatts_open(UNUSED_ATTR tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg) { + tBTA_GATTS_RCB* p_rcb = NULL; + tBTA_GATT_STATUS status = BTA_GATT_ERROR; + uint16_t conn_id; + + if ((p_rcb = bta_gatts_find_app_rcb_by_app_if(p_msg->api_open.server_if)) != + NULL) { + /* should always get the connection ID */ + if (GATT_Connect(p_rcb->gatt_if, p_msg->api_open.remote_bda, + p_msg->api_open.is_direct, p_msg->api_open.transport, + false)) { + status = BTA_GATT_OK; + + if (GATT_GetConnIdIfConnected(p_rcb->gatt_if, p_msg->api_open.remote_bda, + &conn_id, p_msg->api_open.transport)) { + status = BTA_GATT_ALREADY_OPEN; + } } - else - { - APPL_TRACE_ERROR("Inavlide server_if=%d", p_msg->api_open.server_if); - } - - if (p_rcb && p_rcb->p_cback) - (*p_rcb->p_cback)(BTA_GATTS_OPEN_EVT, (tBTA_GATTS *)&status); + } else { + APPL_TRACE_ERROR("Inavlide server_if=%d", p_msg->api_open.server_if); + } + if (p_rcb && p_rcb->p_cback) + (*p_rcb->p_cback)(BTA_GATTS_OPEN_EVT, (tBTA_GATTS*)&status); } /******************************************************************************* * @@ -513,30 +450,25 @@ void bta_gatts_open (UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg) * Returns none. * ******************************************************************************/ -void bta_gatts_cancel_open (UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg) -{ - tBTA_GATTS_RCB *p_rcb; - tBTA_GATT_STATUS status= BTA_GATT_ERROR; - - if ((p_rcb = bta_gatts_find_app_rcb_by_app_if(p_msg->api_cancel_open.server_if)) != NULL) - { - if (!GATT_CancelConnect(p_rcb->gatt_if, p_msg->api_cancel_open.remote_bda, - p_msg->api_cancel_open.is_direct)) - { - APPL_TRACE_ERROR("bta_gatts_cancel_open failed for open request"); - } - else - { - status= BTA_GATT_OK; - } - } - else - { - APPL_TRACE_ERROR("Inavlide server_if=%d", p_msg->api_cancel_open.server_if); +void bta_gatts_cancel_open(UNUSED_ATTR tBTA_GATTS_CB* p_cb, + tBTA_GATTS_DATA* p_msg) { + tBTA_GATTS_RCB* p_rcb; + tBTA_GATT_STATUS status = BTA_GATT_ERROR; + + if ((p_rcb = bta_gatts_find_app_rcb_by_app_if( + p_msg->api_cancel_open.server_if)) != NULL) { + if (!GATT_CancelConnect(p_rcb->gatt_if, p_msg->api_cancel_open.remote_bda, + p_msg->api_cancel_open.is_direct)) { + APPL_TRACE_ERROR("bta_gatts_cancel_open failed for open request"); + } else { + status = BTA_GATT_OK; } + } else { + APPL_TRACE_ERROR("Inavlide server_if=%d", p_msg->api_cancel_open.server_if); + } - if (p_rcb && p_rcb->p_cback) - (*p_rcb->p_cback)(BTA_GATTS_CANCEL_OPEN_EVT, (tBTA_GATTS *)&status); + if (p_rcb && p_rcb->p_cback) + (*p_rcb->p_cback)(BTA_GATTS_CANCEL_OPEN_EVT, (tBTA_GATTS*)&status); } /******************************************************************************* * @@ -547,40 +479,33 @@ void bta_gatts_cancel_open (UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p * Returns none. * ******************************************************************************/ -void bta_gatts_close (UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg) -{ - tBTA_GATTS_RCB *p_rcb; - tBTA_GATT_STATUS status= BTA_GATT_ERROR; - tGATT_IF gatt_if; - BD_ADDR remote_bda; - tBTA_GATT_TRANSPORT transport; - - if (GATT_GetConnectionInfor(p_msg->hdr.layer_specific, &gatt_if, remote_bda, &transport)) - { - if (GATT_Disconnect(p_msg->hdr.layer_specific) != GATT_SUCCESS) - { - APPL_TRACE_ERROR("bta_gatts_close fail conn_id=%d", p_msg->hdr.layer_specific); - } - else - { - status= BTA_GATT_OK; - } - - p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); - - if (p_rcb && p_rcb->p_cback) - { - if (transport == BTA_TRANSPORT_BR_EDR) - bta_sys_conn_close( BTA_ID_GATTS ,BTA_ALL_APP_ID, remote_bda); - - (*p_rcb->p_cback)(BTA_GATTS_CLOSE_EVT, (tBTA_GATTS *)&status); - } - } - else - { - APPL_TRACE_ERROR("Unknown connection ID: %d", p_msg->hdr.layer_specific); +void bta_gatts_close(UNUSED_ATTR tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg) { + tBTA_GATTS_RCB* p_rcb; + tBTA_GATT_STATUS status = BTA_GATT_ERROR; + tGATT_IF gatt_if; + BD_ADDR remote_bda; + tBTA_GATT_TRANSPORT transport; + + if (GATT_GetConnectionInfor(p_msg->hdr.layer_specific, &gatt_if, remote_bda, + &transport)) { + if (GATT_Disconnect(p_msg->hdr.layer_specific) != GATT_SUCCESS) { + APPL_TRACE_ERROR("bta_gatts_close fail conn_id=%d", + p_msg->hdr.layer_specific); + } else { + status = BTA_GATT_OK; } + p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); + + if (p_rcb && p_rcb->p_cback) { + if (transport == BTA_TRANSPORT_BR_EDR) + bta_sys_conn_close(BTA_ID_GATTS, BTA_ALL_APP_ID, remote_bda); + + (*p_rcb->p_cback)(BTA_GATTS_CLOSE_EVT, (tBTA_GATTS*)&status); + } + } else { + APPL_TRACE_ERROR("Unknown connection ID: %d", p_msg->hdr.layer_specific); + } } /******************************************************************************* @@ -592,48 +517,42 @@ void bta_gatts_close (UNUSED_ATTR tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg) * Returns none. * ******************************************************************************/ -static void bta_gatts_send_request_cback (uint16_t conn_id, - uint32_t trans_id, - tGATTS_REQ_TYPE req_type, tGATTS_DATA *p_data) -{ - tBTA_GATTS cb_data; - tBTA_GATTS_RCB *p_rcb; - tGATT_IF gatt_if; - tBTA_GATT_TRANSPORT transport; - - memset(&cb_data, 0 , sizeof(tBTA_GATTS)); - - if (GATT_GetConnectionInfor(conn_id, &gatt_if, cb_data.req_data.remote_bda, &transport)) - { - p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); - - APPL_TRACE_DEBUG("%s: conn_id=%d trans_id=%d req_type=%d", - __func__, conn_id, trans_id, req_type); - - if (p_rcb && p_rcb->p_cback) - { - /* if over BR_EDR, inform PM for mode change */ - if (transport == BTA_TRANSPORT_BR_EDR) - { - bta_sys_busy(BTA_ID_GATTS, BTA_ALL_APP_ID, cb_data.req_data.remote_bda); - bta_sys_idle(BTA_ID_GATTS, BTA_ALL_APP_ID, cb_data.req_data.remote_bda); - } - - cb_data.req_data.conn_id = conn_id; - cb_data.req_data.trans_id = trans_id; - cb_data.req_data.p_data = (tBTA_GATTS_REQ_DATA *)p_data; - - (*p_rcb->p_cback)(req_type, &cb_data); - } - else - { - APPL_TRACE_ERROR("connection request on gatt_if[%d] is not interested", gatt_if); - } - } - else - { - APPL_TRACE_ERROR("request received on unknown connectino ID: %d", conn_id); +static void bta_gatts_send_request_cback(uint16_t conn_id, uint32_t trans_id, + tGATTS_REQ_TYPE req_type, + tGATTS_DATA* p_data) { + tBTA_GATTS cb_data; + tBTA_GATTS_RCB* p_rcb; + tGATT_IF gatt_if; + tBTA_GATT_TRANSPORT transport; + + memset(&cb_data, 0, sizeof(tBTA_GATTS)); + + if (GATT_GetConnectionInfor(conn_id, &gatt_if, cb_data.req_data.remote_bda, + &transport)) { + p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); + + APPL_TRACE_DEBUG("%s: conn_id=%d trans_id=%d req_type=%d", __func__, + conn_id, trans_id, req_type); + + if (p_rcb && p_rcb->p_cback) { + /* if over BR_EDR, inform PM for mode change */ + if (transport == BTA_TRANSPORT_BR_EDR) { + bta_sys_busy(BTA_ID_GATTS, BTA_ALL_APP_ID, cb_data.req_data.remote_bda); + bta_sys_idle(BTA_ID_GATTS, BTA_ALL_APP_ID, cb_data.req_data.remote_bda); + } + + cb_data.req_data.conn_id = conn_id; + cb_data.req_data.trans_id = trans_id; + cb_data.req_data.p_data = (tBTA_GATTS_REQ_DATA*)p_data; + + (*p_rcb->p_cback)(req_type, &cb_data); + } else { + APPL_TRACE_ERROR("connection request on gatt_if[%d] is not interested", + gatt_if); } + } else { + APPL_TRACE_ERROR("request received on unknown connectino ID: %d", conn_id); + } } /******************************************************************************* @@ -645,50 +564,47 @@ static void bta_gatts_send_request_cback (uint16_t conn_id, * Returns none. * ******************************************************************************/ -static void bta_gatts_conn_cback (tGATT_IF gatt_if, BD_ADDR bda, uint16_t conn_id, - bool connected, tGATT_DISCONN_REASON reason, - tGATT_TRANSPORT transport) -{ - tBTA_GATTS cb_data; - uint8_t evt = connected ? BTA_GATTS_CONNECT_EVT: BTA_GATTS_DISCONNECT_EVT; - tBTA_GATTS_RCB *p_reg; - - APPL_TRACE_DEBUG ("bta_gatts_conn_cback gatt_if=%d conn_id=%d connected=%d reason = 0x%04d", - gatt_if, conn_id, connected, reason); - APPL_TRACE_DEBUG("bta_gatts_conn_cback bda :%02x-%02x-%02x-%02x-%02x-%02x ", - bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); - - bt_bdaddr_t bdaddr; - bdcpy(bdaddr.address, bda); - if (connected) - btif_debug_conn_state(bdaddr, BTIF_DEBUG_CONNECTED, GATT_CONN_UNKNOWN); - else - btif_debug_conn_state(bdaddr, BTIF_DEBUG_DISCONNECTED, reason); - - p_reg = bta_gatts_find_app_rcb_by_app_if(gatt_if); - - if (p_reg && p_reg->p_cback) - { - /* there is no RM for GATT */ - if (transport == BTA_TRANSPORT_BR_EDR) - { - if (connected) - bta_sys_conn_open(BTA_ID_GATTS, BTA_ALL_APP_ID, bda); - else - bta_sys_conn_close( BTA_ID_GATTS ,BTA_ALL_APP_ID, bda); - } - - cb_data.conn.conn_id = conn_id; - cb_data.conn.server_if = gatt_if; - cb_data.conn.reason = reason; - cb_data.conn.transport = transport; - memcpy(cb_data.conn.remote_bda, bda, BD_ADDR_LEN); - (*p_reg->p_cback)(evt, &cb_data); - } - else - { - APPL_TRACE_ERROR("bta_gatts_conn_cback server_if=%d not found",gatt_if); +static void bta_gatts_conn_cback(tGATT_IF gatt_if, BD_ADDR bda, + uint16_t conn_id, bool connected, + tGATT_DISCONN_REASON reason, + tGATT_TRANSPORT transport) { + tBTA_GATTS cb_data; + uint8_t evt = connected ? BTA_GATTS_CONNECT_EVT : BTA_GATTS_DISCONNECT_EVT; + tBTA_GATTS_RCB* p_reg; + + APPL_TRACE_DEBUG( + "bta_gatts_conn_cback gatt_if=%d conn_id=%d connected=%d reason = 0x%04d", + gatt_if, conn_id, connected, reason); + APPL_TRACE_DEBUG("bta_gatts_conn_cback bda :%02x-%02x-%02x-%02x-%02x-%02x ", + bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); + + bt_bdaddr_t bdaddr; + bdcpy(bdaddr.address, bda); + if (connected) + btif_debug_conn_state(bdaddr, BTIF_DEBUG_CONNECTED, GATT_CONN_UNKNOWN); + else + btif_debug_conn_state(bdaddr, BTIF_DEBUG_DISCONNECTED, reason); + + p_reg = bta_gatts_find_app_rcb_by_app_if(gatt_if); + + if (p_reg && p_reg->p_cback) { + /* there is no RM for GATT */ + if (transport == BTA_TRANSPORT_BR_EDR) { + if (connected) + bta_sys_conn_open(BTA_ID_GATTS, BTA_ALL_APP_ID, bda); + else + bta_sys_conn_close(BTA_ID_GATTS, BTA_ALL_APP_ID, bda); } + + cb_data.conn.conn_id = conn_id; + cb_data.conn.server_if = gatt_if; + cb_data.conn.reason = reason; + cb_data.conn.transport = transport; + memcpy(cb_data.conn.remote_bda, bda, BD_ADDR_LEN); + (*p_reg->p_cback)(evt, &cb_data); + } else { + APPL_TRACE_ERROR("bta_gatts_conn_cback server_if=%d not found", gatt_if); + } } /******************************************************************************* @@ -700,24 +616,22 @@ static void bta_gatts_conn_cback (tGATT_IF gatt_if, BD_ADDR bda, uint16_t conn_i * Returns none. * ******************************************************************************/ -static void bta_gatts_cong_cback (uint16_t conn_id, bool congested) -{ - tBTA_GATTS_RCB *p_rcb; - tGATT_IF gatt_if; - tBTA_GATT_TRANSPORT transport; - tBTA_GATTS cb_data; - - if (GATT_GetConnectionInfor(conn_id, &gatt_if, cb_data.req_data.remote_bda, &transport)) - { - p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); - - if (p_rcb && p_rcb->p_cback) - { - cb_data.congest.conn_id = conn_id; - cb_data.congest.congested = congested; - - (*p_rcb->p_cback)(BTA_GATTS_CONGEST_EVT, &cb_data); - } +static void bta_gatts_cong_cback(uint16_t conn_id, bool congested) { + tBTA_GATTS_RCB* p_rcb; + tGATT_IF gatt_if; + tBTA_GATT_TRANSPORT transport; + tBTA_GATTS cb_data; + + if (GATT_GetConnectionInfor(conn_id, &gatt_if, cb_data.req_data.remote_bda, + &transport)) { + p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); + + if (p_rcb && p_rcb->p_cback) { + cb_data.congest.conn_id = conn_id; + cb_data.congest.congested = congested; + + (*p_rcb->p_cback)(BTA_GATTS_CONGEST_EVT, &cb_data); } + } } #endif /* BTA_GATT_INCLUDED */ diff --git a/system/bta/gatt/bta_gatts_api.cc b/system/bta/gatt/bta_gatts_api.cc index 4321edb0767..e6f9d04cb22 100644 --- a/system/bta/gatt/bta_gatts_api.cc +++ b/system/bta/gatt/bta_gatts_api.cc @@ -29,21 +29,18 @@ #include #include "bt_common.h" -#include "bta_sys.h" #include "bta_gatt_api.h" #include "bta_gatts_int.h" +#include "bta_sys.h" -void btif_to_bta_uuid(tBT_UUID *p_dest, const bt_uuid_t *p_src); +void btif_to_bta_uuid(tBT_UUID* p_dest, const bt_uuid_t* p_src); /***************************************************************************** * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_gatts_reg = -{ - bta_gatts_hdl_event, - BTA_GATTS_Disable -}; +static const tBTA_SYS_REG bta_gatts_reg = {bta_gatts_hdl_event, + BTA_GATTS_Disable}; /******************************************************************************* * @@ -56,18 +53,16 @@ static const tBTA_SYS_REG bta_gatts_reg = * Returns None * ******************************************************************************/ -void BTA_GATTS_Disable(void) -{ - if (bta_sys_is_register(BTA_ID_GATTS) == false) - { - APPL_TRACE_WARNING("GATTS Module not enabled/already disabled"); - return; - } - - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_GATTS_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); - bta_sys_deregister(BTA_ID_GATTS); +void BTA_GATTS_Disable(void) { + if (bta_sys_is_register(BTA_ID_GATTS) == false) { + APPL_TRACE_WARNING("GATTS Module not enabled/already disabled"); + return; + } + + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->event = BTA_GATTS_API_DISABLE_EVT; + bta_sys_sendmsg(p_buf); + bta_sys_deregister(BTA_ID_GATTS); } /******************************************************************************* @@ -83,25 +78,22 @@ void BTA_GATTS_Disable(void) * Returns None * ******************************************************************************/ -void BTA_GATTS_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTS_CBACK *p_cback) -{ - tBTA_GATTS_API_REG *p_buf = - (tBTA_GATTS_API_REG *)osi_malloc(sizeof(tBTA_GATTS_API_REG)); +void BTA_GATTS_AppRegister(tBT_UUID* p_app_uuid, tBTA_GATTS_CBACK* p_cback) { + tBTA_GATTS_API_REG* p_buf = + (tBTA_GATTS_API_REG*)osi_malloc(sizeof(tBTA_GATTS_API_REG)); - /* register with BTA system manager */ - if (bta_sys_is_register(BTA_ID_GATTS) == false) - bta_sys_register(BTA_ID_GATTS, &bta_gatts_reg); + /* register with BTA system manager */ + if (bta_sys_is_register(BTA_ID_GATTS) == false) + bta_sys_register(BTA_ID_GATTS, &bta_gatts_reg); - p_buf->hdr.event = BTA_GATTS_API_REG_EVT; - if (p_app_uuid != NULL) - memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID)); - p_buf->p_cback = p_cback; + p_buf->hdr.event = BTA_GATTS_API_REG_EVT; + if (p_app_uuid != NULL) + memcpy(&p_buf->app_uuid, p_app_uuid, sizeof(tBT_UUID)); + p_buf->p_cback = p_cback; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } - - /******************************************************************************* * * Function BTA_GATTS_AppDeregister @@ -113,15 +105,14 @@ void BTA_GATTS_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTS_CBACK *p_cback) * Returns void * ******************************************************************************/ -void BTA_GATTS_AppDeregister(tBTA_GATTS_IF server_if) -{ - tBTA_GATTS_API_DEREG *p_buf = - (tBTA_GATTS_API_DEREG *)osi_malloc(sizeof(tBTA_GATTS_API_DEREG)); +void BTA_GATTS_AppDeregister(tBTA_GATTS_IF server_if) { + tBTA_GATTS_API_DEREG* p_buf = + (tBTA_GATTS_API_DEREG*)osi_malloc(sizeof(tBTA_GATTS_API_DEREG)); - p_buf->hdr.event = BTA_GATTS_API_DEREG_EVT; - p_buf->server_if = server_if; + p_buf->hdr.event = BTA_GATTS_API_DEREG_EVT; + p_buf->server_if = server_if; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -139,56 +130,57 @@ void BTA_GATTS_AppDeregister(tBTA_GATTS_IF server_if) * service cannot be added. * ******************************************************************************/ -extern uint16_t BTA_GATTS_AddService(tBTA_GATTS_IF server_if, vector &service) -{ - uint8_t rcb_idx = bta_gatts_find_app_rcb_idx_by_app_if(&bta_gatts_cb, server_if); +extern uint16_t BTA_GATTS_AddService(tBTA_GATTS_IF server_if, + vector& service) { + uint8_t rcb_idx = + bta_gatts_find_app_rcb_idx_by_app_if(&bta_gatts_cb, server_if); - APPL_TRACE_ERROR("%s: rcb_idx = %d", __func__, rcb_idx); + APPL_TRACE_ERROR("%s: rcb_idx = %d", __func__, rcb_idx); - if (rcb_idx == BTA_GATTS_INVALID_APP) - return BTA_GATT_ERROR; + if (rcb_idx == BTA_GATTS_INVALID_APP) return BTA_GATT_ERROR; - uint8_t srvc_idx = bta_gatts_alloc_srvc_cb(&bta_gatts_cb, rcb_idx); - if (srvc_idx == BTA_GATTS_INVALID_APP) - return BTA_GATT_ERROR; + uint8_t srvc_idx = bta_gatts_alloc_srvc_cb(&bta_gatts_cb, rcb_idx); + if (srvc_idx == BTA_GATTS_INVALID_APP) return BTA_GATT_ERROR; - uint16_t status = GATTS_AddService(server_if, service.data(), service.size()); + uint16_t status = GATTS_AddService(server_if, service.data(), service.size()); - if (status == GATT_SERVICE_STARTED) { - btif_to_bta_uuid(&bta_gatts_cb.srvc_cb[srvc_idx].service_uuid, &service[0].uuid); + if (status == GATT_SERVICE_STARTED) { + btif_to_bta_uuid(&bta_gatts_cb.srvc_cb[srvc_idx].service_uuid, + &service[0].uuid); - // service_id is equal to service start handle - bta_gatts_cb.srvc_cb[srvc_idx].service_id = service[0].attribute_handle; - bta_gatts_cb.srvc_cb[srvc_idx].idx = srvc_idx; + // service_id is equal to service start handle + bta_gatts_cb.srvc_cb[srvc_idx].service_id = service[0].attribute_handle; + bta_gatts_cb.srvc_cb[srvc_idx].idx = srvc_idx; - return BTA_GATT_OK; - }else { - memset(&bta_gatts_cb.srvc_cb[srvc_idx], 0, sizeof(tBTA_GATTS_SRVC_CB)); - APPL_TRACE_ERROR("%s: service creation failed.", __func__); - return BTA_GATT_ERROR; - } + return BTA_GATT_OK; + } else { + memset(&bta_gatts_cb.srvc_cb[srvc_idx], 0, sizeof(tBTA_GATTS_SRVC_CB)); + APPL_TRACE_ERROR("%s: service creation failed.", __func__); + return BTA_GATT_ERROR; + } } /******************************************************************************* * * Function BTA_GATTS_DeleteService * - * Description This function is called to delete a service. When this is done, - * a callback event BTA_GATTS_DELETE_EVT is report with the status. + * Description This function is called to delete a service. When this is + *done, + * a callback event BTA_GATTS_DELETE_EVT is report with the + *status. * * Parameters service_id: service_id to be deleted. * * Returns returns none. * ******************************************************************************/ -void BTA_GATTS_DeleteService(uint16_t service_id) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_GATTS_DeleteService(uint16_t service_id) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_GATTS_API_DEL_SRVC_EVT; - p_buf->layer_specific = service_id; + p_buf->event = BTA_GATTS_API_DEL_SRVC_EVT; + p_buf->layer_specific = service_id; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -202,46 +194,47 @@ void BTA_GATTS_DeleteService(uint16_t service_id) * Returns None * ******************************************************************************/ -void BTA_GATTS_StopService(uint16_t service_id) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_GATTS_StopService(uint16_t service_id) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_GATTS_API_STOP_SRVC_EVT; - p_buf->layer_specific = service_id; + p_buf->event = BTA_GATTS_API_STOP_SRVC_EVT; + p_buf->layer_specific = service_id; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_GATTS_HandleValueIndication * - * Description This function is called to read a characteristics descriptor. + * Description This function is called to read a characteristics + *descriptor. * * Parameters bda - remote device bd address to indicate. * attr_id - attribute ID to indicate. * value - data to indicate. - * need_confirm - if this indication expects a confirmation or not. + * need_confirm - if this indication expects a confirmation or + *not. * * Returns None * ******************************************************************************/ -void BTA_GATTS_HandleValueIndication (uint16_t conn_id, uint16_t attr_id, - std::vector value, bool need_confirm) -{ - tBTA_GATTS_API_INDICATION *p_buf = - (tBTA_GATTS_API_INDICATION *)osi_calloc(sizeof(tBTA_GATTS_API_INDICATION)); - - p_buf->hdr.event = BTA_GATTS_API_INDICATION_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->attr_id = attr_id; - p_buf->need_confirm = need_confirm; - if (value.size() > 0) { - p_buf->len = value.size(); - memcpy(p_buf->value, value.data(), value.size()); - } - - bta_sys_sendmsg(p_buf); +void BTA_GATTS_HandleValueIndication(uint16_t conn_id, uint16_t attr_id, + std::vector value, + bool need_confirm) { + tBTA_GATTS_API_INDICATION* p_buf = + (tBTA_GATTS_API_INDICATION*)osi_calloc(sizeof(tBTA_GATTS_API_INDICATION)); + + p_buf->hdr.event = BTA_GATTS_API_INDICATION_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->attr_id = attr_id; + p_buf->need_confirm = need_confirm; + if (value.size() > 0) { + p_buf->len = value.size(); + memcpy(p_buf->value, value.data(), value.size()); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -258,59 +251,60 @@ void BTA_GATTS_HandleValueIndication (uint16_t conn_id, uint16_t attr_id, * Returns None * ******************************************************************************/ -void BTA_GATTS_SendRsp (uint16_t conn_id, uint32_t trans_id, - tBTA_GATT_STATUS status, tBTA_GATTS_RSP *p_msg) -{ - const size_t len = sizeof(tBTA_GATTS_API_RSP) + sizeof(tBTA_GATTS_RSP); - tBTA_GATTS_API_RSP *p_buf = (tBTA_GATTS_API_RSP *)osi_calloc(len); - - p_buf->hdr.event = BTA_GATTS_API_RSP_EVT; - p_buf->hdr.layer_specific = conn_id; - p_buf->trans_id = trans_id; - p_buf->status = status; - if (p_msg != NULL) { - p_buf->p_rsp = (tBTA_GATTS_RSP *)(p_buf + 1); - memcpy(p_buf->p_rsp, p_msg, sizeof(tBTA_GATTS_RSP)); - } - - bta_sys_sendmsg(p_buf); +void BTA_GATTS_SendRsp(uint16_t conn_id, uint32_t trans_id, + tBTA_GATT_STATUS status, tBTA_GATTS_RSP* p_msg) { + const size_t len = sizeof(tBTA_GATTS_API_RSP) + sizeof(tBTA_GATTS_RSP); + tBTA_GATTS_API_RSP* p_buf = (tBTA_GATTS_API_RSP*)osi_calloc(len); + + p_buf->hdr.event = BTA_GATTS_API_RSP_EVT; + p_buf->hdr.layer_specific = conn_id; + p_buf->trans_id = trans_id; + p_buf->status = status; + if (p_msg != NULL) { + p_buf->p_rsp = (tBTA_GATTS_RSP*)(p_buf + 1); + memcpy(p_buf->p_rsp, p_msg, sizeof(tBTA_GATTS_RSP)); + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_GATTS_Open * - * Description Open a direct open connection or add a background auto connection + * Description Open a direct open connection or add a background auto + *connection * bd address * * Parameters server_if: server interface. * remote_bda: remote device BD address. * is_direct: direct connection or background auto connection - * transport : Transport on which GATT connection to be opened (BR/EDR or LE) + * transport : Transport on which GATT connection to be opened + *(BR/EDR or LE) * * Returns void * ******************************************************************************/ void BTA_GATTS_Open(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, bool is_direct, - tBTA_GATT_TRANSPORT transport) -{ - tBTA_GATTS_API_OPEN *p_buf = - (tBTA_GATTS_API_OPEN *)osi_malloc(sizeof(tBTA_GATTS_API_OPEN)); - - p_buf->hdr.event = BTA_GATTS_API_OPEN_EVT; - p_buf->server_if = server_if; - p_buf->is_direct = is_direct; - p_buf->transport = transport; - memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); - - bta_sys_sendmsg(p_buf); + tBTA_GATT_TRANSPORT transport) { + tBTA_GATTS_API_OPEN* p_buf = + (tBTA_GATTS_API_OPEN*)osi_malloc(sizeof(tBTA_GATTS_API_OPEN)); + + p_buf->hdr.event = BTA_GATTS_API_OPEN_EVT; + p_buf->server_if = server_if; + p_buf->is_direct = is_direct; + p_buf->transport = transport; + memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); + + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_GATTS_CancelOpen * - * Description Cancel a direct open connection or remove a background auto connection + * Description Cancel a direct open connection or remove a background auto + *connection * bd address * * Parameters server_if: server interface. @@ -320,17 +314,17 @@ void BTA_GATTS_Open(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, bool is_direct, * Returns void * ******************************************************************************/ -void BTA_GATTS_CancelOpen(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, bool is_direct) -{ - tBTA_GATTS_API_CANCEL_OPEN *p_buf = - (tBTA_GATTS_API_CANCEL_OPEN *)osi_malloc(sizeof(tBTA_GATTS_API_CANCEL_OPEN)); +void BTA_GATTS_CancelOpen(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, + bool is_direct) { + tBTA_GATTS_API_CANCEL_OPEN* p_buf = (tBTA_GATTS_API_CANCEL_OPEN*)osi_malloc( + sizeof(tBTA_GATTS_API_CANCEL_OPEN)); - p_buf->hdr.event = BTA_GATTS_API_CANCEL_OPEN_EVT; - p_buf->server_if = server_if; - p_buf->is_direct = is_direct; - memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); + p_buf->hdr.event = BTA_GATTS_API_CANCEL_OPEN_EVT; + p_buf->server_if = server_if; + p_buf->is_direct = is_direct; + memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -344,14 +338,13 @@ void BTA_GATTS_CancelOpen(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, bool is_d * Returns void * ******************************************************************************/ -void BTA_GATTS_Close(uint16_t conn_id) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_GATTS_Close(uint16_t conn_id) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_GATTS_API_CLOSE_EVT; - p_buf->layer_specific = conn_id; + p_buf->event = BTA_GATTS_API_CLOSE_EVT; + p_buf->layer_specific = conn_id; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } #endif /* BTA_GATT_INCLUDED */ diff --git a/system/bta/gatt/bta_gatts_int.h b/system/bta/gatt/bta_gatts_int.h index b6dfba1778a..91bd9feb68b 100644 --- a/system/bta/gatt/bta_gatts_int.h +++ b/system/bta/gatt/bta_gatts_int.h @@ -25,8 +25,8 @@ #define BTA_GATTS_INT_H #include "bt_target.h" -#include "bta_sys.h" #include "bta_gatt_api.h" +#include "bta_sys.h" #include "gatt_api.h" #include "bt_common.h" @@ -34,168 +34,156 @@ /***************************************************************************** * Constants and data types ****************************************************************************/ -enum -{ - BTA_GATTS_API_REG_EVT = BTA_SYS_EVT_START(BTA_ID_GATTS), - BTA_GATTS_INT_START_IF_EVT, - BTA_GATTS_API_DEREG_EVT, - BTA_GATTS_API_INDICATION_EVT, - - BTA_GATTS_API_DEL_SRVC_EVT, - BTA_GATTS_API_STOP_SRVC_EVT, - BTA_GATTS_API_RSP_EVT, - BTA_GATTS_API_OPEN_EVT, - BTA_GATTS_API_CANCEL_OPEN_EVT, - BTA_GATTS_API_CLOSE_EVT, - BTA_GATTS_API_DISABLE_EVT +enum { + BTA_GATTS_API_REG_EVT = BTA_SYS_EVT_START(BTA_ID_GATTS), + BTA_GATTS_INT_START_IF_EVT, + BTA_GATTS_API_DEREG_EVT, + BTA_GATTS_API_INDICATION_EVT, + + BTA_GATTS_API_DEL_SRVC_EVT, + BTA_GATTS_API_STOP_SRVC_EVT, + BTA_GATTS_API_RSP_EVT, + BTA_GATTS_API_OPEN_EVT, + BTA_GATTS_API_CANCEL_OPEN_EVT, + BTA_GATTS_API_CLOSE_EVT, + BTA_GATTS_API_DISABLE_EVT }; typedef uint16_t tBTA_GATTS_INT_EVT; /* max number of application allowed on device */ -#define BTA_GATTS_MAX_APP_NUM GATT_MAX_SR_PROFILES +#define BTA_GATTS_MAX_APP_NUM GATT_MAX_SR_PROFILES /* max number of services allowed in the device */ -#define BTA_GATTS_MAX_SRVC_NUM GATT_MAX_SR_PROFILES +#define BTA_GATTS_MAX_SRVC_NUM GATT_MAX_SR_PROFILES /* internal strucutre for GATTC register API */ -typedef struct -{ - BT_HDR hdr; - tBT_UUID app_uuid; - tBTA_GATTS_CBACK *p_cback; -}tBTA_GATTS_API_REG; - -typedef struct -{ - BT_HDR hdr; - tBTA_GATTS_IF server_if; -}tBTA_GATTS_INT_START_IF; +typedef struct { + BT_HDR hdr; + tBT_UUID app_uuid; + tBTA_GATTS_CBACK* p_cback; +} tBTA_GATTS_API_REG; + +typedef struct { + BT_HDR hdr; + tBTA_GATTS_IF server_if; +} tBTA_GATTS_INT_START_IF; typedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG; -typedef struct -{ - BT_HDR hdr; - tBTA_GATTS_IF server_if; - btgatt_db_element_t *service; - uint16_t count; +typedef struct { + BT_HDR hdr; + tBTA_GATTS_IF server_if; + btgatt_db_element_t* service; + uint16_t count; } tBTA_GATTS_API_ADD_SERVICE; -typedef struct -{ - BT_HDR hdr; - uint16_t attr_id; - uint16_t len; - bool need_confirm; - uint8_t value[BTA_GATT_MAX_ATTR_LEN]; -}tBTA_GATTS_API_INDICATION; - -typedef struct -{ - BT_HDR hdr; - uint32_t trans_id; - tBTA_GATT_STATUS status; - tBTA_GATTS_RSP *p_rsp; -}tBTA_GATTS_API_RSP; - -typedef struct -{ - BT_HDR hdr; - tBTA_GATT_TRANSPORT transport; -}tBTA_GATTS_API_START; - - -typedef struct -{ - BT_HDR hdr; - BD_ADDR remote_bda; - tBTA_GATTS_IF server_if; - bool is_direct; - tBTA_GATT_TRANSPORT transport; - -}tBTA_GATTS_API_OPEN; +typedef struct { + BT_HDR hdr; + uint16_t attr_id; + uint16_t len; + bool need_confirm; + uint8_t value[BTA_GATT_MAX_ATTR_LEN]; +} tBTA_GATTS_API_INDICATION; + +typedef struct { + BT_HDR hdr; + uint32_t trans_id; + tBTA_GATT_STATUS status; + tBTA_GATTS_RSP* p_rsp; +} tBTA_GATTS_API_RSP; + +typedef struct { + BT_HDR hdr; + tBTA_GATT_TRANSPORT transport; +} tBTA_GATTS_API_START; + +typedef struct { + BT_HDR hdr; + BD_ADDR remote_bda; + tBTA_GATTS_IF server_if; + bool is_direct; + tBTA_GATT_TRANSPORT transport; + +} tBTA_GATTS_API_OPEN; typedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN; -typedef union -{ - BT_HDR hdr; - tBTA_GATTS_API_REG api_reg; - tBTA_GATTS_API_DEREG api_dereg; - tBTA_GATTS_API_ADD_SERVICE api_add_service; - tBTA_GATTS_API_INDICATION api_indicate; - tBTA_GATTS_API_RSP api_rsp; - tBTA_GATTS_API_OPEN api_open; - tBTA_GATTS_API_CANCEL_OPEN api_cancel_open; - - tBTA_GATTS_INT_START_IF int_start_if; +typedef union { + BT_HDR hdr; + tBTA_GATTS_API_REG api_reg; + tBTA_GATTS_API_DEREG api_dereg; + tBTA_GATTS_API_ADD_SERVICE api_add_service; + tBTA_GATTS_API_INDICATION api_indicate; + tBTA_GATTS_API_RSP api_rsp; + tBTA_GATTS_API_OPEN api_open; + tBTA_GATTS_API_CANCEL_OPEN api_cancel_open; + + tBTA_GATTS_INT_START_IF int_start_if; } tBTA_GATTS_DATA; /* application registration control block */ -typedef struct -{ - bool in_use; - tBT_UUID app_uuid; - tBTA_GATTS_CBACK *p_cback; - tBTA_GATTS_IF gatt_if; -}tBTA_GATTS_RCB; +typedef struct { + bool in_use; + tBT_UUID app_uuid; + tBTA_GATTS_CBACK* p_cback; + tBTA_GATTS_IF gatt_if; +} tBTA_GATTS_RCB; /* service registration control block */ -typedef struct -{ - tBT_UUID service_uuid; /* service UUID */ - uint16_t service_id; /* service start handle */ - uint8_t rcb_idx; - uint8_t idx; /* self index of serviec CB */ - bool in_use; -}tBTA_GATTS_SRVC_CB; - +typedef struct { + tBT_UUID service_uuid; /* service UUID */ + uint16_t service_id; /* service start handle */ + uint8_t rcb_idx; + uint8_t idx; /* self index of serviec CB */ + bool in_use; +} tBTA_GATTS_SRVC_CB; /* GATT server control block */ -typedef struct -{ - bool enabled; - tBTA_GATTS_RCB rcb[BTA_GATTS_MAX_APP_NUM]; - tBTA_GATTS_SRVC_CB srvc_cb[BTA_GATTS_MAX_SRVC_NUM]; -}tBTA_GATTS_CB; - - +typedef struct { + bool enabled; + tBTA_GATTS_RCB rcb[BTA_GATTS_MAX_APP_NUM]; + tBTA_GATTS_SRVC_CB srvc_cb[BTA_GATTS_MAX_SRVC_NUM]; +} tBTA_GATTS_CB; /***************************************************************************** * Global data ****************************************************************************/ /* GATTC control block */ -extern tBTA_GATTS_CB bta_gatts_cb; +extern tBTA_GATTS_CB bta_gatts_cb; /***************************************************************************** * Function prototypes ****************************************************************************/ -extern bool bta_gatts_hdl_event(BT_HDR *p_msg); - -extern void bta_gatts_api_disable(tBTA_GATTS_CB *p_cb); -extern void bta_gatts_api_enable(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_data); -extern void bta_gatts_register(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg); -extern void bta_gatts_start_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg); -extern void bta_gatts_deregister(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg); -extern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); -extern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); - -extern void bta_gatts_send_rsp(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); -extern void bta_gatts_indicate_handle (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); - - -extern void bta_gatts_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); -extern void bta_gatts_cancel_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); -extern void bta_gatts_close (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); +extern bool bta_gatts_hdl_event(BT_HDR* p_msg); + +extern void bta_gatts_api_disable(tBTA_GATTS_CB* p_cb); +extern void bta_gatts_api_enable(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_data); +extern void bta_gatts_register(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); +extern void bta_gatts_start_if(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); +extern void bta_gatts_deregister(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); +extern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB* p_srvc_cb, + tBTA_GATTS_DATA* p_msg); +extern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB* p_srvc_cb, + tBTA_GATTS_DATA* p_msg); + +extern void bta_gatts_send_rsp(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); +extern void bta_gatts_indicate_handle(tBTA_GATTS_CB* p_cb, + tBTA_GATTS_DATA* p_msg); + +extern void bta_gatts_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); +extern void bta_gatts_cancel_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); +extern void bta_gatts_close(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); extern bool bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src); -extern tBTA_GATTS_RCB *bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if); -extern uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_IF server_if); -extern uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB *p_cb, uint8_t rcb_idx); -extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB *p_cb, uint16_t service_id); -extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB *p_cb, uint16_t attr_id); - +extern tBTA_GATTS_RCB* bta_gatts_find_app_rcb_by_app_if( + tBTA_GATTS_IF server_if); +extern uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB* p_cb, + tBTA_GATTS_IF server_if); +extern uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB* p_cb, uint8_t rcb_idx); +extern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_srvc_id( + tBTA_GATTS_CB* p_cb, uint16_t service_id); +extern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_attr_id( + tBTA_GATTS_CB* p_cb, uint16_t attr_id); #endif /* BTA_GATTS_INT_H */ - diff --git a/system/bta/gatt/bta_gatts_main.cc b/system/bta/gatt/bta_gatts_main.cc index f082267c35a..8c973143eb8 100644 --- a/system/bta/gatt/bta_gatts_main.cc +++ b/system/bta/gatt/bta_gatts_main.cc @@ -28,11 +28,11 @@ #include -#include "bta_gatts_int.h" #include "bt_common.h" +#include "bta_gatts_int.h" /* GATTS control block */ -tBTA_GATTS_CB bta_gatts_cb; +tBTA_GATTS_CB bta_gatts_cb; /******************************************************************************* * @@ -44,80 +44,76 @@ tBTA_GATTS_CB bta_gatts_cb; * Returns void * ******************************************************************************/ -bool bta_gatts_hdl_event(BT_HDR *p_msg) -{ - tBTA_GATTS_CB *p_cb = &bta_gatts_cb; - - switch (p_msg->event) - { - case BTA_GATTS_API_DISABLE_EVT: - bta_gatts_api_disable(p_cb); - break; - - case BTA_GATTS_API_REG_EVT: - bta_gatts_register(p_cb, (tBTA_GATTS_DATA *) p_msg); - break; - - case BTA_GATTS_INT_START_IF_EVT: - bta_gatts_start_if(p_cb, (tBTA_GATTS_DATA *) p_msg); - break; - - case BTA_GATTS_API_DEREG_EVT: - bta_gatts_deregister(p_cb, (tBTA_GATTS_DATA *) p_msg); - break; - - case BTA_GATTS_API_INDICATION_EVT: - bta_gatts_indicate_handle(p_cb,(tBTA_GATTS_DATA *) p_msg); - break; - - case BTA_GATTS_API_OPEN_EVT: - bta_gatts_open(p_cb,(tBTA_GATTS_DATA *) p_msg); - break; - - case BTA_GATTS_API_CANCEL_OPEN_EVT: - bta_gatts_cancel_open(p_cb,(tBTA_GATTS_DATA *) p_msg); - break; - - case BTA_GATTS_API_CLOSE_EVT: - bta_gatts_close(p_cb,(tBTA_GATTS_DATA *) p_msg); - break; - - case BTA_GATTS_API_RSP_EVT: - bta_gatts_send_rsp(p_cb,(tBTA_GATTS_DATA *) p_msg); - break; - - case BTA_GATTS_API_DEL_SRVC_EVT: - { - tBTA_GATTS_SRVC_CB *p_srvc_cb = bta_gatts_find_srvc_cb_by_srvc_id(p_cb, - ((tBTA_GATTS_DATA *)p_msg)->api_add_service.hdr.layer_specific); - - if (p_srvc_cb != NULL) - bta_gatts_delete_service(p_srvc_cb, (tBTA_GATTS_DATA *) p_msg); - else - APPL_TRACE_ERROR("%s: can't delete service - no srvc_cb found", __func__); - - break; - } - - case BTA_GATTS_API_STOP_SRVC_EVT: - { - tBTA_GATTS_SRVC_CB *p_srvc_cb = bta_gatts_find_srvc_cb_by_srvc_id(p_cb, - ((tBTA_GATTS_DATA *)p_msg)->api_add_service.hdr.layer_specific); - - if (p_srvc_cb != NULL) - bta_gatts_stop_service(p_srvc_cb, (tBTA_GATTS_DATA *) p_msg); - else - APPL_TRACE_ERROR("%s: can't stop service - no srvc_cb found", __func__); - - break; - } - - default: - break; +bool bta_gatts_hdl_event(BT_HDR* p_msg) { + tBTA_GATTS_CB* p_cb = &bta_gatts_cb; + + switch (p_msg->event) { + case BTA_GATTS_API_DISABLE_EVT: + bta_gatts_api_disable(p_cb); + break; + + case BTA_GATTS_API_REG_EVT: + bta_gatts_register(p_cb, (tBTA_GATTS_DATA*)p_msg); + break; + + case BTA_GATTS_INT_START_IF_EVT: + bta_gatts_start_if(p_cb, (tBTA_GATTS_DATA*)p_msg); + break; + + case BTA_GATTS_API_DEREG_EVT: + bta_gatts_deregister(p_cb, (tBTA_GATTS_DATA*)p_msg); + break; + + case BTA_GATTS_API_INDICATION_EVT: + bta_gatts_indicate_handle(p_cb, (tBTA_GATTS_DATA*)p_msg); + break; + + case BTA_GATTS_API_OPEN_EVT: + bta_gatts_open(p_cb, (tBTA_GATTS_DATA*)p_msg); + break; + + case BTA_GATTS_API_CANCEL_OPEN_EVT: + bta_gatts_cancel_open(p_cb, (tBTA_GATTS_DATA*)p_msg); + break; + + case BTA_GATTS_API_CLOSE_EVT: + bta_gatts_close(p_cb, (tBTA_GATTS_DATA*)p_msg); + break; + + case BTA_GATTS_API_RSP_EVT: + bta_gatts_send_rsp(p_cb, (tBTA_GATTS_DATA*)p_msg); + break; + + case BTA_GATTS_API_DEL_SRVC_EVT: { + tBTA_GATTS_SRVC_CB* p_srvc_cb = bta_gatts_find_srvc_cb_by_srvc_id( + p_cb, ((tBTA_GATTS_DATA*)p_msg)->api_add_service.hdr.layer_specific); + + if (p_srvc_cb != NULL) + bta_gatts_delete_service(p_srvc_cb, (tBTA_GATTS_DATA*)p_msg); + else + APPL_TRACE_ERROR("%s: can't delete service - no srvc_cb found", + __func__); + + break; + } + + case BTA_GATTS_API_STOP_SRVC_EVT: { + tBTA_GATTS_SRVC_CB* p_srvc_cb = bta_gatts_find_srvc_cb_by_srvc_id( + p_cb, ((tBTA_GATTS_DATA*)p_msg)->api_add_service.hdr.layer_specific); + + if (p_srvc_cb != NULL) + bta_gatts_stop_service(p_srvc_cb, (tBTA_GATTS_DATA*)p_msg); + else + APPL_TRACE_ERROR("%s: can't stop service - no srvc_cb found", __func__); + + break; } + default: + break; + } - return (true); + return (true); } #endif /* BTA_GATT_INCLUDED */ diff --git a/system/bta/gatt/bta_gatts_utils.cc b/system/bta/gatt/bta_gatts_utils.cc index 8bd85625435..3301293de59 100644 --- a/system/bta/gatt/bta_gatts_utils.cc +++ b/system/bta/gatt/bta_gatts_utils.cc @@ -28,12 +28,13 @@ #include -#include "utl.h" #include "bt_common.h" -#include "bta_sys.h" #include "bta_gatts_int.h" +#include "bta_sys.h" +#include "utl.h" -static const uint8_t base_uuid[LEN_UUID_128] = {0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, +static const uint8_t base_uuid[LEN_UUID_128] = { + 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; /******************************************************************************* @@ -45,13 +46,13 @@ static const uint8_t base_uuid[LEN_UUID_128] = {0xFB, 0x34, 0x9B, 0x5F, 0x80, 0 * Returns true if two uuid match; false otherwise. * ******************************************************************************/ -static void bta_gatt_convert_uuid16_to_uuid128(uint8_t uuid_128[LEN_UUID_128], uint16_t uuid_16) -{ - uint8_t *p = &uuid_128[LEN_UUID_128 - 4]; +static void bta_gatt_convert_uuid16_to_uuid128(uint8_t uuid_128[LEN_UUID_128], + uint16_t uuid_16) { + uint8_t* p = &uuid_128[LEN_UUID_128 - 4]; - memcpy (uuid_128, base_uuid, LEN_UUID_128); + memcpy(uuid_128, base_uuid, LEN_UUID_128); - UINT16_TO_STREAM(p, uuid_16); + UINT16_TO_STREAM(p, uuid_16); } /******************************************************************************* * @@ -62,20 +63,17 @@ static void bta_gatt_convert_uuid16_to_uuid128(uint8_t uuid_128[LEN_UUID_128], u * Returns pointer to the control block, or otherwise NULL when failed. * ******************************************************************************/ -uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB *p_cb, uint8_t rcb_idx) -{ - uint8_t i; - - for (i = 0; i < BTA_GATTS_MAX_SRVC_NUM; i ++) - { - if (!p_cb->srvc_cb[i].in_use) - { - p_cb->srvc_cb[i].in_use = true; - p_cb->srvc_cb[i].rcb_idx = rcb_idx; - return i; - } +uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB* p_cb, uint8_t rcb_idx) { + uint8_t i; + + for (i = 0; i < BTA_GATTS_MAX_SRVC_NUM; i++) { + if (!p_cb->srvc_cb[i].in_use) { + p_cb->srvc_cb[i].in_use = true; + p_cb->srvc_cb[i].rcb_idx = rcb_idx; + return i; } - return BTA_GATTS_INVALID_APP; + } + return BTA_GATTS_INVALID_APP; } /******************************************************************************* @@ -87,17 +85,15 @@ uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB *p_cb, uint8_t rcb_idx) * Returns pointer to the control block if success, otherwise NULL * ******************************************************************************/ -tBTA_GATTS_RCB *bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if) -{ - uint8_t i; - tBTA_GATTS_RCB *p_reg; - - for (i = 0, p_reg = bta_gatts_cb.rcb; i < BTA_GATTS_MAX_APP_NUM; i ++, p_reg++) - { - if (p_reg->in_use && p_reg->gatt_if == server_if) - return p_reg; - } - return NULL; +tBTA_GATTS_RCB* bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if) { + uint8_t i; + tBTA_GATTS_RCB* p_reg; + + for (i = 0, p_reg = bta_gatts_cb.rcb; i < BTA_GATTS_MAX_APP_NUM; + i++, p_reg++) { + if (p_reg->in_use && p_reg->gatt_if == server_if) return p_reg; + } + return NULL; } /******************************************************************************* @@ -106,20 +102,19 @@ tBTA_GATTS_RCB *bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if) * * Description find the index of the application control block by app ID. * - * Returns index of the control block, or BTA_GATTS_INVALID_APP if failed. + * Returns index of the control block, or BTA_GATTS_INVALID_APP if + *failed. * ******************************************************************************/ -uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_IF server_if) -{ - uint8_t i; +uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB* p_cb, + tBTA_GATTS_IF server_if) { + uint8_t i; - for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i ++) - { - if (p_cb->rcb[i].in_use && p_cb->rcb[i].gatt_if == server_if) - return i; - } - return BTA_GATTS_INVALID_APP; + for (i = 0; i < BTA_GATTS_MAX_APP_NUM; i++) { + if (p_cb->rcb[i].in_use && p_cb->rcb[i].gatt_if == server_if) return i; + } + return BTA_GATTS_INVALID_APP; } /******************************************************************************* * @@ -130,20 +125,19 @@ uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_IF * Returns pointer to the rcb. * ******************************************************************************/ -tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB *p_cb, uint16_t service_id) -{ - uint8_t i; - APPL_TRACE_DEBUG("bta_gatts_find_srvc_cb_by_srvc_id service_id=%d", service_id); - for (i = 0; i < BTA_GATTS_MAX_SRVC_NUM; i ++) - { - if (p_cb->srvc_cb[i].in_use && - p_cb->srvc_cb[i].service_id == service_id) - { - APPL_TRACE_DEBUG("bta_gatts_find_srvc_cb_by_srvc_id found service cb index =%d", i); - return &p_cb->srvc_cb[i]; - } +tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB* p_cb, + uint16_t service_id) { + uint8_t i; + APPL_TRACE_DEBUG("bta_gatts_find_srvc_cb_by_srvc_id service_id=%d", + service_id); + for (i = 0; i < BTA_GATTS_MAX_SRVC_NUM; i++) { + if (p_cb->srvc_cb[i].in_use && p_cb->srvc_cb[i].service_id == service_id) { + APPL_TRACE_DEBUG( + "bta_gatts_find_srvc_cb_by_srvc_id found service cb index =%d", i); + return &p_cb->srvc_cb[i]; } - return NULL; + } + return NULL; } /******************************************************************************* * @@ -154,32 +148,27 @@ tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB *p_cb, uint * Returns pointer to the rcb. * ******************************************************************************/ -tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB *p_cb, uint16_t attr_id) -{ - uint8_t i; - - for (i = 0; i < (BTA_GATTS_MAX_SRVC_NUM); i ++) - { - if (/* middle service */ - (i < (BTA_GATTS_MAX_SRVC_NUM - 1) && - p_cb->srvc_cb[i].in_use && - p_cb->srvc_cb[i + 1].in_use && - attr_id >= p_cb->srvc_cb[i].service_id && - attr_id < p_cb->srvc_cb[i + 1].service_id) || - /* last active service */ - (i < (BTA_GATTS_MAX_SRVC_NUM - 1) && - p_cb->srvc_cb[i].in_use && - !p_cb->srvc_cb[i + 1].in_use && - attr_id >= p_cb->srvc_cb[i].service_id) || - /* last service incb */ - (i == (BTA_GATTS_MAX_SRVC_NUM - 1) && - attr_id >= p_cb->srvc_cb[i].service_id) - ) - { - return &p_cb->srvc_cb[i]; - } +tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB* p_cb, + uint16_t attr_id) { + uint8_t i; + + for (i = 0; i < (BTA_GATTS_MAX_SRVC_NUM); i++) { + if (/* middle service */ + (i < (BTA_GATTS_MAX_SRVC_NUM - 1) && p_cb->srvc_cb[i].in_use && + p_cb->srvc_cb[i + 1].in_use && + attr_id >= p_cb->srvc_cb[i].service_id && + attr_id < p_cb->srvc_cb[i + 1].service_id) || + /* last active service */ + (i < (BTA_GATTS_MAX_SRVC_NUM - 1) && p_cb->srvc_cb[i].in_use && + !p_cb->srvc_cb[i + 1].in_use && + attr_id >= p_cb->srvc_cb[i].service_id) || + /* last service incb */ + (i == (BTA_GATTS_MAX_SRVC_NUM - 1) && + attr_id >= p_cb->srvc_cb[i].service_id)) { + return &p_cb->srvc_cb[i]; } - return NULL; + } + return NULL; } /******************************************************************************* * @@ -190,46 +179,36 @@ tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB *p_cb, uint * Returns true if two uuid match; false otherwise. * ******************************************************************************/ -bool bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src) -{ - uint8_t su[LEN_UUID_128], tu[LEN_UUID_128]; - uint8_t *ps, *pt; - - /* any of the UUID is unspecified */ - if (src.len == 0 || tar.len == 0) - { - return true; - } - - /* If both are 16-bit, we can do a simple compare */ - if (src.len == 2 && tar.len == 2) - { - return src.uu.uuid16 == tar.uu.uuid16; - } - - /* One or both of the UUIDs is 128-bit */ - if (src.len == LEN_UUID_16) - { - /* convert a 16 bits UUID to 128 bits value */ - bta_gatt_convert_uuid16_to_uuid128(su, src.uu.uuid16); - ps = su; - } - else - ps = src.uu.uuid128; - - if (tar.len == LEN_UUID_16) - { - /* convert a 16 bits UUID to 128 bits value */ - bta_gatt_convert_uuid16_to_uuid128(tu, tar.uu.uuid16); - pt = tu; - } - else - pt = tar.uu.uuid128; - - return(memcmp(ps, pt, LEN_UUID_128) == 0); +bool bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src) { + uint8_t su[LEN_UUID_128], tu[LEN_UUID_128]; + uint8_t *ps, *pt; + + /* any of the UUID is unspecified */ + if (src.len == 0 || tar.len == 0) { + return true; + } + + /* If both are 16-bit, we can do a simple compare */ + if (src.len == 2 && tar.len == 2) { + return src.uu.uuid16 == tar.uu.uuid16; + } + + /* One or both of the UUIDs is 128-bit */ + if (src.len == LEN_UUID_16) { + /* convert a 16 bits UUID to 128 bits value */ + bta_gatt_convert_uuid16_to_uuid128(su, src.uu.uuid16); + ps = su; + } else + ps = src.uu.uuid128; + + if (tar.len == LEN_UUID_16) { + /* convert a 16 bits UUID to 128 bits value */ + bta_gatt_convert_uuid16_to_uuid128(tu, tar.uu.uuid16); + pt = tu; + } else + pt = tar.uu.uuid128; + + return (memcmp(ps, pt, LEN_UUID_128) == 0); } - - - #endif diff --git a/system/bta/hf_client/bta_hf_client_act.cc b/system/bta/hf_client/bta_hf_client_act.cc index 2ef22a5e3e3..9724d266a54 100644 --- a/system/bta/hf_client/bta_hf_client_act.cc +++ b/system/bta/hf_client/bta_hf_client_act.cc @@ -23,25 +23,25 @@ * ******************************************************************************/ +#include +#include "bt_utils.h" #include "bta_api.h" #include "bta_dm_api.h" #include "bta_hf_client_api.h" #include "bta_hf_client_int.h" -#include "l2c_api.h" -#include "port_api.h" #include "bta_sys.h" -#include "utl.h" -#include "bt_utils.h" +#include "l2c_api.h" #include "osi/include/compat.h" #include "osi/include/osi.h" -#include +#include "port_api.h" +#include "utl.h" /***************************************************************************** * Constants ****************************************************************************/ /* maximum length of data to read from RFCOMM */ -#define BTA_HF_CLIENT_RFC_READ_MAX 512 +#define BTA_HF_CLIENT_RFC_READ_MAX 512 /******************************************************************************* * @@ -54,35 +54,34 @@ * Returns void * ******************************************************************************/ -void bta_hf_client_register(tBTA_HF_CLIENT_DATA *p_data) -{ - tBTA_HF_CLIENT evt; - tBTA_UTL_COD cod; +void bta_hf_client_register(tBTA_HF_CLIENT_DATA* p_data) { + tBTA_HF_CLIENT evt; + tBTA_UTL_COD cod; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - /* initialize control block */ - bta_hf_client_scb_init(); + /* initialize control block */ + bta_hf_client_scb_init(); - bta_hf_client_cb.scb.serv_sec_mask = p_data->api_register.sec_mask; - bta_hf_client_cb.scb.features = p_data->api_register.features; + bta_hf_client_cb.scb.serv_sec_mask = p_data->api_register.sec_mask; + bta_hf_client_cb.scb.features = p_data->api_register.features; - /* initialize AT control block */ - bta_hf_client_at_init(); + /* initialize AT control block */ + bta_hf_client_at_init(); - /* create SDP records */ - bta_hf_client_create_record(p_data); + /* create SDP records */ + bta_hf_client_create_record(p_data); - /* Set the Audio service class bit */ - cod.service = BTM_COD_SERVICE_AUDIO; - utl_set_device_class(&cod, BTA_UTL_SET_COD_SERVICE_CLASS); + /* Set the Audio service class bit */ + cod.service = BTM_COD_SERVICE_AUDIO; + utl_set_device_class(&cod, BTA_UTL_SET_COD_SERVICE_CLASS); - /* start RFCOMM server */ - bta_hf_client_start_server(); + /* start RFCOMM server */ + bta_hf_client_start_server(); - /* call app callback with register event */ - evt.reg.status = BTA_HF_CLIENT_SUCCESS; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_REGISTER_EVT, &evt); + /* call app callback with register event */ + evt.reg.status = BTA_HF_CLIENT_SUCCESS; + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_REGISTER_EVT, &evt); } /******************************************************************************* @@ -96,18 +95,17 @@ void bta_hf_client_register(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_deregister(tBTA_HF_CLIENT_DATA *p_data) -{ - bta_hf_client_cb.scb.deregister = true; +void bta_hf_client_deregister(tBTA_HF_CLIENT_DATA* p_data) { + bta_hf_client_cb.scb.deregister = true; - /* remove sdp record */ - bta_hf_client_del_record(p_data); + /* remove sdp record */ + bta_hf_client_del_record(p_data); - /* remove rfcomm server */ - bta_hf_client_close_server(); + /* remove rfcomm server */ + bta_hf_client_close_server(); - /* disable */ - bta_hf_client_scb_disable(); + /* disable */ + bta_hf_client_scb_disable(); } /******************************************************************************* @@ -120,12 +118,11 @@ void bta_hf_client_deregister(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_start_dereg(tBTA_HF_CLIENT_DATA *p_data) -{ - bta_hf_client_cb.scb.deregister = true; +void bta_hf_client_start_dereg(tBTA_HF_CLIENT_DATA* p_data) { + bta_hf_client_cb.scb.deregister = true; - /* remove sdp record */ - bta_hf_client_del_record(p_data); + /* remove sdp record */ + bta_hf_client_del_record(p_data); } /******************************************************************************* @@ -138,24 +135,21 @@ void bta_hf_client_start_dereg(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_start_close(tBTA_HF_CLIENT_DATA *p_data) -{ - /* Take the link out of sniff and set L2C idle time to 0 */ - bta_dm_pm_active(bta_hf_client_cb.scb.peer_addr); - L2CA_SetIdleTimeoutByBdAddr(bta_hf_client_cb.scb.peer_addr, 0, BT_TRANSPORT_BR_EDR); - - /* if SCO is open close SCO and wait on RFCOMM close */ - if (bta_hf_client_cb.scb.sco_state == BTA_HF_CLIENT_SCO_OPEN_ST) - { - bta_hf_client_cb.scb.sco_close_rfc = true; - } - else - { - bta_hf_client_rfc_do_close(p_data); - } - - /* always do SCO shutdown to handle all SCO corner cases */ - bta_hf_client_sco_shutdown(NULL); +void bta_hf_client_start_close(tBTA_HF_CLIENT_DATA* p_data) { + /* Take the link out of sniff and set L2C idle time to 0 */ + bta_dm_pm_active(bta_hf_client_cb.scb.peer_addr); + L2CA_SetIdleTimeoutByBdAddr(bta_hf_client_cb.scb.peer_addr, 0, + BT_TRANSPORT_BR_EDR); + + /* if SCO is open close SCO and wait on RFCOMM close */ + if (bta_hf_client_cb.scb.sco_state == BTA_HF_CLIENT_SCO_OPEN_ST) { + bta_hf_client_cb.scb.sco_close_rfc = true; + } else { + bta_hf_client_rfc_do_close(p_data); + } + + /* always do SCO shutdown to handle all SCO corner cases */ + bta_hf_client_sco_shutdown(NULL); } /******************************************************************************* @@ -168,35 +162,33 @@ void bta_hf_client_start_close(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_start_open(tBTA_HF_CLIENT_DATA *p_data) -{ - BD_ADDR pending_bd_addr; - - /* store parameters */ - if (p_data) - { - bdcpy(bta_hf_client_cb.scb.peer_addr, p_data->api_open.bd_addr); - bta_hf_client_cb.scb.cli_sec_mask = p_data->api_open.sec_mask; - } - - /* Check if RFCOMM has any incoming connection to avoid collision. */ - if (PORT_IsOpening (pending_bd_addr)) - { - /* Let the incoming connection goes through. */ - /* Issue collision for now. */ - /* We will decide what to do when we find incoming connection later.*/ - bta_hf_client_collision_cback (0, BTA_ID_HS, 0, bta_hf_client_cb.scb.peer_addr); - return; - } - - /* close server */ - bta_hf_client_close_server(); - - /* set role */ - bta_hf_client_cb.scb.role = BTA_HF_CLIENT_INT; - - /* do service search */ - bta_hf_client_do_disc(); +void bta_hf_client_start_open(tBTA_HF_CLIENT_DATA* p_data) { + BD_ADDR pending_bd_addr; + + /* store parameters */ + if (p_data) { + bdcpy(bta_hf_client_cb.scb.peer_addr, p_data->api_open.bd_addr); + bta_hf_client_cb.scb.cli_sec_mask = p_data->api_open.sec_mask; + } + + /* Check if RFCOMM has any incoming connection to avoid collision. */ + if (PORT_IsOpening(pending_bd_addr)) { + /* Let the incoming connection goes through. */ + /* Issue collision for now. */ + /* We will decide what to do when we find incoming connection later.*/ + bta_hf_client_collision_cback(0, BTA_ID_HS, 0, + bta_hf_client_cb.scb.peer_addr); + return; + } + + /* close server */ + bta_hf_client_close_server(); + + /* set role */ + bta_hf_client_cb.scb.role = BTA_HF_CLIENT_INT; + + /* do service search */ + bta_hf_client_do_disc(); } /******************************************************************************* @@ -209,25 +201,23 @@ void bta_hf_client_start_open(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_hf_client_cback_open(tBTA_HF_CLIENT_DATA *p_data, tBTA_HF_CLIENT_STATUS status) -{ - tBTA_HF_CLIENT evt; - - memset(&evt, 0, sizeof(evt)); - - /* call app callback with open event */ - evt.open.status = status; - if(p_data) - { - /* if p_data is provided then we need to pick the bd address from the open api structure */ - bdcpy(evt.open.bd_addr, p_data->api_open.bd_addr); - } - else - { - bdcpy(evt.open.bd_addr, bta_hf_client_cb.scb.peer_addr); - } - - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_OPEN_EVT, &evt); +static void bta_hf_client_cback_open(tBTA_HF_CLIENT_DATA* p_data, + tBTA_HF_CLIENT_STATUS status) { + tBTA_HF_CLIENT evt; + + memset(&evt, 0, sizeof(evt)); + + /* call app callback with open event */ + evt.open.status = status; + if (p_data) { + /* if p_data is provided then we need to pick the bd address from the open + * api structure */ + bdcpy(evt.open.bd_addr, p_data->api_open.bd_addr); + } else { + bdcpy(evt.open.bd_addr, bta_hf_client_cb.scb.peer_addr); + } + + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_OPEN_EVT, &evt); } /******************************************************************************* @@ -240,14 +230,13 @@ static void bta_hf_client_cback_open(tBTA_HF_CLIENT_DATA *p_data, tBTA_HF_CLIENT * Returns void * ******************************************************************************/ -void bta_hf_client_rfc_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - bta_sys_conn_open(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); +void bta_hf_client_rfc_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + bta_sys_conn_open(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); - bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_SUCCESS); + bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_SUCCESS); - /* start SLC procedure */ - bta_hf_client_slc_seq(false); + /* start SLC procedure */ + bta_hf_client_slc_seq(false); } /******************************************************************************* @@ -260,48 +249,49 @@ void bta_hf_client_rfc_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_rfc_acp_open(tBTA_HF_CLIENT_DATA *p_data) -{ - uint16_t lcid; - BD_ADDR dev_addr; - int status; - - /* set role */ - bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; - - APPL_TRACE_DEBUG ("bta_hf_client_rfc_acp_open: serv_handle = %d rfc.port_handle = %d", - bta_hf_client_cb.scb.serv_handle, p_data->rfc.port_handle); - - /* get bd addr of peer */ - if (PORT_SUCCESS != (status=PORT_CheckConnection(p_data->rfc.port_handle, dev_addr, &lcid))) - { - APPL_TRACE_DEBUG ("bta_hf_client_rfc_acp_open error PORT_CheckConnection returned status %d", status); +void bta_hf_client_rfc_acp_open(tBTA_HF_CLIENT_DATA* p_data) { + uint16_t lcid; + BD_ADDR dev_addr; + int status; + + /* set role */ + bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; + + APPL_TRACE_DEBUG( + "bta_hf_client_rfc_acp_open: serv_handle = %d rfc.port_handle = %d", + bta_hf_client_cb.scb.serv_handle, p_data->rfc.port_handle); + + /* get bd addr of peer */ + if (PORT_SUCCESS != (status = PORT_CheckConnection(p_data->rfc.port_handle, + dev_addr, &lcid))) { + APPL_TRACE_DEBUG( + "bta_hf_client_rfc_acp_open error PORT_CheckConnection returned status " + "%d", + status); + } + + /* Collision Handling */ + if (alarm_is_scheduled(bta_hf_client_cb.scb.collision_timer)) { + alarm_cancel(bta_hf_client_cb.scb.collision_timer); + + if (bdcmp(dev_addr, bta_hf_client_cb.scb.peer_addr) == 0) { + /* If incoming and outgoing device are same, nothing more to do. */ + /* Outgoing conn will be aborted because we have successful incoming conn. + */ + } else { + /* Resume outgoing connection. */ + bta_hf_client_resume_open(); } + } - /* Collision Handling */ - if (alarm_is_scheduled(bta_hf_client_cb.scb.collision_timer)) { - alarm_cancel(bta_hf_client_cb.scb.collision_timer); - - if (bdcmp (dev_addr, bta_hf_client_cb.scb.peer_addr) == 0) - { - /* If incoming and outgoing device are same, nothing more to do. */ - /* Outgoing conn will be aborted because we have successful incoming conn. */ - } - else - { - /* Resume outgoing connection. */ - bta_hf_client_resume_open (); - } - } - - bdcpy (bta_hf_client_cb.scb.peer_addr, dev_addr); - bta_hf_client_cb.scb.conn_handle = p_data->rfc.port_handle; + bdcpy(bta_hf_client_cb.scb.peer_addr, dev_addr); + bta_hf_client_cb.scb.conn_handle = p_data->rfc.port_handle; - /* do service discovery to get features */ - bta_hf_client_do_disc(); + /* do service discovery to get features */ + bta_hf_client_do_disc(); - /* continue with open processing */ - bta_hf_client_rfc_open(p_data); + /* continue with open processing */ + bta_hf_client_rfc_open(p_data); } /******************************************************************************* @@ -314,24 +304,23 @@ void bta_hf_client_rfc_acp_open(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_rfc_fail(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - /* reinitialize stuff */ - bta_hf_client_cb.scb.conn_handle = 0; - bta_hf_client_cb.scb.peer_features = 0; - bta_hf_client_cb.scb.chld_features = 0; - bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; - bta_hf_client_cb.scb.svc_conn = false; - bta_hf_client_cb.scb.send_at_reply = false; - bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; - - bta_hf_client_at_reset(); - - /* reopen server */ - bta_hf_client_start_server(); - - /* call open cback w. failure */ - bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_FAIL_RFCOMM); +void bta_hf_client_rfc_fail(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + /* reinitialize stuff */ + bta_hf_client_cb.scb.conn_handle = 0; + bta_hf_client_cb.scb.peer_features = 0; + bta_hf_client_cb.scb.chld_features = 0; + bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; + bta_hf_client_cb.scb.svc_conn = false; + bta_hf_client_cb.scb.send_at_reply = false; + bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; + + bta_hf_client_at_reset(); + + /* reopen server */ + bta_hf_client_start_server(); + + /* call open cback w. failure */ + bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_FAIL_RFCOMM); } /******************************************************************************* @@ -344,15 +333,14 @@ void bta_hf_client_rfc_fail(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_disc_fail(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - /* reopen server */ - bta_hf_client_start_server(); +void bta_hf_client_disc_fail(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + /* reopen server */ + bta_hf_client_start_server(); - /* reinitialize stuff */ + /* reinitialize stuff */ - /* call open cback w. failure */ - bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_FAIL_SDP); + /* call open cback w. failure */ + bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_FAIL_SDP); } /******************************************************************************* @@ -365,10 +353,9 @@ void bta_hf_client_disc_fail(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_open_fail(tBTA_HF_CLIENT_DATA *p_data) -{ - /* call open cback w. failure */ - bta_hf_client_cback_open(p_data, BTA_HF_CLIENT_FAIL_RESOURCES); +void bta_hf_client_open_fail(tBTA_HF_CLIENT_DATA* p_data) { + /* call open cback w. failure */ + bta_hf_client_cback_open(p_data, BTA_HF_CLIENT_FAIL_RESOURCES); } /******************************************************************************* @@ -381,45 +368,42 @@ void bta_hf_client_open_fail(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_rfc_close(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - /* reinitialize stuff */ - bta_hf_client_cb.scb.peer_features = 0; - bta_hf_client_cb.scb.chld_features = 0; - bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; - bta_hf_client_cb.scb.svc_conn = false; - bta_hf_client_cb.scb.send_at_reply = false; - bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; +void bta_hf_client_rfc_close(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + /* reinitialize stuff */ + bta_hf_client_cb.scb.peer_features = 0; + bta_hf_client_cb.scb.chld_features = 0; + bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; + bta_hf_client_cb.scb.svc_conn = false; + bta_hf_client_cb.scb.send_at_reply = false; + bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; - bta_hf_client_at_reset(); + bta_hf_client_at_reset(); - bta_sys_conn_close(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); + bta_sys_conn_close(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); - /* call close cback */ - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLOSE_EVT, NULL); + /* call close cback */ + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLOSE_EVT, NULL); - /* if not deregistering reopen server */ - if (bta_hf_client_cb.scb.deregister == false) - { - /* Clear peer bd_addr so instance can be reused */ - bdcpy(bta_hf_client_cb.scb.peer_addr, bd_addr_null); + /* if not deregistering reopen server */ + if (bta_hf_client_cb.scb.deregister == false) { + /* Clear peer bd_addr so instance can be reused */ + bdcpy(bta_hf_client_cb.scb.peer_addr, bd_addr_null); - /* start server as it might got closed on open*/ - bta_hf_client_start_server(); + /* start server as it might got closed on open*/ + bta_hf_client_start_server(); - bta_hf_client_cb.scb.conn_handle = 0; + bta_hf_client_cb.scb.conn_handle = 0; - /* Make sure SCO is shutdown */ - bta_hf_client_sco_shutdown(NULL); + /* Make sure SCO is shutdown */ + bta_hf_client_sco_shutdown(NULL); - bta_sys_sco_unuse(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); - } - /* else close port and deallocate scb */ - else - { - bta_hf_client_close_server(); - bta_hf_client_scb_disable(); - } + bta_sys_sco_unuse(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); + } + /* else close port and deallocate scb */ + else { + bta_hf_client_close_server(); + bta_hf_client_scb_disable(); + } } /******************************************************************************* @@ -432,28 +416,26 @@ void bta_hf_client_rfc_close(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_disc_int_res(tBTA_HF_CLIENT_DATA *p_data) -{ - uint16_t event = BTA_HF_CLIENT_DISC_FAIL_EVT; - - APPL_TRACE_DEBUG ("bta_hf_client_disc_int_res: Status: %d", p_data->disc_result.status); - - /* if found service */ - if (p_data->disc_result.status == SDP_SUCCESS || - p_data->disc_result.status == SDP_DB_FULL) - { - /* get attributes */ - if (bta_hf_client_sdp_find_attr()) - { - event = BTA_HF_CLIENT_DISC_OK_EVT; - } +void bta_hf_client_disc_int_res(tBTA_HF_CLIENT_DATA* p_data) { + uint16_t event = BTA_HF_CLIENT_DISC_FAIL_EVT; + + APPL_TRACE_DEBUG("bta_hf_client_disc_int_res: Status: %d", + p_data->disc_result.status); + + /* if found service */ + if (p_data->disc_result.status == SDP_SUCCESS || + p_data->disc_result.status == SDP_DB_FULL) { + /* get attributes */ + if (bta_hf_client_sdp_find_attr()) { + event = BTA_HF_CLIENT_DISC_OK_EVT; } + } - /* free discovery db */ - bta_hf_client_free_db(p_data); + /* free discovery db */ + bta_hf_client_free_db(p_data); - /* send ourselves sdp ok/fail event */ - bta_hf_client_sm_execute(event, p_data); + /* send ourselves sdp ok/fail event */ + bta_hf_client_sm_execute(event, p_data); } /******************************************************************************* @@ -466,18 +448,16 @@ void bta_hf_client_disc_int_res(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_disc_acp_res(tBTA_HF_CLIENT_DATA *p_data) -{ - /* if found service */ - if (p_data->disc_result.status == SDP_SUCCESS || - p_data->disc_result.status == SDP_DB_FULL) - { - /* get attributes */ - bta_hf_client_sdp_find_attr(); - } - - /* free discovery db */ - bta_hf_client_free_db(p_data); +void bta_hf_client_disc_acp_res(tBTA_HF_CLIENT_DATA* p_data) { + /* if found service */ + if (p_data->disc_result.status == SDP_SUCCESS || + p_data->disc_result.status == SDP_DB_FULL) { + /* get attributes */ + bta_hf_client_sdp_find_attr(); + } + + /* free discovery db */ + bta_hf_client_free_db(p_data); } /******************************************************************************* @@ -490,30 +470,27 @@ void bta_hf_client_disc_acp_res(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_rfc_data(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - uint16_t len; - char buf[BTA_HF_CLIENT_RFC_READ_MAX]; - - memset(buf, 0, sizeof(buf)); - - /* read data from rfcomm; if bad status, we're done */ - while (PORT_ReadData(bta_hf_client_cb.scb.conn_handle, buf, BTA_HF_CLIENT_RFC_READ_MAX, &len) == PORT_SUCCESS) - { - /* if no data, we're done */ - if (len == 0) - { - break; - } - - bta_hf_client_at_parse(buf, len); - - /* no more data to read, we're done */ - if (len < BTA_HF_CLIENT_RFC_READ_MAX) - { - break; - } +void bta_hf_client_rfc_data(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + uint16_t len; + char buf[BTA_HF_CLIENT_RFC_READ_MAX]; + + memset(buf, 0, sizeof(buf)); + + /* read data from rfcomm; if bad status, we're done */ + while (PORT_ReadData(bta_hf_client_cb.scb.conn_handle, buf, + BTA_HF_CLIENT_RFC_READ_MAX, &len) == PORT_SUCCESS) { + /* if no data, we're done */ + if (len == 0) { + break; + } + + bta_hf_client_at_parse(buf, len); + + /* no more data to read, we're done */ + if (len < BTA_HF_CLIENT_RFC_READ_MAX) { + break; } + } } /******************************************************************************* @@ -526,23 +503,21 @@ void bta_hf_client_rfc_data(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_svc_conn_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_svc_conn_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - if (!bta_hf_client_cb.scb.svc_conn) - { - /* set state variable */ - bta_hf_client_cb.scb.svc_conn = true; + if (!bta_hf_client_cb.scb.svc_conn) { + /* set state variable */ + bta_hf_client_cb.scb.svc_conn = true; - /* call callback */ - evt.conn.peer_feat = bta_hf_client_cb.scb.peer_features; - evt.conn.chld_feat = bta_hf_client_cb.scb.chld_features; + /* call callback */ + evt.conn.peer_feat = bta_hf_client_cb.scb.peer_features; + evt.conn.chld_feat = bta_hf_client_cb.scb.chld_features; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CONN_EVT, &evt); - } + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CONN_EVT, &evt); + } } /******************************************************************************* @@ -554,16 +529,15 @@ void bta_hf_client_svc_conn_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_ind(tBTA_HF_CLIENT_IND_TYPE type, uint16_t value) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_ind(tBTA_HF_CLIENT_IND_TYPE type, uint16_t value) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - evt.ind.type = type; - evt.ind.value = value; + evt.ind.type = type; + evt.ind.value = value; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_IND_EVT, &evt); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_IND_EVT, &evt); } /******************************************************************************* @@ -577,15 +551,14 @@ void bta_hf_client_ind(tBTA_HF_CLIENT_IND_TYPE type, uint16_t value) * Returns void * ******************************************************************************/ -void bta_hf_client_evt_val(tBTA_HF_CLIENT_EVT type, uint16_t value) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_evt_val(tBTA_HF_CLIENT_EVT type, uint16_t value) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - evt.val.value = value; + evt.val.value = value; - (*bta_hf_client_cb.p_cback)(type, &evt); + (*bta_hf_client_cb.p_cback)(type, &evt); } /******************************************************************************* @@ -598,19 +571,17 @@ void bta_hf_client_evt_val(tBTA_HF_CLIENT_EVT type, uint16_t value) * Returns void * ******************************************************************************/ -void bta_hf_client_operator_name(char *name) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_operator_name(char* name) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - strlcpy(evt.operator_name.name, name, BTA_HF_CLIENT_OPERATOR_NAME_LEN + 1); - evt.operator_name.name[BTA_HF_CLIENT_OPERATOR_NAME_LEN] = '\0'; + strlcpy(evt.operator_name.name, name, BTA_HF_CLIENT_OPERATOR_NAME_LEN + 1); + evt.operator_name.name[BTA_HF_CLIENT_OPERATOR_NAME_LEN] = '\0'; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_OPERATOR_NAME_EVT, &evt); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_OPERATOR_NAME_EVT, &evt); } - /******************************************************************************* * * Function bta_hf_client_clip @@ -621,16 +592,15 @@ void bta_hf_client_operator_name(char *name) * Returns void * ******************************************************************************/ -void bta_hf_client_clip(char *number) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_clip(char* number) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); - evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; + strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); + evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLIP_EVT, &evt); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLIP_EVT, &evt); } /******************************************************************************* @@ -643,16 +613,15 @@ void bta_hf_client_clip(char *number) * Returns void * ******************************************************************************/ -void bta_hf_client_ccwa(char *number) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_ccwa(char* number) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); - evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; + strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); + evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CCWA_EVT, &evt); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CCWA_EVT, &evt); } /******************************************************************************* @@ -665,16 +634,15 @@ void bta_hf_client_ccwa(char *number) * Returns void * ******************************************************************************/ -void bta_hf_client_at_result(tBTA_HF_CLIENT_AT_RESULT_TYPE type, uint16_t cme) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_at_result(tBTA_HF_CLIENT_AT_RESULT_TYPE type, uint16_t cme) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - evt.result.type = type; - evt.result.cme = cme; + evt.result.type = type; + evt.result.cme = cme; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_AT_RESULT_EVT, &evt); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_AT_RESULT_EVT, &evt); } /******************************************************************************* @@ -687,25 +655,24 @@ void bta_hf_client_at_result(tBTA_HF_CLIENT_AT_RESULT_TYPE type, uint16_t cme) * Returns void * ******************************************************************************/ -void bta_hf_client_clcc(uint32_t idx, bool incoming, uint8_t status, bool mpty, char *number) -{ - tBTA_HF_CLIENT evt; - - memset(&evt, 0, sizeof(evt)); - - evt.clcc.idx = idx; - evt.clcc.inc = incoming; - evt.clcc.status = status; - evt.clcc.mpty = mpty; - - if (number) - { - evt.clcc.number_present = true; - strlcpy(evt.clcc.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); - evt.clcc.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; - } +void bta_hf_client_clcc(uint32_t idx, bool incoming, uint8_t status, bool mpty, + char* number) { + tBTA_HF_CLIENT evt; + + memset(&evt, 0, sizeof(evt)); + + evt.clcc.idx = idx; + evt.clcc.inc = incoming; + evt.clcc.status = status; + evt.clcc.mpty = mpty; + + if (number) { + evt.clcc.number_present = true; + strlcpy(evt.clcc.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); + evt.clcc.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; + } - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLCC_EVT, &evt); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLCC_EVT, &evt); } /******************************************************************************* @@ -718,17 +685,16 @@ void bta_hf_client_clcc(uint32_t idx, bool incoming, uint8_t status, bool mpty, * Returns void * ******************************************************************************/ -void bta_hf_client_cnum(char *number, uint16_t service) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_cnum(char* number, uint16_t service) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - evt.cnum.service = service; - strlcpy(evt.cnum.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); - evt.cnum.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; + evt.cnum.service = service; + strlcpy(evt.cnum.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); + evt.cnum.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CNUM_EVT, &evt); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CNUM_EVT, &evt); } /******************************************************************************* @@ -741,14 +707,13 @@ void bta_hf_client_cnum(char *number, uint16_t service) * Returns void * ******************************************************************************/ -void bta_hf_client_binp(char *number) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_binp(char* number) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); - evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; + strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); + evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_BINP_EVT, &evt); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_BINP_EVT, &evt); } diff --git a/system/bta/hf_client/bta_hf_client_api.cc b/system/bta/hf_client/bta_hf_client_api.cc index a253d15c169..e93266174f2 100644 --- a/system/bta/hf_client/bta_hf_client_api.cc +++ b/system/bta/hf_client/bta_hf_client_api.cc @@ -33,12 +33,8 @@ /***************************************************************************** * Constants and data types ****************************************************************************/ -static const tBTA_SYS_REG bta_hf_client_reg = -{ - bta_hf_client_hdl_event, - BTA_HfClientDisable -}; - +static const tBTA_SYS_REG bta_hf_client_reg = {bta_hf_client_hdl_event, + BTA_HfClientDisable}; /***************************************************************************** * External Function Declarations @@ -57,25 +53,23 @@ static const tBTA_SYS_REG bta_hf_client_reg = * Returns BTA_SUCCESS if OK, BTA_FAILURE otherwise. * ******************************************************************************/ -tBTA_STATUS BTA_HfClientEnable(tBTA_HF_CLIENT_CBACK *p_cback) -{ - if (bta_sys_is_register (BTA_ID_HS)) - { - APPL_TRACE_ERROR("BTA HF Client is already enabled, ignoring ..."); - return BTA_FAILURE; - } +tBTA_STATUS BTA_HfClientEnable(tBTA_HF_CLIENT_CBACK* p_cback) { + if (bta_sys_is_register(BTA_ID_HS)) { + APPL_TRACE_ERROR("BTA HF Client is already enabled, ignoring ..."); + return BTA_FAILURE; + } - /* register with BTA system manager */ - bta_sys_register(BTA_ID_HS, &bta_hf_client_reg); + /* register with BTA system manager */ + bta_sys_register(BTA_ID_HS, &bta_hf_client_reg); - tBTA_HF_CLIENT_API_ENABLE *p_buf = - (tBTA_HF_CLIENT_API_ENABLE *)osi_malloc(sizeof(tBTA_HF_CLIENT_API_ENABLE)); - p_buf->hdr.event = BTA_HF_CLIENT_API_ENABLE_EVT; - p_buf->p_cback = p_cback; + tBTA_HF_CLIENT_API_ENABLE* p_buf = + (tBTA_HF_CLIENT_API_ENABLE*)osi_malloc(sizeof(tBTA_HF_CLIENT_API_ENABLE)); + p_buf->hdr.event = BTA_HF_CLIENT_API_ENABLE_EVT; + p_buf->p_cback = p_cback; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); - return BTA_SUCCESS; + return BTA_SUCCESS; } /******************************************************************************* @@ -88,13 +82,12 @@ tBTA_STATUS BTA_HfClientEnable(tBTA_HF_CLIENT_CBACK *p_cback) * Returns void * ******************************************************************************/ -void BTA_HfClientDisable(void) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_HfClientDisable(void) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_HF_CLIENT_API_DISABLE_EVT; + p_buf->event = BTA_HF_CLIENT_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -108,20 +101,19 @@ void BTA_HfClientDisable(void) * ******************************************************************************/ void BTA_HfClientRegister(tBTA_SEC sec_mask, tBTA_HF_CLIENT_FEAT features, - const char *p_service_name) -{ - tBTA_HF_CLIENT_API_REGISTER *p_buf = - (tBTA_HF_CLIENT_API_REGISTER *)osi_malloc(sizeof(tBTA_HF_CLIENT_API_REGISTER)); - - p_buf->hdr.event = BTA_HF_CLIENT_API_REGISTER_EVT; - p_buf->features = features; - p_buf->sec_mask = sec_mask; - if (p_service_name) - strlcpy(p_buf->name, p_service_name, BTA_SERVICE_NAME_LEN); - else - p_buf->name[0] = 0; - - bta_sys_sendmsg(p_buf); + const char* p_service_name) { + tBTA_HF_CLIENT_API_REGISTER* p_buf = (tBTA_HF_CLIENT_API_REGISTER*)osi_malloc( + sizeof(tBTA_HF_CLIENT_API_REGISTER)); + + p_buf->hdr.event = BTA_HF_CLIENT_API_REGISTER_EVT; + p_buf->features = features; + p_buf->sec_mask = sec_mask; + if (p_service_name) + strlcpy(p_buf->name, p_service_name, BTA_SERVICE_NAME_LEN); + else + p_buf->name[0] = 0; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -134,14 +126,13 @@ void BTA_HfClientRegister(tBTA_SEC sec_mask, tBTA_HF_CLIENT_FEAT features, * Returns void * ******************************************************************************/ -void BTA_HfClientDeregister(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_HfClientDeregister(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_HF_CLIENT_API_DEREGISTER_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_HF_CLIENT_API_DEREGISTER_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -157,17 +148,16 @@ void BTA_HfClientDeregister(uint16_t handle) * Returns void * ******************************************************************************/ -void BTA_HfClientOpen(uint16_t handle, BD_ADDR bd_addr, tBTA_SEC sec_mask) -{ - tBTA_HF_CLIENT_API_OPEN *p_buf = - (tBTA_HF_CLIENT_API_OPEN *)osi_malloc(sizeof(tBTA_HF_CLIENT_API_OPEN)); +void BTA_HfClientOpen(uint16_t handle, BD_ADDR bd_addr, tBTA_SEC sec_mask) { + tBTA_HF_CLIENT_API_OPEN* p_buf = + (tBTA_HF_CLIENT_API_OPEN*)osi_malloc(sizeof(tBTA_HF_CLIENT_API_OPEN)); - p_buf->hdr.event = BTA_HF_CLIENT_API_OPEN_EVT; - p_buf->hdr.layer_specific = handle; - bdcpy(p_buf->bd_addr, bd_addr); - p_buf->sec_mask = sec_mask; + p_buf->hdr.event = BTA_HF_CLIENT_API_OPEN_EVT; + p_buf->hdr.layer_specific = handle; + bdcpy(p_buf->bd_addr, bd_addr); + p_buf->sec_mask = sec_mask; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -181,14 +171,13 @@ void BTA_HfClientOpen(uint16_t handle, BD_ADDR bd_addr, tBTA_SEC sec_mask) * Returns void * ******************************************************************************/ -void BTA_HfClientClose(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_HfClientClose(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_HF_CLIENT_API_CLOSE_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_HF_CLIENT_API_CLOSE_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -202,14 +191,13 @@ void BTA_HfClientClose(uint16_t handle) * Returns void * ******************************************************************************/ -void BTA_HfClientAudioOpen(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_HfClientAudioOpen(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_HF_CLIENT_API_AUDIO_OPEN_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_HF_CLIENT_API_AUDIO_OPEN_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -223,14 +211,13 @@ void BTA_HfClientAudioOpen(uint16_t handle) * Returns void * ******************************************************************************/ -void BTA_HfClientAudioClose(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_HfClientAudioClose(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_HF_CLIENT_API_AUDIO_CLOSE_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_HF_CLIENT_API_AUDIO_CLOSE_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -243,24 +230,24 @@ void BTA_HfClientAudioClose(uint16_t handle) * Returns void * ******************************************************************************/ -void BTA_HfClientSendAT(uint16_t handle, tBTA_HF_CLIENT_AT_CMD_TYPE at, uint32_t val1, uint32_t val2, const char *str) -{ - tBTA_HF_CLIENT_DATA_VAL *p_buf = - (tBTA_HF_CLIENT_DATA_VAL *)osi_malloc(sizeof(tBTA_HF_CLIENT_DATA_VAL)); - - p_buf->hdr.event = BTA_HF_CLIENT_SEND_AT_CMD_EVT; - p_buf->uint8_val = at; - p_buf->uint32_val1 = val1; - p_buf->uint32_val2 = val2; - - if (str) { - strlcpy(p_buf->str, str, BTA_HF_CLIENT_NUMBER_LEN + 1); - p_buf->str[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; - } else { - p_buf->str[0] = '\0'; - } - - p_buf->hdr.layer_specific = handle; - - bta_sys_sendmsg(p_buf); +void BTA_HfClientSendAT(uint16_t handle, tBTA_HF_CLIENT_AT_CMD_TYPE at, + uint32_t val1, uint32_t val2, const char* str) { + tBTA_HF_CLIENT_DATA_VAL* p_buf = + (tBTA_HF_CLIENT_DATA_VAL*)osi_malloc(sizeof(tBTA_HF_CLIENT_DATA_VAL)); + + p_buf->hdr.event = BTA_HF_CLIENT_SEND_AT_CMD_EVT; + p_buf->uint8_val = at; + p_buf->uint32_val1 = val1; + p_buf->uint32_val2 = val2; + + if (str) { + strlcpy(p_buf->str, str, BTA_HF_CLIENT_NUMBER_LEN + 1); + p_buf->str[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; + } else { + p_buf->str[0] = '\0'; + } + + p_buf->hdr.layer_specific = handle; + + bta_sys_sendmsg(p_buf); } diff --git a/system/bta/hf_client/bta_hf_client_at.cc b/system/bta/hf_client/bta_hf_client_at.cc index 03f31d06ef0..54c3a017058 100644 --- a/system/bta/hf_client/bta_hf_client_at.cc +++ b/system/bta/hf_client/bta_hf_client_at.cc @@ -20,13 +20,13 @@ #define LOG_TAG "bt_hf_client" #include -#include #include +#include -#include "osi/include/osi.h" #include "bta_hf_client_api.h" #include "bta_hf_client_int.h" #include "osi/include/log.h" +#include "osi/include/osi.h" #include "port_api.h" /* Uncomment to enable AT traffic dumping */ @@ -47,55 +47,65 @@ * ******************************************************************************/ /* BRSF: store received values here */ -extern tBTA_HF_CLIENT_CB bta_hf_client_cb; +extern tBTA_HF_CLIENT_CB bta_hf_client_cb; -extern fixed_queue_t *btu_bta_alarm_queue; +extern fixed_queue_t* btu_bta_alarm_queue; /****************************************************************************** * SUPPORTED EVENT MESSAGES ******************************************************************************/ /* CIND: supported indicator names */ -#define BTA_HF_CLIENT_INDICATOR_BATTERYCHG "battchg" -#define BTA_HF_CLIENT_INDICATOR_SIGNAL "signal" -#define BTA_HF_CLIENT_INDICATOR_SERVICE "service" -#define BTA_HF_CLIENT_INDICATOR_CALL "call" -#define BTA_HF_CLIENT_INDICATOR_ROAM "roam" -#define BTA_HF_CLIENT_INDICATOR_CALLSETUP "callsetup" -#define BTA_HF_CLIENT_INDICATOR_CALLHELD "callheld" - -#define MIN(a, b) \ - ({ __typeof__(a) _a = (a); __typeof__(b) _b = (b); (_a < _b) ? _a : _b; }) +#define BTA_HF_CLIENT_INDICATOR_BATTERYCHG "battchg" +#define BTA_HF_CLIENT_INDICATOR_SIGNAL "signal" +#define BTA_HF_CLIENT_INDICATOR_SERVICE "service" +#define BTA_HF_CLIENT_INDICATOR_CALL "call" +#define BTA_HF_CLIENT_INDICATOR_ROAM "roam" +#define BTA_HF_CLIENT_INDICATOR_CALLSETUP "callsetup" +#define BTA_HF_CLIENT_INDICATOR_CALLHELD "callheld" + +#define MIN(a, b) \ + ({ \ + __typeof__(a) _a = (a); \ + __typeof__(b) _b = (b); \ + (_a < _b) ? _a : _b; \ + }) /* CIND: represents each indicators boundaries */ -typedef struct -{ - const char* name; - uint8_t min; - uint8_t max; - uint8_t namelen; +typedef struct { + const char* name; + uint8_t min; + uint8_t max; + uint8_t namelen; } tBTA_HF_CLIENT_INDICATOR; #define BTA_HF_CLIENT_AT_SUPPORTED_INDICATOR_COUNT 7 /* CIND: storage room for indicators value range and their statuses */ -static const tBTA_HF_CLIENT_INDICATOR bta_hf_client_indicators[BTA_HF_CLIENT_AT_SUPPORTED_INDICATOR_COUNT] = -{ - /* name | min | max | name length - used by parser */ - {BTA_HF_CLIENT_INDICATOR_BATTERYCHG, 0, 5, sizeof(BTA_HF_CLIENT_INDICATOR_BATTERYCHG)}, - {BTA_HF_CLIENT_INDICATOR_SIGNAL, 0, 5, sizeof(BTA_HF_CLIENT_INDICATOR_SIGNAL)}, - {BTA_HF_CLIENT_INDICATOR_SERVICE, 0, 1, sizeof(BTA_HF_CLIENT_INDICATOR_SERVICE)}, - {BTA_HF_CLIENT_INDICATOR_CALL, 0, 1, sizeof(BTA_HF_CLIENT_INDICATOR_CALL)}, - {BTA_HF_CLIENT_INDICATOR_ROAM, 0, 1, sizeof(BTA_HF_CLIENT_INDICATOR_ROAM)}, - {BTA_HF_CLIENT_INDICATOR_CALLSETUP, 0, 3, sizeof(BTA_HF_CLIENT_INDICATOR_CALLSETUP)}, - {BTA_HF_CLIENT_INDICATOR_CALLHELD, 0, 2, sizeof(BTA_HF_CLIENT_INDICATOR_CALLHELD)} -}; +static const tBTA_HF_CLIENT_INDICATOR + bta_hf_client_indicators[BTA_HF_CLIENT_AT_SUPPORTED_INDICATOR_COUNT] = { + /* name | min | max | name length - + used by parser */ + {BTA_HF_CLIENT_INDICATOR_BATTERYCHG, 0, 5, + sizeof(BTA_HF_CLIENT_INDICATOR_BATTERYCHG)}, + {BTA_HF_CLIENT_INDICATOR_SIGNAL, 0, 5, + sizeof(BTA_HF_CLIENT_INDICATOR_SIGNAL)}, + {BTA_HF_CLIENT_INDICATOR_SERVICE, 0, 1, + sizeof(BTA_HF_CLIENT_INDICATOR_SERVICE)}, + {BTA_HF_CLIENT_INDICATOR_CALL, 0, 1, + sizeof(BTA_HF_CLIENT_INDICATOR_CALL)}, + {BTA_HF_CLIENT_INDICATOR_ROAM, 0, 1, + sizeof(BTA_HF_CLIENT_INDICATOR_ROAM)}, + {BTA_HF_CLIENT_INDICATOR_CALLSETUP, 0, 3, + sizeof(BTA_HF_CLIENT_INDICATOR_CALLSETUP)}, + {BTA_HF_CLIENT_INDICATOR_CALLHELD, 0, 2, + sizeof(BTA_HF_CLIENT_INDICATOR_CALLHELD)}}; /* +VGM/+VGS - gain min/max values */ -#define BTA_HF_CLIENT_VGS_MIN 0 -#define BTA_HF_CLIENT_VGS_MAX 15 -#define BTA_HF_CLIENT_VGM_MIN 0 -#define BTA_HF_CLIENT_VGM_MAX 15 +#define BTA_HF_CLIENT_VGS_MIN 0 +#define BTA_HF_CLIENT_VGS_MAX 15 +#define BTA_HF_CLIENT_VGM_MIN 0 +#define BTA_HF_CLIENT_VGM_MAX 15 uint32_t service_index = 0; bool service_availability = true; @@ -103,48 +113,46 @@ bool service_availability = true; static void bta_hf_client_handle_ok(); -static void bta_hf_client_clear_queued_at(void) -{ - tBTA_HF_CLIENT_AT_QCMD *cur = bta_hf_client_cb.scb.at_cb.queued_cmd; - tBTA_HF_CLIENT_AT_QCMD *next; +static void bta_hf_client_clear_queued_at(void) { + tBTA_HF_CLIENT_AT_QCMD* cur = bta_hf_client_cb.scb.at_cb.queued_cmd; + tBTA_HF_CLIENT_AT_QCMD* next; - while (cur != NULL) { - next = cur->next; - osi_free(cur); - cur = next; - } + while (cur != NULL) { + next = cur->next; + osi_free(cur); + cur = next; + } - bta_hf_client_cb.scb.at_cb.queued_cmd = NULL; + bta_hf_client_cb.scb.at_cb.queued_cmd = NULL; } -static void bta_hf_client_queue_at(tBTA_HF_CLIENT_AT_CMD cmd, const char *buf, uint16_t buf_len) -{ - tBTA_HF_CLIENT_AT_QCMD *new_cmd = - (tBTA_HF_CLIENT_AT_QCMD *)osi_malloc(sizeof(tBTA_HF_CLIENT_AT_QCMD)); +static void bta_hf_client_queue_at(tBTA_HF_CLIENT_AT_CMD cmd, const char* buf, + uint16_t buf_len) { + tBTA_HF_CLIENT_AT_QCMD* new_cmd = + (tBTA_HF_CLIENT_AT_QCMD*)osi_malloc(sizeof(tBTA_HF_CLIENT_AT_QCMD)); - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - new_cmd->cmd = cmd; - new_cmd->buf_len = buf_len; - new_cmd->next = NULL; - memcpy(new_cmd->buf, buf, buf_len); + new_cmd->cmd = cmd; + new_cmd->buf_len = buf_len; + new_cmd->next = NULL; + memcpy(new_cmd->buf, buf, buf_len); - if (bta_hf_client_cb.scb.at_cb.queued_cmd != NULL) { - tBTA_HF_CLIENT_AT_QCMD *qcmd = bta_hf_client_cb.scb.at_cb.queued_cmd; + if (bta_hf_client_cb.scb.at_cb.queued_cmd != NULL) { + tBTA_HF_CLIENT_AT_QCMD* qcmd = bta_hf_client_cb.scb.at_cb.queued_cmd; - while (qcmd->next != NULL) - qcmd = qcmd->next; + while (qcmd->next != NULL) qcmd = qcmd->next; - qcmd->next = new_cmd; - } else { - bta_hf_client_cb.scb.at_cb.queued_cmd = new_cmd; - } + qcmd->next = new_cmd; + } else { + bta_hf_client_cb.scb.at_cb.queued_cmd = new_cmd; + } } -static void bta_hf_client_at_resp_timer_cback(UNUSED_ATTR void *data) -{ +static void bta_hf_client_at_resp_timer_cback(UNUSED_ATTR void* data) { if (bta_hf_client_cb.scb.at_cb.current_cmd == BTA_HF_CLIENT_AT_CNUM) { - LOG_INFO(LOG_TAG, "%s timed out waiting for AT+CNUM response; spoofing OK.", __func__); + LOG_INFO(LOG_TAG, "%s timed out waiting for AT+CNUM response; spoofing OK.", + __func__); bta_hf_client_handle_ok(); } else { APPL_TRACE_ERROR("HFPClient: AT response timeout, disconnecting"); @@ -152,428 +160,374 @@ static void bta_hf_client_at_resp_timer_cback(UNUSED_ATTR void *data) } } -static void bta_hf_client_start_at_resp_timer(void) -{ - alarm_set_on_queue(bta_hf_client_cb.scb.at_cb.resp_timer, - BTA_HF_CLIENT_AT_TIMEOUT, - bta_hf_client_at_resp_timer_cback, - NULL, - btu_bta_alarm_queue); +static void bta_hf_client_start_at_resp_timer(void) { + alarm_set_on_queue( + bta_hf_client_cb.scb.at_cb.resp_timer, BTA_HF_CLIENT_AT_TIMEOUT, + bta_hf_client_at_resp_timer_cback, NULL, btu_bta_alarm_queue); } -static void bta_hf_client_stop_at_resp_timer(void) -{ - alarm_cancel(bta_hf_client_cb.scb.at_cb.resp_timer); +static void bta_hf_client_stop_at_resp_timer(void) { + alarm_cancel(bta_hf_client_cb.scb.at_cb.resp_timer); } -static void bta_hf_client_send_at(tBTA_HF_CLIENT_AT_CMD cmd, const char *buf, - uint16_t buf_len) -{ - if ((bta_hf_client_cb.scb.at_cb.current_cmd == BTA_HF_CLIENT_AT_NONE || - bta_hf_client_cb.scb.svc_conn == false) && - !alarm_is_scheduled(bta_hf_client_cb.scb.at_cb.hold_timer)) - { - uint16_t len; +static void bta_hf_client_send_at(tBTA_HF_CLIENT_AT_CMD cmd, const char* buf, + uint16_t buf_len) { + if ((bta_hf_client_cb.scb.at_cb.current_cmd == BTA_HF_CLIENT_AT_NONE || + bta_hf_client_cb.scb.svc_conn == false) && + !alarm_is_scheduled(bta_hf_client_cb.scb.at_cb.hold_timer)) { + uint16_t len; #ifdef BTA_HF_CLIENT_AT_DUMP - APPL_TRACE_DEBUG("%s %.*s", __func__, buf_len - 1, buf); + APPL_TRACE_DEBUG("%s %.*s", __func__, buf_len - 1, buf); #endif - bta_hf_client_cb.scb.at_cb.current_cmd = cmd; - /* Generate fake responses for these because they won't reliably work */ - if (!service_availability && - (cmd == BTA_HF_CLIENT_AT_CNUM || cmd == BTA_HF_CLIENT_AT_COPS)) - { - APPL_TRACE_WARNING("%s: No service, skipping %d command", __func__, cmd); - bta_hf_client_handle_ok(); - return; - } + bta_hf_client_cb.scb.at_cb.current_cmd = cmd; + /* Generate fake responses for these because they won't reliably work */ + if (!service_availability && + (cmd == BTA_HF_CLIENT_AT_CNUM || cmd == BTA_HF_CLIENT_AT_COPS)) { + APPL_TRACE_WARNING("%s: No service, skipping %d command", __func__, cmd); + bta_hf_client_handle_ok(); + return; + } - PORT_WriteData(bta_hf_client_cb.scb.conn_handle, buf, buf_len, &len); + PORT_WriteData(bta_hf_client_cb.scb.conn_handle, buf, buf_len, &len); - bta_hf_client_start_at_resp_timer(); + bta_hf_client_start_at_resp_timer(); - return; - } + return; + } - bta_hf_client_queue_at(cmd, buf, buf_len); + bta_hf_client_queue_at(cmd, buf, buf_len); } -static void bta_hf_client_send_queued_at(void) -{ - tBTA_HF_CLIENT_AT_QCMD *cur = bta_hf_client_cb.scb.at_cb.queued_cmd; +static void bta_hf_client_send_queued_at(void) { + tBTA_HF_CLIENT_AT_QCMD* cur = bta_hf_client_cb.scb.at_cb.queued_cmd; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (cur != NULL) - { - bta_hf_client_cb.scb.at_cb.queued_cmd = cur->next; + if (cur != NULL) { + bta_hf_client_cb.scb.at_cb.queued_cmd = cur->next; - bta_hf_client_send_at(cur->cmd, cur->buf, cur->buf_len); + bta_hf_client_send_at(cur->cmd, cur->buf, cur->buf_len); - osi_free(cur); - } + osi_free(cur); + } } -static void bta_hf_client_at_hold_timer_cback(UNUSED_ATTR void *data) -{ - APPL_TRACE_DEBUG("%s", __func__); - bta_hf_client_send_queued_at(); +static void bta_hf_client_at_hold_timer_cback(UNUSED_ATTR void* data) { + APPL_TRACE_DEBUG("%s", __func__); + bta_hf_client_send_queued_at(); } -static void bta_hf_client_stop_at_hold_timer(void) -{ - APPL_TRACE_DEBUG("%s", __func__); - alarm_cancel(bta_hf_client_cb.scb.at_cb.hold_timer); +static void bta_hf_client_stop_at_hold_timer(void) { + APPL_TRACE_DEBUG("%s", __func__); + alarm_cancel(bta_hf_client_cb.scb.at_cb.hold_timer); } -static void bta_hf_client_start_at_hold_timer(void) -{ - APPL_TRACE_DEBUG("%s", __func__); - alarm_set_on_queue(bta_hf_client_cb.scb.at_cb.hold_timer, - BTA_HF_CLIENT_AT_HOLD_TIMEOUT, - bta_hf_client_at_hold_timer_cback, - NULL, - btu_bta_alarm_queue); +static void bta_hf_client_start_at_hold_timer(void) { + APPL_TRACE_DEBUG("%s", __func__); + alarm_set_on_queue( + bta_hf_client_cb.scb.at_cb.hold_timer, BTA_HF_CLIENT_AT_HOLD_TIMEOUT, + bta_hf_client_at_hold_timer_cback, NULL, btu_bta_alarm_queue); } /****************************************************************************** * * COMMON AT EVENT HANDLING funcS * - * Receives data (strings, ints, etc.) from the parser and processes this data. + * Receives data (strings, ints, etc.) from the parser and processes this + *data. * No buffer parsing is being done here. ******************************************************************************/ -static void bta_hf_client_handle_ok() -{ - APPL_TRACE_DEBUG("%s", __func__); +static void bta_hf_client_handle_ok() { + APPL_TRACE_DEBUG("%s", __func__); - bta_hf_client_stop_at_resp_timer(); + bta_hf_client_stop_at_resp_timer(); - if (!bta_hf_client_cb.scb.svc_conn) - { - bta_hf_client_slc_seq(false); - return; - } + if (!bta_hf_client_cb.scb.svc_conn) { + bta_hf_client_slc_seq(false); + return; + } - switch(bta_hf_client_cb.scb.at_cb.current_cmd) - { - case BTA_HF_CLIENT_AT_BIA: - case BTA_HF_CLIENT_AT_BCC: - break; - case BTA_HF_CLIENT_AT_BCS: - bta_hf_client_start_at_hold_timer(); - bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; - return; - case BTA_HF_CLIENT_AT_CLIP: //last cmd is post slc seq - if (bta_hf_client_cb.scb.send_at_reply == false) - { - bta_hf_client_cb.scb.send_at_reply = true; - } - break; - case BTA_HF_CLIENT_AT_NONE: - bta_hf_client_stop_at_hold_timer(); - break; - default: - if (bta_hf_client_cb.scb.send_at_reply) - { - bta_hf_client_at_result(BTA_HF_CLIENT_AT_RESULT_OK, 0); - } - break; - } + switch (bta_hf_client_cb.scb.at_cb.current_cmd) { + case BTA_HF_CLIENT_AT_BIA: + case BTA_HF_CLIENT_AT_BCC: + break; + case BTA_HF_CLIENT_AT_BCS: + bta_hf_client_start_at_hold_timer(); + bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; + return; + case BTA_HF_CLIENT_AT_CLIP: // last cmd is post slc seq + if (bta_hf_client_cb.scb.send_at_reply == false) { + bta_hf_client_cb.scb.send_at_reply = true; + } + break; + case BTA_HF_CLIENT_AT_NONE: + bta_hf_client_stop_at_hold_timer(); + break; + default: + if (bta_hf_client_cb.scb.send_at_reply) { + bta_hf_client_at_result(BTA_HF_CLIENT_AT_RESULT_OK, 0); + } + break; + } - bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; + bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; - bta_hf_client_send_queued_at(); + bta_hf_client_send_queued_at(); } -static void bta_hf_client_handle_error(tBTA_HF_CLIENT_AT_RESULT_TYPE type, uint16_t cme) -{ - APPL_TRACE_DEBUG("%s %u %u", __func__, type, cme); +static void bta_hf_client_handle_error(tBTA_HF_CLIENT_AT_RESULT_TYPE type, + uint16_t cme) { + APPL_TRACE_DEBUG("%s %u %u", __func__, type, cme); - bta_hf_client_stop_at_resp_timer(); + bta_hf_client_stop_at_resp_timer(); - if (!bta_hf_client_cb.scb.svc_conn) - { - bta_hf_client_slc_seq(true); - return; - } + if (!bta_hf_client_cb.scb.svc_conn) { + bta_hf_client_slc_seq(true); + return; + } - switch(bta_hf_client_cb.scb.at_cb.current_cmd) - { - case BTA_HF_CLIENT_AT_BIA: - break; - case BTA_HF_CLIENT_AT_BCC: - case BTA_HF_CLIENT_AT_BCS: - bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_CLOSE_EVT); - break; - case BTA_HF_CLIENT_AT_CLIP: //last cmd is post slc seq - if (bta_hf_client_cb.scb.send_at_reply == false) - { - bta_hf_client_cb.scb.send_at_reply = true; - } - break; - default: - if (bta_hf_client_cb.scb.send_at_reply) - { - bta_hf_client_at_result(type, cme); - } - break; - } + switch (bta_hf_client_cb.scb.at_cb.current_cmd) { + case BTA_HF_CLIENT_AT_BIA: + break; + case BTA_HF_CLIENT_AT_BCC: + case BTA_HF_CLIENT_AT_BCS: + bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_CLOSE_EVT); + break; + case BTA_HF_CLIENT_AT_CLIP: // last cmd is post slc seq + if (bta_hf_client_cb.scb.send_at_reply == false) { + bta_hf_client_cb.scb.send_at_reply = true; + } + break; + default: + if (bta_hf_client_cb.scb.send_at_reply) { + bta_hf_client_at_result(type, cme); + } + break; + } - bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; + bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; - bta_hf_client_send_queued_at(); + bta_hf_client_send_queued_at(); } -static void bta_hf_client_handle_ring() -{ - APPL_TRACE_DEBUG("%s", __func__); - bta_hf_client_evt_val(BTA_HF_CLIENT_RING_INDICATION,0); +static void bta_hf_client_handle_ring() { + APPL_TRACE_DEBUG("%s", __func__); + bta_hf_client_evt_val(BTA_HF_CLIENT_RING_INDICATION, 0); } -static void bta_hf_client_handle_brsf(uint32_t value) -{ - APPL_TRACE_DEBUG("%s 0x%x", __func__, value); - bta_hf_client_cb.scb.peer_features = value; +static void bta_hf_client_handle_brsf(uint32_t value) { + APPL_TRACE_DEBUG("%s 0x%x", __func__, value); + bta_hf_client_cb.scb.peer_features = value; } -/* handles a single indicator descriptor - registers it for value changing events */ -static void bta_hf_client_handle_cind_list_item(char *name, uint32_t min, uint32_t max, uint32_t index) -{ - - uint8_t i = 0; +/* handles a single indicator descriptor - registers it for value changing + * events */ +static void bta_hf_client_handle_cind_list_item(char* name, uint32_t min, + uint32_t max, uint32_t index) { + uint8_t i = 0; - APPL_TRACE_DEBUG("%s %lu.%s <%lu:%lu>", __func__, index, name, min, max); + APPL_TRACE_DEBUG("%s %lu.%s <%lu:%lu>", __func__, index, name, min, max); - /* look for a matching indicator on list of supported ones */ - for(i = 0; i < BTA_HF_CLIENT_AT_SUPPORTED_INDICATOR_COUNT; i++) - { - if (strcmp(name,BTA_HF_CLIENT_INDICATOR_SERVICE) == 0) - { - service_index = index; - } - /* look for a match - search one sign further than indicators name to check for string end */ - /* It will distinguish 'callheld' which could be matched by strncmp as 'call'. */ - if (strncmp(name, bta_hf_client_indicators[i].name, bta_hf_client_indicators[i].namelen) != 0) - continue; + /* look for a matching indicator on list of supported ones */ + for (i = 0; i < BTA_HF_CLIENT_AT_SUPPORTED_INDICATOR_COUNT; i++) { + if (strcmp(name, BTA_HF_CLIENT_INDICATOR_SERVICE) == 0) { + service_index = index; + } + /* look for a match - search one sign further than indicators name to check + * for string end */ + /* It will distinguish 'callheld' which could be matched by strncmp as + * 'call'. */ + if (strncmp(name, bta_hf_client_indicators[i].name, + bta_hf_client_indicators[i].namelen) != 0) + continue; - /* index - enumerates value position in the incoming sequence */ - /* if name matches one of the known indicators, add its incoming position */ - /* to lookup table for easy value->indicator matching later, when only values come */ - bta_hf_client_cb.scb.at_cb.indicator_lookup[index] = i; + /* index - enumerates value position in the incoming sequence */ + /* if name matches one of the known indicators, add its incoming position */ + /* to lookup table for easy value->indicator matching later, when only + * values come */ + bta_hf_client_cb.scb.at_cb.indicator_lookup[index] = i; - return; - } + return; + } } -static void bta_hf_client_handle_cind_value(uint32_t index, uint32_t value) -{ - APPL_TRACE_DEBUG("%s index: %u value: %u", __func__, index, value); +static void bta_hf_client_handle_cind_value(uint32_t index, uint32_t value) { + APPL_TRACE_DEBUG("%s index: %u value: %u", __func__, index, value); - if (index >= BTA_HF_CLIENT_AT_INDICATOR_COUNT) - { - return; - } + if (index >= BTA_HF_CLIENT_AT_INDICATOR_COUNT) { + return; + } - if (service_index == index) - { - if (value == 0) - { - service_availability = false; - } - else - { - service_availability = true; - } - } - if (bta_hf_client_cb.scb.at_cb.indicator_lookup[index] == -1) - { - return; + if (service_index == index) { + if (value == 0) { + service_availability = false; + } else { + service_availability = true; } + } + if (bta_hf_client_cb.scb.at_cb.indicator_lookup[index] == -1) { + return; + } - /* get the real array index from lookup table */ - index = bta_hf_client_cb.scb.at_cb.indicator_lookup[index]; + /* get the real array index from lookup table */ + index = bta_hf_client_cb.scb.at_cb.indicator_lookup[index]; - /* Ignore out of range values */ - if(value > bta_hf_client_indicators[index].max || - value < bta_hf_client_indicators[index].min) - { - return; - } + /* Ignore out of range values */ + if (value > bta_hf_client_indicators[index].max || + value < bta_hf_client_indicators[index].min) { + return; + } - /* tBTA_HF_CLIENT_IND_TYPE match index in bta_hf_client_indicators */ - bta_hf_client_ind(index, value); + /* tBTA_HF_CLIENT_IND_TYPE match index in bta_hf_client_indicators */ + bta_hf_client_ind(index, value); } -static void bta_hf_client_handle_chld(uint32_t mask) -{ - APPL_TRACE_DEBUG("%s 0x%x", __func__, mask); +static void bta_hf_client_handle_chld(uint32_t mask) { + APPL_TRACE_DEBUG("%s 0x%x", __func__, mask); - bta_hf_client_cb.scb.chld_features |= mask; + bta_hf_client_cb.scb.chld_features |= mask; } -static void bta_hf_client_handle_ciev(uint32_t index, uint32_t value) -{ - int8_t realind = -1; +static void bta_hf_client_handle_ciev(uint32_t index, uint32_t value) { + int8_t realind = -1; - APPL_TRACE_DEBUG("%s index: %u value: %u", __func__, index, value); + APPL_TRACE_DEBUG("%s index: %u value: %u", __func__, index, value); - if(index == 0 || index > BTA_HF_CLIENT_AT_INDICATOR_COUNT) - { - return; - } + if (index == 0 || index > BTA_HF_CLIENT_AT_INDICATOR_COUNT) { + return; + } + + if (service_index == index - 1) { + service_availability = value == 0 ? false : true; + } - if (service_index == index - 1) - { - service_availability = value == 0 ? false : true; + realind = bta_hf_client_cb.scb.at_cb.indicator_lookup[index - 1]; + + if (realind >= 0 && realind < BTA_HF_CLIENT_AT_SUPPORTED_INDICATOR_COUNT) { + /* get the real in-array index from lookup table by index it comes at */ + /* if there is no bug it should automatically be correctly calculated */ + if (value > bta_hf_client_indicators[realind].max || + value < bta_hf_client_indicators[realind].min) { + return; } - realind = bta_hf_client_cb.scb.at_cb.indicator_lookup[index - 1]; - - if(realind >= 0 && realind < BTA_HF_CLIENT_AT_SUPPORTED_INDICATOR_COUNT) - { - /* get the real in-array index from lookup table by index it comes at */ - /* if there is no bug it should automatically be correctly calculated */ - if(value > bta_hf_client_indicators[realind].max || value < bta_hf_client_indicators[realind].min) - { - return; - } - - /* update service availability on +ciev from AG. */ - if (service_index == (index - 1)) - { - if (value == 1) - { - service_availability = true; - } - else - { - service_availability = false; - } - } - - /* tBTA_HF_CLIENT_IND_TYPE match index in bta_hf_client_indicators */ - bta_hf_client_ind(realind, value); + /* update service availability on +ciev from AG. */ + if (service_index == (index - 1)) { + if (value == 1) { + service_availability = true; + } else { + service_availability = false; + } } + + /* tBTA_HF_CLIENT_IND_TYPE match index in bta_hf_client_indicators */ + bta_hf_client_ind(realind, value); + } } -static void bta_hf_client_handle_bcs(uint32_t codec) -{ - APPL_TRACE_DEBUG("%s %u", __func__, codec); +static void bta_hf_client_handle_bcs(uint32_t codec) { + APPL_TRACE_DEBUG("%s %u", __func__, codec); - if (codec == BTM_SCO_CODEC_CVSD || - (codec == BTM_SCO_CODEC_MSBC && bta_hf_client_cb.msbc_enabled == true)) - { - bta_hf_client_cb.scb.negotiated_codec = codec; - bta_hf_client_send_at_bcs(codec); - } - else - { - bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; - bta_hf_client_send_at_bac(); - } + if (codec == BTM_SCO_CODEC_CVSD || + (codec == BTM_SCO_CODEC_MSBC && bta_hf_client_cb.msbc_enabled == true)) { + bta_hf_client_cb.scb.negotiated_codec = codec; + bta_hf_client_send_at_bcs(codec); + } else { + bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; + bta_hf_client_send_at_bac(); + } } -static void bta_hf_client_handle_bsir(uint32_t provided) -{ - APPL_TRACE_DEBUG("%s %u", __func__, provided); +static void bta_hf_client_handle_bsir(uint32_t provided) { + APPL_TRACE_DEBUG("%s %u", __func__, provided); - bta_hf_client_evt_val(BTA_HF_CLIENT_BSIR_EVT, provided); + bta_hf_client_evt_val(BTA_HF_CLIENT_BSIR_EVT, provided); } -static void bta_hf_client_handle_cmeerror(uint32_t code) -{ - bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_CME, code); +static void bta_hf_client_handle_cmeerror(uint32_t code) { + bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_CME, code); } -static void bta_hf_client_handle_vgm(uint32_t value) -{ - APPL_TRACE_DEBUG("%s %lu", __func__, value); +static void bta_hf_client_handle_vgm(uint32_t value) { + APPL_TRACE_DEBUG("%s %lu", __func__, value); - if(value <= BTA_HF_CLIENT_VGM_MAX) - { - bta_hf_client_evt_val(BTA_HF_CLIENT_MIC_EVT, value); - } + if (value <= BTA_HF_CLIENT_VGM_MAX) { + bta_hf_client_evt_val(BTA_HF_CLIENT_MIC_EVT, value); + } } -static void bta_hf_client_handle_vgs(uint32_t value) -{ - APPL_TRACE_DEBUG("%s %lu", __func__, value); +static void bta_hf_client_handle_vgs(uint32_t value) { + APPL_TRACE_DEBUG("%s %lu", __func__, value); - if(value <= BTA_HF_CLIENT_VGS_MAX) - { - bta_hf_client_evt_val(BTA_HF_CLIENT_SPK_EVT, value); - } + if (value <= BTA_HF_CLIENT_VGS_MAX) { + bta_hf_client_evt_val(BTA_HF_CLIENT_SPK_EVT, value); + } } -static void bta_hf_client_handle_bvra(uint32_t value) -{ - APPL_TRACE_DEBUG("%s %lu", __func__, value); +static void bta_hf_client_handle_bvra(uint32_t value) { + APPL_TRACE_DEBUG("%s %lu", __func__, value); - if (value > 1) - { - return; - } + if (value > 1) { + return; + } - bta_hf_client_evt_val(BTA_HF_CLIENT_VOICE_REC_EVT, value); + bta_hf_client_evt_val(BTA_HF_CLIENT_VOICE_REC_EVT, value); } -static void bta_hf_client_handle_clip(char *numstr, uint32_t type) -{ - APPL_TRACE_DEBUG("%s %u %s", __func__, type, numstr); +static void bta_hf_client_handle_clip(char* numstr, uint32_t type) { + APPL_TRACE_DEBUG("%s %u %s", __func__, type, numstr); - bta_hf_client_clip(numstr); + bta_hf_client_clip(numstr); } -static void bta_hf_client_handle_ccwa(char *numstr, uint32_t type) -{ - APPL_TRACE_DEBUG("%s %u %s", __func__, type, numstr); +static void bta_hf_client_handle_ccwa(char* numstr, uint32_t type) { + APPL_TRACE_DEBUG("%s %u %s", __func__, type, numstr); - bta_hf_client_ccwa(numstr); + bta_hf_client_ccwa(numstr); } -static void bta_hf_client_handle_cops(char *opstr, uint32_t mode) -{ - APPL_TRACE_DEBUG("%s %u %s", __func__, mode, opstr); +static void bta_hf_client_handle_cops(char* opstr, uint32_t mode) { + APPL_TRACE_DEBUG("%s %u %s", __func__, mode, opstr); - bta_hf_client_operator_name(opstr); + bta_hf_client_operator_name(opstr); } -static void bta_hf_client_handle_binp(char *numstr) -{ - APPL_TRACE_DEBUG("%s %s", __func__, numstr); +static void bta_hf_client_handle_binp(char* numstr) { + APPL_TRACE_DEBUG("%s %s", __func__, numstr); - bta_hf_client_binp(numstr); + bta_hf_client_binp(numstr); } -static void bta_hf_client_handle_clcc(uint16_t idx, uint16_t dir, uint16_t status, uint16_t mode, uint16_t mpty, char *numstr, uint16_t type) -{ - APPL_TRACE_DEBUG("%s idx: %u dir: %u status: %u mode: %u mpty: %u", - __func__, idx, dir, status, mode, mpty); +static void bta_hf_client_handle_clcc(uint16_t idx, uint16_t dir, + uint16_t status, uint16_t mode, + uint16_t mpty, char* numstr, + uint16_t type) { + APPL_TRACE_DEBUG("%s idx: %u dir: %u status: %u mode: %u mpty: %u", __func__, + idx, dir, status, mode, mpty); - if (numstr) - { - APPL_TRACE_DEBUG("%s number: %s type: %u", __func__, numstr, type); - } + if (numstr) { + APPL_TRACE_DEBUG("%s number: %s type: %u", __func__, numstr, type); + } - bta_hf_client_clcc(idx, dir, status, mpty, numstr); + bta_hf_client_clcc(idx, dir, status, mpty, numstr); } -static void bta_hf_client_handle_cnum( char *numstr, uint16_t type, uint16_t service) -{ - APPL_TRACE_DEBUG("%s number: %s type: %u service: %u", __func__, numstr, type, service); +static void bta_hf_client_handle_cnum(char* numstr, uint16_t type, + uint16_t service) { + APPL_TRACE_DEBUG("%s number: %s type: %u service: %u", __func__, numstr, type, + service); - /* TODO: should number be modified according to type? */ - bta_hf_client_cnum(numstr, service); + /* TODO: should number be modified according to type? */ + bta_hf_client_cnum(numstr, service); } -static void bta_hf_client_handle_btrh( uint16_t code) -{ - APPL_TRACE_DEBUG("%s %lu", __func__, code); +static void bta_hf_client_handle_btrh(uint16_t code) { + APPL_TRACE_DEBUG("%s %lu", __func__, code); - bta_hf_client_evt_val(BTA_HF_CLIENT_BTRH_EVT, code); + bta_hf_client_evt_val(BTA_HF_CLIENT_BTRH_EVT, code); } /****************************************************************************** @@ -583,722 +537,636 @@ static void bta_hf_client_handle_btrh( uint16_t code) ******************************************************************************/ /* Check if prefix match and skip spaces if any */ -#define AT_CHECK_EVENT(buf, event) \ -do { \ +#define AT_CHECK_EVENT(buf, event) \ + do { \ if (strncmp("\r\n" event, buf, sizeof("\r\n" event) - 1) != 0) return buf; \ - (buf) += sizeof("\r\n" event) - 1; \ - while (*(buf) == ' ') (buf)++; \ -} while (0) + (buf) += sizeof("\r\n" event) - 1; \ + while (*(buf) == ' ') (buf)++; \ + } while (0) /* check for and forward buffer if match */ -#define AT_CHECK_RN(buf) \ -do { \ - if (strncmp("\r\n", buf, sizeof("\r\n") - 1) != 0) { \ - APPL_TRACE_DEBUG("%s missing end ", __func__); \ - return NULL; \ - } \ - (buf) += sizeof("\r\n") - 1; \ -} while (0) +#define AT_CHECK_RN(buf) \ + do { \ + if (strncmp("\r\n", buf, sizeof("\r\n") - 1) != 0) { \ + APPL_TRACE_DEBUG("%s missing end ", __func__); \ + return NULL; \ + } \ + (buf) += sizeof("\r\n") - 1; \ + } while (0) /* skip rest of AT string up to */ -#define AT_SKIP_REST(buf) \ -do { \ - while(*(buf) != '\r') (buf)++; \ -} while (0) - -static char *bta_hf_client_parse_ok(char *buffer) -{ - AT_CHECK_EVENT(buffer, "OK"); - AT_CHECK_RN(buffer); +#define AT_SKIP_REST(buf) \ + do { \ + while (*(buf) != '\r') (buf)++; \ + } while (0) - bta_hf_client_handle_ok(); +static char* bta_hf_client_parse_ok(char* buffer) { + AT_CHECK_EVENT(buffer, "OK"); + AT_CHECK_RN(buffer); - return buffer; + bta_hf_client_handle_ok(); + + return buffer; } -static char *bta_hf_client_parse_error(char *buffer) -{ - AT_CHECK_EVENT(buffer, "ERROR"); - AT_CHECK_RN(buffer); +static char* bta_hf_client_parse_error(char* buffer) { + AT_CHECK_EVENT(buffer, "ERROR"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_ERROR, 0); + bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_ERROR, 0); - return buffer; + return buffer; } -static char *bta_hf_client_parse_ring(char *buffer) -{ - AT_CHECK_EVENT(buffer, "RING"); - AT_CHECK_RN(buffer); +static char* bta_hf_client_parse_ring(char* buffer) { + AT_CHECK_EVENT(buffer, "RING"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_ring(); + bta_hf_client_handle_ring(); - return buffer; + return buffer; } /* generic uint32 parser */ -static char *bta_hf_client_parse_uint32(char *buffer, void (*handler_callback)(uint32_t)) -{ - uint32_t value; - int res; - int offset; - - res = sscanf(buffer, "%u%n", &value, &offset); - if (res < 1) - { - return NULL; - } +static char* bta_hf_client_parse_uint32(char* buffer, + void (*handler_callback)(uint32_t)) { + uint32_t value; + int res; + int offset; + + res = sscanf(buffer, "%u%n", &value, &offset); + if (res < 1) { + return NULL; + } - buffer += offset; + buffer += offset; - AT_CHECK_RN(buffer); + AT_CHECK_RN(buffer); - handler_callback(value); - return buffer; + handler_callback(value); + return buffer; } -static char *bta_hf_client_parse_brsf(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+BRSF:"); +static char* bta_hf_client_parse_brsf(char* buffer) { + AT_CHECK_EVENT(buffer, "+BRSF:"); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_brsf); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_brsf); } -static char *bta_hf_client_parse_cind_values(char *buffer) -{ - /* value and its position */ - uint16_t index = 0; - uint32_t value = 0; - - int offset; - int res; +static char* bta_hf_client_parse_cind_values(char* buffer) { + /* value and its position */ + uint16_t index = 0; + uint32_t value = 0; - while((res = sscanf(buffer, "%u%n", &value, &offset)) > 0) - { - /* decides if its valid index and value, if yes stores it */ - bta_hf_client_handle_cind_value(index, value); + int offset; + int res; - buffer += offset; + while ((res = sscanf(buffer, "%u%n", &value, &offset)) > 0) { + /* decides if its valid index and value, if yes stores it */ + bta_hf_client_handle_cind_value(index, value); - /* check if more values are present */ - if (*buffer != ',') - { - break; - } + buffer += offset; - index++; - buffer++; + /* check if more values are present */ + if (*buffer != ',') { + break; } - if (res > 0) - { - AT_CHECK_RN(buffer); - return buffer; - } + index++; + buffer++; + } - return NULL; + if (res > 0) { + AT_CHECK_RN(buffer); + return buffer; + } + + return NULL; } -static char *bta_hf_client_parse_cind_list(char *buffer) -{ - int offset = 0; - char name[129]; - uint32_t min, max; - uint32_t index = 0; - int res; - - while ((res = sscanf(buffer, "(\"%128[^\"]\",(%u%*[-,]%u))%n", name, &min, &max, &offset)) > 2) - { - bta_hf_client_handle_cind_list_item(name, min, max, index); - if (offset == 0) - { - APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); - return NULL; - } - - buffer += offset; - index++; - - if (*buffer != ',') - { - break; - } - - buffer++; +static char* bta_hf_client_parse_cind_list(char* buffer) { + int offset = 0; + char name[129]; + uint32_t min, max; + uint32_t index = 0; + int res; + + while ((res = sscanf(buffer, "(\"%128[^\"]\",(%u%*[-,]%u))%n", name, &min, + &max, &offset)) > 2) { + bta_hf_client_handle_cind_list_item(name, min, max, index); + if (offset == 0) { + APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); + return NULL; } - if (res > 2) - { - AT_CHECK_RN(buffer); - return buffer; + buffer += offset; + index++; + + if (*buffer != ',') { + break; } - return NULL; + buffer++; + } + + if (res > 2) { + AT_CHECK_RN(buffer); + return buffer; + } + + return NULL; } -static char *bta_hf_client_parse_cind(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+CIND:"); +static char* bta_hf_client_parse_cind(char* buffer) { + AT_CHECK_EVENT(buffer, "+CIND:"); - if(*buffer == '(') - return bta_hf_client_parse_cind_list(buffer); + if (*buffer == '(') return bta_hf_client_parse_cind_list(buffer); - return bta_hf_client_parse_cind_values(buffer); + return bta_hf_client_parse_cind_values(buffer); } -static char *bta_hf_client_parse_chld(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+CHLD:"); +static char* bta_hf_client_parse_chld(char* buffer) { + AT_CHECK_EVENT(buffer, "+CHLD:"); - if (*buffer != '(') - { - return NULL; - } + if (*buffer != '(') { + return NULL; + } - buffer++; + buffer++; + + while (*buffer != '\0') { + if (strncmp("0", buffer, 1) == 0) { + bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_REL); + buffer++; + } else if (strncmp("1x", buffer, 2) == 0) { + bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_REL_X); + buffer += 2; + } else if (strncmp("1", buffer, 1) == 0) { + bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_REL_ACC); + buffer++; + } else if (strncmp("2x", buffer, 2) == 0) { + bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_PRIV_X); + buffer += 2; + } else if (strncmp("2", buffer, 1) == 0) { + bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_HOLD_ACC); + buffer++; + } else if (strncmp("3", buffer, 1) == 0) { + bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_MERGE); + buffer++; + } else if (strncmp("4", buffer, 1) == 0) { + bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_MERGE_DETACH); + buffer++; + } else { + return NULL; + } - while(*buffer != '\0') - { - if(strncmp("0",buffer, 1) == 0) - { - bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_REL); - buffer++; - } - else if(strncmp("1x",buffer, 2) == 0) - { - bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_REL_X); - buffer += 2; - } - else if(strncmp("1",buffer, 1) == 0) - { - bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_REL_ACC); - buffer++; - } - else if(strncmp("2x",buffer, 2) == 0) - { - bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_PRIV_X); - buffer += 2; - } - else if(strncmp("2",buffer, 1) == 0) - { - bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_HOLD_ACC); - buffer++; - } - else if(strncmp("3",buffer, 1) == 0) - { - bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_MERGE); - buffer++; - } - else if(strncmp("4",buffer, 1) == 0) - { - bta_hf_client_handle_chld(BTA_HF_CLIENT_CHLD_MERGE_DETACH); - buffer++; - } - else - { - return NULL; - } - - if (*buffer == ',') - { - buffer++; - continue; - } - - if (*buffer == ')') - { - buffer++; - break; - } + if (*buffer == ',') { + buffer++; + continue; + } - return NULL; + if (*buffer == ')') { + buffer++; + break; } - AT_CHECK_RN(buffer); + return NULL; + } - return buffer; + AT_CHECK_RN(buffer); + + return buffer; } -static char *bta_hf_client_parse_ciev(char *buffer) -{ - uint32_t index, value; - int res; - int offset = 0; +static char* bta_hf_client_parse_ciev(char* buffer) { + uint32_t index, value; + int res; + int offset = 0; - AT_CHECK_EVENT(buffer, "+CIEV:"); + AT_CHECK_EVENT(buffer, "+CIEV:"); - res = sscanf(buffer, "%u,%u%n", &index, &value, &offset); - if(res < 2) - { - return NULL; - } + res = sscanf(buffer, "%u,%u%n", &index, &value, &offset); + if (res < 2) { + return NULL; + } - if (offset == 0) - { - APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); - return NULL; - } + if (offset == 0) { + APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); + return NULL; + } - buffer += offset; + buffer += offset; - AT_CHECK_RN(buffer); + AT_CHECK_RN(buffer); - bta_hf_client_handle_ciev(index, value); - return buffer; + bta_hf_client_handle_ciev(index, value); + return buffer; } -static char *bta_hf_client_parse_bcs(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+BCS:"); +static char* bta_hf_client_parse_bcs(char* buffer) { + AT_CHECK_EVENT(buffer, "+BCS:"); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_bcs); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_bcs); } -static char *bta_hf_client_parse_bsir(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+BSIR:"); +static char* bta_hf_client_parse_bsir(char* buffer) { + AT_CHECK_EVENT(buffer, "+BSIR:"); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_bsir); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_bsir); } -static char *bta_hf_client_parse_cmeerror(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+CME ERROR:"); +static char* bta_hf_client_parse_cmeerror(char* buffer) { + AT_CHECK_EVENT(buffer, "+CME ERROR:"); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_cmeerror); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_cmeerror); } -static char *bta_hf_client_parse_vgm(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+VGM:"); +static char* bta_hf_client_parse_vgm(char* buffer) { + AT_CHECK_EVENT(buffer, "+VGM:"); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_vgm); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_vgm); } -static char *bta_hf_client_parse_vgme(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+VGM="); +static char* bta_hf_client_parse_vgme(char* buffer) { + AT_CHECK_EVENT(buffer, "+VGM="); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_vgm); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_vgm); } -static char *bta_hf_client_parse_vgs(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+VGS:"); +static char* bta_hf_client_parse_vgs(char* buffer) { + AT_CHECK_EVENT(buffer, "+VGS:"); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_vgs); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_vgs); } -static char *bta_hf_client_parse_vgse(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+VGS="); +static char* bta_hf_client_parse_vgse(char* buffer) { + AT_CHECK_EVENT(buffer, "+VGS="); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_vgs); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_vgs); } -static char *bta_hf_client_parse_bvra(char *buffer) -{ - AT_CHECK_EVENT(buffer, "+BVRA:"); +static char* bta_hf_client_parse_bvra(char* buffer) { + AT_CHECK_EVENT(buffer, "+BVRA:"); - return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_bvra); + return bta_hf_client_parse_uint32(buffer, bta_hf_client_handle_bvra); } -static char *bta_hf_client_parse_clip(char *buffer) -{ - /* spec forces 32 chars, plus \0 here */ - char number[33]; - uint32_t type = 0; - int res; - int offset = 0; +static char* bta_hf_client_parse_clip(char* buffer) { + /* spec forces 32 chars, plus \0 here */ + char number[33]; + uint32_t type = 0; + int res; + int offset = 0; - AT_CHECK_EVENT(buffer, "+CLIP:"); + AT_CHECK_EVENT(buffer, "+CLIP:"); - /* there might be something more after %lu but HFP doesn't care */ - res = sscanf(buffer, "\"%32[^\"]\",%u%n", number, &type, &offset); - if(res < 2) - { - return NULL; - } + /* there might be something more after %lu but HFP doesn't care */ + res = sscanf(buffer, "\"%32[^\"]\",%u%n", number, &type, &offset); + if (res < 2) { + return NULL; + } - if (offset == 0) - { - APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); - return NULL; - } + if (offset == 0) { + APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); + return NULL; + } - buffer += offset; + buffer += offset; - AT_SKIP_REST(buffer); + AT_SKIP_REST(buffer); - AT_CHECK_RN(buffer); + AT_CHECK_RN(buffer); - bta_hf_client_handle_clip(number, type); - return buffer; + bta_hf_client_handle_clip(number, type); + return buffer; } /* in HFP context there is no difference between ccwa and clip */ -static char *bta_hf_client_parse_ccwa(char *buffer) -{ - /* ac to spec 32 chars max, plus \0 here */ - char number[33]; - uint32_t type = 0; - int res ; - int offset = 0; - - AT_CHECK_EVENT(buffer, "+CCWA:"); - - /* there might be something more after %lu but HFP doesn't care */ - res = sscanf(buffer, "\"%32[^\"]\",%u%n", number, &type, &offset); - if(res < 2) - { - return NULL; - } +static char* bta_hf_client_parse_ccwa(char* buffer) { + /* ac to spec 32 chars max, plus \0 here */ + char number[33]; + uint32_t type = 0; + int res; + int offset = 0; + + AT_CHECK_EVENT(buffer, "+CCWA:"); + + /* there might be something more after %lu but HFP doesn't care */ + res = sscanf(buffer, "\"%32[^\"]\",%u%n", number, &type, &offset); + if (res < 2) { + return NULL; + } - if (offset == 0) - { - APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); - return NULL; - } + if (offset == 0) { + APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); + return NULL; + } - buffer += offset; + buffer += offset; - AT_SKIP_REST(buffer); + AT_SKIP_REST(buffer); - AT_CHECK_RN(buffer); + AT_CHECK_RN(buffer); - bta_hf_client_handle_ccwa(number, type); - return buffer; + bta_hf_client_handle_ccwa(number, type); + return buffer; } -static char *bta_hf_client_parse_cops(char *buffer) -{ - uint8_t mode; - /* spec forces 16 chars max, plus \0 here */ - char opstr[17]; - int res; - int offset = 0; +static char* bta_hf_client_parse_cops(char* buffer) { + uint8_t mode; + /* spec forces 16 chars max, plus \0 here */ + char opstr[17]; + int res; + int offset = 0; - AT_CHECK_EVENT(buffer, "+COPS:"); + AT_CHECK_EVENT(buffer, "+COPS:"); - /* TODO: Not sure if operator string actually can contain escaped " char inside */ - res = sscanf(buffer, "%hhi,0,\"%16[^\"]\"%n", &mode, opstr, &offset); - if(res < 2) - { - return NULL; - } - /* Abort in case offset not set because of format error */ - if (offset == 0) - { - APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); - return NULL; - } + /* TODO: Not sure if operator string actually can contain escaped " char + * inside */ + res = sscanf(buffer, "%hhi,0,\"%16[^\"]\"%n", &mode, opstr, &offset); + if (res < 2) { + return NULL; + } + /* Abort in case offset not set because of format error */ + if (offset == 0) { + APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); + return NULL; + } - buffer += offset; + buffer += offset; - AT_SKIP_REST(buffer); + AT_SKIP_REST(buffer); - AT_CHECK_RN(buffer); + AT_CHECK_RN(buffer); - bta_hf_client_handle_cops(opstr, mode); - // check for OK Response in end - AT_CHECK_EVENT(buffer, "OK"); - AT_CHECK_RN(buffer); + bta_hf_client_handle_cops(opstr, mode); + // check for OK Response in end + AT_CHECK_EVENT(buffer, "OK"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_ok(); + bta_hf_client_handle_ok(); - return buffer; + return buffer; } -static char *bta_hf_client_parse_binp(char *buffer) -{ - /* HFP only supports phone number as BINP data */ - /* phone number is 32 chars plus one for \0*/ - char numstr[33]; - int res; - int offset = 0; +static char* bta_hf_client_parse_binp(char* buffer) { + /* HFP only supports phone number as BINP data */ + /* phone number is 32 chars plus one for \0*/ + char numstr[33]; + int res; + int offset = 0; - AT_CHECK_EVENT(buffer, "+BINP:"); + AT_CHECK_EVENT(buffer, "+BINP:"); - res = sscanf(buffer, "\"%32[^\"]\"\r\n%n", numstr, &offset); - if(res < 1) - { - return NULL; - } + res = sscanf(buffer, "\"%32[^\"]\"\r\n%n", numstr, &offset); + if (res < 1) { + return NULL; + } - /* Abort in case offset not set because of format error */ - if (offset == 0) - { - APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); - return NULL; - } + /* Abort in case offset not set because of format error */ + if (offset == 0) { + APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); + return NULL; + } - buffer += offset; + buffer += offset; - /* some phones might sent type as well, just skip it */ - AT_SKIP_REST(buffer); + /* some phones might sent type as well, just skip it */ + AT_SKIP_REST(buffer); - AT_CHECK_RN(buffer); + AT_CHECK_RN(buffer); - bta_hf_client_handle_binp(numstr); + bta_hf_client_handle_binp(numstr); - // check for OK response in end - AT_CHECK_EVENT(buffer, "OK"); - AT_CHECK_RN(buffer); + // check for OK response in end + AT_CHECK_EVENT(buffer, "OK"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_ok(); + bta_hf_client_handle_ok(); - return buffer; + return buffer; } -static char *bta_hf_client_parse_clcc(char *buffer) -{ - uint16_t idx, dir, status, mode, mpty; - char numstr[33]; /* spec forces 32 chars, plus one for \0*/ - uint16_t type; - int res; - int offset = 0; +static char* bta_hf_client_parse_clcc(char* buffer) { + uint16_t idx, dir, status, mode, mpty; + char numstr[33]; /* spec forces 32 chars, plus one for \0*/ + uint16_t type; + int res; + int offset = 0; - AT_CHECK_EVENT(buffer, "+CLCC:"); + AT_CHECK_EVENT(buffer, "+CLCC:"); - res = sscanf(buffer, "%hu,%hu,%hu,%hu,%hu%n", - &idx, &dir, &status, &mode, &mpty, &offset); - if (res < 5) - { - return NULL; + res = sscanf(buffer, "%hu,%hu,%hu,%hu,%hu%n", &idx, &dir, &status, &mode, + &mpty, &offset); + if (res < 5) { + return NULL; + } + + /* Abort in case offset not set because of format error */ + if (offset == 0) { + APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); + return NULL; + } + + buffer += offset; + offset = 0; + + /* check optional part */ + if (*buffer == ',') { + int res2 = sscanf(buffer, ",\"%32[^\"]\",%hu%n", numstr, &type, &offset); + if (res2 < 0) return NULL; + + if (res2 == 0) { + res2 = sscanf(buffer, ",\"\",%hu%n", &type, &offset); + if (res < 0) return NULL; + + /* numstr is not matched in second attempt, correct this */ + res2++; + numstr[0] = '\0'; } - /* Abort in case offset not set because of format error */ - if (offset == 0) - { + if (res2 >= 2) { + res += res2; + /* Abort in case offset not set because of format error */ + if (offset == 0) { APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); return NULL; - } + } - buffer += offset; - offset = 0; - - /* check optional part */ - if (*buffer == ',') - { - int res2 = sscanf(buffer, ",\"%32[^\"]\",%hu%n", numstr, &type, &offset); - if (res2 < 0) - return NULL; - - if (res2 == 0) - { - res2 = sscanf(buffer, ",\"\",%hu%n", &type, &offset); - if (res < 0) - return NULL; - - /* numstr is not matched in second attempt, correct this */ - res2++; - numstr[0] = '\0'; - } - - if (res2 >= 2) - { - res += res2; - /* Abort in case offset not set because of format error */ - if (offset == 0) - { - APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); - return NULL; - } - - buffer += offset; - } + buffer += offset; } + } - /* Skip any remaing param,as they are not defined by BT HFP spec */ - AT_SKIP_REST(buffer); - AT_CHECK_RN(buffer); + /* Skip any remaing param,as they are not defined by BT HFP spec */ + AT_SKIP_REST(buffer); + AT_CHECK_RN(buffer); - if (res > 6) - { - /* we also have last two optional parameters */ - bta_hf_client_handle_clcc(idx, dir, status, mode, mpty, numstr, type); - } - else - { - /* we didn't get the last two parameters */ - bta_hf_client_handle_clcc(idx, dir, status, mode, mpty, NULL, 0); - } + if (res > 6) { + /* we also have last two optional parameters */ + bta_hf_client_handle_clcc(idx, dir, status, mode, mpty, numstr, type); + } else { + /* we didn't get the last two parameters */ + bta_hf_client_handle_clcc(idx, dir, status, mode, mpty, NULL, 0); + } - // check for OK response in end - AT_CHECK_EVENT(buffer, "OK"); - AT_CHECK_RN(buffer); + // check for OK response in end + AT_CHECK_EVENT(buffer, "OK"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_ok(); - return buffer; + bta_hf_client_handle_ok(); + return buffer; } -static char *bta_hf_client_parse_cnum(char *buffer) -{ - char numstr[33]; /* spec forces 32 chars, plus one for \0*/ - uint16_t type; - uint16_t service = 0; /* 0 in case this optional parameter is not being sent */ - int res; - int offset = 0; +static char* bta_hf_client_parse_cnum(char* buffer) { + char numstr[33]; /* spec forces 32 chars, plus one for \0*/ + uint16_t type; + uint16_t service = + 0; /* 0 in case this optional parameter is not being sent */ + int res; + int offset = 0; - AT_CHECK_EVENT(buffer, "+CNUM:"); + AT_CHECK_EVENT(buffer, "+CNUM:"); - res = sscanf(buffer, ",\"%32[^\"]\",%hu,,%hu%n", numstr, &type, &service, &offset); - if(res < 0) - { - return NULL; - } - - if (res == 0) - { - res = sscanf(buffer, ",\"\",%hu,,%hu%n", &type, &service, &offset); - if (res < 0) - { - return NULL; - } - - /* numstr is not matched in second attempt, correct this */ - res++; - numstr[0] = '\0'; - } + res = sscanf(buffer, ",\"%32[^\"]\",%hu,,%hu%n", numstr, &type, &service, + &offset); + if (res < 0) { + return NULL; + } - if (res < 3) - { - return NULL; + if (res == 0) { + res = sscanf(buffer, ",\"\",%hu,,%hu%n", &type, &service, &offset); + if (res < 0) { + return NULL; } - /* Abort in case offset not set because of format error */ - if (offset == 0) - { - APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); - return NULL; - } + /* numstr is not matched in second attempt, correct this */ + res++; + numstr[0] = '\0'; + } - buffer += offset; + if (res < 3) { + return NULL; + } - AT_CHECK_RN(buffer); + /* Abort in case offset not set because of format error */ + if (offset == 0) { + APPL_TRACE_ERROR("%s: Format Error %s", __func__, buffer); + return NULL; + } - /* service is optional */ - if(res == 2) - { - bta_hf_client_handle_cnum(numstr, type, service); - return buffer; - } + buffer += offset; - if (service != 4 && service != 5) - { - return NULL; - } + AT_CHECK_RN(buffer); + /* service is optional */ + if (res == 2) { bta_hf_client_handle_cnum(numstr, type, service); + return buffer; + } - // check for OK response in end - AT_CHECK_EVENT(buffer, "OK"); - AT_CHECK_RN(buffer); + if (service != 4 && service != 5) { + return NULL; + } - bta_hf_client_handle_ok(); - return buffer; + bta_hf_client_handle_cnum(numstr, type, service); + + // check for OK response in end + AT_CHECK_EVENT(buffer, "OK"); + AT_CHECK_RN(buffer); + + bta_hf_client_handle_ok(); + return buffer; } -static char *bta_hf_client_parse_btrh(char *buffer) -{ - uint16_t code = 0; - int res; - int offset; +static char* bta_hf_client_parse_btrh(char* buffer) { + uint16_t code = 0; + int res; + int offset; - AT_CHECK_EVENT(buffer, "+BTRH:"); + AT_CHECK_EVENT(buffer, "+BTRH:"); - res = sscanf(buffer, "%hu%n", &code, &offset); - if(res < 1) - { - return NULL; - } + res = sscanf(buffer, "%hu%n", &code, &offset); + if (res < 1) { + return NULL; + } - buffer += offset; + buffer += offset; - AT_CHECK_RN(buffer); + AT_CHECK_RN(buffer); - bta_hf_client_handle_btrh(code); - return buffer; + bta_hf_client_handle_btrh(code); + return buffer; } -static char *bta_hf_client_parse_busy(char *buffer) -{ - AT_CHECK_EVENT(buffer, "BUSY"); - AT_CHECK_RN(buffer); +static char* bta_hf_client_parse_busy(char* buffer) { + AT_CHECK_EVENT(buffer, "BUSY"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_BUSY, 0); + bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_BUSY, 0); - return buffer; + return buffer; } -static char *bta_hf_client_parse_delayed(char *buffer) -{ - AT_CHECK_EVENT(buffer, "DELAYED"); - AT_CHECK_RN(buffer); +static char* bta_hf_client_parse_delayed(char* buffer) { + AT_CHECK_EVENT(buffer, "DELAYED"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_DELAY, 0); + bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_DELAY, 0); - return buffer; + return buffer; } -static char *bta_hf_client_parse_no_carrier(char *buffer) -{ - AT_CHECK_EVENT(buffer, "NO CARRIER"); - AT_CHECK_RN(buffer); +static char* bta_hf_client_parse_no_carrier(char* buffer) { + AT_CHECK_EVENT(buffer, "NO CARRIER"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_NO_CARRIER, 0); + bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_NO_CARRIER, 0); - return buffer; + return buffer; } -static char *bta_hf_client_parse_no_answer(char *buffer) -{ - AT_CHECK_EVENT(buffer, "NO ANSWER"); - AT_CHECK_RN(buffer); +static char* bta_hf_client_parse_no_answer(char* buffer) { + AT_CHECK_EVENT(buffer, "NO ANSWER"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_NO_ANSWER, 0); + bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_NO_ANSWER, 0); - return buffer; + return buffer; } -static char *bta_hf_client_parse_blacklisted(char *buffer) -{ - AT_CHECK_EVENT(buffer, "BLACKLISTED"); - AT_CHECK_RN(buffer); +static char* bta_hf_client_parse_blacklisted(char* buffer) { + AT_CHECK_EVENT(buffer, "BLACKLISTED"); + AT_CHECK_RN(buffer); - bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_BLACKLISTED, 0); + bta_hf_client_handle_error(BTA_HF_CLIENT_AT_RESULT_BLACKLISTED, 0); - return buffer; + return buffer; } -static char *bta_hf_client_skip_unknown(char *buffer) -{ - char *start; - char *tmp; +static char* bta_hf_client_skip_unknown(char* buffer) { + char* start; + char* tmp; - tmp = strstr(buffer, "\r\n"); - if (tmp == NULL) - { - return NULL; - } + tmp = strstr(buffer, "\r\n"); + if (tmp == NULL) { + return NULL; + } - buffer += 2; - start = buffer; + buffer += 2; + start = buffer; - tmp = strstr(buffer, "\r\n"); - if (tmp == NULL) - { - return NULL; - } + tmp = strstr(buffer, "\r\n"); + if (tmp == NULL) { + return NULL; + } - buffer = tmp + 2; + buffer = tmp + 2; - APPL_TRACE_DEBUG("%s %.*s", __func__, buffer - start - 2, start); + APPL_TRACE_DEBUG("%s %.*s", __func__, buffer - start - 2, start); - return buffer; + return buffer; } - /****************************************************************************** * SUPPORTED EVENT MESSAGES ******************************************************************************/ @@ -1310,146 +1178,116 @@ static char *bta_hf_client_skip_unknown(char *buffer) */ typedef char* (*tBTA_HF_CLIENT_PARSER_CALLBACK)(char*); -static const tBTA_HF_CLIENT_PARSER_CALLBACK bta_hf_client_parser_cb[] = -{ - bta_hf_client_parse_ok, - bta_hf_client_parse_error, - bta_hf_client_parse_ring, - bta_hf_client_parse_brsf, - bta_hf_client_parse_cind, - bta_hf_client_parse_ciev, - bta_hf_client_parse_chld, - bta_hf_client_parse_bcs, - bta_hf_client_parse_bsir, - bta_hf_client_parse_cmeerror, - bta_hf_client_parse_vgm, - bta_hf_client_parse_vgme, - bta_hf_client_parse_vgs, - bta_hf_client_parse_vgse, - bta_hf_client_parse_bvra, - bta_hf_client_parse_clip, - bta_hf_client_parse_ccwa, - bta_hf_client_parse_cops, - bta_hf_client_parse_binp, - bta_hf_client_parse_clcc, - bta_hf_client_parse_cnum, - bta_hf_client_parse_btrh, - bta_hf_client_parse_busy, - bta_hf_client_parse_delayed, - bta_hf_client_parse_no_carrier, - bta_hf_client_parse_no_answer, - bta_hf_client_parse_blacklisted, - bta_hf_client_skip_unknown -}; +static const tBTA_HF_CLIENT_PARSER_CALLBACK bta_hf_client_parser_cb[] = { + bta_hf_client_parse_ok, bta_hf_client_parse_error, + bta_hf_client_parse_ring, bta_hf_client_parse_brsf, + bta_hf_client_parse_cind, bta_hf_client_parse_ciev, + bta_hf_client_parse_chld, bta_hf_client_parse_bcs, + bta_hf_client_parse_bsir, bta_hf_client_parse_cmeerror, + bta_hf_client_parse_vgm, bta_hf_client_parse_vgme, + bta_hf_client_parse_vgs, bta_hf_client_parse_vgse, + bta_hf_client_parse_bvra, bta_hf_client_parse_clip, + bta_hf_client_parse_ccwa, bta_hf_client_parse_cops, + bta_hf_client_parse_binp, bta_hf_client_parse_clcc, + bta_hf_client_parse_cnum, bta_hf_client_parse_btrh, + bta_hf_client_parse_busy, bta_hf_client_parse_delayed, + bta_hf_client_parse_no_carrier, bta_hf_client_parse_no_answer, + bta_hf_client_parse_blacklisted, bta_hf_client_skip_unknown}; /* calculate supported event list length */ static const uint16_t bta_hf_client_psraser_cb_count = - sizeof(bta_hf_client_parser_cb) / sizeof(bta_hf_client_parser_cb[0]); + sizeof(bta_hf_client_parser_cb) / sizeof(bta_hf_client_parser_cb[0]); #ifdef BTA_HF_CLIENT_AT_DUMP -static void bta_hf_client_dump_at(void) -{ - char dump[(4 * BTA_HF_CLIENT_AT_PARSER_MAX_LEN) + 1]; - char *p1, *p2; - - p1 = bta_hf_client_cb.scb.at_cb.buf; - p2 = dump; - - while (*p1 != '\0') - { - if (*p1 == '\r') - { - strlcpy(p2, "", 4); - p2 += 4; - } - else if (*p1 == '\n') - { - strlcpy(p2, "", 4); - p2 += 4; - } - else - { - *p2 = *p1; - p2++; - } - p1++; +static void bta_hf_client_dump_at(void) { + char dump[(4 * BTA_HF_CLIENT_AT_PARSER_MAX_LEN) + 1]; + char *p1, *p2; + + p1 = bta_hf_client_cb.scb.at_cb.buf; + p2 = dump; + + while (*p1 != '\0') { + if (*p1 == '\r') { + strlcpy(p2, "", 4); + p2 += 4; + } else if (*p1 == '\n') { + strlcpy(p2, "", 4); + p2 += 4; + } else { + *p2 = *p1; + p2++; } + p1++; + } - *p2 = '\0'; + *p2 = '\0'; - APPL_TRACE_DEBUG("%s %s", __func__, dump); + APPL_TRACE_DEBUG("%s %s", __func__, dump); } #endif -static void bta_hf_client_at_parse_start(void) -{ - char *buf = bta_hf_client_cb.scb.at_cb.buf; +static void bta_hf_client_at_parse_start(void) { + char* buf = bta_hf_client_cb.scb.at_cb.buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); #ifdef BTA_HF_CLIENT_AT_DUMP - bta_hf_client_dump_at(); + bta_hf_client_dump_at(); #endif - while(*buf != '\0') - { - int i; - char *tmp = NULL; - - for(i = 0; i < bta_hf_client_psraser_cb_count; i++) - { - tmp = bta_hf_client_parser_cb[i](buf); - if (tmp == NULL) - { - APPL_TRACE_ERROR("HFPCient: AT event/reply parsing failed, skipping"); - tmp = bta_hf_client_skip_unknown(buf); - break; - } - - /* matched or unknown skipped, if unknown failed tmp is NULL so - this is also handled */ - if (tmp != buf) - { - buf = tmp; - break; - } - } - - /* could not skip unknown (received garbage?)... disconnect */ - if (tmp == NULL) - { - APPL_TRACE_ERROR("HFPCient: could not skip unknown AT event, disconnecting"); - bta_hf_client_at_reset(); - bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); - return; - } - + while (*buf != '\0') { + int i; + char* tmp = NULL; + + for (i = 0; i < bta_hf_client_psraser_cb_count; i++) { + tmp = bta_hf_client_parser_cb[i](buf); + if (tmp == NULL) { + APPL_TRACE_ERROR("HFPCient: AT event/reply parsing failed, skipping"); + tmp = bta_hf_client_skip_unknown(buf); + break; + } + + /* matched or unknown skipped, if unknown failed tmp is NULL so + this is also handled */ + if (tmp != buf) { buf = tmp; + break; + } } + + /* could not skip unknown (received garbage?)... disconnect */ + if (tmp == NULL) { + APPL_TRACE_ERROR( + "HFPCient: could not skip unknown AT event, disconnecting"); + bta_hf_client_at_reset(); + bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); + return; + } + + buf = tmp; + } } -static bool bta_hf_client_check_at_complete(void) -{ - bool ret = false; - tBTA_HF_CLIENT_AT_CB *at_cb = &bta_hf_client_cb.scb.at_cb; +static bool bta_hf_client_check_at_complete(void) { + bool ret = false; + tBTA_HF_CLIENT_AT_CB* at_cb = &bta_hf_client_cb.scb.at_cb; - if (at_cb->offset >= BTA_HF_CLIENT_AT_EVENT_MIN_LEN) - { - if (at_cb->buf[at_cb->offset - 2] == '\r' && at_cb->buf[at_cb->offset - 1] == '\n') - { - ret = true; - } + if (at_cb->offset >= BTA_HF_CLIENT_AT_EVENT_MIN_LEN) { + if (at_cb->buf[at_cb->offset - 2] == '\r' && + at_cb->buf[at_cb->offset - 1] == '\n') { + ret = true; } + } - APPL_TRACE_DEBUG("%s %d", __func__, ret); + APPL_TRACE_DEBUG("%s %d", __func__, ret); - return ret; + return ret; } -static void bta_hf_client_at_clear_buf(void) -{ - memset(bta_hf_client_cb.scb.at_cb.buf, 0, sizeof(bta_hf_client_cb.scb.at_cb.buf)); - bta_hf_client_cb.scb.at_cb.offset = 0; +static void bta_hf_client_at_clear_buf(void) { + memset(bta_hf_client_cb.scb.at_cb.buf, 0, + sizeof(bta_hf_client_cb.scb.at_cb.buf)); + bta_hf_client_cb.scb.at_cb.offset = 0; } /****************************************************************************** @@ -1458,508 +1296,461 @@ static void bta_hf_client_at_clear_buf(void) * * ******************************************************************************/ -void bta_hf_client_at_parse(char *buf, unsigned int len) -{ - APPL_TRACE_DEBUG("%s offset: %u len: %u", __func__, bta_hf_client_cb.scb.at_cb.offset, len); - - if (len + bta_hf_client_cb.scb.at_cb.offset > BTA_HF_CLIENT_AT_PARSER_MAX_LEN) - { - char tmp_buff[BTA_HF_CLIENT_AT_PARSER_MAX_LEN]; - unsigned int tmp = bta_hf_client_cb.scb.at_cb.offset; - unsigned int space_left = BTA_HF_CLIENT_AT_PARSER_MAX_LEN - bta_hf_client_cb.scb.at_cb.offset; - - APPL_TRACE_DEBUG("%s overrun, trying to recover", __func__); - - /* fill up parser buffer */ - memcpy(bta_hf_client_cb.scb.at_cb.buf + bta_hf_client_cb.scb.at_cb.offset, buf, space_left); - len -= space_left; - buf += space_left; - bta_hf_client_cb.scb.at_cb.offset += space_left; - - /* find end of last complete command before proceeding */ - while(bta_hf_client_check_at_complete() == false) - { - if (bta_hf_client_cb.scb.at_cb.offset == 0) { - APPL_TRACE_ERROR("HFPClient: AT parser buffer overrun, disconnecting"); - - bta_hf_client_at_reset(); - bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); - return; - } - - bta_hf_client_cb.scb.at_cb.offset--; - } - - /* cut buffer to complete AT event and keep cut data */ - tmp += space_left - bta_hf_client_cb.scb.at_cb.offset; - memcpy(tmp_buff, bta_hf_client_cb.scb.at_cb.buf + bta_hf_client_cb.scb.at_cb.offset, tmp); - bta_hf_client_cb.scb.at_cb.buf[bta_hf_client_cb.scb.at_cb.offset] = '\0'; - - /* parse */ - bta_hf_client_at_parse_start(); - bta_hf_client_at_clear_buf(); - - /* recover cut data */ - memcpy(bta_hf_client_cb.scb.at_cb.buf, tmp_buff, tmp); - bta_hf_client_cb.scb.at_cb.offset += tmp; +void bta_hf_client_at_parse(char* buf, unsigned int len) { + APPL_TRACE_DEBUG("%s offset: %u len: %u", __func__, + bta_hf_client_cb.scb.at_cb.offset, len); + + if (len + bta_hf_client_cb.scb.at_cb.offset > + BTA_HF_CLIENT_AT_PARSER_MAX_LEN) { + char tmp_buff[BTA_HF_CLIENT_AT_PARSER_MAX_LEN]; + unsigned int tmp = bta_hf_client_cb.scb.at_cb.offset; + unsigned int space_left = + BTA_HF_CLIENT_AT_PARSER_MAX_LEN - bta_hf_client_cb.scb.at_cb.offset; + + APPL_TRACE_DEBUG("%s overrun, trying to recover", __func__); + + /* fill up parser buffer */ + memcpy(bta_hf_client_cb.scb.at_cb.buf + bta_hf_client_cb.scb.at_cb.offset, + buf, space_left); + len -= space_left; + buf += space_left; + bta_hf_client_cb.scb.at_cb.offset += space_left; + + /* find end of last complete command before proceeding */ + while (bta_hf_client_check_at_complete() == false) { + if (bta_hf_client_cb.scb.at_cb.offset == 0) { + APPL_TRACE_ERROR("HFPClient: AT parser buffer overrun, disconnecting"); + + bta_hf_client_at_reset(); + bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); + return; + } + + bta_hf_client_cb.scb.at_cb.offset--; } - memcpy(bta_hf_client_cb.scb.at_cb.buf + bta_hf_client_cb.scb.at_cb.offset, buf, len); - bta_hf_client_cb.scb.at_cb.offset += len; + /* cut buffer to complete AT event and keep cut data */ + tmp += space_left - bta_hf_client_cb.scb.at_cb.offset; + memcpy(tmp_buff, + bta_hf_client_cb.scb.at_cb.buf + bta_hf_client_cb.scb.at_cb.offset, + tmp); + bta_hf_client_cb.scb.at_cb.buf[bta_hf_client_cb.scb.at_cb.offset] = '\0'; - /* If last event is complete, parsing can be started */ - if (bta_hf_client_check_at_complete() == true) - { - bta_hf_client_at_parse_start(); - bta_hf_client_at_clear_buf(); - } + /* parse */ + bta_hf_client_at_parse_start(); + bta_hf_client_at_clear_buf(); + + /* recover cut data */ + memcpy(bta_hf_client_cb.scb.at_cb.buf, tmp_buff, tmp); + bta_hf_client_cb.scb.at_cb.offset += tmp; + } + + memcpy(bta_hf_client_cb.scb.at_cb.buf + bta_hf_client_cb.scb.at_cb.offset, + buf, len); + bta_hf_client_cb.scb.at_cb.offset += len; + + /* If last event is complete, parsing can be started */ + if (bta_hf_client_check_at_complete() == true) { + bta_hf_client_at_parse_start(); + bta_hf_client_at_clear_buf(); + } } -void bta_hf_client_send_at_brsf(void) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_brsf(void) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - at_len = snprintf(buf, sizeof(buf), "AT+BRSF=%u\r", bta_hf_client_cb.scb.features); - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + at_len = + snprintf(buf, sizeof(buf), "AT+BRSF=%u\r", bta_hf_client_cb.scb.features); + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BRSF , buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BRSF, buf, at_len); } -void bta_hf_client_send_at_bac(void) -{ - const char *buf; +void bta_hf_client_send_at_bac(void) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (bta_hf_client_cb.msbc_enabled) - { - buf = "AT+BAC=1,2\r"; - } - else - { - buf = "AT+BAC=1\r"; - } + if (bta_hf_client_cb.msbc_enabled) { + buf = "AT+BAC=1,2\r"; + } else { + buf = "AT+BAC=1\r"; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BAC, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BAC, buf, strlen(buf)); } -void bta_hf_client_send_at_bcs(uint32_t codec) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_bcs(uint32_t codec) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - at_len = snprintf(buf, sizeof(buf), "AT+BCS=%u\r", codec); - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + at_len = snprintf(buf, sizeof(buf), "AT+BCS=%u\r", codec); + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BCS, buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BCS, buf, at_len); } -void bta_hf_client_send_at_cind(bool status) -{ - const char *buf; - tBTA_HF_CLIENT_AT_CMD cmd; +void bta_hf_client_send_at_cind(bool status) { + const char* buf; + tBTA_HF_CLIENT_AT_CMD cmd; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (status) - { - buf = "AT+CIND?\r"; - cmd = BTA_HF_CLIENT_AT_CIND_STATUS; - } - else - { - buf = "AT+CIND=?\r"; - cmd = BTA_HF_CLIENT_AT_CIND; - } + if (status) { + buf = "AT+CIND?\r"; + cmd = BTA_HF_CLIENT_AT_CIND_STATUS; + } else { + buf = "AT+CIND=?\r"; + cmd = BTA_HF_CLIENT_AT_CIND; + } - bta_hf_client_send_at(cmd, buf, strlen(buf)); + bta_hf_client_send_at(cmd, buf, strlen(buf)); } -void bta_hf_client_send_at_cmer(bool activate) -{ - const char *buf; +void bta_hf_client_send_at_cmer(bool activate) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (activate) - buf = "AT+CMER=3,0,0,1\r"; - else - buf = "AT+CMER=3,0,0,0\r"; + if (activate) + buf = "AT+CMER=3,0,0,1\r"; + else + buf = "AT+CMER=3,0,0,0\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_CMER, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_CMER, buf, strlen(buf)); } -void bta_hf_client_send_at_chld(char cmd, uint32_t idx) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_chld(char cmd, uint32_t idx) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (idx > 0) - at_len = snprintf(buf, sizeof(buf), "AT+CHLD=%c%u\r", cmd, idx); - else - at_len = snprintf(buf, sizeof(buf), "AT+CHLD=%c\r", cmd); + if (idx > 0) + at_len = snprintf(buf, sizeof(buf), "AT+CHLD=%c%u\r", cmd, idx); + else + at_len = snprintf(buf, sizeof(buf), "AT+CHLD=%c\r", cmd); - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_CHLD, buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_CHLD, buf, at_len); } -void bta_hf_client_send_at_clip(bool activate) -{ - const char *buf; +void bta_hf_client_send_at_clip(bool activate) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (activate) - buf = "AT+CLIP=1\r"; - else - buf = "AT+CLIP=0\r"; + if (activate) + buf = "AT+CLIP=1\r"; + else + buf = "AT+CLIP=0\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_CLIP, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_CLIP, buf, strlen(buf)); } -void bta_hf_client_send_at_ccwa(bool activate) -{ - const char *buf; +void bta_hf_client_send_at_ccwa(bool activate) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (activate) - buf = "AT+CCWA=1\r"; - else - buf = "AT+CCWA=0\r"; + if (activate) + buf = "AT+CCWA=1\r"; + else + buf = "AT+CCWA=0\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_CCWA, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_CCWA, buf, strlen(buf)); } +void bta_hf_client_send_at_cmee(bool activate) { + const char* buf; -void bta_hf_client_send_at_cmee(bool activate) -{ - const char *buf; - - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (activate) - buf = "AT+CMEE=1\r"; - else - buf = "AT+CMEE=0\r"; + if (activate) + buf = "AT+CMEE=1\r"; + else + buf = "AT+CMEE=0\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_CMEE, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_CMEE, buf, strlen(buf)); } -void bta_hf_client_send_at_cops(bool query) -{ - const char *buf; +void bta_hf_client_send_at_cops(bool query) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (query) - buf = "AT+COPS?\r"; - else - buf = "AT+COPS=3,0\r"; + if (query) + buf = "AT+COPS?\r"; + else + buf = "AT+COPS=3,0\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_COPS, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_COPS, buf, strlen(buf)); } -void bta_hf_client_send_at_clcc(void) -{ - const char *buf; +void bta_hf_client_send_at_clcc(void) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - buf = "AT+CLCC\r"; + buf = "AT+CLCC\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_CLCC, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_CLCC, buf, strlen(buf)); } -void bta_hf_client_send_at_bvra(bool enable) -{ - const char *buf; +void bta_hf_client_send_at_bvra(bool enable) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (enable) - buf = "AT+BVRA=1\r"; - else - buf = "AT+BVRA=0\r"; + if (enable) + buf = "AT+BVRA=1\r"; + else + buf = "AT+BVRA=0\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BVRA, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BVRA, buf, strlen(buf)); } -void bta_hf_client_send_at_vgs(uint32_t volume) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_vgs(uint32_t volume) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - at_len = snprintf(buf, sizeof(buf), "AT+VGS=%u\r", volume); - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + at_len = snprintf(buf, sizeof(buf), "AT+VGS=%u\r", volume); + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_VGS, buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_VGS, buf, at_len); } -void bta_hf_client_send_at_vgm(uint32_t volume) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_vgm(uint32_t volume) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - at_len = snprintf(buf, sizeof(buf), "AT+VGM=%u\r", volume); - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + at_len = snprintf(buf, sizeof(buf), "AT+VGM=%u\r", volume); + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_VGM, buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_VGM, buf, at_len); } -void bta_hf_client_send_at_atd(char *number, uint32_t memory) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_atd(char* number, uint32_t memory) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (number[0] != '\0') { - at_len = snprintf(buf, sizeof(buf), "ATD%s;\r", number); - } else { - at_len = snprintf(buf, sizeof(buf), "ATD>%u;\r", memory); - } + if (number[0] != '\0') { + at_len = snprintf(buf, sizeof(buf), "ATD%s;\r", number); + } else { + at_len = snprintf(buf, sizeof(buf), "ATD>%u;\r", memory); + } - if (at_len < 0) { - APPL_TRACE_ERROR("%s: error preparing ATD command", __func__); - return; - } + if (at_len < 0) { + APPL_TRACE_ERROR("%s: error preparing ATD command", __func__); + return; + } - at_len = MIN((size_t)at_len, sizeof(buf)); + at_len = MIN((size_t)at_len, sizeof(buf)); - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_ATD, buf, at_len); + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } + bta_hf_client_send_at(BTA_HF_CLIENT_AT_ATD, buf, at_len); } -void bta_hf_client_send_at_bldn(void) -{ - const char *buf; +void bta_hf_client_send_at_bldn(void) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - buf = "AT+BLDN\r"; + buf = "AT+BLDN\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BLDN, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BLDN, buf, strlen(buf)); } -void bta_hf_client_send_at_ata(void) -{ - const char *buf; +void bta_hf_client_send_at_ata(void) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - buf = "ATA\r"; + buf = "ATA\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_ATA, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_ATA, buf, strlen(buf)); } -void bta_hf_client_send_at_chup(void) -{ - const char *buf; +void bta_hf_client_send_at_chup(void) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - buf = "AT+CHUP\r"; + buf = "AT+CHUP\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_CHUP, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_CHUP, buf, strlen(buf)); } -void bta_hf_client_send_at_btrh(bool query, uint32_t val) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_btrh(bool query, uint32_t val) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (query == true) - { - at_len = snprintf(buf, sizeof(buf), "AT+BTRH?\r"); - } - else - { - at_len = snprintf(buf, sizeof(buf), "AT+BTRH=%u\r", val); - } + if (query == true) { + at_len = snprintf(buf, sizeof(buf), "AT+BTRH?\r"); + } else { + at_len = snprintf(buf, sizeof(buf), "AT+BTRH=%u\r", val); + } - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BTRH, buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BTRH, buf, at_len); } -void bta_hf_client_send_at_vts(char code) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_vts(char code) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - at_len = snprintf(buf, sizeof(buf), "AT+VTS=%c\r", code); + at_len = snprintf(buf, sizeof(buf), "AT+VTS=%c\r", code); - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_VTS, buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_VTS, buf, at_len); } -void bta_hf_client_send_at_bcc(void) -{ - const char *buf; +void bta_hf_client_send_at_bcc(void) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - buf = "AT+BCC\r"; + buf = "AT+BCC\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BCC, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BCC, buf, strlen(buf)); } -void bta_hf_client_send_at_cnum(void) -{ - const char *buf; +void bta_hf_client_send_at_cnum(void) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - buf = "AT+CNUM\r"; + buf = "AT+CNUM\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_CNUM, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_CNUM, buf, strlen(buf)); } -void bta_hf_client_send_at_nrec(void) -{ - const char *buf; +void bta_hf_client_send_at_nrec(void) { + const char* buf; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (!(bta_hf_client_cb.scb.peer_features & BTA_HF_CLIENT_PEER_FEAT_ECNR)) - { - APPL_TRACE_ERROR("%s: Remote does not support NREC.", __func__); - return; - } + if (!(bta_hf_client_cb.scb.peer_features & BTA_HF_CLIENT_PEER_FEAT_ECNR)) { + APPL_TRACE_ERROR("%s: Remote does not support NREC.", __func__); + return; + } - buf = "AT+NREC=0\r"; + buf = "AT+NREC=0\r"; - bta_hf_client_send_at(BTA_HF_CLIENT_AT_NREC, buf, strlen(buf)); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_NREC, buf, strlen(buf)); } -void bta_hf_client_send_at_binp(uint32_t action) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; +void bta_hf_client_send_at_binp(uint32_t action) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - at_len = snprintf(buf, sizeof(buf), "AT+BINP=%u\r", action); + at_len = snprintf(buf, sizeof(buf), "AT+BINP=%u\r", action); - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BINP, buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BINP, buf, at_len); } -void bta_hf_client_send_at_bia(void) -{ - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - int at_len; - int i; +void bta_hf_client_send_at_bia(void) { + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + int at_len; + int i; - APPL_TRACE_DEBUG("%s", __func__); - if (bta_hf_client_cb.scb.peer_version < HFP_VERSION_1_6) - { - APPL_TRACE_DEBUG("Remote does not Support AT+BIA"); - return; - } + APPL_TRACE_DEBUG("%s", __func__); + if (bta_hf_client_cb.scb.peer_version < HFP_VERSION_1_6) { + APPL_TRACE_DEBUG("Remote does not Support AT+BIA"); + return; + } - at_len = snprintf(buf, sizeof(buf), "AT+BIA="); + at_len = snprintf(buf, sizeof(buf), "AT+BIA="); - for(i = 0; i < BTA_HF_CLIENT_AT_INDICATOR_COUNT; i++) - { - int sup = bta_hf_client_cb.scb.at_cb.indicator_lookup[i] == -1 ? 0 : 1; + for (i = 0; i < BTA_HF_CLIENT_AT_INDICATOR_COUNT; i++) { + int sup = bta_hf_client_cb.scb.at_cb.indicator_lookup[i] == -1 ? 0 : 1; - at_len += snprintf(buf + at_len, sizeof(buf) - at_len, "%u,", sup); - } + at_len += snprintf(buf + at_len, sizeof(buf) - at_len, "%u,", sup); + } - buf[at_len - 1] = '\r'; + buf[at_len - 1] = '\r'; - if (at_len < 0) - { - APPL_TRACE_ERROR("%s: AT command Framing error", __func__); - return; - } + if (at_len < 0) { + APPL_TRACE_ERROR("%s: AT command Framing error", __func__); + return; + } - bta_hf_client_send_at(BTA_HF_CLIENT_AT_BIA, buf, at_len); + bta_hf_client_send_at(BTA_HF_CLIENT_AT_BIA, buf, at_len); } -void bta_hf_client_at_init(void) -{ - alarm_free(bta_hf_client_cb.scb.at_cb.resp_timer); - alarm_free(bta_hf_client_cb.scb.at_cb.hold_timer); - memset(&bta_hf_client_cb.scb.at_cb, 0, sizeof(tBTA_HF_CLIENT_AT_CB)); - bta_hf_client_cb.scb.at_cb.resp_timer = +void bta_hf_client_at_init(void) { + alarm_free(bta_hf_client_cb.scb.at_cb.resp_timer); + alarm_free(bta_hf_client_cb.scb.at_cb.hold_timer); + memset(&bta_hf_client_cb.scb.at_cb, 0, sizeof(tBTA_HF_CLIENT_AT_CB)); + bta_hf_client_cb.scb.at_cb.resp_timer = alarm_new("bta_hf_client.scb_at_resp_timer"); - bta_hf_client_cb.scb.at_cb.hold_timer = + bta_hf_client_cb.scb.at_cb.hold_timer = alarm_new("bta_hf_client.scb_at_hold_timer"); - bta_hf_client_at_reset(); + bta_hf_client_at_reset(); } -void bta_hf_client_at_reset(void) -{ - int i; +void bta_hf_client_at_reset(void) { + int i; - bta_hf_client_stop_at_resp_timer(); - bta_hf_client_stop_at_hold_timer(); + bta_hf_client_stop_at_resp_timer(); + bta_hf_client_stop_at_hold_timer(); - bta_hf_client_clear_queued_at(); + bta_hf_client_clear_queued_at(); - bta_hf_client_at_clear_buf(); + bta_hf_client_at_clear_buf(); - for (i = 0; i < BTA_HF_CLIENT_AT_INDICATOR_COUNT; i++) - { - bta_hf_client_cb.scb.at_cb.indicator_lookup[i] = -1; - } + for (i = 0; i < BTA_HF_CLIENT_AT_INDICATOR_COUNT; i++) { + bta_hf_client_cb.scb.at_cb.indicator_lookup[i] = -1; + } - bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; + bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; } diff --git a/system/bta/hf_client/bta_hf_client_at.h b/system/bta/hf_client/bta_hf_client_at.h index a336cc8945a..9072195591e 100644 --- a/system/bta/hf_client/bta_hf_client_at.h +++ b/system/bta/hf_client/bta_hf_client_at.h @@ -22,67 +22,65 @@ ****************************************************************************/ /* ASCII character string of arguments to the AT command */ -#define BTA_HF_CLIENT_AT_MAX_LEN 512 +#define BTA_HF_CLIENT_AT_MAX_LEN 512 /* AT command table element */ -typedef struct -{ - const char *p_cmd; /* AT command string */ - uint8_t arg_type; /* allowable argument type syntax */ - uint8_t fmt; /* whether arg is int or string */ - uint8_t min; /* minimum value for int arg */ - int16_t max; /* maximum value for int arg */ +typedef struct { + const char* p_cmd; /* AT command string */ + uint8_t arg_type; /* allowable argument type syntax */ + uint8_t fmt; /* whether arg is int or string */ + uint8_t min; /* minimum value for int arg */ + int16_t max; /* maximum value for int arg */ } tBTA_AG_AT_CMD; /* callback function executed when command is parsed */ -typedef void (tBTA_AG_AT_CMD_CBACK)(void *p_user, uint16_t cmd, uint8_t arg_type, - char *p_arg, int16_t int_arg); +typedef void(tBTA_AG_AT_CMD_CBACK)(void* p_user, uint16_t cmd, uint8_t arg_type, + char* p_arg, int16_t int_arg); /* callback function executed to send "ERROR" result code */ -typedef void (tBTA_AG_AT_ERR_CBACK)(void *p_user, bool unknown, char *p_arg); +typedef void(tBTA_AG_AT_ERR_CBACK)(void* p_user, bool unknown, char* p_arg); -enum -{ - BTA_HF_CLIENT_AT_NONE, - BTA_HF_CLIENT_AT_BRSF, - BTA_HF_CLIENT_AT_BAC, - BTA_HF_CLIENT_AT_CIND, - BTA_HF_CLIENT_AT_CIND_STATUS, - BTA_HF_CLIENT_AT_CMER, - BTA_HF_CLIENT_AT_CHLD, - BTA_HF_CLIENT_AT_CMEE, - BTA_HF_CLIENT_AT_BIA, - BTA_HF_CLIENT_AT_CLIP, - BTA_HF_CLIENT_AT_CCWA, - BTA_HF_CLIENT_AT_COPS, - BTA_HF_CLIENT_AT_CLCC, - BTA_HF_CLIENT_AT_BVRA, - BTA_HF_CLIENT_AT_VGS, - BTA_HF_CLIENT_AT_VGM, - BTA_HF_CLIENT_AT_ATD, - BTA_HF_CLIENT_AT_BLDN, - BTA_HF_CLIENT_AT_ATA, - BTA_HF_CLIENT_AT_CHUP, - BTA_HF_CLIENT_AT_BTRH, - BTA_HF_CLIENT_AT_VTS, - BTA_HF_CLIENT_AT_BCC, - BTA_HF_CLIENT_AT_BCS, - BTA_HF_CLIENT_AT_CNUM, - BTA_HF_CLIENT_AT_NREC, - BTA_HF_CLIENT_AT_BINP, +enum { + BTA_HF_CLIENT_AT_NONE, + BTA_HF_CLIENT_AT_BRSF, + BTA_HF_CLIENT_AT_BAC, + BTA_HF_CLIENT_AT_CIND, + BTA_HF_CLIENT_AT_CIND_STATUS, + BTA_HF_CLIENT_AT_CMER, + BTA_HF_CLIENT_AT_CHLD, + BTA_HF_CLIENT_AT_CMEE, + BTA_HF_CLIENT_AT_BIA, + BTA_HF_CLIENT_AT_CLIP, + BTA_HF_CLIENT_AT_CCWA, + BTA_HF_CLIENT_AT_COPS, + BTA_HF_CLIENT_AT_CLCC, + BTA_HF_CLIENT_AT_BVRA, + BTA_HF_CLIENT_AT_VGS, + BTA_HF_CLIENT_AT_VGM, + BTA_HF_CLIENT_AT_ATD, + BTA_HF_CLIENT_AT_BLDN, + BTA_HF_CLIENT_AT_ATA, + BTA_HF_CLIENT_AT_CHUP, + BTA_HF_CLIENT_AT_BTRH, + BTA_HF_CLIENT_AT_VTS, + BTA_HF_CLIENT_AT_BCC, + BTA_HF_CLIENT_AT_BCS, + BTA_HF_CLIENT_AT_CNUM, + BTA_HF_CLIENT_AT_NREC, + BTA_HF_CLIENT_AT_BINP, }; typedef uint8_t tBTA_HF_CLIENT_AT_CMD; /* Maximum combined buffer for received AT events string */ -#define BTA_HF_CLIENT_AT_PARSER_MAX_LEN 4096 +#define BTA_HF_CLIENT_AT_PARSER_MAX_LEN 4096 /* This structure holds prepared AT command queued for sending */ -struct queued_at_cmd{ - tBTA_HF_CLIENT_AT_CMD cmd; - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - uint16_t buf_len; - struct queued_at_cmd *next; +struct queued_at_cmd { + tBTA_HF_CLIENT_AT_CMD cmd; + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; + uint16_t buf_len; + struct queued_at_cmd* next; }; typedef struct queued_at_cmd tBTA_HF_CLIENT_AT_QCMD; @@ -90,18 +88,20 @@ typedef struct queued_at_cmd tBTA_HF_CLIENT_AT_QCMD; #define BTA_HF_CLIENT_AT_INDICATOR_COUNT 20 /* AT command parsing control block */ -typedef struct -{ - char buf[BTA_HF_CLIENT_AT_PARSER_MAX_LEN + 1]; /* extra byte to always have \0 at the end */ - unsigned int offset; - tBTA_HF_CLIENT_AT_CMD current_cmd; - tBTA_HF_CLIENT_AT_QCMD *queued_cmd; - alarm_t *resp_timer; /* AT response timer */ - alarm_t *hold_timer; /* AT hold timer */ +typedef struct { + char buf[BTA_HF_CLIENT_AT_PARSER_MAX_LEN + + 1]; /* extra byte to always have \0 at the end */ + unsigned int offset; + tBTA_HF_CLIENT_AT_CMD current_cmd; + tBTA_HF_CLIENT_AT_QCMD* queued_cmd; + alarm_t* resp_timer; /* AT response timer */ + alarm_t* hold_timer; /* AT hold timer */ - /* CIND: lookup table to store the sequence of incoming indicators and their values - so when their values come later, we know which value in sequence match certain indicator */ - int indicator_lookup[BTA_HF_CLIENT_AT_INDICATOR_COUNT]; + /* CIND: lookup table to store the sequence of incoming indicators and their + values + so when their values come later, we know which value in sequence match + certain indicator */ + int indicator_lookup[BTA_HF_CLIENT_AT_INDICATOR_COUNT]; } tBTA_HF_CLIENT_AT_CB; diff --git a/system/bta/hf_client/bta_hf_client_cmd.cc b/system/bta/hf_client/bta_hf_client_cmd.cc index f8e6b5be98f..b7109cb5411 100644 --- a/system/bta/hf_client/bta_hf_client_cmd.cc +++ b/system/bta/hf_client/bta_hf_client_cmd.cc @@ -20,69 +20,66 @@ #include "bta_hf_client_int.h" #include "stdio.h" -void bta_hf_client_send_at_cmd(tBTA_HF_CLIENT_DATA *p_data) -{ - tBTA_HF_CLIENT_DATA_VAL *p_val = (tBTA_HF_CLIENT_DATA_VAL *)p_data; - char buf[BTA_HF_CLIENT_AT_MAX_LEN]; +void bta_hf_client_send_at_cmd(tBTA_HF_CLIENT_DATA* p_data) { + tBTA_HF_CLIENT_DATA_VAL* p_val = (tBTA_HF_CLIENT_DATA_VAL*)p_data; + char buf[BTA_HF_CLIENT_AT_MAX_LEN]; - switch(p_val->uint8_val) - { - case BTA_HF_CLIENT_AT_CMD_VTS: - bta_hf_client_send_at_vts((char)p_val->uint32_val1); - break; - case BTA_HF_CLIENT_AT_CMD_BTRH: - bta_hf_client_send_at_btrh(false, p_val->uint32_val1); - break; - case BTA_HF_CLIENT_AT_CMD_CHUP: - bta_hf_client_send_at_chup(); - break; - case BTA_HF_CLIENT_AT_CMD_CHLD: - /* expects ascii code for command */ - bta_hf_client_send_at_chld('0' + p_val->uint32_val1, p_val->uint32_val2); - break; - case BTA_HF_CLIENT_AT_CMD_BCC: - bta_hf_client_send_at_bcc(); - break; - case BTA_HF_CLIENT_AT_CMD_CNUM: - bta_hf_client_send_at_cnum(); - break; - case BTA_HF_CLIENT_AT_CMD_ATA: - bta_hf_client_send_at_ata(); - break; - case BTA_HF_CLIENT_AT_CMD_COPS: - bta_hf_client_send_at_cops(true); - break; - case BTA_HF_CLIENT_AT_CMD_ATD: - bta_hf_client_send_at_atd(p_val->str, p_val->uint32_val1); - break; - case BTA_HF_CLIENT_AT_CMD_VGM: - bta_hf_client_send_at_vgm(p_val->uint32_val1); - break; - case BTA_HF_CLIENT_AT_CMD_VGS: - bta_hf_client_send_at_vgs(p_val->uint32_val1); - break; - case BTA_HF_CLIENT_AT_CMD_BVRA: - bta_hf_client_send_at_bvra(p_val->uint32_val1 == 0 ? false : true); - break; - case BTA_HF_CLIENT_AT_CMD_CLCC: - bta_hf_client_send_at_clcc(); - break; - case BTA_HF_CLIENT_AT_CMD_BINP: - bta_hf_client_send_at_binp(p_val->uint32_val1); - break; - case BTA_HF_CLIENT_AT_CMD_BLDN: - bta_hf_client_send_at_bldn(); - break; - case BTA_HF_CLIENT_AT_CMD_NREC: - bta_hf_client_send_at_nrec(); - break; - default: - APPL_TRACE_ERROR("Default case"); - snprintf(buf,BTA_HF_CLIENT_AT_MAX_LEN, - "Cmd %d 1st arg %u 2nd arg %u string arg %s", - p_val->uint8_val, p_val->uint32_val1, - p_val->uint32_val2, p_val->str); - APPL_TRACE_ERROR("%s ", buf); - break; - } + switch (p_val->uint8_val) { + case BTA_HF_CLIENT_AT_CMD_VTS: + bta_hf_client_send_at_vts((char)p_val->uint32_val1); + break; + case BTA_HF_CLIENT_AT_CMD_BTRH: + bta_hf_client_send_at_btrh(false, p_val->uint32_val1); + break; + case BTA_HF_CLIENT_AT_CMD_CHUP: + bta_hf_client_send_at_chup(); + break; + case BTA_HF_CLIENT_AT_CMD_CHLD: + /* expects ascii code for command */ + bta_hf_client_send_at_chld('0' + p_val->uint32_val1, p_val->uint32_val2); + break; + case BTA_HF_CLIENT_AT_CMD_BCC: + bta_hf_client_send_at_bcc(); + break; + case BTA_HF_CLIENT_AT_CMD_CNUM: + bta_hf_client_send_at_cnum(); + break; + case BTA_HF_CLIENT_AT_CMD_ATA: + bta_hf_client_send_at_ata(); + break; + case BTA_HF_CLIENT_AT_CMD_COPS: + bta_hf_client_send_at_cops(true); + break; + case BTA_HF_CLIENT_AT_CMD_ATD: + bta_hf_client_send_at_atd(p_val->str, p_val->uint32_val1); + break; + case BTA_HF_CLIENT_AT_CMD_VGM: + bta_hf_client_send_at_vgm(p_val->uint32_val1); + break; + case BTA_HF_CLIENT_AT_CMD_VGS: + bta_hf_client_send_at_vgs(p_val->uint32_val1); + break; + case BTA_HF_CLIENT_AT_CMD_BVRA: + bta_hf_client_send_at_bvra(p_val->uint32_val1 == 0 ? false : true); + break; + case BTA_HF_CLIENT_AT_CMD_CLCC: + bta_hf_client_send_at_clcc(); + break; + case BTA_HF_CLIENT_AT_CMD_BINP: + bta_hf_client_send_at_binp(p_val->uint32_val1); + break; + case BTA_HF_CLIENT_AT_CMD_BLDN: + bta_hf_client_send_at_bldn(); + break; + case BTA_HF_CLIENT_AT_CMD_NREC: + bta_hf_client_send_at_nrec(); + break; + default: + APPL_TRACE_ERROR("Default case"); + snprintf(buf, BTA_HF_CLIENT_AT_MAX_LEN, + "Cmd %d 1st arg %u 2nd arg %u string arg %s", p_val->uint8_val, + p_val->uint32_val1, p_val->uint32_val2, p_val->str); + APPL_TRACE_ERROR("%s ", buf); + break; + } } diff --git a/system/bta/hf_client/bta_hf_client_int.h b/system/bta/hf_client/bta_hf_client_int.h index 45ce5f11a89..9b3faad5485 100644 --- a/system/bta/hf_client/bta_hf_client_int.h +++ b/system/bta/hf_client/bta_hf_client_int.h @@ -17,55 +17,54 @@ * ******************************************************************************/ -#include "bta_sys.h" #include "bta_api.h" #include "bta_hf_client_api.h" #include "bta_hf_client_at.h" +#include "bta_sys.h" /***************************************************************************** * Constants ****************************************************************************/ -#define HFP_VERSION_1_1 0x0101 -#define HFP_VERSION_1_5 0x0105 -#define HFP_VERSION_1_6 0x0106 +#define HFP_VERSION_1_1 0x0101 +#define HFP_VERSION_1_5 0x0105 +#define HFP_VERSION_1_6 0x0106 /* RFCOMM MTU SIZE */ -#define BTA_HF_CLIENT_MTU 256 +#define BTA_HF_CLIENT_MTU 256 /* profile role for connection */ -#define BTA_HF_CLIENT_ACP 0 /* accepted connection */ -#define BTA_HF_CLIENT_INT 1 /* initiating connection */ +#define BTA_HF_CLIENT_ACP 0 /* accepted connection */ +#define BTA_HF_CLIENT_INT 1 /* initiating connection */ /* Time (in milliseconds) to wait for retry in case of collision */ #ifndef BTA_HF_CLIENT_COLLISION_TIMER_MS -#define BTA_HF_CLIENT_COLLISION_TIMER_MS 2411 +#define BTA_HF_CLIENT_COLLISION_TIMER_MS 2411 #endif -enum -{ - /* these events are handled by the state machine */ - BTA_HF_CLIENT_API_REGISTER_EVT = BTA_SYS_EVT_START(BTA_ID_HS), - BTA_HF_CLIENT_API_DEREGISTER_EVT, - BTA_HF_CLIENT_API_OPEN_EVT, - BTA_HF_CLIENT_API_CLOSE_EVT, - BTA_HF_CLIENT_API_AUDIO_OPEN_EVT, - BTA_HF_CLIENT_API_AUDIO_CLOSE_EVT, - BTA_HF_CLIENT_RFC_OPEN_EVT, - BTA_HF_CLIENT_RFC_CLOSE_EVT, - BTA_HF_CLIENT_RFC_SRV_CLOSE_EVT, - BTA_HF_CLIENT_RFC_DATA_EVT, - BTA_HF_CLIENT_DISC_ACP_RES_EVT, - BTA_HF_CLIENT_DISC_INT_RES_EVT, - BTA_HF_CLIENT_DISC_OK_EVT, - BTA_HF_CLIENT_DISC_FAIL_EVT, - BTA_HF_CLIENT_SCO_OPEN_EVT, - BTA_HF_CLIENT_SCO_CLOSE_EVT, - BTA_HF_CLIENT_SEND_AT_CMD_EVT, - BTA_HF_CLIENT_MAX_EVT, +enum { + /* these events are handled by the state machine */ + BTA_HF_CLIENT_API_REGISTER_EVT = BTA_SYS_EVT_START(BTA_ID_HS), + BTA_HF_CLIENT_API_DEREGISTER_EVT, + BTA_HF_CLIENT_API_OPEN_EVT, + BTA_HF_CLIENT_API_CLOSE_EVT, + BTA_HF_CLIENT_API_AUDIO_OPEN_EVT, + BTA_HF_CLIENT_API_AUDIO_CLOSE_EVT, + BTA_HF_CLIENT_RFC_OPEN_EVT, + BTA_HF_CLIENT_RFC_CLOSE_EVT, + BTA_HF_CLIENT_RFC_SRV_CLOSE_EVT, + BTA_HF_CLIENT_RFC_DATA_EVT, + BTA_HF_CLIENT_DISC_ACP_RES_EVT, + BTA_HF_CLIENT_DISC_INT_RES_EVT, + BTA_HF_CLIENT_DISC_OK_EVT, + BTA_HF_CLIENT_DISC_FAIL_EVT, + BTA_HF_CLIENT_SCO_OPEN_EVT, + BTA_HF_CLIENT_SCO_CLOSE_EVT, + BTA_HF_CLIENT_SEND_AT_CMD_EVT, + BTA_HF_CLIENT_MAX_EVT, - /* these events are handled outside of the state machine */ - BTA_HF_CLIENT_API_ENABLE_EVT, - BTA_HF_CLIENT_API_DISABLE_EVT + /* these events are handled outside of the state machine */ + BTA_HF_CLIENT_API_ENABLE_EVT, + BTA_HF_CLIENT_API_DISABLE_EVT }; /***************************************************************************** @@ -73,117 +72,107 @@ enum ****************************************************************************/ /* data type for BTA_HF_CLIENT_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_HF_CLIENT_CBACK *p_cback; +typedef struct { + BT_HDR hdr; + tBTA_HF_CLIENT_CBACK* p_cback; } tBTA_HF_CLIENT_API_ENABLE; /* data type for BTA_HF_CLIENT_API_REGISTER_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_HF_CLIENT_CBACK *p_cback; - tBTA_SEC sec_mask; - tBTA_HF_CLIENT_FEAT features; - char name[BTA_SERVICE_NAME_LEN+1]; +typedef struct { + BT_HDR hdr; + tBTA_HF_CLIENT_CBACK* p_cback; + tBTA_SEC sec_mask; + tBTA_HF_CLIENT_FEAT features; + char name[BTA_SERVICE_NAME_LEN + 1]; } tBTA_HF_CLIENT_API_REGISTER; /* data type for BTA_HF_CLIENT_API_OPEN_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tBTA_SEC sec_mask; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tBTA_SEC sec_mask; } tBTA_HF_CLIENT_API_OPEN; /* data type for BTA_HF_CLIENT_DISC_RESULT_EVT */ -typedef struct -{ - BT_HDR hdr; - uint16_t status; +typedef struct { + BT_HDR hdr; + uint16_t status; } tBTA_HF_CLIENT_DISC_RESULT; /* data type for RFCOMM events */ -typedef struct -{ - BT_HDR hdr; - uint16_t port_handle; +typedef struct { + BT_HDR hdr; + uint16_t port_handle; } tBTA_HF_CLIENT_RFC; /* generic purpose data type for other events */ -typedef struct -{ - BT_HDR hdr; - bool bool_val; - uint8_t uint8_val; - uint32_t uint32_val1; - uint32_t uint32_val2; - char str[BTA_HF_CLIENT_NUMBER_LEN + 1]; +typedef struct { + BT_HDR hdr; + bool bool_val; + uint8_t uint8_val; + uint32_t uint32_val1; + uint32_t uint32_val2; + char str[BTA_HF_CLIENT_NUMBER_LEN + 1]; } tBTA_HF_CLIENT_DATA_VAL; /* union of all event datatypes */ -typedef union -{ - BT_HDR hdr; - tBTA_HF_CLIENT_API_ENABLE api_enable; - tBTA_HF_CLIENT_API_REGISTER api_register; - tBTA_HF_CLIENT_API_OPEN api_open; - tBTA_HF_CLIENT_DISC_RESULT disc_result; - tBTA_HF_CLIENT_RFC rfc; - tBTA_HF_CLIENT_DATA_VAL val; +typedef union { + BT_HDR hdr; + tBTA_HF_CLIENT_API_ENABLE api_enable; + tBTA_HF_CLIENT_API_REGISTER api_register; + tBTA_HF_CLIENT_API_OPEN api_open; + tBTA_HF_CLIENT_DISC_RESULT disc_result; + tBTA_HF_CLIENT_RFC rfc; + tBTA_HF_CLIENT_DATA_VAL val; } tBTA_HF_CLIENT_DATA; /* type for each service control block */ -typedef struct -{ - uint16_t serv_handle; /* RFCOMM server handle */ - BD_ADDR peer_addr; /* peer bd address */ - tSDP_DISCOVERY_DB *p_disc_db; /* pointer to discovery database */ - uint16_t conn_handle; /* RFCOMM handle of connected service */ - tBTA_SEC serv_sec_mask; /* server security mask */ - tBTA_SEC cli_sec_mask; /* client security mask */ - tBTA_HF_CLIENT_FEAT features; /* features registered by application */ - tBTA_HF_CLIENT_PEER_FEAT peer_features; /* peer device features */ - tBTA_HF_CLIENT_CHLD_FEAT chld_features; /* call handling features */ - uint16_t peer_version; /* profile version of peer device */ - uint8_t peer_scn; /* peer scn */ - uint8_t role; /* initiator/acceptor role */ - uint16_t sco_idx; /* SCO handle */ - uint8_t sco_state; /* SCO state variable */ - bool sco_close_rfc; /* true if also close RFCOMM after SCO */ - bool retry_with_sco_only; - bool deregister; /* true if service shutting down */ - bool svc_conn; /* set to true when service level connection is up */ - bool send_at_reply; /* set to true to notify framework about AT results */ - tBTA_HF_CLIENT_AT_CB at_cb; /* AT Parser control block */ - uint8_t state; /* state machine state */ - tBTM_SCO_CODEC_TYPE negotiated_codec; /* negotiated codec */ - alarm_t *collision_timer; /* Collision timer */ +typedef struct { + uint16_t serv_handle; /* RFCOMM server handle */ + BD_ADDR peer_addr; /* peer bd address */ + tSDP_DISCOVERY_DB* p_disc_db; /* pointer to discovery database */ + uint16_t conn_handle; /* RFCOMM handle of connected service */ + tBTA_SEC serv_sec_mask; /* server security mask */ + tBTA_SEC cli_sec_mask; /* client security mask */ + tBTA_HF_CLIENT_FEAT features; /* features registered by application */ + tBTA_HF_CLIENT_PEER_FEAT peer_features; /* peer device features */ + tBTA_HF_CLIENT_CHLD_FEAT chld_features; /* call handling features */ + uint16_t peer_version; /* profile version of peer device */ + uint8_t peer_scn; /* peer scn */ + uint8_t role; /* initiator/acceptor role */ + uint16_t sco_idx; /* SCO handle */ + uint8_t sco_state; /* SCO state variable */ + bool sco_close_rfc; /* true if also close RFCOMM after SCO */ + bool retry_with_sco_only; + bool deregister; /* true if service shutting down */ + bool svc_conn; /* set to true when service level connection is up */ + bool send_at_reply; /* set to true to notify framework about AT results */ + tBTA_HF_CLIENT_AT_CB at_cb; /* AT Parser control block */ + uint8_t state; /* state machine state */ + tBTM_SCO_CODEC_TYPE negotiated_codec; /* negotiated codec */ + alarm_t* collision_timer; /* Collision timer */ } tBTA_HF_CLIENT_SCB; /* sco states */ -enum -{ - BTA_HF_CLIENT_SCO_SHUTDOWN_ST, /* no listening, no connection */ - BTA_HF_CLIENT_SCO_LISTEN_ST, /* listening */ - BTA_HF_CLIENT_SCO_OPENING_ST, /* connection opening */ - BTA_HF_CLIENT_SCO_OPEN_CL_ST, /* opening connection being closed */ - BTA_HF_CLIENT_SCO_OPEN_ST, /* open */ - BTA_HF_CLIENT_SCO_CLOSING_ST, /* closing */ - BTA_HF_CLIENT_SCO_CLOSE_OP_ST, /* closing sco being opened */ - BTA_HF_CLIENT_SCO_SHUTTING_ST /* sco shutting down */ +enum { + BTA_HF_CLIENT_SCO_SHUTDOWN_ST, /* no listening, no connection */ + BTA_HF_CLIENT_SCO_LISTEN_ST, /* listening */ + BTA_HF_CLIENT_SCO_OPENING_ST, /* connection opening */ + BTA_HF_CLIENT_SCO_OPEN_CL_ST, /* opening connection being closed */ + BTA_HF_CLIENT_SCO_OPEN_ST, /* open */ + BTA_HF_CLIENT_SCO_CLOSING_ST, /* closing */ + BTA_HF_CLIENT_SCO_CLOSE_OP_ST, /* closing sco being opened */ + BTA_HF_CLIENT_SCO_SHUTTING_ST /* sco shutting down */ }; /* type for AG control block */ -typedef struct -{ - tBTA_HF_CLIENT_SCB scb; /* service control block */ - uint32_t sdp_handle; - uint8_t scn; - tBTA_HF_CLIENT_CBACK *p_cback; /* application callback */ - bool msbc_enabled; +typedef struct { + tBTA_HF_CLIENT_SCB scb; /* service control block */ + uint32_t sdp_handle; + uint8_t scn; + tBTA_HF_CLIENT_CBACK* p_cback; /* application callback */ + bool msbc_enabled; } tBTA_HF_CLIENT_CB; /***************************************************************************** @@ -200,42 +189,43 @@ extern tBTA_HF_CLIENT_CB bta_hf_client_cb; /* main functions */ extern void bta_hf_client_scb_init(void); extern void bta_hf_client_scb_disable(void); -extern bool bta_hf_client_hdl_event(BT_HDR *p_msg); +extern bool bta_hf_client_hdl_event(BT_HDR* p_msg); extern void bta_hf_client_sm_execute(uint16_t event, - tBTA_HF_CLIENT_DATA *p_data); + tBTA_HF_CLIENT_DATA* p_data); extern void bta_hf_client_slc_seq(bool error); -extern void bta_hf_client_collision_cback (tBTA_SYS_CONN_STATUS status, uint8_t id, - uint8_t app_id, BD_ADDR peer_addr); -extern void bta_hf_client_resume_open (); +extern void bta_hf_client_collision_cback(tBTA_SYS_CONN_STATUS status, + uint8_t id, uint8_t app_id, + BD_ADDR peer_addr); +extern void bta_hf_client_resume_open(); /* SDP functions */ -extern bool bta_hf_client_add_record(char *p_service_name, - uint8_t scn, tBTA_HF_CLIENT_FEAT features, - uint32_t sdp_handle); -extern void bta_hf_client_create_record(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_del_record(tBTA_HF_CLIENT_DATA *p_data); +extern bool bta_hf_client_add_record(char* p_service_name, uint8_t scn, + tBTA_HF_CLIENT_FEAT features, + uint32_t sdp_handle); +extern void bta_hf_client_create_record(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_del_record(tBTA_HF_CLIENT_DATA* p_data); extern bool bta_hf_client_sdp_find_attr(void); extern void bta_hf_client_do_disc(void); -extern void bta_hf_client_free_db(tBTA_HF_CLIENT_DATA *p_data); +extern void bta_hf_client_free_db(tBTA_HF_CLIENT_DATA* p_data); /* RFCOMM functions */ extern void bta_hf_client_setup_port(uint16_t handle); extern void bta_hf_client_start_server(void); extern void bta_hf_client_close_server(void); -extern void bta_hf_client_rfc_do_open(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_rfc_do_close(tBTA_HF_CLIENT_DATA *p_data); +extern void bta_hf_client_rfc_do_open(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_rfc_do_close(tBTA_HF_CLIENT_DATA* p_data); /* SCO functions */ -extern void bta_hf_client_sco_listen(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_sco_shutdown(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_sco_conn_open(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_sco_conn_close(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_sco_open(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_sco_close(tBTA_HF_CLIENT_DATA *p_data); +extern void bta_hf_client_sco_listen(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_sco_shutdown(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_sco_conn_open(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_sco_conn_close(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_sco_open(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_sco_close(tBTA_HF_CLIENT_DATA* p_data); extern void bta_hf_client_cback_sco(uint8_t event); /* AT command functions */ -extern void bta_hf_client_at_parse(char *buf, unsigned int len); +extern void bta_hf_client_at_parse(char* buf, unsigned int len); extern void bta_hf_client_send_at_brsf(void); extern void bta_hf_client_send_at_bac(void); extern void bta_hf_client_send_at_cind(bool status); @@ -249,7 +239,7 @@ extern void bta_hf_client_send_at_clcc(void); extern void bta_hf_client_send_at_bvra(bool enable); extern void bta_hf_client_send_at_vgs(uint32_t volume); extern void bta_hf_client_send_at_vgm(uint32_t volume); -extern void bta_hf_client_send_at_atd(char *number, uint32_t memory); +extern void bta_hf_client_send_at_atd(char* number, uint32_t memory); extern void bta_hf_client_send_at_bldn(void); extern void bta_hf_client_send_at_ata(void); extern void bta_hf_client_send_at_chup(void); @@ -263,31 +253,33 @@ extern void bta_hf_client_send_at_binp(uint32_t action); extern void bta_hf_client_send_at_bia(void); /* Action functions */ -extern void bta_hf_client_register(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_deregister(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_start_dereg(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_start_close(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_start_open(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_rfc_acp_open(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_rfc_open(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_rfc_fail(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_disc_fail(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_open_fail(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_rfc_close(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_disc_acp_res(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_rfc_data(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_disc_int_res(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_svc_conn_open(tBTA_HF_CLIENT_DATA *p_data); +extern void bta_hf_client_register(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_deregister(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_start_dereg(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_start_close(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_start_open(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_rfc_acp_open(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_rfc_open(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_rfc_fail(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_disc_fail(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_open_fail(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_rfc_close(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_disc_acp_res(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_rfc_data(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_disc_int_res(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_svc_conn_open(tBTA_HF_CLIENT_DATA* p_data); extern void bta_hf_client_ind(tBTA_HF_CLIENT_IND_TYPE type, uint16_t value); extern void bta_hf_client_evt_val(tBTA_HF_CLIENT_EVT type, uint16_t value); -extern void bta_hf_client_operator_name(char *name); -extern void bta_hf_client_clip(char *number); -extern void bta_hf_client_ccwa(char *number); -extern void bta_hf_client_at_result(tBTA_HF_CLIENT_AT_RESULT_TYPE type, uint16_t cme); -extern void bta_hf_client_clcc(uint32_t idx, bool incoming, uint8_t status, bool mpty, char *number); -extern void bta_hf_client_cnum(char *number, uint16_t service); -extern void bta_hf_client_binp(char *number); +extern void bta_hf_client_operator_name(char* name); +extern void bta_hf_client_clip(char* number); +extern void bta_hf_client_ccwa(char* number); +extern void bta_hf_client_at_result(tBTA_HF_CLIENT_AT_RESULT_TYPE type, + uint16_t cme); +extern void bta_hf_client_clcc(uint32_t idx, bool incoming, uint8_t status, + bool mpty, char* number); +extern void bta_hf_client_cnum(char* number, uint16_t service); +extern void bta_hf_client_binp(char* number); /* Commands handling functions */ -extern void bta_hf_client_dial(tBTA_HF_CLIENT_DATA *p_data); -extern void bta_hf_client_send_at_cmd(tBTA_HF_CLIENT_DATA *p_data); +extern void bta_hf_client_dial(tBTA_HF_CLIENT_DATA* p_data); +extern void bta_hf_client_send_at_cmd(tBTA_HF_CLIENT_DATA* p_data); diff --git a/system/bta/hf_client/bta_hf_client_main.cc b/system/bta/hf_client/bta_hf_client_main.cc index af9589a0777..85e24c63ee1 100644 --- a/system/bta/hf_client/bta_hf_client_main.cc +++ b/system/bta/hf_client/bta_hf_client_main.cc @@ -17,16 +17,16 @@ * ******************************************************************************/ -#include #include +#include -#include "osi/include/osi.h" -#include "osi/include/properties.h" #include "bt_utils.h" #include "bta_api.h" -#include "bta_sys.h" #include "bta_hf_client_api.h" #include "bta_hf_client_int.h" +#include "bta_sys.h" +#include "osi/include/osi.h" +#include "osi/include/properties.h" /* uncomment to enable extra debug */ /* #define BTA_HF_CLIENT_DEBUG TRUE */ @@ -35,199 +35,262 @@ #define BTA_HF_CLIENT_DEBUG FALSE #endif -extern fixed_queue_t *btu_bta_alarm_queue; +extern fixed_queue_t* btu_bta_alarm_queue; #if (BTA_HF_CLIENT_DEBUG == TRUE) -static char *bta_hf_client_evt_str(uint16_t event); -static char *bta_hf_client_state_str(uint8_t state); +static char* bta_hf_client_evt_str(uint16_t event); +static char* bta_hf_client_state_str(uint8_t state); #endif /* state machine states */ -enum -{ - BTA_HF_CLIENT_INIT_ST, - BTA_HF_CLIENT_OPENING_ST, - BTA_HF_CLIENT_OPEN_ST, - BTA_HF_CLIENT_CLOSING_ST +enum { + BTA_HF_CLIENT_INIT_ST, + BTA_HF_CLIENT_OPENING_ST, + BTA_HF_CLIENT_OPEN_ST, + BTA_HF_CLIENT_CLOSING_ST }; /* state machine action enumeration list */ -enum -{ - BTA_HF_CLIENT_REGISTER, - BTA_HF_CLIENT_DEREGISTER, - BTA_HF_CLIENT_START_DEREG, - BTA_HF_CLIENT_RFC_DO_CLOSE, - BTA_HF_CLIENT_START_CLOSE, - BTA_HF_CLIENT_START_OPEN, - BTA_HF_CLIENT_RFC_ACP_OPEN, - BTA_HF_CLIENT_SCO_LISTEN, - BTA_HF_CLIENT_SCO_CONN_OPEN, - BTA_HF_CLIENT_SCO_CONN_CLOSE, - BTA_HF_CLIENT_SCO_OPEN, - BTA_HF_CLIENT_SCO_CLOSE, - BTA_HF_CLIENT_SCO_SHUTDOWN, - BTA_HF_CLIENT_FREE_DB, - BTA_HF_CLIENT_OPEN_FAIL, - BTA_HF_CLIENT_RFC_OPEN, - BTA_HF_CLIENT_RFC_FAIL, - BTA_HF_CLIENT_DISC_INT_RES, - BTA_HF_CLIENT_RFC_DO_OPEN, - BTA_HF_CLIENT_DISC_FAIL, - BTA_HF_CLIENT_RFC_CLOSE, - BTA_HF_CLIENT_RFC_DATA, - BTA_HF_CLIENT_DISC_ACP_RES, - BTA_HF_CLIENT_SVC_CONN_OPEN, - BTA_HF_CLIENT_SEND_AT_CMD, - BTA_HF_CLIENT_NUM_ACTIONS, +enum { + BTA_HF_CLIENT_REGISTER, + BTA_HF_CLIENT_DEREGISTER, + BTA_HF_CLIENT_START_DEREG, + BTA_HF_CLIENT_RFC_DO_CLOSE, + BTA_HF_CLIENT_START_CLOSE, + BTA_HF_CLIENT_START_OPEN, + BTA_HF_CLIENT_RFC_ACP_OPEN, + BTA_HF_CLIENT_SCO_LISTEN, + BTA_HF_CLIENT_SCO_CONN_OPEN, + BTA_HF_CLIENT_SCO_CONN_CLOSE, + BTA_HF_CLIENT_SCO_OPEN, + BTA_HF_CLIENT_SCO_CLOSE, + BTA_HF_CLIENT_SCO_SHUTDOWN, + BTA_HF_CLIENT_FREE_DB, + BTA_HF_CLIENT_OPEN_FAIL, + BTA_HF_CLIENT_RFC_OPEN, + BTA_HF_CLIENT_RFC_FAIL, + BTA_HF_CLIENT_DISC_INT_RES, + BTA_HF_CLIENT_RFC_DO_OPEN, + BTA_HF_CLIENT_DISC_FAIL, + BTA_HF_CLIENT_RFC_CLOSE, + BTA_HF_CLIENT_RFC_DATA, + BTA_HF_CLIENT_DISC_ACP_RES, + BTA_HF_CLIENT_SVC_CONN_OPEN, + BTA_HF_CLIENT_SEND_AT_CMD, + BTA_HF_CLIENT_NUM_ACTIONS, }; #define BTA_HF_CLIENT_IGNORE BTA_HF_CLIENT_NUM_ACTIONS /* type for action functions */ -typedef void (*tBTA_HF_CLIENT_ACTION)(tBTA_HF_CLIENT_DATA *p_data); +typedef void (*tBTA_HF_CLIENT_ACTION)(tBTA_HF_CLIENT_DATA* p_data); /* action functions table, indexed with action enum */ -const tBTA_HF_CLIENT_ACTION bta_hf_client_action[] = -{ -/* BTA_HF_CLIENT_REGISTER */ bta_hf_client_register, -/* BTA_HF_CLIENT_DEREGISTER */ bta_hf_client_deregister, -/* BTA_HF_CLIENT_START_DEREG */ bta_hf_client_start_dereg, -/* BTA_HF_CLIENT_RFC_DO_CLOSE */ bta_hf_client_rfc_do_close, -/* BTA_HF_CLIENT_START_CLOSE */ bta_hf_client_start_close, -/* BTA_HF_CLIENT_START_OPEN */ bta_hf_client_start_open, -/* BTA_HF_CLIENT_RFC_ACP_OPEN */ bta_hf_client_rfc_acp_open, -/* BTA_HF_CLIENT_SCO_LISTEN */ bta_hf_client_sco_listen, -/* BTA_HF_CLIENT_SCO_CONN_OPEN */ bta_hf_client_sco_conn_open, -/* BTA_HF_CLIENT_SCO_CONN_CLOSE*/ bta_hf_client_sco_conn_close, -/* BTA_HF_CLIENT_SCO_OPEN */ bta_hf_client_sco_open, -/* BTA_HF_CLIENT_SCO_CLOSE */ bta_hf_client_sco_close, -/* BTA_HF_CLIENT_SCO_SHUTDOWN */ bta_hf_client_sco_shutdown, -/* BTA_HF_CLIENT_FREE_DB */ bta_hf_client_free_db, -/* BTA_HF_CLIENT_OPEN_FAIL */ bta_hf_client_open_fail, -/* BTA_HF_CLIENT_RFC_OPEN */ bta_hf_client_rfc_open, -/* BTA_HF_CLIENT_RFC_FAIL */ bta_hf_client_rfc_fail, -/* BTA_HF_CLIENT_DISC_INT_RES */ bta_hf_client_disc_int_res, -/* BTA_HF_CLIENT_RFC_DO_OPEN */ bta_hf_client_rfc_do_open, -/* BTA_HF_CLIENT_DISC_FAIL */ bta_hf_client_disc_fail, -/* BTA_HF_CLIENT_RFC_CLOSE */ bta_hf_client_rfc_close, -/* BTA_HF_CLIENT_RFC_DATA */ bta_hf_client_rfc_data, -/* BTA_HF_CLIENT_DISC_ACP_RES */ bta_hf_client_disc_acp_res, -/* BTA_HF_CLIENT_SVC_CONN_OPEN */ bta_hf_client_svc_conn_open, -/* BTA_HF_CLIENT_SEND_AT_CMD */ bta_hf_client_send_at_cmd, +const tBTA_HF_CLIENT_ACTION bta_hf_client_action[] = { + /* BTA_HF_CLIENT_REGISTER */ bta_hf_client_register, + /* BTA_HF_CLIENT_DEREGISTER */ bta_hf_client_deregister, + /* BTA_HF_CLIENT_START_DEREG */ bta_hf_client_start_dereg, + /* BTA_HF_CLIENT_RFC_DO_CLOSE */ bta_hf_client_rfc_do_close, + /* BTA_HF_CLIENT_START_CLOSE */ bta_hf_client_start_close, + /* BTA_HF_CLIENT_START_OPEN */ bta_hf_client_start_open, + /* BTA_HF_CLIENT_RFC_ACP_OPEN */ bta_hf_client_rfc_acp_open, + /* BTA_HF_CLIENT_SCO_LISTEN */ bta_hf_client_sco_listen, + /* BTA_HF_CLIENT_SCO_CONN_OPEN */ bta_hf_client_sco_conn_open, + /* BTA_HF_CLIENT_SCO_CONN_CLOSE*/ bta_hf_client_sco_conn_close, + /* BTA_HF_CLIENT_SCO_OPEN */ bta_hf_client_sco_open, + /* BTA_HF_CLIENT_SCO_CLOSE */ bta_hf_client_sco_close, + /* BTA_HF_CLIENT_SCO_SHUTDOWN */ bta_hf_client_sco_shutdown, + /* BTA_HF_CLIENT_FREE_DB */ bta_hf_client_free_db, + /* BTA_HF_CLIENT_OPEN_FAIL */ bta_hf_client_open_fail, + /* BTA_HF_CLIENT_RFC_OPEN */ bta_hf_client_rfc_open, + /* BTA_HF_CLIENT_RFC_FAIL */ bta_hf_client_rfc_fail, + /* BTA_HF_CLIENT_DISC_INT_RES */ bta_hf_client_disc_int_res, + /* BTA_HF_CLIENT_RFC_DO_OPEN */ bta_hf_client_rfc_do_open, + /* BTA_HF_CLIENT_DISC_FAIL */ bta_hf_client_disc_fail, + /* BTA_HF_CLIENT_RFC_CLOSE */ bta_hf_client_rfc_close, + /* BTA_HF_CLIENT_RFC_DATA */ bta_hf_client_rfc_data, + /* BTA_HF_CLIENT_DISC_ACP_RES */ bta_hf_client_disc_acp_res, + /* BTA_HF_CLIENT_SVC_CONN_OPEN */ bta_hf_client_svc_conn_open, + /* BTA_HF_CLIENT_SEND_AT_CMD */ bta_hf_client_send_at_cmd, }; /* state table information */ -#define BTA_HF_CLIENT_ACTIONS 2 /* number of actions */ -#define BTA_HF_CLIENT_NEXT_STATE 2 /* position of next state */ -#define BTA_HF_CLIENT_NUM_COLS 3 /* number of columns in state tables */ +#define BTA_HF_CLIENT_ACTIONS 2 /* number of actions */ +#define BTA_HF_CLIENT_NEXT_STATE 2 /* position of next state */ +#define BTA_HF_CLIENT_NUM_COLS 3 /* number of columns in state tables */ /* state table for init state */ -const uint8_t bta_hf_client_st_init[][BTA_HF_CLIENT_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* API_REGISTER_EVT */ {BTA_HF_CLIENT_REGISTER, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_DEREGISTER, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* API_OPEN_EVT */ {BTA_HF_CLIENT_START_OPEN, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* API_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* RFC_OPEN_EVT */ {BTA_HF_CLIENT_RFC_ACP_OPEN, BTA_HF_CLIENT_SCO_LISTEN, BTA_HF_CLIENT_OPEN_ST}, -/* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, +const uint8_t bta_hf_client_st_init[][BTA_HF_CLIENT_NUM_COLS] = { + /* Event Action 1 Action 2 + Next state */ + /* API_REGISTER_EVT */ {BTA_HF_CLIENT_REGISTER, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_DEREGISTER, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* API_OPEN_EVT */ {BTA_HF_CLIENT_START_OPEN, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* API_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* RFC_OPEN_EVT */ {BTA_HF_CLIENT_RFC_ACP_OPEN, BTA_HF_CLIENT_SCO_LISTEN, + BTA_HF_CLIENT_OPEN_ST}, + /* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, }; /* state table for opening state */ -const uint8_t bta_hf_client_st_opening[][BTA_HF_CLIENT_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_RFC_DO_CLOSE, BTA_HF_CLIENT_START_DEREG, BTA_HF_CLIENT_CLOSING_ST}, -/* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* API_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_DO_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* RFC_OPEN_EVT */ {BTA_HF_CLIENT_RFC_OPEN, BTA_HF_CLIENT_SCO_LISTEN, BTA_HF_CLIENT_OPEN_ST}, -/* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_DISC_INT_RES, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* DISC_OK_EVT */ {BTA_HF_CLIENT_RFC_DO_OPEN, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* DISC_FAIL_EVT */ {BTA_HF_CLIENT_DISC_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, -/* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, +const uint8_t bta_hf_client_st_opening[][BTA_HF_CLIENT_NUM_COLS] = { + /* Event Action 1 Action 2 + Next state */ + /* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_RFC_DO_CLOSE, + BTA_HF_CLIENT_START_DEREG, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* API_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_DO_CLOSE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* RFC_OPEN_EVT */ {BTA_HF_CLIENT_RFC_OPEN, BTA_HF_CLIENT_SCO_LISTEN, + BTA_HF_CLIENT_OPEN_ST}, + /* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_FAIL, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_DISC_INT_RES, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* DISC_OK_EVT */ {BTA_HF_CLIENT_RFC_DO_OPEN, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* DISC_FAIL_EVT */ {BTA_HF_CLIENT_DISC_FAIL, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, + /* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPENING_ST}, }; /* state table for open state */ -const uint8_t bta_hf_client_st_open[][BTA_HF_CLIENT_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_START_CLOSE, BTA_HF_CLIENT_START_DEREG, BTA_HF_CLIENT_CLOSING_ST}, -/* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* API_CLOSE_EVT */ {BTA_HF_CLIENT_START_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_SCO_OPEN, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_SCO_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* RFC_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* RFC_DATA_EVT */ {BTA_HF_CLIENT_RFC_DATA, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_DISC_ACP_RES, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* SCO_OPEN_EVT */ {BTA_HF_CLIENT_SCO_CONN_OPEN, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_SCO_CONN_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, -/* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_SEND_AT_CMD, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, +const uint8_t bta_hf_client_st_open[][BTA_HF_CLIENT_NUM_COLS] = { + /* Event Action 1 Action 2 + Next state */ + /* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_START_CLOSE, + BTA_HF_CLIENT_START_DEREG, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* API_CLOSE_EVT */ {BTA_HF_CLIENT_START_CLOSE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_SCO_OPEN, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_SCO_CLOSE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* RFC_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_CLOSE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* RFC_DATA_EVT */ {BTA_HF_CLIENT_RFC_DATA, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_DISC_ACP_RES, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* SCO_OPEN_EVT */ {BTA_HF_CLIENT_SCO_CONN_OPEN, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_SCO_CONN_CLOSE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, + /* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_SEND_AT_CMD, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_OPEN_ST}, }; /* state table for closing state */ -const uint8_t bta_hf_client_st_closing[][BTA_HF_CLIENT_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next state */ -/* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_START_DEREG, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* API_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* RFC_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, -/* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, -/* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, +const uint8_t bta_hf_client_st_closing[][BTA_HF_CLIENT_NUM_COLS] = { + /* Event Action 1 Action 2 + Next state */ + /* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_START_DEREG, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* RFC_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_CLOSE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_INIT_ST}, + /* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, + /* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, + BTA_HF_CLIENT_CLOSING_ST}, }; /* type for state table */ typedef const uint8_t (*tBTA_HF_CLIENT_ST_TBL)[BTA_HF_CLIENT_NUM_COLS]; /* state table */ -const tBTA_HF_CLIENT_ST_TBL bta_hf_client_st_tbl[] = -{ - bta_hf_client_st_init, - bta_hf_client_st_opening, - bta_hf_client_st_open, - bta_hf_client_st_closing -}; +const tBTA_HF_CLIENT_ST_TBL bta_hf_client_st_tbl[] = { + bta_hf_client_st_init, bta_hf_client_st_opening, bta_hf_client_st_open, + bta_hf_client_st_closing}; /* HF Client control block */ -tBTA_HF_CLIENT_CB bta_hf_client_cb; +tBTA_HF_CLIENT_CB bta_hf_client_cb; /******************************************************************************* * @@ -239,18 +302,17 @@ tBTA_HF_CLIENT_CB bta_hf_client_cb; * Returns void * ******************************************************************************/ -void bta_hf_client_scb_init(void) -{ - APPL_TRACE_DEBUG("%s", __func__); - - alarm_free(bta_hf_client_cb.scb.collision_timer); - alarm_free(bta_hf_client_cb.scb.at_cb.resp_timer); - alarm_free(bta_hf_client_cb.scb.at_cb.hold_timer); - memset(&bta_hf_client_cb.scb, 0, sizeof(tBTA_HF_CLIENT_SCB)); - bta_hf_client_cb.scb.collision_timer = +void bta_hf_client_scb_init(void) { + APPL_TRACE_DEBUG("%s", __func__); + + alarm_free(bta_hf_client_cb.scb.collision_timer); + alarm_free(bta_hf_client_cb.scb.at_cb.resp_timer); + alarm_free(bta_hf_client_cb.scb.at_cb.hold_timer); + memset(&bta_hf_client_cb.scb, 0, sizeof(tBTA_HF_CLIENT_SCB)); + bta_hf_client_cb.scb.collision_timer = alarm_new("bta_hf_client.scb_collision_timer"); - bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; - bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; + bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; + bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; } /******************************************************************************* @@ -263,13 +325,12 @@ void bta_hf_client_scb_init(void) * Returns void * ******************************************************************************/ -void bta_hf_client_scb_disable(void) -{ - APPL_TRACE_DEBUG("%s", __func__); +void bta_hf_client_scb_disable(void) { + APPL_TRACE_DEBUG("%s", __func__); - bta_hf_client_scb_init(); + bta_hf_client_scb_init(); - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_DISABLE_EVT, NULL); + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_DISABLE_EVT, NULL); } /******************************************************************************* @@ -282,16 +343,14 @@ void bta_hf_client_scb_disable(void) * Returns void * ******************************************************************************/ -void bta_hf_client_resume_open (void) -{ - APPL_TRACE_DEBUG ("%s", __func__); - - /* resume opening process. */ - if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_INIT_ST) - { - bta_hf_client_cb.scb.state = BTA_HF_CLIENT_OPENING_ST; - bta_hf_client_start_open (NULL); - } +void bta_hf_client_resume_open(void) { + APPL_TRACE_DEBUG("%s", __func__); + + /* resume opening process. */ + if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_INIT_ST) { + bta_hf_client_cb.scb.state = BTA_HF_CLIENT_OPENING_ST; + bta_hf_client_start_open(NULL); + } } /******************************************************************************* @@ -304,12 +363,11 @@ void bta_hf_client_resume_open (void) * Returns void * ******************************************************************************/ -static void bta_hf_client_collision_timer_cback(UNUSED_ATTR void *data) -{ - APPL_TRACE_DEBUG("%s", __func__); +static void bta_hf_client_collision_timer_cback(UNUSED_ATTR void* data) { + APPL_TRACE_DEBUG("%s", __func__); - /* If the peer haven't opened connection, restart opening process */ - bta_hf_client_resume_open(); + /* If the peer haven't opened connection, restart opening process */ + bta_hf_client_resume_open(); } /******************************************************************************* @@ -322,45 +380,37 @@ static void bta_hf_client_collision_timer_cback(UNUSED_ATTR void *data) * Returns void * ******************************************************************************/ -void bta_hf_client_collision_cback (UNUSED_ATTR tBTA_SYS_CONN_STATUS status, uint8_t id, - UNUSED_ATTR uint8_t app_id, - UNUSED_ATTR BD_ADDR peer_addr) -{ - if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_OPENING_ST) +void bta_hf_client_collision_cback(UNUSED_ATTR tBTA_SYS_CONN_STATUS status, + uint8_t id, UNUSED_ATTR uint8_t app_id, + UNUSED_ATTR BD_ADDR peer_addr) { + if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_OPENING_ST) { + if (id == BTA_ID_SYS) /* ACL collision */ + { + APPL_TRACE_WARNING("HF Client found collision (ACL) ..."); + } else if (id == BTA_ID_HS) /* RFCOMM collision */ { - if (id == BTA_ID_SYS) /* ACL collision */ - { - APPL_TRACE_WARNING ("HF Client found collision (ACL) ..."); - } - else if (id == BTA_ID_HS) /* RFCOMM collision */ - { - APPL_TRACE_WARNING ("HF Client found collision (RFCOMM) ..."); - } - else - { - APPL_TRACE_WARNING ("HF Client found collision (\?\?\?) ..."); - } - - bta_hf_client_cb.scb.state = BTA_HF_CLIENT_INIT_ST; - - /* Cancel SDP if it had been started. */ - if(bta_hf_client_cb.scb.p_disc_db) - { - (void)SDP_CancelServiceSearch (bta_hf_client_cb.scb.p_disc_db); - bta_hf_client_free_db(NULL); - } - - /* reopen registered server */ - /* Collision may be detected before or after we close servers. */ - bta_hf_client_start_server(); - - /* Start timer to handle connection opening restart */ - alarm_set_on_queue(bta_hf_client_cb.scb.collision_timer, - BTA_HF_CLIENT_COLLISION_TIMER_MS, - bta_hf_client_collision_timer_cback, - NULL, - btu_bta_alarm_queue); + APPL_TRACE_WARNING("HF Client found collision (RFCOMM) ..."); + } else { + APPL_TRACE_WARNING("HF Client found collision (\?\?\?) ..."); + } + + bta_hf_client_cb.scb.state = BTA_HF_CLIENT_INIT_ST; + + /* Cancel SDP if it had been started. */ + if (bta_hf_client_cb.scb.p_disc_db) { + (void)SDP_CancelServiceSearch(bta_hf_client_cb.scb.p_disc_db); + bta_hf_client_free_db(NULL); } + + /* reopen registered server */ + /* Collision may be detected before or after we close servers. */ + bta_hf_client_start_server(); + + /* Start timer to handle connection opening restart */ + alarm_set_on_queue( + bta_hf_client_cb.scb.collision_timer, BTA_HF_CLIENT_COLLISION_TIMER_MS, + bta_hf_client_collision_timer_cback, NULL, btu_bta_alarm_queue); + } } /******************************************************************************* @@ -373,32 +423,30 @@ void bta_hf_client_collision_cback (UNUSED_ATTR tBTA_SYS_CONN_STATUS status, uin * Returns void * ******************************************************************************/ -static void bta_hf_client_api_enable(tBTA_HF_CLIENT_DATA *p_data) -{ - char value[PROPERTY_VALUE_MAX]; +static void bta_hf_client_api_enable(tBTA_HF_CLIENT_DATA* p_data) { + char value[PROPERTY_VALUE_MAX]; - /* initialize control block */ - memset(&bta_hf_client_cb, 0, sizeof(tBTA_HF_CLIENT_CB)); + /* initialize control block */ + memset(&bta_hf_client_cb, 0, sizeof(tBTA_HF_CLIENT_CB)); - /* store callback function */ - bta_hf_client_cb.p_cback = p_data->api_enable.p_cback; + /* store callback function */ + bta_hf_client_cb.p_cback = p_data->api_enable.p_cback; - /* check if mSBC support enabled */ - osi_property_get("ro.bluetooth.hfp.ver", value, "0"); - if (strcmp(value,"1.6") == 0) - { - bta_hf_client_cb.msbc_enabled = true; - } + /* check if mSBC support enabled */ + osi_property_get("ro.bluetooth.hfp.ver", value, "0"); + if (strcmp(value, "1.6") == 0) { + bta_hf_client_cb.msbc_enabled = true; + } - bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; + bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; - /* set same setting as AG does */ - BTM_WriteVoiceSettings(AG_VOICE_SETTINGS); + /* set same setting as AG does */ + BTM_WriteVoiceSettings(AG_VOICE_SETTINGS); - bta_sys_collision_register (BTA_ID_HS, bta_hf_client_collision_cback); + bta_sys_collision_register(BTA_ID_HS, bta_hf_client_collision_cback); - /* call callback with enable event */ - (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_ENABLE_EVT, NULL); + /* call callback with enable event */ + (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_ENABLE_EVT, NULL); } /******************************************************************************* @@ -411,20 +459,18 @@ static void bta_hf_client_api_enable(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_hf_client_api_disable(tBTA_HF_CLIENT_DATA *p_data) -{ - if (!bta_sys_is_register (BTA_ID_HS)) - { - APPL_TRACE_ERROR("BTA HF Client is already disabled, ignoring ..."); - return; - } +static void bta_hf_client_api_disable(tBTA_HF_CLIENT_DATA* p_data) { + if (!bta_sys_is_register(BTA_ID_HS)) { + APPL_TRACE_ERROR("BTA HF Client is already disabled, ignoring ..."); + return; + } - /* De-register with BTA system manager */ - bta_sys_deregister(BTA_ID_HS); + /* De-register with BTA system manager */ + bta_sys_deregister(BTA_ID_HS); - bta_hf_client_sm_execute(BTA_HF_CLIENT_API_DEREGISTER_EVT, p_data); + bta_hf_client_sm_execute(BTA_HF_CLIENT_API_DEREGISTER_EVT, p_data); - bta_sys_collision_register (BTA_ID_HS, NULL); + bta_sys_collision_register(BTA_ID_HS, NULL); } /******************************************************************************* @@ -437,29 +483,28 @@ static void bta_hf_client_api_disable(tBTA_HF_CLIENT_DATA *p_data) * Returns bool * ******************************************************************************/ -bool bta_hf_client_hdl_event(BT_HDR *p_msg) -{ +bool bta_hf_client_hdl_event(BT_HDR* p_msg) { #if (BTA_HF_CLIENT_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hf_client_hdl_event %s (0x%x)", bta_hf_client_evt_str(p_msg->event), p_msg->event); + APPL_TRACE_DEBUG("bta_hf_client_hdl_event %s (0x%x)", + bta_hf_client_evt_str(p_msg->event), p_msg->event); #endif - switch (p_msg->event) - { - /* handle enable event */ - case BTA_HF_CLIENT_API_ENABLE_EVT: - bta_hf_client_api_enable((tBTA_HF_CLIENT_DATA *) p_msg); - break; - - /* handle disable event */ - case BTA_HF_CLIENT_API_DISABLE_EVT: - bta_hf_client_api_disable((tBTA_HF_CLIENT_DATA *) p_msg); - break; - - default: - bta_hf_client_sm_execute(p_msg->event, (tBTA_HF_CLIENT_DATA *) p_msg); - break; - } - return true; + switch (p_msg->event) { + /* handle enable event */ + case BTA_HF_CLIENT_API_ENABLE_EVT: + bta_hf_client_api_enable((tBTA_HF_CLIENT_DATA*)p_msg); + break; + + /* handle disable event */ + case BTA_HF_CLIENT_API_DISABLE_EVT: + bta_hf_client_api_disable((tBTA_HF_CLIENT_DATA*)p_msg); + break; + + default: + bta_hf_client_sm_execute(p_msg->event, (tBTA_HF_CLIENT_DATA*)p_msg); + break; + } + return true; } /******************************************************************************* @@ -472,73 +517,66 @@ bool bta_hf_client_hdl_event(BT_HDR *p_msg) * Returns void * ******************************************************************************/ -void bta_hf_client_sm_execute(uint16_t event, tBTA_HF_CLIENT_DATA *p_data) -{ - tBTA_HF_CLIENT_ST_TBL state_table; - uint8_t action; - int i; +void bta_hf_client_sm_execute(uint16_t event, tBTA_HF_CLIENT_DATA* p_data) { + tBTA_HF_CLIENT_ST_TBL state_table; + uint8_t action; + int i; #if (BTA_HF_CLIENT_DEBUG == TRUE) - uint16_t in_event = event; - uint8_t in_state = bta_hf_client_cb.scb.state; - - /* Ignore displaying of AT results when not connected (Ignored in state machine) */ - if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_OPEN_ST) - { - APPL_TRACE_EVENT("HF Client evt : State %d (%s), Event 0x%04x (%s)", - bta_hf_client_cb.scb.state, - bta_hf_client_state_str(bta_hf_client_cb.scb.state), - event, bta_hf_client_evt_str(event)); - } + uint16_t in_event = event; + uint8_t in_state = bta_hf_client_cb.scb.state; + + /* Ignore displaying of AT results when not connected (Ignored in state + * machine) */ + if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_OPEN_ST) { + APPL_TRACE_EVENT("HF Client evt : State %d (%s), Event 0x%04x (%s)", + bta_hf_client_cb.scb.state, + bta_hf_client_state_str(bta_hf_client_cb.scb.state), event, + bta_hf_client_evt_str(event)); + } #endif - event &= 0x00FF; - if (event >= (BTA_HF_CLIENT_MAX_EVT & 0x00FF)) - { - APPL_TRACE_ERROR("HF Client evt out of range, ignoring..."); - return; - } + event &= 0x00FF; + if (event >= (BTA_HF_CLIENT_MAX_EVT & 0x00FF)) { + APPL_TRACE_ERROR("HF Client evt out of range, ignoring..."); + return; + } - /* look up the state table for the current state */ - state_table = bta_hf_client_st_tbl[bta_hf_client_cb.scb.state]; + /* look up the state table for the current state */ + state_table = bta_hf_client_st_tbl[bta_hf_client_cb.scb.state]; - /* set next state */ - bta_hf_client_cb.scb.state = state_table[event][BTA_HF_CLIENT_NEXT_STATE]; + /* set next state */ + bta_hf_client_cb.scb.state = state_table[event][BTA_HF_CLIENT_NEXT_STATE]; - /* execute action functions */ - for (i = 0; i < BTA_HF_CLIENT_ACTIONS; i++) - { - if ((action = state_table[event][i]) != BTA_HF_CLIENT_IGNORE) - { - (*bta_hf_client_action[action])(p_data); - } - else - { - break; - } + /* execute action functions */ + for (i = 0; i < BTA_HF_CLIENT_ACTIONS; i++) { + if ((action = state_table[event][i]) != BTA_HF_CLIENT_IGNORE) { + (*bta_hf_client_action[action])(p_data); + } else { + break; } + } #if (BTA_HF_CLIENT_DEBUG == TRUE) - if (bta_hf_client_cb.scb.state != in_state) - { - APPL_TRACE_EVENT("BTA HF Client State Change: [%s] -> [%s] after Event [%s]", - bta_hf_client_state_str(in_state), - bta_hf_client_state_str(bta_hf_client_cb.scb.state), - bta_hf_client_evt_str(in_event)); - } + if (bta_hf_client_cb.scb.state != in_state) { + APPL_TRACE_EVENT( + "BTA HF Client State Change: [%s] -> [%s] after Event [%s]", + bta_hf_client_state_str(in_state), + bta_hf_client_state_str(bta_hf_client_cb.scb.state), + bta_hf_client_evt_str(in_event)); + } #endif } -static void send_post_slc_cmd(void) -{ - bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; +static void send_post_slc_cmd(void) { + bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; - bta_hf_client_send_at_bia(); - bta_hf_client_send_at_ccwa(true); - bta_hf_client_send_at_cmee(true); - bta_hf_client_send_at_cops(false); - bta_hf_client_send_at_btrh(true, 0); - bta_hf_client_send_at_clip(true); + bta_hf_client_send_at_bia(); + bta_hf_client_send_at_ccwa(true); + bta_hf_client_send_at_cmee(true); + bta_hf_client_send_at_cops(false); + bta_hf_client_send_at_btrh(true, 0); + bta_hf_client_send_at_clip(true); } /******************************************************************************* @@ -551,89 +589,86 @@ static void send_post_slc_cmd(void) * Returns void * ******************************************************************************/ -void bta_hf_client_slc_seq(bool error) -{ - APPL_TRACE_DEBUG("bta_hf_client_slc_seq cmd: %u", bta_hf_client_cb.scb.at_cb.current_cmd); +void bta_hf_client_slc_seq(bool error) { + APPL_TRACE_DEBUG("bta_hf_client_slc_seq cmd: %u", + bta_hf_client_cb.scb.at_cb.current_cmd); - if (error) { - /* SLC establishment error, sent close rfcomm event */ - APPL_TRACE_ERROR("HFPClient: Failed to create SLC due to AT error, disconnecting (%u)", - bta_hf_client_cb.scb.at_cb.current_cmd); + if (error) { + /* SLC establishment error, sent close rfcomm event */ + APPL_TRACE_ERROR( + "HFPClient: Failed to create SLC due to AT error, disconnecting (%u)", + bta_hf_client_cb.scb.at_cb.current_cmd); - bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); - return; - } + bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); + return; + } - if (bta_hf_client_cb.scb.svc_conn) - return; + if (bta_hf_client_cb.scb.svc_conn) return; - switch (bta_hf_client_cb.scb.at_cb.current_cmd) - { + switch (bta_hf_client_cb.scb.at_cb.current_cmd) { case BTA_HF_CLIENT_AT_NONE: - bta_hf_client_send_at_brsf(); - break; + bta_hf_client_send_at_brsf(); + break; case BTA_HF_CLIENT_AT_BRSF: - if ((bta_hf_client_cb.scb.features & BTA_HF_CLIENT_FEAT_CODEC) - && (bta_hf_client_cb.scb.peer_features & BTA_HF_CLIENT_PEER_CODEC)) - { - bta_hf_client_send_at_bac(); - break; - } - - bta_hf_client_send_at_cind(false); + if ((bta_hf_client_cb.scb.features & BTA_HF_CLIENT_FEAT_CODEC) && + (bta_hf_client_cb.scb.peer_features & BTA_HF_CLIENT_PEER_CODEC)) { + bta_hf_client_send_at_bac(); break; + } + + bta_hf_client_send_at_cind(false); + break; case BTA_HF_CLIENT_AT_BAC: - bta_hf_client_send_at_cind(false); - break; + bta_hf_client_send_at_cind(false); + break; case BTA_HF_CLIENT_AT_CIND: - bta_hf_client_send_at_cind(true); - break; + bta_hf_client_send_at_cind(true); + break; case BTA_HF_CLIENT_AT_CIND_STATUS: - bta_hf_client_send_at_cmer(true); - break; + bta_hf_client_send_at_cmer(true); + break; case BTA_HF_CLIENT_AT_CMER: - if (bta_hf_client_cb.scb.peer_features & BTA_HF_CLIENT_PEER_FEAT_3WAY - && bta_hf_client_cb.scb.features & BTA_HF_CLIENT_FEAT_3WAY) - { - bta_hf_client_send_at_chld('?', 0); - } - else - { - bta_hf_client_svc_conn_open(NULL); - send_post_slc_cmd(); - } - break; - - case BTA_HF_CLIENT_AT_CHLD: + if (bta_hf_client_cb.scb.peer_features & BTA_HF_CLIENT_PEER_FEAT_3WAY && + bta_hf_client_cb.scb.features & BTA_HF_CLIENT_FEAT_3WAY) { + bta_hf_client_send_at_chld('?', 0); + } else { bta_hf_client_svc_conn_open(NULL); send_post_slc_cmd(); - break; + } + break; - default: - /* If happen there is a bug in SLC creation procedure... */ - APPL_TRACE_ERROR("HFPClient: Failed to create SLCdue to unexpected AT command, disconnecting (%u)", - bta_hf_client_cb.scb.at_cb.current_cmd); + case BTA_HF_CLIENT_AT_CHLD: + bta_hf_client_svc_conn_open(NULL); + send_post_slc_cmd(); + break; - bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); - break; - } + default: + /* If happen there is a bug in SLC creation procedure... */ + APPL_TRACE_ERROR( + "HFPClient: Failed to create SLCdue to unexpected AT command, " + "disconnecting (%u)", + bta_hf_client_cb.scb.at_cb.current_cmd); + + bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); + break; + } } #if (BTA_HF_CLIENT_DEBUG == TRUE) #ifndef CASE_RETURN_STR -#define CASE_RETURN_STR(const) case const: return #const; +#define CASE_RETURN_STR(const) \ + case const: \ + return #const; #endif -static char *bta_hf_client_evt_str(uint16_t event) -{ - switch (event) - { +static char* bta_hf_client_evt_str(uint16_t event) { + switch (event) { CASE_RETURN_STR(BTA_HF_CLIENT_API_REGISTER_EVT) CASE_RETURN_STR(BTA_HF_CLIENT_API_DEREGISTER_EVT) CASE_RETURN_STR(BTA_HF_CLIENT_API_OPEN_EVT) @@ -654,20 +689,18 @@ static char *bta_hf_client_evt_str(uint16_t event) CASE_RETURN_STR(BTA_HF_CLIENT_SCO_CLOSE_EVT) CASE_RETURN_STR(BTA_HF_CLIENT_SEND_AT_CMD_EVT) default: - return "Unknown HF Client Event"; - } + return "Unknown HF Client Event"; + } } -static char *bta_hf_client_state_str(uint8_t state) -{ - switch (state) - { +static char* bta_hf_client_state_str(uint8_t state) { + switch (state) { CASE_RETURN_STR(BTA_HF_CLIENT_INIT_ST) CASE_RETURN_STR(BTA_HF_CLIENT_OPENING_ST) CASE_RETURN_STR(BTA_HF_CLIENT_OPEN_ST) CASE_RETURN_STR(BTA_HF_CLIENT_CLOSING_ST) default: - return "Unknown HF Client State"; - } + return "Unknown HF Client State"; + } } #endif diff --git a/system/bta/hf_client/bta_hf_client_rfc.cc b/system/bta/hf_client/bta_hf_client_rfc.cc index 38e5d46861f..4961dd81ccc 100644 --- a/system/bta/hf_client/bta_hf_client_rfc.cc +++ b/system/bta/hf_client/bta_hf_client_rfc.cc @@ -26,11 +26,11 @@ #include +#include "bt_utils.h" #include "bta_api.h" #include "bta_hf_client_int.h" #include "osi/include/osi.h" #include "port_api.h" -#include "bt_utils.h" /******************************************************************************* * @@ -42,20 +42,20 @@ * Returns void * ******************************************************************************/ -static void bta_hf_client_port_cback(UNUSED_ATTR uint32_t code, uint16_t port_handle) -{ - /* ignore port events for port handles other than connected handle */ - if (port_handle != bta_hf_client_cb.scb.conn_handle) - { - APPL_TRACE_DEBUG("bta_hf_client_port_cback ignoring handle:%d conn_handle = %d", - port_handle, bta_hf_client_cb.scb.conn_handle); - return; - } - - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_HF_CLIENT_RFC_DATA_EVT; - - bta_sys_sendmsg(p_buf); +static void bta_hf_client_port_cback(UNUSED_ATTR uint32_t code, + uint16_t port_handle) { + /* ignore port events for port handles other than connected handle */ + if (port_handle != bta_hf_client_cb.scb.conn_handle) { + APPL_TRACE_DEBUG( + "bta_hf_client_port_cback ignoring handle:%d conn_handle = %d", + port_handle, bta_hf_client_cb.scb.conn_handle); + return; + } + + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->event = BTA_HF_CLIENT_RFC_DATA_EVT; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -68,49 +68,51 @@ static void bta_hf_client_port_cback(UNUSED_ATTR uint32_t code, uint16_t port_ha * Returns void * ******************************************************************************/ -static void bta_hf_client_mgmt_cback(uint32_t code, uint16_t port_handle) -{ - uint16_t event; - - APPL_TRACE_DEBUG("bta_hf_client_mgmt_cback : code = %d, port_handle = %d, conn_handle = %d, serv_handle = %d", - code, port_handle, bta_hf_client_cb.scb.conn_handle, bta_hf_client_cb.scb.serv_handle); - - /* ignore close event for port handles other than connected handle */ - if ((code != PORT_SUCCESS) && (port_handle != bta_hf_client_cb.scb.conn_handle)) - { - APPL_TRACE_DEBUG("bta_hf_client_mgmt_cback ignoring handle:%d", port_handle); - return; - } - - if (code == PORT_SUCCESS) - { - if ((bta_hf_client_cb.scb.conn_handle && (port_handle == bta_hf_client_cb.scb.conn_handle)) || /* outgoing connection */ - (port_handle == bta_hf_client_cb.scb.serv_handle)) /* incoming connection */ - { - event = BTA_HF_CLIENT_RFC_OPEN_EVT; - } - else - { - APPL_TRACE_ERROR ("bta_hf_client_mgmt_cback: PORT_SUCCESS, ignoring handle = %d", port_handle); - return; - } - } - /* distinguish server close events */ - else if (port_handle == bta_hf_client_cb.scb.conn_handle) - { - event = BTA_HF_CLIENT_RFC_CLOSE_EVT; - } - else +static void bta_hf_client_mgmt_cback(uint32_t code, uint16_t port_handle) { + uint16_t event; + + APPL_TRACE_DEBUG( + "bta_hf_client_mgmt_cback : code = %d, port_handle = %d, conn_handle = " + "%d, serv_handle = %d", + code, port_handle, bta_hf_client_cb.scb.conn_handle, + bta_hf_client_cb.scb.serv_handle); + + /* ignore close event for port handles other than connected handle */ + if ((code != PORT_SUCCESS) && + (port_handle != bta_hf_client_cb.scb.conn_handle)) { + APPL_TRACE_DEBUG("bta_hf_client_mgmt_cback ignoring handle:%d", + port_handle); + return; + } + + if (code == PORT_SUCCESS) { + if ((bta_hf_client_cb.scb.conn_handle && + (port_handle == + bta_hf_client_cb.scb.conn_handle)) || /* outgoing connection */ + (port_handle == + bta_hf_client_cb.scb.serv_handle)) /* incoming connection */ { - event = BTA_HF_CLIENT_RFC_SRV_CLOSE_EVT; + event = BTA_HF_CLIENT_RFC_OPEN_EVT; + } else { + APPL_TRACE_ERROR( + "bta_hf_client_mgmt_cback: PORT_SUCCESS, ignoring handle = %d", + port_handle); + return; } - - tBTA_HF_CLIENT_RFC *p_buf = - (tBTA_HF_CLIENT_RFC *)osi_malloc(sizeof(tBTA_HF_CLIENT_RFC)); - p_buf->hdr.event = event; - p_buf->port_handle = port_handle; - - bta_sys_sendmsg(p_buf); + } + /* distinguish server close events */ + else if (port_handle == bta_hf_client_cb.scb.conn_handle) { + event = BTA_HF_CLIENT_RFC_CLOSE_EVT; + } else { + event = BTA_HF_CLIENT_RFC_SRV_CLOSE_EVT; + } + + tBTA_HF_CLIENT_RFC* p_buf = + (tBTA_HF_CLIENT_RFC*)osi_malloc(sizeof(tBTA_HF_CLIENT_RFC)); + p_buf->hdr.event = event; + p_buf->port_handle = port_handle; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -123,10 +125,9 @@ static void bta_hf_client_mgmt_cback(uint32_t code, uint16_t port_handle) * Returns void * ******************************************************************************/ -void bta_hf_client_setup_port(uint16_t handle) -{ - PORT_SetEventMask(handle, PORT_EV_RXCHAR); - PORT_SetEventCallback(handle, bta_hf_client_port_cback); +void bta_hf_client_setup_port(uint16_t handle) { + PORT_SetEventMask(handle, PORT_EV_RXCHAR); + PORT_SetEventCallback(handle, bta_hf_client_port_cback); } /******************************************************************************* @@ -139,34 +140,35 @@ void bta_hf_client_setup_port(uint16_t handle) * Returns void * ******************************************************************************/ -void bta_hf_client_start_server(void) -{ - int port_status; - - if (bta_hf_client_cb.scb.serv_handle > 0) - { - APPL_TRACE_DEBUG("%s already started, handle: %d", __func__, bta_hf_client_cb.scb.serv_handle); - return; - } - - BTM_SetSecurityLevel(false, "", BTM_SEC_SERVICE_HF_HANDSFREE, bta_hf_client_cb.scb.serv_sec_mask, - BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, bta_hf_client_cb.scn); - - port_status = RFCOMM_CreateConnection(UUID_SERVCLASS_HF_HANDSFREE, bta_hf_client_cb.scn, - true, BTA_HF_CLIENT_MTU, (uint8_t *) bd_addr_any, &(bta_hf_client_cb.scb.serv_handle), - bta_hf_client_mgmt_cback); - - if (port_status == PORT_SUCCESS) - { - bta_hf_client_setup_port(bta_hf_client_cb.scb.serv_handle); - } - else - { - /* TODO: can we handle this better? */ - APPL_TRACE_DEBUG("bta_hf_client_start_server: RFCOMM_CreateConnection returned error:%d", port_status); - } - - APPL_TRACE_DEBUG("bta_hf_client_start_server handle: %d", bta_hf_client_cb.scb.serv_handle); +void bta_hf_client_start_server(void) { + int port_status; + + if (bta_hf_client_cb.scb.serv_handle > 0) { + APPL_TRACE_DEBUG("%s already started, handle: %d", __func__, + bta_hf_client_cb.scb.serv_handle); + return; + } + + BTM_SetSecurityLevel(false, "", BTM_SEC_SERVICE_HF_HANDSFREE, + bta_hf_client_cb.scb.serv_sec_mask, BT_PSM_RFCOMM, + BTM_SEC_PROTO_RFCOMM, bta_hf_client_cb.scn); + + port_status = RFCOMM_CreateConnection( + UUID_SERVCLASS_HF_HANDSFREE, bta_hf_client_cb.scn, true, + BTA_HF_CLIENT_MTU, (uint8_t*)bd_addr_any, + &(bta_hf_client_cb.scb.serv_handle), bta_hf_client_mgmt_cback); + + if (port_status == PORT_SUCCESS) { + bta_hf_client_setup_port(bta_hf_client_cb.scb.serv_handle); + } else { + /* TODO: can we handle this better? */ + APPL_TRACE_DEBUG( + "bta_hf_client_start_server: RFCOMM_CreateConnection returned error:%d", + port_status); + } + + APPL_TRACE_DEBUG("bta_hf_client_start_server handle: %d", + bta_hf_client_cb.scb.serv_handle); } /******************************************************************************* @@ -179,18 +181,16 @@ void bta_hf_client_start_server(void) * Returns void * ******************************************************************************/ -void bta_hf_client_close_server(void) -{ - APPL_TRACE_DEBUG("%s %d", __func__, bta_hf_client_cb.scb.serv_handle); +void bta_hf_client_close_server(void) { + APPL_TRACE_DEBUG("%s %d", __func__, bta_hf_client_cb.scb.serv_handle); - if (bta_hf_client_cb.scb.serv_handle == 0) - { - APPL_TRACE_DEBUG("%s already stopped", __func__); - return; - } + if (bta_hf_client_cb.scb.serv_handle == 0) { + APPL_TRACE_DEBUG("%s already stopped", __func__); + return; + } - RFCOMM_RemoveServer(bta_hf_client_cb.scb.serv_handle); - bta_hf_client_cb.scb.serv_handle = 0; + RFCOMM_RemoveServer(bta_hf_client_cb.scb.serv_handle); + bta_hf_client_cb.scb.serv_handle = 0; } /******************************************************************************* @@ -203,24 +203,24 @@ void bta_hf_client_close_server(void) * Returns void * ******************************************************************************/ -void bta_hf_client_rfc_do_open(tBTA_HF_CLIENT_DATA *p_data) -{ - BTM_SetSecurityLevel(true, "", BTM_SEC_SERVICE_HF_HANDSFREE, - bta_hf_client_cb.scb.cli_sec_mask, BT_PSM_RFCOMM, - BTM_SEC_PROTO_RFCOMM, bta_hf_client_cb.scb.peer_scn); - - if (RFCOMM_CreateConnection(UUID_SERVCLASS_HF_HANDSFREE, bta_hf_client_cb.scb.peer_scn, - false, BTA_HF_CLIENT_MTU, bta_hf_client_cb.scb.peer_addr, &(bta_hf_client_cb.scb.conn_handle), - bta_hf_client_mgmt_cback) == PORT_SUCCESS) - { - bta_hf_client_setup_port(bta_hf_client_cb.scb.conn_handle); - APPL_TRACE_DEBUG("bta_hf_client_rfc_do_open : conn_handle = %d", bta_hf_client_cb.scb.conn_handle); - } - /* RFCOMM create connection failed; send ourselves RFCOMM close event */ - else - { - bta_hf_client_sm_execute(BTA_HF_CLIENT_RFC_CLOSE_EVT, p_data); - } +void bta_hf_client_rfc_do_open(tBTA_HF_CLIENT_DATA* p_data) { + BTM_SetSecurityLevel(true, "", BTM_SEC_SERVICE_HF_HANDSFREE, + bta_hf_client_cb.scb.cli_sec_mask, BT_PSM_RFCOMM, + BTM_SEC_PROTO_RFCOMM, bta_hf_client_cb.scb.peer_scn); + + if (RFCOMM_CreateConnection(UUID_SERVCLASS_HF_HANDSFREE, + bta_hf_client_cb.scb.peer_scn, false, + BTA_HF_CLIENT_MTU, bta_hf_client_cb.scb.peer_addr, + &(bta_hf_client_cb.scb.conn_handle), + bta_hf_client_mgmt_cback) == PORT_SUCCESS) { + bta_hf_client_setup_port(bta_hf_client_cb.scb.conn_handle); + APPL_TRACE_DEBUG("bta_hf_client_rfc_do_open : conn_handle = %d", + bta_hf_client_cb.scb.conn_handle); + } + /* RFCOMM create connection failed; send ourselves RFCOMM close event */ + else { + bta_hf_client_sm_execute(BTA_HF_CLIENT_RFC_CLOSE_EVT, p_data); + } } /******************************************************************************* @@ -233,24 +233,22 @@ void bta_hf_client_rfc_do_open(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_rfc_do_close(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - if (bta_hf_client_cb.scb.conn_handle) { - RFCOMM_RemoveConnection(bta_hf_client_cb.scb.conn_handle); - } else { - /* Close API was called while HF Client is in Opening state. */ - /* Need to trigger the state machine to send callback to the app */ - /* and move back to INIT state. */ - tBTA_HF_CLIENT_RFC *p_buf = - (tBTA_HF_CLIENT_RFC *)osi_malloc(sizeof(tBTA_HF_CLIENT_RFC)); - p_buf->hdr.event = BTA_HF_CLIENT_RFC_CLOSE_EVT; - bta_sys_sendmsg(p_buf); +void bta_hf_client_rfc_do_close(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + if (bta_hf_client_cb.scb.conn_handle) { + RFCOMM_RemoveConnection(bta_hf_client_cb.scb.conn_handle); + } else { + /* Close API was called while HF Client is in Opening state. */ + /* Need to trigger the state machine to send callback to the app */ + /* and move back to INIT state. */ + tBTA_HF_CLIENT_RFC* p_buf = + (tBTA_HF_CLIENT_RFC*)osi_malloc(sizeof(tBTA_HF_CLIENT_RFC)); + p_buf->hdr.event = BTA_HF_CLIENT_RFC_CLOSE_EVT; + bta_sys_sendmsg(p_buf); - /* Cancel SDP if it had been started. */ - if(bta_hf_client_cb.scb.p_disc_db) - { - (void)SDP_CancelServiceSearch (bta_hf_client_cb.scb.p_disc_db); - bta_hf_client_free_db(NULL); - } + /* Cancel SDP if it had been started. */ + if (bta_hf_client_cb.scb.p_disc_db) { + (void)SDP_CancelServiceSearch(bta_hf_client_cb.scb.p_disc_db); + bta_hf_client_free_db(NULL); } + } } diff --git a/system/bta/hf_client/bta_hf_client_sco.cc b/system/bta/hf_client/bta_hf_client_sco.cc index f628681fe5f..05c1160c209 100644 --- a/system/bta/hf_client/bta_hf_client_sco.cc +++ b/system/bta/hf_client/bta_hf_client_sco.cc @@ -19,64 +19,59 @@ #include #include "bt_trace.h" -#include "bta_hf_client_int.h" #include "bt_utils.h" +#include "bta_hf_client_int.h" #include "osi/include/osi.h" -#define BTA_HF_CLIENT_NO_EDR_ESCO (BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | \ - BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | \ - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | \ - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5) +#define BTA_HF_CLIENT_NO_EDR_ESCO \ + (BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | \ + BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | BTM_SCO_PKT_TYPES_MASK_NO_3_EV5) static const tBTM_ESCO_PARAMS bta_hf_client_esco_params[] = { - /* SCO CVSD */ - { - .rx_bw = BTM_64KBITS_RATE, - .tx_bw = BTM_64KBITS_RATE, - .max_latency = 10, - .voice_contfmt = BTM_VOICE_SETTING_CVSD, - .packet_types = (BTM_SCO_LINK_ONLY_MASK | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), - .retrans_effort = BTM_ESCO_RETRANS_POWER, - }, - /* ESCO CVSD */ - { - .rx_bw = BTM_64KBITS_RATE, - .tx_bw = BTM_64KBITS_RATE, - .max_latency = 10, - .voice_contfmt = BTM_VOICE_SETTING_CVSD, - /* Allow controller to use all types available except 5-slot EDR */ - .packet_types = (BTM_SCO_LINK_ALL_PKT_MASK | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), - .retrans_effort = BTM_ESCO_RETRANS_POWER, - }, - /* ESCO mSBC */ - { - .rx_bw = BTM_64KBITS_RATE, - .tx_bw = BTM_64KBITS_RATE, - .max_latency = 13, - .voice_contfmt = BTM_VOICE_SETTING_TRANS, - /* Packet Types : EV3 + 2-EV3 */ - .packet_types = (BTM_SCO_PKT_TYPES_MASK_EV3 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | - BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | - BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), - .retrans_effort = BTM_ESCO_RETRANS_QUALITY, - } -}; - -enum -{ - BTA_HF_CLIENT_SCO_LISTEN_E, - BTA_HF_CLIENT_SCO_OPEN_E, /* open request */ - BTA_HF_CLIENT_SCO_CLOSE_E, /* close request */ - BTA_HF_CLIENT_SCO_SHUTDOWN_E, /* shutdown request */ - BTA_HF_CLIENT_SCO_CONN_OPEN_E, /* sco opened */ - BTA_HF_CLIENT_SCO_CONN_CLOSE_E, /* sco closed */ + /* SCO CVSD */ + { + .rx_bw = BTM_64KBITS_RATE, + .tx_bw = BTM_64KBITS_RATE, + .max_latency = 10, + .voice_contfmt = BTM_VOICE_SETTING_CVSD, + .packet_types = + (BTM_SCO_LINK_ONLY_MASK | BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), + .retrans_effort = BTM_ESCO_RETRANS_POWER, + }, + /* ESCO CVSD */ + { + .rx_bw = BTM_64KBITS_RATE, + .tx_bw = BTM_64KBITS_RATE, + .max_latency = 10, + .voice_contfmt = BTM_VOICE_SETTING_CVSD, + /* Allow controller to use all types available except 5-slot EDR */ + .packet_types = + (BTM_SCO_LINK_ALL_PKT_MASK | BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | + BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), + .retrans_effort = BTM_ESCO_RETRANS_POWER, + }, + /* ESCO mSBC */ + { + .rx_bw = BTM_64KBITS_RATE, + .tx_bw = BTM_64KBITS_RATE, + .max_latency = 13, + .voice_contfmt = BTM_VOICE_SETTING_TRANS, + /* Packet Types : EV3 + 2-EV3 */ + .packet_types = + (BTM_SCO_PKT_TYPES_MASK_EV3 | BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | + BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), + .retrans_effort = BTM_ESCO_RETRANS_QUALITY, + }}; + +enum { + BTA_HF_CLIENT_SCO_LISTEN_E, + BTA_HF_CLIENT_SCO_OPEN_E, /* open request */ + BTA_HF_CLIENT_SCO_CLOSE_E, /* close request */ + BTA_HF_CLIENT_SCO_SHUTDOWN_E, /* shutdown request */ + BTA_HF_CLIENT_SCO_CONN_OPEN_E, /* sco opened */ + BTA_HF_CLIENT_SCO_CONN_CLOSE_E, /* sco closed */ }; /******************************************************************************* @@ -84,35 +79,33 @@ enum * Function bta_hf_client_remove_sco * * Description Removes the specified SCO from the system. - * If only_active is true, then SCO is only removed if connected + * If only_active is true, then SCO is only removed if + *connected * * Returns bool - true if Sco removal was started * ******************************************************************************/ -static bool bta_hf_client_sco_remove(bool only_active) -{ - bool removed_started = false; - tBTM_STATUS status; +static bool bta_hf_client_sco_remove(bool only_active) { + bool removed_started = false; + tBTM_STATUS status; - APPL_TRACE_DEBUG("%s %d", __func__, only_active); + APPL_TRACE_DEBUG("%s %d", __func__, only_active); - if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) - { - status = BTM_RemoveSco(bta_hf_client_cb.scb.sco_idx); - - APPL_TRACE_DEBUG("%s idx 0x%04x, status:0x%x", __func__, bta_hf_client_cb.scb.sco_idx, status); - - if (status == BTM_CMD_STARTED) - { - removed_started = true; - } - /* If no connection reset the sco handle */ - else if ( (status == BTM_SUCCESS) || (status == BTM_UNKNOWN_ADDR) ) - { - bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; - } + if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) { + status = BTM_RemoveSco(bta_hf_client_cb.scb.sco_idx); + + APPL_TRACE_DEBUG("%s idx 0x%04x, status:0x%x", __func__, + bta_hf_client_cb.scb.sco_idx, status); + + if (status == BTM_CMD_STARTED) { + removed_started = true; } - return removed_started; + /* If no connection reset the sco handle */ + else if ((status == BTM_SUCCESS) || (status == BTM_UNKNOWN_ADDR)) { + bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; + } + } + return removed_started; } /******************************************************************************* @@ -125,14 +118,13 @@ static bool bta_hf_client_sco_remove(bool only_active) * Returns void * ******************************************************************************/ -void bta_hf_client_cback_sco(uint8_t event) -{ - tBTA_HF_CLIENT evt; +void bta_hf_client_cback_sco(uint8_t event) { + tBTA_HF_CLIENT evt; - memset(&evt, 0, sizeof(evt)); + memset(&evt, 0, sizeof(evt)); - /* call app cback */ - (*bta_hf_client_cb.p_cback)(event, (tBTA_HF_CLIENT *) &evt); + /* call app cback */ + (*bta_hf_client_cb.p_cback)(event, (tBTA_HF_CLIENT*)&evt); } /******************************************************************************* @@ -145,33 +137,26 @@ void bta_hf_client_cback_sco(uint8_t event) * Returns void * ******************************************************************************/ -static void bta_hf_client_sco_conn_rsp(tBTM_ESCO_CONN_REQ_EVT_DATA *p_data) -{ - tBTM_ESCO_PARAMS resp; - uint8_t hci_status = HCI_SUCCESS; +static void bta_hf_client_sco_conn_rsp(tBTM_ESCO_CONN_REQ_EVT_DATA* p_data) { + tBTM_ESCO_PARAMS resp; + uint8_t hci_status = HCI_SUCCESS; - APPL_TRACE_DEBUG("%s", __func__); + APPL_TRACE_DEBUG("%s", __func__); - if (bta_hf_client_cb.scb.sco_state == BTA_HF_CLIENT_SCO_LISTEN_ST) - { - if (p_data->link_type == BTM_LINK_TYPE_SCO) - { - resp = bta_hf_client_esco_params[0]; - } - else - { - resp = bta_hf_client_esco_params[bta_hf_client_cb.scb.negotiated_codec]; - } - - /* tell sys to stop av if any */ - bta_sys_sco_use(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); - } - else - { - hci_status = HCI_ERR_HOST_REJECT_DEVICE; + if (bta_hf_client_cb.scb.sco_state == BTA_HF_CLIENT_SCO_LISTEN_ST) { + if (p_data->link_type == BTM_LINK_TYPE_SCO) { + resp = bta_hf_client_esco_params[0]; + } else { + resp = bta_hf_client_esco_params[bta_hf_client_cb.scb.negotiated_codec]; } - BTM_EScoConnRsp(p_data->sco_inx, hci_status, &resp); + /* tell sys to stop av if any */ + bta_sys_sco_use(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); + } else { + hci_status = HCI_ERR_HOST_REJECT_DEVICE; + } + + BTM_EScoConnRsp(p_data->sco_inx, hci_status, &resp); } /******************************************************************************* @@ -184,23 +169,22 @@ static void bta_hf_client_sco_conn_rsp(tBTM_ESCO_CONN_REQ_EVT_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_hf_client_esco_connreq_cback(tBTM_ESCO_EVT event, tBTM_ESCO_EVT_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s %d", __func__, event); +static void bta_hf_client_esco_connreq_cback(tBTM_ESCO_EVT event, + tBTM_ESCO_EVT_DATA* p_data) { + APPL_TRACE_DEBUG("%s %d", __func__, event); - if (event != BTM_ESCO_CONN_REQ_EVT) - { - return; - } + if (event != BTM_ESCO_CONN_REQ_EVT) { + return; + } - /* TODO check remote bdaddr, should allow connect only from device with - * active SLC */ + /* TODO check remote bdaddr, should allow connect only from device with + * active SLC */ - bta_hf_client_cb.scb.sco_idx = p_data->conn_evt.sco_inx; + bta_hf_client_cb.scb.sco_idx = p_data->conn_evt.sco_inx; - bta_hf_client_sco_conn_rsp(&p_data->conn_evt); + bta_hf_client_sco_conn_rsp(&p_data->conn_evt); - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; } /******************************************************************************* @@ -213,28 +197,26 @@ static void bta_hf_client_esco_connreq_cback(tBTM_ESCO_EVT event, tBTM_ESCO_EVT_ * Returns void * ******************************************************************************/ -static void bta_hf_client_sco_conn_cback(uint16_t sco_idx) -{ - uint8_t *rem_bd; - - APPL_TRACE_DEBUG("%s %d", __func__, sco_idx); - - rem_bd = BTM_ReadScoBdAddr(sco_idx); - - if (rem_bd && bdcmp(bta_hf_client_cb.scb.peer_addr, rem_bd) == 0 && - bta_hf_client_cb.scb.svc_conn && bta_hf_client_cb.scb.sco_idx == sco_idx) - { - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_HF_CLIENT_SCO_OPEN_EVT; - p_buf->layer_specific = bta_hf_client_cb.scb.conn_handle; - bta_sys_sendmsg(p_buf); - } - /* no match found; disconnect sco, init sco variables */ - else - { - /* should not force the sco state to shutdown state here */ - BTM_RemoveSco(sco_idx); - } +static void bta_hf_client_sco_conn_cback(uint16_t sco_idx) { + uint8_t* rem_bd; + + APPL_TRACE_DEBUG("%s %d", __func__, sco_idx); + + rem_bd = BTM_ReadScoBdAddr(sco_idx); + + if (rem_bd && bdcmp(bta_hf_client_cb.scb.peer_addr, rem_bd) == 0 && + bta_hf_client_cb.scb.svc_conn && + bta_hf_client_cb.scb.sco_idx == sco_idx) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->event = BTA_HF_CLIENT_SCO_OPEN_EVT; + p_buf->layer_specific = bta_hf_client_cb.scb.conn_handle; + bta_sys_sendmsg(p_buf); + } + /* no match found; disconnect sco, init sco variables */ + else { + /* should not force the sco state to shutdown state here */ + BTM_RemoveSco(sco_idx); + } } /******************************************************************************* @@ -247,16 +229,16 @@ static void bta_hf_client_sco_conn_cback(uint16_t sco_idx) * Returns void * ******************************************************************************/ -static void bta_hf_client_sco_disc_cback(uint16_t sco_idx) -{ - APPL_TRACE_DEBUG("%s %d", __func__, sco_idx); - - if (bta_hf_client_cb.scb.sco_idx == sco_idx) { - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_HF_CLIENT_SCO_CLOSE_EVT; - p_buf->layer_specific = bta_hf_client_cb.scb.conn_handle;; - bta_sys_sendmsg(p_buf); - } +static void bta_hf_client_sco_disc_cback(uint16_t sco_idx) { + APPL_TRACE_DEBUG("%s %d", __func__, sco_idx); + + if (bta_hf_client_cb.scb.sco_idx == sco_idx) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->event = BTA_HF_CLIENT_SCO_CLOSE_EVT; + p_buf->layer_specific = bta_hf_client_cb.scb.conn_handle; + ; + bta_sys_sendmsg(p_buf); + } } /******************************************************************************* @@ -269,73 +251,66 @@ static void bta_hf_client_sco_disc_cback(uint16_t sco_idx) * Returns void * ******************************************************************************/ -static void bta_hf_client_sco_create(bool is_orig) -{ - tBTM_STATUS status; - uint8_t *p_bd_addr = NULL; - tBTM_ESCO_PARAMS params; - - APPL_TRACE_DEBUG("%s %d", __func__, is_orig); - - /* Make sure this sco handle is not already in use */ - if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) - { - APPL_TRACE_WARNING("%s: Index 0x%04x already in use", __func__, - bta_hf_client_cb.scb.sco_idx); - return; - } - - params = bta_hf_client_esco_params[1]; - - /* if initiating set current scb and peer bd addr */ - if (is_orig) - { - /* Attempt to use eSCO if remote host supports HFP >= 1.5 */ - if (bta_hf_client_cb.scb.peer_version >= HFP_VERSION_1_5 && !bta_hf_client_cb.scb.retry_with_sco_only) - { - BTM_SetEScoMode(BTM_LINK_TYPE_ESCO, ¶ms); - /* If ESCO or EDR ESCO, retry with SCO only in case of failure */ - if((params.packet_types & BTM_ESCO_LINK_ONLY_MASK) - ||!((params.packet_types & ~(BTM_ESCO_LINK_ONLY_MASK | BTM_SCO_LINK_ONLY_MASK)) ^ BTA_HF_CLIENT_NO_EDR_ESCO)) - { - bta_hf_client_cb.scb.retry_with_sco_only = true; - APPL_TRACE_API("Setting retry_with_sco_only to true"); - } - } - else - { - if(bta_hf_client_cb.scb.retry_with_sco_only) - APPL_TRACE_API("retrying with SCO only"); - bta_hf_client_cb.scb.retry_with_sco_only = false; - - BTM_SetEScoMode(BTM_LINK_TYPE_SCO, ¶ms); - } - - /* tell sys to stop av if any */ - bta_sys_sco_use(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); - } - else - { - bta_hf_client_cb.scb.retry_with_sco_only = false; - } - - p_bd_addr = bta_hf_client_cb.scb.peer_addr; - - status = BTM_CreateSco(p_bd_addr, is_orig, params.packet_types, - &bta_hf_client_cb.scb.sco_idx, bta_hf_client_sco_conn_cback, - bta_hf_client_sco_disc_cback); - if (status == BTM_CMD_STARTED && !is_orig) - { - if(!BTM_RegForEScoEvts(bta_hf_client_cb.scb.sco_idx, bta_hf_client_esco_connreq_cback)) - APPL_TRACE_DEBUG("%s SCO registration success", __func__); +static void bta_hf_client_sco_create(bool is_orig) { + tBTM_STATUS status; + uint8_t* p_bd_addr = NULL; + tBTM_ESCO_PARAMS params; + + APPL_TRACE_DEBUG("%s %d", __func__, is_orig); + + /* Make sure this sco handle is not already in use */ + if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) { + APPL_TRACE_WARNING("%s: Index 0x%04x already in use", __func__, + bta_hf_client_cb.scb.sco_idx); + return; + } + + params = bta_hf_client_esco_params[1]; + + /* if initiating set current scb and peer bd addr */ + if (is_orig) { + /* Attempt to use eSCO if remote host supports HFP >= 1.5 */ + if (bta_hf_client_cb.scb.peer_version >= HFP_VERSION_1_5 && + !bta_hf_client_cb.scb.retry_with_sco_only) { + BTM_SetEScoMode(BTM_LINK_TYPE_ESCO, ¶ms); + /* If ESCO or EDR ESCO, retry with SCO only in case of failure */ + if ((params.packet_types & BTM_ESCO_LINK_ONLY_MASK) || + !((params.packet_types & + ~(BTM_ESCO_LINK_ONLY_MASK | BTM_SCO_LINK_ONLY_MASK)) ^ + BTA_HF_CLIENT_NO_EDR_ESCO)) { + bta_hf_client_cb.scb.retry_with_sco_only = true; + APPL_TRACE_API("Setting retry_with_sco_only to true"); + } + } else { + if (bta_hf_client_cb.scb.retry_with_sco_only) + APPL_TRACE_API("retrying with SCO only"); + bta_hf_client_cb.scb.retry_with_sco_only = false; + + BTM_SetEScoMode(BTM_LINK_TYPE_SCO, ¶ms); } - APPL_TRACE_API("%s: orig %d, inx 0x%04x, status 0x%x, pkt types 0x%04x", - __func__, is_orig, bta_hf_client_cb.scb.sco_idx, - status, params.packet_types); + /* tell sys to stop av if any */ + bta_sys_sco_use(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); + } else { + bta_hf_client_cb.scb.retry_with_sco_only = false; + } + + p_bd_addr = bta_hf_client_cb.scb.peer_addr; + + status = BTM_CreateSco( + p_bd_addr, is_orig, params.packet_types, &bta_hf_client_cb.scb.sco_idx, + bta_hf_client_sco_conn_cback, bta_hf_client_sco_disc_cback); + if (status == BTM_CMD_STARTED && !is_orig) { + if (!BTM_RegForEScoEvts(bta_hf_client_cb.scb.sco_idx, + bta_hf_client_esco_connreq_cback)) + APPL_TRACE_DEBUG("%s SCO registration success", __func__); + } + + APPL_TRACE_API("%s: orig %d, inx 0x%04x, status 0x%x, pkt types 0x%04x", + __func__, is_orig, bta_hf_client_cb.scb.sco_idx, status, + params.packet_types); } - /******************************************************************************* * * Function bta_hf_client_sco_event @@ -346,229 +321,228 @@ static void bta_hf_client_sco_create(bool is_orig) * Returns void * ******************************************************************************/ -static void bta_hf_client_sco_event(uint8_t event) -{ - APPL_TRACE_DEBUG("%s state: %d event: %d", __func__, - bta_hf_client_cb.scb.sco_state, event); +static void bta_hf_client_sco_event(uint8_t event) { + APPL_TRACE_DEBUG("%s state: %d event: %d", __func__, + bta_hf_client_cb.scb.sco_state, event); + + switch (bta_hf_client_cb.scb.sco_state) { + case BTA_HF_CLIENT_SCO_SHUTDOWN_ST: + switch (event) { + case BTA_HF_CLIENT_SCO_LISTEN_E: + /* create sco listen connection */ + bta_hf_client_sco_create(false); + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; + break; - switch (bta_hf_client_cb.scb.sco_state) - { - case BTA_HF_CLIENT_SCO_SHUTDOWN_ST: - switch (event) - { - case BTA_HF_CLIENT_SCO_LISTEN_E: - /* create sco listen connection */ - bta_hf_client_sco_create(false); - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_SHUTDOWN_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_HF_CLIENT_SCO_LISTEN_ST: - switch (event) - { - case BTA_HF_CLIENT_SCO_LISTEN_E: - /* create sco listen connection (Additional channel) */ - bta_hf_client_sco_create(false); - break; - - case BTA_HF_CLIENT_SCO_OPEN_E: - /* remove listening connection */ - bta_hf_client_sco_remove(false); - - /* create sco connection to peer */ - bta_hf_client_sco_create(true); - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; - break; - - case BTA_HF_CLIENT_SCO_SHUTDOWN_E: - /* remove listening connection */ - bta_hf_client_sco_remove(false); - - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; - break; - - case BTA_HF_CLIENT_SCO_CLOSE_E: - /* remove listening connection */ - /* Ignore the event. We need to keep listening SCO for the active SLC */ - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_LISTEN_ST: Ignoring event %d", event); - break; - - case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: - /* sco failed; create sco listen connection */ - bta_hf_client_sco_create(false); - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_LISTEN_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_HF_CLIENT_SCO_OPENING_ST: - switch (event) - { - case BTA_HF_CLIENT_SCO_CLOSE_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPEN_CL_ST; - break; - - case BTA_HF_CLIENT_SCO_SHUTDOWN_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; - break; - - case BTA_HF_CLIENT_SCO_CONN_OPEN_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPEN_ST; - break; - - case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: - /* sco failed; create sco listen connection */ - bta_hf_client_sco_create(false); - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPENING_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_HF_CLIENT_SCO_OPEN_CL_ST: - switch (event) - { - case BTA_HF_CLIENT_SCO_OPEN_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; - break; - - case BTA_HF_CLIENT_SCO_SHUTDOWN_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; - break; - - case BTA_HF_CLIENT_SCO_CONN_OPEN_E: - /* close sco connection */ - bta_hf_client_sco_remove(true); - - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; - break; - - case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: - /* sco failed; create sco listen connection */ - - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPEN_CL_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_HF_CLIENT_SCO_OPEN_ST: - switch (event) - { - case BTA_HF_CLIENT_SCO_CLOSE_E: - /* close sco connection if active */ - if (bta_hf_client_sco_remove(true)) - { - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; - } - break; - - case BTA_HF_CLIENT_SCO_SHUTDOWN_E: - /* remove all listening connections */ - bta_hf_client_sco_remove(false); - - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; - break; - - case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: - /* peer closed sco; create sco listen connection */ - bta_hf_client_sco_create(false); - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPEN_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_HF_CLIENT_SCO_CLOSING_ST: - switch (event) - { - case BTA_HF_CLIENT_SCO_OPEN_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSE_OP_ST; - break; - - case BTA_HF_CLIENT_SCO_SHUTDOWN_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; - break; - - case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: - /* peer closed sco; create sco listen connection */ - bta_hf_client_sco_create(false); - - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_CLOSING_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_HF_CLIENT_SCO_CLOSE_OP_ST: - switch (event) - { - case BTA_HF_CLIENT_SCO_CLOSE_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; - break; - - case BTA_HF_CLIENT_SCO_SHUTDOWN_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; - break; - - case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: - /* open sco connection */ - bta_hf_client_sco_create(true); - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_CLOSE_OP_ST: Ignoring event %d", event); - break; - } - break; - - case BTA_HF_CLIENT_SCO_SHUTTING_ST: - switch (event) - { - case BTA_HF_CLIENT_SCO_CONN_OPEN_E: - /* close sco connection; wait for conn close event */ - bta_hf_client_sco_remove(true); - break; - - case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; - break; - - case BTA_HF_CLIENT_SCO_SHUTDOWN_E: - bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; - break; - - default: - APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_SHUTTING_ST: Ignoring event %d", event); - break; - } - break; + default: + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_SHUTDOWN_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_HF_CLIENT_SCO_LISTEN_ST: + switch (event) { + case BTA_HF_CLIENT_SCO_LISTEN_E: + /* create sco listen connection (Additional channel) */ + bta_hf_client_sco_create(false); + break; + + case BTA_HF_CLIENT_SCO_OPEN_E: + /* remove listening connection */ + bta_hf_client_sco_remove(false); + + /* create sco connection to peer */ + bta_hf_client_sco_create(true); + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; + break; + + case BTA_HF_CLIENT_SCO_SHUTDOWN_E: + /* remove listening connection */ + bta_hf_client_sco_remove(false); + + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; + break; + + case BTA_HF_CLIENT_SCO_CLOSE_E: + /* remove listening connection */ + /* Ignore the event. We need to keep listening SCO for the active SLC + */ + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_LISTEN_ST: Ignoring event %d", + event); + break; + + case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: + /* sco failed; create sco listen connection */ + bta_hf_client_sco_create(false); + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; + break; default: - break; - } + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_LISTEN_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_HF_CLIENT_SCO_OPENING_ST: + switch (event) { + case BTA_HF_CLIENT_SCO_CLOSE_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPEN_CL_ST; + break; + + case BTA_HF_CLIENT_SCO_SHUTDOWN_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; + break; + + case BTA_HF_CLIENT_SCO_CONN_OPEN_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPEN_ST; + break; + + case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: + /* sco failed; create sco listen connection */ + bta_hf_client_sco_create(false); + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPENING_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_HF_CLIENT_SCO_OPEN_CL_ST: + switch (event) { + case BTA_HF_CLIENT_SCO_OPEN_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; + break; + + case BTA_HF_CLIENT_SCO_SHUTDOWN_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; + break; + + case BTA_HF_CLIENT_SCO_CONN_OPEN_E: + /* close sco connection */ + bta_hf_client_sco_remove(true); + + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; + break; + + case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: + /* sco failed; create sco listen connection */ + + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPEN_CL_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_HF_CLIENT_SCO_OPEN_ST: + switch (event) { + case BTA_HF_CLIENT_SCO_CLOSE_E: + /* close sco connection if active */ + if (bta_hf_client_sco_remove(true)) { + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; + } + break; + + case BTA_HF_CLIENT_SCO_SHUTDOWN_E: + /* remove all listening connections */ + bta_hf_client_sco_remove(false); + + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; + break; + + case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: + /* peer closed sco; create sco listen connection */ + bta_hf_client_sco_create(false); + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPEN_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_HF_CLIENT_SCO_CLOSING_ST: + switch (event) { + case BTA_HF_CLIENT_SCO_OPEN_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSE_OP_ST; + break; + + case BTA_HF_CLIENT_SCO_SHUTDOWN_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; + break; + + case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: + /* peer closed sco; create sco listen connection */ + bta_hf_client_sco_create(false); + + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_CLOSING_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_HF_CLIENT_SCO_CLOSE_OP_ST: + switch (event) { + case BTA_HF_CLIENT_SCO_CLOSE_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; + break; + + case BTA_HF_CLIENT_SCO_SHUTDOWN_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; + break; + + case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: + /* open sco connection */ + bta_hf_client_sco_create(true); + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_CLOSE_OP_ST: Ignoring event %d", + event); + break; + } + break; + + case BTA_HF_CLIENT_SCO_SHUTTING_ST: + switch (event) { + case BTA_HF_CLIENT_SCO_CONN_OPEN_E: + /* close sco connection; wait for conn close event */ + bta_hf_client_sco_remove(true); + break; + + case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; + break; + + case BTA_HF_CLIENT_SCO_SHUTDOWN_E: + bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; + break; + + default: + APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_SHUTTING_ST: Ignoring event %d", + event); + break; + } + break; + + default: + break; + } } /******************************************************************************* @@ -581,11 +555,10 @@ static void bta_hf_client_sco_event(uint8_t event) * Returns void * ******************************************************************************/ -void bta_hf_client_sco_listen(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s", __func__); +void bta_hf_client_sco_listen(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + APPL_TRACE_DEBUG("%s", __func__); - bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_LISTEN_E); + bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_LISTEN_E); } /******************************************************************************* @@ -598,11 +571,10 @@ void bta_hf_client_sco_listen(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_sco_shutdown(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s", __func__); +void bta_hf_client_sco_shutdown(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + APPL_TRACE_DEBUG("%s", __func__); - bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_SHUTDOWN_E); + bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_SHUTDOWN_E); } /******************************************************************************* @@ -615,24 +587,20 @@ void bta_hf_client_sco_shutdown(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_sco_conn_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s", __func__); +void bta_hf_client_sco_conn_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + APPL_TRACE_DEBUG("%s", __func__); - bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CONN_OPEN_E); + bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CONN_OPEN_E); - bta_sys_sco_open(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); + bta_sys_sco_open(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); - if (bta_hf_client_cb.scb.negotiated_codec == BTM_SCO_CODEC_MSBC) - { - bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT); - } - else - { - bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_OPEN_EVT); - } + if (bta_hf_client_cb.scb.negotiated_codec == BTM_SCO_CODEC_MSBC) { + bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT); + } else { + bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_OPEN_EVT); + } - bta_hf_client_cb.scb.retry_with_sco_only = false; + bta_hf_client_cb.scb.retry_with_sco_only = false; } /******************************************************************************* @@ -645,37 +613,33 @@ void bta_hf_client_sco_conn_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_sco_conn_close(tBTA_HF_CLIENT_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s", __func__); +void bta_hf_client_sco_conn_close(tBTA_HF_CLIENT_DATA* p_data) { + APPL_TRACE_DEBUG("%s", __func__); - /* clear current scb */ - bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; + /* clear current scb */ + bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; - /* retry_with_sco_only, will be set only when initiator - ** and HFClient is first trying to establish an eSCO connection */ - if (bta_hf_client_cb.scb.retry_with_sco_only && bta_hf_client_cb.scb.svc_conn) - { - bta_hf_client_sco_create(true); - } - else - { - bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CONN_CLOSE_E); + /* retry_with_sco_only, will be set only when initiator + ** and HFClient is first trying to establish an eSCO connection */ + if (bta_hf_client_cb.scb.retry_with_sco_only && + bta_hf_client_cb.scb.svc_conn) { + bta_hf_client_sco_create(true); + } else { + bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CONN_CLOSE_E); - bta_sys_sco_close(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); + bta_sys_sco_close(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); - bta_sys_sco_unuse(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); + bta_sys_sco_unuse(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); - /* call app callback */ - bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_CLOSE_EVT); + /* call app callback */ + bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_CLOSE_EVT); - if (bta_hf_client_cb.scb.sco_close_rfc == true) - { - bta_hf_client_cb.scb.sco_close_rfc = false; - bta_hf_client_rfc_do_close(p_data); - } + if (bta_hf_client_cb.scb.sco_close_rfc == true) { + bta_hf_client_cb.scb.sco_close_rfc = false; + bta_hf_client_rfc_do_close(p_data); } - bta_hf_client_cb.scb.retry_with_sco_only = false; + } + bta_hf_client_cb.scb.retry_with_sco_only = false; } /******************************************************************************* @@ -688,11 +652,10 @@ void bta_hf_client_sco_conn_close(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_sco_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s", __func__); +void bta_hf_client_sco_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + APPL_TRACE_DEBUG("%s", __func__); - bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_OPEN_E); + bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_OPEN_E); } /******************************************************************************* @@ -705,12 +668,10 @@ void bta_hf_client_sco_open(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_sco_close(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - APPL_TRACE_DEBUG("%s 0x%x", __func__, bta_hf_client_cb.scb.sco_idx); +void bta_hf_client_sco_close(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + APPL_TRACE_DEBUG("%s 0x%x", __func__, bta_hf_client_cb.scb.sco_idx); - if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) - { - bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CLOSE_E); - } + if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) { + bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CLOSE_E); + } } diff --git a/system/bta/hf_client/bta_hf_client_sdp.cc b/system/bta/hf_client/bta_hf_client_sdp.cc index 0837ba25b8f..b4e063cb512 100644 --- a/system/bta/hf_client/bta_hf_client_sdp.cc +++ b/system/bta/hf_client/bta_hf_client_sdp.cc @@ -26,18 +26,18 @@ #include -#include "bta_api.h" -#include "bta_sys.h" #include "bt_utils.h" +#include "bta_api.h" #include "bta_hf_client_api.h" #include "bta_hf_client_int.h" +#include "bta_sys.h" #include "osi/include/osi.h" /* Number of protocol elements in protocol element list. */ -#define BTA_HF_CLIENT_NUM_PROTO_ELEMS 2 +#define BTA_HF_CLIENT_NUM_PROTO_ELEMS 2 /* Number of elements in service class id list. */ -#define BTA_HF_CLIENT_NUM_SVC_ELEMS 2 +#define BTA_HF_CLIENT_NUM_SVC_ELEMS 2 /******************************************************************************* * @@ -49,24 +49,23 @@ * Returns void * ******************************************************************************/ -static void bta_hf_client_sdp_cback(uint16_t status) -{ - uint16_t event; - tBTA_HF_CLIENT_DISC_RESULT *p_buf = - (tBTA_HF_CLIENT_DISC_RESULT *)osi_malloc(sizeof(tBTA_HF_CLIENT_DISC_RESULT)); +static void bta_hf_client_sdp_cback(uint16_t status) { + uint16_t event; + tBTA_HF_CLIENT_DISC_RESULT* p_buf = (tBTA_HF_CLIENT_DISC_RESULT*)osi_malloc( + sizeof(tBTA_HF_CLIENT_DISC_RESULT)); - APPL_TRACE_DEBUG("bta_hf_client_sdp_cback status:0x%x", status); + APPL_TRACE_DEBUG("bta_hf_client_sdp_cback status:0x%x", status); - /* set event according to int/acp */ - if (bta_hf_client_cb.scb.role == BTA_HF_CLIENT_ACP) - event = BTA_HF_CLIENT_DISC_ACP_RES_EVT; - else - event = BTA_HF_CLIENT_DISC_INT_RES_EVT; + /* set event according to int/acp */ + if (bta_hf_client_cb.scb.role == BTA_HF_CLIENT_ACP) + event = BTA_HF_CLIENT_DISC_ACP_RES_EVT; + else + event = BTA_HF_CLIENT_DISC_INT_RES_EVT; - p_buf->hdr.event = event; - p_buf->status = status; + p_buf->hdr.event = event; + p_buf->status = status; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /****************************************************************************** @@ -82,75 +81,77 @@ static void bta_hf_client_sdp_cback(uint16_t status) * false if function execution failed. * *****************************************************************************/ -bool bta_hf_client_add_record(char *p_service_name, uint8_t scn, - tBTA_HF_CLIENT_FEAT features, uint32_t sdp_handle) -{ - tSDP_PROTOCOL_ELEM proto_elem_list[BTA_HF_CLIENT_NUM_PROTO_ELEMS]; - uint16_t svc_class_id_list[BTA_HF_CLIENT_NUM_SVC_ELEMS]; - uint16_t browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; - uint16_t version; - uint16_t profile_uuid; - bool result = true; - uint8_t buf[2]; - uint16_t sdp_features = 0; - - APPL_TRACE_DEBUG("bta_hf_client_add_record"); - - memset( proto_elem_list, 0 , BTA_HF_CLIENT_NUM_PROTO_ELEMS*sizeof(tSDP_PROTOCOL_ELEM)); - - /* add the protocol element sequence */ - proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; - proto_elem_list[0].num_params = 0; - proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_RFCOMM; - proto_elem_list[1].num_params = 1; - proto_elem_list[1].params[0] = scn; - result &= SDP_AddProtocolList(sdp_handle, BTA_HF_CLIENT_NUM_PROTO_ELEMS, proto_elem_list); - - /* add service class id list */ - svc_class_id_list[0] = UUID_SERVCLASS_HF_HANDSFREE; - svc_class_id_list[1] = UUID_SERVCLASS_GENERIC_AUDIO; - result &= SDP_AddServiceClassIdList(sdp_handle, BTA_HF_CLIENT_NUM_SVC_ELEMS, svc_class_id_list); - - /* add profile descriptor list */ - profile_uuid = UUID_SERVCLASS_HF_HANDSFREE; - version = HFP_VERSION_1_6; - - result &= SDP_AddProfileDescriptorList(sdp_handle, profile_uuid, version); - - /* add service name */ - if (p_service_name != NULL && p_service_name[0] != 0) - { - result &= SDP_AddAttribute(sdp_handle, ATTR_ID_SERVICE_NAME, TEXT_STR_DESC_TYPE, - (uint32_t)(strlen(p_service_name)+1), (uint8_t *) p_service_name); - } - - /* add features */ - if (features & BTA_HF_CLIENT_FEAT_ECNR) - sdp_features |= BTA_HF_CLIENT_FEAT_ECNR; - - if (features & BTA_HF_CLIENT_FEAT_3WAY) - sdp_features |= BTA_HF_CLIENT_FEAT_3WAY; - - if (features & BTA_HF_CLIENT_FEAT_CLI) - sdp_features |= BTA_HF_CLIENT_FEAT_CLI; - - if (features & BTA_HF_CLIENT_FEAT_VREC) - sdp_features |= BTA_HF_CLIENT_FEAT_VREC; - - if (features & BTA_HF_CLIENT_FEAT_VOL) - sdp_features |= BTA_HF_CLIENT_FEAT_VOL; - - /* Codec bit position is different in SDP (bit 5) and in BRSF (bit 7) */ - if (features & BTA_HF_CLIENT_FEAT_CODEC) - sdp_features |= 0x0020; - - UINT16_TO_BE_FIELD(buf, sdp_features); - result &= SDP_AddAttribute(sdp_handle, ATTR_ID_SUPPORTED_FEATURES, UINT_DESC_TYPE, 2, buf); - - /* add browse group list */ - result &= SDP_AddUuidSequence(sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, browse_list); - - return result; +bool bta_hf_client_add_record(char* p_service_name, uint8_t scn, + tBTA_HF_CLIENT_FEAT features, + uint32_t sdp_handle) { + tSDP_PROTOCOL_ELEM proto_elem_list[BTA_HF_CLIENT_NUM_PROTO_ELEMS]; + uint16_t svc_class_id_list[BTA_HF_CLIENT_NUM_SVC_ELEMS]; + uint16_t browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; + uint16_t version; + uint16_t profile_uuid; + bool result = true; + uint8_t buf[2]; + uint16_t sdp_features = 0; + + APPL_TRACE_DEBUG("bta_hf_client_add_record"); + + memset(proto_elem_list, 0, + BTA_HF_CLIENT_NUM_PROTO_ELEMS * sizeof(tSDP_PROTOCOL_ELEM)); + + /* add the protocol element sequence */ + proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; + proto_elem_list[0].num_params = 0; + proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_RFCOMM; + proto_elem_list[1].num_params = 1; + proto_elem_list[1].params[0] = scn; + result &= SDP_AddProtocolList(sdp_handle, BTA_HF_CLIENT_NUM_PROTO_ELEMS, + proto_elem_list); + + /* add service class id list */ + svc_class_id_list[0] = UUID_SERVCLASS_HF_HANDSFREE; + svc_class_id_list[1] = UUID_SERVCLASS_GENERIC_AUDIO; + result &= SDP_AddServiceClassIdList(sdp_handle, BTA_HF_CLIENT_NUM_SVC_ELEMS, + svc_class_id_list); + + /* add profile descriptor list */ + profile_uuid = UUID_SERVCLASS_HF_HANDSFREE; + version = HFP_VERSION_1_6; + + result &= SDP_AddProfileDescriptorList(sdp_handle, profile_uuid, version); + + /* add service name */ + if (p_service_name != NULL && p_service_name[0] != 0) { + result &= SDP_AddAttribute( + sdp_handle, ATTR_ID_SERVICE_NAME, TEXT_STR_DESC_TYPE, + (uint32_t)(strlen(p_service_name) + 1), (uint8_t*)p_service_name); + } + + /* add features */ + if (features & BTA_HF_CLIENT_FEAT_ECNR) + sdp_features |= BTA_HF_CLIENT_FEAT_ECNR; + + if (features & BTA_HF_CLIENT_FEAT_3WAY) + sdp_features |= BTA_HF_CLIENT_FEAT_3WAY; + + if (features & BTA_HF_CLIENT_FEAT_CLI) sdp_features |= BTA_HF_CLIENT_FEAT_CLI; + + if (features & BTA_HF_CLIENT_FEAT_VREC) + sdp_features |= BTA_HF_CLIENT_FEAT_VREC; + + if (features & BTA_HF_CLIENT_FEAT_VOL) sdp_features |= BTA_HF_CLIENT_FEAT_VOL; + + /* Codec bit position is different in SDP (bit 5) and in BRSF (bit 7) */ + if (features & BTA_HF_CLIENT_FEAT_CODEC) sdp_features |= 0x0020; + + UINT16_TO_BE_FIELD(buf, sdp_features); + result &= SDP_AddAttribute(sdp_handle, ATTR_ID_SUPPORTED_FEATURES, + UINT_DESC_TYPE, 2, buf); + + /* add browse group list */ + result &= SDP_AddUuidSequence(sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, + browse_list); + + return result; } /******************************************************************************* @@ -163,21 +164,17 @@ bool bta_hf_client_add_record(char *p_service_name, uint8_t scn, * Returns void * ******************************************************************************/ -void bta_hf_client_create_record(tBTA_HF_CLIENT_DATA *p_data) -{ - /* add sdp record if not already registered */ - if (bta_hf_client_cb.sdp_handle == 0) - { - bta_hf_client_cb.sdp_handle = SDP_CreateRecord(); - bta_hf_client_cb.scn = BTM_AllocateSCN(); - bta_hf_client_add_record(p_data->api_register.name, - bta_hf_client_cb.scn, - p_data->api_register.features, - bta_hf_client_cb.sdp_handle); - - bta_sys_add_uuid(UUID_SERVCLASS_HF_HANDSFREE); - } - +void bta_hf_client_create_record(tBTA_HF_CLIENT_DATA* p_data) { + /* add sdp record if not already registered */ + if (bta_hf_client_cb.sdp_handle == 0) { + bta_hf_client_cb.sdp_handle = SDP_CreateRecord(); + bta_hf_client_cb.scn = BTM_AllocateSCN(); + bta_hf_client_add_record(p_data->api_register.name, bta_hf_client_cb.scn, + p_data->api_register.features, + bta_hf_client_cb.sdp_handle); + + bta_sys_add_uuid(UUID_SERVCLASS_HF_HANDSFREE); + } } /******************************************************************************* @@ -190,18 +187,16 @@ void bta_hf_client_create_record(tBTA_HF_CLIENT_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hf_client_del_record(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - APPL_TRACE_DEBUG("bta_hf_client_del_record"); - - if (bta_hf_client_cb.sdp_handle != 0) - { - SDP_DeleteRecord(bta_hf_client_cb.sdp_handle); - bta_hf_client_cb.sdp_handle = 0; - BTM_FreeSCN(bta_hf_client_cb.scn); - BTM_SecClrService(BTM_SEC_SERVICE_HF_HANDSFREE); - bta_sys_remove_uuid(UUID_SERVCLASS_HF_HANDSFREE); - } +void bta_hf_client_del_record(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + APPL_TRACE_DEBUG("bta_hf_client_del_record"); + + if (bta_hf_client_cb.sdp_handle != 0) { + SDP_DeleteRecord(bta_hf_client_cb.sdp_handle); + bta_hf_client_cb.sdp_handle = 0; + BTM_FreeSCN(bta_hf_client_cb.scn); + BTM_SecClrService(BTM_SEC_SERVICE_HF_HANDSFREE); + bta_sys_remove_uuid(UUID_SERVCLASS_HF_HANDSFREE); + } } /******************************************************************************* @@ -214,78 +209,70 @@ void bta_hf_client_del_record(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) * Returns true if results found, false otherwise. * ******************************************************************************/ -bool bta_hf_client_sdp_find_attr(void) -{ - tSDP_DISC_REC *p_rec = NULL; - tSDP_DISC_ATTR *p_attr; - tSDP_PROTOCOL_ELEM pe; - bool result = false; - - bta_hf_client_cb.scb.peer_version = HFP_VERSION_1_1; /* Default version */ - - /* loop through all records we found */ - while (true) - { - /* get next record; if none found, we're done */ - if ((p_rec = SDP_FindServiceInDb(bta_hf_client_cb.scb.p_disc_db, UUID_SERVCLASS_AG_HANDSFREE, p_rec)) == NULL) - { - break; - } +bool bta_hf_client_sdp_find_attr(void) { + tSDP_DISC_REC* p_rec = NULL; + tSDP_DISC_ATTR* p_attr; + tSDP_PROTOCOL_ELEM pe; + bool result = false; + + bta_hf_client_cb.scb.peer_version = HFP_VERSION_1_1; /* Default version */ + + /* loop through all records we found */ + while (true) { + /* get next record; if none found, we're done */ + if ((p_rec = SDP_FindServiceInDb(bta_hf_client_cb.scb.p_disc_db, + UUID_SERVCLASS_AG_HANDSFREE, p_rec)) == + NULL) { + break; + } - /* get scn from proto desc list if initiator */ - if (bta_hf_client_cb.scb.role == BTA_HF_CLIENT_INT) - { - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - bta_hf_client_cb.scb.peer_scn = (uint8_t) pe.params[0]; - } - else - { - continue; - } - } + /* get scn from proto desc list if initiator */ + if (bta_hf_client_cb.scb.role == BTA_HF_CLIENT_INT) { + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + bta_hf_client_cb.scb.peer_scn = (uint8_t)pe.params[0]; + } else { + continue; + } + } - /* get profile version (if failure, version parameter is not updated) */ - SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_HF_HANDSFREE, &bta_hf_client_cb.scb.peer_version); - - /* get features */ - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES)) != NULL) - { - /* Found attribute. Get value. */ - /* There might be race condition between SDP and BRSF. */ - /* Do not update if we already received BRSF. */ - if (bta_hf_client_cb.scb.peer_features == 0) - { - bta_hf_client_cb.scb.peer_features = p_attr->attr_value.v.u16; - - /* SDP and BRSF WBS bit are different, correct it if set */ - if (bta_hf_client_cb.scb.peer_features & 0x0020) - { - bta_hf_client_cb.scb.peer_features &= ~0x0020; - bta_hf_client_cb.scb.peer_features |= BTA_HF_CLIENT_PEER_CODEC; - } - - /* get network for ability to reject calls */ - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_NETWORK)) != NULL) - { - if (p_attr->attr_value.v.u16 == 0x01) - { - bta_hf_client_cb.scb.peer_features |= BTA_HF_CLIENT_PEER_REJECT; - } - } - } + /* get profile version (if failure, version parameter is not updated) */ + SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_HF_HANDSFREE, + &bta_hf_client_cb.scb.peer_version); + + /* get features */ + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES)) != + NULL) { + /* Found attribute. Get value. */ + /* There might be race condition between SDP and BRSF. */ + /* Do not update if we already received BRSF. */ + if (bta_hf_client_cb.scb.peer_features == 0) { + bta_hf_client_cb.scb.peer_features = p_attr->attr_value.v.u16; + + /* SDP and BRSF WBS bit are different, correct it if set */ + if (bta_hf_client_cb.scb.peer_features & 0x0020) { + bta_hf_client_cb.scb.peer_features &= ~0x0020; + bta_hf_client_cb.scb.peer_features |= BTA_HF_CLIENT_PEER_CODEC; } - /* found what we needed */ - result = true; - break; + /* get network for ability to reject calls */ + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_NETWORK)) != NULL) { + if (p_attr->attr_value.v.u16 == 0x01) { + bta_hf_client_cb.scb.peer_features |= BTA_HF_CLIENT_PEER_REJECT; + } + } + } } - APPL_TRACE_DEBUG("%s peer_version=0x%x peer_features=0x%x", - __func__, bta_hf_client_cb.scb.peer_version, - bta_hf_client_cb.scb.peer_features); + /* found what we needed */ + result = true; + break; + } + + APPL_TRACE_DEBUG("%s peer_version=0x%x peer_features=0x%x", __func__, + bta_hf_client_cb.scb.peer_version, + bta_hf_client_cb.scb.peer_features); - return result; + return result; } /******************************************************************************* @@ -298,59 +285,55 @@ bool bta_hf_client_sdp_find_attr(void) * Returns void * ******************************************************************************/ -void bta_hf_client_do_disc(void) -{ - tSDP_UUID uuid_list[2]; - uint16_t num_uuid = 1; - uint16_t attr_list[4]; - uint8_t num_attr; - bool db_inited = false; - - /* initiator; get proto list and features */ - if (bta_hf_client_cb.scb.role == BTA_HF_CLIENT_INT) - { - attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; - attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; - attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; - attr_list[3] = ATTR_ID_SUPPORTED_FEATURES; - num_attr = 4; - uuid_list[0].uu.uuid16 = UUID_SERVCLASS_AG_HANDSFREE; - } - /* acceptor; get features */ - else - { - attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; - attr_list[1] = ATTR_ID_BT_PROFILE_DESC_LIST; - attr_list[2] = ATTR_ID_SUPPORTED_FEATURES; - num_attr = 3; - uuid_list[0].uu.uuid16 = UUID_SERVCLASS_AG_HANDSFREE; - } - - /* allocate buffer for sdp database */ - bta_hf_client_cb.scb.p_disc_db = (tSDP_DISCOVERY_DB *)osi_malloc(BT_DEFAULT_BUFFER_SIZE); - - /* set up service discovery database; attr happens to be attr_list len */ - uuid_list[0].len = LEN_UUID_16; - uuid_list[1].len = LEN_UUID_16; - db_inited = SDP_InitDiscoveryDb(bta_hf_client_cb.scb.p_disc_db, - BT_DEFAULT_BUFFER_SIZE, num_uuid, - uuid_list, num_attr, attr_list); - - if (db_inited) - { - /*Service discovery not initiated */ - db_inited = SDP_ServiceSearchAttributeRequest(bta_hf_client_cb.scb.peer_addr, - bta_hf_client_cb.scb.p_disc_db, bta_hf_client_sdp_cback); - } - - if (!db_inited) - { - /*free discover db */ - bta_hf_client_free_db(NULL); - /* sent failed event */ - bta_hf_client_sm_execute(BTA_HF_CLIENT_DISC_FAIL_EVT, NULL); - } - +void bta_hf_client_do_disc(void) { + tSDP_UUID uuid_list[2]; + uint16_t num_uuid = 1; + uint16_t attr_list[4]; + uint8_t num_attr; + bool db_inited = false; + + /* initiator; get proto list and features */ + if (bta_hf_client_cb.scb.role == BTA_HF_CLIENT_INT) { + attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; + attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; + attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; + attr_list[3] = ATTR_ID_SUPPORTED_FEATURES; + num_attr = 4; + uuid_list[0].uu.uuid16 = UUID_SERVCLASS_AG_HANDSFREE; + } + /* acceptor; get features */ + else { + attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; + attr_list[1] = ATTR_ID_BT_PROFILE_DESC_LIST; + attr_list[2] = ATTR_ID_SUPPORTED_FEATURES; + num_attr = 3; + uuid_list[0].uu.uuid16 = UUID_SERVCLASS_AG_HANDSFREE; + } + + /* allocate buffer for sdp database */ + bta_hf_client_cb.scb.p_disc_db = + (tSDP_DISCOVERY_DB*)osi_malloc(BT_DEFAULT_BUFFER_SIZE); + + /* set up service discovery database; attr happens to be attr_list len */ + uuid_list[0].len = LEN_UUID_16; + uuid_list[1].len = LEN_UUID_16; + db_inited = SDP_InitDiscoveryDb(bta_hf_client_cb.scb.p_disc_db, + BT_DEFAULT_BUFFER_SIZE, num_uuid, uuid_list, + num_attr, attr_list); + + if (db_inited) { + /*Service discovery not initiated */ + db_inited = SDP_ServiceSearchAttributeRequest( + bta_hf_client_cb.scb.peer_addr, bta_hf_client_cb.scb.p_disc_db, + bta_hf_client_sdp_cback); + } + + if (!db_inited) { + /*free discover db */ + bta_hf_client_free_db(NULL); + /* sent failed event */ + bta_hf_client_sm_execute(BTA_HF_CLIENT_DISC_FAIL_EVT, NULL); + } } /******************************************************************************* @@ -363,7 +346,6 @@ void bta_hf_client_do_disc(void) * Returns void * ******************************************************************************/ -void bta_hf_client_free_db(UNUSED_ATTR tBTA_HF_CLIENT_DATA *p_data) -{ - osi_free_and_reset((void **)&bta_hf_client_cb.scb.p_disc_db); +void bta_hf_client_free_db(UNUSED_ATTR tBTA_HF_CLIENT_DATA* p_data) { + osi_free_and_reset((void**)&bta_hf_client_cb.scb.p_disc_db); } diff --git a/system/bta/hh/bta_hh_act.cc b/system/bta/hh/bta_hh_act.cc index 503f095c725..3437ce301d3 100644 --- a/system/bta/hh/bta_hh_act.cc +++ b/system/bta/hh/bta_hh_act.cc @@ -28,11 +28,11 @@ #include +#include "bta_hh_co.h" +#include "bta_hh_int.h" #include "bta_sys.h" #include "btm_api.h" #include "l2c_api.h" -#include "bta_hh_int.h" -#include "bta_hh_co.h" #include "osi/include/osi.h" #include "utl.h" @@ -40,17 +40,16 @@ * Constants ****************************************************************************/ - /***************************************************************************** * Local Function prototypes ****************************************************************************/ -static void bta_hh_cback (uint8_t dev_handle, BD_ADDR addr, uint8_t event, - uint32_t data, BT_HDR *pdata); +static void bta_hh_cback(uint8_t dev_handle, BD_ADDR addr, uint8_t event, + uint32_t data, BT_HDR* pdata); static tBTA_HH_STATUS bta_hh_get_trans_status(uint32_t result); #if (BTA_HH_DEBUG == TRUE) static const char* bta_hh_get_w4_event(uint16_t event); -static const char * bta_hh_hid_event_name(uint16_t event); +static const char* bta_hh_hid_event_name(uint16_t event); #endif /***************************************************************************** @@ -66,47 +65,42 @@ static const char * bta_hh_hid_event_name(uint16_t event); * Returns void * ******************************************************************************/ -void bta_hh_api_enable(tBTA_HH_DATA *p_data) -{ - tBTA_HH_STATUS status = BTA_HH_ERR; - uint8_t xx; - - /* initialize BTE HID */ - HID_HostInit(); +void bta_hh_api_enable(tBTA_HH_DATA* p_data) { + tBTA_HH_STATUS status = BTA_HH_ERR; + uint8_t xx; - memset(&bta_hh_cb, 0, sizeof(tBTA_HH_CB)); + /* initialize BTE HID */ + HID_HostInit(); - HID_HostSetSecurityLevel("", p_data->api_enable.sec_mask); + memset(&bta_hh_cb, 0, sizeof(tBTA_HH_CB)); - /* Register with L2CAP */ - if ( HID_HostRegister (bta_hh_cback) == HID_SUCCESS) - { - /* store parameters */ - bta_hh_cb.p_cback = p_data->api_enable.p_cback; + HID_HostSetSecurityLevel("", p_data->api_enable.sec_mask); - status = BTA_HH_OK; - /* initialize device CB */ - for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx ++) - { - bta_hh_cb.kdev[xx].state = BTA_HH_IDLE_ST; - bta_hh_cb.kdev[xx].hid_handle = BTA_HH_INVALID_HANDLE; - bta_hh_cb.kdev[xx].index = xx; - } + /* Register with L2CAP */ + if (HID_HostRegister(bta_hh_cback) == HID_SUCCESS) { + /* store parameters */ + bta_hh_cb.p_cback = p_data->api_enable.p_cback; - /* initialize control block map */ - for (xx = 0; xx < BTA_HH_MAX_KNOWN; xx ++) - bta_hh_cb.cb_index[xx] = BTA_HH_IDX_INVALID; + status = BTA_HH_OK; + /* initialize device CB */ + for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) { + bta_hh_cb.kdev[xx].state = BTA_HH_IDLE_ST; + bta_hh_cb.kdev[xx].hid_handle = BTA_HH_INVALID_HANDLE; + bta_hh_cb.kdev[xx].index = xx; } + /* initialize control block map */ + for (xx = 0; xx < BTA_HH_MAX_KNOWN; xx++) + bta_hh_cb.cb_index[xx] = BTA_HH_IDX_INVALID; + } + #if (BTA_HH_LE_INCLUDED == TRUE) - if (status == BTA_HH_OK) - { - bta_hh_le_enable(); - } - else + if (status == BTA_HH_OK) { + bta_hh_le_enable(); + } else #endif - /* signal BTA call back event */ - (* bta_hh_cb.p_cback)(BTA_HH_ENABLE_EVT, (tBTA_HH *)&status); + /* signal BTA call back event */ + (*bta_hh_cb.p_cback)(BTA_HH_ENABLE_EVT, (tBTA_HH*)&status); } /******************************************************************************* * @@ -118,37 +112,29 @@ void bta_hh_api_enable(tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_api_disable(void) -{ - uint8_t xx; - - /* service is not enabled */ - if (bta_hh_cb.p_cback == NULL) - return; - - /* no live connection, signal DISC_CMPL_EVT directly */ - if (!bta_hh_cb.cnt_num) - { - bta_hh_disc_cmpl(); - } - else /* otherwise, disconnect all live connections */ - { - bta_hh_cb.w4_disable = true; - - for(xx = 0; xx < BTA_HH_MAX_DEVICE; xx ++) - { - /* send API_CLOSE event to every connected device */ - if ( bta_hh_cb.kdev[xx].state == BTA_HH_CONN_ST ) - { - /* disconnect all connected devices */ - bta_hh_sm_execute(&bta_hh_cb.kdev[xx], - BTA_HH_API_CLOSE_EVT, - NULL); - } - } +void bta_hh_api_disable(void) { + uint8_t xx; + + /* service is not enabled */ + if (bta_hh_cb.p_cback == NULL) return; + + /* no live connection, signal DISC_CMPL_EVT directly */ + if (!bta_hh_cb.cnt_num) { + bta_hh_disc_cmpl(); + } else /* otherwise, disconnect all live connections */ + { + bta_hh_cb.w4_disable = true; + + for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) { + /* send API_CLOSE event to every connected device */ + if (bta_hh_cb.kdev[xx].state == BTA_HH_CONN_ST) { + /* disconnect all connected devices */ + bta_hh_sm_execute(&bta_hh_cb.kdev[xx], BTA_HH_API_CLOSE_EVT, NULL); + } } + } - return; + return; } /******************************************************************************* @@ -161,19 +147,17 @@ void bta_hh_api_disable(void) * Returns void * ******************************************************************************/ -void bta_hh_disc_cmpl(void) -{ +void bta_hh_disc_cmpl(void) { #if (BTA_HH_LE_INCLUDED == TRUE) - HID_HostDeregister(); - bta_hh_le_deregister(); + HID_HostDeregister(); + bta_hh_le_deregister(); #else - tBTA_HH_STATUS status = BTA_HH_OK; + tBTA_HH_STATUS status = BTA_HH_OK; - /* Deregister with lower layer */ - if (HID_HostDeregister() != HID_SUCCESS) - status = BTA_HH_ERR; + /* Deregister with lower layer */ + if (HID_HostDeregister() != HID_SUCCESS) status = BTA_HH_ERR; - bta_hh_cleanup_disable(status); + bta_hh_cleanup_disable(status); #endif } @@ -187,76 +171,64 @@ void bta_hh_disc_cmpl(void) * ******************************************************************************/ static void bta_hh_sdp_cback(uint16_t result, uint16_t attr_mask, - tHID_DEV_SDP_INFO *sdp_rec ) -{ - tBTA_HH_DEV_CB *p_cb = bta_hh_cb.p_cur; - uint8_t hdl = 0; - tBTA_HH_STATUS status = BTA_HH_ERR_SDP; - - /* make sure sdp succeeded and hh has not been disabled */ - if ((result == SDP_SUCCESS) && (p_cb != NULL)) - { - /* security is required for the connection, add attr_mask bit*/ - if (p_cb->sec_mask) - attr_mask |= HID_SEC_REQUIRED; + tHID_DEV_SDP_INFO* sdp_rec) { + tBTA_HH_DEV_CB* p_cb = bta_hh_cb.p_cur; + uint8_t hdl = 0; + tBTA_HH_STATUS status = BTA_HH_ERR_SDP; + + /* make sure sdp succeeded and hh has not been disabled */ + if ((result == SDP_SUCCESS) && (p_cb != NULL)) { + /* security is required for the connection, add attr_mask bit*/ + if (p_cb->sec_mask) attr_mask |= HID_SEC_REQUIRED; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_EVENT("bta_hh_sdp_cback: p_cb: %d result 0x%02x, \ - attr_mask 0x%02x, handle %x", \ - p_cb, result, attr_mask,p_cb->hid_handle); + APPL_TRACE_EVENT( + "bta_hh_sdp_cback: p_cb: %d result 0x%02x, \ + attr_mask 0x%02x, handle %x", + p_cb, result, attr_mask, p_cb->hid_handle); #endif - /* check to see type of device is supported , and should not been added before */ - if (bta_hh_tod_spt(p_cb, sdp_rec->sub_class)) - { - /* if not added before */ - if (p_cb->hid_handle == BTA_HH_INVALID_HANDLE) - { - /* add device/update attr_mask information */ - if(HID_HostAddDev (p_cb->addr, attr_mask, &hdl) == HID_SUCCESS) - { - status = BTA_HH_OK; - /* update cb_index[] map */ - bta_hh_cb.cb_index[hdl] = p_cb->index; - } - else - { - p_cb->app_id = 0; - } - } - else - { - hdl = p_cb->hid_handle; - } - /* else : incoming connection after SDP should update the SDP information as well */ - - if (p_cb->app_id != 0) - { - /* update cb information with attr_mask, dscp_info etc. */ - bta_hh_add_device_to_list(p_cb, hdl, attr_mask, - &sdp_rec->dscp_info, - sdp_rec->sub_class, - sdp_rec->ssr_max_latency, - sdp_rec->ssr_min_tout, - p_cb->app_id); - - p_cb->dscp_info.ctry_code = sdp_rec->ctry_code; - - status = BTA_HH_OK; - } - + /* check to see type of device is supported , and should not been added + * before */ + if (bta_hh_tod_spt(p_cb, sdp_rec->sub_class)) { + /* if not added before */ + if (p_cb->hid_handle == BTA_HH_INVALID_HANDLE) { + /* add device/update attr_mask information */ + if (HID_HostAddDev(p_cb->addr, attr_mask, &hdl) == HID_SUCCESS) { + status = BTA_HH_OK; + /* update cb_index[] map */ + bta_hh_cb.cb_index[hdl] = p_cb->index; + } else { + p_cb->app_id = 0; } - else /* type of device is not supported */ - status = BTA_HH_ERR_TOD_UNSPT; - } + } else { + hdl = p_cb->hid_handle; + } + /* else : incoming connection after SDP should update the SDP information + * as well */ - /* free disc_db when SDP is completed */ - osi_free_and_reset((void **)&bta_hh_cb.p_disc_db); + if (p_cb->app_id != 0) { + /* update cb information with attr_mask, dscp_info etc. */ + bta_hh_add_device_to_list(p_cb, hdl, attr_mask, &sdp_rec->dscp_info, + sdp_rec->sub_class, sdp_rec->ssr_max_latency, + sdp_rec->ssr_min_tout, p_cb->app_id); - /* send SDP_CMPL_EVT into state machine */ - bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA *)&status); + p_cb->dscp_info.ctry_code = sdp_rec->ctry_code; - return; + status = BTA_HH_OK; + } + + } else /* type of device is not supported */ + status = BTA_HH_ERR_TOD_UNSPT; + } + + /* free disc_db when SDP is completed */ + osi_free_and_reset((void**)&bta_hh_cb.p_disc_db); + + /* send SDP_CMPL_EVT into state machine */ + bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA*)&status); + + return; } /******************************************************************************* * @@ -267,63 +239,59 @@ static void bta_hh_sdp_cback(uint16_t result, uint16_t attr_mask, * Returns void * ******************************************************************************/ -static void bta_hh_di_sdp_cback(uint16_t result) -{ - tBTA_HH_DEV_CB *p_cb = bta_hh_cb.p_cur; - tBTA_HH_STATUS status = BTA_HH_ERR_SDP; - tSDP_DI_GET_RECORD di_rec; - tHID_STATUS ret; +static void bta_hh_di_sdp_cback(uint16_t result) { + tBTA_HH_DEV_CB* p_cb = bta_hh_cb.p_cur; + tBTA_HH_STATUS status = BTA_HH_ERR_SDP; + tSDP_DI_GET_RECORD di_rec; + tHID_STATUS ret; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_EVENT("bta_hh_di_sdp_cback: p_cb: %d result 0x%02x", p_cb, result); + APPL_TRACE_EVENT("bta_hh_di_sdp_cback: p_cb: %d result 0x%02x", p_cb, result); #endif - /* if DI record does not exist on remote device, vendor_id in tBTA_HH_DEV_DSCP_INFO will be - * set to 0xffff and we will allow the connection to go through. Spec mandates that DI - * record be set, but many HID devices do not set this. So for IOP purposes, we allow the - * connection to go through and update the DI record to invalid DI entry.*/ - if (((result == SDP_SUCCESS) || (result == SDP_NO_RECS_MATCH)) && (p_cb != NULL)) + /* if DI record does not exist on remote device, vendor_id in + * tBTA_HH_DEV_DSCP_INFO will be + * set to 0xffff and we will allow the connection to go through. Spec + * mandates that DI + * record be set, but many HID devices do not set this. So for IOP + * purposes, we allow the + * connection to go through and update the DI record to invalid DI + * entry.*/ + if (((result == SDP_SUCCESS) || (result == SDP_NO_RECS_MATCH)) && + (p_cb != NULL)) { + if (result == SDP_SUCCESS && + SDP_GetNumDiRecords(bta_hh_cb.p_disc_db) != 0) { + /* always update information with primary DI record */ + if (SDP_GetDiRecord(1, &di_rec, bta_hh_cb.p_disc_db) == SDP_SUCCESS) { + bta_hh_update_di_info(p_cb, di_rec.rec.vendor, di_rec.rec.product, + di_rec.rec.version, 0); + } + + } else /* no DI recrod available */ { - if(result == SDP_SUCCESS && SDP_GetNumDiRecords(bta_hh_cb.p_disc_db) != 0) - { - /* always update information with primary DI record */ - if (SDP_GetDiRecord(1, &di_rec, bta_hh_cb.p_disc_db) == SDP_SUCCESS) - { - bta_hh_update_di_info(p_cb, di_rec.rec.vendor, di_rec.rec.product, di_rec.rec.version, 0); - } - - } - else /* no DI recrod available */ - { - bta_hh_update_di_info(p_cb, BTA_HH_VENDOR_ID_INVALID, 0, 0, 0); - } + bta_hh_update_di_info(p_cb, BTA_HH_VENDOR_ID_INVALID, 0, 0, 0); + } - if ((ret = HID_HostGetSDPRecord(p_cb->addr, - bta_hh_cb.p_disc_db, - p_bta_hh_cfg->sdp_db_size, - bta_hh_sdp_cback)) == HID_SUCCESS) - { - status = BTA_HH_OK; - } - else - { + if ((ret = HID_HostGetSDPRecord(p_cb->addr, bta_hh_cb.p_disc_db, + p_bta_hh_cfg->sdp_db_size, + bta_hh_sdp_cback)) == HID_SUCCESS) { + status = BTA_HH_OK; + } else { #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG ("bta_hh_di_sdp_cback: HID_HostGetSDPRecord failed: Status 0x%2x", - ret); + APPL_TRACE_DEBUG( + "bta_hh_di_sdp_cback: HID_HostGetSDPRecord failed: Status 0x%2x", + ret); #endif - } - } - - - if (status != BTA_HH_OK) { - osi_free_and_reset((void **)&bta_hh_cb.p_disc_db); - /* send SDP_CMPL_EVT into state machine */ - bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA *)&status); } - return; + } + if (status != BTA_HH_OK) { + osi_free_and_reset((void**)&bta_hh_cb.p_disc_db); + /* send SDP_CMPL_EVT into state machine */ + bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA*)&status); + } + return; } - /******************************************************************************* * * Function bta_hh_start_sdp @@ -336,182 +304,166 @@ static void bta_hh_di_sdp_cback(uint16_t result) * Returns void * ******************************************************************************/ -void bta_hh_start_sdp(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_STATUS status = BTA_HH_ERR_SDP; - uint8_t hdl; +void bta_hh_start_sdp(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_STATUS status = BTA_HH_ERR_SDP; + uint8_t hdl; - p_cb->sec_mask = p_data->api_conn.sec_mask; - p_cb->mode = p_data->api_conn.mode; - bta_hh_cb.p_cur = p_cb; + p_cb->sec_mask = p_data->api_conn.sec_mask; + p_cb->mode = p_data->api_conn.mode; + bta_hh_cb.p_cur = p_cb; #if (BTA_HH_LE_INCLUDED == TRUE) - if (bta_hh_is_le_device(p_cb, p_data->api_conn.bd_addr)) - { - bta_hh_le_open_conn(p_cb, p_data->api_conn.bd_addr); - return; - } + if (bta_hh_is_le_device(p_cb, p_data->api_conn.bd_addr)) { + bta_hh_le_open_conn(p_cb, p_data->api_conn.bd_addr); + return; + } #endif - /* if previously virtually cabled device, skip SDP */ - if (p_cb->app_id) - { - status = BTA_HH_OK; + /* if previously virtually cabled device, skip SDP */ + if (p_cb->app_id) { + status = BTA_HH_OK; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_start_sdp:: skip SDP for known devices"); + APPL_TRACE_DEBUG("bta_hh_start_sdp:: skip SDP for known devices"); #endif - if (p_cb->hid_handle == BTA_HH_INVALID_HANDLE) - { - if (HID_HostAddDev (p_cb->addr, p_cb->attr_mask, &hdl) \ - == HID_SUCCESS) - { - /* update device CB with newly register device handle */ - bta_hh_add_device_to_list(p_cb, hdl, p_cb->attr_mask, NULL, - p_cb->sub_class, - p_cb->dscp_info.ssr_max_latency, - p_cb->dscp_info.ssr_min_tout, - p_cb->app_id); - /* update cb_index[] map */ - bta_hh_cb.cb_index[hdl] = p_cb->index; - } - else - status = BTA_HH_ERR_NO_RES; - } - bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA *)&status); - - return; + if (p_cb->hid_handle == BTA_HH_INVALID_HANDLE) { + if (HID_HostAddDev(p_cb->addr, p_cb->attr_mask, &hdl) == HID_SUCCESS) { + /* update device CB with newly register device handle */ + bta_hh_add_device_to_list(p_cb, hdl, p_cb->attr_mask, NULL, + p_cb->sub_class, + p_cb->dscp_info.ssr_max_latency, + p_cb->dscp_info.ssr_min_tout, p_cb->app_id); + /* update cb_index[] map */ + bta_hh_cb.cb_index[hdl] = p_cb->index; + } else + status = BTA_HH_ERR_NO_RES; } - /* GetSDPRecord. at one time only one SDP precedure can be active */ - else if (!bta_hh_cb.p_disc_db) - { - bta_hh_cb.p_disc_db = (tSDP_DISCOVERY_DB *)osi_malloc(p_bta_hh_cfg->sdp_db_size); - bta_hh_cb.p_cur = p_cb; - /* do DI discovery first */ - if (SDP_DiDiscover(p_data->api_conn.bd_addr, - bta_hh_cb.p_disc_db, - p_bta_hh_cfg->sdp_db_size, - bta_hh_di_sdp_cback) != SDP_SUCCESS) { + bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA*)&status); + + return; + } + /* GetSDPRecord. at one time only one SDP precedure can be active */ + else if (!bta_hh_cb.p_disc_db) { + bta_hh_cb.p_disc_db = + (tSDP_DISCOVERY_DB*)osi_malloc(p_bta_hh_cfg->sdp_db_size); + bta_hh_cb.p_cur = p_cb; + /* do DI discovery first */ + if (SDP_DiDiscover(p_data->api_conn.bd_addr, bta_hh_cb.p_disc_db, + p_bta_hh_cfg->sdp_db_size, + bta_hh_di_sdp_cback) != SDP_SUCCESS) { #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_start_sdp: SDP_DiDiscover failed: \ - Status 0x%2X",status); + APPL_TRACE_DEBUG( + "bta_hh_start_sdp: SDP_DiDiscover failed: \ + Status 0x%2X", + status); #endif - status = BTA_HH_ERR_SDP; - osi_free_and_reset((void **)&bta_hh_cb.p_disc_db); - } else { - status = BTA_HH_OK; - } - } else if (bta_hh_cb.p_disc_db) { - /* It is possible that there is incoming/outgoing collision case. DUT initiated - * HID connection at same time remote has connected L2CAP for HID control, - * so SDP would be in progress, when this flow reaches here. Just do nothing - * when the code reaches here, and ongoing SDP completion or failure will handle this case. - */ - APPL_TRACE_DEBUG("%s: ignoring as SDP already in progress", __func__); - return; + status = BTA_HH_ERR_SDP; + osi_free_and_reset((void**)&bta_hh_cb.p_disc_db); + } else { + status = BTA_HH_OK; } - - if (status != BTA_HH_OK) - bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA *)&status); - + } else if (bta_hh_cb.p_disc_db) { + /* It is possible that there is incoming/outgoing collision case. DUT + * initiated + * HID connection at same time remote has connected L2CAP for HID control, + * so SDP would be in progress, when this flow reaches here. Just do nothing + * when the code reaches here, and ongoing SDP completion or failure will + * handle this case. + */ + APPL_TRACE_DEBUG("%s: ignoring as SDP already in progress", __func__); return; + } + + if (status != BTA_HH_OK) + bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA*)&status); + return; } /******************************************************************************* * * Function bta_hh_sdp_cmpl * - * Description When SDP completed, initiate a connection or report error depend + * Description When SDP completed, initiate a connection or report error + *depend * on SDP result. * * * Returns void * ******************************************************************************/ -void bta_hh_sdp_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_CONN conn_dat; - tBTA_HH_STATUS status = p_data->status; +void bta_hh_sdp_cmpl(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CONN conn_dat; + tBTA_HH_STATUS status = p_data->status; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG ("bta_hh_sdp_cmpl: status 0x%2X",p_data->status); + APPL_TRACE_DEBUG("bta_hh_sdp_cmpl: status 0x%2X", p_data->status); #endif - /* initialize call back data */ - memset((void *)&conn_dat, 0, sizeof(tBTA_HH_CONN)); - conn_dat.handle = p_cb->hid_handle; - bdcpy(conn_dat.bda, p_cb->addr); - - /* if SDP compl success */ - if ( status == BTA_HH_OK) - { - /* not incoming connection doing SDP, initiate a HID connection */ - if (!p_cb->incoming_conn) - { - tHID_STATUS ret; - /* set security level */ - HID_HostSetSecurityLevel("", p_cb->sec_mask); - - /* open HID connection */ - ret = HID_HostOpenDev (p_cb->hid_handle); - APPL_TRACE_DEBUG ("%s: HID_HostOpenDev returned=%d", __func__, ret); - if (ret == HID_SUCCESS || ret == HID_ERR_ALREADY_CONN) - { - status = BTA_HH_OK; - } - else if (ret == HID_ERR_CONN_IN_PROCESS) - { - /* Connection already in progress, return from here, SDP - * will be performed after connection is completed. - */ - APPL_TRACE_DEBUG ("%s: connection already in progress", __func__); - return; - } - else - { + /* initialize call back data */ + memset((void*)&conn_dat, 0, sizeof(tBTA_HH_CONN)); + conn_dat.handle = p_cb->hid_handle; + bdcpy(conn_dat.bda, p_cb->addr); + + /* if SDP compl success */ + if (status == BTA_HH_OK) { + /* not incoming connection doing SDP, initiate a HID connection */ + if (!p_cb->incoming_conn) { + tHID_STATUS ret; + /* set security level */ + HID_HostSetSecurityLevel("", p_cb->sec_mask); + + /* open HID connection */ + ret = HID_HostOpenDev(p_cb->hid_handle); + APPL_TRACE_DEBUG("%s: HID_HostOpenDev returned=%d", __func__, ret); + if (ret == HID_SUCCESS || ret == HID_ERR_ALREADY_CONN) { + status = BTA_HH_OK; + } else if (ret == HID_ERR_CONN_IN_PROCESS) { + /* Connection already in progress, return from here, SDP + * will be performed after connection is completed. + */ + APPL_TRACE_DEBUG("%s: connection already in progress", __func__); + return; + } else { #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG ("%s: HID_HostOpenDev failed: Status 0x%2X", __func__, ret); + APPL_TRACE_DEBUG("%s: HID_HostOpenDev failed: Status 0x%2X", __func__, + ret); #endif - /* open fail, remove device from management device list */ - HID_HostRemoveDev( p_cb->hid_handle); - status = BTA_HH_ERR; - } - } - else /* incoming connection SDP finish */ - { - bta_hh_sm_execute(p_cb, BTA_HH_OPEN_CMPL_EVT, NULL); - } - } - - if (status != BTA_HH_OK) + /* open fail, remove device from management device list */ + HID_HostRemoveDev(p_cb->hid_handle); + status = BTA_HH_ERR; + } + } else /* incoming connection SDP finish */ { - /* Check if this was incoming connection request from an unknown device - **and connection failed due to missing HID Device SDP UUID - **In above condition, disconnect the link as well as remove the - **device from list of HID devices*/ - if ((status == BTA_HH_ERR_SDP) && - (p_cb->incoming_conn) &&(p_cb->app_id == 0)) - { - APPL_TRACE_DEBUG ("bta_hh_sdp_cmpl:SDP failed for incoming conn :hndl %d", - p_cb->incoming_hid_handle); - HID_HostRemoveDev( p_cb->incoming_hid_handle); - } - conn_dat.status = status; - (* bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH *)&conn_dat); + bta_hh_sm_execute(p_cb, BTA_HH_OPEN_CMPL_EVT, NULL); + } + } + + if (status != BTA_HH_OK) { + /* Check if this was incoming connection request from an unknown device + **and connection failed due to missing HID Device SDP UUID + **In above condition, disconnect the link as well as remove the + **device from list of HID devices*/ + if ((status == BTA_HH_ERR_SDP) && (p_cb->incoming_conn) && + (p_cb->app_id == 0)) { + APPL_TRACE_DEBUG("bta_hh_sdp_cmpl:SDP failed for incoming conn :hndl %d", + p_cb->incoming_hid_handle); + HID_HostRemoveDev(p_cb->incoming_hid_handle); + } + conn_dat.status = status; + (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH*)&conn_dat); - /* move state machine W4_CONN ->IDLE */ - bta_hh_sm_execute(p_cb, BTA_HH_API_CLOSE_EVT, NULL); + /* move state machine W4_CONN ->IDLE */ + bta_hh_sm_execute(p_cb, BTA_HH_API_CLOSE_EVT, NULL); - /* if this is an outgoing connection to an unknown device, clean up cb */ - if (p_cb->app_id == 0 && !p_cb->incoming_conn) - { - /* clean up device control block */ - bta_hh_clean_up_kdev(p_cb); - } + /* if this is an outgoing connection to an unknown device, clean up cb */ + if (p_cb->app_id == 0 && !p_cb->incoming_conn) { + /* clean up device control block */ + bta_hh_clean_up_kdev(p_cb); + } #if (BTA_HH_DEBUG == TRUE) - bta_hh_trace_dev_db(); + bta_hh_trace_dev_db(); #endif - } - return; + } + return; } /******************************************************************************* @@ -524,29 +476,27 @@ void bta_hh_sdp_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_api_disc_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_CBDATA disc_dat; - tHID_STATUS status; +void bta_hh_api_disc_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CBDATA disc_dat; + tHID_STATUS status; #if (BTA_HH_LE_INCLUDED == TRUE) - if (p_cb->is_le_device) - bta_hh_le_api_disc_act(p_cb); - else + if (p_cb->is_le_device) + bta_hh_le_api_disc_act(p_cb); + else #endif - { - /* found an active connection */ - disc_dat.handle = p_data ?(uint8_t)p_data->hdr.layer_specific :p_cb->hid_handle; - disc_dat.status = BTA_HH_ERR; + { + /* found an active connection */ + disc_dat.handle = + p_data ? (uint8_t)p_data->hdr.layer_specific : p_cb->hid_handle; + disc_dat.status = BTA_HH_ERR; - status = HID_HostCloseDev(disc_dat.handle); + status = HID_HostCloseDev(disc_dat.handle); - if (status) - (* bta_hh_cb.p_cback)(BTA_HH_CLOSE_EVT, (tBTA_HH *)&disc_dat); - } - - return; + if (status) (*bta_hh_cb.p_cback)(BTA_HH_CLOSE_EVT, (tBTA_HH*)&disc_dat); + } + return; } /******************************************************************************* * @@ -558,62 +508,54 @@ void bta_hh_api_disc_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_open_cmpl_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_CONN conn ; - uint8_t dev_handle = p_data ? (uint8_t)p_data->hid_cback.hdr.layer_specific : \ - p_cb->hid_handle; +void bta_hh_open_cmpl_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CONN conn; + uint8_t dev_handle = + p_data ? (uint8_t)p_data->hid_cback.hdr.layer_specific : p_cb->hid_handle; - memset((void *)&conn, 0, sizeof (tBTA_HH_CONN)); - conn.handle = dev_handle; - bdcpy(conn.bda, p_cb->addr); + memset((void*)&conn, 0, sizeof(tBTA_HH_CONN)); + conn.handle = dev_handle; + bdcpy(conn.bda, p_cb->addr); - /* increase connection number */ - bta_hh_cb.cnt_num ++; + /* increase connection number */ + bta_hh_cb.cnt_num++; - /* initialize device driver */ - bta_hh_co_open(p_cb->hid_handle, p_cb->sub_class, - p_cb->attr_mask, p_cb->app_id); + /* initialize device driver */ + bta_hh_co_open(p_cb->hid_handle, p_cb->sub_class, p_cb->attr_mask, + p_cb->app_id); #if (BTA_HH_LE_INCLUDED == TRUE) - conn.status = p_cb->status; - conn.le_hid = p_cb->is_le_device; - conn.scps_supported = p_cb->scps_supported; + conn.status = p_cb->status; + conn.le_hid = p_cb->is_le_device; + conn.scps_supported = p_cb->scps_supported; - if (!p_cb->is_le_device) + if (!p_cb->is_le_device) #endif - { - /* inform role manager */ - bta_sys_conn_open( BTA_ID_HH ,p_cb->app_id, p_cb->addr); - } - /* set protocol mode when not default report mode */ - if ( p_cb->mode != BTA_HH_PROTO_RPT_MODE + { + /* inform role manager */ + bta_sys_conn_open(BTA_ID_HH, p_cb->app_id, p_cb->addr); + } + /* set protocol mode when not default report mode */ + if (p_cb->mode != BTA_HH_PROTO_RPT_MODE #if (BTA_HH_LE_INCLUDED == TRUE) - && !p_cb->is_le_device + && !p_cb->is_le_device #endif - ) - { - if ((HID_HostWriteDev(dev_handle, - HID_TRANS_SET_PROTOCOL, HID_PAR_PROTOCOL_BOOT_MODE, - 0, - 0, NULL)) != HID_SUCCESS) - { - /* HID connection is up, while SET_PROTO fail */ - conn.status = BTA_HH_ERR_PROTO; - (* bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH *)&conn); - } - else - { - conn.status = BTA_HH_OK; - p_cb->w4_evt = BTA_HH_OPEN_EVT; - } + ) { + if ((HID_HostWriteDev(dev_handle, HID_TRANS_SET_PROTOCOL, + HID_PAR_PROTOCOL_BOOT_MODE, 0, 0, NULL)) != + HID_SUCCESS) { + /* HID connection is up, while SET_PROTO fail */ + conn.status = BTA_HH_ERR_PROTO; + (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH*)&conn); + } else { + conn.status = BTA_HH_OK; + p_cb->w4_evt = BTA_HH_OPEN_EVT; } - else - (* bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH *)&conn); - - p_cb->incoming_conn = false; - p_cb->incoming_hid_handle = BTA_HH_INVALID_HANDLE; + } else + (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH*)&conn); + p_cb->incoming_conn = false; + p_cb->incoming_hid_handle = BTA_HH_INVALID_HANDLE; } /******************************************************************************* * @@ -625,39 +567,35 @@ void bta_hh_open_cmpl_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_open_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_API_CONN conn_data; +void bta_hh_open_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_API_CONN conn_data; - uint8_t dev_handle = p_data ? (uint8_t)p_data->hid_cback.hdr.layer_specific : \ - p_cb->hid_handle; + uint8_t dev_handle = + p_data ? (uint8_t)p_data->hid_cback.hdr.layer_specific : p_cb->hid_handle; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_EVENT ("bta_hh_open_act: Device[%d] connected", dev_handle); + APPL_TRACE_EVENT("bta_hh_open_act: Device[%d] connected", dev_handle); #endif - /* SDP has been done */ - if (p_cb->app_id != 0) - { - bta_hh_sm_execute(p_cb, BTA_HH_OPEN_CMPL_EVT, p_data); - } - else - /* app_id == 0 indicates an incoming conenction request arrives without SDP - performed, do it first */ - { - p_cb->incoming_conn = true; - /* store the handle here in case sdp fails - need to disconnect */ - p_cb->incoming_hid_handle = dev_handle; - - memset(&conn_data, 0, sizeof(tBTA_HH_API_CONN)); - bdcpy(conn_data.bd_addr, p_cb->addr); - bta_hh_start_sdp(p_cb, (tBTA_HH_DATA *)&conn_data); - } - - return; + /* SDP has been done */ + if (p_cb->app_id != 0) { + bta_hh_sm_execute(p_cb, BTA_HH_OPEN_CMPL_EVT, p_data); + } else + /* app_id == 0 indicates an incoming conenction request arrives without SDP + performed, do it first */ + { + p_cb->incoming_conn = true; + /* store the handle here in case sdp fails - need to disconnect */ + p_cb->incoming_hid_handle = dev_handle; + + memset(&conn_data, 0, sizeof(tBTA_HH_API_CONN)); + bdcpy(conn_data.bd_addr, p_cb->addr); + bta_hh_start_sdp(p_cb, (tBTA_HH_DATA*)&conn_data); + } + + return; } - /******************************************************************************* * * Function bta_hh_data_act @@ -668,18 +606,17 @@ void bta_hh_open_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_data_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data) -{ - BT_HDR *pdata = p_data->hid_cback.p_data; - uint8_t *p_rpt = (uint8_t *)(pdata + 1) + pdata->offset; +void bta_hh_data_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + BT_HDR* pdata = p_data->hid_cback.p_data; + uint8_t* p_rpt = (uint8_t*)(pdata + 1) + pdata->offset; - bta_hh_co_data((uint8_t)p_data->hid_cback.hdr.layer_specific, p_rpt, pdata->len, - p_cb->mode, p_cb->sub_class, p_cb->dscp_info.ctry_code, p_cb->addr, p_cb->app_id); + bta_hh_co_data((uint8_t)p_data->hid_cback.hdr.layer_specific, p_rpt, + pdata->len, p_cb->mode, p_cb->sub_class, + p_cb->dscp_info.ctry_code, p_cb->addr, p_cb->app_id); - osi_free_and_reset((void **)&pdata); + osi_free_and_reset((void**)&pdata); } - /******************************************************************************* * * Function bta_hh_handsk_act @@ -690,68 +627,67 @@ void bta_hh_data_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data) * Returns void * ******************************************************************************/ -void bta_hh_handsk_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data) -{ - tBTA_HH_CBDATA cback_data ; - tBTA_HH_HSDATA hs_data; - tBTA_HH_CONN conn ; +void bta_hh_handsk_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CBDATA cback_data; + tBTA_HH_HSDATA hs_data; + tBTA_HH_CONN conn; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("HANDSHAKE received for: event = %s data= %d", - bta_hh_get_w4_event(p_cb->w4_evt), p_data->hid_cback.data); + APPL_TRACE_DEBUG("HANDSHAKE received for: event = %s data= %d", + bta_hh_get_w4_event(p_cb->w4_evt), p_data->hid_cback.data); #endif - memset(&hs_data, 0, sizeof(tBTA_HH_HSDATA)); - memset(&cback_data, 0, sizeof(tBTA_HH_CBDATA)); + memset(&hs_data, 0, sizeof(tBTA_HH_HSDATA)); + memset(&cback_data, 0, sizeof(tBTA_HH_CBDATA)); - switch (p_cb->w4_evt) - { - /* GET_ transsaction, handshake indicate unsupported request */ - case BTA_HH_GET_PROTO_EVT: - hs_data.rsp_data.proto_mode = BTA_HH_PROTO_UNKNOWN; - /* fall through */ - case BTA_HH_GET_RPT_EVT: - case BTA_HH_GET_IDLE_EVT : - hs_data.handle = p_cb->hid_handle; - /* if handshake gives an OK code for these transaction, fill in UNSUPT */ - if ((hs_data.status = bta_hh_get_trans_status(p_data->hid_cback.data)) == BTA_HH_OK) - hs_data.status = BTA_HH_HS_TRANS_NOT_SPT; - - (* bta_hh_cb.p_cback)(p_cb->w4_evt, (tBTA_HH *)&hs_data); - p_cb->w4_evt = 0; - break; - - /* acknoledgement from HID device for SET_ transaction */ - case BTA_HH_SET_RPT_EVT: - case BTA_HH_SET_PROTO_EVT: - case BTA_HH_SET_IDLE_EVT : - cback_data.handle = p_cb->hid_handle; - cback_data.status = bta_hh_get_trans_status(p_data->hid_cback.data); - (* bta_hh_cb.p_cback)(p_cb->w4_evt, (tBTA_HH *)&cback_data); - p_cb->w4_evt = 0; - break; - - /* SET_PROTOCOL when open connection */ - case BTA_HH_OPEN_EVT: - conn.status =p_data->hid_cback.data ? BTA_HH_ERR_PROTO: BTA_HH_OK; - conn.handle = p_cb->hid_handle; - bdcpy(conn.bda, p_cb->addr); - (* bta_hh_cb.p_cback)(p_cb->w4_evt, (tBTA_HH *)&conn); + switch (p_cb->w4_evt) { + /* GET_ transsaction, handshake indicate unsupported request */ + case BTA_HH_GET_PROTO_EVT: + hs_data.rsp_data.proto_mode = BTA_HH_PROTO_UNKNOWN; + /* fall through */ + case BTA_HH_GET_RPT_EVT: + case BTA_HH_GET_IDLE_EVT: + hs_data.handle = p_cb->hid_handle; + /* if handshake gives an OK code for these transaction, fill in UNSUPT */ + if ((hs_data.status = bta_hh_get_trans_status(p_data->hid_cback.data)) == + BTA_HH_OK) + hs_data.status = BTA_HH_HS_TRANS_NOT_SPT; + + (*bta_hh_cb.p_cback)(p_cb->w4_evt, (tBTA_HH*)&hs_data); + p_cb->w4_evt = 0; + break; + + /* acknoledgement from HID device for SET_ transaction */ + case BTA_HH_SET_RPT_EVT: + case BTA_HH_SET_PROTO_EVT: + case BTA_HH_SET_IDLE_EVT: + cback_data.handle = p_cb->hid_handle; + cback_data.status = bta_hh_get_trans_status(p_data->hid_cback.data); + (*bta_hh_cb.p_cback)(p_cb->w4_evt, (tBTA_HH*)&cback_data); + p_cb->w4_evt = 0; + break; + + /* SET_PROTOCOL when open connection */ + case BTA_HH_OPEN_EVT: + conn.status = p_data->hid_cback.data ? BTA_HH_ERR_PROTO : BTA_HH_OK; + conn.handle = p_cb->hid_handle; + bdcpy(conn.bda, p_cb->addr); + (*bta_hh_cb.p_cback)(p_cb->w4_evt, (tBTA_HH*)&conn); #if (BTA_HH_DEBUG == TRUE) - bta_hh_trace_dev_db(); + bta_hh_trace_dev_db(); #endif - p_cb->w4_evt = 0; - break; + p_cb->w4_evt = 0; + break; - default: - /* unknow transaction handshake response */ - APPL_TRACE_DEBUG("unknown transaction type"); - break; - } - - /* transaction achknoledgement received, inform PM for mode change */ - bta_sys_idle(BTA_ID_HH, p_cb->app_id, p_cb->addr); - return; + default: + /* unknow transaction handshake response */ + APPL_TRACE_DEBUG("unknown transaction type"); + break; + } + + /* transaction achknoledgement received, inform PM for mode change */ + bta_sys_idle(BTA_ID_HH, p_cb->app_id, p_cb->addr); + return; } /******************************************************************************* * @@ -763,104 +699,103 @@ void bta_hh_handsk_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data) * Returns void * ******************************************************************************/ -void bta_hh_ctrl_dat_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data) -{ - BT_HDR *pdata = p_data->hid_cback.p_data; - uint8_t *data = (uint8_t *)(pdata + 1) + pdata->offset; - tBTA_HH_HSDATA hs_data; +void bta_hh_ctrl_dat_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + BT_HDR* pdata = p_data->hid_cback.p_data; + uint8_t* data = (uint8_t*)(pdata + 1) + pdata->offset; + tBTA_HH_HSDATA hs_data; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("Ctrl DATA received w4: event[%s]", - bta_hh_get_w4_event(p_cb->w4_evt)); + APPL_TRACE_DEBUG("Ctrl DATA received w4: event[%s]", + bta_hh_get_w4_event(p_cb->w4_evt)); #endif - hs_data.status = BTA_HH_OK; - hs_data.handle = p_cb->hid_handle; + hs_data.status = BTA_HH_OK; + hs_data.handle = p_cb->hid_handle; - switch (p_cb->w4_evt) - { + switch (p_cb->w4_evt) { case BTA_HH_GET_IDLE_EVT: - hs_data.rsp_data.idle_rate = *data; - break; + hs_data.rsp_data.idle_rate = *data; + break; case BTA_HH_GET_RPT_EVT: - hs_data.rsp_data.p_rpt_data = pdata; - break; + hs_data.rsp_data.p_rpt_data = pdata; + break; case BTA_HH_GET_PROTO_EVT: - /* match up BTE/BTA report/boot mode def*/ - hs_data.rsp_data.proto_mode = ((*data) == HID_PAR_PROTOCOL_REPORT)? \ - BTA_HH_PROTO_RPT_MODE : BTA_HH_PROTO_BOOT_MODE; + /* match up BTE/BTA report/boot mode def*/ + hs_data.rsp_data.proto_mode = ((*data) == HID_PAR_PROTOCOL_REPORT) + ? BTA_HH_PROTO_RPT_MODE + : BTA_HH_PROTO_BOOT_MODE; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("GET_PROTOCOL Mode = [%s]", - (hs_data.rsp_data.proto_mode == BTA_HH_PROTO_RPT_MODE)? "Report" : "Boot"); + APPL_TRACE_DEBUG("GET_PROTOCOL Mode = [%s]", + (hs_data.rsp_data.proto_mode == BTA_HH_PROTO_RPT_MODE) + ? "Report" + : "Boot"); #endif - break; + break; /* should not expect control DATA for SET_ transaction */ case BTA_HH_SET_PROTO_EVT: - /* fall through */ + /* fall through */ case BTA_HH_SET_RPT_EVT: - /* fall through */ - case BTA_HH_SET_IDLE_EVT : - /* fall through */ + /* fall through */ + case BTA_HH_SET_IDLE_EVT: + /* fall through */ default: #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("invalid transaction type for DATA payload: 4_evt[%s]", - bta_hh_get_w4_event(p_cb->w4_evt)); + APPL_TRACE_DEBUG("invalid transaction type for DATA payload: 4_evt[%s]", + bta_hh_get_w4_event(p_cb->w4_evt)); #endif - break; - } + break; + } - /* inform PM for mode change */ - bta_sys_busy(BTA_ID_HH, p_cb->app_id, p_cb->addr); - bta_sys_idle(BTA_ID_HH, p_cb->app_id, p_cb->addr); + /* inform PM for mode change */ + bta_sys_busy(BTA_ID_HH, p_cb->app_id, p_cb->addr); + bta_sys_idle(BTA_ID_HH, p_cb->app_id, p_cb->addr); - (* bta_hh_cb.p_cback)(p_cb->w4_evt, (tBTA_HH *)&hs_data); - - p_cb->w4_evt = 0; - osi_free_and_reset((void **)&pdata); + (*bta_hh_cb.p_cback)(p_cb->w4_evt, (tBTA_HH*)&hs_data); + p_cb->w4_evt = 0; + osi_free_and_reset((void**)&pdata); } /******************************************************************************* * * Function bta_hh_open_failure * - * Description report HID open failure when at wait for connection state and receive + * Description report HID open failure when at wait for connection state + *and receive * device close event. * * * Returns void * ******************************************************************************/ -void bta_hh_open_failure(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_CONN conn_dat ; - uint32_t reason = p_data->hid_cback.data; /* Reason for closing (32-bit) */ +void bta_hh_open_failure(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CONN conn_dat; + uint32_t reason = p_data->hid_cback.data; /* Reason for closing (32-bit) */ - memset(&conn_dat, 0, sizeof(tBTA_HH_CONN)); - conn_dat.handle = p_cb->hid_handle; - conn_dat.status = (reason == HID_ERR_AUTH_FAILED) ? - BTA_HH_ERR_AUTH_FAILED : BTA_HH_ERR; - bdcpy(conn_dat.bda, p_cb->addr); - HID_HostCloseDev(p_cb->hid_handle); + memset(&conn_dat, 0, sizeof(tBTA_HH_CONN)); + conn_dat.handle = p_cb->hid_handle; + conn_dat.status = + (reason == HID_ERR_AUTH_FAILED) ? BTA_HH_ERR_AUTH_FAILED : BTA_HH_ERR; + bdcpy(conn_dat.bda, p_cb->addr); + HID_HostCloseDev(p_cb->hid_handle); - /* Report OPEN fail event */ - (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH *)&conn_dat); + /* Report OPEN fail event */ + (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH*)&conn_dat); #if (BTA_HH_DEBUG == TRUE) - bta_hh_trace_dev_db(); + bta_hh_trace_dev_db(); #endif - /* clean up control block, but retain SDP info and device handle */ - p_cb->vp = false; - p_cb->w4_evt = 0; - - /* if no connection is active and HH disable is signaled, disable service */ - if (bta_hh_cb.cnt_num == 0 && bta_hh_cb.w4_disable) - { - bta_hh_disc_cmpl(); - } - - /* Error in opening hid connection, reset flags */ - p_cb->incoming_conn = false; - p_cb->incoming_hid_handle = BTA_HH_INVALID_HANDLE; + /* clean up control block, but retain SDP info and device handle */ + p_cb->vp = false; + p_cb->w4_evt = 0; + + /* if no connection is active and HH disable is signaled, disable service */ + if (bta_hh_cb.cnt_num == 0 && bta_hh_cb.w4_disable) { + bta_hh_disc_cmpl(); + } + + /* Error in opening hid connection, reset flags */ + p_cb->incoming_conn = false; + p_cb->incoming_hid_handle = BTA_HH_INVALID_HANDLE; } /******************************************************************************* @@ -873,75 +808,74 @@ void bta_hh_open_failure(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_close_act (tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_CONN conn_dat ; - tBTA_HH_CBDATA disc_dat = {BTA_HH_OK, 0}; - uint32_t reason = p_data->hid_cback.data; /* Reason for closing (32-bit) */ - - /* if HID_HDEV_EVT_VC_UNPLUG was received, report BTA_HH_VC_UNPLUG_EVT */ - uint16_t event = p_cb->vp ? BTA_HH_VC_UNPLUG_EVT : BTA_HH_CLOSE_EVT; - - disc_dat.handle = p_cb->hid_handle; - disc_dat.status = p_data->hid_cback.data; - - /* Check reason for closing */ - if ((reason & (HID_L2CAP_CONN_FAIL|HID_L2CAP_REQ_FAIL)) || /* Failure to initialize connection (page timeout or l2cap error) */ - (reason == HID_ERR_AUTH_FAILED) || /* Authenication error (while initiating) */ - (reason == HID_ERR_L2CAP_FAILED)) /* Failure creating l2cap connection */ - { - /* Failure in opening connection */ - conn_dat.handle = p_cb->hid_handle; - conn_dat.status = (reason == HID_ERR_AUTH_FAILED) ? BTA_HH_ERR_AUTH_FAILED : BTA_HH_ERR; - bdcpy(conn_dat.bda, p_cb->addr); - HID_HostCloseDev(p_cb->hid_handle); +void bta_hh_close_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CONN conn_dat; + tBTA_HH_CBDATA disc_dat = {BTA_HH_OK, 0}; + uint32_t reason = p_data->hid_cback.data; /* Reason for closing (32-bit) */ + + /* if HID_HDEV_EVT_VC_UNPLUG was received, report BTA_HH_VC_UNPLUG_EVT */ + uint16_t event = p_cb->vp ? BTA_HH_VC_UNPLUG_EVT : BTA_HH_CLOSE_EVT; + + disc_dat.handle = p_cb->hid_handle; + disc_dat.status = p_data->hid_cback.data; + + /* Check reason for closing */ + if ((reason & (HID_L2CAP_CONN_FAIL | + HID_L2CAP_REQ_FAIL)) || /* Failure to initialize connection + (page timeout or l2cap error) */ + (reason == + HID_ERR_AUTH_FAILED) || /* Authenication error (while initiating) */ + (reason == HID_ERR_L2CAP_FAILED)) /* Failure creating l2cap connection */ + { + /* Failure in opening connection */ + conn_dat.handle = p_cb->hid_handle; + conn_dat.status = + (reason == HID_ERR_AUTH_FAILED) ? BTA_HH_ERR_AUTH_FAILED : BTA_HH_ERR; + bdcpy(conn_dat.bda, p_cb->addr); + HID_HostCloseDev(p_cb->hid_handle); - /* Report OPEN fail event */ - (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH *)&conn_dat); + /* Report OPEN fail event */ + (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH*)&conn_dat); #if (BTA_HH_DEBUG == TRUE) - bta_hh_trace_dev_db(); + bta_hh_trace_dev_db(); #endif - return; + return; + } + /* otherwise report CLOSE/VC_UNPLUG event */ + else { + /* finaliza device driver */ + bta_hh_co_close(p_cb->hid_handle, p_cb->app_id); + /* inform role manager */ + bta_sys_conn_close(BTA_ID_HH, p_cb->app_id, p_cb->addr); + /* update total conn number */ + bta_hh_cb.cnt_num--; + + if (disc_dat.status) disc_dat.status = BTA_HH_ERR; + + (*bta_hh_cb.p_cback)(event, (tBTA_HH*)&disc_dat); + + /* if virtually unplug, remove device */ + if (p_cb->vp) { + HID_HostRemoveDev(p_cb->hid_handle); + bta_hh_clean_up_kdev(p_cb); } - /* otherwise report CLOSE/VC_UNPLUG event */ - else - { - /* finaliza device driver */ - bta_hh_co_close(p_cb->hid_handle, p_cb->app_id); - /* inform role manager */ - bta_sys_conn_close( BTA_ID_HH ,p_cb->app_id, p_cb->addr); - /* update total conn number */ - bta_hh_cb.cnt_num --; - - if (disc_dat.status) - disc_dat.status = BTA_HH_ERR; - - (*bta_hh_cb.p_cback)(event, (tBTA_HH *)&disc_dat); - - /* if virtually unplug, remove device */ - if (p_cb->vp ) - { - HID_HostRemoveDev( p_cb->hid_handle); - bta_hh_clean_up_kdev(p_cb); - } #if (BTA_HH_DEBUG == TRUE) - bta_hh_trace_dev_db(); + bta_hh_trace_dev_db(); #endif - } + } - /* clean up control block, but retain SDP info and device handle */ - p_cb->vp = false; - p_cb->w4_evt = 0; + /* clean up control block, but retain SDP info and device handle */ + p_cb->vp = false; + p_cb->w4_evt = 0; - /* if no connection is active and HH disable is signaled, disable service */ - if (bta_hh_cb.cnt_num == 0 && bta_hh_cb.w4_disable) - { - bta_hh_disc_cmpl(); - } + /* if no connection is active and HH disable is signaled, disable service */ + if (bta_hh_cb.cnt_num == 0 && bta_hh_cb.w4_disable) { + bta_hh_disc_cmpl(); + } - return; + return; } /******************************************************************************* @@ -954,18 +888,14 @@ void bta_hh_close_act (tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_get_dscp_act(tBTA_HH_DEV_CB *p_cb, - UNUSED_ATTR tBTA_HH_DATA *p_data) -{ - +void bta_hh_get_dscp_act(tBTA_HH_DEV_CB* p_cb, + UNUSED_ATTR tBTA_HH_DATA* p_data) { #if (BTA_HH_LE_INCLUDED == TRUE) - if (p_cb->is_le_device) - { - bta_hh_le_get_dscp_act(p_cb); - } - else + if (p_cb->is_le_device) { + bta_hh_le_get_dscp_act(p_cb); + } else #endif - (*bta_hh_cb.p_cback)(BTA_HH_GET_DSCP_EVT, (tBTA_HH *)&p_cb->dscp_info); + (*bta_hh_cb.p_cback)(BTA_HH_GET_DSCP_EVT, (tBTA_HH*)&p_cb->dscp_info); } /******************************************************************************* @@ -978,104 +908,89 @@ void bta_hh_get_dscp_act(tBTA_HH_DEV_CB *p_cb, * Returns void * ******************************************************************************/ -void bta_hh_maint_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_MAINT_DEV *p_dev_info = &p_data->api_maintdev; - tBTA_HH_DEV_INFO dev_info ; - uint8_t dev_handle; - - dev_info.status = BTA_HH_ERR; - dev_info.handle = BTA_HH_INVALID_HANDLE; - - switch (p_dev_info->sub_event) - { - case BTA_HH_ADD_DEV_EVT: /* add a device */ - bdcpy(dev_info.bda, p_dev_info->bda); - /* initialize callback data */ - if (p_cb->hid_handle == BTA_HH_INVALID_HANDLE) - { +void bta_hh_maint_dev_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_MAINT_DEV* p_dev_info = &p_data->api_maintdev; + tBTA_HH_DEV_INFO dev_info; + uint8_t dev_handle; + + dev_info.status = BTA_HH_ERR; + dev_info.handle = BTA_HH_INVALID_HANDLE; + + switch (p_dev_info->sub_event) { + case BTA_HH_ADD_DEV_EVT: /* add a device */ + bdcpy(dev_info.bda, p_dev_info->bda); + /* initialize callback data */ + if (p_cb->hid_handle == BTA_HH_INVALID_HANDLE) { #if (BTA_HH_LE_INCLUDED == TRUE) - if (bta_hh_is_le_device(p_cb, p_data->api_conn.bd_addr)) - { - dev_info.handle = bta_hh_le_add_device(p_cb, p_dev_info); - dev_info.status = BTA_HH_OK; - } - else + if (bta_hh_is_le_device(p_cb, p_data->api_conn.bd_addr)) { + dev_info.handle = bta_hh_le_add_device(p_cb, p_dev_info); + dev_info.status = BTA_HH_OK; + } else #endif - if (HID_HostAddDev(p_dev_info->bda, p_dev_info->attr_mask, &dev_handle)\ - == HID_SUCCESS) - { - dev_info.handle = dev_handle; - dev_info.status = BTA_HH_OK; + if (HID_HostAddDev(p_dev_info->bda, p_dev_info->attr_mask, + &dev_handle) == HID_SUCCESS) { + dev_info.handle = dev_handle; + dev_info.status = BTA_HH_OK; #if (BTA_HH_LE_INCLUDED == TRUE) - /* update DI information */ - bta_hh_update_di_info(p_cb, - p_dev_info->dscp_info.vendor_id, - p_dev_info->dscp_info.product_id, - p_dev_info->dscp_info.version, - p_dev_info->dscp_info.flag); + /* update DI information */ + bta_hh_update_di_info(p_cb, p_dev_info->dscp_info.vendor_id, + p_dev_info->dscp_info.product_id, + p_dev_info->dscp_info.version, + p_dev_info->dscp_info.flag); #else - bta_hh_update_di_info(p_cb, - p_dev_info->dscp_info.vendor_id, - p_dev_info->dscp_info.product_id, - p_dev_info->dscp_info.version, - 0); + bta_hh_update_di_info(p_cb, p_dev_info->dscp_info.vendor_id, + p_dev_info->dscp_info.product_id, + p_dev_info->dscp_info.version, 0); #endif - /* add to BTA device list */ - bta_hh_add_device_to_list(p_cb, dev_handle, - p_dev_info->attr_mask, - &p_dev_info->dscp_info.descriptor, - p_dev_info->sub_class, - p_dev_info->dscp_info.ssr_max_latency, - p_dev_info->dscp_info.ssr_min_tout, - p_dev_info->app_id); - /* update cb_index[] map */ - bta_hh_cb.cb_index[dev_handle] = p_cb->index; - } - } - else /* device already been added */ - { - dev_info.handle = p_cb->hid_handle; - dev_info.status = BTA_HH_OK; + /* add to BTA device list */ + bta_hh_add_device_to_list( + p_cb, dev_handle, p_dev_info->attr_mask, + &p_dev_info->dscp_info.descriptor, p_dev_info->sub_class, + p_dev_info->dscp_info.ssr_max_latency, + p_dev_info->dscp_info.ssr_min_tout, p_dev_info->app_id); + /* update cb_index[] map */ + bta_hh_cb.cb_index[dev_handle] = p_cb->index; } + } else /* device already been added */ + { + dev_info.handle = p_cb->hid_handle; + dev_info.status = BTA_HH_OK; + } #if (BTA_HH_DEBUG == TRUE) - bta_hh_trace_dev_db(); + bta_hh_trace_dev_db(); #endif - break; - case BTA_HH_RMV_DEV_EVT: /* remove device */ - dev_info.handle = (uint8_t)p_dev_info->hdr.layer_specific; - bdcpy(dev_info.bda, p_cb->addr); + break; + case BTA_HH_RMV_DEV_EVT: /* remove device */ + dev_info.handle = (uint8_t)p_dev_info->hdr.layer_specific; + bdcpy(dev_info.bda, p_cb->addr); #if (BTA_HH_LE_INCLUDED == TRUE) - if (p_cb->is_le_device) - { - bta_hh_le_remove_dev_bg_conn(p_cb); - bta_hh_sm_execute(p_cb, BTA_HH_API_CLOSE_EVT, NULL); - bta_hh_clean_up_kdev(p_cb); - } - else + if (p_cb->is_le_device) { + bta_hh_le_remove_dev_bg_conn(p_cb); + bta_hh_sm_execute(p_cb, BTA_HH_API_CLOSE_EVT, NULL); + bta_hh_clean_up_kdev(p_cb); + } else #endif - { - if(HID_HostRemoveDev( dev_info.handle ) == HID_SUCCESS) - { - dev_info.status = BTA_HH_OK; - - /* remove from known device list in BTA */ - bta_hh_clean_up_kdev(p_cb); - } + { + if (HID_HostRemoveDev(dev_info.handle) == HID_SUCCESS) { + dev_info.status = BTA_HH_OK; + + /* remove from known device list in BTA */ + bta_hh_clean_up_kdev(p_cb); } - break; + } + break; default: - APPL_TRACE_DEBUG("invalid command"); - break; - } + APPL_TRACE_DEBUG("invalid command"); + break; + } - (* bta_hh_cb.p_cback)(p_dev_info->sub_event, (tBTA_HH *)&dev_info); + (*bta_hh_cb.p_cback)(p_dev_info->sub_event, (tBTA_HH*)&dev_info); } /******************************************************************************* * @@ -1086,98 +1001,86 @@ void bta_hh_maint_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_write_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_CBDATA cbdata = {BTA_HH_OK, 0}; - uint16_t event = (p_data->api_sndcmd.t_type - BTA_HH_FST_BTE_TRANS_EVT) + - BTA_HH_FST_TRANS_CB_EVT; +void bta_hh_write_dev_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CBDATA cbdata = {BTA_HH_OK, 0}; + uint16_t event = (p_data->api_sndcmd.t_type - BTA_HH_FST_BTE_TRANS_EVT) + + BTA_HH_FST_TRANS_CB_EVT; #if (BTA_HH_LE_INCLUDED == TRUE) - if (p_cb->is_le_device) - bta_hh_le_write_dev_act(p_cb, p_data); - else + if (p_cb->is_le_device) + bta_hh_le_write_dev_act(p_cb, p_data); + else #endif - { + { cbdata.handle = p_cb->hid_handle; /* match up BTE/BTA report/boot mode def */ - if (p_data->api_sndcmd.t_type == HID_TRANS_SET_PROTOCOL) - { - p_data->api_sndcmd.param = ( p_data->api_sndcmd.param == BTA_HH_PROTO_RPT_MODE) ?\ - HID_PAR_PROTOCOL_REPORT :HID_PAR_PROTOCOL_BOOT_MODE; + if (p_data->api_sndcmd.t_type == HID_TRANS_SET_PROTOCOL) { + p_data->api_sndcmd.param = + (p_data->api_sndcmd.param == BTA_HH_PROTO_RPT_MODE) + ? HID_PAR_PROTOCOL_REPORT + : HID_PAR_PROTOCOL_BOOT_MODE; } - if (HID_HostWriteDev (p_cb->hid_handle, - p_data->api_sndcmd.t_type, - p_data->api_sndcmd.param, - p_data->api_sndcmd.data, - p_data->api_sndcmd.rpt_id, - p_data->api_sndcmd.p_data) != HID_SUCCESS) - { - APPL_TRACE_ERROR("HID_HostWriteDev Error "); - cbdata.status = BTA_HH_ERR; - - if (p_data->api_sndcmd.t_type != HID_TRANS_CONTROL && - p_data->api_sndcmd.t_type != HID_TRANS_DATA) - (* bta_hh_cb.p_cback)(event, (tBTA_HH *)&cbdata); - else if (p_data->api_sndcmd.param == BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG) - (* bta_hh_cb.p_cback)(BTA_HH_VC_UNPLUG_EVT, (tBTA_HH *)&cbdata); - } - else - { - - switch(p_data->api_sndcmd.t_type) - { + if (HID_HostWriteDev(p_cb->hid_handle, p_data->api_sndcmd.t_type, + p_data->api_sndcmd.param, p_data->api_sndcmd.data, + p_data->api_sndcmd.rpt_id, + p_data->api_sndcmd.p_data) != HID_SUCCESS) { + APPL_TRACE_ERROR("HID_HostWriteDev Error "); + cbdata.status = BTA_HH_ERR; + + if (p_data->api_sndcmd.t_type != HID_TRANS_CONTROL && + p_data->api_sndcmd.t_type != HID_TRANS_DATA) + (*bta_hh_cb.p_cback)(event, (tBTA_HH*)&cbdata); + else if (p_data->api_sndcmd.param == BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG) + (*bta_hh_cb.p_cback)(BTA_HH_VC_UNPLUG_EVT, (tBTA_HH*)&cbdata); + } else { + switch (p_data->api_sndcmd.t_type) { case HID_TRANS_SET_PROTOCOL: - /* fall through */ + /* fall through */ case HID_TRANS_GET_REPORT: - /* fall through */ + /* fall through */ case HID_TRANS_SET_REPORT: - /* fall through */ + /* fall through */ case HID_TRANS_GET_PROTOCOL: - /* fall through */ + /* fall through */ case HID_TRANS_GET_IDLE: - /* fall through */ - case HID_TRANS_SET_IDLE:/* set w4_handsk event name for callback function use */ - p_cb->w4_evt = event; - break; - case HID_TRANS_DATA: /* output report */ - /* fall through */ + /* fall through */ + case HID_TRANS_SET_IDLE: /* set w4_handsk event name for callback + function use */ + p_cb->w4_evt = event; + break; + case HID_TRANS_DATA: /* output report */ + /* fall through */ case HID_TRANS_CONTROL: - /* no handshake event will be generated */ - /* if VC_UNPLUG is issued, set flag */ - if (p_data->api_sndcmd.param == BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG) - p_cb->vp = true; + /* no handshake event will be generated */ + /* if VC_UNPLUG is issued, set flag */ + if (p_data->api_sndcmd.param == BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG) + p_cb->vp = true; - break; + break; /* currently not expected */ case HID_TRANS_DATAC: default: - APPL_TRACE_DEBUG("bta_hh_write_dev_act:: cmd type = %d", - p_data->api_sndcmd.t_type); - break; - } - - /* if not control type transaction, notify PM for energy control */ - if (p_data->api_sndcmd.t_type != HID_TRANS_CONTROL) - { - /* inform PM for mode change */ - bta_sys_busy(BTA_ID_HH, p_cb->app_id, p_cb->addr); - bta_sys_idle(BTA_ID_HH, p_cb->app_id, p_cb->addr); - } - else if (p_data->api_sndcmd.param == BTA_HH_CTRL_SUSPEND) - { - bta_sys_sco_close(BTA_ID_HH, p_cb->app_id, p_cb->addr); - } - else if (p_data->api_sndcmd.param == BTA_HH_CTRL_EXIT_SUSPEND) - { - bta_sys_busy(BTA_ID_HH, p_cb->app_id, p_cb->addr); - } - } - + APPL_TRACE_DEBUG("bta_hh_write_dev_act:: cmd type = %d", + p_data->api_sndcmd.t_type); + break; + } + + /* if not control type transaction, notify PM for energy control */ + if (p_data->api_sndcmd.t_type != HID_TRANS_CONTROL) { + /* inform PM for mode change */ + bta_sys_busy(BTA_ID_HH, p_cb->app_id, p_cb->addr); + bta_sys_idle(BTA_ID_HH, p_cb->app_id, p_cb->addr); + } else if (p_data->api_sndcmd.param == BTA_HH_CTRL_SUSPEND) { + bta_sys_sco_close(BTA_ID_HH, p_cb->app_id, p_cb->addr); + } else if (p_data->api_sndcmd.param == BTA_HH_CTRL_EXIT_SUSPEND) { + bta_sys_busy(BTA_ID_HH, p_cb->app_id, p_cb->addr); + } } - return; + } + return; } /***************************************************************************** @@ -1193,64 +1096,60 @@ void bta_hh_write_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_hh_cback (uint8_t dev_handle, BD_ADDR addr, uint8_t event, - uint32_t data, BT_HDR *pdata) -{ - uint16_t sm_event = BTA_HH_INVALID_EVT; - uint8_t xx = 0; +static void bta_hh_cback(uint8_t dev_handle, BD_ADDR addr, uint8_t event, + uint32_t data, BT_HDR* pdata) { + uint16_t sm_event = BTA_HH_INVALID_EVT; + uint8_t xx = 0; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_cback::HID_event [%s]", bta_hh_hid_event_name(event)); + APPL_TRACE_DEBUG("bta_hh_cback::HID_event [%s]", + bta_hh_hid_event_name(event)); #endif - switch (event) - { + switch (event) { case HID_HDEV_EVT_OPEN: - sm_event = BTA_HH_INT_OPEN_EVT; - break; + sm_event = BTA_HH_INT_OPEN_EVT; + break; case HID_HDEV_EVT_CLOSE: - sm_event = BTA_HH_INT_CLOSE_EVT; - break; + sm_event = BTA_HH_INT_CLOSE_EVT; + break; case HID_HDEV_EVT_INTR_DATA: - sm_event = BTA_HH_INT_DATA_EVT; - break; + sm_event = BTA_HH_INT_DATA_EVT; + break; case HID_HDEV_EVT_HANDSHAKE: - sm_event = BTA_HH_INT_HANDSK_EVT; - break; + sm_event = BTA_HH_INT_HANDSK_EVT; + break; case HID_HDEV_EVT_CTRL_DATA: - sm_event = BTA_HH_INT_CTRL_DATA; - break; + sm_event = BTA_HH_INT_CTRL_DATA; + break; case HID_HDEV_EVT_RETRYING: - break; + break; case HID_HDEV_EVT_INTR_DATC: case HID_HDEV_EVT_CTRL_DATC: - /* Unhandled events: Free buffer for DATAC */ - osi_free_and_reset((void **)&pdata); - break; + /* Unhandled events: Free buffer for DATAC */ + osi_free_and_reset((void**)&pdata); + break; case HID_HDEV_EVT_VC_UNPLUG: - for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) - { - if (bta_hh_cb.kdev[xx].hid_handle == dev_handle) - { - bta_hh_cb.kdev[xx].vp = true; - break; - } + for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) { + if (bta_hh_cb.kdev[xx].hid_handle == dev_handle) { + bta_hh_cb.kdev[xx].vp = true; + break; } - break; - } - - if (sm_event != BTA_HH_INVALID_EVT) { - tBTA_HH_CBACK_DATA *p_buf = - (tBTA_HH_CBACK_DATA *)osi_malloc(sizeof(tBTA_HH_CBACK_DATA) + - sizeof(BT_HDR)); - p_buf->hdr.event = sm_event; - p_buf->hdr.layer_specific = (uint16_t)dev_handle; - p_buf->data = data; - bdcpy(p_buf->addr, addr); - p_buf->p_data = pdata; - - bta_sys_sendmsg(p_buf); - } + } + break; + } + + if (sm_event != BTA_HH_INVALID_EVT) { + tBTA_HH_CBACK_DATA* p_buf = (tBTA_HH_CBACK_DATA*)osi_malloc( + sizeof(tBTA_HH_CBACK_DATA) + sizeof(BT_HDR)); + p_buf->hdr.event = sm_event; + p_buf->hdr.layer_specific = (uint16_t)dev_handle; + p_buf->data = data; + bdcpy(p_buf->addr, addr); + p_buf->p_data = pdata; + + bta_sys_sendmsg(p_buf); + } } /******************************************************************************* @@ -1261,79 +1160,71 @@ static void bta_hh_cback (uint8_t dev_handle, BD_ADDR addr, uint8_t event, * status code * ******************************************************************************/ -static tBTA_HH_STATUS bta_hh_get_trans_status(uint32_t result) -{ - switch(result) - { - case HID_PAR_HANDSHAKE_RSP_SUCCESS : /* (0) */ - return BTA_HH_OK; - case HID_PAR_HANDSHAKE_RSP_NOT_READY : /* (1) */ - case HID_PAR_HANDSHAKE_RSP_ERR_INVALID_REP_ID: /* (2) */ - case HID_PAR_HANDSHAKE_RSP_ERR_UNSUPPORTED_REQ : /* (3) */ - case HID_PAR_HANDSHAKE_RSP_ERR_INVALID_PARAM : /* (4) */ - return (tBTA_HH_STATUS)result; - case HID_PAR_HANDSHAKE_RSP_ERR_UNKNOWN : /* (14) */ - case HID_PAR_HANDSHAKE_RSP_ERR_FATAL : /* (15) */ +static tBTA_HH_STATUS bta_hh_get_trans_status(uint32_t result) { + switch (result) { + case HID_PAR_HANDSHAKE_RSP_SUCCESS: /* (0) */ + return BTA_HH_OK; + case HID_PAR_HANDSHAKE_RSP_NOT_READY: /* (1) */ + case HID_PAR_HANDSHAKE_RSP_ERR_INVALID_REP_ID: /* (2) */ + case HID_PAR_HANDSHAKE_RSP_ERR_UNSUPPORTED_REQ: /* (3) */ + case HID_PAR_HANDSHAKE_RSP_ERR_INVALID_PARAM: /* (4) */ + return (tBTA_HH_STATUS)result; + case HID_PAR_HANDSHAKE_RSP_ERR_UNKNOWN: /* (14) */ + case HID_PAR_HANDSHAKE_RSP_ERR_FATAL: /* (15) */ default: - return BTA_HH_HS_ERROR; - break; - } + return BTA_HH_HS_ERROR; + break; + } } /***************************************************************************** * Debug Functions ****************************************************************************/ #if (BTA_HH_DEBUG == TRUE) -static const char* bta_hh_get_w4_event(uint16_t event) -{ - switch (event) - { +static const char* bta_hh_get_w4_event(uint16_t event) { + switch (event) { case BTA_HH_GET_RPT_EVT: - return "BTA_HH_GET_RPT_EVT"; + return "BTA_HH_GET_RPT_EVT"; case BTA_HH_SET_RPT_EVT: - return "BTA_HH_SET_RPT_EVT"; + return "BTA_HH_SET_RPT_EVT"; case BTA_HH_GET_PROTO_EVT: - return "BTA_HH_GET_PROTO_EVT"; + return "BTA_HH_GET_PROTO_EVT"; case BTA_HH_SET_PROTO_EVT: - return "BTA_HH_SET_PROTO_EVT"; + return "BTA_HH_SET_PROTO_EVT"; case BTA_HH_GET_IDLE_EVT: - return "BTA_HH_GET_IDLE_EVT"; + return "BTA_HH_GET_IDLE_EVT"; case BTA_HH_SET_IDLE_EVT: - return "BTA_HH_SET_IDLE_EVT"; + return "BTA_HH_SET_IDLE_EVT"; case BTA_HH_OPEN_EVT: - return "BTA_HH_OPEN_EVT"; + return "BTA_HH_OPEN_EVT"; default: - return "Unknown event"; - } - + return "Unknown event"; + } } -static const char * bta_hh_hid_event_name(uint16_t event) -{ - switch (event) - { +static const char* bta_hh_hid_event_name(uint16_t event) { + switch (event) { case HID_HDEV_EVT_OPEN: - return "HID_HDEV_EVT_OPEN"; + return "HID_HDEV_EVT_OPEN"; case HID_HDEV_EVT_CLOSE: - return "HID_HDEV_EVT_CLOSE"; + return "HID_HDEV_EVT_CLOSE"; case HID_HDEV_EVT_RETRYING: - return "HID_HDEV_EVT_RETRYING"; + return "HID_HDEV_EVT_RETRYING"; case HID_HDEV_EVT_INTR_DATA: - return "HID_HDEV_EVT_INTR_DATA"; + return "HID_HDEV_EVT_INTR_DATA"; case HID_HDEV_EVT_INTR_DATC: - return "HID_HDEV_EVT_INTR_DATC"; + return "HID_HDEV_EVT_INTR_DATC"; case HID_HDEV_EVT_CTRL_DATA: - return "HID_HDEV_EVT_CTRL_DATA"; + return "HID_HDEV_EVT_CTRL_DATA"; case HID_HDEV_EVT_CTRL_DATC: - return "HID_HDEV_EVT_CTRL_DATC"; + return "HID_HDEV_EVT_CTRL_DATC"; case HID_HDEV_EVT_HANDSHAKE: - return "HID_HDEV_EVT_HANDSHAKE"; + return "HID_HDEV_EVT_HANDSHAKE"; case HID_HDEV_EVT_VC_UNPLUG: - return "HID_HDEV_EVT_VC_UNPLUG"; + return "HID_HDEV_EVT_VC_UNPLUG"; default: - return "Unknown HID event"; - } + return "Unknown HID event"; + } } #endif #endif /* BTA_HH_INCLUDED */ - diff --git a/system/bta/hh/bta_hh_api.cc b/system/bta/hh/bta_hh_api.cc index a4c5f34bdd8..1aa32b4867c 100644 --- a/system/bta/hh/bta_hh_api.cc +++ b/system/bta/hh/bta_hh_api.cc @@ -44,11 +44,7 @@ * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_hh_reg = -{ - bta_hh_hdl_event, - BTA_HhDisable -}; +static const tBTA_SYS_REG bta_hh_reg = {bta_hh_hdl_event, BTA_HhDisable}; /******************************************************************************* * @@ -63,22 +59,20 @@ static const tBTA_SYS_REG bta_hh_reg = * Returns void * ******************************************************************************/ -void BTA_HhEnable(tBTA_SEC sec_mask, tBTA_HH_CBACK *p_cback) -{ - tBTA_HH_API_ENABLE *p_buf = - (tBTA_HH_API_ENABLE *)osi_calloc(sizeof(tBTA_HH_API_ENABLE)); +void BTA_HhEnable(tBTA_SEC sec_mask, tBTA_HH_CBACK* p_cback) { + tBTA_HH_API_ENABLE* p_buf = + (tBTA_HH_API_ENABLE*)osi_calloc(sizeof(tBTA_HH_API_ENABLE)); - LOG_INFO(LOG_TAG, "%s sec_mask:0x%x p_cback:%p", __func__, sec_mask, - p_cback); + LOG_INFO(LOG_TAG, "%s sec_mask:0x%x p_cback:%p", __func__, sec_mask, p_cback); - /* register with BTA system manager */ - bta_sys_register(BTA_ID_HH, &bta_hh_reg); + /* register with BTA system manager */ + bta_sys_register(BTA_ID_HH, &bta_hh_reg); - p_buf->hdr.event = BTA_HH_API_ENABLE_EVT; - p_buf->p_cback = p_cback; - p_buf->sec_mask = sec_mask; + p_buf->hdr.event = BTA_HH_API_ENABLE_EVT; + p_buf->p_cback = p_cback; + p_buf->sec_mask = sec_mask; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -91,14 +85,13 @@ void BTA_HhEnable(tBTA_SEC sec_mask, tBTA_HH_CBACK *p_cback) * Returns void * ******************************************************************************/ -void BTA_HhDisable(void) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_HhDisable(void) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - bta_sys_deregister(BTA_ID_HH); - p_buf->event = BTA_HH_API_DISABLE_EVT; + bta_sys_deregister(BTA_ID_HH); + p_buf->event = BTA_HH_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -110,14 +103,13 @@ void BTA_HhDisable(void) * Returns void * ******************************************************************************/ -void BTA_HhClose(uint8_t dev_handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_calloc(sizeof(BT_HDR)); +void BTA_HhClose(uint8_t dev_handle) { + BT_HDR* p_buf = (BT_HDR*)osi_calloc(sizeof(BT_HDR)); - p_buf->event = BTA_HH_API_CLOSE_EVT; - p_buf->layer_specific = (uint16_t)dev_handle; + p_buf->event = BTA_HH_API_CLOSE_EVT; + p_buf->layer_specific = (uint16_t)dev_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -130,18 +122,17 @@ void BTA_HhClose(uint8_t dev_handle) * Returns void * ******************************************************************************/ -void BTA_HhOpen(BD_ADDR dev_bda, tBTA_HH_PROTO_MODE mode, tBTA_SEC sec_mask) -{ - tBTA_HH_API_CONN *p_buf = - (tBTA_HH_API_CONN *)osi_calloc(sizeof(tBTA_HH_API_CONN)); - - p_buf->hdr.event = BTA_HH_API_OPEN_EVT; - p_buf->hdr.layer_specific = BTA_HH_INVALID_HANDLE; - p_buf->sec_mask = sec_mask; - p_buf->mode = mode; - bdcpy(p_buf->bd_addr, dev_bda); - - bta_sys_sendmsg((void *)p_buf); +void BTA_HhOpen(BD_ADDR dev_bda, tBTA_HH_PROTO_MODE mode, tBTA_SEC sec_mask) { + tBTA_HH_API_CONN* p_buf = + (tBTA_HH_API_CONN*)osi_calloc(sizeof(tBTA_HH_API_CONN)); + + p_buf->hdr.event = BTA_HH_API_OPEN_EVT; + p_buf->hdr.layer_specific = BTA_HH_INVALID_HANDLE; + p_buf->sec_mask = sec_mask; + p_buf->mode = mode; + bdcpy(p_buf->bd_addr, dev_bda); + + bta_sys_sendmsg((void*)p_buf); } /******************************************************************************* @@ -149,21 +140,21 @@ void BTA_HhOpen(BD_ADDR dev_bda, tBTA_HH_PROTO_MODE mode, tBTA_SEC sec_mask) * Function bta_hh_snd_write_dev * ******************************************************************************/ -static void bta_hh_snd_write_dev(uint8_t dev_handle, uint8_t t_type, uint8_t param, - uint16_t data, uint8_t rpt_id, BT_HDR *p_data) -{ - tBTA_HH_CMD_DATA *p_buf = - (tBTA_HH_CMD_DATA *)osi_calloc(sizeof(tBTA_HH_CMD_DATA)); - - p_buf->hdr.event = BTA_HH_API_WRITE_DEV_EVT; - p_buf->hdr.layer_specific = (uint16_t)dev_handle; - p_buf->t_type = t_type; - p_buf->data = data; - p_buf->param = param; - p_buf->p_data = p_data; - p_buf->rpt_id = rpt_id; - - bta_sys_sendmsg(p_buf); +static void bta_hh_snd_write_dev(uint8_t dev_handle, uint8_t t_type, + uint8_t param, uint16_t data, uint8_t rpt_id, + BT_HDR* p_data) { + tBTA_HH_CMD_DATA* p_buf = + (tBTA_HH_CMD_DATA*)osi_calloc(sizeof(tBTA_HH_CMD_DATA)); + + p_buf->hdr.event = BTA_HH_API_WRITE_DEV_EVT; + p_buf->hdr.layer_specific = (uint16_t)dev_handle; + p_buf->t_type = t_type; + p_buf->data = data; + p_buf->param = param; + p_buf->p_data = p_data; + p_buf->rpt_id = rpt_id; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -178,9 +169,9 @@ static void bta_hh_snd_write_dev(uint8_t dev_handle, uint8_t t_type, uint8_t par * Returns void * ******************************************************************************/ -void BTA_HhSetReport(uint8_t dev_handle, tBTA_HH_RPT_TYPE r_type, BT_HDR *p_data) -{ - bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_REPORT, r_type, 0, 0, p_data); +void BTA_HhSetReport(uint8_t dev_handle, tBTA_HH_RPT_TYPE r_type, + BT_HDR* p_data) { + bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_REPORT, r_type, 0, 0, p_data); } /******************************************************************************* * @@ -191,12 +182,12 @@ void BTA_HhSetReport(uint8_t dev_handle, tBTA_HH_RPT_TYPE r_type, BT_HDR *p_data * Returns void * ******************************************************************************/ -void BTA_HhGetReport(uint8_t dev_handle, tBTA_HH_RPT_TYPE r_type, uint8_t rpt_id, uint16_t buf_size) -{ - uint8_t param = (buf_size) ? (r_type | 0x08) : r_type; +void BTA_HhGetReport(uint8_t dev_handle, tBTA_HH_RPT_TYPE r_type, + uint8_t rpt_id, uint16_t buf_size) { + uint8_t param = (buf_size) ? (r_type | 0x08) : r_type; - bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_REPORT, param, - buf_size, rpt_id, NULL); + bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_REPORT, param, buf_size, + rpt_id, NULL); } /******************************************************************************* * @@ -207,10 +198,9 @@ void BTA_HhGetReport(uint8_t dev_handle, tBTA_HH_RPT_TYPE r_type, uint8_t rpt_id * Returns void * ******************************************************************************/ -void BTA_HhSetProtoMode(uint8_t dev_handle, tBTA_HH_PROTO_MODE p_type) -{ - bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_PROTOCOL, (uint8_t)p_type, - 0, 0, NULL); +void BTA_HhSetProtoMode(uint8_t dev_handle, tBTA_HH_PROTO_MODE p_type) { + bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_PROTOCOL, (uint8_t)p_type, 0, + 0, NULL); } /******************************************************************************* * @@ -221,9 +211,8 @@ void BTA_HhSetProtoMode(uint8_t dev_handle, tBTA_HH_PROTO_MODE p_type) * Returns void * ******************************************************************************/ -void BTA_HhGetProtoMode(uint8_t dev_handle) -{ - bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_PROTOCOL, 0, 0, 0, NULL); +void BTA_HhGetProtoMode(uint8_t dev_handle) { + bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_PROTOCOL, 0, 0, 0, NULL); } /******************************************************************************* * @@ -234,9 +223,8 @@ void BTA_HhGetProtoMode(uint8_t dev_handle) * Returns void * ******************************************************************************/ -void BTA_HhSetIdle(uint8_t dev_handle, uint16_t idle_rate) -{ - bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_IDLE, 0, idle_rate, 0, NULL); +void BTA_HhSetIdle(uint8_t dev_handle, uint16_t idle_rate) { + bta_hh_snd_write_dev(dev_handle, HID_TRANS_SET_IDLE, 0, idle_rate, 0, NULL); } /******************************************************************************* @@ -248,9 +236,8 @@ void BTA_HhSetIdle(uint8_t dev_handle, uint16_t idle_rate) * Returns void * ******************************************************************************/ -void BTA_HhGetIdle(uint8_t dev_handle) -{ - bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_IDLE, 0, 0, 0, NULL); +void BTA_HhGetIdle(uint8_t dev_handle) { + bta_hh_snd_write_dev(dev_handle, HID_TRANS_GET_IDLE, 0, 0, 0, NULL); } /******************************************************************************* * @@ -261,9 +248,9 @@ void BTA_HhGetIdle(uint8_t dev_handle) * Returns void * ******************************************************************************/ -void BTA_HhSendCtrl(uint8_t dev_handle, tBTA_HH_TRANS_CTRL_TYPE c_type) -{ - bta_hh_snd_write_dev(dev_handle, HID_TRANS_CONTROL, (uint8_t)c_type, 0, 0, NULL); +void BTA_HhSendCtrl(uint8_t dev_handle, tBTA_HH_TRANS_CTRL_TYPE c_type) { + bta_hh_snd_write_dev(dev_handle, HID_TRANS_CONTROL, (uint8_t)c_type, 0, 0, + NULL); } /******************************************************************************* * @@ -274,26 +261,31 @@ void BTA_HhSendCtrl(uint8_t dev_handle, tBTA_HH_TRANS_CTRL_TYPE c_type) * Parameter dev_handle: device handle * dev_bda: remote device address * p_data: data to be sent in the DATA transaction; or - * the data to be write into the Output Report of a LE HID - * device. The report is identified the report ID which is - * the value of the byte (uint8_t *)(p_buf + 1) + p_buf->offset. - * p_data->layer_specific needs to be set to the report type, + * the data to be write into the Output Report of a LE + *HID + * device. The report is identified the report ID which + *is + * the value of the byte (uint8_t *)(p_buf + 1) + + *p_buf->offset. + * p_data->layer_specific needs to be set to the report + *type, * it can be OUTPUT report, or FEATURE report. * * Returns void * ******************************************************************************/ -void BTA_HhSendData(uint8_t dev_handle, - UNUSED_ATTR BD_ADDR dev_bda, BT_HDR *p_data) -{ +void BTA_HhSendData(uint8_t dev_handle, UNUSED_ATTR BD_ADDR dev_bda, + BT_HDR* p_data) { #if (BTA_HH_LE_INCLUDED == TRUE) - if (p_data->layer_specific != BTA_HH_RPTT_OUTPUT) - { - APPL_TRACE_ERROR("ERROR! Wrong report type! Write Command only valid for output report!"); - return; - } + if (p_data->layer_specific != BTA_HH_RPTT_OUTPUT) { + APPL_TRACE_ERROR( + "ERROR! Wrong report type! Write Command only valid for output " + "report!"); + return; + } #endif - bta_hh_snd_write_dev(dev_handle, HID_TRANS_DATA, (uint8_t)p_data->layer_specific, 0, 0, p_data); + bta_hh_snd_write_dev(dev_handle, HID_TRANS_DATA, + (uint8_t)p_data->layer_specific, 0, 0, p_data); } /******************************************************************************* @@ -305,14 +297,13 @@ void BTA_HhSendData(uint8_t dev_handle, * Returns void * ******************************************************************************/ -void BTA_HhGetDscpInfo(uint8_t dev_handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_calloc(sizeof(BT_HDR)); +void BTA_HhGetDscpInfo(uint8_t dev_handle) { + BT_HDR* p_buf = (BT_HDR*)osi_calloc(sizeof(BT_HDR)); - p_buf->event = BTA_HH_API_GET_DSCP_EVT; - p_buf->layer_specific = (uint16_t)dev_handle; + p_buf->event = BTA_HH_API_GET_DSCP_EVT; + p_buf->layer_specific = (uint16_t)dev_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -328,33 +319,31 @@ void BTA_HhGetDscpInfo(uint8_t dev_handle) * ******************************************************************************/ void BTA_HhAddDev(BD_ADDR bda, tBTA_HH_ATTR_MASK attr_mask, uint8_t sub_class, - uint8_t app_id, tBTA_HH_DEV_DSCP_INFO dscp_info) -{ - size_t len = sizeof(tBTA_HH_MAINT_DEV) + dscp_info.descriptor.dl_len; - tBTA_HH_MAINT_DEV *p_buf = (tBTA_HH_MAINT_DEV *)osi_calloc(len); - - p_buf->hdr.event = BTA_HH_API_MAINT_DEV_EVT; - p_buf->sub_event = BTA_HH_ADD_DEV_EVT; - p_buf->hdr.layer_specific = BTA_HH_INVALID_HANDLE; - - p_buf->attr_mask = (uint16_t) attr_mask; - p_buf->sub_class = sub_class; - p_buf->app_id = app_id; - bdcpy(p_buf->bda, bda); - - memcpy(&p_buf->dscp_info, &dscp_info, sizeof(tBTA_HH_DEV_DSCP_INFO)); - if ( dscp_info.descriptor.dl_len != 0 && dscp_info.descriptor.dsc_list) { - p_buf->dscp_info.descriptor.dl_len = dscp_info.descriptor.dl_len; - p_buf->dscp_info.descriptor.dsc_list = (uint8_t *)(p_buf + 1); - memcpy(p_buf->dscp_info.descriptor.dsc_list, - dscp_info.descriptor.dsc_list, - dscp_info.descriptor.dl_len); - } else { - p_buf->dscp_info.descriptor.dsc_list = NULL; - p_buf->dscp_info.descriptor.dl_len = 0; - } - - bta_sys_sendmsg(p_buf); + uint8_t app_id, tBTA_HH_DEV_DSCP_INFO dscp_info) { + size_t len = sizeof(tBTA_HH_MAINT_DEV) + dscp_info.descriptor.dl_len; + tBTA_HH_MAINT_DEV* p_buf = (tBTA_HH_MAINT_DEV*)osi_calloc(len); + + p_buf->hdr.event = BTA_HH_API_MAINT_DEV_EVT; + p_buf->sub_event = BTA_HH_ADD_DEV_EVT; + p_buf->hdr.layer_specific = BTA_HH_INVALID_HANDLE; + + p_buf->attr_mask = (uint16_t)attr_mask; + p_buf->sub_class = sub_class; + p_buf->app_id = app_id; + bdcpy(p_buf->bda, bda); + + memcpy(&p_buf->dscp_info, &dscp_info, sizeof(tBTA_HH_DEV_DSCP_INFO)); + if (dscp_info.descriptor.dl_len != 0 && dscp_info.descriptor.dsc_list) { + p_buf->dscp_info.descriptor.dl_len = dscp_info.descriptor.dl_len; + p_buf->dscp_info.descriptor.dsc_list = (uint8_t*)(p_buf + 1); + memcpy(p_buf->dscp_info.descriptor.dsc_list, dscp_info.descriptor.dsc_list, + dscp_info.descriptor.dl_len); + } else { + p_buf->dscp_info.descriptor.dsc_list = NULL; + p_buf->dscp_info.descriptor.dl_len = 0; + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -366,22 +355,19 @@ void BTA_HhAddDev(BD_ADDR bda, tBTA_HH_ATTR_MASK attr_mask, uint8_t sub_class, * Returns void * ******************************************************************************/ -void BTA_HhRemoveDev(uint8_t dev_handle ) -{ - tBTA_HH_MAINT_DEV *p_buf = - (tBTA_HH_MAINT_DEV *)osi_calloc(sizeof(tBTA_HH_MAINT_DEV)); +void BTA_HhRemoveDev(uint8_t dev_handle) { + tBTA_HH_MAINT_DEV* p_buf = + (tBTA_HH_MAINT_DEV*)osi_calloc(sizeof(tBTA_HH_MAINT_DEV)); - p_buf->hdr.event = BTA_HH_API_MAINT_DEV_EVT; - p_buf->sub_event = BTA_HH_RMV_DEV_EVT; - p_buf->hdr.layer_specific = (uint16_t)dev_handle; + p_buf->hdr.event = BTA_HH_API_MAINT_DEV_EVT; + p_buf->sub_event = BTA_HH_RMV_DEV_EVT; + p_buf->hdr.layer_specific = (uint16_t)dev_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } - - /*******************************************************************************/ -/* Utility Function */ +/* Utility Function */ /*******************************************************************************/ /******************************************************************************* @@ -397,33 +383,32 @@ void BTA_HhRemoveDev(uint8_t dev_handle ) * Returns void * ******************************************************************************/ -void BTA_HhParseBootRpt(tBTA_HH_BOOT_RPT *p_data, uint8_t *p_report, - uint16_t report_len) -{ - p_data->dev_type = BTA_HH_DEVT_UNKNOWN; - - if (p_report) - { - /* first byte is report ID */ - switch (p_report[0]) - { - case BTA_HH_KEYBD_RPT_ID: /* key board report ID */ - p_data->dev_type = p_report[0]; - bta_hh_parse_keybd_rpt(p_data, p_report + 1, (uint16_t)(report_len -1)); - break; - - case BTA_HH_MOUSE_RPT_ID: /* mouse report ID */ - p_data->dev_type = p_report[0]; - bta_hh_parse_mice_rpt(p_data, p_report + 1, (uint16_t)(report_len - 1)); - break; - - default: - APPL_TRACE_DEBUG("Unknown boot report: %d", p_report[0]);; - break; - } +void BTA_HhParseBootRpt(tBTA_HH_BOOT_RPT* p_data, uint8_t* p_report, + uint16_t report_len) { + p_data->dev_type = BTA_HH_DEVT_UNKNOWN; + + if (p_report) { + /* first byte is report ID */ + switch (p_report[0]) { + case BTA_HH_KEYBD_RPT_ID: /* key board report ID */ + p_data->dev_type = p_report[0]; + bta_hh_parse_keybd_rpt(p_data, p_report + 1, + (uint16_t)(report_len - 1)); + break; + + case BTA_HH_MOUSE_RPT_ID: /* mouse report ID */ + p_data->dev_type = p_report[0]; + bta_hh_parse_mice_rpt(p_data, p_report + 1, (uint16_t)(report_len - 1)); + break; + + default: + APPL_TRACE_DEBUG("Unknown boot report: %d", p_report[0]); + ; + break; } + } - return; + return; } #endif /* BTA_HH_INCLUDED */ diff --git a/system/bta/hh/bta_hh_cfg.cc b/system/bta/hh/bta_hh_cfg.cc index ae4650f8cc1..9479e8b9615 100644 --- a/system/bta/hh/bta_hh_cfg.cc +++ b/system/bta/hh/bta_hh_cfg.cc @@ -27,36 +27,29 @@ #include "bta_hh_api.h" /* max number of device types supported by BTA */ -#define BTA_HH_MAX_DEVT_SPT 9 +#define BTA_HH_MAX_DEVT_SPT 9 /* size of database for service discovery */ #ifndef BTA_HH_DISC_BUF_SIZE -#define BTA_HH_DISC_BUF_SIZE BT_DEFAULT_BUFFER_SIZE +#define BTA_HH_DISC_BUF_SIZE BT_DEFAULT_BUFFER_SIZE #endif - - /* The type of devices supported by BTA HH and corresponding application ID */ -tBTA_HH_SPT_TOD p_devt_list[BTA_HH_MAX_DEVT_SPT] = -{ +tBTA_HH_SPT_TOD p_devt_list[BTA_HH_MAX_DEVT_SPT] = { {BTA_HH_DEVT_MIC, BTA_HH_APP_ID_MI}, {BTA_HH_DEVT_KBD, BTA_HH_APP_ID_KB}, - {BTA_HH_DEVT_KBD|BTA_HH_DEVT_MIC, BTA_HH_APP_ID_KB}, + {BTA_HH_DEVT_KBD | BTA_HH_DEVT_MIC, BTA_HH_APP_ID_KB}, {BTA_HH_DEVT_RMC, BTA_HH_APP_ID_RMC}, {BTA_HH_DEVT_RMC | BTA_HH_DEVT_KBD, BTA_HH_APP_ID_RMC}, {BTA_HH_DEVT_MIC | BTA_HH_DEVT_DGT, BTA_HH_APP_ID_MI}, {BTA_HH_DEVT_JOS, BTA_HH_APP_ID_JOY}, {BTA_HH_DEVT_GPD, BTA_HH_APP_ID_GPAD}, - {BTA_HH_DEVT_UNKNOWN, BTA_HH_APP_ID_3DSG} -}; + {BTA_HH_DEVT_UNKNOWN, BTA_HH_APP_ID_3DSG}}; - -const tBTA_HH_CFG bta_hh_cfg = -{ - BTA_HH_MAX_DEVT_SPT, /* number of supported type of devices */ - p_devt_list, /* ToD & AppID list */ - BTA_HH_DISC_BUF_SIZE /* HH SDP discovery database size */ +const tBTA_HH_CFG bta_hh_cfg = { + BTA_HH_MAX_DEVT_SPT, /* number of supported type of devices */ + p_devt_list, /* ToD & AppID list */ + BTA_HH_DISC_BUF_SIZE /* HH SDP discovery database size */ }; - -tBTA_HH_CFG *p_bta_hh_cfg = (tBTA_HH_CFG *)&bta_hh_cfg; +tBTA_HH_CFG* p_bta_hh_cfg = (tBTA_HH_CFG*)&bta_hh_cfg; diff --git a/system/bta/hh/bta_hh_int.h b/system/bta/hh/bta_hh_int.h index 5f9da6e3702..0edbf60ec00 100644 --- a/system/bta/hh/bta_hh_int.h +++ b/system/bta/hh/bta_hh_int.h @@ -25,365 +25,364 @@ #ifndef BTA_HH_INT_H #define BTA_HH_INT_H +#include "bta_hh_api.h" #include "bta_sys.h" #include "utl.h" -#include "bta_hh_api.h" #if (BTA_HH_LE_INCLUDED == TRUE) #include "bta_gatt_api.h" #endif /* can be moved to bta_api.h */ -#define BTA_HH_MAX_RPT_CHARS 8 +#define BTA_HH_MAX_RPT_CHARS 8 #if (BTA_GATT_INCLUDED == FALSE || BLE_INCLUDED == FALSE) #undef BTA_HH_LE_INCLUDED -#define BTA_HH_LE_INCLUDED false +#define BTA_HH_LE_INCLUDED false #endif /* state machine events, these events are handled by the state machine */ -enum -{ - BTA_HH_API_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_HH), - BTA_HH_API_CLOSE_EVT, - BTA_HH_INT_OPEN_EVT, - BTA_HH_INT_CLOSE_EVT, - BTA_HH_INT_DATA_EVT, - BTA_HH_INT_CTRL_DATA, - BTA_HH_INT_HANDSK_EVT, - BTA_HH_SDP_CMPL_EVT, - BTA_HH_API_WRITE_DEV_EVT, - BTA_HH_API_GET_DSCP_EVT, - BTA_HH_API_MAINT_DEV_EVT, - BTA_HH_OPEN_CMPL_EVT, +enum { + BTA_HH_API_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_HH), + BTA_HH_API_CLOSE_EVT, + BTA_HH_INT_OPEN_EVT, + BTA_HH_INT_CLOSE_EVT, + BTA_HH_INT_DATA_EVT, + BTA_HH_INT_CTRL_DATA, + BTA_HH_INT_HANDSK_EVT, + BTA_HH_SDP_CMPL_EVT, + BTA_HH_API_WRITE_DEV_EVT, + BTA_HH_API_GET_DSCP_EVT, + BTA_HH_API_MAINT_DEV_EVT, + BTA_HH_OPEN_CMPL_EVT, #if (BTA_HH_LE_INCLUDED == TRUE) - BTA_HH_GATT_CLOSE_EVT, - BTA_HH_GATT_OPEN_EVT, - BTA_HH_START_ENC_EVT, - BTA_HH_ENC_CMPL_EVT, - BTA_HH_GATT_ENC_CMPL_EVT, + BTA_HH_GATT_CLOSE_EVT, + BTA_HH_GATT_OPEN_EVT, + BTA_HH_START_ENC_EVT, + BTA_HH_ENC_CMPL_EVT, + BTA_HH_GATT_ENC_CMPL_EVT, #endif - /* not handled by execute state machine */ - BTA_HH_API_ENABLE_EVT, - BTA_HH_API_DISABLE_EVT, - BTA_HH_DISC_CMPL_EVT + /* not handled by execute state machine */ + BTA_HH_API_ENABLE_EVT, + BTA_HH_API_DISABLE_EVT, + BTA_HH_DISC_CMPL_EVT }; -typedef uint16_t tBTA_HH_INT_EVT; /* HID host internal events */ +typedef uint16_t tBTA_HH_INT_EVT; /* HID host internal events */ -#define BTA_HH_INVALID_EVT (BTA_HH_DISC_CMPL_EVT + 1) +#define BTA_HH_INVALID_EVT (BTA_HH_DISC_CMPL_EVT + 1) /* event used to map between BTE event and BTA event */ -#define BTA_HH_FST_TRANS_CB_EVT BTA_HH_GET_RPT_EVT -#define BTA_HH_FST_BTE_TRANS_EVT HID_TRANS_GET_REPORT +#define BTA_HH_FST_TRANS_CB_EVT BTA_HH_GET_RPT_EVT +#define BTA_HH_FST_BTE_TRANS_EVT HID_TRANS_GET_REPORT /* sub event code used for device maintainence API call */ -#define BTA_HH_ADD_DEV 0 -#define BTA_HH_REMOVE_DEV 1 +#define BTA_HH_ADD_DEV 0 +#define BTA_HH_REMOVE_DEV 1 /* state machine states */ -enum -{ - BTA_HH_NULL_ST, - BTA_HH_IDLE_ST, - BTA_HH_W4_CONN_ST, - BTA_HH_CONN_ST +enum { + BTA_HH_NULL_ST, + BTA_HH_IDLE_ST, + BTA_HH_W4_CONN_ST, + BTA_HH_CONN_ST #if (BTA_HH_LE_INCLUDED == TRUE) - ,BTA_HH_W4_SEC + , + BTA_HH_W4_SEC #endif - ,BTA_HH_INVALID_ST /* Used to check invalid states before executing SM function */ + , + BTA_HH_INVALID_ST /* Used to check invalid states before executing SM function + */ }; typedef uint8_t tBTA_HH_STATE; /* data structure used to send a command/data to HID device */ -typedef struct -{ - BT_HDR hdr; - uint8_t t_type; - uint8_t param; - uint8_t rpt_id; +typedef struct { + BT_HDR hdr; + uint8_t t_type; + uint8_t param; + uint8_t rpt_id; #if (BTA_HH_LE_INCLUDED == TRUE) - uint8_t srvc_id; + uint8_t srvc_id; #endif - uint16_t data; - BT_HDR *p_data; -}tBTA_HH_CMD_DATA; + uint16_t data; + BT_HDR* p_data; +} tBTA_HH_CMD_DATA; /* data type for BTA_HH_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; - uint8_t sec_mask; - uint8_t service_name[BTA_SERVICE_NAME_LEN+1]; - tBTA_HH_CBACK *p_cback; +typedef struct { + BT_HDR hdr; + uint8_t sec_mask; + uint8_t service_name[BTA_SERVICE_NAME_LEN + 1]; + tBTA_HH_CBACK* p_cback; } tBTA_HH_API_ENABLE; -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - uint8_t sec_mask; - tBTA_HH_PROTO_MODE mode; -}tBTA_HH_API_CONN; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + uint8_t sec_mask; + tBTA_HH_PROTO_MODE mode; +} tBTA_HH_API_CONN; /* internal event data from BTE HID callback */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR addr; - uint32_t data; - BT_HDR *p_data; -}tBTA_HH_CBACK_DATA; - -typedef struct -{ - BT_HDR hdr; - BD_ADDR bda; - uint16_t attr_mask; - uint16_t sub_event; - uint8_t sub_class; - uint8_t app_id; - tBTA_HH_DEV_DSCP_INFO dscp_info; -}tBTA_HH_MAINT_DEV; +typedef struct { + BT_HDR hdr; + BD_ADDR addr; + uint32_t data; + BT_HDR* p_data; +} tBTA_HH_CBACK_DATA; + +typedef struct { + BT_HDR hdr; + BD_ADDR bda; + uint16_t attr_mask; + uint16_t sub_event; + uint8_t sub_class; + uint8_t app_id; + tBTA_HH_DEV_DSCP_INFO dscp_info; +} tBTA_HH_MAINT_DEV; #if (BTA_HH_LE_INCLUDED == TRUE) -typedef struct -{ - BT_HDR hdr; - uint16_t conn_id; - tBTA_GATT_REASON reason; /* disconnect reason code, not useful when connect event is reported */ - -}tBTA_HH_LE_CLOSE; - -typedef struct -{ - BT_HDR hdr; - uint16_t scan_int; - uint16_t scan_win; -}tBTA_HH_SCPP_UPDATE; +typedef struct { + BT_HDR hdr; + uint16_t conn_id; + tBTA_GATT_REASON reason; /* disconnect reason code, not useful when connect + event is reported */ + +} tBTA_HH_LE_CLOSE; + +typedef struct { + BT_HDR hdr; + uint16_t scan_int; + uint16_t scan_win; +} tBTA_HH_SCPP_UPDATE; #endif /* union of all event data types */ -typedef union -{ - BT_HDR hdr; - tBTA_HH_API_ENABLE api_enable; - tBTA_HH_API_CONN api_conn; - tBTA_HH_CMD_DATA api_sndcmd; - tBTA_HH_CBACK_DATA hid_cback; - tBTA_HH_STATUS status; - tBTA_HH_MAINT_DEV api_maintdev; +typedef union { + BT_HDR hdr; + tBTA_HH_API_ENABLE api_enable; + tBTA_HH_API_CONN api_conn; + tBTA_HH_CMD_DATA api_sndcmd; + tBTA_HH_CBACK_DATA hid_cback; + tBTA_HH_STATUS status; + tBTA_HH_MAINT_DEV api_maintdev; #if (BTA_HH_LE_INCLUDED == TRUE) - tBTA_HH_LE_CLOSE le_close; - tBTA_GATTC_OPEN le_open; - tBTA_HH_SCPP_UPDATE le_scpp_update; - tBTA_GATTC_ENC_CMPL_CB le_enc_cmpl; + tBTA_HH_LE_CLOSE le_close; + tBTA_GATTC_OPEN le_open; + tBTA_HH_SCPP_UPDATE le_scpp_update; + tBTA_GATTC_ENC_CMPL_CB le_enc_cmpl; #endif } tBTA_HH_DATA; #if (BTA_HH_LE_INCLUDED == TRUE) -typedef struct -{ - uint8_t index; - bool in_use; - uint8_t srvc_inst_id; - uint8_t char_inst_id; - tBTA_HH_RPT_TYPE rpt_type; - uint16_t uuid; - uint8_t rpt_id; - bool client_cfg_exist; - uint16_t client_cfg_value; -}tBTA_HH_LE_RPT; +typedef struct { + uint8_t index; + bool in_use; + uint8_t srvc_inst_id; + uint8_t char_inst_id; + tBTA_HH_RPT_TYPE rpt_type; + uint16_t uuid; + uint8_t rpt_id; + bool client_cfg_exist; + uint16_t client_cfg_value; +} tBTA_HH_LE_RPT; #ifndef BTA_HH_LE_RPT_MAX -#define BTA_HH_LE_RPT_MAX 20 +#define BTA_HH_LE_RPT_MAX 20 #endif -typedef struct -{ - bool in_use; - uint8_t srvc_inst_id; - tBTA_HH_LE_RPT report[BTA_HH_LE_RPT_MAX]; +typedef struct { + bool in_use; + uint8_t srvc_inst_id; + tBTA_HH_LE_RPT report[BTA_HH_LE_RPT_MAX]; - uint16_t proto_mode_handle; - uint8_t control_point_handle; + uint16_t proto_mode_handle; + uint8_t control_point_handle; - uint8_t incl_srvc_inst; /* assuming only one included service : battery service */ - uint8_t cur_expl_char_idx; /* currently discovering service index */ - uint8_t *rpt_map; - uint16_t ext_rpt_ref; - tBTA_HH_DEV_DESCR descriptor; + uint8_t + incl_srvc_inst; /* assuming only one included service : battery service */ + uint8_t cur_expl_char_idx; /* currently discovering service index */ + uint8_t* rpt_map; + uint16_t ext_rpt_ref; + tBTA_HH_DEV_DESCR descriptor; -}tBTA_HH_LE_HID_SRVC; +} tBTA_HH_LE_HID_SRVC; /* convert a HID handle to the LE CB index */ -#define BTA_HH_GET_LE_CB_IDX(x) (((x) >> 4) - 1) -/* convert a GATT connection ID to HID device handle, it is the hi 4 bits of a uint8_t */ -#define BTA_HH_GET_LE_DEV_HDL(x) (uint8_t)(((x) + 1) << 4) +#define BTA_HH_GET_LE_CB_IDX(x) (((x) >> 4) - 1) +/* convert a GATT connection ID to HID device handle, it is the hi 4 bits of a + * uint8_t */ +#define BTA_HH_GET_LE_DEV_HDL(x) (uint8_t)(((x) + 1) << 4) /* check to see if th edevice handle is a LE device handle */ -#define BTA_HH_IS_LE_DEV_HDL(x) ((x) & 0xf0) -#define BTA_HH_IS_LE_DEV_HDL_VALID(x) (((x)>>4) <= BTA_HH_LE_MAX_KNOWN) +#define BTA_HH_IS_LE_DEV_HDL(x) ((x)&0xf0) +#define BTA_HH_IS_LE_DEV_HDL_VALID(x) (((x) >> 4) <= BTA_HH_LE_MAX_KNOWN) #endif /* device control block */ -typedef struct -{ - tBTA_HH_DEV_DSCP_INFO dscp_info; /* report descriptor and DI information */ - BD_ADDR addr; /* BD-Addr of the HID device */ - uint16_t attr_mask; /* attribute mask */ - uint16_t w4_evt; /* W4_handshake event name */ - uint8_t index; /* index number referenced to handle index */ - uint8_t sub_class; /* Cod sub class */ - uint8_t sec_mask; /* security mask */ - uint8_t app_id; /* application ID for this connection */ - uint8_t hid_handle; /* device handle : low 4 bits for regular HID: HID_HOST_MAX_DEVICES can not exceed 15; - high 4 bits for LE HID: GATT_MAX_PHY_CHANNEL can not exceed 15 */ - bool vp; /* virtually unplug flag */ - bool in_use; /* control block currently in use */ - bool incoming_conn; /* is incoming connection? */ - uint8_t incoming_hid_handle; /* temporary handle for incoming connection? */ - bool opened; /* true if device successfully opened HID connection */ - tBTA_HH_PROTO_MODE mode; /* protocol mode */ - tBTA_HH_STATE state; /* CB state */ +typedef struct { + tBTA_HH_DEV_DSCP_INFO dscp_info; /* report descriptor and DI information */ + BD_ADDR addr; /* BD-Addr of the HID device */ + uint16_t attr_mask; /* attribute mask */ + uint16_t w4_evt; /* W4_handshake event name */ + uint8_t index; /* index number referenced to handle index */ + uint8_t sub_class; /* Cod sub class */ + uint8_t sec_mask; /* security mask */ + uint8_t app_id; /* application ID for this connection */ + uint8_t hid_handle; /* device handle : low 4 bits for regular HID: + HID_HOST_MAX_DEVICES can not exceed 15; + high 4 bits for LE HID: + GATT_MAX_PHY_CHANNEL can not exceed 15 */ + bool vp; /* virtually unplug flag */ + bool in_use; /* control block currently in use */ + bool incoming_conn; /* is incoming connection? */ + uint8_t incoming_hid_handle; /* temporary handle for incoming connection? */ + bool opened; /* true if device successfully opened HID connection */ + tBTA_HH_PROTO_MODE mode; /* protocol mode */ + tBTA_HH_STATE state; /* CB state */ #if (BTA_HH_LE_INCLUDED == TRUE) -#define BTA_HH_LE_DISC_NONE 0x00 -#define BTA_HH_LE_DISC_HIDS 0x01 -#define BTA_HH_LE_DISC_DIS 0x02 -#define BTA_HH_LE_DISC_SCPS 0x04 - - uint8_t disc_active; - tBTA_HH_STATUS status; - tBTA_GATT_REASON reason; - bool is_le_device; - tBTA_HH_LE_HID_SRVC hid_srvc; - uint16_t conn_id; - bool in_bg_conn; - uint8_t clt_cfg_idx; - uint16_t scan_refresh_char_handle; - bool scps_supported; - -#define BTA_HH_LE_SCPS_NOTIFY_NONE 0 -#define BTA_HH_LE_SCPS_NOTIFY_SPT 0x01 -#define BTA_HH_LE_SCPS_NOTIFY_ENB 0x02 - uint8_t scps_notify; /* scan refresh supported/notification enabled */ +#define BTA_HH_LE_DISC_NONE 0x00 +#define BTA_HH_LE_DISC_HIDS 0x01 +#define BTA_HH_LE_DISC_DIS 0x02 +#define BTA_HH_LE_DISC_SCPS 0x04 + + uint8_t disc_active; + tBTA_HH_STATUS status; + tBTA_GATT_REASON reason; + bool is_le_device; + tBTA_HH_LE_HID_SRVC hid_srvc; + uint16_t conn_id; + bool in_bg_conn; + uint8_t clt_cfg_idx; + uint16_t scan_refresh_char_handle; + bool scps_supported; + +#define BTA_HH_LE_SCPS_NOTIFY_NONE 0 +#define BTA_HH_LE_SCPS_NOTIFY_SPT 0x01 +#define BTA_HH_LE_SCPS_NOTIFY_ENB 0x02 + uint8_t scps_notify; /* scan refresh supported/notification enabled */ #endif - bool security_pending; + bool security_pending; } tBTA_HH_DEV_CB; /* key board parsing control block */ -typedef struct -{ - bool mod_key[4]; /* ctrl, shift(upper), Alt, GUI */ - bool num_lock; - bool caps_lock; - uint8_t last_report[BTA_HH_MAX_RPT_CHARS]; +typedef struct { + bool mod_key[4]; /* ctrl, shift(upper), Alt, GUI */ + bool num_lock; + bool caps_lock; + uint8_t last_report[BTA_HH_MAX_RPT_CHARS]; } tBTA_HH_KB_CB; /****************************************************************************** * Main Control Block ******************************************************************************/ -typedef struct -{ - tBTA_HH_KB_CB kb_cb; /* key board control block, - suppose BTA will connect - to only one keyboard at - the same time */ - tBTA_HH_DEV_CB kdev[BTA_HH_MAX_DEVICE]; /* device control block */ - tBTA_HH_DEV_CB* p_cur; /* current device control - block idx, used in sdp */ - uint8_t cb_index[BTA_HH_MAX_KNOWN]; /* maintain a CB index - map to dev handle */ +typedef struct { + tBTA_HH_KB_CB kb_cb; /* key board control block, + suppose BTA will connect + to only one keyboard at + the same time */ + tBTA_HH_DEV_CB kdev[BTA_HH_MAX_DEVICE]; /* device control block */ + tBTA_HH_DEV_CB* p_cur; /* current device control + block idx, used in sdp */ + uint8_t cb_index[BTA_HH_MAX_KNOWN]; /* maintain a CB index + map to dev handle */ #if (BTA_HH_LE_INCLUDED == TRUE) - uint8_t le_cb_index[BTA_HH_MAX_DEVICE]; /* maintain a CB index map to LE dev handle */ - tBTA_GATTC_IF gatt_if; + uint8_t le_cb_index[BTA_HH_MAX_DEVICE]; /* maintain a CB index map to LE dev + handle */ + tBTA_GATTC_IF gatt_if; #endif - tBTA_HH_CBACK *p_cback; /* Application callbacks */ - tSDP_DISCOVERY_DB* p_disc_db; - uint8_t trace_level; /* tracing level */ - uint8_t cnt_num; /* connected device number */ - bool w4_disable; /* w4 disable flag */ -} -tBTA_HH_CB; + tBTA_HH_CBACK* p_cback; /* Application callbacks */ + tSDP_DISCOVERY_DB* p_disc_db; + uint8_t trace_level; /* tracing level */ + uint8_t cnt_num; /* connected device number */ + bool w4_disable; /* w4 disable flag */ +} tBTA_HH_CB; -extern tBTA_HH_CB bta_hh_cb; +extern tBTA_HH_CB bta_hh_cb; /* from bta_hh_cfg.c */ -extern tBTA_HH_CFG *p_bta_hh_cfg; +extern tBTA_HH_CFG* p_bta_hh_cfg; /***************************************************************************** * Function prototypes ****************************************************************************/ -extern bool bta_hh_hdl_event(BT_HDR *p_msg); -extern void bta_hh_sm_execute(tBTA_HH_DEV_CB *p_cb, uint16_t event, - tBTA_HH_DATA *p_data); +extern bool bta_hh_hdl_event(BT_HDR* p_msg); +extern void bta_hh_sm_execute(tBTA_HH_DEV_CB* p_cb, uint16_t event, + tBTA_HH_DATA* p_data); /* action functions */ -extern void bta_hh_api_disc_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_open_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_close_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_data_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data); -extern void bta_hh_ctrl_dat_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA * p_data); -extern void bta_hh_start_sdp(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_sdp_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_write_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_get_dscp_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_handsk_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_maint_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_open_cmpl_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_open_failure(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); +extern void bta_hh_api_disc_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_open_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_close_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_data_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_ctrl_dat_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_start_sdp(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_sdp_cmpl(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_write_dev_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_get_dscp_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_handsk_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_maint_dev_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_open_cmpl_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_open_failure(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); /* utility functions */ -extern uint8_t bta_hh_find_cb(BD_ADDR bda); -extern void bta_hh_parse_keybd_rpt(tBTA_HH_BOOT_RPT *p_kb_data, - uint8_t *p_report, uint16_t report_len); -extern void bta_hh_parse_mice_rpt(tBTA_HH_BOOT_RPT *p_kb_data, - uint8_t *p_report, uint16_t report_len); -extern bool bta_hh_tod_spt(tBTA_HH_DEV_CB *p_cb,uint8_t sub_class); -extern void bta_hh_clean_up_kdev(tBTA_HH_DEV_CB *p_cb); - -extern void bta_hh_add_device_to_list(tBTA_HH_DEV_CB *p_cb, uint8_t handle, +extern uint8_t bta_hh_find_cb(BD_ADDR bda); +extern void bta_hh_parse_keybd_rpt(tBTA_HH_BOOT_RPT* p_kb_data, + uint8_t* p_report, uint16_t report_len); +extern void bta_hh_parse_mice_rpt(tBTA_HH_BOOT_RPT* p_kb_data, + uint8_t* p_report, uint16_t report_len); +extern bool bta_hh_tod_spt(tBTA_HH_DEV_CB* p_cb, uint8_t sub_class); +extern void bta_hh_clean_up_kdev(tBTA_HH_DEV_CB* p_cb); + +extern void bta_hh_add_device_to_list(tBTA_HH_DEV_CB* p_cb, uint8_t handle, uint16_t attr_mask, - tHID_DEV_DSCP_INFO *p_dscp_info, - uint8_t sub_class, uint16_t max_latency, uint16_t min_tout, uint8_t app_id); -extern void bta_hh_update_di_info(tBTA_HH_DEV_CB *p_cb, uint16_t vendor_id, uint16_t product_id, - uint16_t version, uint8_t flag); + tHID_DEV_DSCP_INFO* p_dscp_info, + uint8_t sub_class, uint16_t max_latency, + uint16_t min_tout, uint8_t app_id); +extern void bta_hh_update_di_info(tBTA_HH_DEV_CB* p_cb, uint16_t vendor_id, + uint16_t product_id, uint16_t version, + uint8_t flag); extern void bta_hh_cleanup_disable(tBTA_HH_STATUS status); extern uint8_t bta_hh_dev_handle_to_cb_idx(uint8_t dev_handle); /* action functions used outside state machine */ -extern void bta_hh_api_enable(tBTA_HH_DATA *p_data); +extern void bta_hh_api_enable(tBTA_HH_DATA* p_data); extern void bta_hh_api_disable(void); extern void bta_hh_disc_cmpl(void); -extern tBTA_HH_STATUS bta_hh_read_ssr_param(BD_ADDR bd_addr, uint16_t *p_max_ssr_lat, uint16_t *p_min_ssr_tout); +extern tBTA_HH_STATUS bta_hh_read_ssr_param(BD_ADDR bd_addr, + uint16_t* p_max_ssr_lat, + uint16_t* p_min_ssr_tout); /* functions for LE HID */ extern void bta_hh_le_enable(void); extern bool bta_hh_le_is_hh_gatt_if(tBTA_GATTC_IF client_if); extern void bta_hh_le_deregister(void); -extern bool bta_hh_is_le_device(tBTA_HH_DEV_CB *p_cb, BD_ADDR remote_bda); -extern void bta_hh_le_open_conn(tBTA_HH_DEV_CB *p_cb, BD_ADDR remote_bda); -extern void bta_hh_le_api_disc_act(tBTA_HH_DEV_CB *p_cb); -extern void bta_hh_le_get_dscp_act(tBTA_HH_DEV_CB *p_cb); -extern void bta_hh_le_write_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern uint8_t bta_hh_le_add_device(tBTA_HH_DEV_CB *p_cb, tBTA_HH_MAINT_DEV *p_dev_info); -extern void bta_hh_le_remove_dev_bg_conn(tBTA_HH_DEV_CB *p_cb); -extern void bta_hh_le_open_fail(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_gatt_open(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_gatt_close(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf); -extern void bta_hh_start_srvc_discovery(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf); -extern void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf); -extern void bta_hh_security_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf); -extern void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); -extern void bta_hh_ci_load_rpt (tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf); +extern bool bta_hh_is_le_device(tBTA_HH_DEV_CB* p_cb, BD_ADDR remote_bda); +extern void bta_hh_le_open_conn(tBTA_HH_DEV_CB* p_cb, BD_ADDR remote_bda); +extern void bta_hh_le_api_disc_act(tBTA_HH_DEV_CB* p_cb); +extern void bta_hh_le_get_dscp_act(tBTA_HH_DEV_CB* p_cb); +extern void bta_hh_le_write_dev_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern uint8_t bta_hh_le_add_device(tBTA_HH_DEV_CB* p_cb, + tBTA_HH_MAINT_DEV* p_dev_info); +extern void bta_hh_le_remove_dev_bg_conn(tBTA_HH_DEV_CB* p_cb); +extern void bta_hh_le_open_fail(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_gatt_open(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_gatt_close(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); +extern void bta_hh_start_security(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_buf); +extern void bta_hh_start_srvc_discovery(tBTA_HH_DEV_CB* p_cb, + tBTA_HH_DATA* p_buf); +extern void bta_hh_start_security(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_buf); +extern void bta_hh_security_cmpl(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_buf); +extern void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB* p_cb, + tBTA_HH_DATA* p_data); +extern void bta_hh_ci_load_rpt(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_buf); #if (BTA_HH_DEBUG == TRUE) extern void bta_hh_trace_dev_db(void); #endif #endif - diff --git a/system/bta/hh/bta_hh_le.cc b/system/bta/hh/bta_hh_le.cc index 2b343a49f47..bbda22cc744 100644 --- a/system/bta/hh/bta_hh_le.cc +++ b/system/bta/hh/bta_hh_le.cc @@ -45,30 +45,28 @@ using std::vector; #ifndef BTA_HH_LE_RECONN -#define BTA_HH_LE_RECONN true +#define BTA_HH_LE_RECONN true #endif -#define BTA_HH_APP_ID_LE 0xff +#define BTA_HH_APP_ID_LE 0xff -#define BTA_HH_LE_RPT_TYPE_VALID(x) ((x) <= BTA_LE_HID_RPT_FEATURE && (x)>=BTA_LE_HID_RPT_INPUT) +#define BTA_HH_LE_RPT_TYPE_VALID(x) \ + ((x) <= BTA_LE_HID_RPT_FEATURE && (x) >= BTA_LE_HID_RPT_INPUT) -#define BTA_HH_LE_PROTO_BOOT_MODE 0x00 -#define BTA_HH_LE_PROTO_REPORT_MODE 0x01 +#define BTA_HH_LE_PROTO_BOOT_MODE 0x00 +#define BTA_HH_LE_PROTO_REPORT_MODE 0x01 -#define BTA_LE_HID_RTP_UUID_MAX 5 -static const uint16_t bta_hh_uuid_to_rtp_type[BTA_LE_HID_RTP_UUID_MAX][2] = -{ - {GATT_UUID_HID_REPORT, BTA_HH_RPTT_INPUT}, - {GATT_UUID_HID_BT_KB_INPUT, BTA_HH_RPTT_INPUT}, +#define BTA_LE_HID_RTP_UUID_MAX 5 +static const uint16_t bta_hh_uuid_to_rtp_type[BTA_LE_HID_RTP_UUID_MAX][2] = { + {GATT_UUID_HID_REPORT, BTA_HH_RPTT_INPUT}, + {GATT_UUID_HID_BT_KB_INPUT, BTA_HH_RPTT_INPUT}, {GATT_UUID_HID_BT_KB_OUTPUT, BTA_HH_RPTT_OUTPUT}, {GATT_UUID_HID_BT_MOUSE_INPUT, BTA_HH_RPTT_INPUT}, - {GATT_UUID_BATTERY_LEVEL, BTA_HH_RPTT_INPUT} -}; - + {GATT_UUID_BATTERY_LEVEL, BTA_HH_RPTT_INPUT}}; -static void bta_hh_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data); -static void bta_hh_le_add_dev_bg_conn(tBTA_HH_DEV_CB *p_cb, bool check_bond); -//TODO(jpawlowski): uncomment when fixed +static void bta_hh_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC* p_data); +static void bta_hh_le_add_dev_bg_conn(tBTA_HH_DEV_CB* p_cb, bool check_bond); +// TODO(jpawlowski): uncomment when fixed // static void bta_hh_process_cache_rpt (tBTA_HH_DEV_CB *p_cb, // tBTA_HH_RPT_CACHE_ENTRY *p_rpt_cache, // uint8_t num_rpt); @@ -80,16 +78,16 @@ static void bta_hh_le_add_dev_bg_conn(tBTA_HH_DEV_CB *p_cb, bool check_bond); /* Holds pending GATT operations */ struct gatt_operation { - uint8_t type; - uint16_t handle; - GATT_READ_OP_CB read_cb; - void* read_cb_data; - GATT_WRITE_OP_CB write_cb; - void* write_cb_data; - - /* write-specific fields */ - tBTA_GATTC_WRITE_TYPE write_type; - vector value; + uint8_t type; + uint16_t handle; + GATT_READ_OP_CB read_cb; + void* read_cb_data; + GATT_WRITE_OP_CB write_cb; + void* write_cb_data; + + /* write-specific fields */ + tBTA_GATTC_WRITE_TYPE write_type; + vector value; }; // maps connection id to operations waiting for execution @@ -98,104 +96,111 @@ static std::unordered_map> gatt_op_queue; static std::unordered_set gatt_op_queue_executing; static void mark_as_not_executing(uint16_t conn_id) { - gatt_op_queue_executing.erase(conn_id); + gatt_op_queue_executing.erase(conn_id); } static void gatt_op_queue_clean(uint16_t conn_id) { - gatt_op_queue.erase(conn_id); - gatt_op_queue_executing.erase(conn_id); + gatt_op_queue.erase(conn_id); + gatt_op_queue_executing.erase(conn_id); } static void gatt_execute_next_op(uint16_t conn_id); GATT_READ_OP_CB act_read_cb = NULL; void* act_read_cb_data = NULL; -static void gatt_read_op_finished(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, uint16_t len, uint8_t *value, void* data) { - GATT_READ_OP_CB tmp_cb = act_read_cb; - void* tmp_cb_data = act_read_cb_data; +static void gatt_read_op_finished(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, uint8_t* value, + void* data) { + GATT_READ_OP_CB tmp_cb = act_read_cb; + void* tmp_cb_data = act_read_cb_data; - act_read_cb = NULL; - act_read_cb_data = NULL; + act_read_cb = NULL; + act_read_cb_data = NULL; - mark_as_not_executing(conn_id); - gatt_execute_next_op(conn_id); + mark_as_not_executing(conn_id); + gatt_execute_next_op(conn_id); - if (tmp_cb) { - tmp_cb(conn_id, status, handle, len, value, tmp_cb_data); - return; - } + if (tmp_cb) { + tmp_cb(conn_id, status, handle, len, value, tmp_cb_data); + return; + } } GATT_WRITE_OP_CB act_write_cb = NULL; void* act_write_cb_data = NULL; -static void gatt_write_op_finished(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, void* data) { - GATT_WRITE_OP_CB tmp_cb = act_write_cb; - void* tmp_cb_data = act_write_cb_data; - act_write_cb = NULL; - act_write_cb_data = NULL; - - mark_as_not_executing(conn_id); - gatt_execute_next_op(conn_id); - - if (tmp_cb) { - tmp_cb(conn_id, status, handle, tmp_cb_data); - return; - } +static void gatt_write_op_finished(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, void* data) { + GATT_WRITE_OP_CB tmp_cb = act_write_cb; + void* tmp_cb_data = act_write_cb_data; + act_write_cb = NULL; + act_write_cb_data = NULL; + + mark_as_not_executing(conn_id); + gatt_execute_next_op(conn_id); + + if (tmp_cb) { + tmp_cb(conn_id, status, handle, tmp_cb_data); + return; + } } static void gatt_execute_next_op(uint16_t conn_id) { - APPL_TRACE_DEBUG("%s:", __func__, conn_id); - if (gatt_op_queue.empty()) { - APPL_TRACE_DEBUG("%s: op queue is empty", __func__); - return; - } + APPL_TRACE_DEBUG("%s:", __func__, conn_id); + if (gatt_op_queue.empty()) { + APPL_TRACE_DEBUG("%s: op queue is empty", __func__); + return; + } - auto map_ptr = gatt_op_queue.find(conn_id); - if (map_ptr == gatt_op_queue.end() || map_ptr->second.empty()) { - APPL_TRACE_DEBUG("%s: no more operations queued for conn_id %d", __func__, conn_id); - return; - } + auto map_ptr = gatt_op_queue.find(conn_id); + if (map_ptr == gatt_op_queue.end() || map_ptr->second.empty()) { + APPL_TRACE_DEBUG("%s: no more operations queued for conn_id %d", __func__, + conn_id); + return; + } - if (gatt_op_queue_executing.count(conn_id)) { - APPL_TRACE_DEBUG("%s: can't enqueue next op, already executing", __func__); - return; - } + if (gatt_op_queue_executing.count(conn_id)) { + APPL_TRACE_DEBUG("%s: can't enqueue next op, already executing", __func__); + return; + } - gatt_op_queue_executing.insert(conn_id); + gatt_op_queue_executing.insert(conn_id); - std::list &gatt_ops = map_ptr->second; + std::list& gatt_ops = map_ptr->second; - gatt_operation &op = gatt_ops.front(); + gatt_operation& op = gatt_ops.front(); - if (op.type == GATT_READ_CHAR) { - act_read_cb = op.read_cb; - act_read_cb_data = op.read_cb_data; - BTA_GATTC_ReadCharacteristic(conn_id, op.handle, BTA_GATT_AUTH_REQ_NONE, - gatt_read_op_finished, NULL); + if (op.type == GATT_READ_CHAR) { + act_read_cb = op.read_cb; + act_read_cb_data = op.read_cb_data; + BTA_GATTC_ReadCharacteristic(conn_id, op.handle, BTA_GATT_AUTH_REQ_NONE, + gatt_read_op_finished, NULL); - } else if (op.type == GATT_READ_DESC) { - act_read_cb = op.read_cb; - act_read_cb_data = op.read_cb_data; - BTA_GATTC_ReadCharDescr(conn_id, op.handle, BTA_GATT_AUTH_REQ_NONE, - gatt_read_op_finished, NULL); + } else if (op.type == GATT_READ_DESC) { + act_read_cb = op.read_cb; + act_read_cb_data = op.read_cb_data; + BTA_GATTC_ReadCharDescr(conn_id, op.handle, BTA_GATT_AUTH_REQ_NONE, + gatt_read_op_finished, NULL); - } else if (op.type == GATT_WRITE_CHAR) { - act_write_cb = op.write_cb; - act_write_cb_data = op.write_cb_data; - BTA_GATTC_WriteCharValue(conn_id, op.handle, op.write_type, std::move(op.value), - BTA_GATT_AUTH_REQ_NONE, gatt_write_op_finished, NULL); + } else if (op.type == GATT_WRITE_CHAR) { + act_write_cb = op.write_cb; + act_write_cb_data = op.write_cb_data; + BTA_GATTC_WriteCharValue(conn_id, op.handle, op.write_type, + std::move(op.value), BTA_GATT_AUTH_REQ_NONE, + gatt_write_op_finished, NULL); - } else if (op.type == GATT_WRITE_DESC) { - act_write_cb = op.write_cb; - act_write_cb_data = op.write_cb_data; - BTA_GATTC_WriteCharDescr(conn_id, op.handle, std::move(op.value), - BTA_GATT_AUTH_REQ_NONE, gatt_write_op_finished, NULL); - } + } else if (op.type == GATT_WRITE_DESC) { + act_write_cb = op.write_cb; + act_write_cb_data = op.write_cb_data; + BTA_GATTC_WriteCharDescr(conn_id, op.handle, std::move(op.value), + BTA_GATT_AUTH_REQ_NONE, gatt_write_op_finished, + NULL); + } - gatt_ops.pop_front(); + gatt_ops.pop_front(); } -static void gatt_queue_read_op(uint8_t op_type, uint16_t conn_id, uint16_t handle, - GATT_READ_OP_CB cb, void* cb_data) { +static void gatt_queue_read_op(uint8_t op_type, uint16_t conn_id, + uint16_t handle, GATT_READ_OP_CB cb, + void* cb_data) { gatt_operation op; op.type = op_type; op.handle = handle; @@ -205,8 +210,8 @@ static void gatt_queue_read_op(uint8_t op_type, uint16_t conn_id, uint16_t handl gatt_execute_next_op(conn_id); } -static void gatt_queue_write_op(uint8_t op_type, uint16_t conn_id, uint16_t handle, - vector value, +static void gatt_queue_write_op(uint8_t op_type, uint16_t conn_id, + uint16_t handle, vector value, tBTA_GATTC_WRITE_TYPE write_type, GATT_WRITE_OP_CB cb, void* cb_data) { gatt_operation op; @@ -222,58 +227,46 @@ static void gatt_queue_write_op(uint8_t op_type, uint16_t conn_id, uint16_t hand } #if (BTA_HH_DEBUG == TRUE) -static const char *bta_hh_le_rpt_name[4] = -{ - "UNKNOWN", - "INPUT", - "OUTPUT", - "FEATURE" -}; +static const char* bta_hh_le_rpt_name[4] = {"UNKNOWN", "INPUT", "OUTPUT", + "FEATURE"}; /******************************************************************************* * * Function bta_hh_le_hid_report_dbg * - * Description debug function to print out all HID report available on remote + * Description debug function to print out all HID report available on + *remote * device. * * Returns void * ******************************************************************************/ -static void bta_hh_le_hid_report_dbg(tBTA_HH_DEV_CB *p_cb) -{ - APPL_TRACE_DEBUG("%s: HID Report DB", __func__); +static void bta_hh_le_hid_report_dbg(tBTA_HH_DEV_CB* p_cb) { + APPL_TRACE_DEBUG("%s: HID Report DB", __func__); - if (!p_cb->hid_srvc.in_use) - return; + if (!p_cb->hid_srvc.in_use) return; - tBTA_HH_LE_RPT *p_rpt = &p_cb->hid_srvc.report[0]; + tBTA_HH_LE_RPT* p_rpt = &p_cb->hid_srvc.report[0]; - for (int j = 0; j < BTA_HH_LE_RPT_MAX; j ++, p_rpt++) - { - const char * rpt_name = "Unknown"; + for (int j = 0; j < BTA_HH_LE_RPT_MAX; j++, p_rpt++) { + const char* rpt_name = "Unknown"; - if (!p_rpt->in_use) - break; + if (!p_rpt->in_use) break; - if (p_rpt->uuid == GATT_UUID_HID_REPORT) - rpt_name = "Report"; - if (p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT) - rpt_name = "Boot KB Input"; - if (p_rpt->uuid == GATT_UUID_HID_BT_KB_OUTPUT) - rpt_name = "Boot KB Output"; - if (p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT) - rpt_name = "Boot MI Input"; - - APPL_TRACE_DEBUG("\t\t [%s- 0x%04x] [Type: %s], [ReportID: %d] [srvc_inst_id: %d] [char_inst_id: %d] [Clt_cfg: %d]", - rpt_name, - p_rpt->uuid , - ((p_rpt->rpt_type < 4) ? bta_hh_le_rpt_name[p_rpt->rpt_type] : "UNKNOWN"), - p_rpt->rpt_id, - p_rpt->srvc_inst_id, - p_rpt->char_inst_id, - p_rpt->client_cfg_value); - } + if (p_rpt->uuid == GATT_UUID_HID_REPORT) rpt_name = "Report"; + if (p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT) rpt_name = "Boot KB Input"; + if (p_rpt->uuid == GATT_UUID_HID_BT_KB_OUTPUT) rpt_name = "Boot KB Output"; + if (p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT) rpt_name = "Boot MI Input"; + + APPL_TRACE_DEBUG( + "\t\t [%s- 0x%04x] [Type: %s], [ReportID: %d] [srvc_inst_id: %d] " + "[char_inst_id: %d] [Clt_cfg: %d]", + rpt_name, p_rpt->uuid, + ((p_rpt->rpt_type < 4) ? bta_hh_le_rpt_name[p_rpt->rpt_type] + : "UNKNOWN"), + p_rpt->rpt_id, p_rpt->srvc_inst_id, p_rpt->char_inst_id, + p_rpt->client_cfg_value); + } } /******************************************************************************* @@ -285,35 +278,33 @@ static void bta_hh_le_hid_report_dbg(tBTA_HH_DEV_CB *p_cb) * Returns void * ******************************************************************************/ -static const char *bta_hh_uuid_to_str(uint16_t uuid) -{ - switch(uuid) - { - case GATT_UUID_HID_INFORMATION: - return "GATT_UUID_HID_INFORMATION"; - case GATT_UUID_HID_REPORT_MAP: - return "GATT_UUID_HID_REPORT_MAP"; - case GATT_UUID_HID_CONTROL_POINT: - return "GATT_UUID_HID_CONTROL_POINT"; - case GATT_UUID_HID_REPORT: - return "GATT_UUID_HID_REPORT"; - case GATT_UUID_HID_PROTO_MODE: - return "GATT_UUID_HID_PROTO_MODE"; - case GATT_UUID_HID_BT_KB_INPUT: - return "GATT_UUID_HID_BT_KB_INPUT"; - case GATT_UUID_HID_BT_KB_OUTPUT: - return "GATT_UUID_HID_BT_KB_OUTPUT"; - case GATT_UUID_HID_BT_MOUSE_INPUT: - return "GATT_UUID_HID_BT_MOUSE_INPUT"; - case GATT_UUID_CHAR_CLIENT_CONFIG: - return "GATT_UUID_CHAR_CLIENT_CONFIG"; - case GATT_UUID_EXT_RPT_REF_DESCR: - return "GATT_UUID_EXT_RPT_REF_DESCR"; - case GATT_UUID_RPT_REF_DESCR: - return "GATT_UUID_RPT_REF_DESCR"; - default: - return "Unknown UUID"; - } +static const char* bta_hh_uuid_to_str(uint16_t uuid) { + switch (uuid) { + case GATT_UUID_HID_INFORMATION: + return "GATT_UUID_HID_INFORMATION"; + case GATT_UUID_HID_REPORT_MAP: + return "GATT_UUID_HID_REPORT_MAP"; + case GATT_UUID_HID_CONTROL_POINT: + return "GATT_UUID_HID_CONTROL_POINT"; + case GATT_UUID_HID_REPORT: + return "GATT_UUID_HID_REPORT"; + case GATT_UUID_HID_PROTO_MODE: + return "GATT_UUID_HID_PROTO_MODE"; + case GATT_UUID_HID_BT_KB_INPUT: + return "GATT_UUID_HID_BT_KB_INPUT"; + case GATT_UUID_HID_BT_KB_OUTPUT: + return "GATT_UUID_HID_BT_KB_OUTPUT"; + case GATT_UUID_HID_BT_MOUSE_INPUT: + return "GATT_UUID_HID_BT_MOUSE_INPUT"; + case GATT_UUID_CHAR_CLIENT_CONFIG: + return "GATT_UUID_CHAR_CLIENT_CONFIG"; + case GATT_UUID_EXT_RPT_REF_DESCR: + return "GATT_UUID_EXT_RPT_REF_DESCR"; + case GATT_UUID_RPT_REF_DESCR: + return "GATT_UUID_RPT_REF_DESCR"; + default: + return "Unknown UUID"; + } } #endif @@ -327,25 +318,24 @@ static const char *bta_hh_uuid_to_str(uint16_t uuid) * Returns void * ******************************************************************************/ -void bta_hh_le_enable(void) -{ - char app_name[LEN_UUID_128 + 1]; - tBT_UUID app_uuid = {LEN_UUID_128,{0}}; - uint8_t xx; +void bta_hh_le_enable(void) { + char app_name[LEN_UUID_128 + 1]; + tBT_UUID app_uuid = {LEN_UUID_128, {0}}; + uint8_t xx; - bta_hh_cb.gatt_if = BTA_GATTS_INVALID_IF; + bta_hh_cb.gatt_if = BTA_GATTS_INVALID_IF; - for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx ++) - bta_hh_cb.le_cb_index[xx] = BTA_HH_IDX_INVALID; + for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) + bta_hh_cb.le_cb_index[xx] = BTA_HH_IDX_INVALID; - memset (app_name, 0, LEN_UUID_128 + 1); - strncpy(app_name, "BTA HH OVER LE", LEN_UUID_128); + memset(app_name, 0, LEN_UUID_128 + 1); + strncpy(app_name, "BTA HH OVER LE", LEN_UUID_128); - memcpy((void *)app_uuid.uu.uuid128, (void *)app_name, LEN_UUID_128); + memcpy((void*)app_uuid.uu.uuid128, (void*)app_name, LEN_UUID_128); - BTA_GATTC_AppRegister(&app_uuid, bta_hh_gattc_callback); + BTA_GATTC_AppRegister(&app_uuid, bta_hh_gattc_callback); - return; + return; } /******************************************************************************* @@ -357,20 +347,17 @@ void bta_hh_le_enable(void) * Parameters: * ******************************************************************************/ -void bta_hh_le_register_cmpl(tBTA_GATTC_REG *p_reg) -{ - tBTA_HH_STATUS status = BTA_HH_ERR; - - if (p_reg->status == BTA_GATT_OK) - { - bta_hh_cb.gatt_if = p_reg->client_if; - status = BTA_HH_OK; - } - else - bta_hh_cb.gatt_if = BTA_GATTS_INVALID_IF; +void bta_hh_le_register_cmpl(tBTA_GATTC_REG* p_reg) { + tBTA_HH_STATUS status = BTA_HH_ERR; - /* signal BTA call back event */ - (* bta_hh_cb.p_cback)(BTA_HH_ENABLE_EVT, (tBTA_HH *)&status); + if (p_reg->status == BTA_GATT_OK) { + bta_hh_cb.gatt_if = p_reg->client_if; + status = BTA_HH_OK; + } else + bta_hh_cb.gatt_if = BTA_GATTS_INVALID_IF; + + /* signal BTA call back event */ + (*bta_hh_cb.p_cback)(BTA_HH_ENABLE_EVT, (tBTA_HH*)&status); } /******************************************************************************* @@ -383,9 +370,8 @@ void bta_hh_le_register_cmpl(tBTA_GATTC_REG *p_reg) * Returns whether it is HH GATT IF * ******************************************************************************/ -bool bta_hh_le_is_hh_gatt_if(tBTA_GATTC_IF client_if) -{ - return (bta_hh_cb.gatt_if == client_if); +bool bta_hh_le_is_hh_gatt_if(tBTA_GATTC_IF client_if) { + return (bta_hh_cb.gatt_if == client_if); } /******************************************************************************* @@ -398,10 +384,7 @@ bool bta_hh_le_is_hh_gatt_if(tBTA_GATTC_IF client_if) * Returns void * ******************************************************************************/ -void bta_hh_le_deregister(void) -{ - BTA_GATTC_AppDeregister(bta_hh_cb.gatt_if); -} +void bta_hh_le_deregister(void) { BTA_GATTC_AppDeregister(bta_hh_cb.gatt_if); } /******************************************************************************* * @@ -412,11 +395,10 @@ void bta_hh_le_deregister(void) * Parameters: * ******************************************************************************/ -bool bta_hh_is_le_device(tBTA_HH_DEV_CB *p_cb, BD_ADDR remote_bda) -{ - p_cb->is_le_device = BTM_UseLeLink (remote_bda); +bool bta_hh_is_le_device(tBTA_HH_DEV_CB* p_cb, BD_ADDR remote_bda) { + p_cb->is_le_device = BTM_UseLeLink(remote_bda); - return p_cb->is_le_device; + return p_cb->is_le_device; } /******************************************************************************* @@ -428,35 +410,32 @@ bool bta_hh_is_le_device(tBTA_HH_DEV_CB *p_cb, BD_ADDR remote_bda) * Parameters: * ******************************************************************************/ -void bta_hh_le_open_conn(tBTA_HH_DEV_CB *p_cb, BD_ADDR remote_bda) -{ - /* update cb_index[] map */ - p_cb->hid_handle = BTA_HH_GET_LE_DEV_HDL(p_cb->index); - memcpy(p_cb->addr, remote_bda, BD_ADDR_LEN); - bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index; - p_cb->in_use = true; +void bta_hh_le_open_conn(tBTA_HH_DEV_CB* p_cb, BD_ADDR remote_bda) { + /* update cb_index[] map */ + p_cb->hid_handle = BTA_HH_GET_LE_DEV_HDL(p_cb->index); + memcpy(p_cb->addr, remote_bda, BD_ADDR_LEN); + bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index; + p_cb->in_use = true; - BTA_GATTC_Open(bta_hh_cb.gatt_if, remote_bda, true, BTA_GATT_TRANSPORT_LE); + BTA_GATTC_Open(bta_hh_cb.gatt_if, remote_bda, true, BTA_GATT_TRANSPORT_LE); } /******************************************************************************* * * Function bta_hh_le_find_dev_cb_by_conn_id * - * Description Utility function find a device control block by connection ID. + * Description Utility function find a device control block by connection + *ID. * ******************************************************************************/ -tBTA_HH_DEV_CB * bta_hh_le_find_dev_cb_by_conn_id(uint16_t conn_id) -{ - uint8_t i; - tBTA_HH_DEV_CB *p_dev_cb = &bta_hh_cb.kdev[0]; - - for (i = 0; i < BTA_HH_MAX_DEVICE; i ++, p_dev_cb ++) - { - if (p_dev_cb->in_use && p_dev_cb->conn_id == conn_id) - return p_dev_cb; - } - return NULL; +tBTA_HH_DEV_CB* bta_hh_le_find_dev_cb_by_conn_id(uint16_t conn_id) { + uint8_t i; + tBTA_HH_DEV_CB* p_dev_cb = &bta_hh_cb.kdev[0]; + + for (i = 0; i < BTA_HH_MAX_DEVICE; i++, p_dev_cb++) { + if (p_dev_cb->in_use && p_dev_cb->conn_id == conn_id) return p_dev_cb; + } + return NULL; } /******************************************************************************* @@ -466,18 +445,15 @@ tBTA_HH_DEV_CB * bta_hh_le_find_dev_cb_by_conn_id(uint16_t conn_id) * Description Utility function find a device control block by BD address. * ******************************************************************************/ -tBTA_HH_DEV_CB * bta_hh_le_find_dev_cb_by_bda(BD_ADDR bda) -{ - uint8_t i; - tBTA_HH_DEV_CB *p_dev_cb = &bta_hh_cb.kdev[0]; - - for (i = 0; i < BTA_HH_MAX_DEVICE; i ++, p_dev_cb ++) - { - if (p_dev_cb->in_use && - memcmp(p_dev_cb->addr, bda, BD_ADDR_LEN) == 0) - return p_dev_cb; - } - return NULL; +tBTA_HH_DEV_CB* bta_hh_le_find_dev_cb_by_bda(BD_ADDR bda) { + uint8_t i; + tBTA_HH_DEV_CB* p_dev_cb = &bta_hh_cb.kdev[0]; + + for (i = 0; i < BTA_HH_MAX_DEVICE; i++, p_dev_cb++) { + if (p_dev_cb->in_use && memcmp(p_dev_cb->addr, bda, BD_ADDR_LEN) == 0) + return p_dev_cb; + } + return NULL; } /******************************************************************************* @@ -487,55 +463,46 @@ tBTA_HH_DEV_CB * bta_hh_le_find_dev_cb_by_bda(BD_ADDR bda) * Description find HID service instance ID by battery service instance ID * ******************************************************************************/ -uint8_t bta_hh_le_find_service_inst_by_battery_inst_id(tBTA_HH_DEV_CB *p_cb, uint8_t ba_inst_id) -{ - if (p_cb->hid_srvc.in_use && - p_cb->hid_srvc.incl_srvc_inst == ba_inst_id) - { - return p_cb->hid_srvc.srvc_inst_id; - } - return BTA_HH_IDX_INVALID; +uint8_t bta_hh_le_find_service_inst_by_battery_inst_id(tBTA_HH_DEV_CB* p_cb, + uint8_t ba_inst_id) { + if (p_cb->hid_srvc.in_use && p_cb->hid_srvc.incl_srvc_inst == ba_inst_id) { + return p_cb->hid_srvc.srvc_inst_id; + } + return BTA_HH_IDX_INVALID; } /******************************************************************************* * * Function bta_hh_le_find_report_entry * - * Description find the report entry by service instance and report UUID and + * Description find the report entry by service instance and report UUID + *and * instance ID * ******************************************************************************/ -tBTA_HH_LE_RPT * bta_hh_le_find_report_entry(tBTA_HH_DEV_CB *p_cb, - uint8_t srvc_inst_id, /* service instance ID */ - uint16_t rpt_uuid, - uint8_t char_inst_id) -{ - uint8_t i; - uint8_t hid_inst_id = srvc_inst_id; - tBTA_HH_LE_RPT *p_rpt; - - if (rpt_uuid == GATT_UUID_BATTERY_LEVEL) - { - hid_inst_id = bta_hh_le_find_service_inst_by_battery_inst_id(p_cb, srvc_inst_id); - - if (hid_inst_id == BTA_HH_IDX_INVALID) - return NULL; - } +tBTA_HH_LE_RPT* bta_hh_le_find_report_entry( + tBTA_HH_DEV_CB* p_cb, uint8_t srvc_inst_id, /* service instance ID */ + uint16_t rpt_uuid, uint8_t char_inst_id) { + uint8_t i; + uint8_t hid_inst_id = srvc_inst_id; + tBTA_HH_LE_RPT* p_rpt; - p_rpt = &p_cb->hid_srvc.report[0]; + if (rpt_uuid == GATT_UUID_BATTERY_LEVEL) { + hid_inst_id = + bta_hh_le_find_service_inst_by_battery_inst_id(p_cb, srvc_inst_id); - for (i = 0; i < BTA_HH_LE_RPT_MAX; i ++, p_rpt ++) - { - if (p_rpt->uuid == rpt_uuid && - p_rpt->srvc_inst_id == srvc_inst_id && - p_rpt->char_inst_id == char_inst_id) - { + if (hid_inst_id == BTA_HH_IDX_INVALID) return NULL; + } - return p_rpt; - } - } - return NULL; + p_rpt = &p_cb->hid_srvc.report[0]; + for (i = 0; i < BTA_HH_LE_RPT_MAX; i++, p_rpt++) { + if (p_rpt->uuid == rpt_uuid && p_rpt->srvc_inst_id == srvc_inst_id && + p_rpt->char_inst_id == char_inst_id) { + return p_rpt; + } + } + return NULL; } /******************************************************************************* @@ -547,121 +514,112 @@ tBTA_HH_LE_RPT * bta_hh_le_find_report_entry(tBTA_HH_DEV_CB *p_cb, * Returns void * ******************************************************************************/ -tBTA_HH_LE_RPT * bta_hh_le_find_rpt_by_idtype(tBTA_HH_LE_RPT*p_head, uint8_t mode, - tBTA_HH_RPT_TYPE r_type, uint8_t rpt_id) -{ - tBTA_HH_LE_RPT *p_rpt = p_head; - uint8_t i; +tBTA_HH_LE_RPT* bta_hh_le_find_rpt_by_idtype(tBTA_HH_LE_RPT* p_head, + uint8_t mode, + tBTA_HH_RPT_TYPE r_type, + uint8_t rpt_id) { + tBTA_HH_LE_RPT* p_rpt = p_head; + uint8_t i; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_le_find_rpt_by_idtype: r_type: %d rpt_id: %d", r_type, rpt_id); + APPL_TRACE_DEBUG("bta_hh_le_find_rpt_by_idtype: r_type: %d rpt_id: %d", + r_type, rpt_id); #endif - for (i = 0 ; i < BTA_HH_LE_RPT_MAX; i ++, p_rpt++) - { - if (p_rpt->in_use && p_rpt->rpt_id == rpt_id && r_type == p_rpt->rpt_type) - { - /* return battery report w/o condition */ - if (p_rpt->uuid == GATT_UUID_BATTERY_LEVEL) - return p_rpt; + for (i = 0; i < BTA_HH_LE_RPT_MAX; i++, p_rpt++) { + if (p_rpt->in_use && p_rpt->rpt_id == rpt_id && r_type == p_rpt->rpt_type) { + /* return battery report w/o condition */ + if (p_rpt->uuid == GATT_UUID_BATTERY_LEVEL) return p_rpt; - if (mode == BTA_HH_PROTO_RPT_MODE && p_rpt->uuid == GATT_UUID_HID_REPORT) - return p_rpt; + if (mode == BTA_HH_PROTO_RPT_MODE && p_rpt->uuid == GATT_UUID_HID_REPORT) + return p_rpt; - if ( mode ==BTA_HH_PROTO_BOOT_MODE && - (p_rpt->uuid >= GATT_UUID_HID_BT_KB_INPUT && p_rpt->uuid <= GATT_UUID_HID_BT_MOUSE_INPUT)) - return p_rpt; - } + if (mode == BTA_HH_PROTO_BOOT_MODE && + (p_rpt->uuid >= GATT_UUID_HID_BT_KB_INPUT && + p_rpt->uuid <= GATT_UUID_HID_BT_MOUSE_INPUT)) + return p_rpt; } - return NULL; + } + return NULL; } /******************************************************************************* * * Function bta_hh_le_find_alloc_report_entry * - * Description find or allocate a report entry in the HID service report list. + * Description find or allocate a report entry in the HID service report + *list. * ******************************************************************************/ -tBTA_HH_LE_RPT * bta_hh_le_find_alloc_report_entry(tBTA_HH_DEV_CB *p_cb, - uint8_t srvc_inst_id, - uint16_t rpt_uuid, - uint8_t inst_id) -{ - uint8_t i, hid_inst_id = srvc_inst_id; - tBTA_HH_LE_RPT *p_rpt; - - if (rpt_uuid == GATT_UUID_BATTERY_LEVEL) - { - hid_inst_id = bta_hh_le_find_service_inst_by_battery_inst_id(p_cb, srvc_inst_id); - - if (hid_inst_id == BTA_HH_IDX_INVALID) - return NULL; - } - p_rpt = &p_cb->hid_srvc.report[0]; - - for (i = 0; i < BTA_HH_LE_RPT_MAX; i ++, p_rpt ++) - { - if (!p_rpt->in_use || - (p_rpt->uuid == rpt_uuid && - p_rpt->srvc_inst_id == srvc_inst_id && - p_rpt->char_inst_id == inst_id)) - { - if (!p_rpt->in_use) - { - p_rpt->in_use = true; - p_rpt->index = i; - p_rpt->srvc_inst_id = srvc_inst_id; - p_rpt->char_inst_id = inst_id; - p_rpt->uuid = rpt_uuid; - - /* assign report type */ - for (i = 0; i < BTA_LE_HID_RTP_UUID_MAX; i ++) - { - if (bta_hh_uuid_to_rtp_type[i][0] == rpt_uuid) - { - p_rpt->rpt_type = (tBTA_HH_RPT_TYPE)bta_hh_uuid_to_rtp_type[i][1]; - - if (rpt_uuid == GATT_UUID_HID_BT_KB_INPUT || rpt_uuid == GATT_UUID_HID_BT_KB_OUTPUT) - p_rpt->rpt_id = BTA_HH_KEYBD_RPT_ID; - - if (rpt_uuid == GATT_UUID_HID_BT_MOUSE_INPUT) - p_rpt->rpt_id = BTA_HH_MOUSE_RPT_ID; - - break; - } - } - } - return p_rpt; +tBTA_HH_LE_RPT* bta_hh_le_find_alloc_report_entry(tBTA_HH_DEV_CB* p_cb, + uint8_t srvc_inst_id, + uint16_t rpt_uuid, + uint8_t inst_id) { + uint8_t i, hid_inst_id = srvc_inst_id; + tBTA_HH_LE_RPT* p_rpt; + + if (rpt_uuid == GATT_UUID_BATTERY_LEVEL) { + hid_inst_id = + bta_hh_le_find_service_inst_by_battery_inst_id(p_cb, srvc_inst_id); + + if (hid_inst_id == BTA_HH_IDX_INVALID) return NULL; + } + p_rpt = &p_cb->hid_srvc.report[0]; + + for (i = 0; i < BTA_HH_LE_RPT_MAX; i++, p_rpt++) { + if (!p_rpt->in_use || + (p_rpt->uuid == rpt_uuid && p_rpt->srvc_inst_id == srvc_inst_id && + p_rpt->char_inst_id == inst_id)) { + if (!p_rpt->in_use) { + p_rpt->in_use = true; + p_rpt->index = i; + p_rpt->srvc_inst_id = srvc_inst_id; + p_rpt->char_inst_id = inst_id; + p_rpt->uuid = rpt_uuid; + + /* assign report type */ + for (i = 0; i < BTA_LE_HID_RTP_UUID_MAX; i++) { + if (bta_hh_uuid_to_rtp_type[i][0] == rpt_uuid) { + p_rpt->rpt_type = (tBTA_HH_RPT_TYPE)bta_hh_uuid_to_rtp_type[i][1]; + + if (rpt_uuid == GATT_UUID_HID_BT_KB_INPUT || + rpt_uuid == GATT_UUID_HID_BT_KB_OUTPUT) + p_rpt->rpt_id = BTA_HH_KEYBD_RPT_ID; + + if (rpt_uuid == GATT_UUID_HID_BT_MOUSE_INPUT) + p_rpt->rpt_id = BTA_HH_MOUSE_RPT_ID; + + break; + } } + } + return p_rpt; } - return NULL; + } + return NULL; } -static tBTA_GATTC_DESCRIPTOR *find_descriptor_by_short_uuid(uint16_t conn_id, - uint16_t char_handle, - uint16_t short_uuid) { - const tBTA_GATTC_CHARACTERISTIC *p_char = - BTA_GATTC_GetCharacteristic(conn_id, char_handle); +static tBTA_GATTC_DESCRIPTOR* find_descriptor_by_short_uuid( + uint16_t conn_id, uint16_t char_handle, uint16_t short_uuid) { + const tBTA_GATTC_CHARACTERISTIC* p_char = + BTA_GATTC_GetCharacteristic(conn_id, char_handle); - if (!p_char) { - LOG_WARN(LOG_TAG, "%s No such characteristic: %d", __func__, char_handle); - return NULL; - } + if (!p_char) { + LOG_WARN(LOG_TAG, "%s No such characteristic: %d", __func__, char_handle); + return NULL; + } - if (!p_char->descriptors || list_is_empty(p_char->descriptors)) - return NULL; + if (!p_char->descriptors || list_is_empty(p_char->descriptors)) return NULL; - for (list_node_t *dn = list_begin(p_char->descriptors); - dn != list_end(p_char->descriptors); dn = list_next(dn)) { - tBTA_GATTC_DESCRIPTOR *p_desc = (tBTA_GATTC_DESCRIPTOR*) list_node(dn); + for (list_node_t* dn = list_begin(p_char->descriptors); + dn != list_end(p_char->descriptors); dn = list_next(dn)) { + tBTA_GATTC_DESCRIPTOR* p_desc = (tBTA_GATTC_DESCRIPTOR*)list_node(dn); - if (p_char->uuid.len == LEN_UUID_16 && - p_desc->uuid.uu.uuid16 == short_uuid) - return p_desc; - } + if (p_char->uuid.len == LEN_UUID_16 && p_desc->uuid.uu.uuid16 == short_uuid) + return p_desc; + } - return NULL; + return NULL; } /******************************************************************************* @@ -671,17 +629,18 @@ static tBTA_GATTC_DESCRIPTOR *find_descriptor_by_short_uuid(uint16_t conn_id, * Description read characteristic descriptor * ******************************************************************************/ -static tBTA_HH_STATUS bta_hh_le_read_char_descriptor(tBTA_HH_DEV_CB *p_cb, uint16_t char_handle, - uint16_t short_uuid, GATT_READ_OP_CB cb, - void* cb_data) -{ - const tBTA_GATTC_DESCRIPTOR *p_desc = - find_descriptor_by_short_uuid(p_cb->conn_id, char_handle, short_uuid); - if (!p_desc) - return BTA_HH_ERR; +static tBTA_HH_STATUS bta_hh_le_read_char_descriptor(tBTA_HH_DEV_CB* p_cb, + uint16_t char_handle, + uint16_t short_uuid, + GATT_READ_OP_CB cb, + void* cb_data) { + const tBTA_GATTC_DESCRIPTOR* p_desc = + find_descriptor_by_short_uuid(p_cb->conn_id, char_handle, short_uuid); + if (!p_desc) return BTA_HH_ERR; - gatt_queue_read_op(GATT_READ_DESC, p_cb->conn_id, p_desc->handle, cb, cb_data); - return BTA_HH_OK; + gatt_queue_read_op(GATT_READ_DESC, p_cb->conn_id, p_desc->handle, cb, + cb_data); + return BTA_HH_OK; } /******************************************************************************* @@ -693,48 +652,44 @@ static tBTA_HH_STATUS bta_hh_le_read_char_descriptor(tBTA_HH_DEV_CB *p_cb, uint1 * Parameters: * ******************************************************************************/ -void bta_hh_le_save_report_ref(tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_LE_RPT *p_rpt, - tGATT_STATUS status, uint8_t *value, uint16_t len) -{ - if (status == BTA_GATT_INSUF_AUTHENTICATION) - { - /* close connection right away */ - p_dev_cb->status = BTA_HH_ERR_AUTH_FAILED; - /* close the connection and report service discovery complete with error */ - bta_hh_le_api_disc_act(p_dev_cb); - return; - } +void bta_hh_le_save_report_ref(tBTA_HH_DEV_CB* p_dev_cb, tBTA_HH_LE_RPT* p_rpt, + tGATT_STATUS status, uint8_t* value, + uint16_t len) { + if (status == BTA_GATT_INSUF_AUTHENTICATION) { + /* close connection right away */ + p_dev_cb->status = BTA_HH_ERR_AUTH_FAILED; + /* close the connection and report service discovery complete with error */ + bta_hh_le_api_disc_act(p_dev_cb); + return; + } - /* if the length of the descriptor value is right, parse it */ - if (status == BTA_GATT_OK && len == 2) - { - uint8_t *pp = value; + /* if the length of the descriptor value is right, parse it */ + if (status == BTA_GATT_OK && len == 2) { + uint8_t* pp = value; - STREAM_TO_UINT8(p_rpt->rpt_id, pp); - STREAM_TO_UINT8(p_rpt->rpt_type, pp); + STREAM_TO_UINT8(p_rpt->rpt_id, pp); + STREAM_TO_UINT8(p_rpt->rpt_type, pp); - if (p_rpt->rpt_type > BTA_HH_RPTT_FEATURE) /* invalid report type */ - p_rpt->rpt_type = BTA_HH_RPTT_RESRV; + if (p_rpt->rpt_type > BTA_HH_RPTT_FEATURE) /* invalid report type */ + p_rpt->rpt_type = BTA_HH_RPTT_RESRV; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s: report ID: %d", __func__, p_rpt->rpt_id); + APPL_TRACE_DEBUG("%s: report ID: %d", __func__, p_rpt->rpt_id); #endif - tBTA_HH_RPT_CACHE_ENTRY rpt_entry; - rpt_entry.rpt_id = p_rpt->rpt_id; - rpt_entry.rpt_type = p_rpt->rpt_type; - rpt_entry.rpt_uuid = p_rpt->uuid; - rpt_entry.srvc_inst_id = p_rpt->srvc_inst_id; - rpt_entry.char_inst_id = p_rpt->char_inst_id; - - bta_hh_le_co_rpt_info(p_dev_cb->addr, - &rpt_entry, - p_dev_cb->app_id); - } + tBTA_HH_RPT_CACHE_ENTRY rpt_entry; + rpt_entry.rpt_id = p_rpt->rpt_id; + rpt_entry.rpt_type = p_rpt->rpt_type; + rpt_entry.rpt_uuid = p_rpt->uuid; + rpt_entry.srvc_inst_id = p_rpt->srvc_inst_id; + rpt_entry.char_inst_id = p_rpt->char_inst_id; - if (p_rpt->index < BTA_HH_LE_RPT_MAX - 1) - p_rpt ++; - else - p_rpt = NULL; + bta_hh_le_co_rpt_info(p_dev_cb->addr, &rpt_entry, p_dev_cb->app_id); + } + + if (p_rpt->index < BTA_HH_LE_RPT_MAX - 1) + p_rpt++; + else + p_rpt = NULL; } /******************************************************************************* @@ -747,66 +702,59 @@ void bta_hh_le_save_report_ref(tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_LE_RPT *p_rpt, * Parameters: * ******************************************************************************/ -void bta_hh_le_register_input_notif(tBTA_HH_DEV_CB *p_dev_cb, uint8_t proto_mode, bool register_ba) -{ - tBTA_HH_LE_RPT *p_rpt = &p_dev_cb->hid_srvc.report[0]; +void bta_hh_le_register_input_notif(tBTA_HH_DEV_CB* p_dev_cb, + uint8_t proto_mode, bool register_ba) { + tBTA_HH_LE_RPT* p_rpt = &p_dev_cb->hid_srvc.report[0]; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s: bta_hh_le_register_input_notif mode: %d", __func__, proto_mode); + APPL_TRACE_DEBUG("%s: bta_hh_le_register_input_notif mode: %d", __func__, + proto_mode); #endif - for (int i = 0; i < BTA_HH_LE_RPT_MAX; i ++, p_rpt ++) - { - if (p_rpt->rpt_type == BTA_HH_RPTT_INPUT) - { - - if (register_ba && p_rpt->uuid == GATT_UUID_BATTERY_LEVEL) - { - BTA_GATTC_RegisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, - p_rpt->char_inst_id); - } - /* boot mode, deregister report input notification */ - else if (proto_mode == BTA_HH_PROTO_BOOT_MODE) - { - if (p_rpt->uuid == GATT_UUID_HID_REPORT && - p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) - { - APPL_TRACE_DEBUG("%s ---> Deregister Report ID: %d", __func__, p_rpt->rpt_id); - BTA_GATTC_DeregisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, - p_rpt->char_inst_id); - } - /* register boot reports notification */ - else if (p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT || - p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT) - { - APPL_TRACE_DEBUG("%s <--- Register Boot Report ID: %d", __func__, p_rpt->rpt_id); - BTA_GATTC_RegisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, - p_rpt->char_inst_id); - } - } - else if (proto_mode == BTA_HH_PROTO_RPT_MODE) - { - if ((p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT || - p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT) && - p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) - { - - APPL_TRACE_DEBUG("%s ---> Deregister Boot Report ID: %d", __func__, p_rpt->rpt_id); - BTA_GATTC_DeregisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, - p_rpt->char_inst_id); - } - else if (p_rpt->uuid == GATT_UUID_HID_REPORT && - p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) - { - APPL_TRACE_DEBUG("%s <--- Register Report ID: %d", __func__, p_rpt->rpt_id); - BTA_GATTC_RegisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, - p_rpt->char_inst_id); - } - } - /* - else unknow protocol mode */ + for (int i = 0; i < BTA_HH_LE_RPT_MAX; i++, p_rpt++) { + if (p_rpt->rpt_type == BTA_HH_RPTT_INPUT) { + if (register_ba && p_rpt->uuid == GATT_UUID_BATTERY_LEVEL) { + BTA_GATTC_RegisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, + p_rpt->char_inst_id); + } + /* boot mode, deregister report input notification */ + else if (proto_mode == BTA_HH_PROTO_BOOT_MODE) { + if (p_rpt->uuid == GATT_UUID_HID_REPORT && + p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) { + APPL_TRACE_DEBUG("%s ---> Deregister Report ID: %d", __func__, + p_rpt->rpt_id); + BTA_GATTC_DeregisterForNotifications( + bta_hh_cb.gatt_if, p_dev_cb->addr, p_rpt->char_inst_id); + } + /* register boot reports notification */ + else if (p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT || + p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT) { + APPL_TRACE_DEBUG("%s <--- Register Boot Report ID: %d", __func__, + p_rpt->rpt_id); + BTA_GATTC_RegisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, + p_rpt->char_inst_id); } + } else if (proto_mode == BTA_HH_PROTO_RPT_MODE) { + if ((p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT || + p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT) && + p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) { + APPL_TRACE_DEBUG("%s ---> Deregister Boot Report ID: %d", __func__, + p_rpt->rpt_id); + BTA_GATTC_DeregisterForNotifications( + bta_hh_cb.gatt_if, p_dev_cb->addr, p_rpt->char_inst_id); + } else if (p_rpt->uuid == GATT_UUID_HID_REPORT && + p_rpt->client_cfg_value == + BTA_GATT_CLT_CONFIG_NOTIFICATION) { + APPL_TRACE_DEBUG("%s <--- Register Report ID: %d", __func__, + p_rpt->rpt_id); + BTA_GATTC_RegisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, + p_rpt->char_inst_id); + } + } + /* + else unknow protocol mode */ } + } } /******************************************************************************* @@ -816,34 +764,29 @@ void bta_hh_le_register_input_notif(tBTA_HH_DEV_CB *p_dev_cb, uint8_t proto_mode * Description Deregister all notifications * ******************************************************************************/ -void bta_hh_le_deregister_input_notif(tBTA_HH_DEV_CB *p_dev_cb) -{ - tBTA_HH_LE_RPT *p_rpt = &p_dev_cb->hid_srvc.report[0]; - - for (uint8_t i = 0; i < BTA_HH_LE_RPT_MAX; i++, p_rpt++) - { - if (p_rpt->rpt_type == BTA_HH_RPTT_INPUT) - { - if (p_rpt->uuid == GATT_UUID_HID_REPORT && - p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) - { - APPL_TRACE_DEBUG("%s ---> Deregister Report ID: %d", __func__, p_rpt->rpt_id); - BTA_GATTC_DeregisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, - p_rpt->char_inst_id); - } - else if ((p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT || - p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT) && - p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) - { - APPL_TRACE_DEBUG("%s ---> Deregister Boot Report ID: %d", __func__, p_rpt->rpt_id); - BTA_GATTC_DeregisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, - p_rpt->char_inst_id); - } - } - } +void bta_hh_le_deregister_input_notif(tBTA_HH_DEV_CB* p_dev_cb) { + tBTA_HH_LE_RPT* p_rpt = &p_dev_cb->hid_srvc.report[0]; + + for (uint8_t i = 0; i < BTA_HH_LE_RPT_MAX; i++, p_rpt++) { + if (p_rpt->rpt_type == BTA_HH_RPTT_INPUT) { + if (p_rpt->uuid == GATT_UUID_HID_REPORT && + p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) { + APPL_TRACE_DEBUG("%s ---> Deregister Report ID: %d", __func__, + p_rpt->rpt_id); + BTA_GATTC_DeregisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, + p_rpt->char_inst_id); + } else if ((p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT || + p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT) && + p_rpt->client_cfg_value == BTA_GATT_CLT_CONFIG_NOTIFICATION) { + APPL_TRACE_DEBUG("%s ---> Deregister Boot Report ID: %d", __func__, + p_rpt->rpt_id); + BTA_GATTC_DeregisterForNotifications(bta_hh_cb.gatt_if, p_dev_cb->addr, + p_rpt->char_inst_id); + } + } + } } - /******************************************************************************* * * Function bta_hh_le_open_cmpl @@ -851,23 +794,20 @@ void bta_hh_le_deregister_input_notif(tBTA_HH_DEV_CB *p_dev_cb) * Description HID over GATT connection sucessfully opened * ******************************************************************************/ -void bta_hh_le_open_cmpl(tBTA_HH_DEV_CB *p_cb) -{ - if ( p_cb->disc_active == BTA_HH_LE_DISC_NONE) - { +void bta_hh_le_open_cmpl(tBTA_HH_DEV_CB* p_cb) { + if (p_cb->disc_active == BTA_HH_LE_DISC_NONE) { #if (BTA_HH_DEBUG == TRUE) - bta_hh_le_hid_report_dbg(p_cb); + bta_hh_le_hid_report_dbg(p_cb); #endif - bta_hh_le_register_input_notif(p_cb, p_cb->mode, true); - bta_hh_sm_execute(p_cb, BTA_HH_OPEN_CMPL_EVT, NULL); + bta_hh_le_register_input_notif(p_cb, p_cb->mode, true); + bta_hh_sm_execute(p_cb, BTA_HH_OPEN_CMPL_EVT, NULL); #if (BTA_HH_LE_RECONN == TRUE) - if (p_cb->status == BTA_HH_OK) - { - bta_hh_le_add_dev_bg_conn(p_cb, true); - } -#endif + if (p_cb->status == BTA_HH_OK) { + bta_hh_le_add_dev_bg_conn(p_cb, true); } +#endif + } } /******************************************************************************* @@ -878,56 +818,54 @@ void bta_hh_le_open_cmpl(tBTA_HH_DEV_CB *p_cb) * a characteristic * ******************************************************************************/ -bool bta_hh_le_write_ccc(tBTA_HH_DEV_CB *p_cb, - uint8_t char_handle, - uint16_t clt_cfg_value, - GATT_WRITE_OP_CB cb, - void* cb_data) -{ - tBTA_GATTC_DESCRIPTOR *p_desc = find_descriptor_by_short_uuid(p_cb->conn_id, - char_handle, GATT_UUID_CHAR_CLIENT_CONFIG); - if (!p_desc) - return false; - - vector value(2); - uint8_t* ptr = value.data(); - UINT16_TO_STREAM(ptr, clt_cfg_value); - - gatt_queue_write_op(GATT_WRITE_DESC, p_cb->conn_id, p_desc->handle, - std::move(value), BTA_GATTC_TYPE_WRITE, cb, cb_data); - return true; +bool bta_hh_le_write_ccc(tBTA_HH_DEV_CB* p_cb, uint8_t char_handle, + uint16_t clt_cfg_value, GATT_WRITE_OP_CB cb, + void* cb_data) { + tBTA_GATTC_DESCRIPTOR* p_desc = find_descriptor_by_short_uuid( + p_cb->conn_id, char_handle, GATT_UUID_CHAR_CLIENT_CONFIG); + if (!p_desc) return false; + + vector value(2); + uint8_t* ptr = value.data(); + UINT16_TO_STREAM(ptr, clt_cfg_value); + + gatt_queue_write_op(GATT_WRITE_DESC, p_cb->conn_id, p_desc->handle, + std::move(value), BTA_GATTC_TYPE_WRITE, cb, cb_data); + return true; } -bool bta_hh_le_write_rpt_clt_cfg(tBTA_HH_DEV_CB *p_cb); +bool bta_hh_le_write_rpt_clt_cfg(tBTA_HH_DEV_CB* p_cb); -static void write_rpt_ctl_cfg_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, void* data) { - uint8_t srvc_inst_id, hid_inst_id; +static void write_rpt_ctl_cfg_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, void* data) { + uint8_t srvc_inst_id, hid_inst_id; - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*)data; - const tBTA_GATTC_DESCRIPTOR *p_desc = BTA_GATTC_GetDescriptor(conn_id, handle); + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + const tBTA_GATTC_DESCRIPTOR* p_desc = + BTA_GATTC_GetDescriptor(conn_id, handle); - uint16_t char_uuid = p_desc->characteristic->uuid.uu.uuid16; + uint16_t char_uuid = p_desc->characteristic->uuid.uu.uuid16; - srvc_inst_id = p_desc->characteristic->service->handle; - hid_inst_id = srvc_inst_id; - switch (char_uuid) - { + srvc_inst_id = p_desc->characteristic->service->handle; + hid_inst_id = srvc_inst_id; + switch (char_uuid) { case GATT_UUID_BATTERY_LEVEL: /* battery level clt cfg registered */ - hid_inst_id = bta_hh_le_find_service_inst_by_battery_inst_id(p_dev_cb, srvc_inst_id); - /* FALLTHROUGH */ + hid_inst_id = bta_hh_le_find_service_inst_by_battery_inst_id( + p_dev_cb, srvc_inst_id); + /* FALLTHROUGH */ case GATT_UUID_HID_BT_KB_INPUT: case GATT_UUID_HID_BT_MOUSE_INPUT: case GATT_UUID_HID_REPORT: - if (status == BTA_GATT_OK) - p_dev_cb->hid_srvc.report[p_dev_cb->clt_cfg_idx].client_cfg_value = - BTA_GATT_CLT_CONFIG_NOTIFICATION; - p_dev_cb->clt_cfg_idx ++; - bta_hh_le_write_rpt_clt_cfg(p_dev_cb); - break; + if (status == BTA_GATT_OK) + p_dev_cb->hid_srvc.report[p_dev_cb->clt_cfg_idx].client_cfg_value = + BTA_GATT_CLT_CONFIG_NOTIFICATION; + p_dev_cb->clt_cfg_idx++; + bta_hh_le_write_rpt_clt_cfg(p_dev_cb); + break; default: - APPL_TRACE_ERROR("Unknown char ID clt cfg: 0x%04x", char_uuid); - } + APPL_TRACE_ERROR("Unknown char ID clt cfg: 0x%04x", char_uuid); + } } /******************************************************************************* * @@ -937,63 +875,59 @@ static void write_rpt_ctl_cfg_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t * enable all input notification upon connection open. * ******************************************************************************/ -bool bta_hh_le_write_rpt_clt_cfg(tBTA_HH_DEV_CB *p_cb) -{ - uint8_t i; - tBTA_HH_LE_RPT *p_rpt = &p_cb->hid_srvc.report[p_cb->clt_cfg_idx]; - - for (i = p_cb->clt_cfg_idx; i < BTA_HH_LE_RPT_MAX && p_rpt->in_use; i ++, p_rpt ++) - { - /* enable notification for all input report, regardless mode */ - if (p_rpt->rpt_type == BTA_HH_RPTT_INPUT) - { - if (bta_hh_le_write_ccc(p_cb, p_rpt->char_inst_id, - BTA_GATT_CLT_CONFIG_NOTIFICATION, - write_rpt_ctl_cfg_cb, p_cb)) - { - p_cb->clt_cfg_idx = i; - return true; - } - } +bool bta_hh_le_write_rpt_clt_cfg(tBTA_HH_DEV_CB* p_cb) { + uint8_t i; + tBTA_HH_LE_RPT* p_rpt = &p_cb->hid_srvc.report[p_cb->clt_cfg_idx]; + + for (i = p_cb->clt_cfg_idx; i < BTA_HH_LE_RPT_MAX && p_rpt->in_use; + i++, p_rpt++) { + /* enable notification for all input report, regardless mode */ + if (p_rpt->rpt_type == BTA_HH_RPTT_INPUT) { + if (bta_hh_le_write_ccc(p_cb, p_rpt->char_inst_id, + BTA_GATT_CLT_CONFIG_NOTIFICATION, + write_rpt_ctl_cfg_cb, p_cb)) { + p_cb->clt_cfg_idx = i; + return true; + } } - p_cb->clt_cfg_idx = 0; + } + p_cb->clt_cfg_idx = 0; - /* client configuration is completed, send open callback */ - if (p_cb->state == BTA_HH_W4_CONN_ST) - { - p_cb->disc_active &= ~BTA_HH_LE_DISC_HIDS; + /* client configuration is completed, send open callback */ + if (p_cb->state == BTA_HH_W4_CONN_ST) { + p_cb->disc_active &= ~BTA_HH_LE_DISC_HIDS; - bta_hh_le_open_cmpl(p_cb); - } - return false; + bta_hh_le_open_cmpl(p_cb); + } + return false; } -static void write_proto_mode_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, void* data) { - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*) data; +static void write_proto_mode_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, void* data) { + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; - if (p_dev_cb->state == BTA_HH_CONN_ST) { - /* Set protocol finished in CONN state*/ + if (p_dev_cb->state == BTA_HH_CONN_ST) { + /* Set protocol finished in CONN state*/ - uint16_t cb_evt = p_dev_cb->w4_evt; - if (cb_evt == 0) - return; + uint16_t cb_evt = p_dev_cb->w4_evt; + if (cb_evt == 0) return; - tBTA_HH_CBDATA cback_data; + tBTA_HH_CBDATA cback_data; - cback_data.handle = p_dev_cb->hid_handle; - cback_data.status = (status == BTA_GATT_OK) ? BTA_HH_OK : BTA_HH_ERR; + cback_data.handle = p_dev_cb->hid_handle; + cback_data.status = (status == BTA_GATT_OK) ? BTA_HH_OK : BTA_HH_ERR; - if (status == BTA_GATT_OK) - bta_hh_le_register_input_notif(p_dev_cb, p_dev_cb->mode, false); + if (status == BTA_GATT_OK) + bta_hh_le_register_input_notif(p_dev_cb, p_dev_cb->mode, false); - p_dev_cb->w4_evt = 0; - (* bta_hh_cb.p_cback)(cb_evt, (tBTA_HH *)&cback_data); - } else if (p_dev_cb->state == BTA_HH_W4_CONN_ST) { - p_dev_cb->status = (status == BTA_GATT_OK) ? BTA_HH_OK : BTA_HH_ERR_PROTO; + p_dev_cb->w4_evt = 0; + (*bta_hh_cb.p_cback)(cb_evt, (tBTA_HH*)&cback_data); + } else if (p_dev_cb->state == BTA_HH_W4_CONN_ST) { + p_dev_cb->status = (status == BTA_GATT_OK) ? BTA_HH_OK : BTA_HH_ERR_PROTO; - if ((p_dev_cb->disc_active & BTA_HH_LE_DISC_HIDS) == 0) - bta_hh_le_open_cmpl(p_dev_cb); - } + if ((p_dev_cb->disc_active & BTA_HH_LE_DISC_HIDS) == 0) + bta_hh_le_open_cmpl(p_dev_cb); + } } /******************************************************************************* @@ -1003,85 +937,87 @@ static void write_proto_mode_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t * Description Set remote device protocol mode. * ******************************************************************************/ -bool bta_hh_le_set_protocol_mode(tBTA_HH_DEV_CB *p_cb, tBTA_HH_PROTO_MODE mode) -{ - tBTA_HH_CBDATA cback_data; - - APPL_TRACE_DEBUG("%s attempt mode: %s", __func__, - (mode == BTA_HH_PROTO_RPT_MODE)? "Report": "Boot"); - - cback_data.handle = p_cb->hid_handle; - /* boot mode is not supported in the remote device */ - if (p_cb->hid_srvc.proto_mode_handle == 0) - { - p_cb->mode = BTA_HH_PROTO_RPT_MODE; - - if (mode == BTA_HH_PROTO_BOOT_MODE) - { - APPL_TRACE_ERROR("Set Boot Mode failed!! No PROTO_MODE Char!"); - cback_data.status = BTA_HH_ERR; - } - else - { - /* if set to report mode, need to de-register all input report notification */ - bta_hh_le_register_input_notif(p_cb, p_cb->mode, false); - cback_data.status = BTA_HH_OK; - } - if (p_cb->state == BTA_HH_W4_CONN_ST) - { - p_cb->status = (cback_data.status == BTA_HH_OK)? BTA_HH_OK: BTA_HH_ERR_PROTO; - } - else - (* bta_hh_cb.p_cback)(BTA_HH_SET_PROTO_EVT, (tBTA_HH *)&cback_data); - } else if (p_cb->mode != mode) { - p_cb->mode = mode; - mode = (mode == BTA_HH_PROTO_BOOT_MODE)? BTA_HH_LE_PROTO_BOOT_MODE : BTA_HH_LE_PROTO_REPORT_MODE; - - gatt_queue_write_op(GATT_WRITE_CHAR, p_cb->conn_id, p_cb->hid_srvc.proto_mode_handle, - { mode }, BTA_GATTC_TYPE_WRITE_NO_RSP, write_proto_mode_cb, p_cb); - return true; - } +bool bta_hh_le_set_protocol_mode(tBTA_HH_DEV_CB* p_cb, + tBTA_HH_PROTO_MODE mode) { + tBTA_HH_CBDATA cback_data; - return false; + APPL_TRACE_DEBUG("%s attempt mode: %s", __func__, + (mode == BTA_HH_PROTO_RPT_MODE) ? "Report" : "Boot"); + + cback_data.handle = p_cb->hid_handle; + /* boot mode is not supported in the remote device */ + if (p_cb->hid_srvc.proto_mode_handle == 0) { + p_cb->mode = BTA_HH_PROTO_RPT_MODE; + + if (mode == BTA_HH_PROTO_BOOT_MODE) { + APPL_TRACE_ERROR("Set Boot Mode failed!! No PROTO_MODE Char!"); + cback_data.status = BTA_HH_ERR; + } else { + /* if set to report mode, need to de-register all input report + * notification */ + bta_hh_le_register_input_notif(p_cb, p_cb->mode, false); + cback_data.status = BTA_HH_OK; + } + if (p_cb->state == BTA_HH_W4_CONN_ST) { + p_cb->status = + (cback_data.status == BTA_HH_OK) ? BTA_HH_OK : BTA_HH_ERR_PROTO; + } else + (*bta_hh_cb.p_cback)(BTA_HH_SET_PROTO_EVT, (tBTA_HH*)&cback_data); + } else if (p_cb->mode != mode) { + p_cb->mode = mode; + mode = (mode == BTA_HH_PROTO_BOOT_MODE) ? BTA_HH_LE_PROTO_BOOT_MODE + : BTA_HH_LE_PROTO_REPORT_MODE; + + gatt_queue_write_op(GATT_WRITE_CHAR, p_cb->conn_id, + p_cb->hid_srvc.proto_mode_handle, {mode}, + BTA_GATTC_TYPE_WRITE_NO_RSP, write_proto_mode_cb, p_cb); + return true; + } + + return false; } /******************************************************************************* * Function get_protocol_mode_cb * - * Description Process the Read protocol mode, send GET_PROTO_EVT to application + * Description Process the Read protocol mode, send GET_PROTO_EVT to + *application * with the protocol mode. * ******************************************************************************/ -static void get_protocol_mode_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, uint16_t len, - uint8_t *value, void* data) { - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB *)data; - tBTA_HH_HSDATA hs_data; - - hs_data.status = BTA_HH_ERR; - hs_data.handle = p_dev_cb->hid_handle; - hs_data.rsp_data.proto_mode = p_dev_cb->mode; - - if (status == BTA_GATT_OK && len) - { - hs_data.status = BTA_HH_OK; - /* match up BTE/BTA report/boot mode def*/ - hs_data.rsp_data.proto_mode = *(value); - /* LE repot mode is the opposite value of BR/EDR report mode, flip it here */ - if (hs_data.rsp_data.proto_mode == 0) - hs_data.rsp_data.proto_mode = BTA_HH_PROTO_BOOT_MODE; - else - hs_data.rsp_data.proto_mode = BTA_HH_PROTO_RPT_MODE; - - p_dev_cb->mode = hs_data.rsp_data.proto_mode; - } +static void get_protocol_mode_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, uint8_t* value, + void* data) { + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + tBTA_HH_HSDATA hs_data; + + hs_data.status = BTA_HH_ERR; + hs_data.handle = p_dev_cb->hid_handle; + hs_data.rsp_data.proto_mode = p_dev_cb->mode; + + if (status == BTA_GATT_OK && len) { + hs_data.status = BTA_HH_OK; + /* match up BTE/BTA report/boot mode def*/ + hs_data.rsp_data.proto_mode = *(value); + /* LE repot mode is the opposite value of BR/EDR report mode, flip it here + */ + if (hs_data.rsp_data.proto_mode == 0) + hs_data.rsp_data.proto_mode = BTA_HH_PROTO_BOOT_MODE; + else + hs_data.rsp_data.proto_mode = BTA_HH_PROTO_RPT_MODE; + + p_dev_cb->mode = hs_data.rsp_data.proto_mode; + } #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("LE GET_PROTOCOL Mode = [%s]", - (hs_data.rsp_data.proto_mode == BTA_HH_PROTO_RPT_MODE)? "Report" : "Boot"); + APPL_TRACE_DEBUG("LE GET_PROTOCOL Mode = [%s]", + (hs_data.rsp_data.proto_mode == BTA_HH_PROTO_RPT_MODE) + ? "Report" + : "Boot"); #endif - p_dev_cb->w4_evt = 0; - (* bta_hh_cb.p_cback)(BTA_HH_GET_PROTO_EVT, (tBTA_HH *)&hs_data); + p_dev_cb->w4_evt = 0; + (*bta_hh_cb.p_cback)(BTA_HH_GET_PROTO_EVT, (tBTA_HH*)&hs_data); } /******************************************************************************* @@ -1091,23 +1027,23 @@ static void get_protocol_mode_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t * Description Get remote device protocol mode. * ******************************************************************************/ -void bta_hh_le_get_protocol_mode(tBTA_HH_DEV_CB *p_cb) -{ - tBTA_HH_HSDATA hs_data; - p_cb->w4_evt = BTA_HH_GET_PROTO_EVT; - - if (p_cb->hid_srvc.in_use && p_cb->hid_srvc.proto_mode_handle != 0) { - gatt_queue_read_op(GATT_READ_CHAR, p_cb->conn_id, p_cb->hid_srvc.proto_mode_handle, - get_protocol_mode_cb, p_cb); - return; - } +void bta_hh_le_get_protocol_mode(tBTA_HH_DEV_CB* p_cb) { + tBTA_HH_HSDATA hs_data; + p_cb->w4_evt = BTA_HH_GET_PROTO_EVT; + + if (p_cb->hid_srvc.in_use && p_cb->hid_srvc.proto_mode_handle != 0) { + gatt_queue_read_op(GATT_READ_CHAR, p_cb->conn_id, + p_cb->hid_srvc.proto_mode_handle, get_protocol_mode_cb, + p_cb); + return; + } - /* no service support protocol_mode, by default report mode */ - hs_data.status = BTA_HH_OK; - hs_data.handle = p_cb->hid_handle; - hs_data.rsp_data.proto_mode = BTA_HH_PROTO_RPT_MODE; - p_cb->w4_evt = 0; - (* bta_hh_cb.p_cback)(BTA_HH_GET_PROTO_EVT, (tBTA_HH *)&hs_data); + /* no service support protocol_mode, by default report mode */ + hs_data.status = BTA_HH_OK; + hs_data.handle = p_cb->hid_handle; + hs_data.rsp_data.proto_mode = BTA_HH_PROTO_RPT_MODE; + p_cb->w4_evt = 0; + (*bta_hh_cb.p_cback)(BTA_HH_GET_PROTO_EVT, (tBTA_HH*)&hs_data); } /******************************************************************************* @@ -1119,65 +1055,60 @@ void bta_hh_le_get_protocol_mode(tBTA_HH_DEV_CB *p_cb) * Parameters: * ******************************************************************************/ -void bta_hh_le_dis_cback(BD_ADDR addr, tDIS_VALUE *p_dis_value) -{ - tBTA_HH_DEV_CB *p_cb = bta_hh_le_find_dev_cb_by_bda(addr); - +void bta_hh_le_dis_cback(BD_ADDR addr, tDIS_VALUE* p_dis_value) { + tBTA_HH_DEV_CB* p_cb = bta_hh_le_find_dev_cb_by_bda(addr); - if (p_cb == NULL || p_dis_value == NULL) - { - APPL_TRACE_ERROR("received unexpected/error DIS callback"); - return; - } + if (p_cb == NULL || p_dis_value == NULL) { + APPL_TRACE_ERROR("received unexpected/error DIS callback"); + return; + } - p_cb->disc_active &= ~BTA_HH_LE_DISC_DIS; - /* plug in the PnP info for this device */ - if (p_dis_value->attr_mask & DIS_ATTR_PNP_ID_BIT) - { + p_cb->disc_active &= ~BTA_HH_LE_DISC_DIS; + /* plug in the PnP info for this device */ + if (p_dis_value->attr_mask & DIS_ATTR_PNP_ID_BIT) { #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("Plug in PnP info: product_id = %02x, vendor_id = %04x, version = %04x", - p_dis_value->pnp_id.product_id, - p_dis_value->pnp_id.vendor_id, - p_dis_value->pnp_id.product_version); + APPL_TRACE_DEBUG( + "Plug in PnP info: product_id = %02x, vendor_id = %04x, version = %04x", + p_dis_value->pnp_id.product_id, p_dis_value->pnp_id.vendor_id, + p_dis_value->pnp_id.product_version); #endif - p_cb->dscp_info.product_id = p_dis_value->pnp_id.product_id; - p_cb->dscp_info.vendor_id = p_dis_value->pnp_id.vendor_id; - p_cb->dscp_info.version = p_dis_value->pnp_id.product_version; - } - bta_hh_le_open_cmpl(p_cb); + p_cb->dscp_info.product_id = p_dis_value->pnp_id.product_id; + p_cb->dscp_info.vendor_id = p_dis_value->pnp_id.vendor_id; + p_cb->dscp_info.version = p_dis_value->pnp_id.product_version; + } + bta_hh_le_open_cmpl(p_cb); } /******************************************************************************* * * Function bta_hh_le_pri_service_discovery * - * Description Initialize GATT discovery on the remote LE HID device by opening + * Description Initialize GATT discovery on the remote LE HID device by + *opening * a GATT connection first. * * Parameters: * ******************************************************************************/ -void bta_hh_le_pri_service_discovery(tBTA_HH_DEV_CB *p_cb) -{ - tBT_UUID pri_srvc; +void bta_hh_le_pri_service_discovery(tBTA_HH_DEV_CB* p_cb) { + tBT_UUID pri_srvc; - bta_hh_le_co_reset_rpt_cache(p_cb->addr, p_cb->app_id); + bta_hh_le_co_reset_rpt_cache(p_cb->addr, p_cb->app_id); - p_cb->disc_active |= (BTA_HH_LE_DISC_HIDS|BTA_HH_LE_DISC_DIS); + p_cb->disc_active |= (BTA_HH_LE_DISC_HIDS | BTA_HH_LE_DISC_DIS); - /* read DIS info */ - if (!DIS_ReadDISInfo(p_cb->addr, bta_hh_le_dis_cback, DIS_ATTR_PNP_ID_BIT)) - { - APPL_TRACE_ERROR("read DIS failed"); - p_cb->disc_active &= ~BTA_HH_LE_DISC_DIS; - } + /* read DIS info */ + if (!DIS_ReadDISInfo(p_cb->addr, bta_hh_le_dis_cback, DIS_ATTR_PNP_ID_BIT)) { + APPL_TRACE_ERROR("read DIS failed"); + p_cb->disc_active &= ~BTA_HH_LE_DISC_DIS; + } - /* in parallel */ - /* start primary service discovery for HID service */ - pri_srvc.len = LEN_UUID_16; - pri_srvc.uu.uuid16 = UUID_SERVCLASS_LE_HID; - BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, &pri_srvc); - return; + /* in parallel */ + /* start primary service discovery for HID service */ + pri_srvc.len = LEN_UUID_16; + pri_srvc.uu.uuid16 = UUID_SERVCLASS_LE_HID; + BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, &pri_srvc); + return; } /******************************************************************************* @@ -1189,23 +1120,22 @@ void bta_hh_le_pri_service_discovery(tBTA_HH_DEV_CB *p_cb) * Returns None * ******************************************************************************/ -void bta_hh_le_encrypt_cback(BD_ADDR bd_addr, UNUSED_ATTR tBTA_GATT_TRANSPORT transport, - UNUSED_ATTR void *p_ref_data, tBTM_STATUS result) -{ - uint8_t idx = bta_hh_find_cb(bd_addr); - tBTA_HH_DEV_CB *p_dev_cb; - - if (idx != BTA_HH_IDX_INVALID) - p_dev_cb = &bta_hh_cb.kdev[idx]; - else - { - APPL_TRACE_ERROR("unexpected encryption callback, ignore"); - return; - } - p_dev_cb->status = (result == BTM_SUCCESS) ? BTA_HH_OK : BTA_HH_ERR_SEC; - p_dev_cb->reason = result; +void bta_hh_le_encrypt_cback(BD_ADDR bd_addr, + UNUSED_ATTR tBTA_GATT_TRANSPORT transport, + UNUSED_ATTR void* p_ref_data, tBTM_STATUS result) { + uint8_t idx = bta_hh_find_cb(bd_addr); + tBTA_HH_DEV_CB* p_dev_cb; + + if (idx != BTA_HH_IDX_INVALID) + p_dev_cb = &bta_hh_cb.kdev[idx]; + else { + APPL_TRACE_ERROR("unexpected encryption callback, ignore"); + return; + } + p_dev_cb->status = (result == BTM_SUCCESS) ? BTA_HH_OK : BTA_HH_ERR_SEC; + p_dev_cb->reason = result; - bta_hh_sm_execute(p_dev_cb, BTA_HH_ENC_CMPL_EVT, NULL); + bta_hh_sm_execute(p_dev_cb, BTA_HH_ENC_CMPL_EVT, NULL); } /******************************************************************************* @@ -1213,54 +1143,48 @@ void bta_hh_le_encrypt_cback(BD_ADDR bd_addr, UNUSED_ATTR tBTA_GATT_TRANSPORT tr * Function bta_hh_security_cmpl * * Description Security check completed, start the service discovery - * if no cache available, otherwise report connection open completed + * if no cache available, otherwise report connection open + *completed * * Parameters: * ******************************************************************************/ -void bta_hh_security_cmpl(tBTA_HH_DEV_CB *p_cb, - UNUSED_ATTR tBTA_HH_DATA *p_buf) -{ - APPL_TRACE_DEBUG("%s", __func__); - if (p_cb->status == BTA_HH_OK) - { - if (!p_cb->hid_srvc.in_use) - { - APPL_TRACE_DEBUG("bta_hh_security_cmpl no reports loaded, try to load"); - - /* start loading the cache if not in stack */ - //TODO(jpawlowski): cache storage is broken, fix it - // tBTA_HH_RPT_CACHE_ENTRY *p_rpt_cache; - // uint8_t num_rpt = 0; - // if ((p_rpt_cache = bta_hh_le_co_cache_load(p_cb->addr, &num_rpt, p_cb->app_id)) != NULL) - // { - // bta_hh_process_cache_rpt(p_cb, p_rpt_cache, num_rpt); - // } - } - /* discovery has been done for HID service */ - if (p_cb->app_id != 0 && p_cb->hid_srvc.in_use) - { - APPL_TRACE_DEBUG("%s: discovery has been done for HID service", __func__); - /* configure protocol mode */ - if (bta_hh_le_set_protocol_mode(p_cb, p_cb->mode) == false) - { - bta_hh_le_open_cmpl(p_cb); - } - } - /* start primary service discovery for HID service */ - else - { - APPL_TRACE_DEBUG("%s: Starting service discovery", __func__); - bta_hh_le_pri_service_discovery(p_cb); - } +void bta_hh_security_cmpl(tBTA_HH_DEV_CB* p_cb, + UNUSED_ATTR tBTA_HH_DATA* p_buf) { + APPL_TRACE_DEBUG("%s", __func__); + if (p_cb->status == BTA_HH_OK) { + if (!p_cb->hid_srvc.in_use) { + APPL_TRACE_DEBUG("bta_hh_security_cmpl no reports loaded, try to load"); + + /* start loading the cache if not in stack */ + // TODO(jpawlowski): cache storage is broken, fix it + // tBTA_HH_RPT_CACHE_ENTRY *p_rpt_cache; + // uint8_t num_rpt = 0; + // if ((p_rpt_cache = bta_hh_le_co_cache_load(p_cb->addr, &num_rpt, + // p_cb->app_id)) != NULL) + // { + // bta_hh_process_cache_rpt(p_cb, p_rpt_cache, num_rpt); + // } + } + /* discovery has been done for HID service */ + if (p_cb->app_id != 0 && p_cb->hid_srvc.in_use) { + APPL_TRACE_DEBUG("%s: discovery has been done for HID service", __func__); + /* configure protocol mode */ + if (bta_hh_le_set_protocol_mode(p_cb, p_cb->mode) == false) { + bta_hh_le_open_cmpl(p_cb); + } } - else - { - APPL_TRACE_ERROR("%s() - encryption failed; status=0x%04x, reason=0x%04x", - __func__, p_cb->status, p_cb->reason); - if (!(p_cb->status == BTA_HH_ERR_SEC && p_cb->reason == BTM_ERR_PROCESSING)) - bta_hh_le_api_disc_act(p_cb); + /* start primary service discovery for HID service */ + else { + APPL_TRACE_DEBUG("%s: Starting service discovery", __func__); + bta_hh_le_pri_service_discovery(p_cb); } + } else { + APPL_TRACE_ERROR("%s() - encryption failed; status=0x%04x, reason=0x%04x", + __func__, p_cb->status, p_cb->reason); + if (!(p_cb->status == BTA_HH_ERR_SEC && p_cb->reason == BTM_ERR_PROCESSING)) + bta_hh_le_api_disc_act(p_cb); + } } /******************************************************************************* @@ -1272,16 +1196,14 @@ void bta_hh_security_cmpl(tBTA_HH_DEV_CB *p_cb, * Returns * ******************************************************************************/ -void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf) -{ - if (p_cb == NULL || p_cb->security_pending == false || - p_buf == NULL || p_buf->le_enc_cmpl.client_if != bta_hh_cb.gatt_if) - { - return; - } +void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_buf) { + if (p_cb == NULL || p_cb->security_pending == false || p_buf == NULL || + p_buf->le_enc_cmpl.client_if != bta_hh_cb.gatt_if) { + return; + } - p_cb->security_pending = false; - bta_hh_start_security(p_cb, NULL); + p_cb->security_pending = false; + bta_hh_start_security(p_cb, NULL); } /******************************************************************************* @@ -1293,15 +1215,14 @@ void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf) * Parameters: * ******************************************************************************/ -void bta_hh_clear_service_cache(tBTA_HH_DEV_CB *p_cb) -{ - tBTA_HH_LE_HID_SRVC *p_hid_srvc = &p_cb->hid_srvc; +void bta_hh_clear_service_cache(tBTA_HH_DEV_CB* p_cb) { + tBTA_HH_LE_HID_SRVC* p_hid_srvc = &p_cb->hid_srvc; - p_cb->app_id = 0; - p_cb->dscp_info.descriptor.dsc_list = NULL; + p_cb->app_id = 0; + p_cb->dscp_info.descriptor.dsc_list = NULL; - osi_free_and_reset((void **)&p_hid_srvc->rpt_map); - memset(p_hid_srvc, 0, sizeof(tBTA_HH_LE_HID_SRVC)); + osi_free_and_reset((void**)&p_hid_srvc->rpt_map); + memset(p_hid_srvc, 0, sizeof(tBTA_HH_LE_HID_SRVC)); } /******************************************************************************* @@ -1313,54 +1234,47 @@ void bta_hh_clear_service_cache(tBTA_HH_DEV_CB *p_cb) * Parameters: * ******************************************************************************/ -void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, - UNUSED_ATTR tBTA_HH_DATA *p_buf) -{ - uint8_t sec_flag=0; - tBTM_SEC_DEV_REC *p_dev_rec; - - p_dev_rec = btm_find_dev(p_cb->addr); - if (p_dev_rec) - { - if (p_dev_rec->sec_state == BTM_SEC_STATE_ENCRYPTING || - p_dev_rec->sec_state == BTM_SEC_STATE_AUTHENTICATING) - { - /* if security collision happened, wait for encryption done */ - p_cb->security_pending = true; - return; - } - } - - /* verify bond */ - BTM_GetSecurityFlagsByTransport(p_cb->addr, &sec_flag, BT_TRANSPORT_LE); - - /* if link has been encrypted */ - if (sec_flag & BTM_SEC_FLAG_ENCRYPTED) - { - bta_hh_sm_execute(p_cb, BTA_HH_ENC_CMPL_EVT, NULL); - } - /* if bonded and link not encrypted */ - else if (sec_flag & BTM_SEC_FLAG_LKEY_KNOWN) - { - sec_flag = BTM_BLE_SEC_ENCRYPT; - p_cb->status = BTA_HH_ERR_AUTH_FAILED; - BTM_SetEncryption(p_cb->addr, BTA_TRANSPORT_LE, bta_hh_le_encrypt_cback, NULL, sec_flag); - } - /* unbonded device, report security error here */ - else if (p_cb->sec_mask != BTA_SEC_NONE) - { - sec_flag = BTM_BLE_SEC_ENCRYPT_NO_MITM; - p_cb->status = BTA_HH_ERR_AUTH_FAILED; - bta_hh_clear_service_cache(p_cb); - BTM_SetEncryption(p_cb->addr, BTA_TRANSPORT_LE, bta_hh_le_encrypt_cback, NULL, sec_flag); - } - /* otherwise let it go through */ - else - { - bta_hh_sm_execute(p_cb, BTA_HH_ENC_CMPL_EVT, NULL); - } - - +void bta_hh_start_security(tBTA_HH_DEV_CB* p_cb, + UNUSED_ATTR tBTA_HH_DATA* p_buf) { + uint8_t sec_flag = 0; + tBTM_SEC_DEV_REC* p_dev_rec; + + p_dev_rec = btm_find_dev(p_cb->addr); + if (p_dev_rec) { + if (p_dev_rec->sec_state == BTM_SEC_STATE_ENCRYPTING || + p_dev_rec->sec_state == BTM_SEC_STATE_AUTHENTICATING) { + /* if security collision happened, wait for encryption done */ + p_cb->security_pending = true; + return; + } + } + + /* verify bond */ + BTM_GetSecurityFlagsByTransport(p_cb->addr, &sec_flag, BT_TRANSPORT_LE); + + /* if link has been encrypted */ + if (sec_flag & BTM_SEC_FLAG_ENCRYPTED) { + bta_hh_sm_execute(p_cb, BTA_HH_ENC_CMPL_EVT, NULL); + } + /* if bonded and link not encrypted */ + else if (sec_flag & BTM_SEC_FLAG_LKEY_KNOWN) { + sec_flag = BTM_BLE_SEC_ENCRYPT; + p_cb->status = BTA_HH_ERR_AUTH_FAILED; + BTM_SetEncryption(p_cb->addr, BTA_TRANSPORT_LE, bta_hh_le_encrypt_cback, + NULL, sec_flag); + } + /* unbonded device, report security error here */ + else if (p_cb->sec_mask != BTA_SEC_NONE) { + sec_flag = BTM_BLE_SEC_ENCRYPT_NO_MITM; + p_cb->status = BTA_HH_ERR_AUTH_FAILED; + bta_hh_clear_service_cache(p_cb); + BTM_SetEncryption(p_cb->addr, BTA_TRANSPORT_LE, bta_hh_le_encrypt_cback, + NULL, sec_flag); + } + /* otherwise let it go through */ + else { + bta_hh_sm_execute(p_cb, BTA_HH_ENC_CMPL_EVT, NULL); + } } /******************************************************************************* @@ -1372,45 +1286,42 @@ void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, * Parameters: * ******************************************************************************/ -void bta_hh_gatt_open(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf) -{ - tBTA_GATTC_OPEN *p_data = &p_buf->le_open; - uint8_t *p2; - tHID_STATUS status = BTA_HH_ERR; +void bta_hh_gatt_open(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_buf) { + tBTA_GATTC_OPEN* p_data = &p_buf->le_open; + uint8_t* p2; + tHID_STATUS status = BTA_HH_ERR; - /* if received invalid callback data , ignore it */ - if (p_cb == NULL || p_data == NULL) - return; + /* if received invalid callback data , ignore it */ + if (p_cb == NULL || p_data == NULL) return; - p2 = p_data->remote_bda; + p2 = p_data->remote_bda; - APPL_TRACE_DEBUG("bta_hh_gatt_open BTA_GATTC_OPEN_EVT bda= [%08x%04x] status =%d", - ((p2[0])<<24)+((p2[1])<<16)+((p2[2])<<8)+(p2[3]), - ((p2[4])<<8)+ p2[5],p_data->status); + APPL_TRACE_DEBUG( + "bta_hh_gatt_open BTA_GATTC_OPEN_EVT bda= [%08x%04x] status =%d", + ((p2[0]) << 24) + ((p2[1]) << 16) + ((p2[2]) << 8) + (p2[3]), + ((p2[4]) << 8) + p2[5], p_data->status); - if (p_data->status == BTA_GATT_OK) - { - p_cb->is_le_device = true; - p_cb->in_use = true; - p_cb->conn_id = p_data->conn_id; - p_cb->hid_handle = BTA_HH_GET_LE_DEV_HDL(p_cb->index); + if (p_data->status == BTA_GATT_OK) { + p_cb->is_le_device = true; + p_cb->in_use = true; + p_cb->conn_id = p_data->conn_id; + p_cb->hid_handle = BTA_HH_GET_LE_DEV_HDL(p_cb->index); - bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index; + bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index; - gatt_op_queue_clean(p_cb->conn_id); + gatt_op_queue_clean(p_cb->conn_id); #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("hid_handle = %2x conn_id = %04x cb_index = %d", p_cb->hid_handle, p_cb->conn_id, p_cb->index); + APPL_TRACE_DEBUG("hid_handle = %2x conn_id = %04x cb_index = %d", + p_cb->hid_handle, p_cb->conn_id, p_cb->index); #endif - bta_hh_sm_execute(p_cb, BTA_HH_START_ENC_EVT, NULL); - - } - else /* open failure */ - { - bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA *)&status); - } + bta_hh_sm_execute(p_cb, BTA_HH_START_ENC_EVT, NULL); + } else /* open failure */ + { + bta_hh_sm_execute(p_cb, BTA_HH_SDP_CMPL_EVT, (tBTA_HH_DATA*)&status); + } } /******************************************************************************* @@ -1423,23 +1334,22 @@ void bta_hh_gatt_open(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf) * Parameters: * ******************************************************************************/ -void bta_hh_le_close(tBTA_GATTC_CLOSE * p_data) -{ - tBTA_HH_DEV_CB *p_dev_cb = bta_hh_le_find_dev_cb_by_bda(p_data->remote_bda); - uint16_t sm_event = BTA_HH_GATT_CLOSE_EVT; - - if (p_dev_cb != NULL) { - tBTA_HH_LE_CLOSE *p_buf = - (tBTA_HH_LE_CLOSE *)osi_malloc(sizeof(tBTA_HH_LE_CLOSE)); - p_buf->hdr.event = sm_event; - p_buf->hdr.layer_specific = (uint16_t)p_dev_cb->hid_handle; - p_buf->conn_id = p_data->conn_id; - p_buf->reason = p_data->reason; - - p_dev_cb->conn_id = BTA_GATT_INVALID_CONN_ID; - p_dev_cb->security_pending = false; - bta_sys_sendmsg(p_buf); - } +void bta_hh_le_close(tBTA_GATTC_CLOSE* p_data) { + tBTA_HH_DEV_CB* p_dev_cb = bta_hh_le_find_dev_cb_by_bda(p_data->remote_bda); + uint16_t sm_event = BTA_HH_GATT_CLOSE_EVT; + + if (p_dev_cb != NULL) { + tBTA_HH_LE_CLOSE* p_buf = + (tBTA_HH_LE_CLOSE*)osi_malloc(sizeof(tBTA_HH_LE_CLOSE)); + p_buf->hdr.event = sm_event; + p_buf->hdr.layer_specific = (uint16_t)p_dev_cb->hid_handle; + p_buf->conn_id = p_data->conn_id; + p_buf->reason = p_data->reason; + + p_dev_cb->conn_id = BTA_GATT_INVALID_CONN_ID; + p_dev_cb->security_pending = false; + bta_sys_sendmsg(p_buf); + } } /******************************************************************************* @@ -1451,147 +1361,148 @@ void bta_hh_le_close(tBTA_GATTC_CLOSE * p_data) * Parameters: * ******************************************************************************/ -void bta_hh_le_gatt_disc_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_STATUS status) -{ - APPL_TRACE_DEBUG("bta_hh_le_gatt_disc_cmpl "); - - /* if open sucessful or protocol mode not desired, keep the connection open but inform app */ - if (status == BTA_HH_OK || status == BTA_HH_ERR_PROTO) - { - /* assign a special APP ID temp, since device type unknown */ - p_cb->app_id = BTA_HH_APP_ID_LE; - - /* set report notification configuration */ - p_cb->clt_cfg_idx = 0; - bta_hh_le_write_rpt_clt_cfg(p_cb); - } - else /* error, close the GATT connection */ - { - /* close GATT connection if it's on */ - bta_hh_le_api_disc_act(p_cb); - } -} +void bta_hh_le_gatt_disc_cmpl(tBTA_HH_DEV_CB* p_cb, tBTA_HH_STATUS status) { + APPL_TRACE_DEBUG("bta_hh_le_gatt_disc_cmpl "); -static void read_hid_info_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, uint16_t len, - uint8_t *value, void* data) { - if (status != BTA_GATT_OK) { - APPL_TRACE_ERROR("%s: error: %d", __func__, status); - return; - } + /* if open sucessful or protocol mode not desired, keep the connection open + * but inform app */ + if (status == BTA_HH_OK || status == BTA_HH_ERR_PROTO) { + /* assign a special APP ID temp, since device type unknown */ + p_cb->app_id = BTA_HH_APP_ID_LE; - if (len != 4) { - APPL_TRACE_ERROR("%s: wrong length: %d", __func__, len); - return; - } + /* set report notification configuration */ + p_cb->clt_cfg_idx = 0; + bta_hh_le_write_rpt_clt_cfg(p_cb); + } else /* error, close the GATT connection */ + { + /* close GATT connection if it's on */ + bta_hh_le_api_disc_act(p_cb); + } +} + +static void read_hid_info_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, uint8_t* value, + void* data) { + if (status != BTA_GATT_OK) { + APPL_TRACE_ERROR("%s: error: %d", __func__, status); + return; + } - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*)data; - uint8_t *pp = value; - /* save device information */ - STREAM_TO_UINT16(p_dev_cb->dscp_info.version, pp); - STREAM_TO_UINT8(p_dev_cb->dscp_info.ctry_code, pp); - STREAM_TO_UINT8(p_dev_cb->dscp_info.flag, pp); + if (len != 4) { + APPL_TRACE_ERROR("%s: wrong length: %d", __func__, len); + return; + } + + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + uint8_t* pp = value; + /* save device information */ + STREAM_TO_UINT16(p_dev_cb->dscp_info.version, pp); + STREAM_TO_UINT8(p_dev_cb->dscp_info.ctry_code, pp); + STREAM_TO_UINT8(p_dev_cb->dscp_info.flag, pp); } -static void read_hid_report_map_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, - uint16_t len, uint8_t *value, void* data) { - if (status != BTA_GATT_OK) { - APPL_TRACE_ERROR("%s: error reading characteristic: %d", __func__, status); - return; - } +static void read_hid_report_map_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, + uint8_t* value, void* data) { + if (status != BTA_GATT_OK) { + APPL_TRACE_ERROR("%s: error reading characteristic: %d", __func__, status); + return; + } - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*)data; - tBTA_HH_LE_HID_SRVC *p_srvc = &p_dev_cb->hid_srvc; + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + tBTA_HH_LE_HID_SRVC* p_srvc = &p_dev_cb->hid_srvc; - osi_free_and_reset((void **)&p_srvc->rpt_map); + osi_free_and_reset((void**)&p_srvc->rpt_map); - if (len > 0) { - p_srvc->rpt_map = (uint8_t *)osi_malloc(len); + if (len > 0) { + p_srvc->rpt_map = (uint8_t*)osi_malloc(len); - uint8_t *pp = value; - STREAM_TO_ARRAY(p_srvc->rpt_map, pp, len); - p_srvc->descriptor.dl_len = len; - p_srvc->descriptor.dsc_list = p_dev_cb->hid_srvc.rpt_map; - } + uint8_t* pp = value; + STREAM_TO_ARRAY(p_srvc->rpt_map, pp, len); + p_srvc->descriptor.dl_len = len; + p_srvc->descriptor.dsc_list = p_dev_cb->hid_srvc.rpt_map; + } } -static void read_ext_rpt_ref_desc_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, - uint16_t len, uint8_t *value, void* data) { - if (status != BTA_GATT_OK) { - APPL_TRACE_ERROR("%s: error: %d", __func__, status); - return; - } +static void read_ext_rpt_ref_desc_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, + uint8_t* value, void* data) { + if (status != BTA_GATT_OK) { + APPL_TRACE_ERROR("%s: error: %d", __func__, status); + return; + } - /* if the length of the descriptor value is right, parse it assume it's a 16 bits UUID */ - if (len != LEN_UUID_16) { - APPL_TRACE_ERROR("%s: we support only 16bit UUID: %d", __func__, len); - return; - } + /* if the length of the descriptor value is right, parse it assume it's a 16 + * bits UUID */ + if (len != LEN_UUID_16) { + APPL_TRACE_ERROR("%s: we support only 16bit UUID: %d", __func__, len); + return; + } - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*)data; - uint8_t *pp = value; + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + uint8_t* pp = value; - STREAM_TO_UINT16(p_dev_cb->hid_srvc.ext_rpt_ref, pp); + STREAM_TO_UINT16(p_dev_cb->hid_srvc.ext_rpt_ref, pp); #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s: External Report Reference UUID 0x%04x", __func__, - p_dev_cb->hid_srvc.ext_rpt_ref); + APPL_TRACE_DEBUG("%s: External Report Reference UUID 0x%04x", __func__, + p_dev_cb->hid_srvc.ext_rpt_ref); #endif } -static void read_report_ref_desc_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, - uint16_t len, uint8_t *value, void* data) { - if (status != BTA_GATT_OK) { - APPL_TRACE_ERROR("%s: error: %d", __func__, status); - return; - } +static void read_report_ref_desc_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, + uint8_t* value, void* data) { + if (status != BTA_GATT_OK) { + APPL_TRACE_ERROR("%s: error: %d", __func__, status); + return; + } - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*)data; - const tBTA_GATTC_DESCRIPTOR *p_desc = BTA_GATTC_GetDescriptor(conn_id, handle); + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + const tBTA_GATTC_DESCRIPTOR* p_desc = + BTA_GATTC_GetDescriptor(conn_id, handle); - tBTA_HH_LE_RPT *p_rpt; - if ((p_rpt = bta_hh_le_find_report_entry(p_dev_cb, - p_desc->characteristic->service->handle, - GATT_UUID_HID_REPORT, - p_desc->characteristic->handle))) - bta_hh_le_save_report_ref(p_dev_cb, p_rpt, status, value, len); + tBTA_HH_LE_RPT* p_rpt; + if ((p_rpt = bta_hh_le_find_report_entry( + p_dev_cb, p_desc->characteristic->service->handle, + GATT_UUID_HID_REPORT, p_desc->characteristic->handle))) + bta_hh_le_save_report_ref(p_dev_cb, p_rpt, status, value, len); } +void read_pref_conn_params_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, uint8_t* value, + void* data) { + if (status != BTA_GATT_OK) { + APPL_TRACE_ERROR("%s: error: %d", __func__, status); + return; + } + if (len != 8) { + APPL_TRACE_ERROR("%s: we support only 16bit UUID: %d", __func__, len); + return; + } -void read_pref_conn_params_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, - uint16_t len, uint8_t *value, void* data) { - if (status != BTA_GATT_OK) { - APPL_TRACE_ERROR("%s: error: %d", __func__, status); - return; - } - - if (len != 8) { - APPL_TRACE_ERROR("%s: we support only 16bit UUID: %d", __func__, len); - return; - } - - //TODO(jpawlowski): this should be done by GAP profile, remove when GAP is fixed. - uint8_t *pp = value; - uint16_t min, max, latency, tout; - STREAM_TO_UINT16(min, pp); - STREAM_TO_UINT16(max, pp); - STREAM_TO_UINT16(latency, pp); - STREAM_TO_UINT16(tout, pp); + // TODO(jpawlowski): this should be done by GAP profile, remove when GAP is + // fixed. + uint8_t* pp = value; + uint16_t min, max, latency, tout; + STREAM_TO_UINT16(min, pp); + STREAM_TO_UINT16(max, pp); + STREAM_TO_UINT16(latency, pp); + STREAM_TO_UINT16(tout, pp); - // Make sure both min, and max are bigger than 11.25ms, lower values can introduce - // audio issues if A2DP is also active. - if (min < BTM_BLE_CONN_INT_MIN_LIMIT) - min = BTM_BLE_CONN_INT_MIN_LIMIT; - if (max < BTM_BLE_CONN_INT_MIN_LIMIT) - max = BTM_BLE_CONN_INT_MIN_LIMIT; + // Make sure both min, and max are bigger than 11.25ms, lower values can + // introduce + // audio issues if A2DP is also active. + if (min < BTM_BLE_CONN_INT_MIN_LIMIT) min = BTM_BLE_CONN_INT_MIN_LIMIT; + if (max < BTM_BLE_CONN_INT_MIN_LIMIT) max = BTM_BLE_CONN_INT_MIN_LIMIT; - // If the device has no preferred connection timeout, use the default. - if (tout == BTM_BLE_CONN_PARAM_UNDEF) - tout = BTM_BLE_CONN_TIMEOUT_DEF; + // If the device has no preferred connection timeout, use the default. + if (tout == BTM_BLE_CONN_PARAM_UNDEF) tout = BTM_BLE_CONN_TIMEOUT_DEF; - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*)data; - BTM_BleSetPrefConnParams(p_dev_cb->addr, min, max, latency, tout); - L2CA_UpdateBleConnParams(p_dev_cb->addr, min, max, latency, tout); + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + BTM_BleSetPrefConnParams(p_dev_cb->addr, min, max, latency, tout); + L2CA_UpdateBleConnParams(p_dev_cb->addr, min, max, latency, tout); } /******************************************************************************* @@ -1604,87 +1515,87 @@ void read_pref_conn_params_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t ha * Parameters: * ******************************************************************************/ -static void bta_hh_le_search_hid_chars(tBTA_HH_DEV_CB *p_dev_cb, tBTA_GATTC_SERVICE *service) -{ - tBTA_HH_LE_RPT *p_rpt; +static void bta_hh_le_search_hid_chars(tBTA_HH_DEV_CB* p_dev_cb, + tBTA_GATTC_SERVICE* service) { + tBTA_HH_LE_RPT* p_rpt; - for (list_node_t *cn = list_begin(service->characteristics); - cn != list_end(service->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); + for (list_node_t* cn = list_begin(service->characteristics); + cn != list_end(service->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); - if (p_char->uuid.len != LEN_UUID_16) - continue; + if (p_char->uuid.len != LEN_UUID_16) continue; - LOG_DEBUG(LOG_TAG, "%s: %s 0x%04d", __func__, bta_hh_uuid_to_str(p_char->uuid.uu.uuid16), - p_char->uuid.uu.uuid16); + LOG_DEBUG(LOG_TAG, "%s: %s 0x%04d", __func__, + bta_hh_uuid_to_str(p_char->uuid.uu.uuid16), + p_char->uuid.uu.uuid16); - switch (p_char->uuid.uu.uuid16) - { - case GATT_UUID_HID_CONTROL_POINT: - p_dev_cb->hid_srvc.control_point_handle = p_char->handle; - break; - case GATT_UUID_HID_INFORMATION: - /* only one instance per HID service */ - gatt_queue_read_op(GATT_READ_CHAR, p_dev_cb->conn_id, p_char->handle, read_hid_info_cb, - p_dev_cb); - break; - case GATT_UUID_HID_REPORT_MAP: - /* only one instance per HID service */ - gatt_queue_read_op(GATT_READ_CHAR, p_dev_cb->conn_id, p_char->handle, - read_hid_report_map_cb, p_dev_cb); - /* descriptor is optional */ - bta_hh_le_read_char_descriptor(p_dev_cb, p_char->handle, - GATT_UUID_EXT_RPT_REF_DESCR, read_ext_rpt_ref_desc_cb, p_dev_cb); - break; + switch (p_char->uuid.uu.uuid16) { + case GATT_UUID_HID_CONTROL_POINT: + p_dev_cb->hid_srvc.control_point_handle = p_char->handle; + break; + case GATT_UUID_HID_INFORMATION: + /* only one instance per HID service */ + gatt_queue_read_op(GATT_READ_CHAR, p_dev_cb->conn_id, p_char->handle, + read_hid_info_cb, p_dev_cb); + break; + case GATT_UUID_HID_REPORT_MAP: + /* only one instance per HID service */ + gatt_queue_read_op(GATT_READ_CHAR, p_dev_cb->conn_id, p_char->handle, + read_hid_report_map_cb, p_dev_cb); + /* descriptor is optional */ + bta_hh_le_read_char_descriptor(p_dev_cb, p_char->handle, + GATT_UUID_EXT_RPT_REF_DESCR, + read_ext_rpt_ref_desc_cb, p_dev_cb); + break; - case GATT_UUID_HID_REPORT: - p_rpt = bta_hh_le_find_alloc_report_entry(p_dev_cb, - p_dev_cb->hid_srvc.srvc_inst_id, - GATT_UUID_HID_REPORT, - p_char->handle); - if (p_rpt == NULL) { - APPL_TRACE_ERROR("%s: Add report entry failed !!!", __func__); - break; - } + case GATT_UUID_HID_REPORT: + p_rpt = bta_hh_le_find_alloc_report_entry( + p_dev_cb, p_dev_cb->hid_srvc.srvc_inst_id, GATT_UUID_HID_REPORT, + p_char->handle); + if (p_rpt == NULL) { + APPL_TRACE_ERROR("%s: Add report entry failed !!!", __func__); + break; + } - if (p_rpt->rpt_type != BTA_HH_RPTT_INPUT) - break; + if (p_rpt->rpt_type != BTA_HH_RPTT_INPUT) break; - bta_hh_le_read_char_descriptor(p_dev_cb, p_char->handle, GATT_UUID_RPT_REF_DESCR, + bta_hh_le_read_char_descriptor(p_dev_cb, p_char->handle, + GATT_UUID_RPT_REF_DESCR, read_report_ref_desc_cb, p_dev_cb); - break; + break; - /* found boot mode report types */ - case GATT_UUID_HID_BT_KB_OUTPUT: - case GATT_UUID_HID_BT_MOUSE_INPUT: - case GATT_UUID_HID_BT_KB_INPUT: - if (bta_hh_le_find_alloc_report_entry(p_dev_cb, - service->handle, - p_char->uuid.uu.uuid16, - p_char->handle) == NULL) - APPL_TRACE_ERROR("%s: Add report entry failed !!!", __func__); + /* found boot mode report types */ + case GATT_UUID_HID_BT_KB_OUTPUT: + case GATT_UUID_HID_BT_MOUSE_INPUT: + case GATT_UUID_HID_BT_KB_INPUT: + if (bta_hh_le_find_alloc_report_entry(p_dev_cb, service->handle, + p_char->uuid.uu.uuid16, + p_char->handle) == NULL) + APPL_TRACE_ERROR("%s: Add report entry failed !!!", __func__); - break; + break; - default: - APPL_TRACE_DEBUG("%s: not processing %s 0x%04d", __func__, - bta_hh_uuid_to_str(p_char->uuid.uu.uuid16), - p_char->uuid.uu.uuid16); - } + default: + APPL_TRACE_DEBUG("%s: not processing %s 0x%04d", __func__, + bta_hh_uuid_to_str(p_char->uuid.uu.uuid16), + p_char->uuid.uu.uuid16); } + } - /* Make sure PROTO_MODE is processed as last */ - for (list_node_t *cn = list_begin(service->characteristics); - cn != list_end(service->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); + /* Make sure PROTO_MODE is processed as last */ + for (list_node_t* cn = list_begin(service->characteristics); + cn != list_end(service->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); - if (p_char->uuid.len != LEN_UUID_16 && - p_char->uuid.uu.uuid16 == GATT_UUID_HID_PROTO_MODE) { - p_dev_cb->hid_srvc.proto_mode_handle = p_char->handle; - bta_hh_le_set_protocol_mode(p_dev_cb, p_dev_cb->mode); - break; - } + if (p_char->uuid.len != LEN_UUID_16 && + p_char->uuid.uu.uuid16 == GATT_UUID_HID_PROTO_MODE) { + p_dev_cb->hid_srvc.proto_mode_handle = p_char->handle; + bta_hh_le_set_protocol_mode(p_dev_cb, p_dev_cb->mode); + break; } + } } /******************************************************************************* @@ -1696,81 +1607,79 @@ static void bta_hh_le_search_hid_chars(tBTA_HH_DEV_CB *p_dev_cb, tBTA_GATTC_SERV * Parameters: * ******************************************************************************/ -void bta_hh_le_srvc_search_cmpl(tBTA_GATTC_SEARCH_CMPL *p_data) -{ - tBTA_HH_DEV_CB *p_dev_cb = bta_hh_le_find_dev_cb_by_conn_id(p_data->conn_id); - - /* service search exception or no HID service is supported on remote */ - if (p_dev_cb == NULL) - return; - - if (p_data->status != BTA_GATT_OK) - { - p_dev_cb->status = BTA_HH_ERR_SDP; - /* close the connection and report service discovery complete with error */ - bta_hh_le_api_disc_act(p_dev_cb); - return; - } +void bta_hh_le_srvc_search_cmpl(tBTA_GATTC_SEARCH_CMPL* p_data) { + tBTA_HH_DEV_CB* p_dev_cb = bta_hh_le_find_dev_cb_by_conn_id(p_data->conn_id); + + /* service search exception or no HID service is supported on remote */ + if (p_dev_cb == NULL) return; - const list_t *services = BTA_GATTC_GetServices(p_data->conn_id); - - bool have_hid = false; - for (list_node_t *sn = list_begin(services); - sn != list_end(services); sn = list_next(sn)) { - tBTA_GATTC_SERVICE *service = (tBTA_GATTC_SERVICE*) list_node(sn); - - if (service->uuid.uu.uuid16 == UUID_SERVCLASS_LE_HID && - service->is_primary && !have_hid) { - have_hid = true; - - /* found HID primamry service */ - p_dev_cb->hid_srvc.in_use = true; - p_dev_cb->hid_srvc.srvc_inst_id = service->handle; - p_dev_cb->hid_srvc.proto_mode_handle = 0; - p_dev_cb->hid_srvc.control_point_handle = 0; - - bta_hh_le_search_hid_chars(p_dev_cb, service); - - APPL_TRACE_DEBUG("%s: have HID service inst_id= %d", __func__, - p_dev_cb->hid_srvc.srvc_inst_id); - } else if (service->uuid.uu.uuid16 == UUID_SERVCLASS_SCAN_PARAM) { - p_dev_cb->scan_refresh_char_handle = 0; - - for (list_node_t *cn = list_begin(service->characteristics); - cn != list_end(service->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); - if (p_char->uuid.len == LEN_UUID_16 && - p_char->uuid.uu.uuid16 == GATT_UUID_SCAN_REFRESH) { - - p_dev_cb->scan_refresh_char_handle = p_char->handle; - - if (p_char->properties & BTA_GATT_CHAR_PROP_BIT_NOTIFY) - p_dev_cb->scps_notify |= BTA_HH_LE_SCPS_NOTIFY_SPT; - else - p_dev_cb->scps_notify = BTA_HH_LE_SCPS_NOTIFY_NONE; - - break; - } - } - } else if (service->uuid.uu.uuid16 == UUID_SERVCLASS_GAP_SERVER) { - //TODO(jpawlowski): this should be done by GAP profile, remove when GAP is fixed. - for (list_node_t *cn = list_begin(service->characteristics); - cn != list_end(service->characteristics); cn = list_next(cn)) { - tBTA_GATTC_CHARACTERISTIC *p_char = (tBTA_GATTC_CHARACTERISTIC*) list_node(cn); - if (p_char->uuid.len == LEN_UUID_16 && - p_char->uuid.uu.uuid16 == GATT_UUID_GAP_PREF_CONN_PARAM) { - - /* read the char value */ - gatt_queue_read_op(GATT_READ_CHAR, p_dev_cb->conn_id, p_char->handle, - read_pref_conn_params_cb, p_dev_cb); - - break; - } - } + if (p_data->status != BTA_GATT_OK) { + p_dev_cb->status = BTA_HH_ERR_SDP; + /* close the connection and report service discovery complete with error */ + bta_hh_le_api_disc_act(p_dev_cb); + return; + } + + const list_t* services = BTA_GATTC_GetServices(p_data->conn_id); + + bool have_hid = false; + for (list_node_t* sn = list_begin(services); sn != list_end(services); + sn = list_next(sn)) { + tBTA_GATTC_SERVICE* service = (tBTA_GATTC_SERVICE*)list_node(sn); + + if (service->uuid.uu.uuid16 == UUID_SERVCLASS_LE_HID && + service->is_primary && !have_hid) { + have_hid = true; + + /* found HID primamry service */ + p_dev_cb->hid_srvc.in_use = true; + p_dev_cb->hid_srvc.srvc_inst_id = service->handle; + p_dev_cb->hid_srvc.proto_mode_handle = 0; + p_dev_cb->hid_srvc.control_point_handle = 0; + + bta_hh_le_search_hid_chars(p_dev_cb, service); + + APPL_TRACE_DEBUG("%s: have HID service inst_id= %d", __func__, + p_dev_cb->hid_srvc.srvc_inst_id); + } else if (service->uuid.uu.uuid16 == UUID_SERVCLASS_SCAN_PARAM) { + p_dev_cb->scan_refresh_char_handle = 0; + + for (list_node_t* cn = list_begin(service->characteristics); + cn != list_end(service->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); + if (p_char->uuid.len == LEN_UUID_16 && + p_char->uuid.uu.uuid16 == GATT_UUID_SCAN_REFRESH) { + p_dev_cb->scan_refresh_char_handle = p_char->handle; + + if (p_char->properties & BTA_GATT_CHAR_PROP_BIT_NOTIFY) + p_dev_cb->scps_notify |= BTA_HH_LE_SCPS_NOTIFY_SPT; + else + p_dev_cb->scps_notify = BTA_HH_LE_SCPS_NOTIFY_NONE; + + break; } + } + } else if (service->uuid.uu.uuid16 == UUID_SERVCLASS_GAP_SERVER) { + // TODO(jpawlowski): this should be done by GAP profile, remove when GAP + // is fixed. + for (list_node_t* cn = list_begin(service->characteristics); + cn != list_end(service->characteristics); cn = list_next(cn)) { + tBTA_GATTC_CHARACTERISTIC* p_char = + (tBTA_GATTC_CHARACTERISTIC*)list_node(cn); + if (p_char->uuid.len == LEN_UUID_16 && + p_char->uuid.uu.uuid16 == GATT_UUID_GAP_PREF_CONN_PARAM) { + /* read the char value */ + gatt_queue_read_op(GATT_READ_CHAR, p_dev_cb->conn_id, p_char->handle, + read_pref_conn_params_cb, p_dev_cb); + + break; + } + } } + } - bta_hh_le_gatt_disc_cmpl(p_dev_cb, p_dev_cb->status); + bta_hh_le_gatt_disc_cmpl(p_dev_cb, p_dev_cb->status); } /******************************************************************************* @@ -1782,72 +1691,64 @@ void bta_hh_le_srvc_search_cmpl(tBTA_GATTC_SEARCH_CMPL *p_data) * Parameters: * ******************************************************************************/ -void bta_hh_le_input_rpt_notify(tBTA_GATTC_NOTIFY *p_data) -{ - tBTA_HH_DEV_CB *p_dev_cb = bta_hh_le_find_dev_cb_by_conn_id(p_data->conn_id); - uint8_t app_id; - uint8_t *p_buf; - tBTA_HH_LE_RPT *p_rpt; - - if (p_dev_cb == NULL) - { - APPL_TRACE_ERROR("%s: notification received from Unknown device, conn_id: 0x%04x", - __func__, p_data->conn_id); - return; - } +void bta_hh_le_input_rpt_notify(tBTA_GATTC_NOTIFY* p_data) { + tBTA_HH_DEV_CB* p_dev_cb = bta_hh_le_find_dev_cb_by_conn_id(p_data->conn_id); + uint8_t app_id; + uint8_t* p_buf; + tBTA_HH_LE_RPT* p_rpt; + + if (p_dev_cb == NULL) { + APPL_TRACE_ERROR( + "%s: notification received from Unknown device, conn_id: 0x%04x", + __func__, p_data->conn_id); + return; + } + + const tBTA_GATTC_CHARACTERISTIC* p_char = + BTA_GATTC_GetCharacteristic(p_dev_cb->conn_id, p_data->handle); + if (p_char == NULL) { + APPL_TRACE_ERROR( + "%s: notification received for Unknown Characteristic, conn_id: " + "0x%04x, handle: 0x%04x", + __func__, p_dev_cb->conn_id, p_data->handle); + return; + } - const tBTA_GATTC_CHARACTERISTIC *p_char = BTA_GATTC_GetCharacteristic(p_dev_cb->conn_id, - p_data->handle); - if (p_char == NULL) - { - APPL_TRACE_ERROR("%s: notification received for Unknown Characteristic, conn_id: 0x%04x, handle: 0x%04x", - __func__, p_dev_cb->conn_id, p_data->handle); - return; - } + app_id = p_dev_cb->app_id; - app_id= p_dev_cb->app_id; - - p_rpt = bta_hh_le_find_report_entry(p_dev_cb, - p_dev_cb->hid_srvc.srvc_inst_id, - p_char->uuid.uu.uuid16, - p_char->handle); - if (p_rpt == NULL) - { - APPL_TRACE_ERROR("%s: notification received for Unknown Report, uuid: 0x%04x, handle: 0x%04x", - __func__, p_char->uuid.uu.uuid16, p_char->handle); - return; - } + p_rpt = bta_hh_le_find_report_entry(p_dev_cb, p_dev_cb->hid_srvc.srvc_inst_id, + p_char->uuid.uu.uuid16, p_char->handle); + if (p_rpt == NULL) { + APPL_TRACE_ERROR( + "%s: notification received for Unknown Report, uuid: 0x%04x, handle: " + "0x%04x", + __func__, p_char->uuid.uu.uuid16, p_char->handle); + return; + } - if (p_char->uuid.uu.uuid16 == GATT_UUID_HID_BT_MOUSE_INPUT) - app_id = BTA_HH_APP_ID_MI; - else if (p_char->uuid.uu.uuid16 == GATT_UUID_HID_BT_KB_INPUT) - app_id = BTA_HH_APP_ID_KB; + if (p_char->uuid.uu.uuid16 == GATT_UUID_HID_BT_MOUSE_INPUT) + app_id = BTA_HH_APP_ID_MI; + else if (p_char->uuid.uu.uuid16 == GATT_UUID_HID_BT_KB_INPUT) + app_id = BTA_HH_APP_ID_KB; - APPL_TRACE_DEBUG("Notification received on report ID: %d", p_rpt->rpt_id); + APPL_TRACE_DEBUG("Notification received on report ID: %d", p_rpt->rpt_id); - /* need to append report ID to the head of data */ - if (p_rpt->rpt_id != 0) - { - p_buf = (uint8_t *)osi_malloc(p_data->len + 1); + /* need to append report ID to the head of data */ + if (p_rpt->rpt_id != 0) { + p_buf = (uint8_t*)osi_malloc(p_data->len + 1); - p_buf[0] = p_rpt->rpt_id; - memcpy(&p_buf[1], p_data->value, p_data->len); - ++p_data->len; - } else { - p_buf = p_data->value; - } + p_buf[0] = p_rpt->rpt_id; + memcpy(&p_buf[1], p_data->value, p_data->len); + ++p_data->len; + } else { + p_buf = p_data->value; + } - bta_hh_co_data((uint8_t)p_dev_cb->hid_handle, - p_buf, - p_data->len, - p_dev_cb->mode, - 0 , /* no sub class*/ - p_dev_cb->dscp_info.ctry_code, - p_dev_cb->addr, - app_id); + bta_hh_co_data((uint8_t)p_dev_cb->hid_handle, p_buf, p_data->len, + p_dev_cb->mode, 0, /* no sub class*/ + p_dev_cb->dscp_info.ctry_code, p_dev_cb->addr, app_id); - if (p_buf != p_data->value) - osi_free(p_buf); + if (p_buf != p_data->value) osi_free(p_buf); } /******************************************************************************* @@ -1859,75 +1760,69 @@ void bta_hh_le_input_rpt_notify(tBTA_GATTC_NOTIFY *p_data) * Returns void * ******************************************************************************/ -void bta_hh_le_open_fail(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_CONN conn_dat ; - - /* open failure in the middle of service discovery, clear all services */ - if (p_cb->disc_active & BTA_HH_LE_DISC_HIDS) - { - bta_hh_clear_service_cache(p_cb); - } +void bta_hh_le_open_fail(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CONN conn_dat; - p_cb->disc_active = BTA_HH_LE_DISC_NONE; - /* Failure in opening connection or GATT discovery failure */ - conn_dat.handle = p_cb->hid_handle; - memcpy(conn_dat.bda, p_cb->addr, BD_ADDR_LEN); - conn_dat.le_hid = true; - conn_dat.scps_supported = p_cb->scps_supported; + /* open failure in the middle of service discovery, clear all services */ + if (p_cb->disc_active & BTA_HH_LE_DISC_HIDS) { + bta_hh_clear_service_cache(p_cb); + } - if (p_cb->status == BTA_HH_OK) - conn_dat.status = (p_data->le_close.reason == BTA_GATT_CONN_UNKNOWN) ? p_cb->status : BTA_HH_ERR; - else - conn_dat.status = p_cb->status; + p_cb->disc_active = BTA_HH_LE_DISC_NONE; + /* Failure in opening connection or GATT discovery failure */ + conn_dat.handle = p_cb->hid_handle; + memcpy(conn_dat.bda, p_cb->addr, BD_ADDR_LEN); + conn_dat.le_hid = true; + conn_dat.scps_supported = p_cb->scps_supported; - /* Report OPEN fail event */ - (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH *)&conn_dat); + if (p_cb->status == BTA_HH_OK) + conn_dat.status = (p_data->le_close.reason == BTA_GATT_CONN_UNKNOWN) + ? p_cb->status + : BTA_HH_ERR; + else + conn_dat.status = p_cb->status; + /* Report OPEN fail event */ + (*bta_hh_cb.p_cback)(BTA_HH_OPEN_EVT, (tBTA_HH*)&conn_dat); } /******************************************************************************* * * Function bta_hh_gatt_close * - * Description action function to process the GATT close int he state machine. + * Description action function to process the GATT close int he state + *machine. * * Returns void * ******************************************************************************/ -void bta_hh_gatt_close(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - tBTA_HH_CBDATA disc_dat = {BTA_HH_OK, 0}; - - /* deregister all notification */ - bta_hh_le_deregister_input_notif(p_cb); - /* finaliza device driver */ - bta_hh_co_close(p_cb->hid_handle, p_cb->app_id); - /* update total conn number */ - bta_hh_cb.cnt_num --; - - disc_dat.handle = p_cb->hid_handle; - disc_dat.status = p_cb->status; - - (*bta_hh_cb.p_cback)(BTA_HH_CLOSE_EVT, (tBTA_HH *)&disc_dat); - - /* if no connection is active and HH disable is signaled, disable service */ - if (bta_hh_cb.cnt_num == 0 && bta_hh_cb.w4_disable) - { - bta_hh_disc_cmpl(); - } - else - { +void bta_hh_gatt_close(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + tBTA_HH_CBDATA disc_dat = {BTA_HH_OK, 0}; + + /* deregister all notification */ + bta_hh_le_deregister_input_notif(p_cb); + /* finaliza device driver */ + bta_hh_co_close(p_cb->hid_handle, p_cb->app_id); + /* update total conn number */ + bta_hh_cb.cnt_num--; + + disc_dat.handle = p_cb->hid_handle; + disc_dat.status = p_cb->status; + + (*bta_hh_cb.p_cback)(BTA_HH_CLOSE_EVT, (tBTA_HH*)&disc_dat); + + /* if no connection is active and HH disable is signaled, disable service */ + if (bta_hh_cb.cnt_num == 0 && bta_hh_cb.w4_disable) { + bta_hh_disc_cmpl(); + } else { #if (BTA_HH_LE_RECONN == TRUE) - if (p_data->le_close.reason == BTA_GATT_CONN_TIMEOUT) - { - bta_hh_le_add_dev_bg_conn(p_cb, false); + if (p_data->le_close.reason == BTA_GATT_CONN_TIMEOUT) { + bta_hh_le_add_dev_bg_conn(p_cb, false); } #endif - } - - return; + } + return; } /******************************************************************************* @@ -1939,92 +1834,88 @@ void bta_hh_gatt_close(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_le_api_disc_act(tBTA_HH_DEV_CB *p_cb) -{ - if (p_cb->conn_id != BTA_GATT_INVALID_CONN_ID) - { - gatt_op_queue_clean(p_cb->conn_id); - BTA_GATTC_Close(p_cb->conn_id); - /* remove device from background connection if intended to disconnect, - do not allow reconnection */ - bta_hh_le_remove_dev_bg_conn(p_cb); - } +void bta_hh_le_api_disc_act(tBTA_HH_DEV_CB* p_cb) { + if (p_cb->conn_id != BTA_GATT_INVALID_CONN_ID) { + gatt_op_queue_clean(p_cb->conn_id); + BTA_GATTC_Close(p_cb->conn_id); + /* remove device from background connection if intended to disconnect, + do not allow reconnection */ + bta_hh_le_remove_dev_bg_conn(p_cb); + } } - /******************************************************************************* * * Function read_report_cb * - * Description Process the Read report complete, send GET_REPORT_EVT to application + * Description Process the Read report complete, send GET_REPORT_EVT to + *application * with the report data. * * Parameters: * ******************************************************************************/ -static void read_report_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, - uint16_t len, uint8_t *value, void* data) { - const tBTA_GATTC_CHARACTERISTIC *p_char = BTA_GATTC_GetCharacteristic(conn_id, handle); - - if (p_char == NULL) - return; - - uint16_t char_uuid = p_char->uuid.uu.uuid16; - - if (char_uuid != GATT_UUID_HID_REPORT && - char_uuid != GATT_UUID_HID_BT_KB_INPUT && - char_uuid != GATT_UUID_HID_BT_KB_OUTPUT && - char_uuid != GATT_UUID_HID_BT_MOUSE_INPUT && - char_uuid != GATT_UUID_BATTERY_LEVEL) { - APPL_TRACE_ERROR("%s: Unexpected Read UUID: 0x%04x", __func__, char_uuid); - return; - } +static void read_report_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, uint8_t* value, + void* data) { + const tBTA_GATTC_CHARACTERISTIC* p_char = + BTA_GATTC_GetCharacteristic(conn_id, handle); + + if (p_char == NULL) return; + + uint16_t char_uuid = p_char->uuid.uu.uuid16; + + if (char_uuid != GATT_UUID_HID_REPORT && + char_uuid != GATT_UUID_HID_BT_KB_INPUT && + char_uuid != GATT_UUID_HID_BT_KB_OUTPUT && + char_uuid != GATT_UUID_HID_BT_MOUSE_INPUT && + char_uuid != GATT_UUID_BATTERY_LEVEL) { + APPL_TRACE_ERROR("%s: Unexpected Read UUID: 0x%04x", __func__, char_uuid); + return; + } - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*)data; - if (p_dev_cb->w4_evt != BTA_HH_GET_RPT_EVT) - { - APPL_TRACE_ERROR("Unexpected READ cmpl, w4_evt = %d", p_dev_cb->w4_evt); - return; - } + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + if (p_dev_cb->w4_evt != BTA_HH_GET_RPT_EVT) { + APPL_TRACE_ERROR("Unexpected READ cmpl, w4_evt = %d", p_dev_cb->w4_evt); + return; + } - /* GET_REPORT */ - BT_HDR *p_buf = NULL; - tBTA_HH_LE_RPT *p_rpt; - tBTA_HH_HSDATA hs_data; - uint8_t *pp ; + /* GET_REPORT */ + BT_HDR* p_buf = NULL; + tBTA_HH_LE_RPT* p_rpt; + tBTA_HH_HSDATA hs_data; + uint8_t* pp; - memset(&hs_data, 0, sizeof(hs_data)); - hs_data.status = BTA_HH_ERR; - hs_data.handle = p_dev_cb->hid_handle; + memset(&hs_data, 0, sizeof(hs_data)); + hs_data.status = BTA_HH_ERR; + hs_data.handle = p_dev_cb->hid_handle; - if (status == BTA_GATT_OK) - { - p_rpt = bta_hh_le_find_report_entry(p_dev_cb, - p_char->service->handle, - p_char->uuid.uu.uuid16, - p_char->handle); - - if (p_rpt != NULL && len) { - p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR) + len + 1); - /* pack data send to app */ - hs_data.status = BTA_HH_OK; - p_buf->len = len + 1; - p_buf->layer_specific = 0; - p_buf->offset = 0; - - /* attach report ID as the first byte of the report before sending it to USB HID driver */ - pp = (uint8_t*)(p_buf + 1); - UINT8_TO_STREAM(pp, p_rpt->rpt_id); - memcpy(pp, value, len); - - hs_data.rsp_data.p_rpt_data =p_buf; - } + if (status == BTA_GATT_OK) { + p_rpt = bta_hh_le_find_report_entry(p_dev_cb, p_char->service->handle, + p_char->uuid.uu.uuid16, p_char->handle); + + if (p_rpt != NULL && len) { + p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR) + len + 1); + /* pack data send to app */ + hs_data.status = BTA_HH_OK; + p_buf->len = len + 1; + p_buf->layer_specific = 0; + p_buf->offset = 0; + + /* attach report ID as the first byte of the report before sending it to + * USB HID driver */ + pp = (uint8_t*)(p_buf + 1); + UINT8_TO_STREAM(pp, p_rpt->rpt_id); + memcpy(pp, value, len); + + hs_data.rsp_data.p_rpt_data = p_buf; } + } - p_dev_cb->w4_evt = 0; - (* bta_hh_cb.p_cback)(BTA_HH_GET_RPT_EVT, (tBTA_HH *)&hs_data); + p_dev_cb->w4_evt = 0; + (*bta_hh_cb.p_cback)(BTA_HH_GET_RPT_EVT, (tBTA_HH*)&hs_data); - osi_free_and_reset((void **)&p_buf); + osi_free_and_reset((void**)&p_buf); } /******************************************************************************* @@ -2036,47 +1927,47 @@ static void read_report_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handl * Returns void * ******************************************************************************/ -void bta_hh_le_get_rpt(tBTA_HH_DEV_CB *p_cb, tBTA_HH_RPT_TYPE r_type, uint8_t rpt_id) -{ - tBTA_HH_LE_RPT *p_rpt = bta_hh_le_find_rpt_by_idtype(p_cb->hid_srvc.report, - p_cb->mode, r_type, rpt_id); - - if (p_rpt == NULL) { - APPL_TRACE_ERROR("%s: no matching report", __func__); - return; - } +void bta_hh_le_get_rpt(tBTA_HH_DEV_CB* p_cb, tBTA_HH_RPT_TYPE r_type, + uint8_t rpt_id) { + tBTA_HH_LE_RPT* p_rpt = bta_hh_le_find_rpt_by_idtype( + p_cb->hid_srvc.report, p_cb->mode, r_type, rpt_id); - p_cb->w4_evt = BTA_HH_GET_RPT_EVT; - gatt_queue_read_op(GATT_READ_CHAR, p_cb->conn_id, p_rpt->char_inst_id, read_report_cb, p_cb); + if (p_rpt == NULL) { + APPL_TRACE_ERROR("%s: no matching report", __func__); + return; + } + + p_cb->w4_evt = BTA_HH_GET_RPT_EVT; + gatt_queue_read_op(GATT_READ_CHAR, p_cb->conn_id, p_rpt->char_inst_id, + read_report_cb, p_cb); } -static void write_report_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, void* data) -{ - tBTA_HH_CBDATA cback_data; - tBTA_HH_DEV_CB *p_dev_cb = (tBTA_HH_DEV_CB*)data; - uint16_t cb_evt = p_dev_cb->w4_evt; +static void write_report_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, void* data) { + tBTA_HH_CBDATA cback_data; + tBTA_HH_DEV_CB* p_dev_cb = (tBTA_HH_DEV_CB*)data; + uint16_t cb_evt = p_dev_cb->w4_evt; - if (cb_evt == 0) - return; + if (cb_evt == 0) return; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_le_write_cmpl w4_evt: %d", p_dev_cb->w4_evt); + APPL_TRACE_DEBUG("bta_hh_le_write_cmpl w4_evt: %d", p_dev_cb->w4_evt); #endif - const tBTA_GATTC_CHARACTERISTIC *p_char = BTA_GATTC_GetCharacteristic(conn_id, handle); - uint16_t uuid = p_char->uuid.uu.uuid16; - if (uuid != GATT_UUID_HID_REPORT && - uuid != GATT_UUID_HID_BT_KB_INPUT && - uuid != GATT_UUID_HID_BT_MOUSE_INPUT && - uuid != GATT_UUID_HID_BT_KB_OUTPUT) { - return; - } + const tBTA_GATTC_CHARACTERISTIC* p_char = + BTA_GATTC_GetCharacteristic(conn_id, handle); + uint16_t uuid = p_char->uuid.uu.uuid16; + if (uuid != GATT_UUID_HID_REPORT && uuid != GATT_UUID_HID_BT_KB_INPUT && + uuid != GATT_UUID_HID_BT_MOUSE_INPUT && + uuid != GATT_UUID_HID_BT_KB_OUTPUT) { + return; + } - /* Set Report finished */ - cback_data.handle = p_dev_cb->hid_handle; - cback_data.status = (status == BTA_GATT_OK)? BTA_HH_OK : BTA_HH_ERR; - p_dev_cb->w4_evt = 0; - (* bta_hh_cb.p_cback)(cb_evt, (tBTA_HH *)&cback_data); + /* Set Report finished */ + cback_data.handle = p_dev_cb->hid_handle; + cback_data.status = (status == BTA_GATT_OK) ? BTA_HH_OK : BTA_HH_ERR; + p_dev_cb->w4_evt = 0; + (*bta_hh_cb.p_cback)(cb_evt, (tBTA_HH*)&cback_data); } /******************************************************************************* * @@ -2087,42 +1978,40 @@ static void write_report_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t hand * Returns void * ******************************************************************************/ -void bta_hh_le_write_rpt(tBTA_HH_DEV_CB *p_cb, - tBTA_HH_RPT_TYPE r_type, - BT_HDR *p_buf, uint16_t w4_evt ) -{ - tBTA_HH_LE_RPT *p_rpt; - uint8_t rpt_id; - - if (p_buf == NULL || p_buf->len == 0) - { - APPL_TRACE_ERROR("%s: Illegal data", __func__); - return; - } +void bta_hh_le_write_rpt(tBTA_HH_DEV_CB* p_cb, tBTA_HH_RPT_TYPE r_type, + BT_HDR* p_buf, uint16_t w4_evt) { + tBTA_HH_LE_RPT* p_rpt; + uint8_t rpt_id; - /* strip report ID from the data */ - uint8_t *vec_start = (uint8_t *)(p_buf + 1) + p_buf->offset; - STREAM_TO_UINT8(rpt_id, vec_start); - vector value(vec_start, vec_start + p_buf->len - 1); - - p_rpt = bta_hh_le_find_rpt_by_idtype(p_cb->hid_srvc.report, p_cb->mode, r_type, rpt_id); - if (p_rpt == NULL) { - APPL_TRACE_ERROR("%s: no matching report", __func__); - osi_free(p_buf); - return; - } + if (p_buf == NULL || p_buf->len == 0) { + APPL_TRACE_ERROR("%s: Illegal data", __func__); + return; + } + + /* strip report ID from the data */ + uint8_t* vec_start = (uint8_t*)(p_buf + 1) + p_buf->offset; + STREAM_TO_UINT8(rpt_id, vec_start); + vector value(vec_start, vec_start + p_buf->len - 1); + + p_rpt = bta_hh_le_find_rpt_by_idtype(p_cb->hid_srvc.report, p_cb->mode, + r_type, rpt_id); + if (p_rpt == NULL) { + APPL_TRACE_ERROR("%s: no matching report", __func__); + osi_free(p_buf); + return; + } - p_cb->w4_evt = w4_evt; + p_cb->w4_evt = w4_evt; - const tBTA_GATTC_CHARACTERISTIC *p_char = BTA_GATTC_GetCharacteristic(p_cb->conn_id, - p_rpt->char_inst_id); + const tBTA_GATTC_CHARACTERISTIC* p_char = + BTA_GATTC_GetCharacteristic(p_cb->conn_id, p_rpt->char_inst_id); - tBTA_GATTC_WRITE_TYPE write_type = BTA_GATTC_TYPE_WRITE; - if (p_char && (p_char->properties & BTA_GATT_CHAR_PROP_BIT_WRITE_NR)) - write_type = BTA_GATTC_TYPE_WRITE_NO_RSP; + tBTA_GATTC_WRITE_TYPE write_type = BTA_GATTC_TYPE_WRITE; + if (p_char && (p_char->properties & BTA_GATT_CHAR_PROP_BIT_WRITE_NR)) + write_type = BTA_GATTC_TYPE_WRITE_NO_RSP; - gatt_queue_write_op(GATT_WRITE_CHAR, p_cb->conn_id, p_rpt->char_inst_id, - std::move(value), write_type, write_report_cb, p_cb); + gatt_queue_write_op(GATT_WRITE_CHAR, p_cb->conn_id, p_rpt->char_inst_id, + std::move(value), write_type, write_report_cb, p_cb); } /******************************************************************************* @@ -2134,13 +2023,14 @@ void bta_hh_le_write_rpt(tBTA_HH_DEV_CB *p_cb, * Returns void * ******************************************************************************/ -void bta_hh_le_suspend(tBTA_HH_DEV_CB *p_cb, tBTA_HH_TRANS_CTRL_TYPE ctrl_type) -{ - ctrl_type -= BTA_HH_CTRL_SUSPEND; +void bta_hh_le_suspend(tBTA_HH_DEV_CB* p_cb, + tBTA_HH_TRANS_CTRL_TYPE ctrl_type) { + ctrl_type -= BTA_HH_CTRL_SUSPEND; - //We don't care about response - gatt_queue_write_op(GATT_WRITE_CHAR, p_cb->conn_id, p_cb->hid_srvc.control_point_handle, - {(uint8_t) ctrl_type}, BTA_GATTC_TYPE_WRITE_NO_RSP, NULL, NULL); + // We don't care about response + gatt_queue_write_op(GATT_WRITE_CHAR, p_cb->conn_id, + p_cb->hid_srvc.control_point_handle, {(uint8_t)ctrl_type}, + BTA_GATTC_TYPE_WRITE_NO_RSP, NULL, NULL); } /******************************************************************************* @@ -2152,55 +2042,47 @@ void bta_hh_le_suspend(tBTA_HH_DEV_CB *p_cb, tBTA_HH_TRANS_CTRL_TYPE ctrl_type) * Returns void * ******************************************************************************/ -void bta_hh_le_write_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) -{ - switch(p_data->api_sndcmd.t_type) - { - case HID_TRANS_SET_PROTOCOL: - p_cb->w4_evt = BTA_HH_SET_PROTO_EVT; - bta_hh_le_set_protocol_mode(p_cb, p_data->api_sndcmd.param); - break; - - case HID_TRANS_GET_PROTOCOL: - bta_hh_le_get_protocol_mode(p_cb); - break; - - case HID_TRANS_GET_REPORT: - bta_hh_le_get_rpt(p_cb, - p_data->api_sndcmd.param, - p_data->api_sndcmd.rpt_id); - break; - - case HID_TRANS_SET_REPORT: - bta_hh_le_write_rpt(p_cb, - p_data->api_sndcmd.param, - p_data->api_sndcmd.p_data, - BTA_HH_SET_RPT_EVT); - break; +void bta_hh_le_write_dev_act(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data) { + switch (p_data->api_sndcmd.t_type) { + case HID_TRANS_SET_PROTOCOL: + p_cb->w4_evt = BTA_HH_SET_PROTO_EVT; + bta_hh_le_set_protocol_mode(p_cb, p_data->api_sndcmd.param); + break; + + case HID_TRANS_GET_PROTOCOL: + bta_hh_le_get_protocol_mode(p_cb); + break; + + case HID_TRANS_GET_REPORT: + bta_hh_le_get_rpt(p_cb, p_data->api_sndcmd.param, + p_data->api_sndcmd.rpt_id); + break; + + case HID_TRANS_SET_REPORT: + bta_hh_le_write_rpt(p_cb, p_data->api_sndcmd.param, + p_data->api_sndcmd.p_data, BTA_HH_SET_RPT_EVT); + break; + + case HID_TRANS_DATA: /* output report */ + + bta_hh_le_write_rpt(p_cb, p_data->api_sndcmd.param, + p_data->api_sndcmd.p_data, BTA_HH_DATA_EVT); + break; + + case HID_TRANS_CONTROL: + /* no handshake event will be generated */ + /* if VC_UNPLUG is issued, set flag */ + if (p_data->api_sndcmd.param == BTA_HH_CTRL_SUSPEND || + p_data->api_sndcmd.param == BTA_HH_CTRL_EXIT_SUSPEND) { + bta_hh_le_suspend(p_cb, p_data->api_sndcmd.param); + } + break; - case HID_TRANS_DATA: /* output report */ - - bta_hh_le_write_rpt(p_cb, - p_data->api_sndcmd.param, - p_data->api_sndcmd.p_data, - BTA_HH_DATA_EVT); - break; - - case HID_TRANS_CONTROL: - /* no handshake event will be generated */ - /* if VC_UNPLUG is issued, set flag */ - if (p_data->api_sndcmd.param == BTA_HH_CTRL_SUSPEND || - p_data->api_sndcmd.param == BTA_HH_CTRL_EXIT_SUSPEND) - { - bta_hh_le_suspend(p_cb, p_data->api_sndcmd.param); - } - break; - - default: - APPL_TRACE_ERROR("%s unsupported transaction for BLE HID device: %d", - __func__, p_data->api_sndcmd.t_type); - break; - } + default: + APPL_TRACE_ERROR("%s unsupported transaction for BLE HID device: %d", + __func__, p_data->api_sndcmd.t_type); + break; + } } /******************************************************************************* @@ -2212,109 +2094,100 @@ void bta_hh_le_write_dev_act(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hh_le_get_dscp_act(tBTA_HH_DEV_CB *p_cb) -{ - if (p_cb->hid_srvc.in_use) - { - p_cb->dscp_info.descriptor.dl_len = p_cb->hid_srvc.descriptor.dl_len; - p_cb->dscp_info.descriptor.dsc_list = p_cb->hid_srvc.descriptor.dsc_list; - - (*bta_hh_cb.p_cback)(BTA_HH_GET_DSCP_EVT, (tBTA_HH *)&p_cb->dscp_info); - } +void bta_hh_le_get_dscp_act(tBTA_HH_DEV_CB* p_cb) { + if (p_cb->hid_srvc.in_use) { + p_cb->dscp_info.descriptor.dl_len = p_cb->hid_srvc.descriptor.dl_len; + p_cb->dscp_info.descriptor.dsc_list = p_cb->hid_srvc.descriptor.dsc_list; + + (*bta_hh_cb.p_cback)(BTA_HH_GET_DSCP_EVT, (tBTA_HH*)&p_cb->dscp_info); + } } /******************************************************************************* * * Function bta_hh_le_add_dev_bg_conn * - * Description Remove a LE HID device from back ground connection procedure. + * Description Remove a LE HID device from back ground connection + *procedure. * * Returns void * ******************************************************************************/ -static void bta_hh_le_add_dev_bg_conn(tBTA_HH_DEV_CB *p_cb, bool check_bond) -{ - uint8_t sec_flag=0; - bool to_add = true; - - if (check_bond) - { - /* start reconnection if remote is a bonded device */ - /* verify bond */ - BTM_GetSecurityFlagsByTransport(p_cb->addr, &sec_flag, BT_TRANSPORT_LE); - - if ((sec_flag & BTM_SEC_FLAG_LKEY_KNOWN) == 0) - to_add = false; - } +static void bta_hh_le_add_dev_bg_conn(tBTA_HH_DEV_CB* p_cb, bool check_bond) { + uint8_t sec_flag = 0; + bool to_add = true; - if (/*p_cb->dscp_info.flag & BTA_HH_LE_NORMAL_CONN &&*/ - !p_cb->in_bg_conn && to_add) - { - /* add device into BG connection to accept remote initiated connection */ - BTA_GATTC_Open(bta_hh_cb.gatt_if, p_cb->addr, false, BTA_GATT_TRANSPORT_LE); - p_cb->in_bg_conn = true; + if (check_bond) { + /* start reconnection if remote is a bonded device */ + /* verify bond */ + BTM_GetSecurityFlagsByTransport(p_cb->addr, &sec_flag, BT_TRANSPORT_LE); - BTA_DmBleSetBgConnType(BTA_DM_BLE_CONN_AUTO, NULL); - } - return; + if ((sec_flag & BTM_SEC_FLAG_LKEY_KNOWN) == 0) to_add = false; + } + + if (/*p_cb->dscp_info.flag & BTA_HH_LE_NORMAL_CONN &&*/ + !p_cb->in_bg_conn && to_add) { + /* add device into BG connection to accept remote initiated connection */ + BTA_GATTC_Open(bta_hh_cb.gatt_if, p_cb->addr, false, BTA_GATT_TRANSPORT_LE); + p_cb->in_bg_conn = true; + + BTA_DmBleSetBgConnType(BTA_DM_BLE_CONN_AUTO, NULL); + } + return; } /******************************************************************************* * * Function bta_hh_le_add_device * - * Description Add a LE HID device as a known device, and also add the address + * Description Add a LE HID device as a known device, and also add the + *address * into back ground connection WL for incoming connection. * * Returns void * ******************************************************************************/ -uint8_t bta_hh_le_add_device(tBTA_HH_DEV_CB *p_cb, tBTA_HH_MAINT_DEV *p_dev_info) -{ - p_cb->hid_handle = BTA_HH_GET_LE_DEV_HDL(p_cb->index); - bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index; +uint8_t bta_hh_le_add_device(tBTA_HH_DEV_CB* p_cb, + tBTA_HH_MAINT_DEV* p_dev_info) { + p_cb->hid_handle = BTA_HH_GET_LE_DEV_HDL(p_cb->index); + bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index; - /* update DI information */ - bta_hh_update_di_info(p_cb, - p_dev_info->dscp_info.vendor_id, - p_dev_info->dscp_info.product_id, - p_dev_info->dscp_info.version, - p_dev_info->dscp_info.flag); + /* update DI information */ + bta_hh_update_di_info( + p_cb, p_dev_info->dscp_info.vendor_id, p_dev_info->dscp_info.product_id, + p_dev_info->dscp_info.version, p_dev_info->dscp_info.flag); - /* add to BTA device list */ - bta_hh_add_device_to_list(p_cb, p_cb->hid_handle, - p_dev_info->attr_mask, - &p_dev_info->dscp_info.descriptor, - p_dev_info->sub_class, - p_dev_info->dscp_info.ssr_max_latency, - p_dev_info->dscp_info.ssr_min_tout, - p_dev_info->app_id); + /* add to BTA device list */ + bta_hh_add_device_to_list( + p_cb, p_cb->hid_handle, p_dev_info->attr_mask, + &p_dev_info->dscp_info.descriptor, p_dev_info->sub_class, + p_dev_info->dscp_info.ssr_max_latency, p_dev_info->dscp_info.ssr_min_tout, + p_dev_info->app_id); - bta_hh_le_add_dev_bg_conn(p_cb, false); + bta_hh_le_add_dev_bg_conn(p_cb, false); - return p_cb->hid_handle; + return p_cb->hid_handle; } /******************************************************************************* * * Function bta_hh_le_remove_dev_bg_conn * - * Description Remove a LE HID device from back ground connection procedure. + * Description Remove a LE HID device from back ground connection + *procedure. * * Returns void * ******************************************************************************/ -void bta_hh_le_remove_dev_bg_conn(tBTA_HH_DEV_CB *p_dev_cb) -{ - if (p_dev_cb->in_bg_conn) - { - p_dev_cb->in_bg_conn = false; +void bta_hh_le_remove_dev_bg_conn(tBTA_HH_DEV_CB* p_dev_cb) { + if (p_dev_cb->in_bg_conn) { + p_dev_cb->in_bg_conn = false; - BTA_GATTC_CancelOpen(bta_hh_cb.gatt_if, p_dev_cb->addr, false); - } + BTA_GATTC_CancelOpen(bta_hh_cb.gatt_if, p_dev_cb->addr, false); + } - /* deregister all notifications */ - bta_hh_le_deregister_input_notif(p_dev_cb); + /* deregister all notifications */ + bta_hh_le_deregister_input_notif(p_dev_cb); } /******************************************************************************* @@ -2326,103 +2199,101 @@ void bta_hh_le_remove_dev_bg_conn(tBTA_HH_DEV_CB *p_dev_cb) * Parameters: * ******************************************************************************/ -static void bta_hh_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data) -{ - tBTA_HH_DEV_CB *p_dev_cb; +static void bta_hh_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC* p_data) { + tBTA_HH_DEV_CB* p_dev_cb; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_gattc_callback event = %d", event); + APPL_TRACE_DEBUG("bta_hh_gattc_callback event = %d", event); #endif - if (p_data == NULL) - return; - - switch (event) - { - case BTA_GATTC_REG_EVT: /* 0 */ - bta_hh_le_register_cmpl(&p_data->reg_oper); - break; - - case BTA_GATTC_DEREG_EVT: /* 1 */ - bta_hh_cleanup_disable(p_data->reg_oper.status); - break; - - case BTA_GATTC_OPEN_EVT: /* 2 */ - p_dev_cb = bta_hh_le_find_dev_cb_by_bda(p_data->open.remote_bda); - if (p_dev_cb) { - bta_hh_sm_execute(p_dev_cb, BTA_HH_GATT_OPEN_EVT, (tBTA_HH_DATA *)&p_data->open); - } - break; - - case BTA_GATTC_CLOSE_EVT: /* 5 */ - bta_hh_le_close(&p_data->close); - break; + if (p_data == NULL) return; + + switch (event) { + case BTA_GATTC_REG_EVT: /* 0 */ + bta_hh_le_register_cmpl(&p_data->reg_oper); + break; + + case BTA_GATTC_DEREG_EVT: /* 1 */ + bta_hh_cleanup_disable(p_data->reg_oper.status); + break; + + case BTA_GATTC_OPEN_EVT: /* 2 */ + p_dev_cb = bta_hh_le_find_dev_cb_by_bda(p_data->open.remote_bda); + if (p_dev_cb) { + bta_hh_sm_execute(p_dev_cb, BTA_HH_GATT_OPEN_EVT, + (tBTA_HH_DATA*)&p_data->open); + } + break; + + case BTA_GATTC_CLOSE_EVT: /* 5 */ + bta_hh_le_close(&p_data->close); + break; + + case BTA_GATTC_SEARCH_CMPL_EVT: /* 6 */ + bta_hh_le_srvc_search_cmpl(&p_data->search_cmpl); + break; + + case BTA_GATTC_NOTIF_EVT: /* 10 */ + bta_hh_le_input_rpt_notify(&p_data->notify); + break; + + case BTA_GATTC_ENC_CMPL_CB_EVT: /* 17 */ + p_dev_cb = bta_hh_le_find_dev_cb_by_bda(p_data->enc_cmpl.remote_bda); + if (p_dev_cb) { + bta_hh_sm_execute(p_dev_cb, BTA_HH_GATT_ENC_CMPL_EVT, + (tBTA_HH_DATA*)&p_data->enc_cmpl); + } + break; - case BTA_GATTC_SEARCH_CMPL_EVT: /* 6 */ - bta_hh_le_srvc_search_cmpl(&p_data->search_cmpl); - break; - - case BTA_GATTC_NOTIF_EVT: /* 10 */ - bta_hh_le_input_rpt_notify(&p_data->notify); - break; - - case BTA_GATTC_ENC_CMPL_CB_EVT: /* 17 */ - p_dev_cb = bta_hh_le_find_dev_cb_by_bda(p_data->enc_cmpl.remote_bda); - if (p_dev_cb) { - bta_hh_sm_execute(p_dev_cb, BTA_HH_GATT_ENC_CMPL_EVT, - (tBTA_HH_DATA *)&p_data->enc_cmpl); - } - break; - - default: - break; - } + default: + break; + } } -static void read_report_descriptor_ccc_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, - uint16_t len, uint8_t *value, void* data) -{ - tBTA_HH_LE_RPT *p_rpt = (tBTA_HH_LE_RPT*)data; - uint8_t *pp = value; - STREAM_TO_UINT16(p_rpt->client_cfg_value, pp); +static void read_report_descriptor_ccc_cb(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, + uint8_t* value, void* data) { + tBTA_HH_LE_RPT* p_rpt = (tBTA_HH_LE_RPT*)data; + uint8_t* pp = value; + STREAM_TO_UINT16(p_rpt->client_cfg_value, pp); - APPL_TRACE_DEBUG("Read Client Configuration: 0x%04x", p_rpt->client_cfg_value); + APPL_TRACE_DEBUG("Read Client Configuration: 0x%04x", + p_rpt->client_cfg_value); } /******************************************************************************* * * Function bta_hh_le_hid_read_rpt_clt_cfg * - * Description a test command to read report descriptor client configuration + * Description a test command to read report descriptor client + *configuration * * Returns void * ******************************************************************************/ -void bta_hh_le_hid_read_rpt_clt_cfg(BD_ADDR bd_addr, uint8_t rpt_id) -{ - tBTA_HH_DEV_CB *p_cb = NULL; - tBTA_HH_LE_RPT *p_rpt ; - uint8_t index = BTA_HH_IDX_INVALID; - - index = bta_hh_find_cb(bd_addr); - if ((index = bta_hh_find_cb(bd_addr))== BTA_HH_IDX_INVALID) - { - APPL_TRACE_ERROR("%s: unknown device", __func__); - return; - } +void bta_hh_le_hid_read_rpt_clt_cfg(BD_ADDR bd_addr, uint8_t rpt_id) { + tBTA_HH_DEV_CB* p_cb = NULL; + tBTA_HH_LE_RPT* p_rpt; + uint8_t index = BTA_HH_IDX_INVALID; + + index = bta_hh_find_cb(bd_addr); + if ((index = bta_hh_find_cb(bd_addr)) == BTA_HH_IDX_INVALID) { + APPL_TRACE_ERROR("%s: unknown device", __func__); + return; + } - p_cb = &bta_hh_cb.kdev[index]; + p_cb = &bta_hh_cb.kdev[index]; - p_rpt = bta_hh_le_find_rpt_by_idtype(p_cb->hid_srvc.report, p_cb->mode, BTA_HH_RPTT_INPUT, - rpt_id); + p_rpt = bta_hh_le_find_rpt_by_idtype(p_cb->hid_srvc.report, p_cb->mode, + BTA_HH_RPTT_INPUT, rpt_id); - if (p_rpt == NULL) - { - APPL_TRACE_ERROR("%s: no matching report", __func__); - return; - } - - bta_hh_le_read_char_descriptor(p_cb, p_rpt->char_inst_id, GATT_UUID_CHAR_CLIENT_CONFIG, - read_report_descriptor_ccc_cb, p_rpt); + if (p_rpt == NULL) { + APPL_TRACE_ERROR("%s: no matching report", __func__); return; + } + + bta_hh_le_read_char_descriptor(p_cb, p_rpt->char_inst_id, + GATT_UUID_CHAR_CLIENT_CONFIG, + read_report_descriptor_ccc_cb, p_rpt); + return; } /******************************************************************************* @@ -2434,7 +2305,7 @@ void bta_hh_le_hid_read_rpt_clt_cfg(BD_ADDR bd_addr, uint8_t rpt_id) * Parameters: * ******************************************************************************/ -//TODO(jpawlowski): uncomment when fixed +// TODO(jpawlowski): uncomment when fixed // static void bta_hh_process_cache_rpt (tBTA_HH_DEV_CB *p_cb, // tBTA_HH_RPT_CACHE_ENTRY *p_rpt_cache, // uint8_t num_rpt) @@ -2460,7 +2331,8 @@ void bta_hh_le_hid_read_rpt_clt_cfg(BD_ADDR bd_addr, uint8_t rpt_id) // p_rpt_cache->char_inst_id, // p_rpt_cache->prop)) == NULL) // { -// APPL_TRACE_ERROR("bta_hh_process_cache_rpt: allocation report entry failure"); +// APPL_TRACE_ERROR("bta_hh_process_cache_rpt: allocation report +// entry failure"); // break; // } // else @@ -2470,9 +2342,11 @@ void bta_hh_le_hid_read_rpt_clt_cfg(BD_ADDR bd_addr, uint8_t rpt_id) // if (p_rpt->uuid == GATT_UUID_HID_BT_KB_INPUT || // p_rpt->uuid == GATT_UUID_HID_BT_MOUSE_INPUT || -// (p_rpt->uuid == GATT_UUID_HID_REPORT && p_rpt->rpt_type == BTA_HH_RPTT_INPUT)) +// (p_rpt->uuid == GATT_UUID_HID_REPORT && p_rpt->rpt_type +// == BTA_HH_RPTT_INPUT)) // { -// p_rpt->client_cfg_value = BTA_GATT_CLT_CONFIG_NOTIFICATION; +// p_rpt->client_cfg_value = +// BTA_GATT_CLT_CONFIG_NOTIFICATION; // } // } // } @@ -2480,7 +2354,3 @@ void bta_hh_le_hid_read_rpt_clt_cfg(BD_ADDR bd_addr, uint8_t rpt_id) // } #endif - - - - diff --git a/system/bta/hh/bta_hh_main.cc b/system/bta/hh/bta_hh_main.cc index 01085486bd8..ca7601ade8a 100644 --- a/system/bta/hh/bta_hh_main.cc +++ b/system/bta/hh/bta_hh_main.cc @@ -28,201 +28,193 @@ #include +#include "bt_common.h" #include "bta_hh_api.h" #include "bta_hh_int.h" -#include "bt_common.h" /***************************************************************************** * Constants and types ****************************************************************************/ /* state machine action enumeration list */ -enum -{ - BTA_HH_API_DISC_ACT, /* HID host process API close action */ - BTA_HH_OPEN_ACT, /* HID host process BTA_HH_EVT_OPEN */ - BTA_HH_CLOSE_ACT, /* HID host process BTA_HH_EVT_CLOSE */ - BTA_HH_DATA_ACT, /* HID host receive data report */ - BTA_HH_CTRL_DAT_ACT, - BTA_HH_HANDSK_ACT, - BTA_HH_START_SDP, /* HID host inquery */ - BTA_HH_SDP_CMPL, - BTA_HH_WRITE_DEV_ACT, - BTA_HH_GET_DSCP_ACT, - BTA_HH_MAINT_DEV_ACT, - BTA_HH_OPEN_CMPL_ACT, - BTA_HH_OPEN_FAILURE, +enum { + BTA_HH_API_DISC_ACT, /* HID host process API close action */ + BTA_HH_OPEN_ACT, /* HID host process BTA_HH_EVT_OPEN */ + BTA_HH_CLOSE_ACT, /* HID host process BTA_HH_EVT_CLOSE */ + BTA_HH_DATA_ACT, /* HID host receive data report */ + BTA_HH_CTRL_DAT_ACT, + BTA_HH_HANDSK_ACT, + BTA_HH_START_SDP, /* HID host inquery */ + BTA_HH_SDP_CMPL, + BTA_HH_WRITE_DEV_ACT, + BTA_HH_GET_DSCP_ACT, + BTA_HH_MAINT_DEV_ACT, + BTA_HH_OPEN_CMPL_ACT, + BTA_HH_OPEN_FAILURE, #if (BTA_HH_LE_INCLUDED == TRUE) - BTA_HH_GATT_CLOSE, - BTA_HH_LE_OPEN_FAIL, - BTA_HH_GATT_OPEN, - BTA_HH_START_SEC, - BTA_HH_SEC_CMPL, - BTA_HH_GATT_ENC_CMPL, + BTA_HH_GATT_CLOSE, + BTA_HH_LE_OPEN_FAIL, + BTA_HH_GATT_OPEN, + BTA_HH_START_SEC, + BTA_HH_SEC_CMPL, + BTA_HH_GATT_ENC_CMPL, #endif - BTA_HH_NUM_ACTIONS + BTA_HH_NUM_ACTIONS }; -#define BTA_HH_IGNORE BTA_HH_NUM_ACTIONS +#define BTA_HH_IGNORE BTA_HH_NUM_ACTIONS /* type for action functions */ -typedef void (*tBTA_HH_ACTION)(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data); +typedef void (*tBTA_HH_ACTION)(tBTA_HH_DEV_CB* p_cb, tBTA_HH_DATA* p_data); /* action functions */ -const tBTA_HH_ACTION bta_hh_action[] = -{ - bta_hh_api_disc_act, - bta_hh_open_act, - bta_hh_close_act, - bta_hh_data_act, - bta_hh_ctrl_dat_act, - bta_hh_handsk_act, - bta_hh_start_sdp, - bta_hh_sdp_cmpl, - bta_hh_write_dev_act, - bta_hh_get_dscp_act, - bta_hh_maint_dev_act, - bta_hh_open_cmpl_act, - bta_hh_open_failure +const tBTA_HH_ACTION bta_hh_action[] = { + bta_hh_api_disc_act, bta_hh_open_act, bta_hh_close_act, bta_hh_data_act, + bta_hh_ctrl_dat_act, bta_hh_handsk_act, bta_hh_start_sdp, bta_hh_sdp_cmpl, + bta_hh_write_dev_act, bta_hh_get_dscp_act, bta_hh_maint_dev_act, + bta_hh_open_cmpl_act, bta_hh_open_failure #if (BTA_HH_LE_INCLUDED == TRUE) - ,bta_hh_gatt_close - ,bta_hh_le_open_fail - ,bta_hh_gatt_open - ,bta_hh_start_security - ,bta_hh_security_cmpl - ,bta_hh_le_notify_enc_cmpl + , + bta_hh_gatt_close, bta_hh_le_open_fail, bta_hh_gatt_open, + bta_hh_start_security, bta_hh_security_cmpl, bta_hh_le_notify_enc_cmpl #endif }; /* state table information */ -#define BTA_HH_ACTION 0 /* position of action */ -#define BTA_HH_NEXT_STATE 1 /* position of next state */ -#define BTA_HH_NUM_COLS 2 /* number of columns */ +#define BTA_HH_ACTION 0 /* position of action */ +#define BTA_HH_NEXT_STATE 1 /* position of next state */ +#define BTA_HH_NUM_COLS 2 /* number of columns */ /* state table for idle state */ -const uint8_t bta_hh_st_idle[][BTA_HH_NUM_COLS] = -{ -/* Event Action Next state */ -/* BTA_HH_API_OPEN_EVT */ {BTA_HH_START_SDP, BTA_HH_W4_CONN_ST }, -/* BTA_HH_API_CLOSE_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST }, -/* BTA_HH_INT_OPEN_EVT */ {BTA_HH_OPEN_ACT, BTA_HH_W4_CONN_ST }, -/* BTA_HH_INT_CLOSE_EVT */ {BTA_HH_CLOSE_ACT, BTA_HH_IDLE_ST }, -/* BTA_HH_INT_DATA_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST }, -/* BTA_HH_INT_CTRL_DATA */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST }, -/* BTA_HH_INT_HANDSK_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST }, -/* BTA_HH_SDP_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST }, -/* BTA_HH_API_WRITE_DEV_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST }, -/* BTA_HH_API_GET_DSCP_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST }, -/* BTA_HH_API_MAINT_DEV_EVT */ {BTA_HH_MAINT_DEV_ACT, BTA_HH_IDLE_ST }, -/* BTA_HH_OPEN_CMPL_EVT */ {BTA_HH_OPEN_CMPL_ACT, BTA_HH_CONN_ST } +const uint8_t bta_hh_st_idle[][BTA_HH_NUM_COLS] = { + /* Event Action Next state */ + /* BTA_HH_API_OPEN_EVT */ {BTA_HH_START_SDP, BTA_HH_W4_CONN_ST}, + /* BTA_HH_API_CLOSE_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST}, + /* BTA_HH_INT_OPEN_EVT */ {BTA_HH_OPEN_ACT, BTA_HH_W4_CONN_ST}, + /* BTA_HH_INT_CLOSE_EVT */ {BTA_HH_CLOSE_ACT, BTA_HH_IDLE_ST}, + /* BTA_HH_INT_DATA_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST}, + /* BTA_HH_INT_CTRL_DATA */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST}, + /* BTA_HH_INT_HANDSK_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST}, + /* BTA_HH_SDP_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST}, + /* BTA_HH_API_WRITE_DEV_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST}, + /* BTA_HH_API_GET_DSCP_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST}, + /* BTA_HH_API_MAINT_DEV_EVT */ {BTA_HH_MAINT_DEV_ACT, BTA_HH_IDLE_ST}, + /* BTA_HH_OPEN_CMPL_EVT */ {BTA_HH_OPEN_CMPL_ACT, BTA_HH_CONN_ST} #if (BTA_HH_LE_INCLUDED == TRUE) -/* BTA_HH_GATT_CLOSE_EVT */ ,{BTA_HH_IGNORE, BTA_HH_IDLE_ST } -/* BTA_HH_GATT_OPEN_EVT */ ,{BTA_HH_GATT_OPEN, BTA_HH_W4_CONN_ST } -/* BTA_HH_START_ENC_EVT */ ,{BTA_HH_IGNORE, BTA_HH_IDLE_ST } -/* BTA_HH_ENC_CMPL_EVT */ ,{BTA_HH_IGNORE, BTA_HH_IDLE_ST } -/* BTA_HH_GATT_ENC_CMPL_EVT */ ,{BTA_HH_IGNORE, BTA_HH_IDLE_ST } + /* BTA_HH_GATT_CLOSE_EVT */, + {BTA_HH_IGNORE, BTA_HH_IDLE_ST} + /* BTA_HH_GATT_OPEN_EVT */, + {BTA_HH_GATT_OPEN, BTA_HH_W4_CONN_ST} + /* BTA_HH_START_ENC_EVT */, + {BTA_HH_IGNORE, BTA_HH_IDLE_ST} + /* BTA_HH_ENC_CMPL_EVT */, + {BTA_HH_IGNORE, BTA_HH_IDLE_ST} + /* BTA_HH_GATT_ENC_CMPL_EVT */, + {BTA_HH_IGNORE, BTA_HH_IDLE_ST} #endif }; - -const uint8_t bta_hh_st_w4_conn[][BTA_HH_NUM_COLS] = -{ -/* Event Action Next state */ -/* BTA_HH_API_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST }, -/* BTA_HH_API_CLOSE_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST }, -/* BTA_HH_INT_OPEN_EVT */ {BTA_HH_OPEN_ACT, BTA_HH_W4_CONN_ST }, -/* BTA_HH_INT_CLOSE_EVT */ {BTA_HH_OPEN_FAILURE, BTA_HH_IDLE_ST }, -/* BTA_HH_INT_DATA_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST }, -/* BTA_HH_INT_CTRL_DATA */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST }, -/* BTA_HH_INT_HANDSK_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST }, -/* BTA_HH_SDP_CMPL_EVT */ {BTA_HH_SDP_CMPL, BTA_HH_W4_CONN_ST }, -/* BTA_HH_API_WRITE_DEV_EVT */ {BTA_HH_WRITE_DEV_ACT, BTA_HH_W4_CONN_ST }, -/* BTA_HH_API_GET_DSCP_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST }, -/* BTA_HH_API_MAINT_DEV_EVT */ {BTA_HH_MAINT_DEV_ACT, BTA_HH_IDLE_ST }, -/* BTA_HH_OPEN_CMPL_EVT */ {BTA_HH_OPEN_CMPL_ACT, BTA_HH_CONN_ST } +const uint8_t bta_hh_st_w4_conn[][BTA_HH_NUM_COLS] = { + /* Event Action Next state */ + /* BTA_HH_API_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST}, + /* BTA_HH_API_CLOSE_EVT */ {BTA_HH_IGNORE, BTA_HH_IDLE_ST}, + /* BTA_HH_INT_OPEN_EVT */ {BTA_HH_OPEN_ACT, BTA_HH_W4_CONN_ST}, + /* BTA_HH_INT_CLOSE_EVT */ {BTA_HH_OPEN_FAILURE, BTA_HH_IDLE_ST}, + /* BTA_HH_INT_DATA_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST}, + /* BTA_HH_INT_CTRL_DATA */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST}, + /* BTA_HH_INT_HANDSK_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST}, + /* BTA_HH_SDP_CMPL_EVT */ {BTA_HH_SDP_CMPL, BTA_HH_W4_CONN_ST}, + /* BTA_HH_API_WRITE_DEV_EVT */ {BTA_HH_WRITE_DEV_ACT, BTA_HH_W4_CONN_ST}, + /* BTA_HH_API_GET_DSCP_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST}, + /* BTA_HH_API_MAINT_DEV_EVT */ {BTA_HH_MAINT_DEV_ACT, BTA_HH_IDLE_ST}, + /* BTA_HH_OPEN_CMPL_EVT */ {BTA_HH_OPEN_CMPL_ACT, BTA_HH_CONN_ST} #if (BTA_HH_LE_INCLUDED == TRUE) -/* BTA_HH_GATT_CLOSE_EVT */ ,{BTA_HH_LE_OPEN_FAIL, BTA_HH_IDLE_ST } -/* BTA_HH_GATT_OPEN_EVT */ ,{BTA_HH_GATT_OPEN, BTA_HH_W4_CONN_ST } -/* BTA_HH_START_ENC_EVT */ ,{BTA_HH_START_SEC, BTA_HH_W4_SEC } -/* BTA_HH_ENC_CMPL_EVT */ ,{BTA_HH_IGNORE, BTA_HH_W4_CONN_ST } -/* BTA_HH_GATT_ENC_CMPL_EVT */ ,{BTA_HH_IGNORE, BTA_HH_W4_CONN_ST } + /* BTA_HH_GATT_CLOSE_EVT */, + {BTA_HH_LE_OPEN_FAIL, BTA_HH_IDLE_ST} + /* BTA_HH_GATT_OPEN_EVT */, + {BTA_HH_GATT_OPEN, BTA_HH_W4_CONN_ST} + /* BTA_HH_START_ENC_EVT */, + {BTA_HH_START_SEC, BTA_HH_W4_SEC} + /* BTA_HH_ENC_CMPL_EVT */, + {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST} + /* BTA_HH_GATT_ENC_CMPL_EVT */, + {BTA_HH_IGNORE, BTA_HH_W4_CONN_ST} #endif }; - -const uint8_t bta_hh_st_connected[][BTA_HH_NUM_COLS] = -{ -/* Event Action Next state */ -/* BTA_HH_API_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_CONN_ST }, -/* BTA_HH_API_CLOSE_EVT */ {BTA_HH_API_DISC_ACT, BTA_HH_CONN_ST }, -/* BTA_HH_INT_OPEN_EVT */ {BTA_HH_OPEN_ACT, BTA_HH_CONN_ST }, -/* BTA_HH_INT_CLOSE_EVT */ {BTA_HH_CLOSE_ACT, BTA_HH_IDLE_ST }, -/* BTA_HH_INT_DATA_EVT */ {BTA_HH_DATA_ACT, BTA_HH_CONN_ST }, -/* BTA_HH_INT_CTRL_DATA */ {BTA_HH_CTRL_DAT_ACT, BTA_HH_CONN_ST }, -/* BTA_HH_INT_HANDSK_EVT */ {BTA_HH_HANDSK_ACT, BTA_HH_CONN_ST }, -/* BTA_HH_SDP_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_CONN_ST }, -/* BTA_HH_API_WRITE_DEV_EVT */ {BTA_HH_WRITE_DEV_ACT, BTA_HH_CONN_ST }, -/* BTA_HH_API_GET_DSCP_EVT */ {BTA_HH_GET_DSCP_ACT, BTA_HH_CONN_ST }, -/* BTA_HH_API_MAINT_DEV_EVT */ {BTA_HH_MAINT_DEV_ACT, BTA_HH_CONN_ST }, -/* BTA_HH_OPEN_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_CONN_ST } +const uint8_t bta_hh_st_connected[][BTA_HH_NUM_COLS] = { + /* Event Action Next state */ + /* BTA_HH_API_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_CONN_ST}, + /* BTA_HH_API_CLOSE_EVT */ {BTA_HH_API_DISC_ACT, BTA_HH_CONN_ST}, + /* BTA_HH_INT_OPEN_EVT */ {BTA_HH_OPEN_ACT, BTA_HH_CONN_ST}, + /* BTA_HH_INT_CLOSE_EVT */ {BTA_HH_CLOSE_ACT, BTA_HH_IDLE_ST}, + /* BTA_HH_INT_DATA_EVT */ {BTA_HH_DATA_ACT, BTA_HH_CONN_ST}, + /* BTA_HH_INT_CTRL_DATA */ {BTA_HH_CTRL_DAT_ACT, BTA_HH_CONN_ST}, + /* BTA_HH_INT_HANDSK_EVT */ {BTA_HH_HANDSK_ACT, BTA_HH_CONN_ST}, + /* BTA_HH_SDP_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_CONN_ST}, + /* BTA_HH_API_WRITE_DEV_EVT */ {BTA_HH_WRITE_DEV_ACT, BTA_HH_CONN_ST}, + /* BTA_HH_API_GET_DSCP_EVT */ {BTA_HH_GET_DSCP_ACT, BTA_HH_CONN_ST}, + /* BTA_HH_API_MAINT_DEV_EVT */ {BTA_HH_MAINT_DEV_ACT, BTA_HH_CONN_ST}, + /* BTA_HH_OPEN_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_CONN_ST} #if (BTA_HH_LE_INCLUDED == TRUE) -/* BTA_HH_GATT_CLOSE_EVT */ ,{BTA_HH_GATT_CLOSE, BTA_HH_IDLE_ST } -/* BTA_HH_GATT_OPEN_EVT */ ,{BTA_HH_IGNORE, BTA_HH_CONN_ST } -/* BTA_HH_START_ENC_EVT */ ,{BTA_HH_IGNORE, BTA_HH_CONN_ST } -/* BTA_HH_ENC_CMPL_EVT */ ,{BTA_HH_IGNORE, BTA_HH_CONN_ST } -/* BTA_HH_GATT_ENC_CMPL_EVT */ ,{BTA_HH_IGNORE, BTA_HH_CONN_ST } + /* BTA_HH_GATT_CLOSE_EVT */, + {BTA_HH_GATT_CLOSE, BTA_HH_IDLE_ST} + /* BTA_HH_GATT_OPEN_EVT */, + {BTA_HH_IGNORE, BTA_HH_CONN_ST} + /* BTA_HH_START_ENC_EVT */, + {BTA_HH_IGNORE, BTA_HH_CONN_ST} + /* BTA_HH_ENC_CMPL_EVT */, + {BTA_HH_IGNORE, BTA_HH_CONN_ST} + /* BTA_HH_GATT_ENC_CMPL_EVT */, + {BTA_HH_IGNORE, BTA_HH_CONN_ST} #endif }; #if (BTA_HH_LE_INCLUDED == TRUE) -const uint8_t bta_hh_st_w4_sec[][BTA_HH_NUM_COLS] = -{ -/* Event Action Next state */ -/* BTA_HH_API_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_API_CLOSE_EVT */ {BTA_HH_API_DISC_ACT, BTA_HH_W4_SEC }, -/* BTA_HH_INT_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_INT_CLOSE_EVT */ {BTA_HH_OPEN_FAILURE, BTA_HH_IDLE_ST }, -/* BTA_HH_INT_DATA_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_INT_CTRL_DATA */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_INT_HANDSK_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_SDP_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_API_WRITE_DEV_EVT */ {BTA_HH_IGNORE , BTA_HH_W4_SEC }, -/* BTA_HH_API_GET_DSCP_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_API_MAINT_DEV_EVT */ {BTA_HH_MAINT_DEV_ACT, BTA_HH_W4_SEC }, -/* BTA_HH_OPEN_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_GATT_CLOSE_EVT */ {BTA_HH_LE_OPEN_FAIL, BTA_HH_IDLE_ST }, -/* BTA_HH_GATT_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_START_ENC_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC }, -/* BTA_HH_ENC_CMPL_EVT */ {BTA_HH_SEC_CMPL, BTA_HH_W4_CONN_ST }, -/* BTA_HH_GATT_ENC_CMPL_EVT */ {BTA_HH_GATT_ENC_CMPL, BTA_HH_W4_SEC } -}; +const uint8_t bta_hh_st_w4_sec[][BTA_HH_NUM_COLS] = { + /* Event Action Next state */ + /* BTA_HH_API_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_API_CLOSE_EVT */ {BTA_HH_API_DISC_ACT, BTA_HH_W4_SEC}, + /* BTA_HH_INT_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_INT_CLOSE_EVT */ {BTA_HH_OPEN_FAILURE, BTA_HH_IDLE_ST}, + /* BTA_HH_INT_DATA_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_INT_CTRL_DATA */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_INT_HANDSK_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_SDP_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_API_WRITE_DEV_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_API_GET_DSCP_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_API_MAINT_DEV_EVT */ {BTA_HH_MAINT_DEV_ACT, BTA_HH_W4_SEC}, + /* BTA_HH_OPEN_CMPL_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_GATT_CLOSE_EVT */ {BTA_HH_LE_OPEN_FAIL, BTA_HH_IDLE_ST}, + /* BTA_HH_GATT_OPEN_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_START_ENC_EVT */ {BTA_HH_IGNORE, BTA_HH_W4_SEC}, + /* BTA_HH_ENC_CMPL_EVT */ {BTA_HH_SEC_CMPL, BTA_HH_W4_CONN_ST}, + /* BTA_HH_GATT_ENC_CMPL_EVT */ {BTA_HH_GATT_ENC_CMPL, BTA_HH_W4_SEC}}; #endif /* type for state table */ typedef const uint8_t (*tBTA_HH_ST_TBL)[BTA_HH_NUM_COLS]; /* state table */ -const tBTA_HH_ST_TBL bta_hh_st_tbl[] = -{ - bta_hh_st_idle, - bta_hh_st_w4_conn, - bta_hh_st_connected +const tBTA_HH_ST_TBL bta_hh_st_tbl[] = {bta_hh_st_idle, bta_hh_st_w4_conn, + bta_hh_st_connected #if (BTA_HH_LE_INCLUDED == TRUE) - ,bta_hh_st_w4_sec + , + bta_hh_st_w4_sec #endif }; /***************************************************************************** * Global data ****************************************************************************/ -tBTA_HH_CB bta_hh_cb; +tBTA_HH_CB bta_hh_cb; /***************************************************************************** * Static functions ****************************************************************************/ #if (BTA_HH_DEBUG == TRUE) -static const char *bta_hh_evt_code(tBTA_HH_INT_EVT evt_code); -static const char *bta_hh_state_code(tBTA_HH_STATE state_code); +static const char* bta_hh_evt_code(tBTA_HH_INT_EVT evt_code); +static const char* bta_hh_state_code(tBTA_HH_STATE state_code); #endif /******************************************************************************* @@ -235,137 +227,127 @@ static const char *bta_hh_state_code(tBTA_HH_STATE state_code); * Returns void * ******************************************************************************/ -void bta_hh_sm_execute(tBTA_HH_DEV_CB *p_cb, uint16_t event, tBTA_HH_DATA * p_data) -{ - tBTA_HH_ST_TBL state_table; - uint8_t action; - tBTA_HH cback_data; - tBTA_HH_EVT cback_event = 0; +void bta_hh_sm_execute(tBTA_HH_DEV_CB* p_cb, uint16_t event, + tBTA_HH_DATA* p_data) { + tBTA_HH_ST_TBL state_table; + uint8_t action; + tBTA_HH cback_data; + tBTA_HH_EVT cback_event = 0; #if (BTA_HH_DEBUG == TRUE) - tBTA_HH_STATE in_state ; - uint16_t debug_event = event; + tBTA_HH_STATE in_state; + uint16_t debug_event = event; #endif - memset(&cback_data, 0, sizeof(tBTA_HH)); - - /* handle exception, no valid control block was found */ - if (!p_cb) - { - /* BTA HH enabled already? otherwise ignore the event although it's bad*/ - if (bta_hh_cb.p_cback != NULL) - { - switch (event) - { - /* no control block available for new connection */ - case BTA_HH_API_OPEN_EVT: - cback_event = BTA_HH_OPEN_EVT; - /* build cback data */ - bdcpy(cback_data.conn.bda, ((tBTA_HH_API_CONN *)p_data)->bd_addr); - cback_data.conn.status = BTA_HH_ERR_DB_FULL; - cback_data.conn.handle = BTA_HH_INVALID_HANDLE; - break; - /* DB full, BTA_HhAddDev */ - case BTA_HH_API_MAINT_DEV_EVT: - cback_event = p_data->api_maintdev.sub_event; - - if (p_data->api_maintdev.sub_event == BTA_HH_ADD_DEV_EVT) - { - bdcpy(cback_data.dev_info.bda, p_data->api_maintdev.bda); - cback_data.dev_info.status = BTA_HH_ERR_DB_FULL; - cback_data.dev_info.handle = BTA_HH_INVALID_HANDLE; - } - else - { - cback_data.dev_info.status = BTA_HH_ERR_HDL; - cback_data.dev_info.handle = (uint8_t)p_data->api_maintdev.hdr.layer_specific; - } - break; - case BTA_HH_API_WRITE_DEV_EVT: - cback_event = (p_data->api_sndcmd.t_type - BTA_HH_FST_BTE_TRANS_EVT) + + memset(&cback_data, 0, sizeof(tBTA_HH)); + + /* handle exception, no valid control block was found */ + if (!p_cb) { + /* BTA HH enabled already? otherwise ignore the event although it's bad*/ + if (bta_hh_cb.p_cback != NULL) { + switch (event) { + /* no control block available for new connection */ + case BTA_HH_API_OPEN_EVT: + cback_event = BTA_HH_OPEN_EVT; + /* build cback data */ + bdcpy(cback_data.conn.bda, ((tBTA_HH_API_CONN*)p_data)->bd_addr); + cback_data.conn.status = BTA_HH_ERR_DB_FULL; + cback_data.conn.handle = BTA_HH_INVALID_HANDLE; + break; + /* DB full, BTA_HhAddDev */ + case BTA_HH_API_MAINT_DEV_EVT: + cback_event = p_data->api_maintdev.sub_event; + + if (p_data->api_maintdev.sub_event == BTA_HH_ADD_DEV_EVT) { + bdcpy(cback_data.dev_info.bda, p_data->api_maintdev.bda); + cback_data.dev_info.status = BTA_HH_ERR_DB_FULL; + cback_data.dev_info.handle = BTA_HH_INVALID_HANDLE; + } else { + cback_data.dev_info.status = BTA_HH_ERR_HDL; + cback_data.dev_info.handle = + (uint8_t)p_data->api_maintdev.hdr.layer_specific; + } + break; + case BTA_HH_API_WRITE_DEV_EVT: + cback_event = (p_data->api_sndcmd.t_type - BTA_HH_FST_BTE_TRANS_EVT) + BTA_HH_FST_TRANS_CB_EVT; - osi_free_and_reset((void **)&p_data->api_sndcmd.p_data); - if (p_data->api_sndcmd.t_type == HID_TRANS_SET_PROTOCOL || - p_data->api_sndcmd.t_type == HID_TRANS_SET_REPORT || - p_data->api_sndcmd.t_type == HID_TRANS_SET_IDLE) - { - cback_data.dev_status.status = BTA_HH_ERR_HDL; - cback_data.dev_status.handle = (uint8_t)p_data->api_sndcmd.hdr.layer_specific; - } - else if (p_data->api_sndcmd.t_type != HID_TRANS_DATA && - p_data->api_sndcmd.t_type != HID_TRANS_CONTROL) - { - cback_data.hs_data.handle = (uint8_t)p_data->api_sndcmd.hdr.layer_specific; - cback_data.hs_data.status = BTA_HH_ERR_HDL; - /* hs_data.rsp_data will be all zero, which is not valid value */ - } - else if (p_data->api_sndcmd.t_type == HID_TRANS_CONTROL && - p_data->api_sndcmd.param == BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG) - { - cback_data.status = BTA_HH_ERR_HDL; - cback_event = BTA_HH_VC_UNPLUG_EVT; - } - else - cback_event = 0; - break; - - case BTA_HH_API_CLOSE_EVT: - cback_event = BTA_HH_CLOSE_EVT; - - cback_data.dev_status.status = BTA_HH_ERR_HDL; - cback_data.dev_status.handle = (uint8_t)p_data->api_sndcmd.hdr.layer_specific; - break; - - default: - /* invalid handle, call bad API event */ - APPL_TRACE_ERROR("wrong device handle: [%d]", p_data->hdr.layer_specific); - /* Free the callback buffer now */ - if (p_data != NULL) - osi_free_and_reset((void **)&p_data->hid_cback.p_data); - break; - } - if (cback_event) - (* bta_hh_cb.p_cback)(cback_event, &cback_data); - } + osi_free_and_reset((void**)&p_data->api_sndcmd.p_data); + if (p_data->api_sndcmd.t_type == HID_TRANS_SET_PROTOCOL || + p_data->api_sndcmd.t_type == HID_TRANS_SET_REPORT || + p_data->api_sndcmd.t_type == HID_TRANS_SET_IDLE) { + cback_data.dev_status.status = BTA_HH_ERR_HDL; + cback_data.dev_status.handle = + (uint8_t)p_data->api_sndcmd.hdr.layer_specific; + } else if (p_data->api_sndcmd.t_type != HID_TRANS_DATA && + p_data->api_sndcmd.t_type != HID_TRANS_CONTROL) { + cback_data.hs_data.handle = + (uint8_t)p_data->api_sndcmd.hdr.layer_specific; + cback_data.hs_data.status = BTA_HH_ERR_HDL; + /* hs_data.rsp_data will be all zero, which is not valid value */ + } else if (p_data->api_sndcmd.t_type == HID_TRANS_CONTROL && + p_data->api_sndcmd.param == + BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG) { + cback_data.status = BTA_HH_ERR_HDL; + cback_event = BTA_HH_VC_UNPLUG_EVT; + } else + cback_event = 0; + break; + + case BTA_HH_API_CLOSE_EVT: + cback_event = BTA_HH_CLOSE_EVT; + + cback_data.dev_status.status = BTA_HH_ERR_HDL; + cback_data.dev_status.handle = + (uint8_t)p_data->api_sndcmd.hdr.layer_specific; + break; + + default: + /* invalid handle, call bad API event */ + APPL_TRACE_ERROR("wrong device handle: [%d]", + p_data->hdr.layer_specific); + /* Free the callback buffer now */ + if (p_data != NULL) + osi_free_and_reset((void**)&p_data->hid_cback.p_data); + break; + } + if (cback_event) (*bta_hh_cb.p_cback)(cback_event, &cback_data); } - /* corresponding CB is found, go to state machine */ - else - { + } + /* corresponding CB is found, go to state machine */ + else { #if (BTA_HH_DEBUG == TRUE) - in_state = p_cb->state; - APPL_TRACE_EVENT("bta_hh_sm_execute: State 0x%02x [%s], Event [%s]", - in_state, bta_hh_state_code(in_state), - bta_hh_evt_code(debug_event)); + in_state = p_cb->state; + APPL_TRACE_EVENT("bta_hh_sm_execute: State 0x%02x [%s], Event [%s]", + in_state, bta_hh_state_code(in_state), + bta_hh_evt_code(debug_event)); #endif - if ((p_cb->state == BTA_HH_NULL_ST) || (p_cb->state >= BTA_HH_INVALID_ST)) - { - APPL_TRACE_ERROR("bta_hh_sm_execute: Invalid state State = 0x%x, Event = %d", - p_cb->state,event); - return; - } - state_table = bta_hh_st_tbl[p_cb->state - 1]; + if ((p_cb->state == BTA_HH_NULL_ST) || (p_cb->state >= BTA_HH_INVALID_ST)) { + APPL_TRACE_ERROR( + "bta_hh_sm_execute: Invalid state State = 0x%x, Event = %d", + p_cb->state, event); + return; + } + state_table = bta_hh_st_tbl[p_cb->state - 1]; - event &= 0xff; + event &= 0xff; - p_cb->state = state_table[event][BTA_HH_NEXT_STATE] ; + p_cb->state = state_table[event][BTA_HH_NEXT_STATE]; - if ((action = state_table[event][BTA_HH_ACTION]) != BTA_HH_IGNORE) - { - (*bta_hh_action[action])(p_cb, p_data); - } + if ((action = state_table[event][BTA_HH_ACTION]) != BTA_HH_IGNORE) { + (*bta_hh_action[action])(p_cb, p_data); + } #if (BTA_HH_DEBUG == TRUE) - if (in_state != p_cb->state) - { - APPL_TRACE_DEBUG("HH State Change: [%s] -> [%s] after Event [%s]", - bta_hh_state_code(in_state), - bta_hh_state_code(p_cb->state), - bta_hh_evt_code(debug_event)); - } -#endif + if (in_state != p_cb->state) { + APPL_TRACE_DEBUG("HH State Change: [%s] -> [%s] after Event [%s]", + bta_hh_state_code(in_state), + bta_hh_state_code(p_cb->state), + bta_hh_evt_code(debug_event)); } +#endif + } - return; + return; } /******************************************************************************* * @@ -377,70 +359,64 @@ void bta_hh_sm_execute(tBTA_HH_DEV_CB *p_cb, uint16_t event, tBTA_HH_DATA * p_da * Returns void * ******************************************************************************/ -bool bta_hh_hdl_event(BT_HDR *p_msg) -{ - uint8_t index = BTA_HH_IDX_INVALID; - tBTA_HH_DEV_CB *p_cb = NULL; +bool bta_hh_hdl_event(BT_HDR* p_msg) { + uint8_t index = BTA_HH_IDX_INVALID; + tBTA_HH_DEV_CB* p_cb = NULL; - switch (p_msg->event) - { - case BTA_HH_API_ENABLE_EVT: - bta_hh_api_enable((tBTA_HH_DATA *) p_msg); - break; + switch (p_msg->event) { + case BTA_HH_API_ENABLE_EVT: + bta_hh_api_enable((tBTA_HH_DATA*)p_msg); + break; - case BTA_HH_API_DISABLE_EVT: - bta_hh_api_disable(); - break; + case BTA_HH_API_DISABLE_EVT: + bta_hh_api_disable(); + break; - case BTA_HH_DISC_CMPL_EVT: /* disable complete */ - bta_hh_disc_cmpl(); - break; + case BTA_HH_DISC_CMPL_EVT: /* disable complete */ + bta_hh_disc_cmpl(); + break; - default: - /* all events processed in state machine need to find corresponding - CB before proceed */ - if (p_msg->event == BTA_HH_API_OPEN_EVT) - { - index = bta_hh_find_cb(((tBTA_HH_API_CONN *)p_msg)->bd_addr); - } - else if (p_msg->event == BTA_HH_API_MAINT_DEV_EVT) - { - /* if add device */ - if (((tBTA_HH_MAINT_DEV *)p_msg)->sub_event == BTA_HH_ADD_DEV_EVT) - { - index = bta_hh_find_cb(((tBTA_HH_MAINT_DEV *)p_msg)->bda); - } - else /* else remove device by handle */ - { - index = bta_hh_dev_handle_to_cb_idx((uint8_t)p_msg->layer_specific); - /* If BT disable is done while the HID device is connected and Link_Key uses unauthenticated combination - * then we can get into a situation where remove_bonding is called with the index set to 0 (without getting - * cleaned up). Only when VIRTUAL_UNPLUG is called do we cleanup the index and make it MAX_KNOWN. - * So if REMOVE_DEVICE is called and in_use is false then we should treat this as a NULL p_cb. Hence we - * force the index to be IDX_INVALID - */ - if ((index != BTA_HH_IDX_INVALID) && - (bta_hh_cb.kdev[index].in_use == false)) { - index = BTA_HH_IDX_INVALID; - } - } - } - else if (p_msg->event == BTA_HH_INT_OPEN_EVT) - { - index = bta_hh_find_cb(((tBTA_HH_CBACK_DATA *)p_msg)->addr); - } - else - index = bta_hh_dev_handle_to_cb_idx((uint8_t)p_msg->layer_specific); - - if (index != BTA_HH_IDX_INVALID) - p_cb = &bta_hh_cb.kdev[index]; + default: + /* all events processed in state machine need to find corresponding + CB before proceed */ + if (p_msg->event == BTA_HH_API_OPEN_EVT) { + index = bta_hh_find_cb(((tBTA_HH_API_CONN*)p_msg)->bd_addr); + } else if (p_msg->event == BTA_HH_API_MAINT_DEV_EVT) { + /* if add device */ + if (((tBTA_HH_MAINT_DEV*)p_msg)->sub_event == BTA_HH_ADD_DEV_EVT) { + index = bta_hh_find_cb(((tBTA_HH_MAINT_DEV*)p_msg)->bda); + } else /* else remove device by handle */ + { + index = bta_hh_dev_handle_to_cb_idx((uint8_t)p_msg->layer_specific); + /* If BT disable is done while the HID device is connected and + * Link_Key uses unauthenticated combination + * then we can get into a situation where remove_bonding is called + * with the index set to 0 (without getting + * cleaned up). Only when VIRTUAL_UNPLUG is called do we cleanup the + * index and make it MAX_KNOWN. + * So if REMOVE_DEVICE is called and in_use is false then we should + * treat this as a NULL p_cb. Hence we + * force the index to be IDX_INVALID + */ + if ((index != BTA_HH_IDX_INVALID) && + (bta_hh_cb.kdev[index].in_use == false)) { + index = BTA_HH_IDX_INVALID; + } + } + } else if (p_msg->event == BTA_HH_INT_OPEN_EVT) { + index = bta_hh_find_cb(((tBTA_HH_CBACK_DATA*)p_msg)->addr); + } else + index = bta_hh_dev_handle_to_cb_idx((uint8_t)p_msg->layer_specific); + + if (index != BTA_HH_IDX_INVALID) p_cb = &bta_hh_cb.kdev[index]; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_hdl_event:: handle = %d dev_cb[%d] ", p_msg->layer_specific, index); + APPL_TRACE_DEBUG("bta_hh_hdl_event:: handle = %d dev_cb[%d] ", + p_msg->layer_specific, index); #endif - bta_hh_sm_execute(p_cb, p_msg->event, (tBTA_HH_DATA *) p_msg); - } - return (true); + bta_hh_sm_execute(p_cb, p_msg->event, (tBTA_HH_DATA*)p_msg); + } + return (true); } /***************************************************************************** @@ -456,53 +432,51 @@ bool bta_hh_hdl_event(BT_HDR *p_msg) * Returns void * ******************************************************************************/ -static const char *bta_hh_evt_code(tBTA_HH_INT_EVT evt_code) -{ - switch(evt_code) - { +static const char* bta_hh_evt_code(tBTA_HH_INT_EVT evt_code) { + switch (evt_code) { case BTA_HH_API_DISABLE_EVT: - return "BTA_HH_API_DISABLE_EVT"; + return "BTA_HH_API_DISABLE_EVT"; case BTA_HH_API_ENABLE_EVT: - return "BTA_HH_API_ENABLE_EVT"; + return "BTA_HH_API_ENABLE_EVT"; case BTA_HH_API_OPEN_EVT: - return "BTA_HH_API_OPEN_EVT"; + return "BTA_HH_API_OPEN_EVT"; case BTA_HH_API_CLOSE_EVT: - return "BTA_HH_API_CLOSE_EVT"; + return "BTA_HH_API_CLOSE_EVT"; case BTA_HH_INT_OPEN_EVT: - return "BTA_HH_INT_OPEN_EVT"; + return "BTA_HH_INT_OPEN_EVT"; case BTA_HH_INT_CLOSE_EVT: - return "BTA_HH_INT_CLOSE_EVT"; + return "BTA_HH_INT_CLOSE_EVT"; case BTA_HH_INT_HANDSK_EVT: - return "BTA_HH_INT_HANDSK_EVT"; + return "BTA_HH_INT_HANDSK_EVT"; case BTA_HH_INT_DATA_EVT: - return "BTA_HH_INT_DATA_EVT"; + return "BTA_HH_INT_DATA_EVT"; case BTA_HH_INT_CTRL_DATA: - return "BTA_HH_INT_CTRL_DATA"; + return "BTA_HH_INT_CTRL_DATA"; case BTA_HH_API_WRITE_DEV_EVT: - return "BTA_HH_API_WRITE_DEV_EVT"; + return "BTA_HH_API_WRITE_DEV_EVT"; case BTA_HH_SDP_CMPL_EVT: - return "BTA_HH_SDP_CMPL_EVT"; + return "BTA_HH_SDP_CMPL_EVT"; case BTA_HH_DISC_CMPL_EVT: - return "BTA_HH_DISC_CMPL_EVT"; + return "BTA_HH_DISC_CMPL_EVT"; case BTA_HH_API_MAINT_DEV_EVT: - return "BTA_HH_API_MAINT_DEV_EVT"; + return "BTA_HH_API_MAINT_DEV_EVT"; case BTA_HH_API_GET_DSCP_EVT: - return "BTA_HH_API_GET_DSCP_EVT"; + return "BTA_HH_API_GET_DSCP_EVT"; case BTA_HH_OPEN_CMPL_EVT: - return "BTA_HH_OPEN_CMPL_EVT"; + return "BTA_HH_OPEN_CMPL_EVT"; #if (BTA_HH_LE_INCLUDED == TRUE) case BTA_HH_GATT_CLOSE_EVT: - return "BTA_HH_GATT_CLOSE_EVT"; + return "BTA_HH_GATT_CLOSE_EVT"; case BTA_HH_GATT_OPEN_EVT: - return "BTA_HH_GATT_OPEN_EVT"; + return "BTA_HH_GATT_OPEN_EVT"; case BTA_HH_START_ENC_EVT: - return "BTA_HH_START_ENC_EVT"; + return "BTA_HH_START_ENC_EVT"; case BTA_HH_ENC_CMPL_EVT: - return "BTA_HH_ENC_CMPL_EVT"; + return "BTA_HH_ENC_CMPL_EVT"; #endif default: - return "unknown HID Host event code"; - } + return "unknown HID Host event code"; + } } /******************************************************************************* @@ -514,27 +488,25 @@ static const char *bta_hh_evt_code(tBTA_HH_INT_EVT evt_code) * Returns void * ******************************************************************************/ -static const char *bta_hh_state_code(tBTA_HH_STATE state_code) -{ - switch (state_code) - { +static const char* bta_hh_state_code(tBTA_HH_STATE state_code) { + switch (state_code) { case BTA_HH_NULL_ST: - return"BTA_HH_NULL_ST"; + return "BTA_HH_NULL_ST"; case BTA_HH_IDLE_ST: - return "BTA_HH_IDLE_ST"; + return "BTA_HH_IDLE_ST"; case BTA_HH_W4_CONN_ST: - return "BTA_HH_W4_CONN_ST"; + return "BTA_HH_W4_CONN_ST"; case BTA_HH_CONN_ST: - return "BTA_HH_CONN_ST"; + return "BTA_HH_CONN_ST"; #if (BTA_HH_LE_INCLUDED == TRUE) case BTA_HH_W4_SEC: - return "BTA_HH_W4_SEC"; + return "BTA_HH_W4_SEC"; #endif default: - return "unknown HID Host state"; - } + return "unknown HID Host state"; + } } -#endif /* Debug Functions */ +#endif /* Debug Functions */ #endif /* BTA_HH_INCLUDED */ diff --git a/system/bta/hh/bta_hh_utils.cc b/system/bta/hh/bta_hh_utils.cc index 7504db2fa22..82600c3332f 100644 --- a/system/bta/hh/bta_hh_utils.cc +++ b/system/bta/hh/bta_hh_utils.cc @@ -20,36 +20,29 @@ #include "bt_target.h" #if (BTA_HH_INCLUDED == TRUE) - #include "bta_hh_int.h" #include "osi/include/osi.h" /* if SSR max latency is not defined by remote device, set the default value as half of the link supervision timeout */ -#define BTA_HH_GET_DEF_SSR_MAX_LAT(x) ((x)>> 1) +#define BTA_HH_GET_DEF_SSR_MAX_LAT(x) ((x) >> 1) /***************************************************************************** * Constants ****************************************************************************/ -#define BTA_HH_KB_CTRL_MASK 0x11 -#define BTA_HH_KB_SHIFT_MASK 0x22 -#define BTA_HH_KB_ALT_MASK 0x44 -#define BTA_HH_KB_GUI_MASK 0x88 - -#define BTA_HH_KB_CAPS_LOCK 0x39 /* caps lock */ -#define BTA_HH_KB_NUM_LOCK 0x53 /* num lock */ +#define BTA_HH_KB_CTRL_MASK 0x11 +#define BTA_HH_KB_SHIFT_MASK 0x22 +#define BTA_HH_KB_ALT_MASK 0x44 +#define BTA_HH_KB_GUI_MASK 0x88 +#define BTA_HH_KB_CAPS_LOCK 0x39 /* caps lock */ +#define BTA_HH_KB_NUM_LOCK 0x53 /* num lock */ -#define BTA_HH_MAX_RPT_CHARS 8 - -static const uint8_t bta_hh_mod_key_mask[BTA_HH_MOD_MAX_KEY] = -{ - BTA_HH_KB_CTRL_MASK, - BTA_HH_KB_SHIFT_MASK, - BTA_HH_KB_ALT_MASK, - BTA_HH_KB_GUI_MASK -}; +#define BTA_HH_MAX_RPT_CHARS 8 +static const uint8_t bta_hh_mod_key_mask[BTA_HH_MOD_MAX_KEY] = { + BTA_HH_KB_CTRL_MASK, BTA_HH_KB_SHIFT_MASK, BTA_HH_KB_ALT_MASK, + BTA_HH_KB_GUI_MASK}; /******************************************************************************* * @@ -61,51 +54,44 @@ static const uint8_t bta_hh_mod_key_mask[BTA_HH_MOD_MAX_KEY] = * Returns void * ******************************************************************************/ -uint8_t bta_hh_find_cb(BD_ADDR bda) -{ - uint8_t xx; - - /* See how many active devices there are. */ - for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) - { - /* check if any active/known devices is a match */ - if ((!bdcmp (bda, bta_hh_cb.kdev[xx].addr) && - bdcmp(bda, bd_addr_null) != 0) ) - { +uint8_t bta_hh_find_cb(BD_ADDR bda) { + uint8_t xx; + + /* See how many active devices there are. */ + for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) { + /* check if any active/known devices is a match */ + if ((!bdcmp(bda, bta_hh_cb.kdev[xx].addr) && + bdcmp(bda, bd_addr_null) != 0)) { #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("found kdev_cb[%d] hid_handle = %d ", xx, - bta_hh_cb.kdev[xx].hid_handle) + APPL_TRACE_DEBUG("found kdev_cb[%d] hid_handle = %d ", xx, + bta_hh_cb.kdev[xx].hid_handle) #endif - return xx; - } + return xx; + } #if (BTA_HH_DEBUG == TRUE) - else - APPL_TRACE_DEBUG("in_use ? [%d] kdev[%d].hid_handle = %d state = [%d]", - bta_hh_cb.kdev[xx].in_use, xx, - bta_hh_cb.kdev[xx].hid_handle, - bta_hh_cb.kdev[xx].state); + else + APPL_TRACE_DEBUG("in_use ? [%d] kdev[%d].hid_handle = %d state = [%d]", + bta_hh_cb.kdev[xx].in_use, xx, + bta_hh_cb.kdev[xx].hid_handle, bta_hh_cb.kdev[xx].state); #endif - } + } - /* if no active device match, find a spot for it */ - for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) - { - if (!bta_hh_cb.kdev[xx].in_use) - { - bdcpy(bta_hh_cb.kdev[xx].addr, bda); - break; - } + /* if no active device match, find a spot for it */ + for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) { + if (!bta_hh_cb.kdev[xx].in_use) { + bdcpy(bta_hh_cb.kdev[xx].addr, bda); + break; } - /* If device list full, report BTA_HH_IDX_INVALID */ + } +/* If device list full, report BTA_HH_IDX_INVALID */ #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_find_cb:: index = %d while max = %d", - xx, BTA_HH_MAX_DEVICE); + APPL_TRACE_DEBUG("bta_hh_find_cb:: index = %d while max = %d", xx, + BTA_HH_MAX_DEVICE); #endif - if (xx == BTA_HH_MAX_DEVICE) - xx = BTA_HH_IDX_INVALID; + if (xx == BTA_HH_MAX_DEVICE) xx = BTA_HH_IDX_INVALID; - return xx; + return xx; } /******************************************************************************* @@ -118,32 +104,30 @@ uint8_t bta_hh_find_cb(BD_ADDR bda) * Returns void * ******************************************************************************/ -void bta_hh_clean_up_kdev(tBTA_HH_DEV_CB *p_cb) -{ - uint8_t index; +void bta_hh_clean_up_kdev(tBTA_HH_DEV_CB* p_cb) { + uint8_t index; - if (p_cb->hid_handle != BTA_HH_INVALID_HANDLE ) - { + if (p_cb->hid_handle != BTA_HH_INVALID_HANDLE) { #if (BTA_HH_LE_INCLUDED == TRUE) - if (p_cb->is_le_device) - bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = BTA_HH_IDX_INVALID; - else + if (p_cb->is_le_device) + bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = + BTA_HH_IDX_INVALID; + else #endif - bta_hh_cb.cb_index[p_cb->hid_handle] = BTA_HH_IDX_INVALID; - } - - /* reset device control block */ - index = p_cb->index; /* Preserve index for this control block */ + bta_hh_cb.cb_index[p_cb->hid_handle] = BTA_HH_IDX_INVALID; + } - /* Free buffer for report descriptor info */ - osi_free_and_reset((void **)&p_cb->dscp_info.descriptor.dsc_list); + /* reset device control block */ + index = p_cb->index; /* Preserve index for this control block */ - memset(p_cb, 0, sizeof(tBTA_HH_DEV_CB)); /* Reset control block */ + /* Free buffer for report descriptor info */ + osi_free_and_reset((void**)&p_cb->dscp_info.descriptor.dsc_list); - p_cb->index = index; /* Restore index for this control block */ - p_cb->state = BTA_HH_IDLE_ST; - p_cb->hid_handle = BTA_HH_INVALID_HANDLE; + memset(p_cb, 0, sizeof(tBTA_HH_DEV_CB)); /* Reset control block */ + p_cb->index = index; /* Restore index for this control block */ + p_cb->state = BTA_HH_IDLE_ST; + p_cb->hid_handle = BTA_HH_INVALID_HANDLE; } /******************************************************************************* * @@ -154,8 +138,8 @@ void bta_hh_clean_up_kdev(tBTA_HH_DEV_CB *p_cb) * Returns void * ******************************************************************************/ -void bta_hh_update_di_info(tBTA_HH_DEV_CB *p_cb, uint16_t vendor_id, uint16_t product_id, - uint16_t version, +void bta_hh_update_di_info(tBTA_HH_DEV_CB* p_cb, uint16_t vendor_id, + uint16_t product_id, uint16_t version, #if (BTA_HH_LE_INCLUDED == TRUE) uint8_t flag) #else @@ -163,14 +147,14 @@ void bta_hh_update_di_info(tBTA_HH_DEV_CB *p_cb, uint16_t vendor_id, uint16_t pr #endif { #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("vendor_id = 0x%2x product_id = 0x%2x version = 0x%2x", - vendor_id, product_id, version); + APPL_TRACE_DEBUG("vendor_id = 0x%2x product_id = 0x%2x version = 0x%2x", + vendor_id, product_id, version); #endif - p_cb->dscp_info.vendor_id = vendor_id; - p_cb->dscp_info.product_id = product_id; - p_cb->dscp_info.version = version; + p_cb->dscp_info.vendor_id = vendor_id; + p_cb->dscp_info.product_id = product_id; + p_cb->dscp_info.version = version; #if (BTA_HH_LE_INCLUDED == TRUE) - p_cb->dscp_info.flag = flag; + p_cb->dscp_info.flag = flag; #endif } /******************************************************************************* @@ -182,40 +166,37 @@ void bta_hh_update_di_info(tBTA_HH_DEV_CB *p_cb, uint16_t vendor_id, uint16_t pr * Returns void * ******************************************************************************/ -void bta_hh_add_device_to_list(tBTA_HH_DEV_CB *p_cb, uint8_t handle, +void bta_hh_add_device_to_list(tBTA_HH_DEV_CB* p_cb, uint8_t handle, uint16_t attr_mask, - tHID_DEV_DSCP_INFO *p_dscp_info, - uint8_t sub_class, - uint16_t ssr_max_latency, - uint16_t ssr_min_tout, - uint8_t app_id) -{ + tHID_DEV_DSCP_INFO* p_dscp_info, + uint8_t sub_class, uint16_t ssr_max_latency, + uint16_t ssr_min_tout, uint8_t app_id) { #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("subclass = 0x%2x", sub_class); + APPL_TRACE_DEBUG("subclass = 0x%2x", sub_class); #endif - p_cb->hid_handle = handle; - p_cb->in_use = true; - p_cb->attr_mask = attr_mask; + p_cb->hid_handle = handle; + p_cb->in_use = true; + p_cb->attr_mask = attr_mask; - p_cb->sub_class = sub_class; - p_cb->app_id = app_id; + p_cb->sub_class = sub_class; + p_cb->app_id = app_id; - p_cb->dscp_info.ssr_max_latency = ssr_max_latency; - p_cb->dscp_info.ssr_min_tout = ssr_min_tout; + p_cb->dscp_info.ssr_max_latency = ssr_max_latency; + p_cb->dscp_info.ssr_min_tout = ssr_min_tout; - /* store report descriptor info */ - if (p_dscp_info) { - osi_free_and_reset((void **)&p_cb->dscp_info.descriptor.dsc_list); + /* store report descriptor info */ + if (p_dscp_info) { + osi_free_and_reset((void**)&p_cb->dscp_info.descriptor.dsc_list); - if (p_dscp_info->dl_len) { - p_cb->dscp_info.descriptor.dsc_list = - (uint8_t *)osi_malloc(p_dscp_info->dl_len); - p_cb->dscp_info.descriptor.dl_len = p_dscp_info->dl_len; - memcpy(p_cb->dscp_info.descriptor.dsc_list, p_dscp_info->dsc_list, - p_dscp_info->dl_len); - } + if (p_dscp_info->dl_len) { + p_cb->dscp_info.descriptor.dsc_list = + (uint8_t*)osi_malloc(p_dscp_info->dl_len); + p_cb->dscp_info.descriptor.dl_len = p_dscp_info->dl_len; + memcpy(p_cb->dscp_info.descriptor.dsc_list, p_dscp_info->dsc_list, + p_dscp_info->dl_len); } + } } /******************************************************************************* @@ -227,29 +208,25 @@ void bta_hh_add_device_to_list(tBTA_HH_DEV_CB *p_cb, uint8_t handle, * Returns * ******************************************************************************/ -bool bta_hh_tod_spt(tBTA_HH_DEV_CB *p_cb,uint8_t sub_class) -{ - uint8_t xx; - uint8_t cod = (sub_class >> 2); /* lower two bits are reserved */ - - for (xx = 0 ; xx < p_bta_hh_cfg->max_devt_spt; xx ++) - { - if (cod == (uint8_t) p_bta_hh_cfg->p_devt_list[xx].tod) - { - p_cb->app_id = p_bta_hh_cfg->p_devt_list[xx].app_id; +bool bta_hh_tod_spt(tBTA_HH_DEV_CB* p_cb, uint8_t sub_class) { + uint8_t xx; + uint8_t cod = (sub_class >> 2); /* lower two bits are reserved */ + + for (xx = 0; xx < p_bta_hh_cfg->max_devt_spt; xx++) { + if (cod == (uint8_t)p_bta_hh_cfg->p_devt_list[xx].tod) { + p_cb->app_id = p_bta_hh_cfg->p_devt_list[xx].app_id; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_EVENT("bta_hh_tod_spt sub_class:0x%x supported", sub_class); + APPL_TRACE_EVENT("bta_hh_tod_spt sub_class:0x%x supported", sub_class); #endif - return true; - } + return true; } + } #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_EVENT("bta_hh_tod_spt sub_class:0x%x NOT supported", sub_class); + APPL_TRACE_EVENT("bta_hh_tod_spt sub_class:0x%x NOT supported", sub_class); #endif - return false; + return false; } - /******************************************************************************* * * Function bta_hh_parse_keybd_rpt @@ -259,92 +236,80 @@ bool bta_hh_tod_spt(tBTA_HH_DEV_CB *p_cb,uint8_t sub_class) * Returns void * ******************************************************************************/ -void bta_hh_parse_keybd_rpt(tBTA_HH_BOOT_RPT *p_kb_data, uint8_t *p_report, - uint16_t report_len) -{ - tBTA_HH_KB_CB *p_kb = &bta_hh_cb.kb_cb; - tBTA_HH_KEYBD_RPT *p_data = &p_kb_data->data_rpt.keybd_rpt; +void bta_hh_parse_keybd_rpt(tBTA_HH_BOOT_RPT* p_kb_data, uint8_t* p_report, + uint16_t report_len) { + tBTA_HH_KB_CB* p_kb = &bta_hh_cb.kb_cb; + tBTA_HH_KEYBD_RPT* p_data = &p_kb_data->data_rpt.keybd_rpt; - uint8_t this_char, ctl_shift; - uint16_t xx, yy, key_idx = 0; - uint8_t this_report[BTA_HH_MAX_RPT_CHARS]; + uint8_t this_char, ctl_shift; + uint16_t xx, yy, key_idx = 0; + uint8_t this_report[BTA_HH_MAX_RPT_CHARS]; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_parse_keybd_rpt: (report=%p, report_len=%d) called", - p_report, report_len); + APPL_TRACE_DEBUG("bta_hh_parse_keybd_rpt: (report=%p, report_len=%d) called", + p_report, report_len); #endif - if (report_len < 2) - return; - - ctl_shift = *p_report++; - report_len--; - - if (report_len > BTA_HH_MAX_RPT_CHARS) - report_len = BTA_HH_MAX_RPT_CHARS; - - memset (this_report, 0, BTA_HH_MAX_RPT_CHARS); - memset (p_data, 0, sizeof(tBTA_HH_KEYBD_RPT)); - memcpy (this_report, p_report, report_len); - - /* Take care of shift, control, GUI and alt, modifier keys */ - for (xx = 0; xx < BTA_HH_MOD_MAX_KEY; xx ++ ) - { - if (ctl_shift & bta_hh_mod_key_mask[xx]) - { - APPL_TRACE_DEBUG("Mod Key[%02x] pressed", bta_hh_mod_key_mask[xx] ); - p_kb->mod_key[xx] = true; - } - else if (p_kb->mod_key[xx]) - { - p_kb->mod_key[xx] = false; - } - /* control key flag is set */ - p_data->mod_key[xx] = p_kb->mod_key[xx]; - } + if (report_len < 2) return; + + ctl_shift = *p_report++; + report_len--; - /***************************************************************************/ - /* First step is to remove all characters we saw in the last report */ - /***************************************************************************/ - for (xx = 0; xx < report_len; xx++) - { - for (yy = 0; yy < BTA_HH_MAX_RPT_CHARS; yy++) - { - if (this_report[xx] == p_kb->last_report[yy]) - { - this_report[xx] = 0; - } - } + if (report_len > BTA_HH_MAX_RPT_CHARS) report_len = BTA_HH_MAX_RPT_CHARS; + + memset(this_report, 0, BTA_HH_MAX_RPT_CHARS); + memset(p_data, 0, sizeof(tBTA_HH_KEYBD_RPT)); + memcpy(this_report, p_report, report_len); + + /* Take care of shift, control, GUI and alt, modifier keys */ + for (xx = 0; xx < BTA_HH_MOD_MAX_KEY; xx++) { + if (ctl_shift & bta_hh_mod_key_mask[xx]) { + APPL_TRACE_DEBUG("Mod Key[%02x] pressed", bta_hh_mod_key_mask[xx]); + p_kb->mod_key[xx] = true; + } else if (p_kb->mod_key[xx]) { + p_kb->mod_key[xx] = false; + } + /* control key flag is set */ + p_data->mod_key[xx] = p_kb->mod_key[xx]; + } + + /***************************************************************************/ + /* First step is to remove all characters we saw in the last report */ + /***************************************************************************/ + for (xx = 0; xx < report_len; xx++) { + for (yy = 0; yy < BTA_HH_MAX_RPT_CHARS; yy++) { + if (this_report[xx] == p_kb->last_report[yy]) { + this_report[xx] = 0; + } } - /***************************************************************************/ - /* Now, process all the characters in the report, up to 6 keycodes */ - /***************************************************************************/ - for (xx = 0; xx < report_len; xx++) - { + } + /***************************************************************************/ + /* Now, process all the characters in the report, up to 6 keycodes */ + /***************************************************************************/ + for (xx = 0; xx < report_len; xx++) { #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("this_char = %02x", this_report[xx]); + APPL_TRACE_DEBUG("this_char = %02x", this_report[xx]); #endif - if ((this_char = this_report[xx]) == 0) - continue; - /* take the key code as the report data */ - if (this_report[xx] == BTA_HH_KB_CAPS_LOCK) - p_kb->caps_lock = p_kb->caps_lock ? false : true; - else if (this_report[xx] == BTA_HH_KB_NUM_LOCK) - p_kb->num_lock = p_kb->num_lock ? false : true; - else - p_data->this_char[key_idx ++] = this_char; + if ((this_char = this_report[xx]) == 0) continue; + /* take the key code as the report data */ + if (this_report[xx] == BTA_HH_KB_CAPS_LOCK) + p_kb->caps_lock = p_kb->caps_lock ? false : true; + else if (this_report[xx] == BTA_HH_KB_NUM_LOCK) + p_kb->num_lock = p_kb->num_lock ? false : true; + else + p_data->this_char[key_idx++] = this_char; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("found keycode %02x ", this_report[xx]); + APPL_TRACE_DEBUG("found keycode %02x ", this_report[xx]); #endif - p_data->caps_lock = p_kb->caps_lock; - p_data->num_lock = p_kb->num_lock; - } + p_data->caps_lock = p_kb->caps_lock; + p_data->num_lock = p_kb->num_lock; + } - memset (p_kb->last_report, 0, BTA_HH_MAX_RPT_CHARS); - memcpy (p_kb->last_report, p_report, report_len); + memset(p_kb->last_report, 0, BTA_HH_MAX_RPT_CHARS); + memcpy(p_kb->last_report, p_report, report_len); - return; + return; } /******************************************************************************* @@ -356,47 +321,44 @@ void bta_hh_parse_keybd_rpt(tBTA_HH_BOOT_RPT *p_kb_data, uint8_t *p_report, * Returns void * ******************************************************************************/ -void bta_hh_parse_mice_rpt(tBTA_HH_BOOT_RPT *p_mice_data, uint8_t *p_report, - uint16_t report_len) -{ - tBTA_HH_MICE_RPT *p_data = &p_mice_data->data_rpt.mice_rpt; +void bta_hh_parse_mice_rpt(tBTA_HH_BOOT_RPT* p_mice_data, uint8_t* p_report, + uint16_t report_len) { + tBTA_HH_MICE_RPT* p_data = &p_mice_data->data_rpt.mice_rpt; #if (BTA_HH_DEBUG == TRUE) - uint8_t xx; + uint8_t xx; - APPL_TRACE_DEBUG("bta_hh_parse_mice_rpt: bta_keybd_rpt_rcvd(report=%p, \ - report_len=%d) called", p_report, report_len); + APPL_TRACE_DEBUG( + "bta_hh_parse_mice_rpt: bta_keybd_rpt_rcvd(report=%p, \ + report_len=%d) called", + p_report, report_len); #endif - if (report_len < 3) - return; + if (report_len < 3) return; - if (report_len > BTA_HH_MAX_RPT_CHARS) - report_len = BTA_HH_MAX_RPT_CHARS; + if (report_len > BTA_HH_MAX_RPT_CHARS) report_len = BTA_HH_MAX_RPT_CHARS; #if (BTA_HH_DEBUG == TRUE) - for (xx = 0; xx < report_len; xx++) - { - APPL_TRACE_DEBUG("this_char = %02x", p_report[xx]); - } + for (xx = 0; xx < report_len; xx++) { + APPL_TRACE_DEBUG("this_char = %02x", p_report[xx]); + } #endif - /* only first bytes lower 3 bits valid */ - p_data->mouse_button = (p_report[0] & 0x07); + /* only first bytes lower 3 bits valid */ + p_data->mouse_button = (p_report[0] & 0x07); - /* x displacement */ - p_data->delta_x = p_report[1]; + /* x displacement */ + p_data->delta_x = p_report[1]; - /* y displacement */ - p_data->delta_y = p_report[2]; + /* y displacement */ + p_data->delta_y = p_report[2]; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("mice button: 0x%2x", p_data->mouse_button); - APPL_TRACE_DEBUG("mice move: x = %d y = %d", p_data->delta_x, - p_data->delta_y ); + APPL_TRACE_DEBUG("mice button: 0x%2x", p_data->mouse_button); + APPL_TRACE_DEBUG("mice move: x = %d y = %d", p_data->delta_x, + p_data->delta_y); #endif - return; - + return; } /******************************************************************************* @@ -408,105 +370,100 @@ void bta_hh_parse_mice_rpt(tBTA_HH_BOOT_RPT *p_mice_data, uint8_t *p_report, * Returns tBTA_HH_STATUS operation status * ******************************************************************************/ -tBTA_HH_STATUS bta_hh_read_ssr_param(BD_ADDR bd_addr, uint16_t *p_max_ssr_lat, uint16_t *p_min_ssr_tout) -{ - tBTA_HH_STATUS status = BTA_HH_ERR; - tBTA_HH_CB *p_cb = &bta_hh_cb; - uint8_t i; - uint16_t ssr_max_latency; - for (i = 0; i < BTA_HH_MAX_KNOWN; i ++) - { - if (memcmp(p_cb->kdev[i].addr, bd_addr, BD_ADDR_LEN) == 0) - { - - /* if remote device does not have HIDSSRHostMaxLatency attribute in SDP, - set SSR max latency default value here. */ - if (p_cb->kdev[i].dscp_info.ssr_max_latency == HID_SSR_PARAM_INVALID) - { - /* The default is calculated as half of link supervision timeout.*/ - - BTM_GetLinkSuperTout(p_cb->kdev[i].addr, &ssr_max_latency) ; - ssr_max_latency = BTA_HH_GET_DEF_SSR_MAX_LAT(ssr_max_latency); - - /* per 1.1 spec, if the newly calculated max latency is greater than - BTA_HH_SSR_MAX_LATENCY_DEF which is 500ms, use BTA_HH_SSR_MAX_LATENCY_DEF */ - if (ssr_max_latency > BTA_HH_SSR_MAX_LATENCY_DEF) - ssr_max_latency = BTA_HH_SSR_MAX_LATENCY_DEF; - - * p_max_ssr_lat = ssr_max_latency; - } - else - * p_max_ssr_lat = p_cb->kdev[i].dscp_info.ssr_max_latency; - - if (p_cb->kdev[i].dscp_info.ssr_min_tout == HID_SSR_PARAM_INVALID) - * p_min_ssr_tout = BTA_HH_SSR_MIN_TOUT_DEF; - else - * p_min_ssr_tout = p_cb->kdev[i].dscp_info.ssr_min_tout; - - status = BTA_HH_OK; - - break; - } +tBTA_HH_STATUS bta_hh_read_ssr_param(BD_ADDR bd_addr, uint16_t* p_max_ssr_lat, + uint16_t* p_min_ssr_tout) { + tBTA_HH_STATUS status = BTA_HH_ERR; + tBTA_HH_CB* p_cb = &bta_hh_cb; + uint8_t i; + uint16_t ssr_max_latency; + for (i = 0; i < BTA_HH_MAX_KNOWN; i++) { + if (memcmp(p_cb->kdev[i].addr, bd_addr, BD_ADDR_LEN) == 0) { + /* if remote device does not have HIDSSRHostMaxLatency attribute in SDP, + set SSR max latency default value here. */ + if (p_cb->kdev[i].dscp_info.ssr_max_latency == HID_SSR_PARAM_INVALID) { + /* The default is calculated as half of link supervision timeout.*/ + + BTM_GetLinkSuperTout(p_cb->kdev[i].addr, &ssr_max_latency); + ssr_max_latency = BTA_HH_GET_DEF_SSR_MAX_LAT(ssr_max_latency); + + /* per 1.1 spec, if the newly calculated max latency is greater than + BTA_HH_SSR_MAX_LATENCY_DEF which is 500ms, use + BTA_HH_SSR_MAX_LATENCY_DEF */ + if (ssr_max_latency > BTA_HH_SSR_MAX_LATENCY_DEF) + ssr_max_latency = BTA_HH_SSR_MAX_LATENCY_DEF; + + *p_max_ssr_lat = ssr_max_latency; + } else + *p_max_ssr_lat = p_cb->kdev[i].dscp_info.ssr_max_latency; + + if (p_cb->kdev[i].dscp_info.ssr_min_tout == HID_SSR_PARAM_INVALID) + *p_min_ssr_tout = BTA_HH_SSR_MIN_TOUT_DEF; + else + *p_min_ssr_tout = p_cb->kdev[i].dscp_info.ssr_min_tout; + + status = BTA_HH_OK; + + break; } + } - return status; + return status; } /******************************************************************************* * * Function bta_hh_cleanup_disable * - * Description when disable finished, cleanup control block and send callback + * Description when disable finished, cleanup control block and send + *callback * * * Returns void * ******************************************************************************/ -void bta_hh_cleanup_disable(tBTA_HH_STATUS status) -{ - uint8_t xx; - /* free buffer in CB holding report descriptors */ - for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx ++) { - osi_free_and_reset((void **)&bta_hh_cb.kdev[xx].dscp_info.descriptor.dsc_list); - } - osi_free_and_reset((void **)&bta_hh_cb.p_disc_db); - - (* bta_hh_cb.p_cback)(BTA_HH_DISABLE_EVT, (tBTA_HH *)&status); - /* all connections are down, no waiting for diconnect */ - memset(&bta_hh_cb, 0, sizeof(tBTA_HH_CB)); +void bta_hh_cleanup_disable(tBTA_HH_STATUS status) { + uint8_t xx; + /* free buffer in CB holding report descriptors */ + for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) { + osi_free_and_reset( + (void**)&bta_hh_cb.kdev[xx].dscp_info.descriptor.dsc_list); + } + osi_free_and_reset((void**)&bta_hh_cb.p_disc_db); + + (*bta_hh_cb.p_cback)(BTA_HH_DISABLE_EVT, (tBTA_HH*)&status); + /* all connections are down, no waiting for diconnect */ + memset(&bta_hh_cb, 0, sizeof(tBTA_HH_CB)); } /******************************************************************************* * * Function bta_hh_dev_handle_to_cb_idx * - * Description convert a HID device handle to the device control block index. + * Description convert a HID device handle to the device control block + *index. * * * Returns uint8_t: index of the device control block. * ******************************************************************************/ -uint8_t bta_hh_dev_handle_to_cb_idx(uint8_t dev_handle) -{ - uint8_t index = BTA_HH_IDX_INVALID; +uint8_t bta_hh_dev_handle_to_cb_idx(uint8_t dev_handle) { + uint8_t index = BTA_HH_IDX_INVALID; #if (BTA_HH_LE_INCLUDED == TRUE) - if (BTA_HH_IS_LE_DEV_HDL(dev_handle)) - { - if (BTA_HH_IS_LE_DEV_HDL_VALID(dev_handle)) - index = bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(dev_handle)]; + if (BTA_HH_IS_LE_DEV_HDL(dev_handle)) { + if (BTA_HH_IS_LE_DEV_HDL_VALID(dev_handle)) + index = bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(dev_handle)]; #if (BTA_HH_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hh_dev_handle_to_cb_idx dev_handle = %d index = %d", dev_handle, index); + APPL_TRACE_DEBUG("bta_hh_dev_handle_to_cb_idx dev_handle = %d index = %d", + dev_handle, index); #endif - } - else + } else #endif - /* regular HID device checking */ - if (dev_handle < BTA_HH_MAX_KNOWN ) - index = bta_hh_cb.cb_index[dev_handle]; - - return index; + /* regular HID device checking */ + if (dev_handle < BTA_HH_MAX_KNOWN) + index = bta_hh_cb.cb_index[dev_handle]; + return index; } #if (BTA_HH_DEBUG == TRUE) /******************************************************************************* @@ -518,22 +475,21 @@ uint8_t bta_hh_dev_handle_to_cb_idx(uint8_t dev_handle) * Returns * ******************************************************************************/ -void bta_hh_trace_dev_db(void) -{ - uint8_t xx; +void bta_hh_trace_dev_db(void) { + uint8_t xx; - APPL_TRACE_DEBUG("bta_hh_trace_dev_db:: Device DB list********************"); + APPL_TRACE_DEBUG("bta_hh_trace_dev_db:: Device DB list********************"); - for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) - { - APPL_TRACE_DEBUG("kdev[%d] in_use[%d] handle[%d] ",xx, - bta_hh_cb.kdev[xx].in_use, bta_hh_cb.kdev[xx].hid_handle); + for (xx = 0; xx < BTA_HH_MAX_DEVICE; xx++) { + APPL_TRACE_DEBUG("kdev[%d] in_use[%d] handle[%d] ", xx, + bta_hh_cb.kdev[xx].in_use, bta_hh_cb.kdev[xx].hid_handle); - APPL_TRACE_DEBUG("\t\t\t attr_mask[%04x] state [%d] sub_class[%02x] index = %d", - bta_hh_cb.kdev[xx].attr_mask, bta_hh_cb.kdev[xx].state, - bta_hh_cb.kdev[xx].sub_class, bta_hh_cb.kdev[xx].index); - } - APPL_TRACE_DEBUG("*********************************************************"); + APPL_TRACE_DEBUG( + "\t\t\t attr_mask[%04x] state [%d] sub_class[%02x] index = %d", + bta_hh_cb.kdev[xx].attr_mask, bta_hh_cb.kdev[xx].state, + bta_hh_cb.kdev[xx].sub_class, bta_hh_cb.kdev[xx].index); + } + APPL_TRACE_DEBUG("*********************************************************"); } #endif #endif /* HL_INCLUDED */ diff --git a/system/bta/hl/bta_hl_act.cc b/system/bta/hl/bta_hl_act.cc index 1d6fa6be426..f96690bf922 100644 --- a/system/bta/hl/bta_hl_act.cc +++ b/system/bta/hl/bta_hl_act.cc @@ -29,24 +29,23 @@ #if (HL_INCLUDED == TRUE) #include "bt_common.h" -#include "sdp_api.h" -#include "bta_sys.h" -#include "port_api.h" -#include "sdp_api.h" #include "bta_hl_api.h" #include "bta_hl_int.h" -#include "utl.h" -#include "mca_defs.h" +#include "bta_sys.h" #include "mca_api.h" +#include "mca_defs.h" #include "osi/include/osi.h" +#include "port_api.h" +#include "sdp_api.h" +#include "utl.h" /***************************************************************************** * Local Function prototypes ****************************************************************************/ #if (BTA_HL_DEBUG == TRUE && BT_TRACE_VERBOSE == TRUE) -static char *bta_hl_mcap_evt_code(uint8_t evt_code); -static char *bta_hl_dch_oper_code(tBTA_HL_DCH_OPER oper_code); -static char *bta_hl_cback_evt_code(uint8_t evt_code); +static char* bta_hl_mcap_evt_code(uint8_t evt_code); +static char* bta_hl_dch_oper_code(tBTA_HL_DCH_OPER oper_code); +static char* bta_hl_cback_evt_code(uint8_t evt_code); #endif static void bta_hl_sdp_cback(uint8_t sdp_op, uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, uint16_t status); @@ -58,19 +57,9 @@ static void bta_hl_sdp_cback4(uint16_t status); static void bta_hl_sdp_cback5(uint16_t status); static void bta_hl_sdp_cback6(uint16_t status); - -static tSDP_DISC_CMPL_CB * const bta_hl_sdp_cback_arr[] = -{ - bta_hl_sdp_cback0, - bta_hl_sdp_cback1, - bta_hl_sdp_cback2, - bta_hl_sdp_cback3, - bta_hl_sdp_cback4, - bta_hl_sdp_cback5, - bta_hl_sdp_cback6 -}; - - +static tSDP_DISC_CMPL_CB* const bta_hl_sdp_cback_arr[] = { + bta_hl_sdp_cback0, bta_hl_sdp_cback1, bta_hl_sdp_cback2, bta_hl_sdp_cback3, + bta_hl_sdp_cback4, bta_hl_sdp_cback5, bta_hl_sdp_cback6}; /******************************************************************************* * @@ -81,31 +70,26 @@ static tSDP_DISC_CMPL_CB * const bta_hl_sdp_cback_arr[] = * Returns void * ******************************************************************************/ -void bta_hl_dch_mca_cong_change(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_CONG_CHG *p_cong_chg = &p_data->mca_evt.mca_data.cong_chg; - tBTA_HL evt_data; +void bta_hl_dch_mca_cong_change(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_CONG_CHG* p_cong_chg = &p_data->mca_evt.mca_data.cong_chg; + tBTA_HL evt_data; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_cong_change mdl_id=%d cong=%d", - p_cong_chg->mdl_id, - p_cong_chg->cong); + APPL_TRACE_DEBUG("bta_hl_dch_mca_cong_change mdl_id=%d cong=%d", + p_cong_chg->mdl_id, p_cong_chg->cong); #endif - evt_data.dch_cong_ind.cong = - p_dcb->cong = p_cong_chg->cong; - evt_data.dch_cong_ind.mdl_handle = p_dcb->mdl_handle; - evt_data.dch_cong_ind.mcl_handle = p_mcb->mcl_handle; - evt_data.dch_cong_ind.app_handle = p_acb->app_handle; + evt_data.dch_cong_ind.cong = p_dcb->cong = p_cong_chg->cong; + evt_data.dch_cong_ind.mdl_handle = p_dcb->mdl_handle; + evt_data.dch_cong_ind.mcl_handle = p_mcb->mcl_handle; + evt_data.dch_cong_ind.app_handle = p_acb->app_handle; - p_acb->p_cback(BTA_HL_CONG_CHG_IND_EVT ,(tBTA_HL *) &evt_data ); + p_acb->p_cback(BTA_HL_CONG_CHG_IND_EVT, (tBTA_HL*)&evt_data); } - - /******************************************************************************* * * Function bta_hl_dch_echo_test @@ -116,24 +100,21 @@ void bta_hl_dch_mca_cong_change(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_id * ******************************************************************************/ void bta_hl_dch_echo_test(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - UNUSED_ATTR tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + UNUSED_ATTR tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_echo_test"); + APPL_TRACE_DEBUG("bta_hl_dch_echo_test"); #endif - p_dcb->echo_oper = BTA_HL_ECHO_OP_CI_GET_ECHO_DATA; - p_dcb->cout_oper |= BTA_HL_CO_GET_ECHO_DATA_MASK; - - bta_hl_co_get_echo_data(p_acb->app_id, p_mcb->mcl_handle, - p_dcb->p_echo_tx_pkt->len, - BTA_HL_GET_BUF_PTR(p_dcb->p_echo_tx_pkt), - BTA_HL_CI_GET_ECHO_DATA_EVT); + p_dcb->echo_oper = BTA_HL_ECHO_OP_CI_GET_ECHO_DATA; + p_dcb->cout_oper |= BTA_HL_CO_GET_ECHO_DATA_MASK; + bta_hl_co_get_echo_data( + p_acb->app_id, p_mcb->mcl_handle, p_dcb->p_echo_tx_pkt->len, + BTA_HL_GET_BUF_PTR(p_dcb->p_echo_tx_pkt), BTA_HL_CI_GET_ECHO_DATA_EVT); } /******************************************************************************* * @@ -145,42 +126,36 @@ void bta_hl_dch_echo_test(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_sdp_init"); + APPL_TRACE_DEBUG("bta_hl_dch_sdp_init"); #endif - if ( p_mcb->sdp_oper == BTA_HL_SDP_OP_NONE) - { - p_mcb->sdp_mdl_idx = mdl_idx; - if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN ) - { - p_mcb->sdp_oper = BTA_HL_SDP_OP_DCH_OPEN_INIT; - - } - else - { - p_mcb->sdp_oper = BTA_HL_SDP_OP_DCH_RECONNECT_INIT; - } + if (p_mcb->sdp_oper == BTA_HL_SDP_OP_NONE) { + p_mcb->sdp_mdl_idx = mdl_idx; + if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN) { + p_mcb->sdp_oper = BTA_HL_SDP_OP_DCH_OPEN_INIT; - if (bta_hl_init_sdp(p_mcb->sdp_oper, app_idx, mcl_idx, mdl_idx) != BTA_HL_STATUS_OK) - { - APPL_TRACE_ERROR("SDP INIT failed"); - p_mcb->sdp_oper = BTA_HL_SDP_OP_NONE; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_FAIL_EVT, p_data); - } + } else { + p_mcb->sdp_oper = BTA_HL_SDP_OP_DCH_RECONNECT_INIT; } - else - { - APPL_TRACE_ERROR("SDP in use"); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_FAIL_EVT, p_data); + + if (bta_hl_init_sdp(p_mcb->sdp_oper, app_idx, mcl_idx, mdl_idx) != + BTA_HL_STATUS_OK) { + APPL_TRACE_ERROR("SDP INIT failed"); + p_mcb->sdp_oper = BTA_HL_SDP_OP_NONE; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_FAIL_EVT, + p_data); } + } else { + APPL_TRACE_ERROR("SDP in use"); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_FAIL_EVT, + p_data); + } } - /******************************************************************************* * * Function bta_hl_dch_close_echo_test @@ -190,36 +165,33 @@ void bta_hl_dch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * Returns void * ******************************************************************************/ -void bta_hl_dch_close_echo_test(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); +void bta_hl_dch_close_echo_test(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_close_echo_test"); + APPL_TRACE_DEBUG("bta_hl_dch_close_echo_test"); #endif - switch (p_dcb->echo_oper) - { - case BTA_HL_ECHO_OP_DCH_CLOSE_CFM: - case BTA_HL_ECHO_OP_OPEN_IND: - case BTA_HL_ECHO_OP_ECHO_PKT: - p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST; - break; - case BTA_HL_ECHO_OP_MDL_CREATE_CFM: - case BTA_HL_ECHO_OP_DCH_OPEN_CFM: - case BTA_HL_ECHO_OP_LOOP_BACK: - default: - break; - } - - if (MCA_CloseReq((tMCA_DL) p_dcb->mdl_handle)!= MCA_SUCCESS) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } + switch (p_dcb->echo_oper) { + case BTA_HL_ECHO_OP_DCH_CLOSE_CFM: + case BTA_HL_ECHO_OP_OPEN_IND: + case BTA_HL_ECHO_OP_ECHO_PKT: + p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST; + break; + case BTA_HL_ECHO_OP_MDL_CREATE_CFM: + case BTA_HL_ECHO_OP_DCH_OPEN_CFM: + case BTA_HL_ECHO_OP_LOOP_BACK: + default: + break; + } + + if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle) != MCA_SUCCESS) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); + } } - /******************************************************************************* * * Function bta_hl_dch_mca_rcv_data @@ -230,61 +202,53 @@ void bta_hl_dch_close_echo_test(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_id * ******************************************************************************/ void bta_hl_dch_mca_rcv_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_rcv_data"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_rcv_data"); #endif - if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) - { - switch ( p_dcb->echo_oper) - { - case BTA_HL_ECHO_OP_ECHO_PKT: - - if (MCA_WriteReq((tMCA_DL) p_dcb->mdl_handle, p_data->mca_rcv_data_evt.p_pkt) != MCA_SUCCESS) - { - osi_free_and_reset((void **)&p_data->mca_rcv_data_evt.p_pkt); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); - } - break; - case BTA_HL_ECHO_OP_LOOP_BACK: - - p_dcb->p_echo_rx_pkt = p_data->mca_rcv_data_evt.p_pkt; - p_dcb->echo_oper = BTA_HL_ECHO_OP_CI_PUT_ECHO_DATA; - p_dcb->cout_oper |= BTA_HL_CO_PUT_ECHO_DATA_MASK; - p_dcb->ci_put_echo_data_status = BTA_HL_STATUS_FAIL; - - bta_hl_co_put_echo_data(p_acb->app_id, p_mcb->mcl_handle, - p_dcb->p_echo_rx_pkt->len, - BTA_HL_GET_BUF_PTR(p_dcb->p_echo_rx_pkt), - BTA_HL_CI_PUT_ECHO_DATA_EVT); - break; - default: - APPL_TRACE_ERROR("Unknonw echo_oper=%d",p_dcb->echo_oper); - break; - } - - } - else - { - p_dcb->cout_oper |= BTA_HL_CO_PUT_RX_DATA_MASK; - p_dcb->p_rx_pkt = p_data->mca_rcv_data_evt.p_pkt; - - bta_hl_co_put_rx_data(p_acb->app_id, p_dcb->mdl_handle, - p_dcb->p_rx_pkt->len, - BTA_HL_GET_BUF_PTR(p_dcb->p_rx_pkt), - BTA_HL_CI_PUT_RX_DATA_EVT); - + if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { + switch (p_dcb->echo_oper) { + case BTA_HL_ECHO_OP_ECHO_PKT: - } + if (MCA_WriteReq((tMCA_DL)p_dcb->mdl_handle, + p_data->mca_rcv_data_evt.p_pkt) != MCA_SUCCESS) { + osi_free_and_reset((void**)&p_data->mca_rcv_data_evt.p_pkt); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); + } + break; + case BTA_HL_ECHO_OP_LOOP_BACK: + + p_dcb->p_echo_rx_pkt = p_data->mca_rcv_data_evt.p_pkt; + p_dcb->echo_oper = BTA_HL_ECHO_OP_CI_PUT_ECHO_DATA; + p_dcb->cout_oper |= BTA_HL_CO_PUT_ECHO_DATA_MASK; + p_dcb->ci_put_echo_data_status = BTA_HL_STATUS_FAIL; + + bta_hl_co_put_echo_data(p_acb->app_id, p_mcb->mcl_handle, + p_dcb->p_echo_rx_pkt->len, + BTA_HL_GET_BUF_PTR(p_dcb->p_echo_rx_pkt), + BTA_HL_CI_PUT_ECHO_DATA_EVT); + break; + default: + APPL_TRACE_ERROR("Unknonw echo_oper=%d", p_dcb->echo_oper); + break; + } + + } else { + p_dcb->cout_oper |= BTA_HL_CO_PUT_RX_DATA_MASK; + p_dcb->p_rx_pkt = p_data->mca_rcv_data_evt.p_pkt; + + bta_hl_co_put_rx_data( + p_acb->app_id, p_dcb->mdl_handle, p_dcb->p_rx_pkt->len, + BTA_HL_GET_BUF_PTR(p_dcb->p_rx_pkt), BTA_HL_CI_PUT_RX_DATA_EVT); + } } - /******************************************************************************* * * Function bta_hl_dch_ci_put_echo_data @@ -295,25 +259,23 @@ void bta_hl_dch_mca_rcv_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * Returns void * ******************************************************************************/ -void bta_hl_dch_ci_put_echo_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); +void bta_hl_dch_ci_put_echo_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_ci_put_echo_data"); + APPL_TRACE_DEBUG("bta_hl_dch_ci_put_echo_data"); #endif - p_dcb->cout_oper &= ~BTA_HL_CO_PUT_ECHO_DATA_MASK; - osi_free_and_reset((void **)&p_dcb->p_echo_rx_pkt); - p_dcb->ci_put_echo_data_status = p_data->ci_get_put_echo_data.status; + p_dcb->cout_oper &= ~BTA_HL_CO_PUT_ECHO_DATA_MASK; + osi_free_and_reset((void**)&p_dcb->p_echo_rx_pkt); + p_dcb->ci_put_echo_data_status = p_data->ci_get_put_echo_data.status; - p_dcb->echo_oper = BTA_HL_ECHO_OP_DCH_CLOSE_CFM; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); + p_dcb->echo_oper = BTA_HL_ECHO_OP_DCH_CLOSE_CFM; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); } - - /******************************************************************************* * * Function bta_hl_dch_ci_get_echo_data @@ -324,36 +286,31 @@ void bta_hl_dch_ci_put_echo_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_i * Returns void * ******************************************************************************/ -void bta_hl_dch_ci_get_echo_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL_STATUS status; +void bta_hl_dch_ci_get_echo_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL_STATUS status; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_ci_get_echo_data"); + APPL_TRACE_DEBUG("bta_hl_dch_ci_get_echo_data"); #endif - p_dcb->cout_oper &= ~BTA_HL_CO_GET_ECHO_DATA_MASK; + p_dcb->cout_oper &= ~BTA_HL_CO_GET_ECHO_DATA_MASK; - if (!p_dcb->abort_oper) - { - status = p_data->ci_get_put_echo_data.status; - if (status == BTA_HL_STATUS_OK) - { - p_dcb->echo_oper = BTA_HL_ECHO_OP_MDL_CREATE_CFM; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_OPEN_EVT, p_data); - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + if (!p_dcb->abort_oper) { + status = p_data->ci_get_put_echo_data.status; + if (status == BTA_HL_STATUS_OK) { + p_dcb->echo_oper = BTA_HL_ECHO_OP_MDL_CREATE_CFM; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_OPEN_EVT, + p_data); + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); } - + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); + } } /******************************************************************************* @@ -366,37 +323,30 @@ void bta_hl_dch_ci_get_echo_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_i * Returns void * ******************************************************************************/ -void bta_hl_dch_ci_put_rx_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL evt_data; +void bta_hl_dch_ci_put_rx_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL evt_data; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_ci_put_rx_data"); + APPL_TRACE_DEBUG("bta_hl_dch_ci_put_rx_data"); #endif - p_dcb->cout_oper &= ~BTA_HL_CO_PUT_RX_DATA_MASK; - osi_free_and_reset((void **)&p_dcb->p_rx_pkt); - bta_hl_build_rcv_data_ind(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_dcb->mdl_handle); - p_acb->p_cback(BTA_HL_DCH_RCV_DATA_IND_EVT,(tBTA_HL *) &evt_data ); - if (p_dcb->close_pending) - { - if (!p_dcb->cout_oper) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, p_data); - } - - } + p_dcb->cout_oper &= ~BTA_HL_CO_PUT_RX_DATA_MASK; + osi_free_and_reset((void**)&p_dcb->p_rx_pkt); + bta_hl_build_rcv_data_ind(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, + p_dcb->mdl_handle); + p_acb->p_cback(BTA_HL_DCH_RCV_DATA_IND_EVT, (tBTA_HL*)&evt_data); + if (p_dcb->close_pending) { + if (!p_dcb->cout_oper) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, + p_data); + } + } } - - /******************************************************************************* * * Function bta_hl_dch_ci_get_tx_data @@ -407,72 +357,56 @@ void bta_hl_dch_ci_put_rx_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx * Returns void * ******************************************************************************/ -void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_RESULT result; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - bool free_buf = false; - bool close_dch = false; - tBTA_HL evt_data; - +void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_RESULT result; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + bool free_buf = false; + bool close_dch = false; + tBTA_HL evt_data; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_ci_get_tx_data"); + APPL_TRACE_DEBUG("bta_hl_dch_ci_get_tx_data"); #endif - p_dcb->cout_oper &= ~BTA_HL_CO_GET_TX_DATA_MASK; + p_dcb->cout_oper &= ~BTA_HL_CO_GET_TX_DATA_MASK; - if (p_dcb->close_pending) - { - status = BTA_HL_STATUS_FAIL; - free_buf = true; + if (p_dcb->close_pending) { + status = BTA_HL_STATUS_FAIL; + free_buf = true; - if (!p_dcb->cout_oper) - { - close_dch = true; - } + if (!p_dcb->cout_oper) { + close_dch = true; } - else - { - if ((result = MCA_WriteReq((tMCA_DL) p_dcb->mdl_handle, p_dcb->p_tx_pkt)) != MCA_SUCCESS) - { - if (result == MCA_BUSY) - { - status = BTA_HL_STATUS_DCH_BUSY; - } - else - { - status = BTA_HL_STATUS_FAIL; - } - free_buf = true; - } - else - { - p_dcb->p_tx_pkt = NULL; - } + } else { + if ((result = MCA_WriteReq((tMCA_DL)p_dcb->mdl_handle, p_dcb->p_tx_pkt)) != + MCA_SUCCESS) { + if (result == MCA_BUSY) { + status = BTA_HL_STATUS_DCH_BUSY; + } else { + status = BTA_HL_STATUS_FAIL; + } + free_buf = true; + } else { + p_dcb->p_tx_pkt = NULL; } + } - if (free_buf) - osi_free_and_reset((void **)&p_dcb->p_tx_pkt); + if (free_buf) osi_free_and_reset((void**)&p_dcb->p_tx_pkt); - bta_hl_build_send_data_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_dcb->mdl_handle, - status); - p_acb->p_cback(BTA_HL_DCH_SEND_DATA_CFM_EVT,(tBTA_HL *) &evt_data ); + bta_hl_build_send_data_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, + p_dcb->mdl_handle, status); + p_acb->p_cback(BTA_HL_DCH_SEND_DATA_CFM_EVT, (tBTA_HL*)&evt_data); - if (close_dch) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, p_data); - } + if (close_dch) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, + p_data); + } } - /******************************************************************************* * * Function bta_hl_dch_send_data @@ -483,50 +417,39 @@ void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx * ******************************************************************************/ void bta_hl_dch_send_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL evt_data; - bool success = true; + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL evt_data; + bool success = true; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_send_data"); + APPL_TRACE_DEBUG("bta_hl_dch_send_data"); #endif - if (!(p_dcb->cout_oper & BTA_HL_CO_GET_TX_DATA_MASK)) - { - // p_dcb->chnl_cfg.fcs may be BTA_HL_MCA_USE_FCS (0x11) or BTA_HL_MCA_NO_FCS (0x10) or BTA_HL_DEFAULT_SOURCE_FCS (1) - bool fcs_use = (bool) (p_dcb->chnl_cfg.fcs & BTA_HL_MCA_FCS_USE_MASK); - if ((p_dcb->p_tx_pkt = bta_hl_get_buf(p_data->api_send_data.pkt_size, fcs_use)) != NULL) - { - bta_hl_co_get_tx_data( p_acb->app_id, - p_dcb->mdl_handle, - p_data->api_send_data.pkt_size, - BTA_HL_GET_BUF_PTR(p_dcb->p_tx_pkt), - BTA_HL_CI_GET_TX_DATA_EVT); - p_dcb->cout_oper |= BTA_HL_CO_GET_TX_DATA_MASK; - } - else - { - success = false; - } - } - else - { - success = false; + if (!(p_dcb->cout_oper & BTA_HL_CO_GET_TX_DATA_MASK)) { + // p_dcb->chnl_cfg.fcs may be BTA_HL_MCA_USE_FCS (0x11) or BTA_HL_MCA_NO_FCS + // (0x10) or BTA_HL_DEFAULT_SOURCE_FCS (1) + bool fcs_use = (bool)(p_dcb->chnl_cfg.fcs & BTA_HL_MCA_FCS_USE_MASK); + if ((p_dcb->p_tx_pkt = + bta_hl_get_buf(p_data->api_send_data.pkt_size, fcs_use)) != NULL) { + bta_hl_co_get_tx_data( + p_acb->app_id, p_dcb->mdl_handle, p_data->api_send_data.pkt_size, + BTA_HL_GET_BUF_PTR(p_dcb->p_tx_pkt), BTA_HL_CI_GET_TX_DATA_EVT); + p_dcb->cout_oper |= BTA_HL_CO_GET_TX_DATA_MASK; + } else { + success = false; } + } else { + success = false; + } - if (!success) - { - bta_hl_build_send_data_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_dcb->mdl_handle, - BTA_HL_STATUS_FAIL); - p_acb->p_cback(BTA_HL_DCH_SEND_DATA_CFM_EVT,(tBTA_HL *) &evt_data ); - } + if (!success) { + bta_hl_build_send_data_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, + p_dcb->mdl_handle, BTA_HL_STATUS_FAIL); + p_acb->p_cback(BTA_HL_DCH_SEND_DATA_CFM_EVT, (tBTA_HL*)&evt_data); + } } /******************************************************************************* @@ -539,188 +462,151 @@ void bta_hl_dch_send_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL evt_data; - tBTA_HL_EVT event = 0; - bool send_evt=true; - tBTA_HL_STATUS status; + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL evt_data; + tBTA_HL_EVT event = 0; + bool send_evt = true; + tBTA_HL_STATUS status; #if (BTA_HL_DEBUG == TRUE) #if (BT_TRACE_VERBOSE == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_close_cmpl dch oper=%s", bta_hl_dch_oper_code(p_dcb->dch_oper)); + APPL_TRACE_DEBUG("bta_hl_dch_close_cmpl dch oper=%s", + bta_hl_dch_oper_code(p_dcb->dch_oper)); #else - APPL_TRACE_DEBUG("bta_hl_dch_close_cmpl dch oper=%d", p_dcb->dch_oper); + APPL_TRACE_DEBUG("bta_hl_dch_close_cmpl dch oper=%d", p_dcb->dch_oper); #endif #endif - switch (p_dcb->dch_oper) - { - case BTA_HL_DCH_OP_LOCAL_OPEN: - case BTA_HL_DCH_OP_LOCAL_RECONNECT: - - if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) - { - bta_hl_build_abort_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - BTA_HL_STATUS_OK); - event = BTA_HL_DCH_ABORT_CFM_EVT; - } - else if (p_dcb->abort_oper & BTA_HL_ABORT_REMOTE_MASK ) - { - bta_hl_build_abort_ind(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle); - event = BTA_HL_DCH_ABORT_IND_EVT; - } - else - { - bta_hl_build_dch_open_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - BTA_HL_INVALID_MDL_HANDLE, - 0,0,0,0,0, BTA_HL_STATUS_FAIL); - event = BTA_HL_DCH_OPEN_CFM_EVT; - if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT) - { - event = BTA_HL_DCH_RECONNECT_CFM_EVT; - } - } - break; - - case BTA_HL_DCH_OP_LOCAL_CLOSE: - case BTA_HL_DCH_OP_REMOTE_DELETE: - case BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT: - case BTA_HL_DCH_OP_NONE: - - bta_hl_build_dch_close_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_dcb->mdl_handle, - BTA_HL_STATUS_OK); - event = BTA_HL_DCH_CLOSE_CFM_EVT; - break; - - case BTA_HL_DCH_OP_REMOTE_CLOSE: - bta_hl_build_dch_close_ind(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_dcb->mdl_handle, - p_dcb->intentional_close); - event = BTA_HL_DCH_CLOSE_IND_EVT; - break; - - case BTA_HL_DCH_OP_REMOTE_OPEN: - - if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) - { - bta_hl_build_abort_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - BTA_HL_STATUS_OK); - event = BTA_HL_DCH_ABORT_CFM_EVT; - } - else if (p_dcb->abort_oper & BTA_HL_ABORT_REMOTE_MASK ) - { - bta_hl_build_abort_ind(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle); - event = BTA_HL_DCH_ABORT_IND_EVT; - } - else - { - bta_hl_build_dch_close_ind(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_dcb->mdl_handle, - p_dcb->intentional_close); - event = BTA_HL_DCH_CLOSE_IND_EVT; - } - break; - - case BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST: - /* this is normal echo test close */ - case BTA_HL_DCH_OP_REMOTE_CREATE: - case BTA_HL_DCH_OP_REMOTE_RECONNECT: - send_evt=false; - break; - - default: + switch (p_dcb->dch_oper) { + case BTA_HL_DCH_OP_LOCAL_OPEN: + case BTA_HL_DCH_OP_LOCAL_RECONNECT: + + if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) { + bta_hl_build_abort_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, + BTA_HL_STATUS_OK); + event = BTA_HL_DCH_ABORT_CFM_EVT; + } else if (p_dcb->abort_oper & BTA_HL_ABORT_REMOTE_MASK) { + bta_hl_build_abort_ind(&evt_data, p_acb->app_handle, p_mcb->mcl_handle); + event = BTA_HL_DCH_ABORT_IND_EVT; + } else { + bta_hl_build_dch_open_cfm(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, BTA_HL_INVALID_MDL_HANDLE, + 0, 0, 0, 0, 0, BTA_HL_STATUS_FAIL); + event = BTA_HL_DCH_OPEN_CFM_EVT; + if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT) { + event = BTA_HL_DCH_RECONNECT_CFM_EVT; + } + } + break; + + case BTA_HL_DCH_OP_LOCAL_CLOSE: + case BTA_HL_DCH_OP_REMOTE_DELETE: + case BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT: + case BTA_HL_DCH_OP_NONE: + + bta_hl_build_dch_close_cfm(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, p_dcb->mdl_handle, + BTA_HL_STATUS_OK); + event = BTA_HL_DCH_CLOSE_CFM_EVT; + break; + + case BTA_HL_DCH_OP_REMOTE_CLOSE: + bta_hl_build_dch_close_ind(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, p_dcb->mdl_handle, + p_dcb->intentional_close); + event = BTA_HL_DCH_CLOSE_IND_EVT; + break; + + case BTA_HL_DCH_OP_REMOTE_OPEN: + + if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) { + bta_hl_build_abort_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, + BTA_HL_STATUS_OK); + event = BTA_HL_DCH_ABORT_CFM_EVT; + } else if (p_dcb->abort_oper & BTA_HL_ABORT_REMOTE_MASK) { + bta_hl_build_abort_ind(&evt_data, p_acb->app_handle, p_mcb->mcl_handle); + event = BTA_HL_DCH_ABORT_IND_EVT; + } else { + bta_hl_build_dch_close_ind(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, p_dcb->mdl_handle, + p_dcb->intentional_close); + event = BTA_HL_DCH_CLOSE_IND_EVT; + } + break; + + case BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST: + /* this is normal echo test close */ + case BTA_HL_DCH_OP_REMOTE_CREATE: + case BTA_HL_DCH_OP_REMOTE_RECONNECT: + send_evt = false; + break; + + default: #if (BTA_HL_DEBUG == TRUE) #if (BT_TRACE_VERBOSE == TRUE) - APPL_TRACE_ERROR("DCH operation not found oper=%s", bta_hl_dch_oper_code(p_dcb->dch_oper)); + APPL_TRACE_ERROR("DCH operation not found oper=%s", + bta_hl_dch_oper_code(p_dcb->dch_oper)); #else - APPL_TRACE_ERROR("DCH operation not found oper=%d", p_dcb->dch_oper); + APPL_TRACE_ERROR("DCH operation not found oper=%d", p_dcb->dch_oper); #endif #endif - send_evt=false; - break; - } + send_evt = false; + break; + } + + if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { + p_mcb->echo_test = false; + send_evt = false; + + if (p_dcb->dch_oper != BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST) { + switch (p_dcb->echo_oper) { + case BTA_HL_ECHO_OP_CI_GET_ECHO_DATA: + case BTA_HL_ECHO_OP_SDP_INIT: + case BTA_HL_ECHO_OP_MDL_CREATE_CFM: + case BTA_HL_ECHO_OP_DCH_OPEN_CFM: + case BTA_HL_ECHO_OP_LOOP_BACK: - if ( p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID ) - { - p_mcb->echo_test = false; - send_evt=false; - - if ( p_dcb->dch_oper != BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST) - { - switch (p_dcb->echo_oper) - { - case BTA_HL_ECHO_OP_CI_GET_ECHO_DATA: - case BTA_HL_ECHO_OP_SDP_INIT: - case BTA_HL_ECHO_OP_MDL_CREATE_CFM: - case BTA_HL_ECHO_OP_DCH_OPEN_CFM: - case BTA_HL_ECHO_OP_LOOP_BACK: - - status = BTA_HL_STATUS_FAIL; - send_evt = true; - break; - case BTA_HL_ECHO_OP_OPEN_IND: - case BTA_HL_ECHO_OP_ECHO_PKT: - break; - default: - APPL_TRACE_ERROR("Invalid echo_oper=%d", p_dcb->echo_oper); - break; - } - } - else - { - status = p_dcb->ci_put_echo_data_status; - send_evt = true; - } + status = BTA_HL_STATUS_FAIL; + send_evt = true; + break; + case BTA_HL_ECHO_OP_OPEN_IND: + case BTA_HL_ECHO_OP_ECHO_PKT: + break; + default: + APPL_TRACE_ERROR("Invalid echo_oper=%d", p_dcb->echo_oper); + break; + } + } else { + status = p_dcb->ci_put_echo_data_status; + send_evt = true; + } - if (send_evt) - { - bta_hl_build_echo_test_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - status); - event = BTA_HL_DCH_ECHO_TEST_CFM_EVT; - } + if (send_evt) { + bta_hl_build_echo_test_cfm(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, status); + event = BTA_HL_DCH_ECHO_TEST_CFM_EVT; } + } - bta_hl_clean_mdl_cb(app_idx, mcl_idx, mdl_idx); + bta_hl_clean_mdl_cb(app_idx, mcl_idx, mdl_idx); - if (send_evt) - { - if (p_acb->p_cback) - { + if (send_evt) { + if (p_acb->p_cback) { #if (BTA_HL_DEBUG == TRUE) #if (BT_TRACE_VERBOSE == TRUE) - APPL_TRACE_DEBUG("Send Event: %s", bta_hl_cback_evt_code(event)); + APPL_TRACE_DEBUG("Send Event: %s", bta_hl_cback_evt_code(event)); #else - APPL_TRACE_DEBUG("Send Event: 0x%02x", event); + APPL_TRACE_DEBUG("Send Event: 0x%02x", event); #endif #endif - p_acb->p_cback(event,(tBTA_HL *) &evt_data ); - } + p_acb->p_cback(event, (tBTA_HL*)&evt_data); } - /* check cch close is in progress or not */ - bta_hl_check_cch_close(app_idx, mcl_idx, p_data, false); + } + /* check cch close is in progress or not */ + bta_hl_check_cch_close(app_idx, mcl_idx, p_data, false); } /******************************************************************************* * @@ -732,37 +618,33 @@ void bta_hl_dch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_mca_close_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL_DATA* p_data) { + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) #if (BT_TRACE_VERBOSE == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_close_ind dch oper=%s", bta_hl_dch_oper_code(p_dcb->dch_oper)); + APPL_TRACE_DEBUG("bta_hl_dch_mca_close_ind dch oper=%s", + bta_hl_dch_oper_code(p_dcb->dch_oper)); #else - APPL_TRACE_DEBUG("bta_hl_dch_mca_close_ind dch oper=%d", p_dcb->dch_oper); + APPL_TRACE_DEBUG("bta_hl_dch_mca_close_ind dch oper=%d", p_dcb->dch_oper); #endif #endif - p_dcb->intentional_close = false; - if (p_data->mca_evt.mca_data.close_ind.reason == L2CAP_DISC_OK) - { - p_dcb->intentional_close = true; - } - - if (!p_dcb->cout_oper) - { - if ((p_dcb->dch_oper != BTA_HL_DCH_OP_REMOTE_OPEN) && - (p_dcb->dch_oper != BTA_HL_DCH_OP_REMOTE_RECONNECT)) - { - p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_CLOSE; - } - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - else - { - p_dcb->close_pending = true; - } + p_dcb->intentional_close = false; + if (p_data->mca_evt.mca_data.close_ind.reason == L2CAP_DISC_OK) { + p_dcb->intentional_close = true; + } + + if (!p_dcb->cout_oper) { + if ((p_dcb->dch_oper != BTA_HL_DCH_OP_REMOTE_OPEN) && + (p_dcb->dch_oper != BTA_HL_DCH_OP_REMOTE_RECONNECT)) { + p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_CLOSE; + } + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); + } else { + p_dcb->close_pending = true; + } } /******************************************************************************* @@ -775,41 +657,40 @@ void bta_hl_dch_mca_close_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_mca_close_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - + tBTA_HL_DATA* p_data) { + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) #if (BT_TRACE_VERBOSE == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_close_cfm dch_oper=%s", bta_hl_dch_oper_code(p_dcb->dch_oper) ); + APPL_TRACE_DEBUG("bta_hl_dch_mca_close_cfm dch_oper=%s", + bta_hl_dch_oper_code(p_dcb->dch_oper)); #else - APPL_TRACE_DEBUG("bta_hl_dch_mca_close_cfm dch_oper=%d", p_dcb->dch_oper); + APPL_TRACE_DEBUG("bta_hl_dch_mca_close_cfm dch_oper=%d", p_dcb->dch_oper); #endif #endif - switch (p_dcb->dch_oper) - { - case BTA_HL_DCH_OP_LOCAL_CLOSE: - case BTA_HL_DCH_OP_LOCAL_OPEN: - case BTA_HL_DCH_OP_LOCAL_RECONNECT: - case BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST: - case BTA_HL_DCH_OP_REMOTE_DELETE: - case BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT: - case BTA_HL_DCH_OP_NONE: - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - break; - default: + switch (p_dcb->dch_oper) { + case BTA_HL_DCH_OP_LOCAL_CLOSE: + case BTA_HL_DCH_OP_LOCAL_OPEN: + case BTA_HL_DCH_OP_LOCAL_RECONNECT: + case BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST: + case BTA_HL_DCH_OP_REMOTE_DELETE: + case BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT: + case BTA_HL_DCH_OP_NONE: + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + break; + default: #if (BTA_HL_DEBUG == TRUE) #if (BT_TRACE_VERBOSE == TRUE) - APPL_TRACE_ERROR("Invalid dch_oper=%s for close cfm", bta_hl_dch_oper_code(p_dcb->dch_oper) ); + APPL_TRACE_ERROR("Invalid dch_oper=%s for close cfm", + bta_hl_dch_oper_code(p_dcb->dch_oper)); #else - APPL_TRACE_ERROR("Invalid dch_oper=%d for close cfm", p_dcb->dch_oper); + APPL_TRACE_ERROR("Invalid dch_oper=%d for close cfm", p_dcb->dch_oper); #endif #endif - break; - } - + break; + } } /******************************************************************************* @@ -822,47 +703,36 @@ void bta_hl_dch_mca_close_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_mca_close(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - tBTA_HL evt_data; + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + tBTA_HL evt_data; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_close"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_close"); #endif - if (!p_dcb->cout_oper) - { - p_dcb->close_pending = false; - if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle)== MCA_SUCCESS) - { - p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE; - } - else - { - status = BTA_HL_STATUS_FAIL; - } - - if ((status != BTA_HL_STATUS_OK) && - (p_mcb->cch_close_dch_oper != BTA_HL_CCH_CLOSE_OP_DCH_CLOSE)) - { - bta_hl_build_dch_close_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_data->api_dch_close.mdl_handle, - status); - p_acb->p_cback(BTA_HL_DCH_CLOSE_CFM_EVT,(tBTA_HL *) &evt_data ); - } + if (!p_dcb->cout_oper) { + p_dcb->close_pending = false; + if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle) == MCA_SUCCESS) { + p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE; + } else { + status = BTA_HL_STATUS_FAIL; } - else - { - p_dcb->close_pending = true; + + if ((status != BTA_HL_STATUS_OK) && + (p_mcb->cch_close_dch_oper != BTA_HL_CCH_CLOSE_OP_DCH_CLOSE)) { + bta_hl_build_dch_close_cfm(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, + p_data->api_dch_close.mdl_handle, status); + p_acb->p_cback(BTA_HL_DCH_CLOSE_CFM_EVT, (tBTA_HL*)&evt_data); } + } else { + p_dcb->close_pending = true; + } } - /******************************************************************************* * * Function bta_hl_dch_mca_open_ind @@ -873,101 +743,81 @@ void bta_hl_dch_mca_close(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_mca_open_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_DL_OPEN *p_open_ind = &p_data->mca_evt.mca_data.open_ind; - tBTA_HL evt_data; - tBTA_HL_EVT event; - uint8_t old_dch_oper = BTA_HL_DCH_OP_NONE; - bool send_event = false; - + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_DL_OPEN* p_open_ind = &p_data->mca_evt.mca_data.open_ind; + tBTA_HL evt_data; + tBTA_HL_EVT event; + uint8_t old_dch_oper = BTA_HL_DCH_OP_NONE; + bool send_event = false; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_open_ind"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_open_ind"); #endif - if ((p_dcb->dch_oper == BTA_HL_DCH_OP_REMOTE_OPEN) || - (p_dcb->dch_oper == BTA_HL_DCH_OP_REMOTE_RECONNECT) ) - { - p_dcb->mdl_handle = (tBTA_HL_MDL_HANDLE) p_open_ind->mdl; - p_dcb->mtu = p_open_ind->mtu; - - evt_data.dch_open_ind.mdl_handle = p_dcb->mdl_handle; - evt_data.dch_open_ind.mcl_handle = p_mcb->mcl_handle; - evt_data.dch_open_ind.app_handle = p_acb->app_handle; - - evt_data.dch_open_ind.local_mdep_id = p_dcb->local_mdep_id; - evt_data.dch_open_ind.mdl_id = p_dcb->mdl_id; - evt_data.dch_open_ind.mtu = p_dcb->mtu; - - if ( p_dcb->chnl_cfg.fcr_opt.mode == L2CAP_FCR_ERTM_MODE ) - { - evt_data.dch_open_ind.dch_mode = BTA_HL_DCH_MODE_RELIABLE; - if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx)) - { - p_dcb->is_the_first_reliable = true; - } - } - else - { - evt_data.dch_open_ind.dch_mode = BTA_HL_DCH_MODE_STREAMING; - } - evt_data.dch_open_ind.first_reliable = p_dcb->is_the_first_reliable ; - - old_dch_oper = p_dcb->dch_oper; - p_dcb->dch_oper = BTA_HL_DCH_OP_NONE; - - + if ((p_dcb->dch_oper == BTA_HL_DCH_OP_REMOTE_OPEN) || + (p_dcb->dch_oper == BTA_HL_DCH_OP_REMOTE_RECONNECT)) { + p_dcb->mdl_handle = (tBTA_HL_MDL_HANDLE)p_open_ind->mdl; + p_dcb->mtu = p_open_ind->mtu; + + evt_data.dch_open_ind.mdl_handle = p_dcb->mdl_handle; + evt_data.dch_open_ind.mcl_handle = p_mcb->mcl_handle; + evt_data.dch_open_ind.app_handle = p_acb->app_handle; + + evt_data.dch_open_ind.local_mdep_id = p_dcb->local_mdep_id; + evt_data.dch_open_ind.mdl_id = p_dcb->mdl_id; + evt_data.dch_open_ind.mtu = p_dcb->mtu; + + if (p_dcb->chnl_cfg.fcr_opt.mode == L2CAP_FCR_ERTM_MODE) { + evt_data.dch_open_ind.dch_mode = BTA_HL_DCH_MODE_RELIABLE; + if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx)) { + p_dcb->is_the_first_reliable = true; + } + } else { + evt_data.dch_open_ind.dch_mode = BTA_HL_DCH_MODE_STREAMING; } + evt_data.dch_open_ind.first_reliable = p_dcb->is_the_first_reliable; - switch (old_dch_oper) - { - case BTA_HL_DCH_OP_REMOTE_OPEN: - - p_dcb->dch_mode = evt_data.dch_open_ind.dch_mode; - if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) - { - bta_hl_save_mdl_cfg(app_idx, mcl_idx,mdl_idx); - event= BTA_HL_DCH_OPEN_IND_EVT; - send_event= true; - } - else - { - p_dcb->echo_oper = BTA_HL_ECHO_OP_ECHO_PKT; - } + old_dch_oper = p_dcb->dch_oper; + p_dcb->dch_oper = BTA_HL_DCH_OP_NONE; + } - break; + switch (old_dch_oper) { + case BTA_HL_DCH_OP_REMOTE_OPEN: - case BTA_HL_DCH_OP_REMOTE_RECONNECT: + p_dcb->dch_mode = evt_data.dch_open_ind.dch_mode; + if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) { + bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); + event = BTA_HL_DCH_OPEN_IND_EVT; + send_event = true; + } else { + p_dcb->echo_oper = BTA_HL_ECHO_OP_ECHO_PKT; + } - if (bta_hl_validate_chan_cfg(app_idx, mcl_idx, mdl_idx)) - { - bta_hl_save_mdl_cfg(app_idx, mcl_idx,mdl_idx); - event= BTA_HL_DCH_RECONNECT_IND_EVT; - send_event= true; - } - else - { - if (MCA_CloseReq((tMCA_DL) p_dcb->mdl_handle) == MCA_SUCCESS) - { - p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT; - } - else - { - APPL_TRACE_ERROR("Unabel to close DCH for reconnect cfg mismatch"); - } - } - break; - default: - break; - } + break; - if (send_event) - { - p_acb->p_cback(event ,(tBTA_HL *) &evt_data ); - } + case BTA_HL_DCH_OP_REMOTE_RECONNECT: + + if (bta_hl_validate_chan_cfg(app_idx, mcl_idx, mdl_idx)) { + bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); + event = BTA_HL_DCH_RECONNECT_IND_EVT; + send_event = true; + } else { + if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle) == MCA_SUCCESS) { + p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT; + } else { + APPL_TRACE_ERROR("Unabel to close DCH for reconnect cfg mismatch"); + } + } + break; + default: + break; + } + + if (send_event) { + p_acb->p_cback(event, (tBTA_HL*)&evt_data); + } } /******************************************************************************* @@ -980,117 +830,91 @@ void bta_hl_dch_mca_open_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_mca_open_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_DL_OPEN *p_open_cfm = &p_data->mca_evt.mca_data.open_cfm; - tBTA_HL evt_data; - tBTA_HL_EVT event; - uint8_t old_dch_oper = BTA_HL_DCH_OP_NONE; - tBTA_HL_DCH_MODE dch_mode = BTA_HL_DCH_MODE_STREAMING; - bool send_event = false; - + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_DL_OPEN* p_open_cfm = &p_data->mca_evt.mca_data.open_cfm; + tBTA_HL evt_data; + tBTA_HL_EVT event; + uint8_t old_dch_oper = BTA_HL_DCH_OP_NONE; + tBTA_HL_DCH_MODE dch_mode = BTA_HL_DCH_MODE_STREAMING; + bool send_event = false; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_open_cfm"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_open_cfm"); #endif - if ((p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN) || - (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT)) - { - p_dcb->mdl_handle = (tBTA_HL_MDL_HANDLE) p_open_cfm->mdl; - p_dcb->mtu = p_open_cfm->mtu; - - /*todo verify dch_mode, mtu and fcs for reconnect */ - if ( p_dcb->chnl_cfg.fcr_opt.mode == L2CAP_FCR_ERTM_MODE ) - { - dch_mode = BTA_HL_DCH_MODE_RELIABLE; - } + if ((p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN) || + (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT)) { + p_dcb->mdl_handle = (tBTA_HL_MDL_HANDLE)p_open_cfm->mdl; + p_dcb->mtu = p_open_cfm->mtu; - if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) - { - if (dch_mode == BTA_HL_DCH_MODE_RELIABLE ) - { - if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx)) - { - p_dcb->is_the_first_reliable = true; - } - } - } - - bta_hl_build_dch_open_cfm(&evt_data, p_acb->app_handle, - p_mcb->mcl_handle, - p_dcb->mdl_handle, - p_dcb->local_mdep_id, - p_dcb->mdl_id, dch_mode, - p_dcb->is_the_first_reliable, - p_dcb->mtu, - BTA_HL_STATUS_OK); - - old_dch_oper = p_dcb->dch_oper; - p_dcb->dch_oper = BTA_HL_DCH_OP_NONE; + /*todo verify dch_mode, mtu and fcs for reconnect */ + if (p_dcb->chnl_cfg.fcr_opt.mode == L2CAP_FCR_ERTM_MODE) { + dch_mode = BTA_HL_DCH_MODE_RELIABLE; } - else - { - APPL_TRACE_ERROR("Error dch oper =%d", p_dcb->dch_oper); - return; - } - - switch (old_dch_oper) - { - case BTA_HL_DCH_OP_LOCAL_OPEN: - - p_dcb->dch_mode = dch_mode; - if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) - { - bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); - event= BTA_HL_DCH_OPEN_CFM_EVT; - send_event= true; - } - else - { - p_dcb->echo_oper = BTA_HL_ECHO_OP_LOOP_BACK; - if (MCA_WriteReq((tMCA_DL) p_dcb->mdl_handle, p_dcb->p_echo_tx_pkt)!= MCA_SUCCESS) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); - } - else - { - p_dcb->p_echo_tx_pkt = NULL; - } - } - break; - - case BTA_HL_DCH_OP_LOCAL_RECONNECT: - if (bta_hl_validate_chan_cfg(app_idx, mcl_idx, mdl_idx)) - { - bta_hl_save_mdl_cfg(app_idx, mcl_idx,mdl_idx); - event= BTA_HL_DCH_RECONNECT_CFM_EVT; - send_event= true; - } - else - { - if (MCA_CloseReq((tMCA_DL) p_dcb->mdl_handle) == MCA_SUCCESS) - { - p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT; - } - else - { - APPL_TRACE_ERROR("Unabel to close DCH for reconnect cfg mismatch"); - } - } - break; - default: - break; - } + if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) { + if (dch_mode == BTA_HL_DCH_MODE_RELIABLE) { + if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx)) { + p_dcb->is_the_first_reliable = true; + } + } + } + + bta_hl_build_dch_open_cfm( + &evt_data, p_acb->app_handle, p_mcb->mcl_handle, p_dcb->mdl_handle, + p_dcb->local_mdep_id, p_dcb->mdl_id, dch_mode, + p_dcb->is_the_first_reliable, p_dcb->mtu, BTA_HL_STATUS_OK); + + old_dch_oper = p_dcb->dch_oper; + p_dcb->dch_oper = BTA_HL_DCH_OP_NONE; + } else { + APPL_TRACE_ERROR("Error dch oper =%d", p_dcb->dch_oper); + return; + } + + switch (old_dch_oper) { + case BTA_HL_DCH_OP_LOCAL_OPEN: + + p_dcb->dch_mode = dch_mode; + if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) { + bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); + event = BTA_HL_DCH_OPEN_CFM_EVT; + send_event = true; + } else { + p_dcb->echo_oper = BTA_HL_ECHO_OP_LOOP_BACK; + if (MCA_WriteReq((tMCA_DL)p_dcb->mdl_handle, p_dcb->p_echo_tx_pkt) != + MCA_SUCCESS) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, p_data); + } else { + p_dcb->p_echo_tx_pkt = NULL; + } + } + break; + + case BTA_HL_DCH_OP_LOCAL_RECONNECT: + + if (bta_hl_validate_chan_cfg(app_idx, mcl_idx, mdl_idx)) { + bta_hl_save_mdl_cfg(app_idx, mcl_idx, mdl_idx); + event = BTA_HL_DCH_RECONNECT_CFM_EVT; + send_event = true; + } else { + if (MCA_CloseReq((tMCA_DL)p_dcb->mdl_handle) == MCA_SUCCESS) { + p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT; + } else { + APPL_TRACE_ERROR("Unabel to close DCH for reconnect cfg mismatch"); + } + } + break; + default: + break; + } - if (send_event) - p_acb->p_cback(event ,(tBTA_HL *) &evt_data ); + if (send_event) p_acb->p_cback(event, (tBTA_HL*)&evt_data); } - /******************************************************************************* * * Function bta_hl_dch_mca_abort_ind @@ -1101,17 +925,16 @@ void bta_hl_dch_mca_open_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_mca_abort_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - + tBTA_HL_DATA* p_data) { + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_abort_ind"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_abort_ind"); #endif - p_dcb->abort_oper |= BTA_HL_ABORT_REMOTE_MASK; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + p_dcb->abort_oper |= BTA_HL_ABORT_REMOTE_MASK; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); } /******************************************************************************* @@ -1124,39 +947,30 @@ void bta_hl_dch_mca_abort_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_mca_abort_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL evt_data; + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL evt_data; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_abort_cfm"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_abort_cfm"); #endif - if (p_dcb->abort_oper) - { - if (p_data->mca_evt.mca_data.abort_cfm.rsp_code != MCA_RSP_SUCCESS ) - { - if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) - { - bta_hl_build_abort_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - BTA_HL_STATUS_FAIL); - p_acb->p_cback(BTA_HL_DCH_ABORT_CFM_EVT ,(tBTA_HL *) &evt_data ); - } - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - } - else - { - APPL_TRACE_ERROR("Not expecting Abort CFM "); + if (p_dcb->abort_oper) { + if (p_data->mca_evt.mca_data.abort_cfm.rsp_code != MCA_RSP_SUCCESS) { + if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) { + bta_hl_build_abort_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, + BTA_HL_STATUS_FAIL); + p_acb->p_cback(BTA_HL_DCH_ABORT_CFM_EVT, (tBTA_HL*)&evt_data); + } + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); } + } else { + APPL_TRACE_ERROR("Not expecting Abort CFM "); + } } /******************************************************************************* @@ -1169,55 +983,41 @@ void bta_hl_dch_mca_abort_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_mca_abort(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_RESULT mca_result; - tBTA_HL evt_data; - - if (((p_mcb->sdp_oper == BTA_HL_SDP_OP_DCH_OPEN_INIT) || - (p_mcb->sdp_oper == BTA_HL_SDP_OP_DCH_RECONNECT_INIT)) && - (p_mcb->sdp_mdl_idx == mdl_idx) ) - { - p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; - return; - } - else if (p_dcb->echo_oper == BTA_HL_ECHO_OP_CI_GET_ECHO_DATA) - { - p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; - return; - } - - p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; - - if ((mca_result = MCA_Abort((tMCA_CL) p_mcb->mcl_handle))!= MCA_SUCCESS) - { - if (mca_result == MCA_NO_RESOURCES) - { - p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; - } - else - { - if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) - { - bta_hl_build_abort_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - BTA_HL_STATUS_FAIL); - p_acb->p_cback(BTA_HL_DCH_ABORT_CFM_EVT ,(tBTA_HL *) &evt_data ); - } - bta_hl_check_cch_close(app_idx, mcl_idx, p_data, false); - } - - + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_RESULT mca_result; + tBTA_HL evt_data; + + if (((p_mcb->sdp_oper == BTA_HL_SDP_OP_DCH_OPEN_INIT) || + (p_mcb->sdp_oper == BTA_HL_SDP_OP_DCH_RECONNECT_INIT)) && + (p_mcb->sdp_mdl_idx == mdl_idx)) { + p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; + return; + } else if (p_dcb->echo_oper == BTA_HL_ECHO_OP_CI_GET_ECHO_DATA) { + p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; + return; + } + + p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; + + if ((mca_result = MCA_Abort((tMCA_CL)p_mcb->mcl_handle)) != MCA_SUCCESS) { + if (mca_result == MCA_NO_RESOURCES) { + p_dcb->abort_oper |= BTA_HL_ABORT_PENDING_MASK; + } else { + if (p_dcb->abort_oper & BTA_HL_ABORT_LOCAL_MASK) { + bta_hl_build_abort_cfm(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, + BTA_HL_STATUS_FAIL); + p_acb->p_cback(BTA_HL_DCH_ABORT_CFM_EVT, (tBTA_HL*)&evt_data); + } + bta_hl_check_cch_close(app_idx, mcl_idx, p_data, false); } + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_abort abort_oper=0x%x", p_dcb->abort_oper); + APPL_TRACE_DEBUG("bta_hl_dch_mca_abort abort_oper=0x%x", p_dcb->abort_oper); #endif - } /******************************************************************************* @@ -1229,69 +1029,60 @@ void bta_hl_dch_mca_abort(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * Returns void * ******************************************************************************/ -void bta_hl_dch_mca_reconnect_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL_MDL_CFG *p_mdl_cfg; - tMCA_EVT_HDR *p_reconnect_ind = &p_data->mca_evt.mca_data.reconnect_ind; - uint8_t mdl_cfg_idx, in_use_mdl_idx, mdep_cfg_idx; - uint8_t rsp_code = MCA_RSP_SUCCESS; - +void bta_hl_dch_mca_reconnect_ind(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL_MDL_CFG* p_mdl_cfg; + tMCA_EVT_HDR* p_reconnect_ind = &p_data->mca_evt.mca_data.reconnect_ind; + uint8_t mdl_cfg_idx, in_use_mdl_idx, mdep_cfg_idx; + uint8_t rsp_code = MCA_RSP_SUCCESS; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect_ind mdl_id=%d", p_reconnect_ind->mdl_id); + APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect_ind mdl_id=%d", + p_reconnect_ind->mdl_id); #endif - if (bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, p_reconnect_ind->mdl_id, &mdl_cfg_idx)) - { - if (!bta_hl_find_mdl_idx(app_idx,mcl_idx,p_reconnect_ind->mdl_id, &in_use_mdl_idx) ) - { - p_mdl_cfg = BTA_HL_GET_MDL_CFG_PTR(app_idx, mdl_cfg_idx); - - if (bta_hl_find_mdep_cfg_idx(app_idx, p_mdl_cfg->local_mdep_id, &mdep_cfg_idx)) - { - p_dcb->in_use = true; - p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_RECONNECT; - p_dcb->sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); - p_dcb->peer_mdep_id = 0xFF; - p_dcb->local_mdep_id = p_mdl_cfg->local_mdep_id ; - p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; - p_dcb->local_cfg = BTA_HL_DCH_CFG_UNKNOWN; - p_dcb->mdl_id = p_reconnect_ind->mdl_id; - p_dcb->mdl_cfg_idx_included = true; - p_dcb->mdl_cfg_idx = mdl_cfg_idx; - p_dcb->dch_mode = p_mdl_cfg->dch_mode; - bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, - &p_dcb->max_rx_apdu_size, - &p_dcb->max_tx_apdu_size); - bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); - } - else - { - rsp_code = MCA_RSP_BAD_MDL; - } - } - else - { - rsp_code = MCA_RSP_BAD_MDL; - } - } - else - { + if (bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, p_reconnect_ind->mdl_id, + &mdl_cfg_idx)) { + if (!bta_hl_find_mdl_idx(app_idx, mcl_idx, p_reconnect_ind->mdl_id, + &in_use_mdl_idx)) { + p_mdl_cfg = BTA_HL_GET_MDL_CFG_PTR(app_idx, mdl_cfg_idx); + + if (bta_hl_find_mdep_cfg_idx(app_idx, p_mdl_cfg->local_mdep_id, + &mdep_cfg_idx)) { + p_dcb->in_use = true; + p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_RECONNECT; + p_dcb->sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); + p_dcb->peer_mdep_id = 0xFF; + p_dcb->local_mdep_id = p_mdl_cfg->local_mdep_id; + p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; + p_dcb->local_cfg = BTA_HL_DCH_CFG_UNKNOWN; + p_dcb->mdl_id = p_reconnect_ind->mdl_id; + p_dcb->mdl_cfg_idx_included = true; + p_dcb->mdl_cfg_idx = mdl_cfg_idx; + p_dcb->dch_mode = p_mdl_cfg->dch_mode; + bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, + &p_dcb->max_rx_apdu_size, + &p_dcb->max_tx_apdu_size); + bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); + } else { rsp_code = MCA_RSP_BAD_MDL; - } - - if (MCA_ReconnectMdlRsp((tMCA_CL) p_mcb->mcl_handle, - p_dcb->local_mdep_id, - p_dcb->mdl_id, - rsp_code, - &p_dcb->chnl_cfg)!= MCA_SUCCESS) - { - MCA_Abort((tMCA_CL) p_mcb->mcl_handle); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } + } + } else { + rsp_code = MCA_RSP_BAD_MDL; + } + } else { + rsp_code = MCA_RSP_BAD_MDL; + } + + if (MCA_ReconnectMdlRsp((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, + p_dcb->mdl_id, rsp_code, + &p_dcb->chnl_cfg) != MCA_SUCCESS) { + MCA_Abort((tMCA_CL)p_mcb->mcl_handle); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); + } } /******************************************************************************* @@ -1303,44 +1094,38 @@ void bta_hl_dch_mca_reconnect_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_ * Returns void * ******************************************************************************/ -void bta_hl_dch_mca_reconnect_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_RSP_EVT *p_reconnect_cfm = &p_data->mca_evt.mca_data.reconnect_cfm; - +void bta_hl_dch_mca_reconnect_cfm(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_RSP_EVT* p_reconnect_cfm = &p_data->mca_evt.mca_data.reconnect_cfm; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect_cfm"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect_cfm"); #endif - if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) - { - p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, p_data); - return; - } - - - if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT) - { - if (p_reconnect_cfm->rsp_code == MCA_RSP_SUCCESS) - { - - bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); - - if (MCA_DataChnlCfg((tMCA_CL) p_mcb->mcl_handle, &p_dcb->chnl_cfg)!= MCA_SUCCESS) - { - /* should be able to abort so no checking of the return code */ - MCA_Abort((tMCA_CL) p_mcb->mcl_handle); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } + if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) { + p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, + p_data); + return; + } + + if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_RECONNECT) { + if (p_reconnect_cfm->rsp_code == MCA_RSP_SUCCESS) { + bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); + + if (MCA_DataChnlCfg((tMCA_CL)p_mcb->mcl_handle, &p_dcb->chnl_cfg) != + MCA_SUCCESS) { + /* should be able to abort so no checking of the return code */ + MCA_Abort((tMCA_CL)p_mcb->mcl_handle); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + } + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); } + } } /******************************************************************************* @@ -1353,35 +1138,30 @@ void bta_hl_dch_mca_reconnect_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_ * ******************************************************************************/ void bta_hl_dch_mca_reconnect(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_CHNL_CFG *p_chnl_cfg=NULL; - uint8_t sdp_idx; + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_CHNL_CFG* p_chnl_cfg = NULL; + uint8_t sdp_idx; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_reconnect"); #endif - if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->ctrl_psm, &sdp_idx)) - { - p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; - if ( MCA_ReconnectMdl((tMCA_CL) p_mcb->mcl_handle, - p_dcb->local_mdep_id, - p_mcb->data_psm, - p_dcb->mdl_id, - p_chnl_cfg ) != MCA_SUCCESS) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } + if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->ctrl_psm, + &sdp_idx)) { + p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; + if (MCA_ReconnectMdl((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, + p_mcb->data_psm, p_dcb->mdl_id, + p_chnl_cfg) != MCA_SUCCESS) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + } + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); + } } - /******************************************************************************* * * Function bta_hl_dch_create_rsp @@ -1392,39 +1172,30 @@ void bta_hl_dch_mca_reconnect(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_create_rsp(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL_API_DCH_CREATE_RSP *p_create_rsp = &p_data->api_dch_create_rsp; - uint8_t mca_rsp_code = MCA_RSP_SUCCESS; + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL_API_DCH_CREATE_RSP* p_create_rsp = &p_data->api_dch_create_rsp; + uint8_t mca_rsp_code = MCA_RSP_SUCCESS; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_create_rsp"); + APPL_TRACE_DEBUG("bta_hl_dch_create_rsp"); #endif - if (p_create_rsp->rsp_code == BTA_HL_DCH_CREATE_RSP_SUCCESS) - { - p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_OPEN; - p_dcb->local_cfg = p_create_rsp->cfg_rsp; - - - - bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); - } - else - { - mca_rsp_code = MCA_RSP_CFG_REJ; - } - - if (MCA_CreateMdlRsp((tMCA_CL) p_mcb->mcl_handle, - p_dcb->local_mdep_id, - p_dcb->mdl_id, - p_dcb->local_cfg, - mca_rsp_code, - &p_dcb->chnl_cfg)!= MCA_SUCCESS) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } + if (p_create_rsp->rsp_code == BTA_HL_DCH_CREATE_RSP_SUCCESS) { + p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_OPEN; + p_dcb->local_cfg = p_create_rsp->cfg_rsp; + + bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); + } else { + mca_rsp_code = MCA_RSP_CFG_REJ; + } + + if (MCA_CreateMdlRsp((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, + p_dcb->mdl_id, p_dcb->local_cfg, mca_rsp_code, + &p_dcb->chnl_cfg) != MCA_SUCCESS) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); + } } /******************************************************************************* @@ -1436,101 +1207,84 @@ void bta_hl_dch_create_rsp(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * Returns void * ******************************************************************************/ -void bta_hl_dch_mca_create_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_CREATE_IND *p_create_ind = &p_data->mca_evt.mca_data.create_ind; - uint8_t mdep_cfg_idx; - uint8_t cfg_rsp; - uint8_t rsp_code = MCA_RSP_SUCCESS; - bool send_create_ind_evt = false; - tBTA_HL evt_data; - tBTA_HL_ECHO_CFG *p_echo_cfg; +void bta_hl_dch_mca_create_ind(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_CREATE_IND* p_create_ind = &p_data->mca_evt.mca_data.create_ind; + uint8_t mdep_cfg_idx; + uint8_t cfg_rsp; + uint8_t rsp_code = MCA_RSP_SUCCESS; + bool send_create_ind_evt = false; + tBTA_HL evt_data; + tBTA_HL_ECHO_CFG* p_echo_cfg; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_create_ind"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_create_ind"); #endif - if (bta_hl_find_mdep_cfg_idx(app_idx, p_create_ind->dep_id, &mdep_cfg_idx)) - { - if (p_create_ind->dep_id == BTA_HL_ECHO_TEST_MDEP_ID ) - { - if (bta_hl_find_echo_cfg_rsp(app_idx, mcl_idx, mdep_cfg_idx,p_create_ind->cfg, &cfg_rsp )) - { - p_dcb->in_use = true; - p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_OPEN; - p_dcb->local_mdep_id = p_create_ind->dep_id ; - p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; - p_dcb->local_cfg = cfg_rsp; - p_dcb->remote_cfg = p_create_ind->cfg ; - p_dcb->mdl_id = p_create_ind->mdl_id; - p_dcb->mdl_cfg_idx_included = false; - p_echo_cfg = BTA_HL_GET_ECHO_CFG_PTR(app_idx); - p_dcb->max_rx_apdu_size = p_echo_cfg->max_rx_apdu_size; - p_dcb->max_tx_apdu_size = p_echo_cfg->max_tx_apdu_size; - - bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); - } - else - { - rsp_code = MCA_RSP_CFG_REJ; - } - } - else - - { - p_dcb->in_use = true; - p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_CREATE; - p_dcb->local_mdep_id = p_create_ind->dep_id ; - p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; - p_dcb->local_cfg = BTA_HL_DCH_CFG_UNKNOWN; - p_dcb->remote_cfg = p_create_ind->cfg; - p_dcb->mdl_id = p_create_ind->mdl_id; - p_dcb->mdl_cfg_idx_included = false; - bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, - &p_dcb->max_rx_apdu_size, - &p_dcb->max_tx_apdu_size); - send_create_ind_evt = true; - } - } - else - { - rsp_code = MCA_RSP_BAD_MDEP; - } + if (bta_hl_find_mdep_cfg_idx(app_idx, p_create_ind->dep_id, &mdep_cfg_idx)) { + if (p_create_ind->dep_id == BTA_HL_ECHO_TEST_MDEP_ID) { + if (bta_hl_find_echo_cfg_rsp(app_idx, mcl_idx, mdep_cfg_idx, + p_create_ind->cfg, &cfg_rsp)) { + p_dcb->in_use = true; + p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_OPEN; + p_dcb->local_mdep_id = p_create_ind->dep_id; + p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; + p_dcb->local_cfg = cfg_rsp; + p_dcb->remote_cfg = p_create_ind->cfg; + p_dcb->mdl_id = p_create_ind->mdl_id; + p_dcb->mdl_cfg_idx_included = false; + p_echo_cfg = BTA_HL_GET_ECHO_CFG_PTR(app_idx); + p_dcb->max_rx_apdu_size = p_echo_cfg->max_rx_apdu_size; + p_dcb->max_tx_apdu_size = p_echo_cfg->max_tx_apdu_size; - if (send_create_ind_evt) - { - evt_data.dch_create_ind.mcl_handle = p_mcb->mcl_handle; - evt_data.dch_create_ind.app_handle = p_acb->app_handle; - evt_data.dch_create_ind.local_mdep_id = p_dcb->local_mdep_id; - evt_data.dch_create_ind.mdl_id = p_dcb->mdl_id; - evt_data.dch_create_ind.cfg = p_dcb->remote_cfg; - bdcpy(evt_data.dch_create_ind.bd_addr, p_mcb->bd_addr); - p_acb->p_cback(BTA_HL_DCH_CREATE_IND_EVT,(tBTA_HL *) &evt_data ); - } - else - { - if (MCA_CreateMdlRsp((tMCA_CL) p_mcb->mcl_handle, - p_dcb->local_mdep_id, - p_dcb->mdl_id, - p_dcb->local_cfg, - rsp_code, - &p_dcb->chnl_cfg)!= MCA_SUCCESS) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - else - { - if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) - { - p_mcb->echo_test = true; - p_dcb->echo_oper = BTA_HL_ECHO_OP_OPEN_IND; - } - } + bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); + } else { + rsp_code = MCA_RSP_CFG_REJ; + } + } else + + { + p_dcb->in_use = true; + p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_CREATE; + p_dcb->local_mdep_id = p_create_ind->dep_id; + p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; + p_dcb->local_cfg = BTA_HL_DCH_CFG_UNKNOWN; + p_dcb->remote_cfg = p_create_ind->cfg; + p_dcb->mdl_id = p_create_ind->mdl_id; + p_dcb->mdl_cfg_idx_included = false; + bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, + &p_dcb->max_rx_apdu_size, + &p_dcb->max_tx_apdu_size); + send_create_ind_evt = true; + } + } else { + rsp_code = MCA_RSP_BAD_MDEP; + } + + if (send_create_ind_evt) { + evt_data.dch_create_ind.mcl_handle = p_mcb->mcl_handle; + evt_data.dch_create_ind.app_handle = p_acb->app_handle; + evt_data.dch_create_ind.local_mdep_id = p_dcb->local_mdep_id; + evt_data.dch_create_ind.mdl_id = p_dcb->mdl_id; + evt_data.dch_create_ind.cfg = p_dcb->remote_cfg; + bdcpy(evt_data.dch_create_ind.bd_addr, p_mcb->bd_addr); + p_acb->p_cback(BTA_HL_DCH_CREATE_IND_EVT, (tBTA_HL*)&evt_data); + } else { + if (MCA_CreateMdlRsp((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, + p_dcb->mdl_id, p_dcb->local_cfg, rsp_code, + &p_dcb->chnl_cfg) != MCA_SUCCESS) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + } else { + if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { + p_mcb->echo_test = true; + p_dcb->echo_oper = BTA_HL_ECHO_OP_OPEN_IND; + } } + } } /******************************************************************************* @@ -1542,59 +1296,51 @@ void bta_hl_dch_mca_create_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx * Returns void * ******************************************************************************/ -void bta_hl_dch_mca_create_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_CREATE_CFM *p_create_cfm = &p_data->mca_evt.mca_data.create_cfm; +void bta_hl_dch_mca_create_cfm(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_CREATE_CFM* p_create_cfm = &p_data->mca_evt.mca_data.create_cfm; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_create_cfm"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_create_cfm"); #endif - if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) - { - p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, p_data); - return; - } + if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) { + p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, + p_data); + return; + } + + if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN) { + if (p_create_cfm->rsp_code == MCA_RSP_SUCCESS) { + if (bta_hl_validate_cfg(app_idx, mcl_idx, mdl_idx, p_create_cfm->cfg)) { + bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); - if (p_dcb->dch_oper == BTA_HL_DCH_OP_LOCAL_OPEN) - { - if (p_create_cfm->rsp_code == MCA_RSP_SUCCESS) - { - if (bta_hl_validate_cfg(app_idx, mcl_idx, mdl_idx, p_create_cfm->cfg )) - { - bta_hl_set_dch_chan_cfg(app_idx, mcl_idx, mdl_idx, p_data); - - if (MCA_DataChnlCfg((tMCA_CL) p_mcb->mcl_handle, &p_dcb->chnl_cfg)!= MCA_SUCCESS) - { - /* this should not happen */ - APPL_TRACE_ERROR("Unable to create data channel"); - MCA_Abort((tMCA_CL) p_mcb->mcl_handle); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - else - { - if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) - { - p_dcb->echo_oper = BTA_HL_ECHO_OP_DCH_OPEN_CFM; - } - } - } - else - { - MCA_Abort((tMCA_CL) p_mcb->mcl_handle); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - } - else - { - APPL_TRACE_ERROR("MCA Create- failed"); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + if (MCA_DataChnlCfg((tMCA_CL)p_mcb->mcl_handle, &p_dcb->chnl_cfg) != + MCA_SUCCESS) { + /* this should not happen */ + APPL_TRACE_ERROR("Unable to create data channel"); + MCA_Abort((tMCA_CL)p_mcb->mcl_handle); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + } else { + if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { + p_dcb->echo_oper = BTA_HL_ECHO_OP_DCH_OPEN_CFM; + } } + } else { + MCA_Abort((tMCA_CL)p_mcb->mcl_handle); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + } + } else { + APPL_TRACE_ERROR("MCA Create- failed"); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); } + } } /******************************************************************************* @@ -1607,42 +1353,34 @@ void bta_hl_dch_mca_create_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx * ******************************************************************************/ void bta_hl_dch_mca_create(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tMCA_RESULT result; - uint8_t sdp_idx; + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tMCA_RESULT result; + uint8_t sdp_idx; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_mca_create"); + APPL_TRACE_DEBUG("bta_hl_dch_mca_create"); #endif - if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->ctrl_psm, &sdp_idx) && - bta_hl_validate_peer_cfg(app_idx, mcl_idx, mdl_idx, - p_dcb->peer_mdep_id, - p_dcb->peer_mdep_role, - sdp_idx)) - { - - p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; - if ( (result = MCA_CreateMdl((tMCA_CL) p_mcb->mcl_handle, - p_dcb->local_mdep_id, - p_mcb->data_psm, - p_dcb->mdl_id, - p_dcb->peer_mdep_id, - p_dcb->local_cfg, - NULL )) != MCA_SUCCESS) - { - APPL_TRACE_ERROR("MCA_CreateMdl FAIL mca_result=%d", result); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - } - else - { - APPL_TRACE_ERROR("MCA Create- SDP idx or peer MDEP cfg not found"); - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } + if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->ctrl_psm, + &sdp_idx) && + bta_hl_validate_peer_cfg(app_idx, mcl_idx, mdl_idx, p_dcb->peer_mdep_id, + p_dcb->peer_mdep_role, sdp_idx)) { + p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; + if ((result = + MCA_CreateMdl((tMCA_CL)p_mcb->mcl_handle, p_dcb->local_mdep_id, + p_mcb->data_psm, p_dcb->mdl_id, p_dcb->peer_mdep_id, + p_dcb->local_cfg, NULL)) != MCA_SUCCESS) { + APPL_TRACE_ERROR("MCA_CreateMdl FAIL mca_result=%d", result); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + } + } else { + APPL_TRACE_ERROR("MCA Create- SDP idx or peer MDEP cfg not found"); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); + } } /******************************************************************************* @@ -1655,13 +1393,12 @@ void bta_hl_dch_mca_create(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * ******************************************************************************/ void bta_hl_dch_sdp_fail(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data) -{ - + tBTA_HL_DATA* p_data) { #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_dch_sdp_fail"); + APPL_TRACE_DEBUG("bta_hl_dch_sdp_fail"); #endif - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); } /****************************************************************************** @@ -1679,254 +1416,236 @@ void bta_hl_dch_sdp_fail(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * *****************************************************************************/ static void bta_hl_sdp_cback(uint8_t sdp_oper, uint8_t app_idx, uint8_t mcl_idx, - uint8_t mdl_idx, uint16_t status) -{ - tBTA_HL_MCL_CB *p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_SDP_REC *p_hdp_rec; - tBTA_HL_CCH_SDP *p_cch_buf; - tBTA_HL_DCH_SDP *p_dch_buf; - tSDP_DISC_REC *p_rec = NULL; - tSDP_PROTOCOL_ELEM pe; - tSDP_DISC_ATTR *p_attr; - uint8_t i, rec_cnt; - tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature; - bool sdp_parsing_ok =false, result=false; - uint16_t event; - tBTA_HL_MDL_CB *p_dcb; - uint16_t service_uuid; - uint16_t name_len; + uint8_t mdl_idx, uint16_t status) { + tBTA_HL_MCL_CB* p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_SDP_REC* p_hdp_rec; + tBTA_HL_CCH_SDP* p_cch_buf; + tBTA_HL_DCH_SDP* p_dch_buf; + tSDP_DISC_REC* p_rec = NULL; + tSDP_PROTOCOL_ELEM pe; + tSDP_DISC_ATTR* p_attr; + uint8_t i, rec_cnt; + tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature; + bool sdp_parsing_ok = false, result = false; + uint16_t event; + tBTA_HL_MDL_CB* p_dcb; + uint16_t service_uuid; + uint16_t name_len; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_sdp_cback status:%d sdp_oper=%d app_idx=%d, mcl_idx=%d, mdl_idx=%d", - status, sdp_oper, app_idx, mcl_idx, mdl_idx); + APPL_TRACE_DEBUG( + "bta_hl_sdp_cback status:%d sdp_oper=%d app_idx=%d, mcl_idx=%d, " + "mdl_idx=%d", + status, sdp_oper, app_idx, mcl_idx, mdl_idx); #endif - rec_cnt = 0; - service_uuid = bta_hl_get_service_uuids(sdp_oper, app_idx, mcl_idx, mdl_idx); - - if (status == SDP_SUCCESS || status == SDP_DB_FULL) - { - memset(&p_cb->sdp,0, sizeof(tBTA_HL_SDP)); - do - { - if (bta_hl_find_service_in_db(app_idx, mcl_idx, service_uuid, &p_rec)) - { - p_hdp_rec = &p_cb->sdp.sdp_rec[rec_cnt]; - p_cb->sdp.num_recs = rec_cnt+1; - } - else - { - break; - } - - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_L2CAP, &pe)) - { - p_hdp_rec->ctrl_psm = (uint16_t) pe.params[0]; - } - else - { - APPL_TRACE_WARNING("Control PSM not found"); - break; - } - if (SDP_FindAddProtoListsElemInRec(p_rec, UUID_PROTOCOL_L2CAP, &pe)) - { - p_hdp_rec->data_psm = (uint16_t) pe.params[0]; - } - else - { - APPL_TRACE_WARNING("Data PSM not found"); - break; - } - - p_hdp_rec->srv_name[0]= '\0'; - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) - { - if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) - name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - else - name_len = BT_MAX_SERVICE_NAME_LEN; - memcpy(p_hdp_rec->srv_name, p_attr->attr_value.v.array, name_len); - } - - p_hdp_rec->srv_desp[0]= '\0'; - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_DESCRIPTION)) != NULL) - { - if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) - name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - else - name_len = BT_MAX_SERVICE_NAME_LEN; - memcpy(p_hdp_rec->srv_desp, p_attr->attr_value.v.array, name_len); - } - - - p_hdp_rec->provider_name[0]= '\0'; - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_PROVIDER_NAME)) != NULL) - { - if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) - name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - else - name_len = BT_MAX_SERVICE_NAME_LEN; - memcpy(p_hdp_rec->provider_name, p_attr->attr_value.v.array, name_len); - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_HDP_MCAP_SUP_PROC))!=NULL) - { - p_hdp_rec->mcap_sup_proc = p_attr->attr_value.v.u8; - } - else - { - APPL_TRACE_WARNING("MCAP SUP PROC not found"); - break; + rec_cnt = 0; + service_uuid = bta_hl_get_service_uuids(sdp_oper, app_idx, mcl_idx, mdl_idx); + + if (status == SDP_SUCCESS || status == SDP_DB_FULL) { + memset(&p_cb->sdp, 0, sizeof(tBTA_HL_SDP)); + do { + if (bta_hl_find_service_in_db(app_idx, mcl_idx, service_uuid, &p_rec)) { + p_hdp_rec = &p_cb->sdp.sdp_rec[rec_cnt]; + p_cb->sdp.num_recs = rec_cnt + 1; + } else { + break; + } + + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_L2CAP, &pe)) { + p_hdp_rec->ctrl_psm = (uint16_t)pe.params[0]; + } else { + APPL_TRACE_WARNING("Control PSM not found"); + break; + } + if (SDP_FindAddProtoListsElemInRec(p_rec, UUID_PROTOCOL_L2CAP, &pe)) { + p_hdp_rec->data_psm = (uint16_t)pe.params[0]; + } else { + APPL_TRACE_WARNING("Data PSM not found"); + break; + } + + p_hdp_rec->srv_name[0] = '\0'; + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != + NULL) { + if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) + name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + else + name_len = BT_MAX_SERVICE_NAME_LEN; + memcpy(p_hdp_rec->srv_name, p_attr->attr_value.v.array, name_len); + } + + p_hdp_rec->srv_desp[0] = '\0'; + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_SERVICE_DESCRIPTION)) != NULL) { + if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) + name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + else + name_len = BT_MAX_SERVICE_NAME_LEN; + memcpy(p_hdp_rec->srv_desp, p_attr->attr_value.v.array, name_len); + } + + p_hdp_rec->provider_name[0] = '\0'; + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_PROVIDER_NAME)) != + NULL) { + if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < BT_MAX_SERVICE_NAME_LEN) + name_len = (uint16_t)SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + else + name_len = BT_MAX_SERVICE_NAME_LEN; + memcpy(p_hdp_rec->provider_name, p_attr->attr_value.v.array, name_len); + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_HDP_MCAP_SUP_PROC)) != + NULL) { + p_hdp_rec->mcap_sup_proc = p_attr->attr_value.v.u8; + } else { + APPL_TRACE_WARNING("MCAP SUP PROC not found"); + break; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_HDP_SUP_FEAT_LIST)) != + NULL) { + if (bta_hl_fill_sup_feature_list(p_attr, &sup_feature)) { + p_hdp_rec->num_mdeps = (uint8_t)sup_feature.num_elems; + APPL_TRACE_WARNING("bta_hl_sdp_cback num_mdeps %d", + sup_feature.num_elems); + for (i = 0; i < sup_feature.num_elems; i++) { + p_hdp_rec->mdep_cfg[i].data_type = + sup_feature.list_elem[i].data_type; + p_hdp_rec->mdep_cfg[i].mdep_id = sup_feature.list_elem[i].mdep_id; + p_hdp_rec->mdep_cfg[i].mdep_role = + sup_feature.list_elem[i].mdep_role; + /* Check MDEP Description pointer to prevent crash due to null + * pointer */ + if (sup_feature.list_elem[i].p_mdep_desp != NULL) { + strlcpy(p_hdp_rec->mdep_cfg[i].mdep_desp, + sup_feature.list_elem[i].p_mdep_desp, + BTA_HL_MDEP_DESP_LEN); + } else { + APPL_TRACE_ERROR( + "bta_hl_sdp_cback Incorrect Mdep[%d] Description (Null ptr)", + i); } + } - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_HDP_SUP_FEAT_LIST ))!=NULL) - { - if (bta_hl_fill_sup_feature_list (p_attr, &sup_feature)) - { - p_hdp_rec->num_mdeps = (uint8_t) sup_feature.num_elems; - APPL_TRACE_WARNING("bta_hl_sdp_cback num_mdeps %d",sup_feature.num_elems); - for (i=0; imdep_cfg[i].data_type = sup_feature.list_elem[i].data_type; - p_hdp_rec->mdep_cfg[i].mdep_id = sup_feature.list_elem[i].mdep_id; - p_hdp_rec->mdep_cfg[i].mdep_role = sup_feature.list_elem[i].mdep_role; - /* Check MDEP Description pointer to prevent crash due to null pointer */ - if (sup_feature.list_elem[i].p_mdep_desp != NULL) - { - strlcpy(p_hdp_rec->mdep_cfg[i].mdep_desp, - sup_feature.list_elem[i].p_mdep_desp, - BTA_HL_MDEP_DESP_LEN); - } - else - { - APPL_TRACE_ERROR("bta_hl_sdp_cback Incorrect Mdep[%d] Description (Null ptr)", i); - } - } - - sdp_parsing_ok = true; - } - else - { - APPL_TRACE_WARNING("HDP supported feature list fill failed"); - break; - } - } - else - { - APPL_TRACE_WARNING("HDP supported feature list not found"); - break; - } + sdp_parsing_ok = true; + } else { + APPL_TRACE_WARNING("HDP supported feature list fill failed"); + break; + } + } else { + APPL_TRACE_WARNING("HDP supported feature list not found"); + break; + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("record=%d ctrl_psm=%0x data_psm=%x", - rec_cnt+1, - p_hdp_rec->ctrl_psm, - p_hdp_rec->data_psm ); - APPL_TRACE_DEBUG("srv_name=[%s]",(p_hdp_rec->srv_name[0] != '\0')? p_hdp_rec->srv_name:"NULL"); - APPL_TRACE_DEBUG("srv_desp=[%s]",(p_hdp_rec->srv_desp[0] != '\0')? p_hdp_rec->srv_desp:"NULL"); - for (i=0; imdep_cfg[i].mdep_id, - p_hdp_rec->mdep_cfg[i].data_type, - (p_hdp_rec->mdep_cfg[i].mdep_role == BTA_HL_MDEP_ROLE_SOURCE)?"Src":"Snk", - p_hdp_rec->mdep_cfg[i].mdep_role); - } - APPL_TRACE_DEBUG("provider_name=[%s]",(p_hdp_rec->provider_name[0] != '\0')? p_hdp_rec->provider_name:"NULL"); - APPL_TRACE_DEBUG("found MCAP sup procedure=%d", - p_cb->sdp.sdp_rec[rec_cnt].mcap_sup_proc ); + APPL_TRACE_DEBUG("record=%d ctrl_psm=%0x data_psm=%x", rec_cnt + 1, + p_hdp_rec->ctrl_psm, p_hdp_rec->data_psm); + APPL_TRACE_DEBUG("srv_name=[%s]", (p_hdp_rec->srv_name[0] != '\0') + ? p_hdp_rec->srv_name + : "NULL"); + APPL_TRACE_DEBUG("srv_desp=[%s]", (p_hdp_rec->srv_desp[0] != '\0') + ? p_hdp_rec->srv_desp + : "NULL"); + for (i = 0; i < sup_feature.num_elems; i++) { + APPL_TRACE_DEBUG( + "index=0x%02x mdep_id=0x%04x data type=0x%04x mdep role=%s(0x%02x)", + (i + 1), p_hdp_rec->mdep_cfg[i].mdep_id, + p_hdp_rec->mdep_cfg[i].data_type, + (p_hdp_rec->mdep_cfg[i].mdep_role == BTA_HL_MDEP_ROLE_SOURCE) + ? "Src" + : "Snk", + p_hdp_rec->mdep_cfg[i].mdep_role); + } + APPL_TRACE_DEBUG("provider_name=[%s]", + (p_hdp_rec->provider_name[0] != '\0') + ? p_hdp_rec->provider_name + : "NULL"); + APPL_TRACE_DEBUG("found MCAP sup procedure=%d", + p_cb->sdp.sdp_rec[rec_cnt].mcap_sup_proc); #endif - rec_cnt++; - if (rec_cnt >= BTA_HL_NUM_SDP_RECS) - { - APPL_TRACE_WARNING("No more spaces for SDP recs max_rec_cnt=%d", BTA_HL_NUM_SDP_RECS); - break; - } - - - } while (true); - } - - osi_free_and_reset((void **)&p_cb->p_db); - - if ( (status == SDP_SUCCESS || status == SDP_DB_FULL) && - p_cb->sdp.num_recs && - sdp_parsing_ok) - { - result = true; - } - else - { - APPL_TRACE_WARNING("SDP Failed sdp_status=%d num_recs=%d sdp_parsing_ok=%d ", - status, p_cb->sdp.num_recs,sdp_parsing_ok ); - } - - - p_cb->sdp_oper = BTA_HL_SDP_OP_NONE; - - switch (sdp_oper ) - { - case BTA_HL_SDP_OP_CCH_INIT: - case BTA_HL_SDP_OP_SDP_QUERY_NEW: - case BTA_HL_SDP_OP_SDP_QUERY_CURRENT: - - /* send result in event back to BTA */ - p_cch_buf = (tBTA_HL_CCH_SDP *)osi_malloc(sizeof(tBTA_HL_CCH_SDP)); - if (result) { - if (sdp_oper == BTA_HL_SDP_OP_CCH_INIT) { - event = BTA_HL_CCH_SDP_OK_EVT; - if (p_cb->close_pending) - event = BTA_HL_CCH_SDP_FAIL_EVT; - } else { - event = BTA_HL_SDP_QUERY_OK_EVT; - } - } else { - if (sdp_oper == BTA_HL_SDP_OP_CCH_INIT) - event = BTA_HL_CCH_SDP_FAIL_EVT; - else - event = BTA_HL_SDP_QUERY_FAIL_EVT; - } - p_cch_buf->hdr.event = event; - - p_cch_buf->app_idx = app_idx; - p_cch_buf->mcl_idx = mcl_idx; - p_cch_buf->release_mcl_cb = false; - if (sdp_oper == BTA_HL_SDP_OP_SDP_QUERY_NEW) - p_cch_buf->release_mcl_cb = true; - - bta_sys_sendmsg(p_cch_buf); - break; - case BTA_HL_SDP_OP_DCH_OPEN_INIT: - case BTA_HL_SDP_OP_DCH_RECONNECT_INIT: - p_dch_buf = (tBTA_HL_DCH_SDP *)osi_malloc(sizeof(tBTA_HL_DCH_SDP)); - p_dch_buf->hdr.event = BTA_HL_DCH_SDP_FAIL_EVT; - p_dch_buf->app_idx = app_idx; - p_dch_buf->mcl_idx = mcl_idx; - p_dch_buf->mdl_idx = mdl_idx; - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) { - p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; - result = false; - } - if (result) { - if (sdp_oper == BTA_HL_SDP_OP_DCH_OPEN_INIT) { - if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { - p_dch_buf->hdr.event = BTA_HL_DCH_ECHO_TEST_EVT; - } else { - p_dch_buf->hdr.event = BTA_HL_DCH_OPEN_EVT; - } - } else { - p_dch_buf->hdr.event = BTA_HL_DCH_RECONNECT_EVT; - } - } - bta_sys_sendmsg(p_dch_buf); - break; - default: - break; - } + rec_cnt++; + if (rec_cnt >= BTA_HL_NUM_SDP_RECS) { + APPL_TRACE_WARNING("No more spaces for SDP recs max_rec_cnt=%d", + BTA_HL_NUM_SDP_RECS); + break; + } + + } while (true); + } + + osi_free_and_reset((void**)&p_cb->p_db); + + if ((status == SDP_SUCCESS || status == SDP_DB_FULL) && p_cb->sdp.num_recs && + sdp_parsing_ok) { + result = true; + } else { + APPL_TRACE_WARNING( + "SDP Failed sdp_status=%d num_recs=%d sdp_parsing_ok=%d ", status, + p_cb->sdp.num_recs, sdp_parsing_ok); + } + + p_cb->sdp_oper = BTA_HL_SDP_OP_NONE; + + switch (sdp_oper) { + case BTA_HL_SDP_OP_CCH_INIT: + case BTA_HL_SDP_OP_SDP_QUERY_NEW: + case BTA_HL_SDP_OP_SDP_QUERY_CURRENT: + + /* send result in event back to BTA */ + p_cch_buf = (tBTA_HL_CCH_SDP*)osi_malloc(sizeof(tBTA_HL_CCH_SDP)); + if (result) { + if (sdp_oper == BTA_HL_SDP_OP_CCH_INIT) { + event = BTA_HL_CCH_SDP_OK_EVT; + if (p_cb->close_pending) event = BTA_HL_CCH_SDP_FAIL_EVT; + } else { + event = BTA_HL_SDP_QUERY_OK_EVT; + } + } else { + if (sdp_oper == BTA_HL_SDP_OP_CCH_INIT) + event = BTA_HL_CCH_SDP_FAIL_EVT; + else + event = BTA_HL_SDP_QUERY_FAIL_EVT; + } + p_cch_buf->hdr.event = event; + + p_cch_buf->app_idx = app_idx; + p_cch_buf->mcl_idx = mcl_idx; + p_cch_buf->release_mcl_cb = false; + if (sdp_oper == BTA_HL_SDP_OP_SDP_QUERY_NEW) + p_cch_buf->release_mcl_cb = true; + + bta_sys_sendmsg(p_cch_buf); + break; + case BTA_HL_SDP_OP_DCH_OPEN_INIT: + case BTA_HL_SDP_OP_DCH_RECONNECT_INIT: + p_dch_buf = (tBTA_HL_DCH_SDP*)osi_malloc(sizeof(tBTA_HL_DCH_SDP)); + p_dch_buf->hdr.event = BTA_HL_DCH_SDP_FAIL_EVT; + p_dch_buf->app_idx = app_idx; + p_dch_buf->mcl_idx = mcl_idx; + p_dch_buf->mdl_idx = mdl_idx; + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + if (p_dcb->abort_oper & BTA_HL_ABORT_PENDING_MASK) { + p_dcb->abort_oper &= ~BTA_HL_ABORT_PENDING_MASK; + result = false; + } + if (result) { + if (sdp_oper == BTA_HL_SDP_OP_DCH_OPEN_INIT) { + if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { + p_dch_buf->hdr.event = BTA_HL_DCH_ECHO_TEST_EVT; + } else { + p_dch_buf->hdr.event = BTA_HL_DCH_OPEN_EVT; + } + } else { + p_dch_buf->hdr.event = BTA_HL_DCH_RECONNECT_EVT; + } + } + bta_sys_sendmsg(p_dch_buf); + break; + default: + break; + } } - /****************************************************************************** * * Function bta_hl_sdp_cback0 @@ -1936,14 +1655,10 @@ static void bta_hl_sdp_cback(uint8_t sdp_oper, uint8_t app_idx, uint8_t mcl_idx, * Returns void. * *****************************************************************************/ -static void bta_hl_sdp_cback0(uint16_t status) -{ - bta_hl_sdp_cback(bta_hl_cb.scb[0].sdp_oper, - bta_hl_cb.scb[0].app_idx, - bta_hl_cb.scb[0].mcl_idx, - bta_hl_cb.scb[0].mdl_idx, - status); - bta_hl_deallocate_spd_cback(0); +static void bta_hl_sdp_cback0(uint16_t status) { + bta_hl_sdp_cback(bta_hl_cb.scb[0].sdp_oper, bta_hl_cb.scb[0].app_idx, + bta_hl_cb.scb[0].mcl_idx, bta_hl_cb.scb[0].mdl_idx, status); + bta_hl_deallocate_spd_cback(0); } /****************************************************************************** @@ -1957,14 +1672,10 @@ static void bta_hl_sdp_cback0(uint16_t status) * Returns void. * *****************************************************************************/ -static void bta_hl_sdp_cback1(uint16_t status) -{ - bta_hl_sdp_cback(bta_hl_cb.scb[1].sdp_oper, - bta_hl_cb.scb[1].app_idx, - bta_hl_cb.scb[1].mcl_idx, - bta_hl_cb.scb[1].mdl_idx, - status); - bta_hl_deallocate_spd_cback(1); +static void bta_hl_sdp_cback1(uint16_t status) { + bta_hl_sdp_cback(bta_hl_cb.scb[1].sdp_oper, bta_hl_cb.scb[1].app_idx, + bta_hl_cb.scb[1].mcl_idx, bta_hl_cb.scb[1].mdl_idx, status); + bta_hl_deallocate_spd_cback(1); } /****************************************************************************** @@ -1976,14 +1687,10 @@ static void bta_hl_sdp_cback1(uint16_t status) * Returns void. * *****************************************************************************/ -static void bta_hl_sdp_cback2(uint16_t status) -{ - bta_hl_sdp_cback(bta_hl_cb.scb[2].sdp_oper, - bta_hl_cb.scb[2].app_idx, - bta_hl_cb.scb[2].mcl_idx, - bta_hl_cb.scb[2].mdl_idx, - status); - bta_hl_deallocate_spd_cback(2); +static void bta_hl_sdp_cback2(uint16_t status) { + bta_hl_sdp_cback(bta_hl_cb.scb[2].sdp_oper, bta_hl_cb.scb[2].app_idx, + bta_hl_cb.scb[2].mcl_idx, bta_hl_cb.scb[2].mdl_idx, status); + bta_hl_deallocate_spd_cback(2); } /****************************************************************************** @@ -1995,14 +1702,10 @@ static void bta_hl_sdp_cback2(uint16_t status) * Returns void. * *****************************************************************************/ -static void bta_hl_sdp_cback3(uint16_t status) -{ - bta_hl_sdp_cback(bta_hl_cb.scb[3].sdp_oper, - bta_hl_cb.scb[3].app_idx, - bta_hl_cb.scb[3].mcl_idx, - bta_hl_cb.scb[3].mdl_idx, - status); - bta_hl_deallocate_spd_cback(3); +static void bta_hl_sdp_cback3(uint16_t status) { + bta_hl_sdp_cback(bta_hl_cb.scb[3].sdp_oper, bta_hl_cb.scb[3].app_idx, + bta_hl_cb.scb[3].mcl_idx, bta_hl_cb.scb[3].mdl_idx, status); + bta_hl_deallocate_spd_cback(3); } /****************************************************************************** @@ -2016,14 +1719,10 @@ static void bta_hl_sdp_cback3(uint16_t status) * Returns void. * *****************************************************************************/ -static void bta_hl_sdp_cback4(uint16_t status) -{ - bta_hl_sdp_cback(bta_hl_cb.scb[4].sdp_oper, - bta_hl_cb.scb[4].app_idx, - bta_hl_cb.scb[4].mcl_idx, - bta_hl_cb.scb[4].mdl_idx, - status); - bta_hl_deallocate_spd_cback(4); +static void bta_hl_sdp_cback4(uint16_t status) { + bta_hl_sdp_cback(bta_hl_cb.scb[4].sdp_oper, bta_hl_cb.scb[4].app_idx, + bta_hl_cb.scb[4].mcl_idx, bta_hl_cb.scb[4].mdl_idx, status); + bta_hl_deallocate_spd_cback(4); } /****************************************************************************** @@ -2037,14 +1736,10 @@ static void bta_hl_sdp_cback4(uint16_t status) * Returns void. * *****************************************************************************/ -static void bta_hl_sdp_cback5(uint16_t status) -{ - bta_hl_sdp_cback(bta_hl_cb.scb[5].sdp_oper, - bta_hl_cb.scb[5].app_idx, - bta_hl_cb.scb[5].mcl_idx, - bta_hl_cb.scb[5].mdl_idx, - status); - bta_hl_deallocate_spd_cback(5); +static void bta_hl_sdp_cback5(uint16_t status) { + bta_hl_sdp_cback(bta_hl_cb.scb[5].sdp_oper, bta_hl_cb.scb[5].app_idx, + bta_hl_cb.scb[5].mcl_idx, bta_hl_cb.scb[5].mdl_idx, status); + bta_hl_deallocate_spd_cback(5); } /****************************************************************************** @@ -2056,17 +1751,12 @@ static void bta_hl_sdp_cback5(uint16_t status) * Returns void. * *****************************************************************************/ -static void bta_hl_sdp_cback6(uint16_t status) -{ - bta_hl_sdp_cback(bta_hl_cb.scb[6].sdp_oper, - bta_hl_cb.scb[6].app_idx, - bta_hl_cb.scb[6].mcl_idx, - bta_hl_cb.scb[6].mdl_idx, - status); - bta_hl_deallocate_spd_cback(6); +static void bta_hl_sdp_cback6(uint16_t status) { + bta_hl_sdp_cback(bta_hl_cb.scb[6].sdp_oper, bta_hl_cb.scb[6].app_idx, + bta_hl_cb.scb[6].mcl_idx, bta_hl_cb.scb[6].mdl_idx, status); + bta_hl_deallocate_spd_cback(6); } - /******************************************************************************* * * Function bta_hl_deallocate_spd_cback @@ -2077,17 +1767,14 @@ static void bta_hl_sdp_cback6(uint16_t status) * false not found * ******************************************************************************/ -void bta_hl_deallocate_spd_cback(uint8_t sdp_cback_idx) -{ - tBTA_HL_SDP_CB *p_spd_cb = &bta_hl_cb.scb[sdp_cback_idx]; +void bta_hl_deallocate_spd_cback(uint8_t sdp_cback_idx) { + tBTA_HL_SDP_CB* p_spd_cb = &bta_hl_cb.scb[sdp_cback_idx]; - memset(p_spd_cb, 0, sizeof(tBTA_HL_SDP_CB)); + memset(p_spd_cb, 0, sizeof(tBTA_HL_SDP_CB)); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_deallocate_spd_cback index=%d", sdp_cback_idx); + APPL_TRACE_DEBUG("bta_hl_deallocate_spd_cback index=%d", sdp_cback_idx); #endif - - } /******************************************************************************* @@ -2101,48 +1788,39 @@ void bta_hl_deallocate_spd_cback(uint8_t sdp_cback_idx) * false not found * ******************************************************************************/ -tSDP_DISC_CMPL_CB *bta_hl_allocate_spd_cback(tBTA_HL_SDP_OPER sdp_oper, uint8_t app_idx, uint8_t mcl_idx, +tSDP_DISC_CMPL_CB* bta_hl_allocate_spd_cback(tBTA_HL_SDP_OPER sdp_oper, + uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - uint8_t *p_sdp_cback_idx) -{ - uint8_t i; - tSDP_DISC_CMPL_CB *p_cbcak=NULL; - - - for (i=0; i < BTA_HL_NUM_SDP_CBACKS ; i ++) - { - if (!bta_hl_cb.scb[i].in_use) - { - p_cbcak = bta_hl_sdp_cback_arr[i]; - bta_hl_cb.scb[i].in_use = true; - bta_hl_cb.scb[i].sdp_oper = sdp_oper; - bta_hl_cb.scb[i].app_idx = app_idx; - bta_hl_cb.scb[i].mcl_idx = mcl_idx; - bta_hl_cb.scb[i].mdl_idx = mdl_idx; - *p_sdp_cback_idx = i; - break; - } - } - - if (i == BTA_HL_NUM_SDP_CBACKS) - { - APPL_TRACE_WARNING("No scb is available to allocate") - } - else - { + uint8_t* p_sdp_cback_idx) { + uint8_t i; + tSDP_DISC_CMPL_CB* p_cbcak = NULL; + + for (i = 0; i < BTA_HL_NUM_SDP_CBACKS; i++) { + if (!bta_hl_cb.scb[i].in_use) { + p_cbcak = bta_hl_sdp_cback_arr[i]; + bta_hl_cb.scb[i].in_use = true; + bta_hl_cb.scb[i].sdp_oper = sdp_oper; + bta_hl_cb.scb[i].app_idx = app_idx; + bta_hl_cb.scb[i].mcl_idx = mcl_idx; + bta_hl_cb.scb[i].mdl_idx = mdl_idx; + *p_sdp_cback_idx = i; + break; + } + } + + if (i == BTA_HL_NUM_SDP_CBACKS) { + APPL_TRACE_WARNING("No scb is available to allocate") + } else { #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_allocate_spd_cback cback_idx=%d ",i ); + APPL_TRACE_DEBUG("bta_hl_allocate_spd_cback cback_idx=%d ", i); APPL_TRACE_DEBUG("sdp_oper=%d, app_idx=%d, mcl_idx=%d, mdl_idx=%d", - bta_hl_cb.scb[i].sdp_oper, - bta_hl_cb.scb[i].app_idx, - bta_hl_cb.scb[i].mcl_idx, - bta_hl_cb.scb[i].mdl_idx ); + bta_hl_cb.scb[i].sdp_oper, bta_hl_cb.scb[i].app_idx, + bta_hl_cb.scb[i].mcl_idx, bta_hl_cb.scb[i].mdl_idx); #endif - } - return p_cbcak; + } + return p_cbcak; } - /******************************************************************************* * * Function bta_hl_init_sdp @@ -2152,55 +1830,56 @@ tSDP_DISC_CMPL_CB *bta_hl_allocate_spd_cback(tBTA_HL_SDP_OPER sdp_oper, uint8_t * Returns void * ******************************************************************************/ -tBTA_HL_STATUS bta_hl_init_sdp(tBTA_HL_SDP_OPER sdp_oper, uint8_t app_idx, uint8_t mcl_idx, - uint8_t mdl_idx) -{ - tBTA_HL_MCL_CB *p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tSDP_UUID uuid_list; - uint16_t attr_list[BTA_HL_NUM_SRCH_ATTR]; - uint16_t num_attrs = BTA_HL_NUM_SRCH_ATTR; - tBTA_HL_STATUS status; - uint8_t sdp_cback_idx; +tBTA_HL_STATUS bta_hl_init_sdp(tBTA_HL_SDP_OPER sdp_oper, uint8_t app_idx, + uint8_t mcl_idx, uint8_t mdl_idx) { + tBTA_HL_MCL_CB* p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tSDP_UUID uuid_list; + uint16_t attr_list[BTA_HL_NUM_SRCH_ATTR]; + uint16_t num_attrs = BTA_HL_NUM_SRCH_ATTR; + tBTA_HL_STATUS status; + uint8_t sdp_cback_idx; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_init_sdp sdp_oper=%d app_idx=%d mcl_idx=%d, mdl_idx=%d", - sdp_oper, app_idx, mcl_idx, mdl_idx); + APPL_TRACE_DEBUG( + "bta_hl_init_sdp sdp_oper=%d app_idx=%d mcl_idx=%d, mdl_idx=%d", sdp_oper, + app_idx, mcl_idx, mdl_idx); #endif - if ((p_cb->sdp_cback = bta_hl_allocate_spd_cback(sdp_oper, app_idx, mcl_idx, mdl_idx, &sdp_cback_idx)) != NULL) - { - if (p_cb->p_db == NULL) - (p_cb->p_db = (tSDP_DISCOVERY_DB *)osi_malloc(BTA_HL_DISC_SIZE)); - attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; - attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; - attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; - attr_list[3] = ATTR_ID_ADDITION_PROTO_DESC_LISTS; - attr_list[4] = ATTR_ID_SERVICE_NAME; - attr_list[5] = ATTR_ID_SERVICE_DESCRIPTION; - attr_list[6] = ATTR_ID_PROVIDER_NAME; - attr_list[7] = ATTR_ID_HDP_SUP_FEAT_LIST; - attr_list[8] = ATTR_ID_HDP_DATA_EXCH_SPEC; - attr_list[9] = ATTR_ID_HDP_MCAP_SUP_PROC; - - uuid_list.len = LEN_UUID_16; - uuid_list.uu.uuid16 = UUID_SERVCLASS_HDP_PROFILE; - SDP_InitDiscoveryDb(p_cb->p_db, BTA_HL_DISC_SIZE, 1, &uuid_list, num_attrs, attr_list); - - if (!SDP_ServiceSearchAttributeRequest(p_cb->bd_addr, p_cb->p_db, p_cb->sdp_cback)) - { - status = BTA_HL_STATUS_FAIL; - } else { - status = BTA_HL_STATUS_OK; - } + if ((p_cb->sdp_cback = bta_hl_allocate_spd_cback( + sdp_oper, app_idx, mcl_idx, mdl_idx, &sdp_cback_idx)) != NULL) { + if (p_cb->p_db == NULL) + (p_cb->p_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_HL_DISC_SIZE)); + attr_list[0] = ATTR_ID_SERVICE_CLASS_ID_LIST; + attr_list[1] = ATTR_ID_PROTOCOL_DESC_LIST; + attr_list[2] = ATTR_ID_BT_PROFILE_DESC_LIST; + attr_list[3] = ATTR_ID_ADDITION_PROTO_DESC_LISTS; + attr_list[4] = ATTR_ID_SERVICE_NAME; + attr_list[5] = ATTR_ID_SERVICE_DESCRIPTION; + attr_list[6] = ATTR_ID_PROVIDER_NAME; + attr_list[7] = ATTR_ID_HDP_SUP_FEAT_LIST; + attr_list[8] = ATTR_ID_HDP_DATA_EXCH_SPEC; + attr_list[9] = ATTR_ID_HDP_MCAP_SUP_PROC; + + uuid_list.len = LEN_UUID_16; + uuid_list.uu.uuid16 = UUID_SERVCLASS_HDP_PROFILE; + SDP_InitDiscoveryDb(p_cb->p_db, BTA_HL_DISC_SIZE, 1, &uuid_list, num_attrs, + attr_list); + + if (!SDP_ServiceSearchAttributeRequest(p_cb->bd_addr, p_cb->p_db, + p_cb->sdp_cback)) { + status = BTA_HL_STATUS_FAIL; } else { - status = BTA_HL_STATUS_SDP_NO_RESOURCE; + status = BTA_HL_STATUS_OK; } + } else { + status = BTA_HL_STATUS_SDP_NO_RESOURCE; + } - if (status != BTA_HL_STATUS_OK) { - osi_free_and_reset((void **)&p_cb->p_db); - if (status != BTA_HL_STATUS_SDP_NO_RESOURCE) - bta_hl_deallocate_spd_cback(sdp_cback_idx); - } + if (status != BTA_HL_STATUS_OK) { + osi_free_and_reset((void**)&p_cb->p_db); + if (status != BTA_HL_STATUS_SDP_NO_RESOURCE) + bta_hl_deallocate_spd_cback(sdp_cback_idx); + } - return status; + return status; } /******************************************************************************* @@ -2212,28 +1891,25 @@ tBTA_HL_STATUS bta_hl_init_sdp(tBTA_HL_SDP_OPER sdp_oper, uint8_t app_idx, uint8 * Returns void * ******************************************************************************/ -void bta_hl_cch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); +void bta_hl_cch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_cch_init_sdp"); + APPL_TRACE_DEBUG("bta_hl_cch_init_sdp"); #endif - if ( p_cb->sdp_oper == BTA_HL_SDP_OP_NONE) - { - p_cb->app_id = p_data->api_cch_open.app_id; - p_cb->sdp_oper = BTA_HL_SDP_OP_CCH_INIT; - - if (bta_hl_init_sdp( p_cb->sdp_oper, app_idx, mcl_idx, 0xFF) != BTA_HL_STATUS_OK) - { - p_cb->sdp_oper = BTA_HL_SDP_OP_NONE; - bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_SDP_FAIL_EVT, p_data); - } - } - else - { - APPL_TRACE_ERROR("SDP in use"); - bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_SDP_FAIL_EVT, p_data); - } + if (p_cb->sdp_oper == BTA_HL_SDP_OP_NONE) { + p_cb->app_id = p_data->api_cch_open.app_id; + p_cb->sdp_oper = BTA_HL_SDP_OP_CCH_INIT; + + if (bta_hl_init_sdp(p_cb->sdp_oper, app_idx, mcl_idx, 0xFF) != + BTA_HL_STATUS_OK) { + p_cb->sdp_oper = BTA_HL_SDP_OP_NONE; + bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_SDP_FAIL_EVT, p_data); + } + } else { + APPL_TRACE_ERROR("SDP in use"); + bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_SDP_FAIL_EVT, p_data); + } } /******************************************************************************* @@ -2245,33 +1921,28 @@ void bta_hl_cch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data * Returns void * ******************************************************************************/ -void bta_hl_cch_mca_open(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - uint8_t sdp_idx; +void bta_hl_cch_mca_open(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + uint8_t sdp_idx; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_cch_mca_open"); + APPL_TRACE_DEBUG("bta_hl_cch_mca_open"); #endif - if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->req_ctrl_psm, &sdp_idx)) - { - p_mcb->ctrl_psm = p_mcb->sdp.sdp_rec[sdp_idx].ctrl_psm; - p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; - if ( MCA_ConnectReq((tMCA_HANDLE) p_acb->app_handle, - p_mcb->bd_addr, - p_mcb->ctrl_psm , - p_mcb->sec_mask) != MCA_SUCCESS) - { - - bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, p_data); - } - } - else - { - bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, p_data); + if (bta_hl_find_sdp_idx_using_ctrl_psm(&p_mcb->sdp, p_mcb->req_ctrl_psm, + &sdp_idx)) { + p_mcb->ctrl_psm = p_mcb->sdp.sdp_rec[sdp_idx].ctrl_psm; + p_mcb->data_psm = p_mcb->sdp.sdp_rec[sdp_idx].data_psm; + if (MCA_ConnectReq((tMCA_HANDLE)p_acb->app_handle, p_mcb->bd_addr, + p_mcb->ctrl_psm, p_mcb->sec_mask) != MCA_SUCCESS) { + bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, + p_data); } + } else { + bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, p_data); + } } /******************************************************************************* @@ -2283,33 +1954,31 @@ void bta_hl_cch_mca_open(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data * Returns void * ******************************************************************************/ -void bta_hl_cch_mca_close(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); +void bta_hl_cch_mca_close(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_cch_mca_close mcl_handle=%d", p_mcb->mcl_handle); + APPL_TRACE_DEBUG("bta_hl_cch_mca_close mcl_handle=%d", p_mcb->mcl_handle); #endif - if (p_mcb->sdp_oper != BTA_HL_SDP_OP_CCH_INIT) - { - if(p_mcb->mcl_handle) - { - if ( MCA_DisconnectReq((tMCA_HANDLE) p_mcb->mcl_handle) != MCA_SUCCESS) - { - bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, p_data); - } - } - else - { - p_mcb->close_pending = true; - APPL_TRACE_DEBUG("No valid mcl_handle to stop the CCH setup now so wait until CCH is up then close it" ); - } - } - else - { - p_mcb->close_pending = true; - APPL_TRACE_DEBUG("can not stop the CCH setup becasue SDP is in progress so wait until it is done" ); - } + if (p_mcb->sdp_oper != BTA_HL_SDP_OP_CCH_INIT) { + if (p_mcb->mcl_handle) { + if (MCA_DisconnectReq((tMCA_HANDLE)p_mcb->mcl_handle) != MCA_SUCCESS) { + bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, + p_data); + } + } else { + p_mcb->close_pending = true; + APPL_TRACE_DEBUG( + "No valid mcl_handle to stop the CCH setup now so wait until CCH is " + "up then close it"); + } + } else { + p_mcb->close_pending = true; + APPL_TRACE_DEBUG( + "can not stop the CCH setup becasue SDP is in progress so wait until " + "it is done"); + } } /******************************************************************************* @@ -2321,58 +1990,54 @@ void bta_hl_cch_mca_close(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_dat * Returns void * ******************************************************************************/ -void bta_hl_cch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - - tBTA_HL evt_data; - tBTA_HL_EVT event; - bool send_evt=true; +void bta_hl_cch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + + tBTA_HL evt_data; + tBTA_HL_EVT event; + bool send_evt = true; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_cch_close_cmpl"); + APPL_TRACE_DEBUG("bta_hl_cch_close_cmpl"); #endif - bta_sys_conn_close(BTA_ID_HL, p_acb->app_id, p_mcb->bd_addr); - - if (p_mcb->cch_oper == BTA_HL_CCH_OP_LOCAL_CLOSE && p_mcb->force_close_local_cch_opening) - { - p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_OPEN; - APPL_TRACE_DEBUG("change cch_oper from BTA_HL_CCH_OP_LOCAL_CLOSE to BTA_HL_CCH_OP_LOCAL_OPEN"); - } - - switch (p_mcb->cch_oper) - { - case BTA_HL_CCH_OP_LOCAL_OPEN: - bta_hl_build_cch_open_cfm(&evt_data,p_mcb->app_id,p_acb->app_handle, - p_mcb->mcl_handle, - p_mcb->bd_addr, - BTA_HL_STATUS_FAIL); - event = BTA_HL_CCH_OPEN_CFM_EVT; - break; - case BTA_HL_CCH_OP_LOCAL_CLOSE: - bta_hl_build_cch_close_cfm(&evt_data, p_acb->app_handle, - p_mcb->mcl_handle, - BTA_HL_STATUS_OK); - event = BTA_HL_CCH_CLOSE_CFM_EVT; - break; - case BTA_HL_CCH_OP_REMOTE_CLOSE: - bta_hl_build_cch_close_ind(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_mcb->intentional_close); - event = BTA_HL_CCH_CLOSE_IND_EVT; - break; - default: - send_evt=false; - break; - } - - - memset(p_mcb, 0 ,sizeof(tBTA_HL_MCL_CB)); - - if (send_evt)p_acb->p_cback(event,(tBTA_HL *) &evt_data ); - - bta_hl_check_deregistration(app_idx, p_data); + bta_sys_conn_close(BTA_ID_HL, p_acb->app_id, p_mcb->bd_addr); + + if (p_mcb->cch_oper == BTA_HL_CCH_OP_LOCAL_CLOSE && + p_mcb->force_close_local_cch_opening) { + p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_OPEN; + APPL_TRACE_DEBUG( + "change cch_oper from BTA_HL_CCH_OP_LOCAL_CLOSE to " + "BTA_HL_CCH_OP_LOCAL_OPEN"); + } + + switch (p_mcb->cch_oper) { + case BTA_HL_CCH_OP_LOCAL_OPEN: + bta_hl_build_cch_open_cfm(&evt_data, p_mcb->app_id, p_acb->app_handle, + p_mcb->mcl_handle, p_mcb->bd_addr, + BTA_HL_STATUS_FAIL); + event = BTA_HL_CCH_OPEN_CFM_EVT; + break; + case BTA_HL_CCH_OP_LOCAL_CLOSE: + bta_hl_build_cch_close_cfm(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, BTA_HL_STATUS_OK); + event = BTA_HL_CCH_CLOSE_CFM_EVT; + break; + case BTA_HL_CCH_OP_REMOTE_CLOSE: + bta_hl_build_cch_close_ind(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, p_mcb->intentional_close); + event = BTA_HL_CCH_CLOSE_IND_EVT; + break; + default: + send_evt = false; + break; + } + + memset(p_mcb, 0, sizeof(tBTA_HL_MCL_CB)); + + if (send_evt) p_acb->p_cback(event, (tBTA_HL*)&evt_data); + + bta_hl_check_deregistration(app_idx, p_data); } /******************************************************************************* @@ -2384,60 +2049,57 @@ void bta_hl_cch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_da * Returns void * ******************************************************************************/ -void bta_hl_cch_mca_disconnect(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data) -{ - - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb; - uint8_t i; +void bta_hl_cch_mca_disconnect(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb; + uint8_t i; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_cch_mca_disconnect"); + APPL_TRACE_DEBUG("bta_hl_cch_mca_disconnect"); #endif - p_mcb->intentional_close = false; - if (p_data->mca_evt.mca_data.disconnect_ind.reason == L2CAP_DISC_OK) - { - p_mcb->intentional_close = true; - } - - for (i=0; i< BTA_HL_NUM_MDLS_PER_MCL; i++) - { - p_dcb= BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, i); - if (p_dcb->in_use && (p_dcb->dch_state != BTA_HL_DCH_IDLE_ST)) - { - if (p_mcb->cch_oper == BTA_HL_CCH_OP_LOCAL_CLOSE ) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, i, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, i, BTA_HL_MCA_CLOSE_IND_EVT, p_data); - } - } - } - bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, p_data); + p_mcb->intentional_close = false; + if (p_data->mca_evt.mca_data.disconnect_ind.reason == L2CAP_DISC_OK) { + p_mcb->intentional_close = true; + } + + for (i = 0; i < BTA_HL_NUM_MDLS_PER_MCL; i++) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, i); + if (p_dcb->in_use && (p_dcb->dch_state != BTA_HL_DCH_IDLE_ST)) { + if (p_mcb->cch_oper == BTA_HL_CCH_OP_LOCAL_CLOSE) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, i, BTA_HL_DCH_CLOSE_CMPL_EVT, + p_data); + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, i, BTA_HL_MCA_CLOSE_IND_EVT, + p_data); + } + } + } + bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_CMPL_EVT, p_data); } /******************************************************************************* * * Function bta_hl_cch_mca_disc_open * - * Description Action routine for disconnect the just opened Control channel + * Description Action routine for disconnect the just opened Control + *channel * * Returns void * ******************************************************************************/ -void bta_hl_cch_mca_disc_open(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); +void bta_hl_cch_mca_disc_open(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_cch_mca_disc_open mcl_handle=0x%x close_pending=%d", p_data->mca_evt.mcl_handle, p_mcb->close_pending ); + APPL_TRACE_DEBUG("bta_hl_cch_mca_disc_open mcl_handle=0x%x close_pending=%d", + p_data->mca_evt.mcl_handle, p_mcb->close_pending); #endif - p_mcb->close_pending = false; - p_mcb->mcl_handle = p_data->mca_evt.mcl_handle; - bta_hl_cch_mca_close(app_idx, mcl_idx, p_data); + p_mcb->close_pending = false; + p_mcb->mcl_handle = p_data->mca_evt.mcl_handle; + bta_hl_cch_mca_close(app_idx, mcl_idx, p_data); } /******************************************************************************* @@ -2449,17 +2111,16 @@ void bta_hl_cch_mca_disc_open(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p * Returns void * ******************************************************************************/ -void bta_hl_cch_mca_rsp_tout(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data) -{ - - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); +void bta_hl_cch_mca_rsp_tout(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_cch_mca_rsp_tout"); + APPL_TRACE_DEBUG("bta_hl_cch_mca_rsp_tout"); #endif - p_mcb->rsp_tout = true; + p_mcb->rsp_tout = true; - bta_hl_check_cch_close(app_idx,mcl_idx,p_data,true); + bta_hl_check_cch_close(app_idx, mcl_idx, p_data, true); } /******************************************************************************* @@ -2471,45 +2132,43 @@ void bta_hl_cch_mca_rsp_tout(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_ * Returns void * ******************************************************************************/ -void bta_hl_cch_mca_connect(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL evt_data; - tBTA_HL_EVT event; - bool send_event=true; +void bta_hl_cch_mca_connect(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL evt_data; + tBTA_HL_EVT event; + bool send_event = true; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_cch_mca_connect mcl_handle=%d ", p_data->mca_evt.mcl_handle); + APPL_TRACE_DEBUG("bta_hl_cch_mca_connect mcl_handle=%d ", + p_data->mca_evt.mcl_handle); #endif - p_mcb->mcl_handle = p_data->mca_evt.mcl_handle; - bdcpy(p_mcb->bd_addr, p_data->mca_evt.mca_data.connect_ind.bd_addr); - p_mcb->cch_mtu = p_data->mca_evt.mca_data.connect_ind.mtu; - - bta_sys_conn_open(BTA_ID_HL, p_acb->app_id, p_mcb->bd_addr); - switch (p_mcb->cch_oper) - { - case BTA_HL_CCH_OP_LOCAL_OPEN: - bta_hl_build_cch_open_cfm(&evt_data, p_mcb->app_id,p_acb->app_handle, - p_mcb->mcl_handle, - p_mcb->bd_addr, - BTA_HL_STATUS_OK); - event = BTA_HL_CCH_OPEN_CFM_EVT; - break; - case BTA_HL_CCH_OP_REMOTE_OPEN: - bta_hl_build_cch_open_ind(&evt_data, p_acb->app_handle, - p_mcb->mcl_handle, - p_mcb->bd_addr); - event = BTA_HL_CCH_OPEN_IND_EVT; - break; - default: - send_event = false; - break; - } - - p_mcb->cch_oper = BTA_HL_CCH_OP_NONE; - if (send_event) p_acb->p_cback(event,(tBTA_HL *) &evt_data ); + p_mcb->mcl_handle = p_data->mca_evt.mcl_handle; + bdcpy(p_mcb->bd_addr, p_data->mca_evt.mca_data.connect_ind.bd_addr); + p_mcb->cch_mtu = p_data->mca_evt.mca_data.connect_ind.mtu; + + bta_sys_conn_open(BTA_ID_HL, p_acb->app_id, p_mcb->bd_addr); + switch (p_mcb->cch_oper) { + case BTA_HL_CCH_OP_LOCAL_OPEN: + bta_hl_build_cch_open_cfm(&evt_data, p_mcb->app_id, p_acb->app_handle, + p_mcb->mcl_handle, p_mcb->bd_addr, + BTA_HL_STATUS_OK); + event = BTA_HL_CCH_OPEN_CFM_EVT; + break; + case BTA_HL_CCH_OP_REMOTE_OPEN: + bta_hl_build_cch_open_ind(&evt_data, p_acb->app_handle, p_mcb->mcl_handle, + p_mcb->bd_addr); + event = BTA_HL_CCH_OPEN_IND_EVT; + break; + default: + send_event = false; + break; + } + + p_mcb->cch_oper = BTA_HL_CCH_OP_NONE; + if (send_event) p_acb->p_cback(event, (tBTA_HL*)&evt_data); } /******************************************************************************* @@ -2521,87 +2180,85 @@ void bta_hl_cch_mca_connect(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_d * Returns void * ******************************************************************************/ -void bta_hl_mcap_ctrl_cback (tMCA_HANDLE handle, tMCA_CL mcl, uint8_t event, - tMCA_CTRL *p_data) -{ - bool send_event=true; - uint16_t mca_event; +void bta_hl_mcap_ctrl_cback(tMCA_HANDLE handle, tMCA_CL mcl, uint8_t event, + tMCA_CTRL* p_data) { + bool send_event = true; + uint16_t mca_event; #if (BTA_HL_DEBUG == TRUE) #if (BT_TRACE_VERBOSE == TRUE) - APPL_TRACE_EVENT("bta_hl_mcap_ctrl_cback event[%s]",bta_hl_mcap_evt_code(event)); + APPL_TRACE_EVENT("bta_hl_mcap_ctrl_cback event[%s]", + bta_hl_mcap_evt_code(event)); #else - APPL_TRACE_EVENT("bta_hl_mcap_ctrl_cback event[0x%02x]", event); + APPL_TRACE_EVENT("bta_hl_mcap_ctrl_cback event[0x%02x]", event); #endif #endif - switch (event) - { - - case MCA_CREATE_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_CREATE_IND_EVT; - break; - case MCA_CREATE_CFM_EVT: - mca_event = (uint16_t) BTA_HL_MCA_CREATE_CFM_EVT; - break; - case MCA_RECONNECT_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_RECONNECT_IND_EVT; - break; - case MCA_RECONNECT_CFM_EVT: - mca_event = (uint16_t) BTA_HL_MCA_RECONNECT_CFM_EVT; - break; - case MCA_ABORT_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_ABORT_IND_EVT; - break; - case MCA_ABORT_CFM_EVT: - mca_event = (uint16_t) BTA_HL_MCA_ABORT_CFM_EVT; - break; - case MCA_DELETE_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_DELETE_IND_EVT; - break; - case MCA_DELETE_CFM_EVT: - mca_event = (uint16_t) BTA_HL_MCA_DELETE_CFM_EVT; - break; - case MCA_CONNECT_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_CONNECT_IND_EVT; - break; - case MCA_DISCONNECT_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_DISCONNECT_IND_EVT; - break; - case MCA_OPEN_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_OPEN_IND_EVT; - break; - case MCA_OPEN_CFM_EVT: - mca_event = (uint16_t) BTA_HL_MCA_OPEN_CFM_EVT; - break; - case MCA_CLOSE_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_CLOSE_IND_EVT; - break; - case MCA_CLOSE_CFM_EVT: - mca_event = (uint16_t) BTA_HL_MCA_CLOSE_CFM_EVT; - break; - case MCA_CONG_CHG_EVT: - mca_event = (uint16_t) BTA_HL_MCA_CONG_CHG_EVT; - break; - case MCA_RSP_TOUT_IND_EVT: - mca_event = (uint16_t) BTA_HL_MCA_RSP_TOUT_IND_EVT; - break; - case MCA_ERROR_RSP_EVT: - - default: - send_event=false; - break; - } - - if (send_event) { - tBTA_HL_MCA_EVT * p_msg = - (tBTA_HL_MCA_EVT *)osi_malloc(sizeof(tBTA_HL_MCA_EVT)); - p_msg->hdr.event = mca_event; - p_msg->app_handle = (tBTA_HL_APP_HANDLE) handle; - p_msg->mcl_handle = (tBTA_HL_MCL_HANDLE) mcl; - memcpy(&p_msg->mca_data, p_data, sizeof(tMCA_CTRL)); - bta_sys_sendmsg(p_msg); - } + switch (event) { + case MCA_CREATE_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_CREATE_IND_EVT; + break; + case MCA_CREATE_CFM_EVT: + mca_event = (uint16_t)BTA_HL_MCA_CREATE_CFM_EVT; + break; + case MCA_RECONNECT_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_RECONNECT_IND_EVT; + break; + case MCA_RECONNECT_CFM_EVT: + mca_event = (uint16_t)BTA_HL_MCA_RECONNECT_CFM_EVT; + break; + case MCA_ABORT_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_ABORT_IND_EVT; + break; + case MCA_ABORT_CFM_EVT: + mca_event = (uint16_t)BTA_HL_MCA_ABORT_CFM_EVT; + break; + case MCA_DELETE_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_DELETE_IND_EVT; + break; + case MCA_DELETE_CFM_EVT: + mca_event = (uint16_t)BTA_HL_MCA_DELETE_CFM_EVT; + break; + case MCA_CONNECT_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_CONNECT_IND_EVT; + break; + case MCA_DISCONNECT_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_DISCONNECT_IND_EVT; + break; + case MCA_OPEN_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_OPEN_IND_EVT; + break; + case MCA_OPEN_CFM_EVT: + mca_event = (uint16_t)BTA_HL_MCA_OPEN_CFM_EVT; + break; + case MCA_CLOSE_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_CLOSE_IND_EVT; + break; + case MCA_CLOSE_CFM_EVT: + mca_event = (uint16_t)BTA_HL_MCA_CLOSE_CFM_EVT; + break; + case MCA_CONG_CHG_EVT: + mca_event = (uint16_t)BTA_HL_MCA_CONG_CHG_EVT; + break; + case MCA_RSP_TOUT_IND_EVT: + mca_event = (uint16_t)BTA_HL_MCA_RSP_TOUT_IND_EVT; + break; + case MCA_ERROR_RSP_EVT: + + default: + send_event = false; + break; + } + + if (send_event) { + tBTA_HL_MCA_EVT* p_msg = + (tBTA_HL_MCA_EVT*)osi_malloc(sizeof(tBTA_HL_MCA_EVT)); + p_msg->hdr.event = mca_event; + p_msg->app_handle = (tBTA_HL_APP_HANDLE)handle; + p_msg->mcl_handle = (tBTA_HL_MCL_HANDLE)mcl; + memcpy(&p_msg->mca_data, p_data, sizeof(tMCA_CTRL)); + bta_sys_sendmsg(p_msg); + } } /******************************************************************************* @@ -2613,20 +2270,19 @@ void bta_hl_mcap_ctrl_cback (tMCA_HANDLE handle, tMCA_CL mcl, uint8_t event, * Returns void * ******************************************************************************/ -void bta_hl_mcap_data_cback (tMCA_DL mdl, BT_HDR *p_pkt) -{ - uint8_t app_idx, mcl_idx, mdl_idx; - if (bta_hl_find_mdl_idx_using_handle ((tBTA_HL_MDL_HANDLE)mdl, &app_idx, &mcl_idx, &mdl_idx)) - { - tBTA_HL_MCA_RCV_DATA_EVT *p_msg = - (tBTA_HL_MCA_RCV_DATA_EVT *)osi_malloc(sizeof(tBTA_HL_MCA_RCV_DATA_EVT)); - p_msg->hdr.event = BTA_HL_MCA_RCV_DATA_EVT; - p_msg->app_idx = app_idx; - p_msg->mcl_idx = mcl_idx; - p_msg->mdl_idx = mdl_idx; - p_msg->p_pkt = p_pkt; - bta_sys_sendmsg(p_msg); - } +void bta_hl_mcap_data_cback(tMCA_DL mdl, BT_HDR* p_pkt) { + uint8_t app_idx, mcl_idx, mdl_idx; + if (bta_hl_find_mdl_idx_using_handle((tBTA_HL_MDL_HANDLE)mdl, &app_idx, + &mcl_idx, &mdl_idx)) { + tBTA_HL_MCA_RCV_DATA_EVT* p_msg = + (tBTA_HL_MCA_RCV_DATA_EVT*)osi_malloc(sizeof(tBTA_HL_MCA_RCV_DATA_EVT)); + p_msg->hdr.event = BTA_HL_MCA_RCV_DATA_EVT; + p_msg->app_idx = app_idx; + p_msg->mcl_idx = mcl_idx; + p_msg->mdl_idx = mdl_idx; + p_msg->p_pkt = p_pkt; + bta_sys_sendmsg(p_msg); + } } /***************************************************************************** @@ -2643,53 +2299,48 @@ void bta_hl_mcap_data_cback (tMCA_DL mdl, BT_HDR *p_pkt) * Returns char * - event string pointer * ******************************************************************************/ -static char *bta_hl_mcap_evt_code(uint8_t evt_code) -{ - - switch (evt_code) - { - - case MCA_ERROR_RSP_EVT: - return "MCA_ERROR_RSP_EVT"; - case MCA_CREATE_IND_EVT: - return "MCA_CREATE_IND_EVT"; - case MCA_CREATE_CFM_EVT: - return "MCA_CREATE_CFM_EVT"; - case MCA_RECONNECT_IND_EVT: - return "MCA_RECONNECT_IND_EVT"; - case MCA_RECONNECT_CFM_EVT: - return "MCA_RECONNECT_CFM_EVT"; - case MCA_ABORT_IND_EVT: - return "MCA_ABORT_IND_EVT"; - case MCA_ABORT_CFM_EVT: - return "MCA_ABORT_CFM_EVT"; - case MCA_DELETE_IND_EVT: - return "MCA_DELETE_IND_EVT"; - case MCA_DELETE_CFM_EVT: - return "MCA_DELETE_CFM_EVT"; - - case MCA_CONNECT_IND_EVT: - return "MCA_CONNECT_IND_EVT"; - case MCA_DISCONNECT_IND_EVT: - return "MCA_DISCONNECT_IND_EVT"; - case MCA_OPEN_IND_EVT: - return "MCA_OPEN_IND_EVT"; - case MCA_OPEN_CFM_EVT: - return "MCA_OPEN_CFM_EVT"; - case MCA_CLOSE_IND_EVT: - return "MCA_CLOSE_IND_EVT"; - case MCA_CLOSE_CFM_EVT: - return "MCA_CLOSE_CFM_EVT"; - case MCA_CONG_CHG_EVT: - return "MCA_CONG_CHG_EVT"; - case MCA_RSP_TOUT_IND_EVT: - return "MCA_RSP_TOUT_IND_EVT"; - default: - return "Unknown MCAP event code"; - } +static char* bta_hl_mcap_evt_code(uint8_t evt_code) { + switch (evt_code) { + case MCA_ERROR_RSP_EVT: + return "MCA_ERROR_RSP_EVT"; + case MCA_CREATE_IND_EVT: + return "MCA_CREATE_IND_EVT"; + case MCA_CREATE_CFM_EVT: + return "MCA_CREATE_CFM_EVT"; + case MCA_RECONNECT_IND_EVT: + return "MCA_RECONNECT_IND_EVT"; + case MCA_RECONNECT_CFM_EVT: + return "MCA_RECONNECT_CFM_EVT"; + case MCA_ABORT_IND_EVT: + return "MCA_ABORT_IND_EVT"; + case MCA_ABORT_CFM_EVT: + return "MCA_ABORT_CFM_EVT"; + case MCA_DELETE_IND_EVT: + return "MCA_DELETE_IND_EVT"; + case MCA_DELETE_CFM_EVT: + return "MCA_DELETE_CFM_EVT"; + + case MCA_CONNECT_IND_EVT: + return "MCA_CONNECT_IND_EVT"; + case MCA_DISCONNECT_IND_EVT: + return "MCA_DISCONNECT_IND_EVT"; + case MCA_OPEN_IND_EVT: + return "MCA_OPEN_IND_EVT"; + case MCA_OPEN_CFM_EVT: + return "MCA_OPEN_CFM_EVT"; + case MCA_CLOSE_IND_EVT: + return "MCA_CLOSE_IND_EVT"; + case MCA_CLOSE_CFM_EVT: + return "MCA_CLOSE_CFM_EVT"; + case MCA_CONG_CHG_EVT: + return "MCA_CONG_CHG_EVT"; + case MCA_RSP_TOUT_IND_EVT: + return "MCA_RSP_TOUT_IND_EVT"; + default: + return "Unknown MCAP event code"; + } } - /******************************************************************************* * * Function bta_hl_cback_evt_code @@ -2699,61 +2350,55 @@ static char *bta_hl_mcap_evt_code(uint8_t evt_code) * Returns char * - event string pointer * ******************************************************************************/ -static char *bta_hl_cback_evt_code(uint8_t evt_code) -{ - - switch (evt_code) - { - - case BTA_HL_CCH_OPEN_IND_EVT: - return "BTA_HL_CCH_OPEN_IND_EVT"; - case BTA_HL_CCH_OPEN_CFM_EVT: - return "BTA_HL_CCH_OPEN_CFM_EVT"; - case BTA_HL_CCH_CLOSE_IND_EVT: - return "BTA_HL_CCH_CLOSE_IND_EVT"; - case BTA_HL_CCH_CLOSE_CFM_EVT: - return "BTA_HL_CCH_CLOSE_CFM_EVT"; - case BTA_HL_DCH_OPEN_IND_EVT: - return "BTA_HL_DCH_OPEN_IND_EVT"; - case BTA_HL_DCH_OPEN_CFM_EVT: - return "BTA_HL_DCH_OPEN_CFM_EVT"; - case BTA_HL_DCH_CLOSE_IND_EVT: - return "BTA_HL_DCH_CLOSE_IND_EVT"; - case BTA_HL_DCH_CLOSE_CFM_EVT: - return "BTA_HL_DCH_CLOSE_CFM_EVT"; - case BTA_HL_DCH_RCV_DATA_IND_EVT: - return "BTA_HL_DCH_RCV_DATA_IND_EVT"; - case BTA_HL_REGISTER_CFM_EVT: - return "BTA_HL_REGISTER_CFM_EVT"; - case BTA_HL_DEREGISTER_CFM_EVT: - return "BTA_HL_DEREGISTER_CFM_EVT"; - case BTA_HL_DCH_RECONNECT_CFM_EVT: - return "BTA_HL_DCH_RECONNECT_CFM_EVT"; - case BTA_HL_DCH_RECONNECT_IND_EVT: - return "BTA_HL_DCH_RECONNECT_IND_EVT"; - case BTA_HL_DCH_ECHO_TEST_CFM_EVT: - return "BTA_HL_DCH_ECHO_TEST_CFM_EVT"; - case BTA_HL_SDP_QUERY_CFM_EVT: - return "BTA_HL_SDP_QUERY_CFM_EVT"; - case BTA_HL_CONG_CHG_IND_EVT: - return "BTA_HL_CONG_CHG_IND_EVT"; - case BTA_HL_DCH_CREATE_IND_EVT: - return "BTA_HL_DCH_CREATE_IND_EVT"; - case BTA_HL_DELETE_MDL_IND_EVT: - return "BTA_HL_DELETE_MDL_IND_EVT"; - case BTA_HL_DELETE_MDL_CFM_EVT: - return "BTA_HL_DELETE_MDL_CFM_EVT"; - case BTA_HL_DCH_ABORT_IND_EVT: - return "BTA_HL_DCH_ABORT_IND_EVT"; - case BTA_HL_DCH_ABORT_CFM_EVT: - return "BTA_HL_DCH_ABORT_CFM_EVT"; - default: - return "Unknown HDP event code"; - } +static char* bta_hl_cback_evt_code(uint8_t evt_code) { + switch (evt_code) { + case BTA_HL_CCH_OPEN_IND_EVT: + return "BTA_HL_CCH_OPEN_IND_EVT"; + case BTA_HL_CCH_OPEN_CFM_EVT: + return "BTA_HL_CCH_OPEN_CFM_EVT"; + case BTA_HL_CCH_CLOSE_IND_EVT: + return "BTA_HL_CCH_CLOSE_IND_EVT"; + case BTA_HL_CCH_CLOSE_CFM_EVT: + return "BTA_HL_CCH_CLOSE_CFM_EVT"; + case BTA_HL_DCH_OPEN_IND_EVT: + return "BTA_HL_DCH_OPEN_IND_EVT"; + case BTA_HL_DCH_OPEN_CFM_EVT: + return "BTA_HL_DCH_OPEN_CFM_EVT"; + case BTA_HL_DCH_CLOSE_IND_EVT: + return "BTA_HL_DCH_CLOSE_IND_EVT"; + case BTA_HL_DCH_CLOSE_CFM_EVT: + return "BTA_HL_DCH_CLOSE_CFM_EVT"; + case BTA_HL_DCH_RCV_DATA_IND_EVT: + return "BTA_HL_DCH_RCV_DATA_IND_EVT"; + case BTA_HL_REGISTER_CFM_EVT: + return "BTA_HL_REGISTER_CFM_EVT"; + case BTA_HL_DEREGISTER_CFM_EVT: + return "BTA_HL_DEREGISTER_CFM_EVT"; + case BTA_HL_DCH_RECONNECT_CFM_EVT: + return "BTA_HL_DCH_RECONNECT_CFM_EVT"; + case BTA_HL_DCH_RECONNECT_IND_EVT: + return "BTA_HL_DCH_RECONNECT_IND_EVT"; + case BTA_HL_DCH_ECHO_TEST_CFM_EVT: + return "BTA_HL_DCH_ECHO_TEST_CFM_EVT"; + case BTA_HL_SDP_QUERY_CFM_EVT: + return "BTA_HL_SDP_QUERY_CFM_EVT"; + case BTA_HL_CONG_CHG_IND_EVT: + return "BTA_HL_CONG_CHG_IND_EVT"; + case BTA_HL_DCH_CREATE_IND_EVT: + return "BTA_HL_DCH_CREATE_IND_EVT"; + case BTA_HL_DELETE_MDL_IND_EVT: + return "BTA_HL_DELETE_MDL_IND_EVT"; + case BTA_HL_DELETE_MDL_CFM_EVT: + return "BTA_HL_DELETE_MDL_CFM_EVT"; + case BTA_HL_DCH_ABORT_IND_EVT: + return "BTA_HL_DCH_ABORT_IND_EVT"; + case BTA_HL_DCH_ABORT_CFM_EVT: + return "BTA_HL_DCH_ABORT_CFM_EVT"; + default: + return "Unknown HDP event code"; + } } - - /******************************************************************************* * * Function bta_hl_dch_oper_code @@ -2763,40 +2408,36 @@ static char *bta_hl_cback_evt_code(uint8_t evt_code) * Returns char * - DCH operation string pointer * ******************************************************************************/ -static char *bta_hl_dch_oper_code(tBTA_HL_DCH_OPER oper_code) -{ - - switch (oper_code) - { - case BTA_HL_DCH_OP_NONE: - return "BTA_HL_DCH_OP_NONE"; - case BTA_HL_DCH_OP_REMOTE_CREATE: - return "BTA_HL_DCH_OP_REMOTE_CREATE"; - case BTA_HL_DCH_OP_LOCAL_OPEN: - return "BTA_HL_DCH_OP_LOCAL_OPEN"; - case BTA_HL_DCH_OP_REMOTE_OPEN: - return "BTA_HL_DCH_OP_REMOTE_OPEN"; - case BTA_HL_DCH_OP_LOCAL_CLOSE: - return "BTA_HL_DCH_OP_LOCAL_CLOSE"; - case BTA_HL_DCH_OP_REMOTE_CLOSE: - return "BTA_HL_DCH_OP_REMOTE_CLOSE"; - case BTA_HL_DCH_OP_LOCAL_DELETE: - return "BTA_HL_DCH_OP_LOCAL_DELETE"; - case BTA_HL_DCH_OP_REMOTE_DELETE: - return "BTA_HL_DCH_OP_REMOTE_DELETE"; - case BTA_HL_DCH_OP_LOCAL_RECONNECT: - return "BTA_HL_DCH_OP_LOCAL_RECONNECT"; - case BTA_HL_DCH_OP_REMOTE_RECONNECT: - return "BTA_HL_DCH_OP_REMOTE_RECONNECT"; - case BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST: - return "BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST"; - case BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT: - return "BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT"; - default: - return "Unknown DCH oper code"; - } +static char* bta_hl_dch_oper_code(tBTA_HL_DCH_OPER oper_code) { + switch (oper_code) { + case BTA_HL_DCH_OP_NONE: + return "BTA_HL_DCH_OP_NONE"; + case BTA_HL_DCH_OP_REMOTE_CREATE: + return "BTA_HL_DCH_OP_REMOTE_CREATE"; + case BTA_HL_DCH_OP_LOCAL_OPEN: + return "BTA_HL_DCH_OP_LOCAL_OPEN"; + case BTA_HL_DCH_OP_REMOTE_OPEN: + return "BTA_HL_DCH_OP_REMOTE_OPEN"; + case BTA_HL_DCH_OP_LOCAL_CLOSE: + return "BTA_HL_DCH_OP_LOCAL_CLOSE"; + case BTA_HL_DCH_OP_REMOTE_CLOSE: + return "BTA_HL_DCH_OP_REMOTE_CLOSE"; + case BTA_HL_DCH_OP_LOCAL_DELETE: + return "BTA_HL_DCH_OP_LOCAL_DELETE"; + case BTA_HL_DCH_OP_REMOTE_DELETE: + return "BTA_HL_DCH_OP_REMOTE_DELETE"; + case BTA_HL_DCH_OP_LOCAL_RECONNECT: + return "BTA_HL_DCH_OP_LOCAL_RECONNECT"; + case BTA_HL_DCH_OP_REMOTE_RECONNECT: + return "BTA_HL_DCH_OP_REMOTE_RECONNECT"; + case BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST: + return "BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST"; + case BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT: + return "BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT"; + default: + return "Unknown DCH oper code"; + } } - -#endif /* Debug Functions */ +#endif /* Debug Functions */ #endif /* HL_INCLUDED */ diff --git a/system/bta/hl/bta_hl_api.cc b/system/bta/hl/bta_hl_api.cc index a8ba0361ffc..93e853c5b84 100644 --- a/system/bta/hl/bta_hl_api.cc +++ b/system/bta/hl/bta_hl_api.cc @@ -37,11 +37,7 @@ * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_hl_reg = -{ - bta_hl_hdl_event, - BTA_HlDisable -}; +static const tBTA_SYS_REG bta_hl_reg = {bta_hl_hdl_event, BTA_HlDisable}; /******************************************************************************* * @@ -57,18 +53,17 @@ static const tBTA_SYS_REG bta_hl_reg = * Returns void * ******************************************************************************/ -void BTA_HlEnable(tBTA_HL_CTRL_CBACK *p_ctrl_cback) -{ - tBTA_HL_API_ENABLE *p_buf = - (tBTA_HL_API_ENABLE *)osi_malloc(sizeof(tBTA_HL_API_ENABLE)); +void BTA_HlEnable(tBTA_HL_CTRL_CBACK* p_ctrl_cback) { + tBTA_HL_API_ENABLE* p_buf = + (tBTA_HL_API_ENABLE*)osi_malloc(sizeof(tBTA_HL_API_ENABLE)); - /* register with BTA system manager */ - bta_sys_register(BTA_ID_HL, &bta_hl_reg); + /* register with BTA system manager */ + bta_sys_register(BTA_ID_HL, &bta_hl_reg); - p_buf->hdr.event = BTA_HL_API_ENABLE_EVT; - p_buf->p_cback = p_ctrl_cback; + p_buf->hdr.event = BTA_HL_API_ENABLE_EVT; + p_buf->p_cback = p_ctrl_cback; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -80,14 +75,13 @@ void BTA_HlEnable(tBTA_HL_CTRL_CBACK *p_ctrl_cback) * Returns void * ******************************************************************************/ -void BTA_HlDisable(void) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_HlDisable(void) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - bta_sys_deregister(BTA_ID_HL); - p_buf->event = BTA_HL_API_DISABLE_EVT; + bta_sys_deregister(BTA_ID_HL); + p_buf->event = BTA_HL_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -104,38 +98,39 @@ void BTA_HlDisable(void) * Returns void * ******************************************************************************/ -void BTA_HlUpdate(uint8_t app_id, tBTA_HL_REG_PARAM *p_reg_param, - bool is_register, tBTA_HL_CBACK *p_cback) -{ - tBTA_HL_API_UPDATE *p_buf = - (tBTA_HL_API_UPDATE *)osi_malloc(sizeof(tBTA_HL_API_UPDATE)); - - APPL_TRACE_DEBUG("%s", __func__); - - p_buf->hdr.event = BTA_HL_API_UPDATE_EVT; - p_buf->app_id = app_id; - p_buf->is_register = is_register; - - if (is_register) { - p_buf->sec_mask = (p_reg_param->sec_mask | BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); - p_buf->p_cback = p_cback; - if (p_reg_param->p_srv_name) - strlcpy(p_buf->srv_name, p_reg_param->p_srv_name, BTA_SERVICE_NAME_LEN); - else - p_buf->srv_name[0] = 0; - - if (p_reg_param->p_srv_desp) - strlcpy(p_buf->srv_desp, p_reg_param->p_srv_desp, BTA_SERVICE_DESP_LEN); - else - p_buf->srv_desp[0] = 0; - - if (p_reg_param->p_provider_name) - strlcpy(p_buf->provider_name, p_reg_param->p_provider_name, BTA_PROVIDER_NAME_LEN); - else - p_buf->provider_name[0] = 0; - } - - bta_sys_sendmsg(p_buf); +void BTA_HlUpdate(uint8_t app_id, tBTA_HL_REG_PARAM* p_reg_param, + bool is_register, tBTA_HL_CBACK* p_cback) { + tBTA_HL_API_UPDATE* p_buf = + (tBTA_HL_API_UPDATE*)osi_malloc(sizeof(tBTA_HL_API_UPDATE)); + + APPL_TRACE_DEBUG("%s", __func__); + + p_buf->hdr.event = BTA_HL_API_UPDATE_EVT; + p_buf->app_id = app_id; + p_buf->is_register = is_register; + + if (is_register) { + p_buf->sec_mask = + (p_reg_param->sec_mask | BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); + p_buf->p_cback = p_cback; + if (p_reg_param->p_srv_name) + strlcpy(p_buf->srv_name, p_reg_param->p_srv_name, BTA_SERVICE_NAME_LEN); + else + p_buf->srv_name[0] = 0; + + if (p_reg_param->p_srv_desp) + strlcpy(p_buf->srv_desp, p_reg_param->p_srv_desp, BTA_SERVICE_DESP_LEN); + else + p_buf->srv_desp[0] = 0; + + if (p_reg_param->p_provider_name) + strlcpy(p_buf->provider_name, p_reg_param->p_provider_name, + BTA_PROVIDER_NAME_LEN); + else + p_buf->provider_name[0] = 0; + } + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -152,34 +147,34 @@ void BTA_HlUpdate(uint8_t app_id, tBTA_HL_REG_PARAM *p_reg_param, * Returns void * ******************************************************************************/ -void BTA_HlRegister(uint8_t app_id, - tBTA_HL_REG_PARAM *p_reg_param, - tBTA_HL_CBACK *p_cback) -{ - tBTA_HL_API_REGISTER *p_buf = - (tBTA_HL_API_REGISTER *)osi_malloc(sizeof(tBTA_HL_API_REGISTER)); - - p_buf->hdr.event = BTA_HL_API_REGISTER_EVT; - p_buf->app_id = app_id; - p_buf->sec_mask = (p_reg_param->sec_mask | BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); - p_buf->p_cback = p_cback; - - if (p_reg_param->p_srv_name) - strlcpy(p_buf->srv_name, p_reg_param->p_srv_name, BTA_SERVICE_NAME_LEN); - else - p_buf->srv_name[0] = 0; - - if (p_reg_param->p_srv_desp) - strlcpy(p_buf->srv_desp, p_reg_param->p_srv_desp, BTA_SERVICE_DESP_LEN); - else - p_buf->srv_desp[0] = 0; - - if (p_reg_param->p_provider_name) - strlcpy(p_buf->provider_name, p_reg_param->p_provider_name, BTA_PROVIDER_NAME_LEN); - else - p_buf->provider_name[0] = 0; - - bta_sys_sendmsg(p_buf); +void BTA_HlRegister(uint8_t app_id, tBTA_HL_REG_PARAM* p_reg_param, + tBTA_HL_CBACK* p_cback) { + tBTA_HL_API_REGISTER* p_buf = + (tBTA_HL_API_REGISTER*)osi_malloc(sizeof(tBTA_HL_API_REGISTER)); + + p_buf->hdr.event = BTA_HL_API_REGISTER_EVT; + p_buf->app_id = app_id; + p_buf->sec_mask = + (p_reg_param->sec_mask | BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); + p_buf->p_cback = p_cback; + + if (p_reg_param->p_srv_name) + strlcpy(p_buf->srv_name, p_reg_param->p_srv_name, BTA_SERVICE_NAME_LEN); + else + p_buf->srv_name[0] = 0; + + if (p_reg_param->p_srv_desp) + strlcpy(p_buf->srv_desp, p_reg_param->p_srv_desp, BTA_SERVICE_DESP_LEN); + else + p_buf->srv_desp[0] = 0; + + if (p_reg_param->p_provider_name) + strlcpy(p_buf->provider_name, p_reg_param->p_provider_name, + BTA_PROVIDER_NAME_LEN); + else + p_buf->provider_name[0] = 0; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -193,23 +188,23 @@ void BTA_HlRegister(uint8_t app_id, * Returns void * ******************************************************************************/ -void BTA_HlDeregister(uint8_t app_id,tBTA_HL_APP_HANDLE app_handle) -{ - tBTA_HL_API_DEREGISTER *p_buf = - (tBTA_HL_API_DEREGISTER *)osi_malloc(sizeof(tBTA_HL_API_DEREGISTER)); +void BTA_HlDeregister(uint8_t app_id, tBTA_HL_APP_HANDLE app_handle) { + tBTA_HL_API_DEREGISTER* p_buf = + (tBTA_HL_API_DEREGISTER*)osi_malloc(sizeof(tBTA_HL_API_DEREGISTER)); - p_buf->hdr.event = BTA_HL_API_DEREGISTER_EVT; - p_buf->app_id = app_id; - p_buf->app_handle = app_handle; + p_buf->hdr.event = BTA_HL_API_DEREGISTER_EVT; + p_buf->app_id = app_id; + p_buf->app_handle = app_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_HlCchOpen * - * Description Open a Control channel connection with the specified BD address + * Description Open a Control channel connection with the specified BD + *address * * Parameters app_handle - Application Handle * p_open_param - parameters for opening a control channel @@ -218,23 +213,25 @@ void BTA_HlDeregister(uint8_t app_id,tBTA_HL_APP_HANDLE app_handle) * * Note: The control PSM value is used to select which * HDP insatnce should be used in case the peer device support - * multiple HDP instances. Also, if the control PSM value is zero - * then the first HDP instance is used for the control channel setup + * multiple HDP instances. Also, if the control PSM value is + *zero + * then the first HDP instance is used for the control channel + *setup ******************************************************************************/ void BTA_HlCchOpen(uint8_t app_id, tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_CCH_OPEN_PARAM *p_open_param) -{ - tBTA_HL_API_CCH_OPEN *p_buf = - (tBTA_HL_API_CCH_OPEN *)osi_malloc(sizeof(tBTA_HL_API_CCH_OPEN)); - - p_buf->hdr.event = BTA_HL_API_CCH_OPEN_EVT; - p_buf->app_id = app_id; - p_buf->app_handle = app_handle; - p_buf->sec_mask = (p_open_param->sec_mask | BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); - bdcpy(p_buf->bd_addr, p_open_param->bd_addr); - p_buf->ctrl_psm = p_open_param->ctrl_psm; - - bta_sys_sendmsg(p_buf); + tBTA_HL_CCH_OPEN_PARAM* p_open_param) { + tBTA_HL_API_CCH_OPEN* p_buf = + (tBTA_HL_API_CCH_OPEN*)osi_malloc(sizeof(tBTA_HL_API_CCH_OPEN)); + + p_buf->hdr.event = BTA_HL_API_CCH_OPEN_EVT; + p_buf->app_id = app_id; + p_buf->app_handle = app_handle; + p_buf->sec_mask = + (p_open_param->sec_mask | BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); + bdcpy(p_buf->bd_addr, p_open_param->bd_addr); + p_buf->ctrl_psm = p_open_param->ctrl_psm; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -249,22 +246,22 @@ void BTA_HlCchOpen(uint8_t app_id, tBTA_HL_APP_HANDLE app_handle, * Returns void * ******************************************************************************/ -void BTA_HlCchClose(tBTA_HL_MCL_HANDLE mcl_handle) -{ - tBTA_HL_API_CCH_CLOSE *p_buf = - (tBTA_HL_API_CCH_CLOSE *)osi_malloc(sizeof(tBTA_HL_API_CCH_CLOSE)); +void BTA_HlCchClose(tBTA_HL_MCL_HANDLE mcl_handle) { + tBTA_HL_API_CCH_CLOSE* p_buf = + (tBTA_HL_API_CCH_CLOSE*)osi_malloc(sizeof(tBTA_HL_API_CCH_CLOSE)); - p_buf->hdr.event = BTA_HL_API_CCH_CLOSE_EVT; - p_buf->mcl_handle = mcl_handle; + p_buf->hdr.event = BTA_HL_API_CCH_CLOSE_EVT; + p_buf->mcl_handle = mcl_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* * * Function BTA_HlDchOpen * - * Description Open a data channel connection with the specified DCH parameters + * Description Open a data channel connection with the specified DCH + *parameters * * Parameters mcl_handle - MCL handle * p_open_param - parameters for opening a data channel @@ -273,20 +270,20 @@ void BTA_HlCchClose(tBTA_HL_MCL_HANDLE mcl_handle) * ******************************************************************************/ void BTA_HlDchOpen(tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_DCH_OPEN_PARAM *p_open_param) -{ - tBTA_HL_API_DCH_OPEN *p_buf = - (tBTA_HL_API_DCH_OPEN *)osi_malloc(sizeof(tBTA_HL_API_DCH_OPEN)); - - p_buf->hdr.event = BTA_HL_API_DCH_OPEN_EVT; - p_buf->mcl_handle = mcl_handle; - p_buf->ctrl_psm = p_open_param->ctrl_psm; - p_buf->local_mdep_id = p_open_param->local_mdep_id; - p_buf->peer_mdep_id = p_open_param->peer_mdep_id; - p_buf->local_cfg = p_open_param->local_cfg; - p_buf->sec_mask = (p_open_param->sec_mask | BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); - - bta_sys_sendmsg(p_buf); + tBTA_HL_DCH_OPEN_PARAM* p_open_param) { + tBTA_HL_API_DCH_OPEN* p_buf = + (tBTA_HL_API_DCH_OPEN*)osi_malloc(sizeof(tBTA_HL_API_DCH_OPEN)); + + p_buf->hdr.event = BTA_HL_API_DCH_OPEN_EVT; + p_buf->mcl_handle = mcl_handle; + p_buf->ctrl_psm = p_open_param->ctrl_psm; + p_buf->local_mdep_id = p_open_param->local_mdep_id; + p_buf->peer_mdep_id = p_open_param->peer_mdep_id; + p_buf->local_cfg = p_open_param->local_cfg; + p_buf->sec_mask = + (p_open_param->sec_mask | BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -302,17 +299,16 @@ void BTA_HlDchOpen(tBTA_HL_MCL_HANDLE mcl_handle, * ******************************************************************************/ void BTA_HlDchReconnect(tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_DCH_RECONNECT_PARAM *p_recon_param) -{ - tBTA_HL_API_DCH_RECONNECT *p_buf = - (tBTA_HL_API_DCH_RECONNECT *)osi_malloc(sizeof(tBTA_HL_API_DCH_RECONNECT)); + tBTA_HL_DCH_RECONNECT_PARAM* p_recon_param) { + tBTA_HL_API_DCH_RECONNECT* p_buf = + (tBTA_HL_API_DCH_RECONNECT*)osi_malloc(sizeof(tBTA_HL_API_DCH_RECONNECT)); - p_buf->hdr.event = BTA_HL_API_DCH_RECONNECT_EVT; - p_buf->mcl_handle = mcl_handle; - p_buf->ctrl_psm = p_recon_param->ctrl_psm; - p_buf->mdl_id = p_recon_param->mdl_id; + p_buf->hdr.event = BTA_HL_API_DCH_RECONNECT_EVT; + p_buf->mcl_handle = mcl_handle; + p_buf->ctrl_psm = p_recon_param->ctrl_psm; + p_buf->mdl_id = p_recon_param->mdl_id; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -326,15 +322,14 @@ void BTA_HlDchReconnect(tBTA_HL_MCL_HANDLE mcl_handle, * Returns void * ******************************************************************************/ -void BTA_HlDchClose(tBTA_HL_MDL_HANDLE mdl_handle) -{ - tBTA_HL_API_DCH_CLOSE *p_buf = - (tBTA_HL_API_DCH_CLOSE *)osi_malloc(sizeof(tBTA_HL_API_DCH_CLOSE)); +void BTA_HlDchClose(tBTA_HL_MDL_HANDLE mdl_handle) { + tBTA_HL_API_DCH_CLOSE* p_buf = + (tBTA_HL_API_DCH_CLOSE*)osi_malloc(sizeof(tBTA_HL_API_DCH_CLOSE)); - p_buf->hdr.event = BTA_HL_API_DCH_CLOSE_EVT; - p_buf->mdl_handle = mdl_handle; + p_buf->hdr.event = BTA_HL_API_DCH_CLOSE_EVT; + p_buf->mdl_handle = mdl_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -350,15 +345,14 @@ void BTA_HlDchClose(tBTA_HL_MDL_HANDLE mdl_handle) * Returns void * ******************************************************************************/ -void BTA_HlDchAbort(tBTA_HL_MCL_HANDLE mcl_handle) -{ - tBTA_HL_API_DCH_ABORT *p_buf = - (tBTA_HL_API_DCH_ABORT *)osi_malloc(sizeof(tBTA_HL_API_DCH_ABORT)); +void BTA_HlDchAbort(tBTA_HL_MCL_HANDLE mcl_handle) { + tBTA_HL_API_DCH_ABORT* p_buf = + (tBTA_HL_API_DCH_ABORT*)osi_malloc(sizeof(tBTA_HL_API_DCH_ABORT)); - p_buf->hdr.event = BTA_HL_API_DCH_ABORT_EVT; - p_buf->mcl_handle = mcl_handle; + p_buf->hdr.event = BTA_HL_API_DCH_ABORT_EVT; + p_buf->mcl_handle = mcl_handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -373,17 +367,15 @@ void BTA_HlDchAbort(tBTA_HL_MCL_HANDLE mcl_handle) * Returns void * ******************************************************************************/ -void BTA_HlSendData(tBTA_HL_MDL_HANDLE mdl_handle, - uint16_t pkt_size) -{ - tBTA_HL_API_SEND_DATA *p_buf = - (tBTA_HL_API_SEND_DATA *)osi_malloc(sizeof(tBTA_HL_API_SEND_DATA)); +void BTA_HlSendData(tBTA_HL_MDL_HANDLE mdl_handle, uint16_t pkt_size) { + tBTA_HL_API_SEND_DATA* p_buf = + (tBTA_HL_API_SEND_DATA*)osi_malloc(sizeof(tBTA_HL_API_SEND_DATA)); - p_buf->hdr.event = BTA_HL_API_SEND_DATA_EVT; - p_buf->mdl_handle = mdl_handle; - p_buf->pkt_size = pkt_size; + p_buf->hdr.event = BTA_HL_API_SEND_DATA_EVT; + p_buf->mdl_handle = mdl_handle; + p_buf->pkt_size = pkt_size; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -398,21 +390,20 @@ void BTA_HlSendData(tBTA_HL_MDL_HANDLE mdl_handle, * Returns void * * note: If mdl_id = 0xFFFF then this means to delete all MDLs - * and this value can only be used with DeleteMdl request only + * and this value can only be used with DeleteMdl request + *only * not other requests * ******************************************************************************/ -void BTA_HlDeleteMdl(tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_ID mdl_id ) -{ - tBTA_HL_API_DELETE_MDL *p_buf = - (tBTA_HL_API_DELETE_MDL *)osi_malloc(sizeof(tBTA_HL_API_DELETE_MDL)); +void BTA_HlDeleteMdl(tBTA_HL_MCL_HANDLE mcl_handle, tBTA_HL_MDL_ID mdl_id) { + tBTA_HL_API_DELETE_MDL* p_buf = + (tBTA_HL_API_DELETE_MDL*)osi_malloc(sizeof(tBTA_HL_API_DELETE_MDL)); - p_buf->hdr.event = BTA_HL_API_DELETE_MDL_EVT; - p_buf->mcl_handle = mcl_handle; - p_buf->mdl_id = mdl_id; + p_buf->hdr.event = BTA_HL_API_DELETE_MDL_EVT; + p_buf->mcl_handle = mcl_handle; + p_buf->mdl_id = mdl_id; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -427,19 +418,18 @@ void BTA_HlDeleteMdl(tBTA_HL_MCL_HANDLE mcl_handle, * Returns void * ******************************************************************************/ -void BTA_HlDchEchoTest( tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_DCH_ECHO_TEST_PARAM *p_echo_test_param) -{ - tBTA_HL_API_DCH_ECHO_TEST *p_buf = - (tBTA_HL_API_DCH_ECHO_TEST *)osi_malloc(sizeof(tBTA_HL_API_DCH_ECHO_TEST)); - - p_buf->hdr.event = BTA_HL_API_DCH_ECHO_TEST_EVT; - p_buf->mcl_handle = mcl_handle; - p_buf->ctrl_psm = p_echo_test_param->ctrl_psm; - p_buf->local_cfg = p_echo_test_param->local_cfg; - p_buf->pkt_size = p_echo_test_param->pkt_size; - - bta_sys_sendmsg(p_buf); +void BTA_HlDchEchoTest(tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_DCH_ECHO_TEST_PARAM* p_echo_test_param) { + tBTA_HL_API_DCH_ECHO_TEST* p_buf = + (tBTA_HL_API_DCH_ECHO_TEST*)osi_malloc(sizeof(tBTA_HL_API_DCH_ECHO_TEST)); + + p_buf->hdr.event = BTA_HL_API_DCH_ECHO_TEST_EVT; + p_buf->mcl_handle = mcl_handle; + p_buf->ctrl_psm = p_echo_test_param->ctrl_psm; + p_buf->local_cfg = p_echo_test_param->local_cfg; + p_buf->pkt_size = p_echo_test_param->pkt_size; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -454,18 +444,17 @@ void BTA_HlDchEchoTest( tBTA_HL_MCL_HANDLE mcl_handle, * Returns void * ******************************************************************************/ -void BTA_HlSdpQuery(uint8_t app_id,tBTA_HL_APP_HANDLE app_handle, - BD_ADDR bd_addr) -{ - tBTA_HL_API_SDP_QUERY *p_buf = - (tBTA_HL_API_SDP_QUERY *)osi_malloc(sizeof(tBTA_HL_API_SDP_QUERY)); - - p_buf->hdr.event = BTA_HL_API_SDP_QUERY_EVT; - p_buf->app_id = app_id; - p_buf->app_handle = app_handle; - bdcpy(p_buf->bd_addr, bd_addr); - - bta_sys_sendmsg(p_buf); +void BTA_HlSdpQuery(uint8_t app_id, tBTA_HL_APP_HANDLE app_handle, + BD_ADDR bd_addr) { + tBTA_HL_API_SDP_QUERY* p_buf = + (tBTA_HL_API_SDP_QUERY*)osi_malloc(sizeof(tBTA_HL_API_SDP_QUERY)); + + p_buf->hdr.event = BTA_HL_API_SDP_QUERY_EVT; + p_buf->app_id = app_id; + p_buf->app_handle = app_handle; + bdcpy(p_buf->bd_addr, bd_addr); + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -476,28 +465,30 @@ void BTA_HlSdpQuery(uint8_t app_id,tBTA_HL_APP_HANDLE app_handle, * request * * Parameters mcl_handle - MCL handle - * p_rsp_param - parameters specified whether the request should - * be accepted or not and if it should be accepted - * then it also specified the configuration response + * p_rsp_param - parameters specified whether the request + *should + * be accepted or not and if it should be + *accepted + * then it also specified the configuration + *response * value * * Returns void * ******************************************************************************/ void BTA_HlDchCreateRsp(tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_DCH_CREATE_RSP_PARAM *p_rsp_param) -{ - tBTA_HL_API_DCH_CREATE_RSP *p_buf = - (tBTA_HL_API_DCH_CREATE_RSP *)osi_malloc(sizeof(tBTA_HL_API_DCH_CREATE_RSP)); - - p_buf->hdr.event = BTA_HL_API_DCH_CREATE_RSP_EVT; - p_buf->mcl_handle = mcl_handle; - p_buf->mdl_id = p_rsp_param->mdl_id; - p_buf->local_mdep_id = p_rsp_param->local_mdep_id; - p_buf->rsp_code = p_rsp_param->rsp_code; - p_buf->cfg_rsp = p_rsp_param->cfg_rsp; - - bta_sys_sendmsg(p_buf); + tBTA_HL_DCH_CREATE_RSP_PARAM* p_rsp_param) { + tBTA_HL_API_DCH_CREATE_RSP* p_buf = (tBTA_HL_API_DCH_CREATE_RSP*)osi_malloc( + sizeof(tBTA_HL_API_DCH_CREATE_RSP)); + + p_buf->hdr.event = BTA_HL_API_DCH_CREATE_RSP_EVT; + p_buf->mcl_handle = mcl_handle; + p_buf->mdl_id = p_rsp_param->mdl_id; + p_buf->local_mdep_id = p_rsp_param->local_mdep_id; + p_buf->rsp_code = p_rsp_param->rsp_code; + p_buf->cfg_rsp = p_rsp_param->cfg_rsp; + + bta_sys_sendmsg(p_buf); } #endif /* HL_INCLUDED */ diff --git a/system/bta/hl/bta_hl_ci.cc b/system/bta/hl/bta_hl_ci.cc index 22894746347..b7bc2fd897d 100644 --- a/system/bta/hl/bta_hl_ci.cc +++ b/system/bta/hl/bta_hl_ci.cc @@ -26,12 +26,12 @@ #include #include "bta_api.h" -#include "btm_api.h" -#include "bta_sys.h" #include "bta_hl_api.h" #include "bta_hl_ci.h" #include "bta_hl_co.h" #include "bta_hl_int.h" +#include "bta_sys.h" +#include "btm_api.h" /******************************************************************************* * @@ -48,22 +48,21 @@ * Returns void * ******************************************************************************/ -void bta_hl_ci_get_tx_data(tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_STATUS status, uint16_t evt) -{ - tBTA_HL_CI_GET_PUT_DATA *p_evt = - (tBTA_HL_CI_GET_PUT_DATA *)osi_malloc(sizeof(tBTA_HL_CI_GET_PUT_DATA)); +void bta_hl_ci_get_tx_data(tBTA_HL_MDL_HANDLE mdl_handle, tBTA_HL_STATUS status, + uint16_t evt) { + tBTA_HL_CI_GET_PUT_DATA* p_evt = + (tBTA_HL_CI_GET_PUT_DATA*)osi_malloc(sizeof(tBTA_HL_CI_GET_PUT_DATA)); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s mdl_handle=%d status=%d evt=%d\n", __func__, - mdl_handle, status, evt); + APPL_TRACE_DEBUG("%s mdl_handle=%d status=%d evt=%d\n", __func__, mdl_handle, + status, evt); #endif - p_evt->hdr.event = evt; - p_evt->mdl_handle = mdl_handle; - p_evt->status = status; + p_evt->hdr.event = evt; + p_evt->mdl_handle = mdl_handle; + p_evt->status = status; - bta_sys_sendmsg(p_evt); + bta_sys_sendmsg(p_evt); } /******************************************************************************* @@ -81,23 +80,21 @@ void bta_hl_ci_get_tx_data(tBTA_HL_MDL_HANDLE mdl_handle, * Returns void * ******************************************************************************/ -extern void bta_hl_ci_put_rx_data( tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_STATUS status, - uint16_t evt ) -{ - tBTA_HL_CI_GET_PUT_DATA *p_evt = - (tBTA_HL_CI_GET_PUT_DATA *)osi_malloc(sizeof(tBTA_HL_CI_GET_PUT_DATA)); +extern void bta_hl_ci_put_rx_data(tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_STATUS status, uint16_t evt) { + tBTA_HL_CI_GET_PUT_DATA* p_evt = + (tBTA_HL_CI_GET_PUT_DATA*)osi_malloc(sizeof(tBTA_HL_CI_GET_PUT_DATA)); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s mdl_handle=%d status=%d evt=%d\n", __func__, - mdl_handle, status, evt); + APPL_TRACE_DEBUG("%s mdl_handle=%d status=%d evt=%d\n", __func__, mdl_handle, + status, evt); #endif - p_evt->hdr.event = evt; - p_evt->mdl_handle = mdl_handle; - p_evt->status = status; + p_evt->hdr.event = evt; + p_evt->mdl_handle = mdl_handle; + p_evt->status = status; - bta_sys_sendmsg(p_evt); + bta_sys_sendmsg(p_evt); } /******************************************************************************* @@ -115,23 +112,21 @@ extern void bta_hl_ci_put_rx_data( tBTA_HL_MDL_HANDLE mdl_handle, * Returns void * ******************************************************************************/ -extern void bta_hl_ci_get_echo_data( tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status, - uint16_t evt ) -{ - tBTA_HL_CI_ECHO_DATA *p_evt = - (tBTA_HL_CI_ECHO_DATA *)osi_malloc(sizeof(tBTA_HL_CI_ECHO_DATA)); +extern void bta_hl_ci_get_echo_data(tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status, uint16_t evt) { + tBTA_HL_CI_ECHO_DATA* p_evt = + (tBTA_HL_CI_ECHO_DATA*)osi_malloc(sizeof(tBTA_HL_CI_ECHO_DATA)); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s mcl_handle=%d status=%d evt=%d\n", __func__, - mcl_handle, status, evt); + APPL_TRACE_DEBUG("%s mcl_handle=%d status=%d evt=%d\n", __func__, mcl_handle, + status, evt); #endif - p_evt->hdr.event = evt; - p_evt->mcl_handle = mcl_handle; - p_evt->status = status; + p_evt->hdr.event = evt; + p_evt->mcl_handle = mcl_handle; + p_evt->status = status; - bta_sys_sendmsg(p_evt); + bta_sys_sendmsg(p_evt); } /******************************************************************************* @@ -149,21 +144,19 @@ extern void bta_hl_ci_get_echo_data( tBTA_HL_MCL_HANDLE mcl_handle, * Returns void * ******************************************************************************/ -extern void bta_hl_ci_put_echo_data( tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status, - uint16_t evt ) -{ - tBTA_HL_CI_ECHO_DATA *p_evt = - (tBTA_HL_CI_ECHO_DATA *)osi_malloc(sizeof(tBTA_HL_CI_ECHO_DATA)); +extern void bta_hl_ci_put_echo_data(tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status, uint16_t evt) { + tBTA_HL_CI_ECHO_DATA* p_evt = + (tBTA_HL_CI_ECHO_DATA*)osi_malloc(sizeof(tBTA_HL_CI_ECHO_DATA)); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("%s mcl_handle=%d status=%d evt=%d\n", __func__, - mcl_handle, status, evt); + APPL_TRACE_DEBUG("%s mcl_handle=%d status=%d evt=%d\n", __func__, mcl_handle, + status, evt); #endif - p_evt->hdr.event = evt; - p_evt->mcl_handle = mcl_handle; - p_evt->status = status; + p_evt->hdr.event = evt; + p_evt->mcl_handle = mcl_handle; + p_evt->status = status; - bta_sys_sendmsg(p_evt); + bta_sys_sendmsg(p_evt); } diff --git a/system/bta/hl/bta_hl_int.h b/system/bta/hl/bta_hl_int.h index cc6139d642a..e5acb52dbdd 100644 --- a/system/bta/hl/bta_hl_int.h +++ b/system/bta/hl/bta_hl_int.h @@ -26,547 +26,511 @@ #define BTA_HL_INT_H #include "bt_target.h" -#include "bta_sys.h" #include "bta_hl_api.h" #include "bta_hl_co.h" +#include "bta_sys.h" #include "l2cdefs.h" #ifdef __cplusplus extern "C" { #endif -typedef uint16_t (tBTA_HL_ALLOCATE_PSM) (void); +typedef uint16_t(tBTA_HL_ALLOCATE_PSM)(void); /***************************************************************************** * Constants and data types ****************************************************************************/ #ifndef BTA_HL_DISC_SIZE -#define BTA_HL_DISC_SIZE 1600 +#define BTA_HL_DISC_SIZE 1600 #endif -#define BTA_HL_NUM_SRCH_ATTR 10 -#define BTA_HL_MIN_SDP_MDEP_LEN 7 +#define BTA_HL_NUM_SRCH_ATTR 10 +#define BTA_HL_MIN_SDP_MDEP_LEN 7 /* L2CAP defualt parameters */ -#define BTA_HL_L2C_TX_WIN_SIZE 10 -#define BTA_HL_L2C_MAX_TRANSMIT 32 -#define BTA_HL_L2C_RTRANS_TOUT 2000 -#define BTA_HL_L2C_MON_TOUT 12000 -#define BTA_HL_L2C_MPS 1017 +#define BTA_HL_L2C_TX_WIN_SIZE 10 +#define BTA_HL_L2C_MAX_TRANSMIT 32 +#define BTA_HL_L2C_RTRANS_TOUT 2000 +#define BTA_HL_L2C_MON_TOUT 12000 +#define BTA_HL_L2C_MPS 1017 /* L2CAP FCS setting*/ -#define BTA_HL_MCA_USE_FCS MCA_FCS_USE -#define BTA_HL_MCA_NO_FCS MCA_FCS_BYPASS -#define BTA_HL_L2C_USE_FCS 1 -#define BTA_HL_L2C_NO_FCS 0 -#define BTA_HL_DEFAULT_SOURCE_FCS BTA_HL_L2C_USE_FCS -#define BTA_HL_MCA_FCS_USE_MASK MCA_FCS_USE_MASK +#define BTA_HL_MCA_USE_FCS MCA_FCS_USE +#define BTA_HL_MCA_NO_FCS MCA_FCS_BYPASS +#define BTA_HL_L2C_USE_FCS 1 +#define BTA_HL_L2C_NO_FCS 0 +#define BTA_HL_DEFAULT_SOURCE_FCS BTA_HL_L2C_USE_FCS +#define BTA_HL_MCA_FCS_USE_MASK MCA_FCS_USE_MASK /* SDP Operations */ -#define BTA_HL_SDP_OP_NONE 0 -#define BTA_HL_SDP_OP_CCH_INIT 1 -#define BTA_HL_SDP_OP_DCH_OPEN_INIT 2 -#define BTA_HL_SDP_OP_DCH_RECONNECT_INIT 3 -#define BTA_HL_SDP_OP_SDP_QUERY_NEW 4 -#define BTA_HL_SDP_OP_SDP_QUERY_CURRENT 5 +#define BTA_HL_SDP_OP_NONE 0 +#define BTA_HL_SDP_OP_CCH_INIT 1 +#define BTA_HL_SDP_OP_DCH_OPEN_INIT 2 +#define BTA_HL_SDP_OP_DCH_RECONNECT_INIT 3 +#define BTA_HL_SDP_OP_SDP_QUERY_NEW 4 +#define BTA_HL_SDP_OP_SDP_QUERY_CURRENT 5 typedef uint8_t tBTA_HL_SDP_OPER; /* CCH Operations */ -#define BTA_HL_CCH_OP_NONE 0 -#define BTA_HL_CCH_OP_LOCAL_OPEN 1 -#define BTA_HL_CCH_OP_REMOTE_OPEN 2 -#define BTA_HL_CCH_OP_LOCAL_CLOSE 3 -#define BTA_HL_CCH_OP_REMOTE_CLOSE 4 +#define BTA_HL_CCH_OP_NONE 0 +#define BTA_HL_CCH_OP_LOCAL_OPEN 1 +#define BTA_HL_CCH_OP_REMOTE_OPEN 2 +#define BTA_HL_CCH_OP_LOCAL_CLOSE 3 +#define BTA_HL_CCH_OP_REMOTE_CLOSE 4 typedef uint8_t tBTA_HL_CCH_OPER; /* Pending DCH close operations when closing a CCH */ -#define BTA_HL_CCH_CLOSE_OP_DCH_NONE 0 -#define BTA_HL_CCH_CLOSE_OP_DCH_ABORT 1 -#define BTA_HL_CCH_CLOSE_OP_DCH_CLOSE 2 +#define BTA_HL_CCH_CLOSE_OP_DCH_NONE 0 +#define BTA_HL_CCH_CLOSE_OP_DCH_ABORT 1 +#define BTA_HL_CCH_CLOSE_OP_DCH_CLOSE 2 typedef uint8_t tBTA_HL_CCH_CLOSE_DCH_OPER; /* DCH Operations */ -#define BTA_HL_DCH_OP_NONE 0 -#define BTA_HL_DCH_OP_REMOTE_CREATE 1 -#define BTA_HL_DCH_OP_LOCAL_OPEN 2 -#define BTA_HL_DCH_OP_REMOTE_OPEN 3 -#define BTA_HL_DCH_OP_LOCAL_CLOSE 4 -#define BTA_HL_DCH_OP_REMOTE_CLOSE 5 -#define BTA_HL_DCH_OP_LOCAL_DELETE 6 -#define BTA_HL_DCH_OP_REMOTE_DELETE 7 -#define BTA_HL_DCH_OP_LOCAL_RECONNECT 8 -#define BTA_HL_DCH_OP_REMOTE_RECONNECT 9 -#define BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST 10 -#define BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT 11 +#define BTA_HL_DCH_OP_NONE 0 +#define BTA_HL_DCH_OP_REMOTE_CREATE 1 +#define BTA_HL_DCH_OP_LOCAL_OPEN 2 +#define BTA_HL_DCH_OP_REMOTE_OPEN 3 +#define BTA_HL_DCH_OP_LOCAL_CLOSE 4 +#define BTA_HL_DCH_OP_REMOTE_CLOSE 5 +#define BTA_HL_DCH_OP_LOCAL_DELETE 6 +#define BTA_HL_DCH_OP_REMOTE_DELETE 7 +#define BTA_HL_DCH_OP_LOCAL_RECONNECT 8 +#define BTA_HL_DCH_OP_REMOTE_RECONNECT 9 +#define BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST 10 +#define BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT 11 typedef uint8_t tBTA_HL_DCH_OPER; /* Echo test Operations */ -#define BTA_HL_ECHO_OP_NONE 0 -#define BTA_HL_ECHO_OP_CI_GET_ECHO_DATA 1 -#define BTA_HL_ECHO_OP_SDP_INIT 2 -#define BTA_HL_ECHO_OP_MDL_CREATE_CFM 3 -#define BTA_HL_ECHO_OP_DCH_OPEN_CFM 4 -#define BTA_HL_ECHO_OP_LOOP_BACK 5 -#define BTA_HL_ECHO_OP_CI_PUT_ECHO_DATA 6 -#define BTA_HL_ECHO_OP_DCH_CLOSE_CFM 7 -#define BTA_HL_ECHO_OP_OPEN_IND 8 -#define BTA_HL_ECHO_OP_ECHO_PKT 9 +#define BTA_HL_ECHO_OP_NONE 0 +#define BTA_HL_ECHO_OP_CI_GET_ECHO_DATA 1 +#define BTA_HL_ECHO_OP_SDP_INIT 2 +#define BTA_HL_ECHO_OP_MDL_CREATE_CFM 3 +#define BTA_HL_ECHO_OP_DCH_OPEN_CFM 4 +#define BTA_HL_ECHO_OP_LOOP_BACK 5 +#define BTA_HL_ECHO_OP_CI_PUT_ECHO_DATA 6 +#define BTA_HL_ECHO_OP_DCH_CLOSE_CFM 7 +#define BTA_HL_ECHO_OP_OPEN_IND 8 +#define BTA_HL_ECHO_OP_ECHO_PKT 9 typedef uint8_t tBTA_HL_ECHO_OPER; /* abort status mask for abort_oper */ -#define BTA_HL_ABORT_NONE_MASK 0x00 -#define BTA_HL_ABORT_PENDING_MASK 0x01 -#define BTA_HL_ABORT_LOCAL_MASK 0x10 -#define BTA_HL_ABORT_REMOTE_MASK 0x20 +#define BTA_HL_ABORT_NONE_MASK 0x00 +#define BTA_HL_ABORT_PENDING_MASK 0x01 +#define BTA_HL_ABORT_LOCAL_MASK 0x10 +#define BTA_HL_ABORT_REMOTE_MASK 0x20 #define BTA_HL_ABORT_CCH_CLOSE_MASK 0x40 /* call out mask for cout_oper */ -#define BTA_HL_CO_NONE_MASK 0x00 -#define BTA_HL_CO_GET_TX_DATA_MASK 0x01 -#define BTA_HL_CO_PUT_RX_DATA_MASK 0x02 +#define BTA_HL_CO_NONE_MASK 0x00 +#define BTA_HL_CO_GET_TX_DATA_MASK 0x01 +#define BTA_HL_CO_PUT_RX_DATA_MASK 0x02 #define BTA_HL_CO_GET_ECHO_DATA_MASK 0x04 #define BTA_HL_CO_PUT_ECHO_DATA_MASK 0x08 -typedef struct -{ - uint16_t mtu; - uint8_t fcs; /* '0' No FCS, otherwise '1' */ +typedef struct { + uint16_t mtu; + uint8_t fcs; /* '0' No FCS, otherwise '1' */ } tBTA_HL_L2CAP_CFG_INFO; - /* State Machine Events */ -enum -{ - /* these events are handled by the state machine */ - BTA_HL_CCH_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_HL), - BTA_HL_CCH_SDP_OK_EVT, - BTA_HL_CCH_SDP_FAIL_EVT, - BTA_HL_MCA_CONNECT_IND_EVT, - BTA_HL_MCA_DISCONNECT_IND_EVT, - BTA_HL_CCH_CLOSE_EVT, - BTA_HL_CCH_CLOSE_CMPL_EVT, - BTA_HL_MCA_RSP_TOUT_IND_EVT, - /* DCH EVENT */ - BTA_HL_DCH_SDP_INIT_EVT, - BTA_HL_DCH_OPEN_EVT, - BTA_HL_MCA_CREATE_IND_EVT, - BTA_HL_MCA_CREATE_CFM_EVT, - BTA_HL_MCA_OPEN_IND_EVT, - - BTA_HL_MCA_OPEN_CFM_EVT, - BTA_HL_DCH_CLOSE_EVT, - BTA_HL_MCA_CLOSE_IND_EVT, - BTA_HL_MCA_CLOSE_CFM_EVT, - BTA_HL_API_SEND_DATA_EVT, - - BTA_HL_MCA_RCV_DATA_EVT, - BTA_HL_DCH_CLOSE_CMPL_EVT, - BTA_HL_DCH_RECONNECT_EVT, - BTA_HL_DCH_SDP_FAIL_EVT, - BTA_HL_MCA_RECONNECT_IND_EVT, - - BTA_HL_MCA_RECONNECT_CFM_EVT, - BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, - BTA_HL_API_DCH_CREATE_RSP_EVT, - BTA_HL_DCH_ABORT_EVT, - BTA_HL_MCA_ABORT_IND_EVT, - - BTA_HL_MCA_ABORT_CFM_EVT, - BTA_HL_MCA_CONG_CHG_EVT, - BTA_HL_CI_GET_TX_DATA_EVT, - BTA_HL_CI_PUT_RX_DATA_EVT, - BTA_HL_CI_GET_ECHO_DATA_EVT, - BTA_HL_DCH_ECHO_TEST_EVT, - BTA_HL_CI_PUT_ECHO_DATA_EVT, - - /* these events are handled outside the state machine */ - BTA_HL_API_ENABLE_EVT, - BTA_HL_API_DISABLE_EVT, - BTA_HL_API_UPDATE_EVT, - BTA_HL_API_REGISTER_EVT, - BTA_HL_API_DEREGISTER_EVT, - BTA_HL_API_CCH_OPEN_EVT, - BTA_HL_API_CCH_CLOSE_EVT, - BTA_HL_API_DCH_OPEN_EVT, - BTA_HL_API_DCH_RECONNECT_EVT, - BTA_HL_API_DCH_CLOSE_EVT, - BTA_HL_API_DELETE_MDL_EVT, - BTA_HL_API_DCH_ABORT_EVT, - - BTA_HL_API_DCH_ECHO_TEST_EVT, - BTA_HL_API_SDP_QUERY_EVT, - BTA_HL_SDP_QUERY_OK_EVT, - BTA_HL_SDP_QUERY_FAIL_EVT, - BTA_HL_MCA_DELETE_IND_EVT, - BTA_HL_MCA_DELETE_CFM_EVT +enum { + /* these events are handled by the state machine */ + BTA_HL_CCH_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_HL), + BTA_HL_CCH_SDP_OK_EVT, + BTA_HL_CCH_SDP_FAIL_EVT, + BTA_HL_MCA_CONNECT_IND_EVT, + BTA_HL_MCA_DISCONNECT_IND_EVT, + BTA_HL_CCH_CLOSE_EVT, + BTA_HL_CCH_CLOSE_CMPL_EVT, + BTA_HL_MCA_RSP_TOUT_IND_EVT, + /* DCH EVENT */ + BTA_HL_DCH_SDP_INIT_EVT, + BTA_HL_DCH_OPEN_EVT, + BTA_HL_MCA_CREATE_IND_EVT, + BTA_HL_MCA_CREATE_CFM_EVT, + BTA_HL_MCA_OPEN_IND_EVT, + + BTA_HL_MCA_OPEN_CFM_EVT, + BTA_HL_DCH_CLOSE_EVT, + BTA_HL_MCA_CLOSE_IND_EVT, + BTA_HL_MCA_CLOSE_CFM_EVT, + BTA_HL_API_SEND_DATA_EVT, + + BTA_HL_MCA_RCV_DATA_EVT, + BTA_HL_DCH_CLOSE_CMPL_EVT, + BTA_HL_DCH_RECONNECT_EVT, + BTA_HL_DCH_SDP_FAIL_EVT, + BTA_HL_MCA_RECONNECT_IND_EVT, + + BTA_HL_MCA_RECONNECT_CFM_EVT, + BTA_HL_DCH_CLOSE_ECHO_TEST_EVT, + BTA_HL_API_DCH_CREATE_RSP_EVT, + BTA_HL_DCH_ABORT_EVT, + BTA_HL_MCA_ABORT_IND_EVT, + + BTA_HL_MCA_ABORT_CFM_EVT, + BTA_HL_MCA_CONG_CHG_EVT, + BTA_HL_CI_GET_TX_DATA_EVT, + BTA_HL_CI_PUT_RX_DATA_EVT, + BTA_HL_CI_GET_ECHO_DATA_EVT, + BTA_HL_DCH_ECHO_TEST_EVT, + BTA_HL_CI_PUT_ECHO_DATA_EVT, + + /* these events are handled outside the state machine */ + BTA_HL_API_ENABLE_EVT, + BTA_HL_API_DISABLE_EVT, + BTA_HL_API_UPDATE_EVT, + BTA_HL_API_REGISTER_EVT, + BTA_HL_API_DEREGISTER_EVT, + BTA_HL_API_CCH_OPEN_EVT, + BTA_HL_API_CCH_CLOSE_EVT, + BTA_HL_API_DCH_OPEN_EVT, + BTA_HL_API_DCH_RECONNECT_EVT, + BTA_HL_API_DCH_CLOSE_EVT, + BTA_HL_API_DELETE_MDL_EVT, + BTA_HL_API_DCH_ABORT_EVT, + + BTA_HL_API_DCH_ECHO_TEST_EVT, + BTA_HL_API_SDP_QUERY_EVT, + BTA_HL_SDP_QUERY_OK_EVT, + BTA_HL_SDP_QUERY_FAIL_EVT, + BTA_HL_MCA_DELETE_IND_EVT, + BTA_HL_MCA_DELETE_CFM_EVT }; typedef uint16_t tBTA_HL_INT_EVT; #define BTA_HL_DCH_EVT_MIN BTA_HL_DCH_SDP_INIT_EVT #define BTA_HL_DCH_EVT_MAX 0xFFFF - /* state machine states */ -enum -{ - BTA_HL_CCH_IDLE_ST = 0, /* Idle */ - BTA_HL_CCH_OPENING_ST, /* Opening a connection*/ - BTA_HL_CCH_OPEN_ST, /* Connection is open */ - BTA_HL_CCH_CLOSING_ST /* Closing is in progress */ +enum { + BTA_HL_CCH_IDLE_ST = 0, /* Idle */ + BTA_HL_CCH_OPENING_ST, /* Opening a connection*/ + BTA_HL_CCH_OPEN_ST, /* Connection is open */ + BTA_HL_CCH_CLOSING_ST /* Closing is in progress */ }; typedef uint8_t tBTA_HL_CCH_STATE; -enum -{ - BTA_HL_DCH_IDLE_ST = 0, /* Idle */ - BTA_HL_DCH_OPENING_ST, /* Opening a connection*/ - BTA_HL_DCH_OPEN_ST, /* Connection is open */ - BTA_HL_DCH_CLOSING_ST /* Closing is in progress */ +enum { + BTA_HL_DCH_IDLE_ST = 0, /* Idle */ + BTA_HL_DCH_OPENING_ST, /* Opening a connection*/ + BTA_HL_DCH_OPEN_ST, /* Connection is open */ + BTA_HL_DCH_CLOSING_ST /* Closing is in progress */ }; typedef uint8_t tBTA_HL_DCH_STATE; - -typedef struct -{ - BT_HDR hdr; - tBTA_HL_CTRL_CBACK *p_cback; /* pointer to control callback function */ +typedef struct { + BT_HDR hdr; + tBTA_HL_CTRL_CBACK* p_cback; /* pointer to control callback function */ } tBTA_HL_API_ENABLE; -typedef struct -{ - BT_HDR hdr; - uint8_t app_id; - bool is_register; /* Update HL application due to register or deregister */ - tBTA_HL_CBACK *p_cback; /* pointer to application callback function */ - tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */ - tBTA_SEC sec_mask; /* security mask for accepting conenction*/ - char srv_name[BTA_SERVICE_NAME_LEN +1]; /* service name to be used in the SDP; null terminated*/ - char srv_desp[BTA_SERVICE_DESP_LEN +1]; /* service description to be used in the SDP; null terminated */ - char provider_name[BTA_PROVIDER_NAME_LEN +1]; /* provide name to be used in the SDP; null terminated */ +typedef struct { + BT_HDR hdr; + uint8_t app_id; + bool is_register; /* Update HL application due to register or deregister */ + tBTA_HL_CBACK* p_cback; /* pointer to application callback function */ + tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */ + tBTA_SEC sec_mask; /* security mask for accepting conenction*/ + char srv_name[BTA_SERVICE_NAME_LEN + + 1]; /* service name to be used in the SDP; null terminated*/ + char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in + the SDP; null terminated */ + char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in + the SDP; null terminated */ } tBTA_HL_API_UPDATE; -typedef struct -{ - BT_HDR hdr; - uint8_t app_id; - tBTA_HL_CBACK *p_cback; /* pointer to application callback function */ - tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */ - tBTA_SEC sec_mask; /* security mask for accepting conenction*/ - char srv_name[BTA_SERVICE_NAME_LEN +1]; /* service name to be used in the SDP; null terminated*/ - char srv_desp[BTA_SERVICE_DESP_LEN +1]; /* service description to be used in the SDP; null terminated */ - char provider_name[BTA_PROVIDER_NAME_LEN +1]; /* provide name to be used in the SDP; null terminated */ +typedef struct { + BT_HDR hdr; + uint8_t app_id; + tBTA_HL_CBACK* p_cback; /* pointer to application callback function */ + tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */ + tBTA_SEC sec_mask; /* security mask for accepting conenction*/ + char srv_name[BTA_SERVICE_NAME_LEN + + 1]; /* service name to be used in the SDP; null terminated*/ + char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in + the SDP; null terminated */ + char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in + the SDP; null terminated */ } tBTA_HL_API_REGISTER; -typedef struct -{ - BT_HDR hdr; - uint8_t app_id; - tBTA_HL_CBACK *p_cback; /* pointer to application callback function */ - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + BT_HDR hdr; + uint8_t app_id; + tBTA_HL_CBACK* p_cback; /* pointer to application callback function */ + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_API_DEREGISTER; -typedef struct -{ - BT_HDR hdr; - uint8_t app_id; - tBTA_HL_APP_HANDLE app_handle; - uint16_t ctrl_psm; - BD_ADDR bd_addr; /* Address of peer device */ - tBTA_SEC sec_mask; /* security mask for initiating connection*/ +typedef struct { + BT_HDR hdr; + uint8_t app_id; + tBTA_HL_APP_HANDLE app_handle; + uint16_t ctrl_psm; + BD_ADDR bd_addr; /* Address of peer device */ + tBTA_SEC sec_mask; /* security mask for initiating connection*/ } tBTA_HL_API_CCH_OPEN; - -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MCL_HANDLE mcl_handle; +typedef struct { + BT_HDR hdr; + tBTA_HL_MCL_HANDLE mcl_handle; } tBTA_HL_API_CCH_CLOSE; - - -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MCL_HANDLE mcl_handle; - uint16_t ctrl_psm; - tBTA_HL_MDEP_ID local_mdep_id; /* local MDEP ID */ - tBTA_HL_MDEP_ID peer_mdep_id; /* peer mdep id */ - tBTA_HL_DCH_CFG local_cfg; - tBTA_SEC sec_mask; /* security mask for initiating connection*/ +typedef struct { + BT_HDR hdr; + tBTA_HL_MCL_HANDLE mcl_handle; + uint16_t ctrl_psm; + tBTA_HL_MDEP_ID local_mdep_id; /* local MDEP ID */ + tBTA_HL_MDEP_ID peer_mdep_id; /* peer mdep id */ + tBTA_HL_DCH_CFG local_cfg; + tBTA_SEC sec_mask; /* security mask for initiating connection*/ } tBTA_HL_API_DCH_OPEN; +typedef struct { + BT_HDR hdr; -typedef struct -{ - BT_HDR hdr; - - tBTA_HL_MCL_HANDLE mcl_handle; - uint16_t ctrl_psm; - tBTA_HL_MDL_ID mdl_id; + tBTA_HL_MCL_HANDLE mcl_handle; + uint16_t ctrl_psm; + tBTA_HL_MDL_ID mdl_id; } tBTA_HL_API_DCH_RECONNECT; -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MDL_HANDLE mdl_handle; +typedef struct { + BT_HDR hdr; + tBTA_HL_MDL_HANDLE mdl_handle; } tBTA_HL_API_DCH_CLOSE; -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_MDL_ID mdl_id; +typedef struct { + BT_HDR hdr; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_MDL_ID mdl_id; } tBTA_HL_API_DELETE_MDL; -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MCL_HANDLE mcl_handle; +typedef struct { + BT_HDR hdr; + tBTA_HL_MCL_HANDLE mcl_handle; } tBTA_HL_API_DCH_ABORT; - -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MDL_HANDLE mdl_handle; - uint16_t pkt_size; +typedef struct { + BT_HDR hdr; + tBTA_HL_MDL_HANDLE mdl_handle; + uint16_t pkt_size; } tBTA_HL_API_SEND_DATA; -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MCL_HANDLE mcl_handle; - uint16_t ctrl_psm; - uint16_t pkt_size; - tBTA_HL_DCH_CFG local_cfg; +typedef struct { + BT_HDR hdr; + tBTA_HL_MCL_HANDLE mcl_handle; + uint16_t ctrl_psm; + uint16_t pkt_size; + tBTA_HL_DCH_CFG local_cfg; } tBTA_HL_API_DCH_ECHO_TEST; -typedef struct -{ - BT_HDR hdr; - uint8_t app_idx; - uint8_t mcl_idx; - bool release_mcl_cb; -}tBTA_HL_CCH_SDP; - +typedef struct { + BT_HDR hdr; + uint8_t app_idx; + uint8_t mcl_idx; + bool release_mcl_cb; +} tBTA_HL_CCH_SDP; /* MCA callback event parameters. */ -typedef struct -{ - BT_HDR hdr; - tBTA_HL_APP_HANDLE app_handle; - tBTA_HL_MCL_HANDLE mcl_handle; - tMCA_CTRL mca_data; +typedef struct { + BT_HDR hdr; + tBTA_HL_APP_HANDLE app_handle; + tBTA_HL_MCL_HANDLE mcl_handle; + tMCA_CTRL mca_data; } tBTA_HL_MCA_EVT; - /* MCA callback event parameters. */ -typedef struct -{ - BT_HDR hdr; - uint8_t app_idx; - uint8_t mcl_idx; - uint8_t mdl_idx; - BT_HDR *p_pkt; +typedef struct { + BT_HDR hdr; + uint8_t app_idx; + uint8_t mcl_idx; + uint8_t mdl_idx; + BT_HDR* p_pkt; } tBTA_HL_MCA_RCV_DATA_EVT; - -typedef struct -{ - BT_HDR hdr; - uint8_t app_idx; - uint8_t mcl_idx; - uint8_t mdl_idx; -}tBTA_HL_DCH_SDP; - -typedef struct -{ - BT_HDR hdr; - tBTA_HL_APP_HANDLE app_handle; - uint8_t app_id; - BD_ADDR bd_addr; /* Address of peer device */ +typedef struct { + BT_HDR hdr; + uint8_t app_idx; + uint8_t mcl_idx; + uint8_t mdl_idx; +} tBTA_HL_DCH_SDP; + +typedef struct { + BT_HDR hdr; + tBTA_HL_APP_HANDLE app_handle; + uint8_t app_id; + BD_ADDR bd_addr; /* Address of peer device */ } tBTA_HL_API_SDP_QUERY; -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_MDL_ID mdl_id; - tBTA_HL_MDEP_ID local_mdep_id; - tBTA_HL_DCH_CREATE_RSP rsp_code; - tBTA_HL_DCH_CFG cfg_rsp; +typedef struct { + BT_HDR hdr; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_MDL_ID mdl_id; + tBTA_HL_MDEP_ID local_mdep_id; + tBTA_HL_DCH_CREATE_RSP rsp_code; + tBTA_HL_DCH_CFG cfg_rsp; } tBTA_HL_API_DCH_CREATE_RSP; -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MDL_HANDLE mdl_handle; - tBTA_HL_STATUS status; +typedef struct { + BT_HDR hdr; + tBTA_HL_MDL_HANDLE mdl_handle; + tBTA_HL_STATUS status; } tBTA_HL_CI_GET_PUT_DATA; -typedef struct -{ - BT_HDR hdr; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_STATUS status; +typedef struct { + BT_HDR hdr; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_STATUS status; } tBTA_HL_CI_ECHO_DATA; /* union of all state machine event data types */ -typedef union -{ - BT_HDR hdr; - tBTA_HL_API_ENABLE api_enable; /* data for BTA_MSE_API_ENABLE_EVT */ - tBTA_HL_API_UPDATE api_update; - tBTA_HL_API_REGISTER api_reg; - tBTA_HL_API_DEREGISTER api_dereg; - tBTA_HL_API_CCH_OPEN api_cch_open; - tBTA_HL_API_CCH_CLOSE api_cch_close; - tBTA_HL_API_DCH_CREATE_RSP api_dch_create_rsp; - tBTA_HL_API_DCH_OPEN api_dch_open; - tBTA_HL_API_DCH_RECONNECT api_dch_reconnect; - tBTA_HL_API_DCH_CLOSE api_dch_close; - tBTA_HL_API_DELETE_MDL api_delete_mdl; - tBTA_HL_API_DCH_ABORT api_dch_abort; - tBTA_HL_API_SEND_DATA api_send_data; - tBTA_HL_API_DCH_ECHO_TEST api_dch_echo_test; - tBTA_HL_API_SDP_QUERY api_sdp_query; - - tBTA_HL_CCH_SDP cch_sdp; - tBTA_HL_MCA_EVT mca_evt; - tBTA_HL_MCA_RCV_DATA_EVT mca_rcv_data_evt; - tBTA_HL_DCH_SDP dch_sdp; /* for DCH_OPEN_EVT and DCH_RECONNECT_EVT */ - tBTA_HL_CI_GET_PUT_DATA ci_get_put_data; - tBTA_HL_CI_ECHO_DATA ci_get_put_echo_data; +typedef union { + BT_HDR hdr; + tBTA_HL_API_ENABLE api_enable; /* data for BTA_MSE_API_ENABLE_EVT */ + tBTA_HL_API_UPDATE api_update; + tBTA_HL_API_REGISTER api_reg; + tBTA_HL_API_DEREGISTER api_dereg; + tBTA_HL_API_CCH_OPEN api_cch_open; + tBTA_HL_API_CCH_CLOSE api_cch_close; + tBTA_HL_API_DCH_CREATE_RSP api_dch_create_rsp; + tBTA_HL_API_DCH_OPEN api_dch_open; + tBTA_HL_API_DCH_RECONNECT api_dch_reconnect; + tBTA_HL_API_DCH_CLOSE api_dch_close; + tBTA_HL_API_DELETE_MDL api_delete_mdl; + tBTA_HL_API_DCH_ABORT api_dch_abort; + tBTA_HL_API_SEND_DATA api_send_data; + tBTA_HL_API_DCH_ECHO_TEST api_dch_echo_test; + tBTA_HL_API_SDP_QUERY api_sdp_query; + + tBTA_HL_CCH_SDP cch_sdp; + tBTA_HL_MCA_EVT mca_evt; + tBTA_HL_MCA_RCV_DATA_EVT mca_rcv_data_evt; + tBTA_HL_DCH_SDP dch_sdp; /* for DCH_OPEN_EVT and DCH_RECONNECT_EVT */ + tBTA_HL_CI_GET_PUT_DATA ci_get_put_data; + tBTA_HL_CI_ECHO_DATA ci_get_put_echo_data; } tBTA_HL_DATA; - -typedef struct -{ - bool in_use; - uint16_t mdl_id; - tBTA_HL_MDL_HANDLE mdl_handle; - tBTA_HL_DCH_OPER dch_oper; - bool intentional_close; - tBTA_HL_DCH_STATE dch_state; - uint8_t abort_oper; - uint16_t req_data_psm; - uint16_t max_rx_apdu_size; - uint16_t max_tx_apdu_size; - BT_HDR *p_tx_pkt; - BT_HDR *p_rx_pkt; - tBTA_HL_MDEP_ID local_mdep_id; - uint8_t local_mdep_cfg_idx; - tBTA_HL_DCH_CFG local_cfg; - tBTA_HL_DCH_CFG remote_cfg; - tBTA_HL_MDEP_ID peer_mdep_id; - uint16_t peer_data_type; - tBTA_HL_MDEP_ROLE peer_mdep_role; - tBTA_HL_DCH_MODE dch_mode; - tBTA_SEC sec_mask; - bool is_the_first_reliable; - bool delete_mdl; - uint16_t mtu; - tMCA_CHNL_CFG chnl_cfg; - bool mdl_cfg_idx_included; - uint8_t mdl_cfg_idx; - uint8_t echo_oper; - bool cong; - bool close_pending; - uint8_t cout_oper; - BT_HDR *p_echo_tx_pkt; - BT_HDR *p_echo_rx_pkt; - tBTA_HL_STATUS ci_put_echo_data_status; -}tBTA_HL_MDL_CB; - -typedef struct -{ - tBTA_HL_MDL_CB mdl[BTA_HL_NUM_MDLS_PER_MCL]; - tBTA_HL_DELETE_MDL delete_mdl; - bool in_use; - tBTA_HL_CCH_STATE cch_state; - uint16_t req_ctrl_psm; - uint16_t ctrl_psm; - uint16_t data_psm; - BD_ADDR bd_addr; - uint16_t cch_mtu; - uint16_t sec_mask; - tBTA_HL_MCL_HANDLE mcl_handle; - tSDP_DISCOVERY_DB *p_db; /* pointer to discovery database */ - tSDP_DISC_CMPL_CB *sdp_cback; - tBTA_HL_SDP_OPER sdp_oper; - bool close_pending; - uint8_t sdp_mdl_idx; - tBTA_HL_SDP sdp; - uint8_t cch_oper; - uint8_t force_close_local_cch_opening; - bool intentional_close; - bool rsp_tout; - uint8_t timer_oper; - bool echo_test; - uint8_t echo_mdl_idx; - uint8_t cch_close_dch_oper; - uint8_t app_id; -}tBTA_HL_MCL_CB; - -typedef struct -{ - tBTA_HL_MCL_CB mcb[BTA_HL_NUM_MCLS]; /* application Control Blocks */ - tBTA_HL_CBACK *p_cback; /* pointer to control callback function */ - bool in_use; /* this CB is in use*/ - bool deregistering; - uint8_t app_id; - uint32_t sdp_handle; /* SDP record handle */ - tBTA_HL_SUP_FEATURE sup_feature; - tBTA_HL_MDL_CFG mdl_cfg[BTA_HL_NUM_MDL_CFGS]; - tBTA_HL_DEVICE_TYPE dev_type; - tBTA_HL_APP_HANDLE app_handle; - uint16_t ctrl_psm; /* L2CAP PSM for the MCAP control channel */ - uint16_t data_psm; /* L2CAP PSM for the MCAP data channel */ - uint16_t sec_mask; /* Security mask for BTM_SetSecurityLevel() */ - - char srv_name[BTA_SERVICE_NAME_LEN +1]; /* service name to be used in the SDP; null terminated*/ - char srv_desp[BTA_SERVICE_DESP_LEN +1]; /* service description to be used in the SDP; null terminated */ - char provider_name[BTA_PROVIDER_NAME_LEN +1]; /* provide name to be used in the SDP; null terminated */ - - tMCA_CTRL_CBACK *p_mcap_cback; /* pointer to MCAP callback function */ - tMCA_DATA_CBACK *p_data_cback; -}tBTA_HL_APP_CB; - - -typedef struct -{ - bool in_use; - tBTA_HL_SDP_OPER sdp_oper; - uint8_t app_idx; - uint8_t mcl_idx; - uint8_t mdl_idx; -}tBTA_HL_SDP_CB; - -typedef struct -{ - bool in_use; - uint8_t app_idx; - uint8_t mcl_idx; -}tBTA_HL_TIMER_CB; - -typedef struct -{ - tBTA_HL_APP_CB acb[BTA_HL_NUM_APPS]; /* HL Control Blocks */ - tBTA_HL_CTRL_CBACK *p_ctrl_cback; /* pointer to control callback function */ - bool enable; - bool disabling; - - tBTA_HL_SDP_CB scb[BTA_HL_NUM_SDP_CBACKS]; - tBTA_HL_TIMER_CB tcb[BTA_HL_NUM_TIMERS]; - bool enable_random_psm; - tBTA_HL_ALLOCATE_PSM *p_alloc_psm; -}tBTA_HL_CB; +typedef struct { + bool in_use; + uint16_t mdl_id; + tBTA_HL_MDL_HANDLE mdl_handle; + tBTA_HL_DCH_OPER dch_oper; + bool intentional_close; + tBTA_HL_DCH_STATE dch_state; + uint8_t abort_oper; + uint16_t req_data_psm; + uint16_t max_rx_apdu_size; + uint16_t max_tx_apdu_size; + BT_HDR* p_tx_pkt; + BT_HDR* p_rx_pkt; + tBTA_HL_MDEP_ID local_mdep_id; + uint8_t local_mdep_cfg_idx; + tBTA_HL_DCH_CFG local_cfg; + tBTA_HL_DCH_CFG remote_cfg; + tBTA_HL_MDEP_ID peer_mdep_id; + uint16_t peer_data_type; + tBTA_HL_MDEP_ROLE peer_mdep_role; + tBTA_HL_DCH_MODE dch_mode; + tBTA_SEC sec_mask; + bool is_the_first_reliable; + bool delete_mdl; + uint16_t mtu; + tMCA_CHNL_CFG chnl_cfg; + bool mdl_cfg_idx_included; + uint8_t mdl_cfg_idx; + uint8_t echo_oper; + bool cong; + bool close_pending; + uint8_t cout_oper; + BT_HDR* p_echo_tx_pkt; + BT_HDR* p_echo_rx_pkt; + tBTA_HL_STATUS ci_put_echo_data_status; +} tBTA_HL_MDL_CB; + +typedef struct { + tBTA_HL_MDL_CB mdl[BTA_HL_NUM_MDLS_PER_MCL]; + tBTA_HL_DELETE_MDL delete_mdl; + bool in_use; + tBTA_HL_CCH_STATE cch_state; + uint16_t req_ctrl_psm; + uint16_t ctrl_psm; + uint16_t data_psm; + BD_ADDR bd_addr; + uint16_t cch_mtu; + uint16_t sec_mask; + tBTA_HL_MCL_HANDLE mcl_handle; + tSDP_DISCOVERY_DB* p_db; /* pointer to discovery database */ + tSDP_DISC_CMPL_CB* sdp_cback; + tBTA_HL_SDP_OPER sdp_oper; + bool close_pending; + uint8_t sdp_mdl_idx; + tBTA_HL_SDP sdp; + uint8_t cch_oper; + uint8_t force_close_local_cch_opening; + bool intentional_close; + bool rsp_tout; + uint8_t timer_oper; + bool echo_test; + uint8_t echo_mdl_idx; + uint8_t cch_close_dch_oper; + uint8_t app_id; +} tBTA_HL_MCL_CB; + +typedef struct { + tBTA_HL_MCL_CB mcb[BTA_HL_NUM_MCLS]; /* application Control Blocks */ + tBTA_HL_CBACK* p_cback; /* pointer to control callback function */ + bool in_use; /* this CB is in use*/ + bool deregistering; + uint8_t app_id; + uint32_t sdp_handle; /* SDP record handle */ + tBTA_HL_SUP_FEATURE sup_feature; + tBTA_HL_MDL_CFG mdl_cfg[BTA_HL_NUM_MDL_CFGS]; + tBTA_HL_DEVICE_TYPE dev_type; + tBTA_HL_APP_HANDLE app_handle; + uint16_t ctrl_psm; /* L2CAP PSM for the MCAP control channel */ + uint16_t data_psm; /* L2CAP PSM for the MCAP data channel */ + uint16_t sec_mask; /* Security mask for BTM_SetSecurityLevel() */ + + char srv_name[BTA_SERVICE_NAME_LEN + + 1]; /* service name to be used in the SDP; null terminated*/ + char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in + the SDP; null terminated */ + char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in + the SDP; null terminated */ + + tMCA_CTRL_CBACK* p_mcap_cback; /* pointer to MCAP callback function */ + tMCA_DATA_CBACK* p_data_cback; +} tBTA_HL_APP_CB; + +typedef struct { + bool in_use; + tBTA_HL_SDP_OPER sdp_oper; + uint8_t app_idx; + uint8_t mcl_idx; + uint8_t mdl_idx; +} tBTA_HL_SDP_CB; + +typedef struct { + bool in_use; + uint8_t app_idx; + uint8_t mcl_idx; +} tBTA_HL_TIMER_CB; + +typedef struct { + tBTA_HL_APP_CB acb[BTA_HL_NUM_APPS]; /* HL Control Blocks */ + tBTA_HL_CTRL_CBACK* p_ctrl_cback; /* pointer to control callback function */ + bool enable; + bool disabling; + + tBTA_HL_SDP_CB scb[BTA_HL_NUM_SDP_CBACKS]; + tBTA_HL_TIMER_CB tcb[BTA_HL_NUM_TIMERS]; + bool enable_random_psm; + tBTA_HL_ALLOCATE_PSM* p_alloc_psm; +} tBTA_HL_CB; /****************************************************************************** * Configuration Definitions @@ -578,7 +542,7 @@ typedef struct ****************************************************************************/ /* HL control block */ -extern tBTA_HL_CB bta_hl_cb; +extern tBTA_HL_CB bta_hl_cb; #define BTA_HL_GET_CB_PTR() &(bta_hl_cb) #define BTA_HL_GET_APP_CB_PTR(app_idx) &(bta_hl_cb.acb[(app_idx)]) @@ -602,280 +566,294 @@ extern tBTA_HL_CB bta_hl_cb; /***************************************************************************** * Function prototypes ****************************************************************************/ - /* main */ - extern bool bta_hl_hdl_event(BT_HDR *p_msg); - /* sdp */ - extern bool bta_hl_fill_sup_feature_list( const tSDP_DISC_ATTR *p_attr, - tBTA_HL_SUP_FEATURE_LIST_ELEM *p_list); - extern tBTA_HL_STATUS bta_hl_sdp_update (uint8_t app_id); - extern tBTA_HL_STATUS bta_hl_sdp_register (uint8_t app_idx); - extern tSDP_DISC_REC *bta_hl_find_sink_or_src_srv_class_in_db (const tSDP_DISCOVERY_DB *p_db, - const tSDP_DISC_REC *p_start_rec); - - /* action routines */ - extern void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_ci_put_rx_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_ci_get_echo_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - - extern void bta_hl_dch_echo_test(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_ci_put_echo_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_send_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_sdp_fail(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_cong_change(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_reconnect_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_reconnect_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_reconnect(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_close_echo_test(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_create_rsp(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_rcv_data(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_close_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_close_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_close(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_delete_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - - extern void bta_hl_dch_mca_delete_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_delete(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_abort_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_abort_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_abort(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_open_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_open_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_create_ind(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_create_cfm(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_dch_mca_create(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_DATA *p_data); - extern void bta_hl_deallocate_spd_cback(uint8_t sdp_cback_idx); - extern tSDP_DISC_CMPL_CB *bta_hl_allocate_spd_cback(tBTA_HL_SDP_OPER sdp_oper, uint8_t app_idx, uint8_t mcl_idx, - uint8_t mdl_idx, - uint8_t *p_sdp_cback_idx); - extern tBTA_HL_STATUS bta_hl_init_sdp(tBTA_HL_SDP_OPER sdp_oper, uint8_t app_idx, uint8_t mcl_idx, - uint8_t mdl_idx); - extern void bta_hl_cch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); - extern void bta_hl_cch_mca_open(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); - extern void bta_hl_cch_mca_close(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); - extern void bta_hl_cch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); - extern void bta_hl_cch_mca_disconnect(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); - extern void bta_hl_cch_mca_disc_open(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); - extern void bta_hl_cch_mca_rsp_tout(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); - extern void bta_hl_cch_mca_connect(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); - - /* State machine drivers */ - extern void bta_hl_cch_sm_execute(uint8_t inst_idx, uint8_t mcl_idx, - uint16_t event, tBTA_HL_DATA *p_data); - extern void bta_hl_dch_sm_execute(uint8_t inst_idx, uint8_t mcl_idx, uint8_t mdl_idx, - uint16_t event, tBTA_HL_DATA *p_data); - /* MCAP callback functions */ - extern void bta_hl_mcap_ctrl_cback(tMCA_HANDLE handle, tMCA_CL mcl, uint8_t event, - tMCA_CTRL *p_data); - - extern void bta_hl_mcap_data_cback(tMCA_DL mdl, BT_HDR *p_pkt); - - /* utility functions */ - extern bool bta_hl_set_ctrl_psm_for_dch(uint8_t app_idx, uint8_t mcl_idx, - uint8_t mdl_idx, uint16_t ctrl_psm); - extern bool bta_hl_find_sdp_idx_using_ctrl_psm(tBTA_HL_SDP *p_sdp, - uint16_t ctrl_psm, - uint8_t *p_sdp_idx); - extern uint16_t bta_hl_set_user_tx_buf_size(uint16_t max_tx_size); - extern uint16_t bta_hl_set_user_rx_buf_size(uint16_t mtu); - extern uint8_t bta_hl_set_tx_win_size(uint16_t mtu, uint16_t mps); - extern uint16_t bta_hl_set_mps(uint16_t mtu); - extern void bta_hl_clean_mdl_cb(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx); - extern BT_HDR * bta_hl_get_buf(uint16_t data_size, bool fcs_use); - extern bool bta_hl_find_service_in_db( uint8_t app_idx, uint8_t mcl_idx, - uint16_t service_uuid, - tSDP_DISC_REC **pp_rec ); - extern uint16_t bta_hl_get_service_uuids(uint8_t sdp_oper, uint8_t app_idx, uint8_t mcl_idx, - uint8_t mdl_idx ); - extern bool bta_hl_find_echo_cfg_rsp(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdep_idx, uint8_t cfg, - uint8_t *p_cfg_rsp); - extern bool bta_hl_validate_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - uint8_t cfg); - extern bool bta_hl_find_cch_cb_indexes(tBTA_HL_DATA *p_msg, - uint8_t *p_app_idx, - uint8_t *p_mcl_idx); - extern bool bta_hl_find_dch_cb_indexes(tBTA_HL_DATA *p_msg, - uint8_t *p_app_idx, - uint8_t *p_mcl_idx, - uint8_t *p_mdl_idx); - extern uint16_t bta_hl_allocate_mdl_id(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx ); - extern bool bta_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle, - uint8_t *p_app_idx, uint8_t *p_mcl_idx, - uint8_t *p_mdl_idx); - extern bool bta_hl_find_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, uint16_t mdl_id, - uint8_t *p_mdl_idx); - extern bool bta_hl_find_an_active_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, - uint8_t *p_mdl_idx); - extern bool bta_hl_find_dch_setup_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, - uint8_t *p_mdl_idx); - extern bool bta_hl_find_an_in_use_mcl_idx(uint8_t app_idx, - uint8_t *p_mcl_idx); - extern bool bta_hl_find_an_in_use_app_idx(uint8_t *p_app_idx); - extern bool bta_hl_find_app_idx(uint8_t app_id, uint8_t *p_app_idx); - extern bool bta_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle, - uint8_t *p_app_idx); - extern bool bta_hl_find_mcl_idx_using_handle( tBTA_HL_MCL_HANDLE mcl_handle, - uint8_t *p_app_idx, uint8_t *p_mcl_idx); - extern bool bta_hl_find_mcl_idx(uint8_t app_idx, BD_ADDR p_bd_addr, uint8_t *p_mcl_idx); - extern bool bta_hl_is_the_first_reliable_existed(uint8_t app_idx, uint8_t mcl_idx ); - extern bool bta_hl_find_non_active_mdl_cfg(uint8_t app_idx, uint8_t start_mdl_cfg_idx, - uint8_t *p_mdl_cfg_idx); - extern bool bta_hl_find_avail_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx, - uint8_t *p_mdl_cfg_idx); - extern bool bta_hl_find_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx, - tBTA_HL_MDL_ID mdl_id, uint8_t *p_mdl_cfg_idx); - extern bool bta_hl_get_cur_time(uint8_t app_idx, uint8_t *p_cur_time); - extern void bta_hl_sort_cfg_time_idx(uint8_t app_idx, uint8_t *a, uint8_t n); - extern void bta_hl_compact_mdl_cfg_time(uint8_t app_idx, uint8_t mdep_id); - extern bool bta_hl_is_mdl_exsit_in_mcl(uint8_t app_idx, BD_ADDR bd_addr, - tBTA_HL_MDL_ID mdl_id); - extern bool bta_hl_delete_mdl_cfg(uint8_t app_idx, BD_ADDR bd_addr, - tBTA_HL_MDL_ID mdl_id); - extern bool bta_hl_is_mdl_value_valid(tBTA_HL_MDL_ID mdl_id); - extern bool bta_hl_find_mdep_cfg_idx(uint8_t app_idx, - tBTA_HL_MDEP_ID local_mdep_id, uint8_t *p_mdep_cfg_idx); - extern void bta_hl_find_rxtx_apdu_size(uint8_t app_idx, uint8_t mdep_cfg_idx, - uint16_t *p_rx_apu_size, - uint16_t *p_tx_apu_size); - extern bool bta_hl_validate_peer_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_MDEP_ID peer_mdep_id, - tBTA_HL_MDEP_ROLE peer_mdep_role, - uint8_t sdp_idx); - extern tBTA_HL_STATUS bta_hl_chk_local_cfg(uint8_t app_idx, uint8_t mcl_idx, - uint8_t mdep_cfg_idx, - tBTA_HL_DCH_CFG local_cfg); - - extern bool bta_hl_validate_reconnect_params(uint8_t app_idx, uint8_t mcl_idx, - tBTA_HL_API_DCH_RECONNECT *p_reconnect, - uint8_t *p_mdep_cfg_idx, uint8_t *p_mdl_cfg_idx); - extern bool bta_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t *p_mcl_idx); - extern bool bta_hl_find_avail_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, - uint8_t *p_mdl_idx); - extern bool bta_hl_is_a_duplicate_id(uint8_t app_id); - extern bool bta_hl_find_avail_app_idx(uint8_t *p_idx); - extern tBTA_HL_STATUS bta_hl_app_update(uint8_t app_id, bool is_register); - extern tBTA_HL_STATUS bta_hl_app_registration(uint8_t app_idx); - extern void bta_hl_discard_data(uint16_t event, tBTA_HL_DATA *p_data); - extern void bta_hl_save_mdl_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx ); - extern void bta_hl_set_dch_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, tBTA_HL_DATA *p_data); - extern bool bta_hl_get_l2cap_cfg(tBTA_HL_MDL_HANDLE mdl_hnd, tBTA_HL_L2CAP_CFG_INFO *p_cfg); - extern bool bta_hl_validate_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx); - extern bool bta_hl_is_cong_on(uint8_t app_id, BD_ADDR bd_addr, tBTA_HL_MDL_ID mdl_id); - extern void bta_hl_check_cch_close(uint8_t app_idx, uint8_t mcl_idx, - tBTA_HL_DATA *p_data, bool check_dch_setup); - extern void bta_hl_clean_app(uint8_t app_idx); - extern void bta_hl_check_deregistration(uint8_t app_idx, tBTA_HL_DATA *p_data ); - extern void bta_hl_check_disable(tBTA_HL_DATA *p_data ); - extern void bta_hl_build_abort_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle); - extern void bta_hl_build_abort_cfm(tBTA_HL *p_evt_data, +/* main */ +extern bool bta_hl_hdl_event(BT_HDR* p_msg); +/* sdp */ +extern bool bta_hl_fill_sup_feature_list(const tSDP_DISC_ATTR* p_attr, + tBTA_HL_SUP_FEATURE_LIST_ELEM* p_list); +extern tBTA_HL_STATUS bta_hl_sdp_update(uint8_t app_id); +extern tBTA_HL_STATUS bta_hl_sdp_register(uint8_t app_idx); +extern tSDP_DISC_REC* bta_hl_find_sink_or_src_srv_class_in_db( + const tSDP_DISCOVERY_DB* p_db, const tSDP_DISC_REC* p_start_rec); + +/* action routines */ +extern void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_ci_put_rx_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_ci_get_echo_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); + +extern void bta_hl_dch_echo_test(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_ci_put_echo_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_send_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_sdp_fail(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_cong_change(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_reconnect_ind(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_reconnect_cfm(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_reconnect(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_close_echo_test(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_create_rsp(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_rcv_data(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_close_cfm(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_close_ind(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_close(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_delete_ind(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); + +extern void bta_hl_dch_mca_delete_cfm(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_delete(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_abort_ind(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_abort_cfm(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_abort(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_open_ind(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_open_cfm(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_create_ind(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_create_cfm(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_mca_create(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_deallocate_spd_cback(uint8_t sdp_cback_idx); +extern tSDP_DISC_CMPL_CB* bta_hl_allocate_spd_cback(tBTA_HL_SDP_OPER sdp_oper, + uint8_t app_idx, + uint8_t mcl_idx, + uint8_t mdl_idx, + uint8_t* p_sdp_cback_idx); +extern tBTA_HL_STATUS bta_hl_init_sdp(tBTA_HL_SDP_OPER sdp_oper, + uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx); +extern void bta_hl_cch_sdp_init(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); +extern void bta_hl_cch_mca_open(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); +extern void bta_hl_cch_mca_close(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); +extern void bta_hl_cch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); +extern void bta_hl_cch_mca_disconnect(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); +extern void bta_hl_cch_mca_disc_open(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); +extern void bta_hl_cch_mca_rsp_tout(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); +extern void bta_hl_cch_mca_connect(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); + +/* State machine drivers */ +extern void bta_hl_cch_sm_execute(uint8_t inst_idx, uint8_t mcl_idx, + uint16_t event, tBTA_HL_DATA* p_data); +extern void bta_hl_dch_sm_execute(uint8_t inst_idx, uint8_t mcl_idx, + uint8_t mdl_idx, uint16_t event, + tBTA_HL_DATA* p_data); +/* MCAP callback functions */ +extern void bta_hl_mcap_ctrl_cback(tMCA_HANDLE handle, tMCA_CL mcl, + uint8_t event, tMCA_CTRL* p_data); + +extern void bta_hl_mcap_data_cback(tMCA_DL mdl, BT_HDR* p_pkt); + +/* utility functions */ +extern bool bta_hl_set_ctrl_psm_for_dch(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, uint16_t ctrl_psm); +extern bool bta_hl_find_sdp_idx_using_ctrl_psm(tBTA_HL_SDP* p_sdp, + uint16_t ctrl_psm, + uint8_t* p_sdp_idx); +extern uint16_t bta_hl_set_user_tx_buf_size(uint16_t max_tx_size); +extern uint16_t bta_hl_set_user_rx_buf_size(uint16_t mtu); +extern uint8_t bta_hl_set_tx_win_size(uint16_t mtu, uint16_t mps); +extern uint16_t bta_hl_set_mps(uint16_t mtu); +extern void bta_hl_clean_mdl_cb(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx); +extern BT_HDR* bta_hl_get_buf(uint16_t data_size, bool fcs_use); +extern bool bta_hl_find_service_in_db(uint8_t app_idx, uint8_t mcl_idx, + uint16_t service_uuid, + tSDP_DISC_REC** pp_rec); +extern uint16_t bta_hl_get_service_uuids(uint8_t sdp_oper, uint8_t app_idx, + uint8_t mcl_idx, uint8_t mdl_idx); +extern bool bta_hl_find_echo_cfg_rsp(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdep_idx, uint8_t cfg, + uint8_t* p_cfg_rsp); +extern bool bta_hl_validate_cfg(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, uint8_t cfg); +extern bool bta_hl_find_cch_cb_indexes(tBTA_HL_DATA* p_msg, uint8_t* p_app_idx, + uint8_t* p_mcl_idx); +extern bool bta_hl_find_dch_cb_indexes(tBTA_HL_DATA* p_msg, uint8_t* p_app_idx, + uint8_t* p_mcl_idx, uint8_t* p_mdl_idx); +extern uint16_t bta_hl_allocate_mdl_id(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx); +extern bool bta_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle, + uint8_t* p_app_idx, + uint8_t* p_mcl_idx, + uint8_t* p_mdl_idx); +extern bool bta_hl_find_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, + uint16_t mdl_id, uint8_t* p_mdl_idx); +extern bool bta_hl_find_an_active_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, + uint8_t* p_mdl_idx); +extern bool bta_hl_find_dch_setup_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, + uint8_t* p_mdl_idx); +extern bool bta_hl_find_an_in_use_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx); +extern bool bta_hl_find_an_in_use_app_idx(uint8_t* p_app_idx); +extern bool bta_hl_find_app_idx(uint8_t app_id, uint8_t* p_app_idx); +extern bool bta_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle, + uint8_t* p_app_idx); +extern bool bta_hl_find_mcl_idx_using_handle(tBTA_HL_MCL_HANDLE mcl_handle, + uint8_t* p_app_idx, + uint8_t* p_mcl_idx); +extern bool bta_hl_find_mcl_idx(uint8_t app_idx, BD_ADDR p_bd_addr, + uint8_t* p_mcl_idx); +extern bool bta_hl_is_the_first_reliable_existed(uint8_t app_idx, + uint8_t mcl_idx); +extern bool bta_hl_find_non_active_mdl_cfg(uint8_t app_idx, + uint8_t start_mdl_cfg_idx, + uint8_t* p_mdl_cfg_idx); +extern bool bta_hl_find_avail_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx, + uint8_t* p_mdl_cfg_idx); +extern bool bta_hl_find_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_MDL_ID mdl_id, + uint8_t* p_mdl_cfg_idx); +extern bool bta_hl_get_cur_time(uint8_t app_idx, uint8_t* p_cur_time); +extern void bta_hl_sort_cfg_time_idx(uint8_t app_idx, uint8_t* a, uint8_t n); +extern void bta_hl_compact_mdl_cfg_time(uint8_t app_idx, uint8_t mdep_id); +extern bool bta_hl_is_mdl_exsit_in_mcl(uint8_t app_idx, BD_ADDR bd_addr, + tBTA_HL_MDL_ID mdl_id); +extern bool bta_hl_delete_mdl_cfg(uint8_t app_idx, BD_ADDR bd_addr, + tBTA_HL_MDL_ID mdl_id); +extern bool bta_hl_is_mdl_value_valid(tBTA_HL_MDL_ID mdl_id); +extern bool bta_hl_find_mdep_cfg_idx(uint8_t app_idx, + tBTA_HL_MDEP_ID local_mdep_id, + uint8_t* p_mdep_cfg_idx); +extern void bta_hl_find_rxtx_apdu_size(uint8_t app_idx, uint8_t mdep_cfg_idx, + uint16_t* p_rx_apu_size, + uint16_t* p_tx_apu_size); +extern bool bta_hl_validate_peer_cfg(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, + tBTA_HL_MDEP_ID peer_mdep_id, + tBTA_HL_MDEP_ROLE peer_mdep_role, + uint8_t sdp_idx); +extern tBTA_HL_STATUS bta_hl_chk_local_cfg(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdep_cfg_idx, + tBTA_HL_DCH_CFG local_cfg); + +extern bool bta_hl_validate_reconnect_params( + uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_API_DCH_RECONNECT* p_reconnect, + uint8_t* p_mdep_cfg_idx, uint8_t* p_mdl_cfg_idx); +extern bool bta_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx); +extern bool bta_hl_find_avail_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, + uint8_t* p_mdl_idx); +extern bool bta_hl_is_a_duplicate_id(uint8_t app_id); +extern bool bta_hl_find_avail_app_idx(uint8_t* p_idx); +extern tBTA_HL_STATUS bta_hl_app_update(uint8_t app_id, bool is_register); +extern tBTA_HL_STATUS bta_hl_app_registration(uint8_t app_idx); +extern void bta_hl_discard_data(uint16_t event, tBTA_HL_DATA* p_data); +extern void bta_hl_save_mdl_cfg(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx); +extern void bta_hl_set_dch_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); +extern bool bta_hl_get_l2cap_cfg(tBTA_HL_MDL_HANDLE mdl_hnd, + tBTA_HL_L2CAP_CFG_INFO* p_cfg); +extern bool bta_hl_validate_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx); +extern bool bta_hl_is_cong_on(uint8_t app_id, BD_ADDR bd_addr, + tBTA_HL_MDL_ID mdl_id); +extern void bta_hl_check_cch_close(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data, bool check_dch_setup); +extern void bta_hl_clean_app(uint8_t app_idx); +extern void bta_hl_check_deregistration(uint8_t app_idx, tBTA_HL_DATA* p_data); +extern void bta_hl_check_disable(tBTA_HL_DATA* p_data); +extern void bta_hl_build_abort_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle); +extern void bta_hl_build_abort_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status); +extern void bta_hl_build_dch_close_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_STATUS status); +extern void bta_hl_build_dch_close_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle, + bool intentional); +extern void bta_hl_build_send_data_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_STATUS status); +extern void bta_hl_build_rcv_data_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle); +extern void bta_hl_build_cch_open_cfm(tBTA_HL* p_evt_data, uint8_t app_id, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + BD_ADDR bd_addr, tBTA_HL_STATUS status); +extern void bta_hl_build_cch_open_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + BD_ADDR bd_addr); +extern void bta_hl_build_cch_close_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status); +extern void bta_hl_build_cch_close_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + bool intentional); + +extern void bta_hl_build_dch_open_cfm( + tBTA_HL* p_evt_data, tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_MDEP_ID local_mdep_id, tBTA_HL_MDL_ID mdl_id, + tBTA_HL_DCH_MODE dch_mode, bool first_reliable, uint16_t mtu, + tBTA_HL_STATUS status); + +extern void bta_hl_build_delete_mdl_cfm(tBTA_HL* p_evt_data, tBTA_HL_APP_HANDLE app_handle, tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_ID mdl_id, tBTA_HL_STATUS status); - extern void bta_hl_build_dch_close_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_STATUS status); - extern void bta_hl_build_dch_close_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle, - bool intentional); - extern void bta_hl_build_send_data_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_STATUS status ); - extern void bta_hl_build_rcv_data_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle); - extern void bta_hl_build_cch_open_cfm(tBTA_HL *p_evt_data, - uint8_t app_id, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - BD_ADDR bd_addr, - tBTA_HL_STATUS status ); - extern void bta_hl_build_cch_open_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - BD_ADDR bd_addr); - extern void bta_hl_build_cch_close_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status ); - extern void bta_hl_build_cch_close_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - bool intentional); - - extern void bta_hl_build_dch_open_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_MDEP_ID local_mdep_id, - tBTA_HL_MDL_ID mdl_id, - tBTA_HL_DCH_MODE dch_mode, - bool first_reliable, - uint16_t mtu, - tBTA_HL_STATUS status); - - extern void bta_hl_build_delete_mdl_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_ID mdl_id, - tBTA_HL_STATUS status); - extern void bta_hl_build_echo_test_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status ); - extern void bta_hl_build_sdp_query_cfm(tBTA_HL *p_evt_data, - uint8_t app_id, - tBTA_HL_APP_HANDLE app_handle, - BD_ADDR bd_addr, - tBTA_HL_SDP *p_sdp, - tBTA_HL_STATUS status); +extern void bta_hl_build_echo_test_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status); +extern void bta_hl_build_sdp_query_cfm(tBTA_HL* p_evt_data, uint8_t app_id, + tBTA_HL_APP_HANDLE app_handle, + BD_ADDR bd_addr, tBTA_HL_SDP* p_sdp, + tBTA_HL_STATUS status); #if (BTA_HL_DEBUG == TRUE) - extern const char *bta_hl_status_code(tBTA_HL_STATUS status); - extern const char *bta_hl_evt_code(tBTA_HL_INT_EVT evt_code); +extern const char* bta_hl_status_code(tBTA_HL_STATUS status); +extern const char* bta_hl_evt_code(tBTA_HL_INT_EVT evt_code); #endif #ifdef __cplusplus } #endif #endif /* BTA_MSE_INT_H */ - - diff --git a/system/bta/hl/bta_hl_main.cc b/system/bta/hl/bta_hl_main.cc index a7afdc8cb0a..9be6813bd50 100644 --- a/system/bta/hl/bta_hl_main.cc +++ b/system/bta/hl/bta_hl_main.cc @@ -27,20 +27,17 @@ #include "bt_target.h" #if (HL_INCLUDED == TRUE) - - +#include "bt_common.h" #include "bta_hl_api.h" #include "bta_hl_int.h" -#include "bt_common.h" -#include "utl.h" #include "l2c_api.h" #include "mca_defs.h" #include "osi/include/osi.h" - +#include "utl.h" #if (BTA_HL_DEBUG == TRUE) -static const char *bta_hl_cch_state_code(tBTA_HL_CCH_STATE state_code); -static const char *bta_hl_dch_state_code(tBTA_HL_DCH_STATE state_code); +static const char* bta_hl_cch_state_code(tBTA_HL_CCH_STATE state_code); +static const char* bta_hl_dch_state_code(tBTA_HL_DCH_STATE state_code); #endif extern uint16_t L2CA_AllocateRandomPsm(void); @@ -53,236 +50,254 @@ extern uint16_t L2CA_AllocatePsm(void); ****************************************************************************/ /* state machine action enumeration list for DCH */ /* The order of this enumeration must be the same as bta_hl_dch_act_tbl[] */ -enum -{ - BTA_HL_DCH_MCA_CREATE, - BTA_HL_DCH_MCA_CREATE_CFM, - BTA_HL_DCH_MCA_CREATE_IND, - BTA_HL_DCH_MCA_OPEN_CFM, - BTA_HL_DCH_MCA_OPEN_IND, - BTA_HL_DCH_MCA_CLOSE, - BTA_HL_DCH_MCA_CLOSE_CFM, - BTA_HL_DCH_MCA_CLOSE_IND, - BTA_HL_DCH_CLOSE_CMPL, - BTA_HL_DCH_MCA_RCV_DATA, - - BTA_HL_DCH_SDP_INIT, - BTA_HL_DCH_MCA_RECONNECT, - BTA_HL_DCH_MCA_RECONNECT_IND, - BTA_HL_DCH_MCA_RECONNECT_CFM, - BTA_HL_DCH_CLOSE_ECHO_TEST, - BTA_HL_DCH_CREATE_RSP, - BTA_HL_DCH_MCA_ABORT, - BTA_HL_DCH_MCA_ABORT_IND, - BTA_HL_DCH_MCA_ABORT_CFM, - BTA_HL_DCH_MCA_CONG_CHANGE, - - BTA_HL_DCH_SDP_FAIL, - BTA_HL_DCH_SEND_DATA, - BTA_HL_DCH_CI_GET_TX_DATA, - BTA_HL_DCH_CI_PUT_RX_DATA, - BTA_HL_DCH_CI_GET_ECHO_DATA, - BTA_HL_DCH_ECHO_TEST, - BTA_HL_DCH_CI_PUT_ECHO_DATA, - BTA_HL_DCH_IGNORE +enum { + BTA_HL_DCH_MCA_CREATE, + BTA_HL_DCH_MCA_CREATE_CFM, + BTA_HL_DCH_MCA_CREATE_IND, + BTA_HL_DCH_MCA_OPEN_CFM, + BTA_HL_DCH_MCA_OPEN_IND, + BTA_HL_DCH_MCA_CLOSE, + BTA_HL_DCH_MCA_CLOSE_CFM, + BTA_HL_DCH_MCA_CLOSE_IND, + BTA_HL_DCH_CLOSE_CMPL, + BTA_HL_DCH_MCA_RCV_DATA, + + BTA_HL_DCH_SDP_INIT, + BTA_HL_DCH_MCA_RECONNECT, + BTA_HL_DCH_MCA_RECONNECT_IND, + BTA_HL_DCH_MCA_RECONNECT_CFM, + BTA_HL_DCH_CLOSE_ECHO_TEST, + BTA_HL_DCH_CREATE_RSP, + BTA_HL_DCH_MCA_ABORT, + BTA_HL_DCH_MCA_ABORT_IND, + BTA_HL_DCH_MCA_ABORT_CFM, + BTA_HL_DCH_MCA_CONG_CHANGE, + + BTA_HL_DCH_SDP_FAIL, + BTA_HL_DCH_SEND_DATA, + BTA_HL_DCH_CI_GET_TX_DATA, + BTA_HL_DCH_CI_PUT_RX_DATA, + BTA_HL_DCH_CI_GET_ECHO_DATA, + BTA_HL_DCH_ECHO_TEST, + BTA_HL_DCH_CI_PUT_ECHO_DATA, + BTA_HL_DCH_IGNORE }; -typedef void (*tBTA_HL_DCH_ACTION)(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, tBTA_HL_DATA *p_data); - -static const tBTA_HL_DCH_ACTION bta_hl_dch_action[] = -{ - bta_hl_dch_mca_create, - bta_hl_dch_mca_create_cfm, - bta_hl_dch_mca_create_ind, - bta_hl_dch_mca_open_cfm, - bta_hl_dch_mca_open_ind, - bta_hl_dch_mca_close, - bta_hl_dch_mca_close_cfm, - bta_hl_dch_mca_close_ind, - bta_hl_dch_close_cmpl, - bta_hl_dch_mca_rcv_data, - - bta_hl_dch_sdp_init, - bta_hl_dch_mca_reconnect, - bta_hl_dch_mca_reconnect_ind, - bta_hl_dch_mca_reconnect_cfm, - bta_hl_dch_close_echo_test, - bta_hl_dch_create_rsp, - bta_hl_dch_mca_abort, - bta_hl_dch_mca_abort_ind, - bta_hl_dch_mca_abort_cfm, - bta_hl_dch_mca_cong_change, - - bta_hl_dch_sdp_fail, - bta_hl_dch_send_data, - bta_hl_dch_ci_get_tx_data, - bta_hl_dch_ci_put_rx_data, - bta_hl_dch_ci_get_echo_data, - bta_hl_dch_echo_test, +typedef void (*tBTA_HL_DCH_ACTION)(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx, tBTA_HL_DATA* p_data); + +static const tBTA_HL_DCH_ACTION bta_hl_dch_action[] = { + bta_hl_dch_mca_create, bta_hl_dch_mca_create_cfm, + bta_hl_dch_mca_create_ind, bta_hl_dch_mca_open_cfm, + bta_hl_dch_mca_open_ind, bta_hl_dch_mca_close, + bta_hl_dch_mca_close_cfm, bta_hl_dch_mca_close_ind, + bta_hl_dch_close_cmpl, bta_hl_dch_mca_rcv_data, + + bta_hl_dch_sdp_init, bta_hl_dch_mca_reconnect, + bta_hl_dch_mca_reconnect_ind, bta_hl_dch_mca_reconnect_cfm, + bta_hl_dch_close_echo_test, bta_hl_dch_create_rsp, + bta_hl_dch_mca_abort, bta_hl_dch_mca_abort_ind, + bta_hl_dch_mca_abort_cfm, bta_hl_dch_mca_cong_change, + + bta_hl_dch_sdp_fail, bta_hl_dch_send_data, + bta_hl_dch_ci_get_tx_data, bta_hl_dch_ci_put_rx_data, + bta_hl_dch_ci_get_echo_data, bta_hl_dch_echo_test, bta_hl_dch_ci_put_echo_data, }; - /* state table information */ -#define BTA_HL_DCH_ACTIONS 1 /* number of actions */ -#define BTA_HL_DCH_ACTION_COL 0 /* position of action */ -#define BTA_HL_DCH_NEXT_STATE 1 /* position of next state */ -#define BTA_HL_DCH_NUM_COLS 2 /* number of columns in state tables */ +#define BTA_HL_DCH_ACTIONS 1 /* number of actions */ +#define BTA_HL_DCH_ACTION_COL 0 /* position of action */ +#define BTA_HL_DCH_NEXT_STATE 1 /* position of next state */ +#define BTA_HL_DCH_NUM_COLS 2 /* number of columns in state tables */ /* state table for idle state */ -static const uint8_t bta_hl_dch_st_idle[][BTA_HL_DCH_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_HL_DCH_SDP_INIT_EVT */ {BTA_HL_DCH_SDP_INIT, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_DCH_OPEN_EVT */ {BTA_HL_DCH_MCA_CREATE, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_MCA_CREATE_IND_EVT */ {BTA_HL_DCH_MCA_CREATE_IND, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_MCA_CREATE_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_MCA_OPEN_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, - -/* BTA_HL_MCA_OPEN_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_CLOSE_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_MCA_CLOSE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_MCA_CLOSE_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_API_SEND_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, - -/* BTA_HL_MCA_RCV_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_CLOSE_CMPL_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_RECONNECT_EVT */ {BTA_HL_DCH_MCA_RECONNECT, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_DCH_SDP_FAIL_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_MCA_RECONNECT_IND_EVT*/ {BTA_HL_DCH_MCA_RECONNECT_IND, BTA_HL_DCH_OPENING_ST}, - -/* BTA_HL_MCA_RECONNECT_CFM_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_CLOSE_ECHO_TEST_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_API_DCH_CREATE_RSP_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_ABORT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_MCA_ABORT_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, - -/* BTA_HL_MCA_ABORT_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_MCA_CONG_CHG_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_CI_GET_TX_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_CI_PUT_RX_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_CI_GET_ECHO_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_ECHO_TEST_EVT */ {BTA_HL_DCH_ECHO_TEST, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_CI_PUT_ECHO_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST} -}; +static const uint8_t bta_hl_dch_st_idle[][BTA_HL_DCH_NUM_COLS] = { + /* Event Action 1 Next + state */ + /* BTA_HL_DCH_SDP_INIT_EVT */ {BTA_HL_DCH_SDP_INIT, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_DCH_OPEN_EVT */ {BTA_HL_DCH_MCA_CREATE, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_MCA_CREATE_IND_EVT */ {BTA_HL_DCH_MCA_CREATE_IND, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_MCA_CREATE_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_MCA_OPEN_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + + /* BTA_HL_MCA_OPEN_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_CLOSE_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_MCA_CLOSE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_MCA_CLOSE_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_API_SEND_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + + /* BTA_HL_MCA_RCV_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_CLOSE_CMPL_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_RECONNECT_EVT */ {BTA_HL_DCH_MCA_RECONNECT, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_DCH_SDP_FAIL_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_MCA_RECONNECT_IND_EVT*/ {BTA_HL_DCH_MCA_RECONNECT_IND, + BTA_HL_DCH_OPENING_ST}, + + /* BTA_HL_MCA_RECONNECT_CFM_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_CLOSE_ECHO_TEST_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_API_DCH_CREATE_RSP_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_ABORT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_MCA_ABORT_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + + /* BTA_HL_MCA_ABORT_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_MCA_CONG_CHG_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_CI_GET_TX_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_CI_PUT_RX_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_CI_GET_ECHO_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_ECHO_TEST_EVT */ {BTA_HL_DCH_ECHO_TEST, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_CI_PUT_ECHO_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}}; /* state table for opening state */ -static const uint8_t bta_hl_dch_st_opening[][BTA_HL_DCH_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_HL_DCH_SDP_INIT_EVT */ {BTA_HL_DCH_SDP_INIT, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_DCH_OPEN_EVT */ {BTA_HL_DCH_MCA_CREATE, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_MCA_CREATE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_MCA_CREATE_CFM_EVT */ {BTA_HL_DCH_MCA_CREATE_CFM, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_MCA_OPEN_IND_EVT */ {BTA_HL_DCH_MCA_OPEN_IND, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_OPEN_CFM_EVT */ {BTA_HL_DCH_MCA_OPEN_CFM, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_CLOSE_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_MCA_CLOSE_IND_EVT */ {BTA_HL_DCH_MCA_CLOSE_IND, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_CLOSE_CFM_EVT */ {BTA_HL_DCH_MCA_CLOSE_CFM, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_API_SEND_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, - -/* BTA_HL_MCA_RCV_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_CLOSE_CMPL_EVT */ {BTA_HL_DCH_CLOSE_CMPL, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_RECONNECT_EVT */ {BTA_HL_DCH_MCA_RECONNECT, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_DCH_SDP_FAIL_EVT */ {BTA_HL_DCH_SDP_FAIL, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_RECONNECT_IND_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_MCA_RECONNECT_CFM_EVT*/ {BTA_HL_DCH_MCA_RECONNECT_CFM, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_DCH_CLOSE_ECHO_TEST_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_API_DCH_CREATE_RSP_EVT */ {BTA_HL_DCH_CREATE_RSP, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_DCH_ABORT_EVT */ {BTA_HL_DCH_MCA_ABORT, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_MCA_ABORT_IND_EVT */ {BTA_HL_DCH_MCA_ABORT_IND, BTA_HL_DCH_OPENING_ST}, - -/* BTA_HL_MCA_ABORT_CFM_EVT */ {BTA_HL_DCH_MCA_ABORT_CFM, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_MCA_CONG_CHG_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_CI_GET_TX_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_CI_PUT_RX_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_CI_GET_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_GET_ECHO_DATA, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_DCH_ECHO_TEST_EVT */ {BTA_HL_DCH_ECHO_TEST, BTA_HL_DCH_OPENING_ST}, -/* BTA_HL_CI_PUT_ECHO_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST} -}; +static const uint8_t bta_hl_dch_st_opening[][BTA_HL_DCH_NUM_COLS] = { + /* Event Action 1 Next + state */ + /* BTA_HL_DCH_SDP_INIT_EVT */ {BTA_HL_DCH_SDP_INIT, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_DCH_OPEN_EVT */ {BTA_HL_DCH_MCA_CREATE, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_MCA_CREATE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_MCA_CREATE_CFM_EVT */ {BTA_HL_DCH_MCA_CREATE_CFM, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_MCA_OPEN_IND_EVT */ {BTA_HL_DCH_MCA_OPEN_IND, + BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_OPEN_CFM_EVT */ {BTA_HL_DCH_MCA_OPEN_CFM, + BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_CLOSE_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_MCA_CLOSE_IND_EVT */ {BTA_HL_DCH_MCA_CLOSE_IND, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_CLOSE_CFM_EVT */ {BTA_HL_DCH_MCA_CLOSE_CFM, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_API_SEND_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + + /* BTA_HL_MCA_RCV_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_CLOSE_CMPL_EVT */ {BTA_HL_DCH_CLOSE_CMPL, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_RECONNECT_EVT */ {BTA_HL_DCH_MCA_RECONNECT, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_DCH_SDP_FAIL_EVT */ {BTA_HL_DCH_SDP_FAIL, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_RECONNECT_IND_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_MCA_RECONNECT_CFM_EVT*/ {BTA_HL_DCH_MCA_RECONNECT_CFM, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_DCH_CLOSE_ECHO_TEST_EVT*/ {BTA_HL_DCH_IGNORE, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_API_DCH_CREATE_RSP_EVT */ {BTA_HL_DCH_CREATE_RSP, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_DCH_ABORT_EVT */ {BTA_HL_DCH_MCA_ABORT, BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_MCA_ABORT_IND_EVT */ {BTA_HL_DCH_MCA_ABORT_IND, + BTA_HL_DCH_OPENING_ST}, + + /* BTA_HL_MCA_ABORT_CFM_EVT */ {BTA_HL_DCH_MCA_ABORT_CFM, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_MCA_CONG_CHG_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_CI_GET_TX_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_CI_PUT_RX_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_CI_GET_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_GET_ECHO_DATA, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_DCH_ECHO_TEST_EVT */ {BTA_HL_DCH_ECHO_TEST, + BTA_HL_DCH_OPENING_ST}, + /* BTA_HL_CI_PUT_ECHO_DATA_EVT */ {BTA_HL_DCH_IGNORE, + BTA_HL_DCH_OPENING_ST}}; /* state table for open state */ -static const uint8_t bta_hl_dch_st_open[][BTA_HL_DCH_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_HL_DCH_SDP_INIT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_OPEN_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_CREATE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_CREATE_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_OPEN_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_OPEN_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_CLOSE_EVT */ {BTA_HL_DCH_MCA_CLOSE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_CLOSE_IND_EVT */ {BTA_HL_DCH_MCA_CLOSE_IND, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_CLOSE_CFM_EVT */ {BTA_HL_DCH_MCA_CLOSE_CFM, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_API_SEND_DATA_EVT */ {BTA_HL_DCH_SEND_DATA, BTA_HL_DCH_OPEN_ST}, - -/* BTA_HL_MCA_RCV_DATA_EVT */ {BTA_HL_DCH_MCA_RCV_DATA, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_CLOSE_CMPL_EVT */ {BTA_HL_DCH_CLOSE_CMPL, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_RECONNECT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_SDP_FAIL_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_RECONNECT_IND_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_RECONNECT_CFM_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_CLOSE_ECHO_TEST_EVT*/ {BTA_HL_DCH_CLOSE_ECHO_TEST, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_API_DCH_CREATE_RSP_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_ABORT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_ABORT_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, - -/* BTA_HL_DCH_ABORT_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_MCA_CONG_CHG_EVT */ {BTA_HL_DCH_MCA_CONG_CHANGE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_CI_GET_TX_DATA_EVT */ {BTA_HL_DCH_CI_GET_TX_DATA, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_CI_PUT_RX_DATA_EVT */ {BTA_HL_DCH_CI_PUT_RX_DATA, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_CI_GET_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_GET_ECHO_DATA, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_DCH_ECHO_TEST_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, -/* BTA_HL_CI_PUT_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_PUT_ECHO_DATA, BTA_HL_DCH_OPEN_ST} -}; - +static const uint8_t bta_hl_dch_st_open[][BTA_HL_DCH_NUM_COLS] = { + /* Event Action 1 Next + state */ + /* BTA_HL_DCH_SDP_INIT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_OPEN_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_CREATE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_CREATE_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_OPEN_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_OPEN_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_CLOSE_EVT */ {BTA_HL_DCH_MCA_CLOSE, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_CLOSE_IND_EVT */ {BTA_HL_DCH_MCA_CLOSE_IND, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_CLOSE_CFM_EVT */ {BTA_HL_DCH_MCA_CLOSE_CFM, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_API_SEND_DATA_EVT */ {BTA_HL_DCH_SEND_DATA, BTA_HL_DCH_OPEN_ST}, + + /* BTA_HL_MCA_RCV_DATA_EVT */ {BTA_HL_DCH_MCA_RCV_DATA, + BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_CLOSE_CMPL_EVT */ {BTA_HL_DCH_CLOSE_CMPL, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_RECONNECT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_SDP_FAIL_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_RECONNECT_IND_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_RECONNECT_CFM_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_CLOSE_ECHO_TEST_EVT*/ {BTA_HL_DCH_CLOSE_ECHO_TEST, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_API_DCH_CREATE_RSP_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_ABORT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_ABORT_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + + /* BTA_HL_DCH_ABORT_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_MCA_CONG_CHG_EVT */ {BTA_HL_DCH_MCA_CONG_CHANGE, + BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_CI_GET_TX_DATA_EVT */ {BTA_HL_DCH_CI_GET_TX_DATA, + BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_CI_PUT_RX_DATA_EVT */ {BTA_HL_DCH_CI_PUT_RX_DATA, + BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_CI_GET_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_GET_ECHO_DATA, + BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_DCH_ECHO_TEST_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_OPEN_ST}, + /* BTA_HL_CI_PUT_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_PUT_ECHO_DATA, + BTA_HL_DCH_OPEN_ST}}; /* state table for closing state */ -static const uint8_t bta_hl_dch_st_closing[][BTA_HL_DCH_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_HL_DCH_SDP_INIT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_DCH_OPEN_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_CREATE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_CREATE_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_OPEN_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_OPEN_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_DCH_CLOSE_EVT */ {BTA_HL_DCH_MCA_CLOSE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_CLOSE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_CLOSE_CFM_EVT */ {BTA_HL_DCH_MCA_CLOSE_CFM, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_API_SEND_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, - -/* BTA_HL_MCA_RCV_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_DCH_CLOSE_CMPL_EVT */ {BTA_HL_DCH_CLOSE_CMPL, BTA_HL_DCH_IDLE_ST}, -/* BTA_HL_DCH_RECONNECT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_DCH_SDP_FAIL_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_RECONNECT_IND_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_RECONNECT_CFM_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_DCH_CLOSE_ECHO_TEST_EVT*/ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_API_DCH_CREATE_RSP_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_DCH_ABORT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_ABORT_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, - -/* BTA_HL_DCH_ABORT_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_MCA_CONG_CHG_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_CI_GET_TX_DATA_EVT */ {BTA_HL_DCH_CI_GET_TX_DATA, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_CI_PUT_RX_DATA_EVT */ {BTA_HL_DCH_CI_PUT_RX_DATA, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_CI_GET_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_GET_ECHO_DATA, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_DCH_ECHO_TEST_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, -/* BTA_HL_CI_PUT_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_PUT_ECHO_DATA, BTA_HL_DCH_CLOSING_ST} -}; +static const uint8_t bta_hl_dch_st_closing[][BTA_HL_DCH_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_HL_DCH_SDP_INIT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_DCH_OPEN_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_CREATE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_CREATE_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_OPEN_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_OPEN_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_DCH_CLOSE_EVT */ {BTA_HL_DCH_MCA_CLOSE, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_CLOSE_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_CLOSE_CFM_EVT */ {BTA_HL_DCH_MCA_CLOSE_CFM, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_API_SEND_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + + /* BTA_HL_MCA_RCV_DATA_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_DCH_CLOSE_CMPL_EVT */ {BTA_HL_DCH_CLOSE_CMPL, BTA_HL_DCH_IDLE_ST}, + /* BTA_HL_DCH_RECONNECT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_DCH_SDP_FAIL_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_RECONNECT_IND_EVT*/ {BTA_HL_DCH_IGNORE, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_RECONNECT_CFM_EVT*/ {BTA_HL_DCH_IGNORE, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_DCH_CLOSE_ECHO_TEST_EVT*/ {BTA_HL_DCH_IGNORE, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_API_DCH_CREATE_RSP_EVT */ {BTA_HL_DCH_IGNORE, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_DCH_ABORT_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_ABORT_IND_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + + /* BTA_HL_DCH_ABORT_CFM_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_MCA_CONG_CHG_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_CI_GET_TX_DATA_EVT */ {BTA_HL_DCH_CI_GET_TX_DATA, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_CI_PUT_RX_DATA_EVT */ {BTA_HL_DCH_CI_PUT_RX_DATA, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_CI_GET_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_GET_ECHO_DATA, + BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_DCH_ECHO_TEST_EVT */ {BTA_HL_DCH_IGNORE, BTA_HL_DCH_CLOSING_ST}, + /* BTA_HL_CI_PUT_ECHO_DATA_EVT */ {BTA_HL_DCH_CI_PUT_ECHO_DATA, + BTA_HL_DCH_CLOSING_ST}}; /* type for state table */ typedef const uint8_t (*tBTA_HL_DCH_ST_TBL)[BTA_HL_DCH_NUM_COLS]; /* state table */ -const tBTA_HL_DCH_ST_TBL bta_hl_dch_st_tbl[] = -{ - bta_hl_dch_st_idle, - bta_hl_dch_st_opening, - bta_hl_dch_st_open, - bta_hl_dch_st_closing -}; +const tBTA_HL_DCH_ST_TBL bta_hl_dch_st_tbl[] = { + bta_hl_dch_st_idle, bta_hl_dch_st_opening, bta_hl_dch_st_open, + bta_hl_dch_st_closing}; /***************************************************************************** * CCH State Table @@ -291,117 +306,117 @@ const tBTA_HL_DCH_ST_TBL bta_hl_dch_st_tbl[] = * Constants and types ****************************************************************************/ /* state machine action enumeration list for CCH */ -enum -{ - BTA_HL_CCH_SDP_INIT, - BTA_HL_CCH_MCA_OPEN, - BTA_HL_CCH_MCA_CLOSE, - BTA_HL_CCH_CLOSE_CMPL, - BTA_HL_CCH_MCA_CONNECT, - BTA_HL_CCH_MCA_DISCONNECT, - BTA_HL_CCH_MCA_RSP_TOUT, - BTA_HL_CCH_MCA_DISC_OPEN, - BTA_HL_CCH_IGNORE +enum { + BTA_HL_CCH_SDP_INIT, + BTA_HL_CCH_MCA_OPEN, + BTA_HL_CCH_MCA_CLOSE, + BTA_HL_CCH_CLOSE_CMPL, + BTA_HL_CCH_MCA_CONNECT, + BTA_HL_CCH_MCA_DISCONNECT, + BTA_HL_CCH_MCA_RSP_TOUT, + BTA_HL_CCH_MCA_DISC_OPEN, + BTA_HL_CCH_IGNORE }; /* type for action functions */ -typedef void (*tBTA_HL_CCH_ACTION)(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data); +typedef void (*tBTA_HL_CCH_ACTION)(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data); /* action function list for MAS */ -const tBTA_HL_CCH_ACTION bta_hl_cch_action[] = -{ - bta_hl_cch_sdp_init, - bta_hl_cch_mca_open, - bta_hl_cch_mca_close, - bta_hl_cch_close_cmpl, - bta_hl_cch_mca_connect, - bta_hl_cch_mca_disconnect, - bta_hl_cch_mca_rsp_tout, - bta_hl_cch_mca_disc_open -}; - +const tBTA_HL_CCH_ACTION bta_hl_cch_action[] = { + bta_hl_cch_sdp_init, bta_hl_cch_mca_open, bta_hl_cch_mca_close, + bta_hl_cch_close_cmpl, bta_hl_cch_mca_connect, bta_hl_cch_mca_disconnect, + bta_hl_cch_mca_rsp_tout, bta_hl_cch_mca_disc_open}; /* state table information */ -#define BTA_HL_CCH_ACTIONS 1 /* number of actions */ -#define BTA_HL_CCH_NEXT_STATE 1 /* position of next state */ -#define BTA_HL_CCH_NUM_COLS 2 /* number of columns in state tables */ - +#define BTA_HL_CCH_ACTIONS 1 /* number of actions */ +#define BTA_HL_CCH_NEXT_STATE 1 /* position of next state */ +#define BTA_HL_CCH_NUM_COLS 2 /* number of columns in state tables */ /* state table for MAS idle state */ -static const uint8_t bta_hl_cch_st_idle[][BTA_HL_CCH_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_HL_CCH_OPEN_EVT */ {BTA_HL_CCH_SDP_INIT, BTA_HL_CCH_OPENING_ST}, -/* BTA_HL_CCH_SDP_OK_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_CCH_SDP_FAIL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_MCA_CONNECT_IND_EVT */ {BTA_HL_CCH_MCA_CONNECT, BTA_HL_CCH_OPEN_ST}, -/* BTA_HL_MCA_DISCONNECT_IND_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_CCH_CLOSE_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST} -}; +static const uint8_t bta_hl_cch_st_idle[][BTA_HL_CCH_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_HL_CCH_OPEN_EVT */ {BTA_HL_CCH_SDP_INIT, + BTA_HL_CCH_OPENING_ST}, + /* BTA_HL_CCH_SDP_OK_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_CCH_SDP_FAIL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_MCA_CONNECT_IND_EVT */ {BTA_HL_CCH_MCA_CONNECT, + BTA_HL_CCH_OPEN_ST}, + /* BTA_HL_MCA_DISCONNECT_IND_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_CCH_CLOSE_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_IGNORE, + BTA_HL_CCH_IDLE_ST}}; /* state table for obex/rfcomm connection state */ -static const uint8_t bta_hl_cch_st_opening[][BTA_HL_CCH_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_HL_CCH_OPEN_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPENING_ST}, -/* BTA_HL_CCH_SDP_OK_EVT */ {BTA_HL_CCH_MCA_OPEN, BTA_HL_CCH_OPENING_ST}, -/* BTA_HL_CCH_SDP_FAIL_EVT */ {BTA_HL_CCH_CLOSE_CMPL, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_MCA_CONNECT_IND_EVT */ {BTA_HL_CCH_MCA_CONNECT, BTA_HL_CCH_OPEN_ST}, -/* BTA_HL_MCA_DISCONNECT_IND_EVT */ {BTA_HL_CCH_MCA_DISCONNECT, BTA_HL_CCH_CLOSING_ST}, -/* BTA_HL_CCH_CLOSE_EVT */ {BTA_HL_CCH_MCA_CLOSE, BTA_HL_CCH_CLOSING_ST}, -/* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_CLOSE_CMPL, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_MCA_RSP_TOUT_IND_EVT */ {BTA_HL_CCH_MCA_RSP_TOUT, BTA_HL_CCH_CLOSING_ST} -}; +static const uint8_t bta_hl_cch_st_opening[][BTA_HL_CCH_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_HL_CCH_OPEN_EVT */ {BTA_HL_CCH_IGNORE, + BTA_HL_CCH_OPENING_ST}, + /* BTA_HL_CCH_SDP_OK_EVT */ {BTA_HL_CCH_MCA_OPEN, + BTA_HL_CCH_OPENING_ST}, + /* BTA_HL_CCH_SDP_FAIL_EVT */ {BTA_HL_CCH_CLOSE_CMPL, + BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_MCA_CONNECT_IND_EVT */ {BTA_HL_CCH_MCA_CONNECT, + BTA_HL_CCH_OPEN_ST}, + /* BTA_HL_MCA_DISCONNECT_IND_EVT */ {BTA_HL_CCH_MCA_DISCONNECT, + BTA_HL_CCH_CLOSING_ST}, + /* BTA_HL_CCH_CLOSE_EVT */ {BTA_HL_CCH_MCA_CLOSE, + BTA_HL_CCH_CLOSING_ST}, + /* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_CLOSE_CMPL, + BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_MCA_RSP_TOUT_IND_EVT */ {BTA_HL_CCH_MCA_RSP_TOUT, + BTA_HL_CCH_CLOSING_ST}}; /* state table for open state */ -static const uint8_t bta_hl_cch_st_open[][BTA_HL_CCH_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_HL_CCH_OPEN_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, -/* BTA_HL_CCH_SDP_OK_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, -/* BTA_HL_CCH_SDP_FAIL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, -/* BTA_HL_MCA_CONNECT_IND_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, -/* BTA_HL_MCA_DISCONNECT_IND_EVT */ {BTA_HL_CCH_MCA_DISCONNECT, BTA_HL_CCH_CLOSING_ST}, -/* BTA_HL_CCH_CLOSE_EVT */ {BTA_HL_CCH_MCA_CLOSE, BTA_HL_CCH_CLOSING_ST}, -/* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, -/* BTA_HL_MCA_RSP_TOUT_IND_EVT */ {BTA_HL_CCH_MCA_RSP_TOUT, BTA_HL_CCH_CLOSING_ST} -}; +static const uint8_t bta_hl_cch_st_open[][BTA_HL_CCH_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_HL_CCH_OPEN_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, + /* BTA_HL_CCH_SDP_OK_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, + /* BTA_HL_CCH_SDP_FAIL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, + /* BTA_HL_MCA_CONNECT_IND_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, + /* BTA_HL_MCA_DISCONNECT_IND_EVT */ {BTA_HL_CCH_MCA_DISCONNECT, + BTA_HL_CCH_CLOSING_ST}, + /* BTA_HL_CCH_CLOSE_EVT */ {BTA_HL_CCH_MCA_CLOSE, + BTA_HL_CCH_CLOSING_ST}, + /* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_OPEN_ST}, + /* BTA_HL_MCA_RSP_TOUT_IND_EVT */ {BTA_HL_CCH_MCA_RSP_TOUT, + BTA_HL_CCH_CLOSING_ST}}; /* state table for closing state */ -static const uint8_t bta_hl_cch_st_closing[][BTA_HL_CCH_NUM_COLS] = -{ -/* Event Action 1 Next state */ -/* BTA_HL_CCH_OPEN_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_CLOSING_ST}, -/* BTA_HL_CCH_SDP_OK_EVT */ {BTA_HL_CCH_CLOSE_CMPL, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_CCH_SDP_FAIL_EVT */ {BTA_HL_CCH_CLOSE_CMPL, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_MCA_CONNECT_IND_EVT */ {BTA_HL_CCH_MCA_DISC_OPEN, BTA_HL_CCH_CLOSING_ST}, -/* BTA_HL_MCA_DISCONNECT_IND_EVT */ {BTA_HL_CCH_MCA_DISCONNECT, BTA_HL_CCH_CLOSING_ST}, -/* BTA_HL_CCH_CLOSE_EVT */ {BTA_HL_CCH_MCA_CLOSE, BTA_HL_CCH_CLOSING_ST}, -/* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_CLOSE_CMPL, BTA_HL_CCH_IDLE_ST}, -/* BTA_HL_MCA_RSP_TOUT_IND_EVT */ {BTA_HL_CCH_IGNORE, BTA_HL_CCH_CLOSING_ST} -}; +static const uint8_t bta_hl_cch_st_closing[][BTA_HL_CCH_NUM_COLS] = { + /* Event Action 1 Next state */ + /* BTA_HL_CCH_OPEN_EVT */ {BTA_HL_CCH_IGNORE, + BTA_HL_CCH_CLOSING_ST}, + /* BTA_HL_CCH_SDP_OK_EVT */ {BTA_HL_CCH_CLOSE_CMPL, + BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_CCH_SDP_FAIL_EVT */ {BTA_HL_CCH_CLOSE_CMPL, + BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_MCA_CONNECT_IND_EVT */ {BTA_HL_CCH_MCA_DISC_OPEN, + BTA_HL_CCH_CLOSING_ST}, + /* BTA_HL_MCA_DISCONNECT_IND_EVT */ {BTA_HL_CCH_MCA_DISCONNECT, + BTA_HL_CCH_CLOSING_ST}, + /* BTA_HL_CCH_CLOSE_EVT */ {BTA_HL_CCH_MCA_CLOSE, + BTA_HL_CCH_CLOSING_ST}, + /* BTA_HL_CCH_CLOSE_CMPL_EVT */ {BTA_HL_CCH_CLOSE_CMPL, + BTA_HL_CCH_IDLE_ST}, + /* BTA_HL_MCA_RSP_TOUT_IND_EVT */ {BTA_HL_CCH_IGNORE, + BTA_HL_CCH_CLOSING_ST}}; /* type for state table CCH */ typedef const uint8_t (*tBTA_HL_CCH_ST_TBL)[BTA_HL_CCH_NUM_COLS]; /* MAS state table */ -const tBTA_HL_CCH_ST_TBL bta_hl_cch_st_tbl[] = -{ - bta_hl_cch_st_idle, - bta_hl_cch_st_opening, - bta_hl_cch_st_open, - bta_hl_cch_st_closing -}; - +const tBTA_HL_CCH_ST_TBL bta_hl_cch_st_tbl[] = { + bta_hl_cch_st_idle, bta_hl_cch_st_opening, bta_hl_cch_st_open, + bta_hl_cch_st_closing}; /***************************************************************************** * Global data ****************************************************************************/ /* HL control block */ -tBTA_HL_CB bta_hl_cb; +tBTA_HL_CB bta_hl_cb; /******************************************************************************* * @@ -412,53 +427,46 @@ tBTA_HL_CB bta_hl_cb; * Returns void * ******************************************************************************/ -void bta_hl_cch_sm_execute(uint8_t app_idx, uint8_t mcl_idx, - uint16_t event, tBTA_HL_DATA *p_data) -{ - tBTA_HL_CCH_ST_TBL state_table; - uint8_t action; - int i; - tBTA_HL_MCL_CB *p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); +void bta_hl_cch_sm_execute(uint8_t app_idx, uint8_t mcl_idx, uint16_t event, + tBTA_HL_DATA* p_data) { + tBTA_HL_CCH_ST_TBL state_table; + uint8_t action; + int i; + tBTA_HL_MCL_CB* p_cb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); #if (BTA_HL_DEBUG == TRUE) - tBTA_HL_CCH_STATE in_state = p_cb->cch_state; - uint16_t cur_evt = event; - APPL_TRACE_DEBUG("HDP CCH Event Handler: State 0x%02x [%s], Event [%s]", in_state, - bta_hl_cch_state_code(in_state), - bta_hl_evt_code(cur_evt)); + tBTA_HL_CCH_STATE in_state = p_cb->cch_state; + uint16_t cur_evt = event; + APPL_TRACE_DEBUG("HDP CCH Event Handler: State 0x%02x [%s], Event [%s]", + in_state, bta_hl_cch_state_code(in_state), + bta_hl_evt_code(cur_evt)); #endif - /* look up the state table for the current state */ - state_table = bta_hl_cch_st_tbl[p_cb->cch_state]; + /* look up the state table for the current state */ + state_table = bta_hl_cch_st_tbl[p_cb->cch_state]; - event &= 0x00FF; + event &= 0x00FF; - /* set next state */ - p_cb->cch_state = state_table[event][BTA_HL_CCH_NEXT_STATE]; + /* set next state */ + p_cb->cch_state = state_table[event][BTA_HL_CCH_NEXT_STATE]; - for (i = 0; i < BTA_HL_CCH_ACTIONS; i++) - { - if ((action = state_table[event][i]) != BTA_HL_CCH_IGNORE) - { - (*bta_hl_cch_action[action])(app_idx, mcl_idx, p_data); - } - else - { - /* discard HDP data */ - bta_hl_discard_data(p_data->hdr.event, p_data); - break; - } + for (i = 0; i < BTA_HL_CCH_ACTIONS; i++) { + if ((action = state_table[event][i]) != BTA_HL_CCH_IGNORE) { + (*bta_hl_cch_action[action])(app_idx, mcl_idx, p_data); + } else { + /* discard HDP data */ + bta_hl_discard_data(p_data->hdr.event, p_data); + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (in_state != p_cb->cch_state) - { - APPL_TRACE_DEBUG("HL CCH State Change: [%s] -> [%s] after [%s]", - bta_hl_cch_state_code(in_state), - bta_hl_cch_state_code(p_cb->cch_state), - bta_hl_evt_code(cur_evt)); - } + if (in_state != p_cb->cch_state) { + APPL_TRACE_DEBUG("HL CCH State Change: [%s] -> [%s] after [%s]", + bta_hl_cch_state_code(in_state), + bta_hl_cch_state_code(p_cb->cch_state), + bta_hl_evt_code(cur_evt)); + } #endif - } /******************************************************************************* @@ -471,51 +479,44 @@ void bta_hl_cch_sm_execute(uint8_t app_idx, uint8_t mcl_idx, * ******************************************************************************/ void bta_hl_dch_sm_execute(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - uint16_t event, tBTA_HL_DATA *p_data) -{ - tBTA_HL_DCH_ST_TBL state_table; - uint8_t action; - int i; - tBTA_HL_MDL_CB *p_cb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + uint16_t event, tBTA_HL_DATA* p_data) { + tBTA_HL_DCH_ST_TBL state_table; + uint8_t action; + int i; + tBTA_HL_MDL_CB* p_cb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) - tBTA_HL_DCH_STATE in_state = p_cb->dch_state; - uint16_t cur_evt = event; - APPL_TRACE_DEBUG("HDP DCH Event Handler: State 0x%02x [%s], Event [%s]", in_state, - bta_hl_dch_state_code(in_state), - bta_hl_evt_code(cur_evt)); + tBTA_HL_DCH_STATE in_state = p_cb->dch_state; + uint16_t cur_evt = event; + APPL_TRACE_DEBUG("HDP DCH Event Handler: State 0x%02x [%s], Event [%s]", + in_state, bta_hl_dch_state_code(in_state), + bta_hl_evt_code(cur_evt)); #endif - /* look up the state table for the current state */ - state_table = bta_hl_dch_st_tbl[p_cb->dch_state]; - event -= BTA_HL_DCH_EVT_MIN; + /* look up the state table for the current state */ + state_table = bta_hl_dch_st_tbl[p_cb->dch_state]; + event -= BTA_HL_DCH_EVT_MIN; - /* set next state */ - p_cb->dch_state = state_table[event][BTA_HL_DCH_NEXT_STATE]; + /* set next state */ + p_cb->dch_state = state_table[event][BTA_HL_DCH_NEXT_STATE]; - for (i = 0; i < BTA_HL_DCH_ACTIONS; i++) - { - if ((action = state_table[event][i]) != BTA_HL_DCH_IGNORE) - { - (*bta_hl_dch_action[action])(app_idx, mcl_idx, mdl_idx, p_data); - } - else - { - /* discard mas data */ - bta_hl_discard_data(p_data->hdr.event, p_data); - break; - } + for (i = 0; i < BTA_HL_DCH_ACTIONS; i++) { + if ((action = state_table[event][i]) != BTA_HL_DCH_IGNORE) { + (*bta_hl_dch_action[action])(app_idx, mcl_idx, mdl_idx, p_data); + } else { + /* discard mas data */ + bta_hl_discard_data(p_data->hdr.event, p_data); + break; } - + } #if (BTA_HL_DEBUG == TRUE) - if (in_state != p_cb->dch_state) - { - APPL_TRACE_DEBUG("HL DCH State Change: [%s] -> [%s] after [%s]", - bta_hl_dch_state_code(in_state), - bta_hl_dch_state_code(p_cb->dch_state), - bta_hl_evt_code(cur_evt)); - } + if (in_state != p_cb->dch_state) { + APPL_TRACE_DEBUG("HL DCH State Change: [%s] -> [%s] after [%s]", + bta_hl_dch_state_code(in_state), + bta_hl_dch_state_code(p_cb->dch_state), + bta_hl_evt_code(cur_evt)); + } #endif } /******************************************************************************* @@ -527,29 +528,28 @@ void bta_hl_dch_sm_execute(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * Returns void * ******************************************************************************/ -static void bta_hl_api_enable(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL_CTRL evt_data; - - /* If already enabled then reject this request */ - if (p_cb->enable) - { - APPL_TRACE_ERROR("HL is already enabled"); - evt_data.enable_cfm.status = BTA_HL_STATUS_FAIL; - if (p_data->api_enable.p_cback) - p_data->api_enable.p_cback(BTA_HL_CTRL_ENABLE_CFM_EVT, (tBTA_HL_CTRL *) &evt_data); - return; - } +static void bta_hl_api_enable(tBTA_HL_CB* p_cb, tBTA_HL_DATA* p_data) { + tBTA_HL_CTRL evt_data; - /* Done with checking. now perform the enable oepration*/ - /* initialize control block */ - memset(p_cb, 0, sizeof(tBTA_HL_CB)); - p_cb->enable = true; - p_cb->p_ctrl_cback = p_data->api_enable.p_cback; - evt_data.enable_cfm.status = BTA_HL_STATUS_OK; + /* If already enabled then reject this request */ + if (p_cb->enable) { + APPL_TRACE_ERROR("HL is already enabled"); + evt_data.enable_cfm.status = BTA_HL_STATUS_FAIL; if (p_data->api_enable.p_cback) - p_data->api_enable.p_cback(BTA_HL_CTRL_ENABLE_CFM_EVT, (tBTA_HL_CTRL *) &evt_data); - + p_data->api_enable.p_cback(BTA_HL_CTRL_ENABLE_CFM_EVT, + (tBTA_HL_CTRL*)&evt_data); + return; + } + + /* Done with checking. now perform the enable oepration*/ + /* initialize control block */ + memset(p_cb, 0, sizeof(tBTA_HL_CB)); + p_cb->enable = true; + p_cb->p_ctrl_cback = p_data->api_enable.p_cback; + evt_data.enable_cfm.status = BTA_HL_STATUS_OK; + if (p_data->api_enable.p_cback) + p_data->api_enable.p_cback(BTA_HL_CTRL_ENABLE_CFM_EVT, + (tBTA_HL_CTRL*)&evt_data); } /******************************************************************************* * @@ -560,200 +560,173 @@ static void bta_hl_api_enable(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_hl_api_disable(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL_CTRL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - - if (p_cb->enable) - { - p_cb->disabling = true; - bta_hl_check_disable(p_data); - } - else - { - status = BTA_HL_STATUS_FAIL; - evt_data.disable_cfm.status = status; - if (p_cb->p_ctrl_cback) p_cb->p_ctrl_cback(BTA_HL_CTRL_DISABLE_CFM_EVT, (tBTA_HL_CTRL *) &evt_data); - } - +static void bta_hl_api_disable(tBTA_HL_CB* p_cb, tBTA_HL_DATA* p_data) { + tBTA_HL_CTRL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + + if (p_cb->enable) { + p_cb->disabling = true; + bta_hl_check_disable(p_data); + } else { + status = BTA_HL_STATUS_FAIL; + evt_data.disable_cfm.status = status; + if (p_cb->p_ctrl_cback) + p_cb->p_ctrl_cback(BTA_HL_CTRL_DISABLE_CFM_EVT, (tBTA_HL_CTRL*)&evt_data); + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_disable status =%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_disable status =%s", + bta_hl_status_code(status)); + } #endif - } /******************************************************************************* * * Function bta_hl_api_update * - * Description Process the API registration request to register an HDP applciation + * Description Process the API registration request to register an HDP + *applciation * * Returns void * ******************************************************************************/ -static void bta_hl_api_update(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(0); - tBTA_HL_STATUS status = BTA_HL_STATUS_FAIL; - - - APPL_TRACE_DEBUG("bta_hl_api_update"); - if (p_cb->enable) - { - - status = bta_hl_app_update(p_data->api_update.app_id, p_data->api_update.is_register); - if (!p_data->api_update.is_register) - { - APPL_TRACE_DEBUG("Deregister"); - memset(&evt_data, 0, sizeof(tBTA_HL)); - evt_data.dereg_cfm.status = status; - evt_data.dereg_cfm.app_id = p_data->api_update.app_id; - if (status == BTA_HL_STATUS_OK) - evt_data.dereg_cfm.app_handle = p_acb->app_handle; - if (p_acb->p_cback) - { - p_acb->p_cback(BTA_HL_DEREGISTER_CFM_EVT, (tBTA_HL *) &evt_data); - } - return ; - } - - } - - if (status != BTA_HL_STATUS_OK) - { - if ((status != BTA_HL_STATUS_DUPLICATE_APP_ID) && - (status != BTA_HL_STATUS_NO_RESOURCE)) - { - if (p_acb) - memset(p_acb, 0, sizeof(tBTA_HL_APP_CB)); - } - } +static void bta_hl_api_update(tBTA_HL_CB* p_cb, tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(0); + tBTA_HL_STATUS status = BTA_HL_STATUS_FAIL; + + APPL_TRACE_DEBUG("bta_hl_api_update"); + if (p_cb->enable) { + status = bta_hl_app_update(p_data->api_update.app_id, + p_data->api_update.is_register); + if (!p_data->api_update.is_register) { + APPL_TRACE_DEBUG("Deregister"); + memset(&evt_data, 0, sizeof(tBTA_HL)); + evt_data.dereg_cfm.status = status; + evt_data.dereg_cfm.app_id = p_data->api_update.app_id; + if (status == BTA_HL_STATUS_OK) + evt_data.dereg_cfm.app_handle = p_acb->app_handle; + if (p_acb->p_cback) { + p_acb->p_cback(BTA_HL_DEREGISTER_CFM_EVT, (tBTA_HL*)&evt_data); + } + return; + } + } + + if (status != BTA_HL_STATUS_OK) { + if ((status != BTA_HL_STATUS_DUPLICATE_APP_ID) && + (status != BTA_HL_STATUS_NO_RESOURCE)) { + if (p_acb) memset(p_acb, 0, sizeof(tBTA_HL_APP_CB)); + } + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_register status =%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_register status =%s", + bta_hl_status_code(status)); + } #endif - memset(&evt_data, 0, sizeof(tBTA_HL)); - evt_data.reg_cfm.status = status; - evt_data.reg_cfm.app_id = p_data->api_update.app_id; - if (status == BTA_HL_STATUS_OK) - evt_data.reg_cfm.app_handle = p_acb->app_handle; - if (p_data->api_reg.p_cback) - { - p_data->api_reg.p_cback(BTA_HL_REGISTER_CFM_EVT, (tBTA_HL *) &evt_data); - } - - if (status == BTA_HL_STATUS_OK) - { - evt_data.sdp_info_ind.app_handle = p_acb->app_handle; - evt_data.sdp_info_ind.ctrl_psm = p_acb->ctrl_psm; - evt_data.sdp_info_ind.data_psm = p_acb->data_psm; - evt_data.sdp_info_ind.data_x_spec = BTA_HL_SDP_IEEE_11073_20601; - evt_data.sdp_info_ind.mcap_sup_procs = BTA_HL_MCAP_SUP_PROC_MASK ; - - if (p_data->api_reg.p_cback) - { - p_data->api_reg.p_cback(BTA_HL_SDP_INFO_IND_EVT, (tBTA_HL *) &evt_data); - } - } + memset(&evt_data, 0, sizeof(tBTA_HL)); + evt_data.reg_cfm.status = status; + evt_data.reg_cfm.app_id = p_data->api_update.app_id; + if (status == BTA_HL_STATUS_OK) + evt_data.reg_cfm.app_handle = p_acb->app_handle; + if (p_data->api_reg.p_cback) { + p_data->api_reg.p_cback(BTA_HL_REGISTER_CFM_EVT, (tBTA_HL*)&evt_data); + } + + if (status == BTA_HL_STATUS_OK) { + evt_data.sdp_info_ind.app_handle = p_acb->app_handle; + evt_data.sdp_info_ind.ctrl_psm = p_acb->ctrl_psm; + evt_data.sdp_info_ind.data_psm = p_acb->data_psm; + evt_data.sdp_info_ind.data_x_spec = BTA_HL_SDP_IEEE_11073_20601; + evt_data.sdp_info_ind.mcap_sup_procs = BTA_HL_MCAP_SUP_PROC_MASK; + + if (p_data->api_reg.p_cback) { + p_data->api_reg.p_cback(BTA_HL_SDP_INFO_IND_EVT, (tBTA_HL*)&evt_data); + } + } } /******************************************************************************* * * Function bta_hl_api_register * - * Description Process the API registration request to register an HDP applciation + * Description Process the API registration request to register an HDP + *applciation * * Returns void * ******************************************************************************/ -static void bta_hl_api_register(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - uint8_t app_idx; - tBTA_HL_APP_CB *p_acb = NULL; - tBTA_HL_STATUS status = BTA_HL_STATUS_FAIL; - - - if (p_cb->enable) - { - if (!bta_hl_is_a_duplicate_id(p_data->api_reg.app_id)) - { - if (bta_hl_find_avail_app_idx(&app_idx)) - { - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - p_acb->in_use = true; - p_acb->app_id = p_data->api_reg.app_id; - p_acb->p_cback = p_data->api_reg.p_cback; - p_acb->sec_mask = p_data->api_reg.sec_mask; - p_acb->dev_type = p_data->api_reg.dev_type; - strlcpy(p_acb->srv_name, p_data->api_reg.srv_name, BTA_SERVICE_NAME_LEN); - strlcpy(p_acb->srv_desp, p_data->api_reg.srv_desp, BTA_SERVICE_DESP_LEN); - strlcpy(p_acb->provider_name, p_data->api_reg.provider_name, BTA_PROVIDER_NAME_LEN); - bta_hl_cb.p_alloc_psm = L2CA_AllocatePSM; - p_acb->ctrl_psm = bta_hl_cb.p_alloc_psm(); - p_acb->data_psm = bta_hl_cb.p_alloc_psm(); - p_acb->p_mcap_cback = bta_hl_mcap_ctrl_cback; - status = bta_hl_app_registration(app_idx); - } - else - { - status = BTA_HL_STATUS_NO_RESOURCE; - } - } - else - { - status = BTA_HL_STATUS_DUPLICATE_APP_ID; - } +static void bta_hl_api_register(tBTA_HL_CB* p_cb, tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + uint8_t app_idx; + tBTA_HL_APP_CB* p_acb = NULL; + tBTA_HL_STATUS status = BTA_HL_STATUS_FAIL; + + if (p_cb->enable) { + if (!bta_hl_is_a_duplicate_id(p_data->api_reg.app_id)) { + if (bta_hl_find_avail_app_idx(&app_idx)) { + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + p_acb->in_use = true; + p_acb->app_id = p_data->api_reg.app_id; + p_acb->p_cback = p_data->api_reg.p_cback; + p_acb->sec_mask = p_data->api_reg.sec_mask; + p_acb->dev_type = p_data->api_reg.dev_type; + strlcpy(p_acb->srv_name, p_data->api_reg.srv_name, + BTA_SERVICE_NAME_LEN); + strlcpy(p_acb->srv_desp, p_data->api_reg.srv_desp, + BTA_SERVICE_DESP_LEN); + strlcpy(p_acb->provider_name, p_data->api_reg.provider_name, + BTA_PROVIDER_NAME_LEN); + bta_hl_cb.p_alloc_psm = L2CA_AllocatePSM; + p_acb->ctrl_psm = bta_hl_cb.p_alloc_psm(); + p_acb->data_psm = bta_hl_cb.p_alloc_psm(); + p_acb->p_mcap_cback = bta_hl_mcap_ctrl_cback; + status = bta_hl_app_registration(app_idx); + } else { + status = BTA_HL_STATUS_NO_RESOURCE; + } + } else { + status = BTA_HL_STATUS_DUPLICATE_APP_ID; } + } - if (status != BTA_HL_STATUS_OK) - { - if ((status != BTA_HL_STATUS_DUPLICATE_APP_ID) && - (status != BTA_HL_STATUS_NO_RESOURCE)) - { - if (p_acb) - memset(p_acb, 0, sizeof(tBTA_HL_APP_CB)); - } + if (status != BTA_HL_STATUS_OK) { + if ((status != BTA_HL_STATUS_DUPLICATE_APP_ID) && + (status != BTA_HL_STATUS_NO_RESOURCE)) { + if (p_acb) memset(p_acb, 0, sizeof(tBTA_HL_APP_CB)); } + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_register status =%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_register status =%s", + bta_hl_status_code(status)); + } #endif - memset(&evt_data, 0, sizeof(tBTA_HL)); - evt_data.reg_cfm.status = status; - evt_data.reg_cfm.app_id = p_data->api_reg.app_id; - if (status == BTA_HL_STATUS_OK) - evt_data.reg_cfm.app_handle = p_acb->app_handle; - if (p_data->api_reg.p_cback) - { - p_data->api_reg.p_cback(BTA_HL_REGISTER_CFM_EVT, (tBTA_HL *) &evt_data); - } - - if (status == BTA_HL_STATUS_OK) - { - evt_data.sdp_info_ind.app_handle = p_acb->app_handle; - evt_data.sdp_info_ind.ctrl_psm = p_acb->ctrl_psm; - evt_data.sdp_info_ind.data_psm = p_acb->data_psm; - evt_data.sdp_info_ind.data_x_spec = BTA_HL_SDP_IEEE_11073_20601; - evt_data.sdp_info_ind.mcap_sup_procs = BTA_HL_MCAP_SUP_PROC_MASK ; - - if (p_data->api_reg.p_cback) - { - p_data->api_reg.p_cback(BTA_HL_SDP_INFO_IND_EVT, (tBTA_HL *) &evt_data); - } - } + memset(&evt_data, 0, sizeof(tBTA_HL)); + evt_data.reg_cfm.status = status; + evt_data.reg_cfm.app_id = p_data->api_reg.app_id; + if (status == BTA_HL_STATUS_OK) + evt_data.reg_cfm.app_handle = p_acb->app_handle; + if (p_data->api_reg.p_cback) { + p_data->api_reg.p_cback(BTA_HL_REGISTER_CFM_EVT, (tBTA_HL*)&evt_data); + } + + if (status == BTA_HL_STATUS_OK) { + evt_data.sdp_info_ind.app_handle = p_acb->app_handle; + evt_data.sdp_info_ind.ctrl_psm = p_acb->ctrl_psm; + evt_data.sdp_info_ind.data_psm = p_acb->data_psm; + evt_data.sdp_info_ind.data_x_spec = BTA_HL_SDP_IEEE_11073_20601; + evt_data.sdp_info_ind.mcap_sup_procs = BTA_HL_MCAP_SUP_PROC_MASK; + + if (p_data->api_reg.p_cback) { + p_data->api_reg.p_cback(BTA_HL_SDP_INFO_IND_EVT, (tBTA_HL*)&evt_data); + } + } } /******************************************************************************* @@ -765,21 +738,19 @@ static void bta_hl_api_register(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_hl_api_deregister(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - uint8_t app_idx; - tBTA_HL_APP_CB *p_acb; - - if (bta_hl_find_app_idx_using_handle(p_data->api_dereg.app_handle, &app_idx)) - { - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - p_acb->deregistering= true; - bta_hl_check_deregistration(app_idx,p_data); - } - else - { - APPL_TRACE_ERROR("Invalid app_handle=%d", p_data->api_dereg.app_handle); - } +static void bta_hl_api_deregister(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + uint8_t app_idx; + tBTA_HL_APP_CB* p_acb; + + if (bta_hl_find_app_idx_using_handle(p_data->api_dereg.app_handle, + &app_idx)) { + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + p_acb->deregistering = true; + bta_hl_check_deregistration(app_idx, p_data); + } else { + APPL_TRACE_ERROR("Invalid app_handle=%d", p_data->api_dereg.app_handle); + } } /******************************************************************************* @@ -791,93 +762,75 @@ static void bta_hl_api_deregister(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_ * Returns void * ******************************************************************************/ -static void bta_hl_api_cch_open(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb; - - if (bta_hl_find_app_idx_using_handle(p_data->api_cch_open.app_handle, &app_idx)) - { - - if (!bta_hl_find_mcl_idx(app_idx, p_data->api_cch_open.bd_addr, &mcl_idx)) - { - if (bta_hl_find_avail_mcl_idx(app_idx, &mcl_idx)) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - p_mcb->in_use = true; - p_mcb->req_ctrl_psm = p_data->api_cch_open.ctrl_psm; - p_mcb->sec_mask = p_data->api_cch_open.sec_mask; - bdcpy(p_mcb->bd_addr, p_data->api_cch_open.bd_addr); - p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_OPEN; - } - else - { - status = BTA_HL_STATUS_NO_RESOURCE; - } - } - else - { - /* Only one MCL per BD_ADDR */ - status = BTA_HL_STATUS_DUPLICATE_CCH_OPEN; - APPL_TRACE_DEBUG("bta_hl_api_cch_open: CCH already open: status =%d",status) - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - if (p_acb->p_cback) - { - bta_hl_build_cch_open_cfm(&evt_data, p_data->api_cch_open.app_id, - p_data->api_cch_open.app_handle, - p_mcb->mcl_handle, - p_data->api_cch_open.bd_addr, - status); - p_acb->p_cback(BTA_HL_CCH_OPEN_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_cch_open Null Callback"); - } - return; - } - } - else - { - status = BTA_HL_STATUS_INVALID_APP_HANDLE; - } +static void bta_hl_api_cch_open(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb; + + if (bta_hl_find_app_idx_using_handle(p_data->api_cch_open.app_handle, + &app_idx)) { + if (!bta_hl_find_mcl_idx(app_idx, p_data->api_cch_open.bd_addr, &mcl_idx)) { + if (bta_hl_find_avail_mcl_idx(app_idx, &mcl_idx)) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + p_mcb->in_use = true; + p_mcb->req_ctrl_psm = p_data->api_cch_open.ctrl_psm; + p_mcb->sec_mask = p_data->api_cch_open.sec_mask; + bdcpy(p_mcb->bd_addr, p_data->api_cch_open.bd_addr); + p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_OPEN; + } else { + status = BTA_HL_STATUS_NO_RESOURCE; + } + } else { + /* Only one MCL per BD_ADDR */ + status = BTA_HL_STATUS_DUPLICATE_CCH_OPEN; + APPL_TRACE_DEBUG("bta_hl_api_cch_open: CCH already open: status =%d", + status) + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + if (p_acb->p_cback) { + bta_hl_build_cch_open_cfm(&evt_data, p_data->api_cch_open.app_id, + p_data->api_cch_open.app_handle, + p_mcb->mcl_handle, + p_data->api_cch_open.bd_addr, status); + p_acb->p_cback(BTA_HL_CCH_OPEN_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_cch_open Null Callback"); + } + return; + } + } else { + status = BTA_HL_STATUS_INVALID_APP_HANDLE; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_cch_open status =%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_cch_open status =%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_OK: - bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_OPEN_EVT, p_data); - break; - case BTA_HL_STATUS_NO_RESOURCE: - case BTA_HL_STATUS_FAIL: - - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - bta_hl_build_cch_open_cfm(&evt_data, p_data->api_cch_open.app_id, - p_data->api_cch_open.app_handle, - 0, - p_data->api_cch_open.bd_addr, - status); - p_acb->p_cback(BTA_HL_CCH_OPEN_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_cch_open Null Callback"); - } - break; - default: - APPL_TRACE_ERROR("status code=%d", status); - break; - } + switch (status) { + case BTA_HL_STATUS_OK: + bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_OPEN_EVT, p_data); + break; + case BTA_HL_STATUS_NO_RESOURCE: + case BTA_HL_STATUS_FAIL: + + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + bta_hl_build_cch_open_cfm(&evt_data, p_data->api_cch_open.app_id, + p_data->api_cch_open.app_handle, 0, + p_data->api_cch_open.bd_addr, status); + p_acb->p_cback(BTA_HL_CCH_OPEN_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_cch_open Null Callback"); + } + break; + default: + APPL_TRACE_ERROR("status code=%d", status); + break; + } } /******************************************************************************* @@ -889,55 +842,46 @@ static void bta_hl_api_cch_open(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_da * Returns void * ******************************************************************************/ -static void bta_hl_api_cch_close(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb; - - if (bta_hl_find_mcl_idx_using_handle(p_data->api_cch_close.mcl_handle, &app_idx, &mcl_idx)) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_CLOSE; - } - else - { - status = BTA_HL_STATUS_INVALID_MCL_HANDLE; - } +static void bta_hl_api_cch_close(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb; + + if (bta_hl_find_mcl_idx_using_handle(p_data->api_cch_close.mcl_handle, + &app_idx, &mcl_idx)) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_CLOSE; + } else { + status = BTA_HL_STATUS_INVALID_MCL_HANDLE; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_cch_close status =%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_cch_close status =%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_OK: - bta_hl_check_cch_close(app_idx, mcl_idx, p_data, true); - break; - - case BTA_HL_STATUS_INVALID_MCL_HANDLE: - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - bta_hl_build_cch_close_cfm(&evt_data, - p_acb->app_handle, - p_data->api_cch_close.mcl_handle, - status); - p_acb->p_cback(BTA_HL_CCH_CLOSE_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_cch_close Null Callback"); - } - break; - default: - APPL_TRACE_ERROR("status code=%d", status); - break; - } - + switch (status) { + case BTA_HL_STATUS_OK: + bta_hl_check_cch_close(app_idx, mcl_idx, p_data, true); + break; + + case BTA_HL_STATUS_INVALID_MCL_HANDLE: + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + bta_hl_build_cch_close_cfm(&evt_data, p_acb->app_handle, + p_data->api_cch_close.mcl_handle, status); + p_acb->p_cback(BTA_HL_CCH_CLOSE_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_cch_close Null Callback"); + } + break; + default: + APPL_TRACE_ERROR("status code=%d", status); + break; + } } /******************************************************************************* @@ -949,149 +893,126 @@ static void bta_hl_api_cch_close(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_d * Returns void * ******************************************************************************/ -static void bta_hl_api_dch_open(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx, mdl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb = NULL; - tBTA_HL_MDL_CB *p_dcb; - tBTA_HL_MDEP_CFG *p_mdep_cfg; - uint8_t mdep_cfg_idx; - - if (bta_hl_find_mcl_idx_using_handle(p_data->api_dch_open.mcl_handle, &app_idx, &mcl_idx)) - { - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); +static void bta_hl_api_dch_open(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx, mdl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb = NULL; + tBTA_HL_MDL_CB* p_dcb; + tBTA_HL_MDEP_CFG* p_mdep_cfg; + uint8_t mdep_cfg_idx; + + if (bta_hl_find_mcl_idx_using_handle(p_data->api_dch_open.mcl_handle, + &app_idx, &mcl_idx)) { + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + + APPL_TRACE_DEBUG( + "bta_hl_api_dch_open: app_ix=%d, mcl_idx=%d, cch_state=%d, " + "mcl_handle=%d", + app_idx, mcl_idx, p_mcb->cch_state, p_data->api_dch_open.mcl_handle); + if (p_mcb->cch_state == BTA_HL_CCH_OPEN_ST) { + if (bta_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx)) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - APPL_TRACE_DEBUG("bta_hl_api_dch_open: app_ix=%d, mcl_idx=%d, cch_state=%d, mcl_handle=%d",app_idx,mcl_idx,p_mcb->cch_state,p_data->api_dch_open.mcl_handle); - if (p_mcb->cch_state == BTA_HL_CCH_OPEN_ST) - { - if (bta_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx)) - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - - if (bta_hl_find_mdep_cfg_idx(app_idx, p_data->api_dch_open.local_mdep_id, &mdep_cfg_idx)) - { - if ( mdep_cfg_idx && - (p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SINK)) - { - p_data->api_dch_open.local_cfg = BTA_HL_DCH_CFG_NO_PREF; - } - - if ((status = bta_hl_chk_local_cfg(app_idx,mcl_idx,mdep_cfg_idx,p_data->api_dch_open.local_cfg)) - == BTA_HL_STATUS_OK) - { - - if (p_data->api_dch_open.local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) - { - if (bta_hl_set_ctrl_psm_for_dch(app_idx, mcl_idx, mdl_idx, p_data->api_dch_open.ctrl_psm)) - { - p_mdep_cfg = BTA_HL_GET_MDEP_CFG_PTR(app_idx, mdep_cfg_idx); - p_dcb->in_use = true; - p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_OPEN; - p_dcb->sec_mask = p_data->api_dch_open.sec_mask; - p_dcb->local_mdep_id = p_data->api_dch_open.local_mdep_id; - p_dcb->peer_mdep_id = p_data->api_dch_open.peer_mdep_id; - - if (p_mdep_cfg->mdep_role == BTA_HL_MDEP_ROLE_SINK) - { - p_dcb->peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE; - } - else - { - p_dcb->peer_mdep_role = BTA_HL_MDEP_ROLE_SINK; - } - - p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; - p_dcb->local_cfg = p_data->api_dch_open.local_cfg; - - bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, - &p_dcb->max_rx_apdu_size, - &p_dcb->max_tx_apdu_size); - p_dcb->mdl_id = bta_hl_allocate_mdl_id(app_idx,mcl_idx,mdl_idx); - p_dcb->mdl_cfg_idx_included = false; - } - else - { - status = BTA_HL_STATUS_INVALID_CTRL_PSM; - } - - } - else - { - status = BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID; - } - } - } - else - { - status = BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID; + if (bta_hl_find_mdep_cfg_idx( + app_idx, p_data->api_dch_open.local_mdep_id, &mdep_cfg_idx)) { + if (mdep_cfg_idx && + (p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.mdep_role == + BTA_HL_MDEP_ROLE_SINK)) { + p_data->api_dch_open.local_cfg = BTA_HL_DCH_CFG_NO_PREF; + } + + if ((status = bta_hl_chk_local_cfg(app_idx, mcl_idx, mdep_cfg_idx, + p_data->api_dch_open.local_cfg)) == + BTA_HL_STATUS_OK) { + if (p_data->api_dch_open.local_mdep_id != + BTA_HL_ECHO_TEST_MDEP_ID) { + if (bta_hl_set_ctrl_psm_for_dch(app_idx, mcl_idx, mdl_idx, + p_data->api_dch_open.ctrl_psm)) { + p_mdep_cfg = BTA_HL_GET_MDEP_CFG_PTR(app_idx, mdep_cfg_idx); + p_dcb->in_use = true; + p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_OPEN; + p_dcb->sec_mask = p_data->api_dch_open.sec_mask; + p_dcb->local_mdep_id = p_data->api_dch_open.local_mdep_id; + p_dcb->peer_mdep_id = p_data->api_dch_open.peer_mdep_id; + + if (p_mdep_cfg->mdep_role == BTA_HL_MDEP_ROLE_SINK) { + p_dcb->peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE; + } else { + p_dcb->peer_mdep_role = BTA_HL_MDEP_ROLE_SINK; } + + p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; + p_dcb->local_cfg = p_data->api_dch_open.local_cfg; + + bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, + &p_dcb->max_rx_apdu_size, + &p_dcb->max_tx_apdu_size); + p_dcb->mdl_id = + bta_hl_allocate_mdl_id(app_idx, mcl_idx, mdl_idx); + p_dcb->mdl_cfg_idx_included = false; + } else { + status = BTA_HL_STATUS_INVALID_CTRL_PSM; + } + + } else { + status = BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID; } - else - { - status = BTA_HL_STATUS_NO_RESOURCE; - } + } + } else { + status = BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID; } - else - { - status = BTA_HL_STATUS_NO_CCH; - } - } - else - { - status = BTA_HL_STATUS_INVALID_MCL_HANDLE; + } else { + status = BTA_HL_STATUS_NO_RESOURCE; + } + } else { + status = BTA_HL_STATUS_NO_CCH; } + } else { + status = BTA_HL_STATUS_INVALID_MCL_HANDLE; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_dch_open status =%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_dch_open status =%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_OK: - if (p_mcb->sdp.num_recs) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_OPEN_EVT, p_data); - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_INIT_EVT, p_data); - } - break; - case BTA_HL_STATUS_INVALID_DCH_CFG: - case BTA_HL_STATUS_NO_FIRST_RELIABLE: - case BTA_HL_STATUS_NO_CCH: - case BTA_HL_STATUS_NO_RESOURCE: - case BTA_HL_STATUS_FAIL: - case BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID: - case BTA_HL_STATUS_INVALID_CTRL_PSM: - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - bta_hl_build_dch_open_cfm(&evt_data, - p_acb->app_handle, - p_data->api_dch_open.mcl_handle, - BTA_HL_INVALID_MDL_HANDLE, - 0,0,0,0,0, status); - p_acb->p_cback(BTA_HL_DCH_OPEN_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_dch_open Null Callback"); - } - - break; - default: - APPL_TRACE_ERROR("Status code=%d", status); - break; - - } - + switch (status) { + case BTA_HL_STATUS_OK: + if (p_mcb->sdp.num_recs) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_OPEN_EVT, + p_data); + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_SDP_INIT_EVT, p_data); + } + break; + case BTA_HL_STATUS_INVALID_DCH_CFG: + case BTA_HL_STATUS_NO_FIRST_RELIABLE: + case BTA_HL_STATUS_NO_CCH: + case BTA_HL_STATUS_NO_RESOURCE: + case BTA_HL_STATUS_FAIL: + case BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID: + case BTA_HL_STATUS_INVALID_CTRL_PSM: + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + bta_hl_build_dch_open_cfm( + &evt_data, p_acb->app_handle, p_data->api_dch_open.mcl_handle, + BTA_HL_INVALID_MDL_HANDLE, 0, 0, 0, 0, 0, status); + p_acb->p_cback(BTA_HL_DCH_OPEN_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_dch_open Null Callback"); + } + + break; + default: + APPL_TRACE_ERROR("Status code=%d", status); + break; + } } /******************************************************************************* * @@ -1102,65 +1023,56 @@ static void bta_hl_api_dch_open(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_da * Returns void * ******************************************************************************/ -static void bta_hl_api_dch_close(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx, mdl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb; - tBTA_HL_MDL_CB *p_dcb; - - if (bta_hl_find_mdl_idx_using_handle(p_data->api_dch_close.mdl_handle, &app_idx, &mcl_idx, &mdl_idx )) - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - if (p_dcb->dch_state != BTA_HL_DCH_OPEN_ST) - { - status = BTA_HL_STATUS_FAIL; - } - } - else - { - status = BTA_HL_STATUS_INVALID_MDL_HANDLE; - } +static void bta_hl_api_dch_close(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx, mdl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb; + tBTA_HL_MDL_CB* p_dcb; + + if (bta_hl_find_mdl_idx_using_handle(p_data->api_dch_close.mdl_handle, + &app_idx, &mcl_idx, &mdl_idx)) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + if (p_dcb->dch_state != BTA_HL_DCH_OPEN_ST) { + status = BTA_HL_STATUS_FAIL; + } + } else { + status = BTA_HL_STATUS_INVALID_MDL_HANDLE; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_dch_close status =%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_dch_close status =%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_OK: - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, p_data); - break; - case BTA_HL_STATUS_FAIL: - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bta_hl_build_dch_close_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_data->api_dch_close.mdl_handle, - status); - - p_acb->p_cback(BTA_HL_DCH_CLOSE_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_dch_close Null Callback"); - } - break; - default: - APPL_TRACE_ERROR("Status code=%d", status); - break; - } + switch (status) { + case BTA_HL_STATUS_OK: + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, + p_data); + break; + case BTA_HL_STATUS_FAIL: + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bta_hl_build_dch_close_cfm(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, + p_data->api_dch_close.mdl_handle, status); + + p_acb->p_cback(BTA_HL_DCH_CLOSE_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_dch_close Null Callback"); + } + break; + default: + APPL_TRACE_ERROR("Status code=%d", status); + break; + } } - /******************************************************************************* * * Function bta_hl_api_dch_reconnect @@ -1170,135 +1082,112 @@ static void bta_hl_api_dch_close(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_d * Returns void * ******************************************************************************/ -static void bta_hl_api_dch_reconnect(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx, mdl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb = NULL; - tBTA_HL_MDL_CB *p_dcb; - uint8_t mdep_cfg_idx; - uint8_t mdl_cfg_idx; - tBTA_HL_MDEP_CFG *p_mdep_cfg; - - if (bta_hl_find_mcl_idx_using_handle(p_data->api_dch_reconnect.mcl_handle, &app_idx, &mcl_idx)) - { - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - if (p_mcb->cch_state == BTA_HL_CCH_OPEN_ST) - { - if (bta_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx)) - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - if (bta_hl_validate_reconnect_params(app_idx, mcl_idx, &(p_data->api_dch_reconnect), - &mdep_cfg_idx, &mdl_cfg_idx )) - { - if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx) && - (p_acb->mdl_cfg[mdl_cfg_idx].dch_mode != BTA_HL_DCH_MODE_RELIABLE)) - { - status = BTA_HL_STATUS_NO_FIRST_RELIABLE; - } - else - { - if (bta_hl_set_ctrl_psm_for_dch(app_idx, mcl_idx, mdl_idx, p_data->api_dch_open.ctrl_psm)) - { - p_dcb->in_use = true; - p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_RECONNECT; - p_dcb->sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); - p_dcb->local_mdep_id = p_acb->mdl_cfg[mdl_cfg_idx].local_mdep_id; - p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; - p_dcb->local_cfg = BTA_HL_DCH_CFG_UNKNOWN; - p_dcb->mdl_id = p_data->api_dch_reconnect.mdl_id; - p_dcb->mdl_cfg_idx_included = true; - p_dcb->mdl_cfg_idx = mdl_cfg_idx; - p_dcb->dch_mode = p_acb->mdl_cfg[mdl_cfg_idx].dch_mode; - - p_mdep_cfg = BTA_HL_GET_MDEP_CFG_PTR(app_idx, mdep_cfg_idx); - - if (p_mdep_cfg->mdep_role == BTA_HL_MDEP_ROLE_SINK) - { - p_dcb->peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE; - APPL_TRACE_DEBUG("peer mdep role = SOURCE "); - } - else - { - p_dcb->peer_mdep_role = BTA_HL_MDEP_ROLE_SINK; - APPL_TRACE_DEBUG("peer mdep role = SINK "); - } - - bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, - &p_dcb->max_rx_apdu_size, - &p_dcb->max_tx_apdu_size); - } - else - { - status = BTA_HL_STATUS_INVALID_CTRL_PSM; - } - } - } - else - { - status = BTA_HL_STATUS_INVALID_RECONNECT_CFG; - } - } - else - { - status = BTA_HL_STATUS_NO_RESOURCE; +static void bta_hl_api_dch_reconnect(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx, mdl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb = NULL; + tBTA_HL_MDL_CB* p_dcb; + uint8_t mdep_cfg_idx; + uint8_t mdl_cfg_idx; + tBTA_HL_MDEP_CFG* p_mdep_cfg; + + if (bta_hl_find_mcl_idx_using_handle(p_data->api_dch_reconnect.mcl_handle, + &app_idx, &mcl_idx)) { + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + if (p_mcb->cch_state == BTA_HL_CCH_OPEN_ST) { + if (bta_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx)) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + if (bta_hl_validate_reconnect_params(app_idx, mcl_idx, + &(p_data->api_dch_reconnect), + &mdep_cfg_idx, &mdl_cfg_idx)) { + if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx) && + (p_acb->mdl_cfg[mdl_cfg_idx].dch_mode != + BTA_HL_DCH_MODE_RELIABLE)) { + status = BTA_HL_STATUS_NO_FIRST_RELIABLE; + } else { + if (bta_hl_set_ctrl_psm_for_dch(app_idx, mcl_idx, mdl_idx, + p_data->api_dch_open.ctrl_psm)) { + p_dcb->in_use = true; + p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_RECONNECT; + p_dcb->sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); + p_dcb->local_mdep_id = p_acb->mdl_cfg[mdl_cfg_idx].local_mdep_id; + p_dcb->local_mdep_cfg_idx = mdep_cfg_idx; + p_dcb->local_cfg = BTA_HL_DCH_CFG_UNKNOWN; + p_dcb->mdl_id = p_data->api_dch_reconnect.mdl_id; + p_dcb->mdl_cfg_idx_included = true; + p_dcb->mdl_cfg_idx = mdl_cfg_idx; + p_dcb->dch_mode = p_acb->mdl_cfg[mdl_cfg_idx].dch_mode; + + p_mdep_cfg = BTA_HL_GET_MDEP_CFG_PTR(app_idx, mdep_cfg_idx); + + if (p_mdep_cfg->mdep_role == BTA_HL_MDEP_ROLE_SINK) { + p_dcb->peer_mdep_role = BTA_HL_MDEP_ROLE_SOURCE; + APPL_TRACE_DEBUG("peer mdep role = SOURCE "); + } else { + p_dcb->peer_mdep_role = BTA_HL_MDEP_ROLE_SINK; + APPL_TRACE_DEBUG("peer mdep role = SINK "); + } + + bta_hl_find_rxtx_apdu_size(app_idx, mdep_cfg_idx, + &p_dcb->max_rx_apdu_size, + &p_dcb->max_tx_apdu_size); + } else { + status = BTA_HL_STATUS_INVALID_CTRL_PSM; } + } + } else { + status = BTA_HL_STATUS_INVALID_RECONNECT_CFG; } - else - { - status = BTA_HL_STATUS_NO_CCH; - } - } - else - { - status = BTA_HL_STATUS_INVALID_MCL_HANDLE; + } else { + status = BTA_HL_STATUS_NO_RESOURCE; + } + } else { + status = BTA_HL_STATUS_NO_CCH; } + } else { + status = BTA_HL_STATUS_INVALID_MCL_HANDLE; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_dch_reconnect status=%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_dch_reconnect status=%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_OK: - if (p_mcb->sdp.num_recs) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_RECONNECT_EVT, p_data); - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_INIT_EVT, p_data); - } - break; - case BTA_HL_STATUS_INVALID_RECONNECT_CFG: - case BTA_HL_STATUS_NO_FIRST_RELIABLE: - case BTA_HL_STATUS_NO_CCH: - case BTA_HL_STATUS_NO_RESOURCE: - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - bta_hl_build_dch_open_cfm(&evt_data, - p_acb->app_handle, - p_data->api_dch_reconnect.mcl_handle, - BTA_HL_INVALID_MDL_HANDLE, - 0,p_data->api_dch_reconnect.mdl_id,0,0,0, status); - p_acb->p_cback(BTA_HL_DCH_RECONNECT_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_dch_reconnect Null Callback"); - } - break; - default: - APPL_TRACE_ERROR("Status code=%d", status); - break; - } + switch (status) { + case BTA_HL_STATUS_OK: + if (p_mcb->sdp.num_recs) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_RECONNECT_EVT, p_data); + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_SDP_INIT_EVT, p_data); + } + break; + case BTA_HL_STATUS_INVALID_RECONNECT_CFG: + case BTA_HL_STATUS_NO_FIRST_RELIABLE: + case BTA_HL_STATUS_NO_CCH: + case BTA_HL_STATUS_NO_RESOURCE: + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + bta_hl_build_dch_open_cfm( + &evt_data, p_acb->app_handle, p_data->api_dch_reconnect.mcl_handle, + BTA_HL_INVALID_MDL_HANDLE, 0, p_data->api_dch_reconnect.mdl_id, 0, + 0, 0, status); + p_acb->p_cback(BTA_HL_DCH_RECONNECT_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_dch_reconnect Null Callback"); + } + break; + default: + APPL_TRACE_ERROR("Status code=%d", status); + break; + } } /******************************************************************************* @@ -1310,130 +1199,108 @@ static void bta_hl_api_dch_reconnect(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA * Returns void * ******************************************************************************/ -static void bta_hl_api_dch_echo_test(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx, mdl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb = NULL; - tBTA_HL_MDL_CB *p_dcb; - tBTA_HL_ECHO_CFG *p_echo_cfg; - - if (bta_hl_find_mcl_idx_using_handle(p_data->api_dch_echo_test.mcl_handle, &app_idx, &mcl_idx)) - { - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - if (p_mcb->cch_state == BTA_HL_CCH_OPEN_ST) - { - if (!p_mcb->echo_test ) - { - if (bta_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx)) - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - - if ((p_data->api_dch_echo_test.local_cfg == BTA_HL_DCH_CFG_RELIABLE) || - (p_data->api_dch_echo_test.local_cfg == BTA_HL_DCH_CFG_STREAMING)) - { - bool fcs_use = (bool) (p_dcb->chnl_cfg.fcs & BTA_HL_MCA_FCS_USE_MASK); - if ((p_dcb->p_echo_tx_pkt = bta_hl_get_buf(p_data->api_dch_echo_test.pkt_size, fcs_use)) != NULL ) - { - if (bta_hl_set_ctrl_psm_for_dch(app_idx, mcl_idx, mdl_idx, p_data->api_dch_open.ctrl_psm)) - { - p_dcb->in_use = true; - p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_OPEN; - p_dcb->sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); - p_dcb->local_mdep_cfg_idx = BTA_HL_ECHO_TEST_MDEP_CFG_IDX; - p_dcb->local_cfg = p_data->api_dch_echo_test.local_cfg; - p_dcb->local_mdep_id = BTA_HL_ECHO_TEST_MDEP_ID; - p_dcb->peer_mdep_id = BTA_HL_ECHO_TEST_MDEP_ID; - p_dcb->mdl_id = bta_hl_allocate_mdl_id(app_idx,mcl_idx,mdl_idx); - p_dcb->mdl_cfg_idx_included = false; - p_echo_cfg = BTA_HL_GET_ECHO_CFG_PTR(app_idx); - p_dcb->max_rx_apdu_size = p_echo_cfg->max_rx_apdu_size; - p_dcb->max_tx_apdu_size = p_echo_cfg->max_tx_apdu_size; - p_mcb->echo_test = true; - p_mcb->echo_mdl_idx = mdl_idx; - } - else - { - status = BTA_HL_STATUS_INVALID_CTRL_PSM; - } - } - else - { - status = BTA_HL_STATUS_NO_RESOURCE; - } - } - else - { - status = BTA_HL_STATUS_INVALID_DCH_CFG; - } - } - else - { - status = BTA_HL_STATUS_NO_RESOURCE; - } - } - else - { - status = BTA_HL_STATUS_ECHO_TEST_BUSY; +static void bta_hl_api_dch_echo_test(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx, mdl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb = NULL; + tBTA_HL_MDL_CB* p_dcb; + tBTA_HL_ECHO_CFG* p_echo_cfg; + + if (bta_hl_find_mcl_idx_using_handle(p_data->api_dch_echo_test.mcl_handle, + &app_idx, &mcl_idx)) { + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + if (p_mcb->cch_state == BTA_HL_CCH_OPEN_ST) { + if (!p_mcb->echo_test) { + if (bta_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx)) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + + if ((p_data->api_dch_echo_test.local_cfg == + BTA_HL_DCH_CFG_RELIABLE) || + (p_data->api_dch_echo_test.local_cfg == + BTA_HL_DCH_CFG_STREAMING)) { + bool fcs_use = + (bool)(p_dcb->chnl_cfg.fcs & BTA_HL_MCA_FCS_USE_MASK); + if ((p_dcb->p_echo_tx_pkt = bta_hl_get_buf( + p_data->api_dch_echo_test.pkt_size, fcs_use)) != NULL) { + if (bta_hl_set_ctrl_psm_for_dch(app_idx, mcl_idx, mdl_idx, + p_data->api_dch_open.ctrl_psm)) { + p_dcb->in_use = true; + p_dcb->dch_oper = BTA_HL_DCH_OP_LOCAL_OPEN; + p_dcb->sec_mask = (BTA_SEC_AUTHENTICATE | BTA_SEC_ENCRYPT); + p_dcb->local_mdep_cfg_idx = BTA_HL_ECHO_TEST_MDEP_CFG_IDX; + p_dcb->local_cfg = p_data->api_dch_echo_test.local_cfg; + p_dcb->local_mdep_id = BTA_HL_ECHO_TEST_MDEP_ID; + p_dcb->peer_mdep_id = BTA_HL_ECHO_TEST_MDEP_ID; + p_dcb->mdl_id = + bta_hl_allocate_mdl_id(app_idx, mcl_idx, mdl_idx); + p_dcb->mdl_cfg_idx_included = false; + p_echo_cfg = BTA_HL_GET_ECHO_CFG_PTR(app_idx); + p_dcb->max_rx_apdu_size = p_echo_cfg->max_rx_apdu_size; + p_dcb->max_tx_apdu_size = p_echo_cfg->max_tx_apdu_size; + p_mcb->echo_test = true; + p_mcb->echo_mdl_idx = mdl_idx; + } else { + status = BTA_HL_STATUS_INVALID_CTRL_PSM; + } + } else { + status = BTA_HL_STATUS_NO_RESOURCE; } + } else { + status = BTA_HL_STATUS_INVALID_DCH_CFG; + } + } else { + status = BTA_HL_STATUS_NO_RESOURCE; } - else - { - status = BTA_HL_STATUS_NO_CCH; - } - } - else - { - status = BTA_HL_STATUS_NO_MCL; + } else { + status = BTA_HL_STATUS_ECHO_TEST_BUSY; + } + } else { + status = BTA_HL_STATUS_NO_CCH; } + } else { + status = BTA_HL_STATUS_NO_MCL; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_dch_echo_test status=%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_dch_echo_test status=%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_OK: - if (p_mcb->sdp.num_recs) - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ECHO_TEST_EVT, p_data); - } - else - { - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_SDP_INIT_EVT, p_data); - } - break; - case BTA_HL_STATUS_ECHO_TEST_BUSY: - case BTA_HL_STATUS_NO_RESOURCE: - case BTA_HL_STATUS_INVALID_DCH_CFG: - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - bta_hl_build_echo_test_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - status); - p_acb->p_cback(BTA_HL_DCH_ECHO_TEST_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_dch_echo_test Null Callback"); - } - break; - - default: - APPL_TRACE_ERROR("Status code=%s", status); - break; - } + switch (status) { + case BTA_HL_STATUS_OK: + if (p_mcb->sdp.num_recs) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_ECHO_TEST_EVT, p_data); + } else { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_SDP_INIT_EVT, p_data); + } + break; + case BTA_HL_STATUS_ECHO_TEST_BUSY: + case BTA_HL_STATUS_NO_RESOURCE: + case BTA_HL_STATUS_INVALID_DCH_CFG: + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + bta_hl_build_echo_test_cfm(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, status); + p_acb->p_cback(BTA_HL_DCH_ECHO_TEST_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_dch_echo_test Null Callback"); + } + break; + + default: + APPL_TRACE_ERROR("Status code=%s", status); + break; + } } - /******************************************************************************* * * Function bta_hl_api_sdp_query @@ -1443,98 +1310,78 @@ static void bta_hl_api_dch_echo_test(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA * Returns void * ******************************************************************************/ -static void bta_hl_api_sdp_query(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb; - - if (bta_hl_find_app_idx_using_handle(p_data->api_sdp_query.app_handle, &app_idx)) - { - if (!bta_hl_find_mcl_idx(app_idx, p_data->api_sdp_query.bd_addr, &mcl_idx)) - { - if (bta_hl_find_avail_mcl_idx(app_idx, &mcl_idx)) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - p_mcb->in_use = true; - bdcpy(p_mcb->bd_addr, p_data->api_sdp_query.bd_addr); - APPL_TRACE_DEBUG("bta_hl_api_sdp_query p_mcb->app_id %d app_idx %d mcl_idx %d", p_mcb->app_id, app_idx, mcl_idx); - p_mcb->app_id = p_data->api_sdp_query.app_id; - p_mcb->sdp_oper = BTA_HL_SDP_OP_SDP_QUERY_NEW ; - } - else - { - status = BTA_HL_STATUS_NO_RESOURCE; - } - } - else - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - p_mcb->app_id = p_data->api_sdp_query.app_id; - if (p_mcb->sdp_oper != BTA_HL_SDP_OP_NONE) - { - status = BTA_HL_STATUS_SDP_NO_RESOURCE; - } - else - { - p_mcb->sdp_oper = BTA_HL_SDP_OP_SDP_QUERY_CURRENT; - } - } - } - else - { - status = BTA_HL_STATUS_INVALID_APP_HANDLE; - } - - if (status == BTA_HL_STATUS_OK) - { - status = bta_hl_init_sdp( p_mcb->sdp_oper, app_idx, mcl_idx, 0xFF); - if ( (status != BTA_HL_STATUS_OK) && - (p_mcb->sdp_oper == BTA_HL_SDP_OP_SDP_QUERY_NEW) ) - { - memset(p_mcb, 0 ,sizeof(tBTA_HL_MCL_CB)); - } - } +static void bta_hl_api_sdp_query(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb; + + if (bta_hl_find_app_idx_using_handle(p_data->api_sdp_query.app_handle, + &app_idx)) { + if (!bta_hl_find_mcl_idx(app_idx, p_data->api_sdp_query.bd_addr, + &mcl_idx)) { + if (bta_hl_find_avail_mcl_idx(app_idx, &mcl_idx)) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + p_mcb->in_use = true; + bdcpy(p_mcb->bd_addr, p_data->api_sdp_query.bd_addr); + APPL_TRACE_DEBUG( + "bta_hl_api_sdp_query p_mcb->app_id %d app_idx %d mcl_idx %d", + p_mcb->app_id, app_idx, mcl_idx); + p_mcb->app_id = p_data->api_sdp_query.app_id; + p_mcb->sdp_oper = BTA_HL_SDP_OP_SDP_QUERY_NEW; + } else { + status = BTA_HL_STATUS_NO_RESOURCE; + } + } else { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + p_mcb->app_id = p_data->api_sdp_query.app_id; + if (p_mcb->sdp_oper != BTA_HL_SDP_OP_NONE) { + status = BTA_HL_STATUS_SDP_NO_RESOURCE; + } else { + p_mcb->sdp_oper = BTA_HL_SDP_OP_SDP_QUERY_CURRENT; + } + } + } else { + status = BTA_HL_STATUS_INVALID_APP_HANDLE; + } + + if (status == BTA_HL_STATUS_OK) { + status = bta_hl_init_sdp(p_mcb->sdp_oper, app_idx, mcl_idx, 0xFF); + if ((status != BTA_HL_STATUS_OK) && + (p_mcb->sdp_oper == BTA_HL_SDP_OP_SDP_QUERY_NEW)) { + memset(p_mcb, 0, sizeof(tBTA_HL_MCL_CB)); + } + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_sdp_query status=%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_sdp_query status=%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_NO_RESOURCE: - case BTA_HL_STATUS_FAIL: - case BTA_HL_STATUS_SDP_NO_RESOURCE: - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - bta_hl_build_sdp_query_cfm(&evt_data, - p_data->api_sdp_query.app_id, - p_data->api_sdp_query.app_handle, - p_data->api_sdp_query.bd_addr, - NULL, - status); - p_acb->p_cback(BTA_HL_SDP_QUERY_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_sdp_query Null Callback"); - } - break; - case BTA_HL_STATUS_OK: - break; - default: - APPL_TRACE_ERROR("Status code=%d", status); - break; - } + switch (status) { + case BTA_HL_STATUS_NO_RESOURCE: + case BTA_HL_STATUS_FAIL: + case BTA_HL_STATUS_SDP_NO_RESOURCE: + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + bta_hl_build_sdp_query_cfm(&evt_data, p_data->api_sdp_query.app_id, + p_data->api_sdp_query.app_handle, + p_data->api_sdp_query.bd_addr, NULL, status); + p_acb->p_cback(BTA_HL_SDP_QUERY_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_sdp_query Null Callback"); + } + break; + case BTA_HL_STATUS_OK: + break; + default: + APPL_TRACE_ERROR("Status code=%d", status); + break; + } } - - - /******************************************************************************* * * Function bta_hl_sdp_query_results @@ -1544,57 +1391,57 @@ static void bta_hl_api_sdp_query(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_d * Returns void * ******************************************************************************/ -static void bta_hl_sdp_query_results(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx = p_data->cch_sdp.app_idx; - uint8_t mcl_idx = p_data->cch_sdp.mcl_idx; - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR( app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR( app_idx, mcl_idx); - tBTA_HL_SDP *p_sdp=NULL; - uint16_t event; - bool release_sdp_buf=false; - - event = p_data->hdr.event; - - if (event == BTA_HL_SDP_QUERY_OK_EVT) { - p_sdp = (tBTA_HL_SDP *)osi_malloc(sizeof(tBTA_HL_SDP)); - memcpy(p_sdp, &p_mcb->sdp, sizeof(tBTA_HL_SDP)); - release_sdp_buf = true; - } else { - status = BTA_HL_STATUS_SDP_FAIL; - } +static void bta_hl_sdp_query_results(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx = p_data->cch_sdp.app_idx; + uint8_t mcl_idx = p_data->cch_sdp.mcl_idx; + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_SDP* p_sdp = NULL; + uint16_t event; + bool release_sdp_buf = false; + + event = p_data->hdr.event; + + if (event == BTA_HL_SDP_QUERY_OK_EVT) { + p_sdp = (tBTA_HL_SDP*)osi_malloc(sizeof(tBTA_HL_SDP)); + memcpy(p_sdp, &p_mcb->sdp, sizeof(tBTA_HL_SDP)); + release_sdp_buf = true; + } else { + status = BTA_HL_STATUS_SDP_FAIL; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_sdp_query_results status=%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_sdp_query_results status=%s", + bta_hl_status_code(status)); + } #endif - APPL_TRACE_DEBUG("bta_hl_sdp_query_results p_mcb->app_id %d app_idx %d mcl_idx %d", p_mcb->app_id, app_idx, mcl_idx); - bta_hl_build_sdp_query_cfm(&evt_data,p_mcb->app_id, p_acb->app_handle, - p_mcb->bd_addr,p_sdp,status); - p_acb->p_cback(BTA_HL_SDP_QUERY_CFM_EVT,(tBTA_HL *) &evt_data ); + APPL_TRACE_DEBUG( + "bta_hl_sdp_query_results p_mcb->app_id %d app_idx %d mcl_idx %d", + p_mcb->app_id, app_idx, mcl_idx); + bta_hl_build_sdp_query_cfm(&evt_data, p_mcb->app_id, p_acb->app_handle, + p_mcb->bd_addr, p_sdp, status); + p_acb->p_cback(BTA_HL_SDP_QUERY_CFM_EVT, (tBTA_HL*)&evt_data); - if (release_sdp_buf) - osi_free_and_reset((void **)&p_sdp); + if (release_sdp_buf) osi_free_and_reset((void**)&p_sdp); - if (p_data->cch_sdp.release_mcl_cb) { - memset(p_mcb, 0, sizeof(tBTA_HL_MCL_CB)); - } else { - if (p_mcb->close_pending) - bta_hl_check_cch_close(app_idx, mcl_idx, p_data, true); + if (p_data->cch_sdp.release_mcl_cb) { + memset(p_mcb, 0, sizeof(tBTA_HL_MCL_CB)); + } else { + if (p_mcb->close_pending) + bta_hl_check_cch_close(app_idx, mcl_idx, p_data, true); - if (!p_mcb->ctrl_psm) { - /* Control channel acceptor: do not store the SDP records */ - memset(&p_mcb->sdp, 0, sizeof(tBTA_HL_SDP)); - } + if (!p_mcb->ctrl_psm) { + /* Control channel acceptor: do not store the SDP records */ + memset(&p_mcb->sdp, 0, sizeof(tBTA_HL_SDP)); } + } } - /******************************************************************************* * * Function bta_hl_api_delete_mdl @@ -1604,83 +1451,65 @@ static void bta_hl_sdp_query_results(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA * Returns void * ******************************************************************************/ -static void bta_hl_api_delete_mdl(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb; - - if (bta_hl_find_mcl_idx_using_handle(p_data->api_delete_mdl.mcl_handle, &app_idx, &mcl_idx )) - { - if (bta_hl_is_mdl_value_valid(p_data->api_delete_mdl.mdl_id)) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - if (bta_hl_is_mdl_exsit_in_mcl(app_idx, - p_mcb->bd_addr, - p_data->api_delete_mdl.mdl_id)) - { - - - p_mcb->delete_mdl.mcl_handle = p_data->api_delete_mdl.mcl_handle; - p_mcb->delete_mdl.mdl_id = p_data->api_delete_mdl.mdl_id; - p_mcb->delete_mdl.delete_req_pending = true; - - if (MCA_Delete((tMCA_CL) p_mcb->mcl_handle, - p_data->api_delete_mdl.mdl_id)!= MCA_SUCCESS) - { - status = BTA_HL_STATUS_FAIL; - memset(&p_mcb->delete_mdl, 0, sizeof(tBTA_HL_DELETE_MDL)); - } - } - else - { - status = BTA_HL_STATUS_NO_MDL_ID_FOUND; - } +static void bta_hl_api_delete_mdl(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb; + + if (bta_hl_find_mcl_idx_using_handle(p_data->api_delete_mdl.mcl_handle, + &app_idx, &mcl_idx)) { + if (bta_hl_is_mdl_value_valid(p_data->api_delete_mdl.mdl_id)) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + if (bta_hl_is_mdl_exsit_in_mcl(app_idx, p_mcb->bd_addr, + p_data->api_delete_mdl.mdl_id)) { + p_mcb->delete_mdl.mcl_handle = p_data->api_delete_mdl.mcl_handle; + p_mcb->delete_mdl.mdl_id = p_data->api_delete_mdl.mdl_id; + p_mcb->delete_mdl.delete_req_pending = true; + + if (MCA_Delete((tMCA_CL)p_mcb->mcl_handle, + p_data->api_delete_mdl.mdl_id) != MCA_SUCCESS) { + status = BTA_HL_STATUS_FAIL; + memset(&p_mcb->delete_mdl, 0, sizeof(tBTA_HL_DELETE_MDL)); } - else - { - status = BTA_HL_STATUS_INVALID_MDL_ID; - } - } - else - { - status = BTA_HL_STATUS_INVALID_MCL_HANDLE; + } else { + status = BTA_HL_STATUS_NO_MDL_ID_FOUND; + } + } else { + status = BTA_HL_STATUS_INVALID_MDL_ID; } + } else { + status = BTA_HL_STATUS_INVALID_MCL_HANDLE; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_delete_mdl status=%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_delete_mdl status=%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_OK: - break; - case BTA_HL_STATUS_FAIL: - case BTA_HL_STATUS_NO_MDL_ID_FOUND: - case BTA_HL_STATUS_INVALID_MDL_ID: - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - bta_hl_build_delete_mdl_cfm(&evt_data, - p_acb->app_handle, - p_data->api_delete_mdl.mcl_handle, - p_data->api_delete_mdl.mdl_id, - status); - p_acb->p_cback(BTA_HL_DELETE_MDL_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_delete_mdl Null Callback"); - } - break; - default: - APPL_TRACE_ERROR("status code =%d", status); - break; - } + switch (status) { + case BTA_HL_STATUS_OK: + break; + case BTA_HL_STATUS_FAIL: + case BTA_HL_STATUS_NO_MDL_ID_FOUND: + case BTA_HL_STATUS_INVALID_MDL_ID: + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + bta_hl_build_delete_mdl_cfm(&evt_data, p_acb->app_handle, + p_data->api_delete_mdl.mcl_handle, + p_data->api_delete_mdl.mdl_id, status); + p_acb->p_cback(BTA_HL_DELETE_MDL_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_delete_mdl Null Callback"); + } + break; + default: + APPL_TRACE_ERROR("status code =%d", status); + break; + } } /******************************************************************************* @@ -1692,74 +1521,56 @@ static void bta_hl_api_delete_mdl(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_ * Returns void * ******************************************************************************/ -static void bta_hl_mca_delete_mdl_cfm(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx; - tMCA_RSP_EVT *p_delete_cfm = &p_data->mca_evt.mca_data.delete_cfm; - tBTA_HL_MCL_CB *p_mcb; - bool send_cfm_evt = true; - tBTA_HL_APP_CB *p_acb; - - if (bta_hl_find_mcl_idx_using_handle(p_data->mca_evt.mcl_handle, &app_idx, &mcl_idx)) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - if ( p_mcb->delete_mdl.delete_req_pending) - { - if (p_delete_cfm->rsp_code == MCA_RSP_SUCCESS ) - { - - if (!bta_hl_delete_mdl_cfg(app_idx, - p_mcb->bd_addr , - p_delete_cfm->mdl_id)) - { - status = BTA_HL_STATUS_FAIL; - } - } - else - { - status = BTA_HL_STATUS_FAIL; - } - - memset(&p_mcb->delete_mdl, 0, sizeof(tBTA_HL_DELETE_MDL)); - } - else - { - send_cfm_evt = false; +static void bta_hl_mca_delete_mdl_cfm(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx; + tMCA_RSP_EVT* p_delete_cfm = &p_data->mca_evt.mca_data.delete_cfm; + tBTA_HL_MCL_CB* p_mcb; + bool send_cfm_evt = true; + tBTA_HL_APP_CB* p_acb; + + if (bta_hl_find_mcl_idx_using_handle(p_data->mca_evt.mcl_handle, &app_idx, + &mcl_idx)) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + if (p_mcb->delete_mdl.delete_req_pending) { + if (p_delete_cfm->rsp_code == MCA_RSP_SUCCESS) { + if (!bta_hl_delete_mdl_cfg(app_idx, p_mcb->bd_addr, + p_delete_cfm->mdl_id)) { + status = BTA_HL_STATUS_FAIL; } + } else { + status = BTA_HL_STATUS_FAIL; + } + + memset(&p_mcb->delete_mdl, 0, sizeof(tBTA_HL_DELETE_MDL)); + } else { + send_cfm_evt = false; } - else - { - send_cfm_evt = false; - } + } else { + send_cfm_evt = false; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_delete_mdl status=%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_delete_mdl status=%s", + bta_hl_status_code(status)); + } #endif - if (send_cfm_evt) - { - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - bta_hl_build_delete_mdl_cfm(&evt_data, - p_acb->app_handle, - p_mcb->mcl_handle, - p_delete_cfm->mdl_id, - status); - - p_acb->p_cback(BTA_HL_DELETE_MDL_CFM_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_mca_delete_mdl_cfm Null Callback"); + if (send_cfm_evt) { + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + bta_hl_build_delete_mdl_cfm(&evt_data, p_acb->app_handle, + p_mcb->mcl_handle, p_delete_cfm->mdl_id, + status); - } + p_acb->p_cback(BTA_HL_DELETE_MDL_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_mca_delete_mdl_cfm Null Callback"); } + } } /******************************************************************************* @@ -1771,59 +1582,49 @@ static void bta_hl_mca_delete_mdl_cfm(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA * Returns void * ******************************************************************************/ -static void bta_hl_mca_delete_mdl_ind(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL evt_data; - uint8_t app_idx, mcl_idx, mdl_idx; - tMCA_EVT_HDR *p_delete_ind = &p_data->mca_evt.mca_data.delete_ind; - tBTA_HL_MCL_CB *p_mcb; - tBTA_HL_MDL_CB *p_dcb; - bool send_ind_evt = false; - tBTA_HL_APP_CB *p_acb; - - if (bta_hl_find_mcl_idx_using_handle(p_data->mca_evt.mcl_handle, &app_idx, &mcl_idx) ) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); +static void bta_hl_mca_delete_mdl_ind(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL evt_data; + uint8_t app_idx, mcl_idx, mdl_idx; + tMCA_EVT_HDR* p_delete_ind = &p_data->mca_evt.mca_data.delete_ind; + tBTA_HL_MCL_CB* p_mcb; + tBTA_HL_MDL_CB* p_dcb; + bool send_ind_evt = false; + tBTA_HL_APP_CB* p_acb; - if (bta_hl_find_mdl_idx(app_idx, mcl_idx, p_delete_ind->mdl_id, &mdl_idx )) - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_DELETE; - } - if (bta_hl_delete_mdl_cfg(app_idx, - p_mcb->bd_addr , - p_delete_ind->mdl_id)) - { - send_ind_evt = true; - } + if (bta_hl_find_mcl_idx_using_handle(p_data->mca_evt.mcl_handle, &app_idx, + &mcl_idx)) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + + if (bta_hl_find_mdl_idx(app_idx, mcl_idx, p_delete_ind->mdl_id, &mdl_idx)) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + p_dcb->dch_oper = BTA_HL_DCH_OP_REMOTE_DELETE; } + if (bta_hl_delete_mdl_cfg(app_idx, p_mcb->bd_addr, p_delete_ind->mdl_id)) { + send_ind_evt = true; + } + } #if (BTA_HL_DEBUG == TRUE) - if (!send_ind_evt) - { - APPL_TRACE_DEBUG("bta_hl_mca_delete_mdl_ind is_send_ind_evt =%d", send_ind_evt); - } + if (!send_ind_evt) { + APPL_TRACE_DEBUG("bta_hl_mca_delete_mdl_ind is_send_ind_evt =%d", + send_ind_evt); + } #endif - if (send_ind_evt) - { - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - evt_data.delete_mdl_ind.mcl_handle = p_mcb->mcl_handle; - evt_data.delete_mdl_ind.app_handle = p_acb->app_handle; - evt_data.delete_mdl_ind.mdl_id = p_delete_ind->mdl_id; - p_acb->p_cback(BTA_HL_DELETE_MDL_IND_EVT,(tBTA_HL *) &evt_data ); - } - else - { - APPL_TRACE_ERROR("bta_hl_mca_delete_mdl_ind Null Callback"); - } + if (send_ind_evt) { + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + evt_data.delete_mdl_ind.mcl_handle = p_mcb->mcl_handle; + evt_data.delete_mdl_ind.app_handle = p_acb->app_handle; + evt_data.delete_mdl_ind.mdl_id = p_delete_ind->mdl_id; + p_acb->p_cback(BTA_HL_DELETE_MDL_IND_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_mca_delete_mdl_ind Null Callback"); } + } } - - /******************************************************************************* * * Function bta_hl_api_dch_abort @@ -1833,79 +1634,63 @@ static void bta_hl_mca_delete_mdl_ind(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA * Returns void * ******************************************************************************/ -static void bta_hl_api_dch_abort(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) -{ - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - uint8_t app_idx, mcl_idx, mdl_idx; - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb; - tBTA_HL_MDL_CB *p_dcb; - tBTA_HL evt_data; - - if (bta_hl_find_mcl_idx_using_handle(p_data->api_dch_abort.mcl_handle, &app_idx, &mcl_idx )) - { - - if (!bta_hl_find_dch_setup_mdl_idx(app_idx, mcl_idx, &mdl_idx )) - { - status = BTA_HL_STATUS_NO_MDL_ID_FOUND; - } - else - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - if (p_dcb->abort_oper) - { - /* abort already in progress*/ - status = BTA_HL_STATUS_FAIL; - } - else - { - p_dcb->abort_oper = BTA_HL_ABORT_LOCAL_MASK; - } - } - } - else - { - status = BTA_HL_STATUS_INVALID_MCL_HANDLE; +static void bta_hl_api_dch_abort(UNUSED_ATTR tBTA_HL_CB* p_cb, + tBTA_HL_DATA* p_data) { + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + uint8_t app_idx, mcl_idx, mdl_idx; + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb; + tBTA_HL_MDL_CB* p_dcb; + tBTA_HL evt_data; + + if (bta_hl_find_mcl_idx_using_handle(p_data->api_dch_abort.mcl_handle, + &app_idx, &mcl_idx)) { + if (!bta_hl_find_dch_setup_mdl_idx(app_idx, mcl_idx, &mdl_idx)) { + status = BTA_HL_STATUS_NO_MDL_ID_FOUND; + } else { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + if (p_dcb->abort_oper) { + /* abort already in progress*/ + status = BTA_HL_STATUS_FAIL; + } else { + p_dcb->abort_oper = BTA_HL_ABORT_LOCAL_MASK; + } } - + } else { + status = BTA_HL_STATUS_INVALID_MCL_HANDLE; + } #if (BTA_HL_DEBUG == TRUE) - if (status != BTA_HL_STATUS_OK) - { - APPL_TRACE_DEBUG("bta_hl_api_dch_abort status=%s", bta_hl_status_code(status)); - } + if (status != BTA_HL_STATUS_OK) { + APPL_TRACE_DEBUG("bta_hl_api_dch_abort status=%s", + bta_hl_status_code(status)); + } #endif - switch (status) - { - case BTA_HL_STATUS_OK: - - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, p_data); - break; - case BTA_HL_STATUS_NO_MDL_ID_FOUND: - case BTA_HL_STATUS_FAIL: - - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (p_acb->p_cback) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bta_hl_build_abort_cfm(&evt_data, + switch (status) { + case BTA_HL_STATUS_OK: + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, + p_data); + break; + case BTA_HL_STATUS_NO_MDL_ID_FOUND: + case BTA_HL_STATUS_FAIL: - - p_acb->app_handle, - p_mcb->mcl_handle, - BTA_HL_STATUS_FAIL); - p_acb->p_cback(BTA_HL_DCH_ABORT_CFM_EVT,(tBTA_HL *) &evt_data); - } - else - { - APPL_TRACE_ERROR("bta_hl_api_dch_abort Null Callback"); - } - break; - default: - APPL_TRACE_ERROR("Status code=%d", status); - break; - } + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (p_acb->p_cback) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bta_hl_build_abort_cfm(&evt_data, + + p_acb->app_handle, p_mcb->mcl_handle, + BTA_HL_STATUS_FAIL); + p_acb->p_cback(BTA_HL_DCH_ABORT_CFM_EVT, (tBTA_HL*)&evt_data); + } else { + APPL_TRACE_ERROR("bta_hl_api_dch_abort Null Callback"); + } + break; + default: + APPL_TRACE_ERROR("Status code=%d", status); + break; + } } /******************************************************************************* @@ -1917,126 +1702,117 @@ static void bta_hl_api_dch_abort(UNUSED_ATTR tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_d * Returns void * ******************************************************************************/ -bool bta_hl_hdl_event(BT_HDR *p_msg) -{ - uint8_t app_idx, mcl_idx, mdl_idx; - bool success = true; +bool bta_hl_hdl_event(BT_HDR* p_msg) { + uint8_t app_idx, mcl_idx, mdl_idx; + bool success = true; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("BTA HL Event Handler: Event [%s]", - bta_hl_evt_code(p_msg->event)); + APPL_TRACE_DEBUG("BTA HL Event Handler: Event [%s]", + bta_hl_evt_code(p_msg->event)); #endif - switch (p_msg->event) - { - case BTA_HL_API_ENABLE_EVT: - bta_hl_api_enable(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_DISABLE_EVT: - bta_hl_api_disable(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_UPDATE_EVT: - bta_hl_api_update(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_REGISTER_EVT: - bta_hl_api_register(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_DEREGISTER_EVT: - bta_hl_api_deregister(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_CCH_OPEN_EVT: - bta_hl_api_cch_open(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_CCH_CLOSE_EVT: - bta_hl_api_cch_close(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_DCH_OPEN_EVT: - bta_hl_api_dch_open(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_DCH_CLOSE_EVT: - bta_hl_api_dch_close(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_DELETE_MDL_EVT: - bta_hl_api_delete_mdl(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_DCH_RECONNECT_EVT: - bta_hl_api_dch_reconnect(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - - case BTA_HL_API_DCH_ECHO_TEST_EVT: - bta_hl_api_dch_echo_test(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - - case BTA_HL_API_SDP_QUERY_EVT: - bta_hl_api_sdp_query(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - - case BTA_HL_MCA_DELETE_CFM_EVT: - bta_hl_mca_delete_mdl_cfm(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - - case BTA_HL_MCA_DELETE_IND_EVT: - bta_hl_mca_delete_mdl_ind(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - - case BTA_HL_SDP_QUERY_OK_EVT: - case BTA_HL_SDP_QUERY_FAIL_EVT: - bta_hl_sdp_query_results(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - case BTA_HL_API_DCH_ABORT_EVT: - bta_hl_api_dch_abort(&bta_hl_cb, (tBTA_HL_DATA *) p_msg); - break; - - - default: - if (p_msg->event < BTA_HL_DCH_EVT_MIN) - { - if (bta_hl_find_cch_cb_indexes((tBTA_HL_DATA *) p_msg, &app_idx, &mcl_idx)) - { - bta_hl_cch_sm_execute( app_idx, - mcl_idx, - p_msg->event, (tBTA_HL_DATA *) p_msg); - } - else - { + switch (p_msg->event) { + case BTA_HL_API_ENABLE_EVT: + bta_hl_api_enable(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_DISABLE_EVT: + bta_hl_api_disable(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_UPDATE_EVT: + bta_hl_api_update(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_REGISTER_EVT: + bta_hl_api_register(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_DEREGISTER_EVT: + bta_hl_api_deregister(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_CCH_OPEN_EVT: + bta_hl_api_cch_open(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_CCH_CLOSE_EVT: + bta_hl_api_cch_close(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_DCH_OPEN_EVT: + bta_hl_api_dch_open(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_DCH_CLOSE_EVT: + bta_hl_api_dch_close(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_DELETE_MDL_EVT: + bta_hl_api_delete_mdl(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_DCH_RECONNECT_EVT: + bta_hl_api_dch_reconnect(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + + case BTA_HL_API_DCH_ECHO_TEST_EVT: + bta_hl_api_dch_echo_test(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + + case BTA_HL_API_SDP_QUERY_EVT: + bta_hl_api_sdp_query(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + + case BTA_HL_MCA_DELETE_CFM_EVT: + bta_hl_mca_delete_mdl_cfm(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + + case BTA_HL_MCA_DELETE_IND_EVT: + bta_hl_mca_delete_mdl_ind(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + + case BTA_HL_SDP_QUERY_OK_EVT: + case BTA_HL_SDP_QUERY_FAIL_EVT: + bta_hl_sdp_query_results(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + case BTA_HL_API_DCH_ABORT_EVT: + bta_hl_api_dch_abort(&bta_hl_cb, (tBTA_HL_DATA*)p_msg); + break; + + default: + if (p_msg->event < BTA_HL_DCH_EVT_MIN) { + if (bta_hl_find_cch_cb_indexes((tBTA_HL_DATA*)p_msg, &app_idx, + &mcl_idx)) { + bta_hl_cch_sm_execute(app_idx, mcl_idx, p_msg->event, + (tBTA_HL_DATA*)p_msg); + } else { #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_ERROR("unable to find control block indexes for CCH: [event=%s]", - bta_hl_evt_code(p_msg->event)); + APPL_TRACE_ERROR( + "unable to find control block indexes for CCH: [event=%s]", + bta_hl_evt_code(p_msg->event)); #else - APPL_TRACE_ERROR("unable to find control block indexes for CCH: [event=%d]", p_msg->event); + APPL_TRACE_ERROR( + "unable to find control block indexes for CCH: [event=%d]", + p_msg->event); #endif - success = false; - } - } - else - { - if (bta_hl_find_dch_cb_indexes((tBTA_HL_DATA *) p_msg, &app_idx, &mcl_idx, &mdl_idx)) - { - bta_hl_dch_sm_execute( app_idx, - mcl_idx, - mdl_idx, - p_msg->event, (tBTA_HL_DATA *) p_msg); - } - else - { - + success = false; + } + } else { + if (bta_hl_find_dch_cb_indexes((tBTA_HL_DATA*)p_msg, &app_idx, &mcl_idx, + &mdl_idx)) { + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, p_msg->event, + (tBTA_HL_DATA*)p_msg); + } else { #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_ERROR("unable to find control block indexes for DCH : [event=%s]", - bta_hl_evt_code(p_msg->event)); + APPL_TRACE_ERROR( + "unable to find control block indexes for DCH : [event=%s]", + bta_hl_evt_code(p_msg->event)); #else - APPL_TRACE_ERROR("unable to find control block indexes for DCH: [event=%d]", p_msg->event); + APPL_TRACE_ERROR( + "unable to find control block indexes for DCH: [event=%d]", + p_msg->event); #endif - success = false; - } - } + success = false; + } + } - break; - } + break; + } - return(success); + return (success); } - /***************************************************************************** * Debug Functions ****************************************************************************/ @@ -2051,21 +1827,19 @@ bool bta_hl_hdl_event(BT_HDR *p_msg) * Returns string pointer for the associated state name * ******************************************************************************/ -static const char *bta_hl_cch_state_code(tBTA_HL_CCH_STATE state_code) -{ - switch (state_code) - { - case BTA_HL_CCH_IDLE_ST: - return "BTA_HL_CCH_IDLE_ST"; - case BTA_HL_CCH_OPENING_ST: - return "BTA_HL_CCH_OPENING_ST"; - case BTA_HL_CCH_OPEN_ST: - return "BTA_HL_CCH_OPEN_ST"; - case BTA_HL_CCH_CLOSING_ST: - return "BTA_HL_CCH_CLOSING_ST"; - default: - return "Unknown CCH state code"; - } +static const char* bta_hl_cch_state_code(tBTA_HL_CCH_STATE state_code) { + switch (state_code) { + case BTA_HL_CCH_IDLE_ST: + return "BTA_HL_CCH_IDLE_ST"; + case BTA_HL_CCH_OPENING_ST: + return "BTA_HL_CCH_OPENING_ST"; + case BTA_HL_CCH_OPEN_ST: + return "BTA_HL_CCH_OPEN_ST"; + case BTA_HL_CCH_CLOSING_ST: + return "BTA_HL_CCH_CLOSING_ST"; + default: + return "Unknown CCH state code"; + } } /******************************************************************************* @@ -2077,21 +1851,19 @@ static const char *bta_hl_cch_state_code(tBTA_HL_CCH_STATE state_code) * Returns string pointer for the associated state name * ******************************************************************************/ -static const char *bta_hl_dch_state_code(tBTA_HL_DCH_STATE state_code) -{ - switch (state_code) - { - case BTA_HL_DCH_IDLE_ST: - return "BTA_HL_DCH_IDLE_ST"; - case BTA_HL_DCH_OPENING_ST: - return "BTA_HL_DCH_OPENING_ST"; - case BTA_HL_DCH_OPEN_ST: - return "BTA_HL_DCH_OPEN_ST"; - case BTA_HL_DCH_CLOSING_ST: - return "BTA_HL_DCH_CLOSING_ST"; - default: - return "Unknown DCH state code"; - } +static const char* bta_hl_dch_state_code(tBTA_HL_DCH_STATE state_code) { + switch (state_code) { + case BTA_HL_DCH_IDLE_ST: + return "BTA_HL_DCH_IDLE_ST"; + case BTA_HL_DCH_OPENING_ST: + return "BTA_HL_DCH_OPENING_ST"; + case BTA_HL_DCH_OPEN_ST: + return "BTA_HL_DCH_OPEN_ST"; + case BTA_HL_DCH_CLOSING_ST: + return "BTA_HL_DCH_CLOSING_ST"; + default: + return "Unknown DCH state code"; + } } -#endif /* Debug Functions */ +#endif /* Debug Functions */ #endif /* HL_INCLUDED */ diff --git a/system/bta/hl/bta_hl_sdp.cc b/system/bta/hl/bta_hl_sdp.cc index 8b3951f4c1d..94c913697c4 100644 --- a/system/bta/hl/bta_hl_sdp.cc +++ b/system/bta/hl/bta_hl_sdp.cc @@ -21,9 +21,9 @@ #include "bt_target.h" #if (HL_INCLUDED == TRUE) -#include "sdp_api.h" #include "bta_hl_int.h" #include "osi/include/osi.h" +#include "sdp_api.h" #include "utl.h" /******************************************************************************* @@ -36,51 +36,50 @@ * If found, the passed protocol list element is filled in. * ******************************************************************************/ -bool bta_hl_fill_sup_feature_list( const tSDP_DISC_ATTR *p_attr, - tBTA_HL_SUP_FEATURE_LIST_ELEM *p_list) -{ - tSDP_DISC_ATTR *p_sattr; - uint8_t item_cnt; - uint8_t list_cnt=0; - bool status=true; - - for (p_attr = p_attr->attr_value.v.p_sub_attr; p_attr; p_attr = p_attr->p_next_attr) - { - /* mdep sequence */ - if (SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != DATA_ELE_SEQ_DESC_TYPE) - { - return(false); - } - - item_cnt=0; - - for (p_sattr = p_attr->attr_value.v.p_sub_attr; p_sattr && (item_cnt < 4) ; p_sattr = p_sattr->p_next_attr) - { - /* for each mdep list */ - - p_list->list_elem[list_cnt].p_mdep_desp = NULL; - switch (item_cnt) - { - case 0: - p_list->list_elem[list_cnt].mdep_id = p_sattr->attr_value.v.u8; - break; - case 1: - p_list->list_elem[list_cnt].data_type = p_sattr->attr_value.v.u16; - break; - case 2: - p_list->list_elem[list_cnt].mdep_role = (tBTA_HL_MDEP_ROLE) p_sattr->attr_value.v.u8; - break; - case 3: - p_list->list_elem[list_cnt].p_mdep_desp = (char *) p_sattr->attr_value.v.array; - break; - } - - item_cnt++; - } - list_cnt++; - } - p_list->num_elems = list_cnt; - return(status); +bool bta_hl_fill_sup_feature_list(const tSDP_DISC_ATTR* p_attr, + tBTA_HL_SUP_FEATURE_LIST_ELEM* p_list) { + tSDP_DISC_ATTR* p_sattr; + uint8_t item_cnt; + uint8_t list_cnt = 0; + bool status = true; + + for (p_attr = p_attr->attr_value.v.p_sub_attr; p_attr; + p_attr = p_attr->p_next_attr) { + /* mdep sequence */ + if (SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != DATA_ELE_SEQ_DESC_TYPE) { + return (false); + } + + item_cnt = 0; + + for (p_sattr = p_attr->attr_value.v.p_sub_attr; p_sattr && (item_cnt < 4); + p_sattr = p_sattr->p_next_attr) { + /* for each mdep list */ + + p_list->list_elem[list_cnt].p_mdep_desp = NULL; + switch (item_cnt) { + case 0: + p_list->list_elem[list_cnt].mdep_id = p_sattr->attr_value.v.u8; + break; + case 1: + p_list->list_elem[list_cnt].data_type = p_sattr->attr_value.v.u16; + break; + case 2: + p_list->list_elem[list_cnt].mdep_role = + (tBTA_HL_MDEP_ROLE)p_sattr->attr_value.v.u8; + break; + case 3: + p_list->list_elem[list_cnt].p_mdep_desp = + (char*)p_sattr->attr_value.v.array; + break; + } + + item_cnt++; + } + list_cnt++; + } + p_list->num_elems = list_cnt; + return (status); } /******************************************************************************* @@ -93,41 +92,38 @@ bool bta_hl_fill_sup_feature_list( const tSDP_DISC_ATTR *p_attr, * Returns the length of the data sequence * ******************************************************************************/ -int bta_hl_compose_supported_feature_list( uint8_t *p, uint16_t num_elem, - const tBTA_HL_SUP_FEATURE_ELEM *p_elem_list) -{ - uint16_t xx, str_len, seq_len; - uint8_t *p_head = p; - - for (xx = 0; xx < num_elem; xx++, p_elem_list++) - { - UINT8_TO_BE_STREAM (p, (DATA_ELE_SEQ_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE); - seq_len=7; - str_len=0; - if (p_elem_list->p_mdep_desp) - { - str_len = strlen(p_elem_list->p_mdep_desp)+1; - seq_len += str_len+2; /* todo add a # symbol for 2 */ - } - - *p++ = (uint8_t) seq_len; - - UINT8_TO_BE_STREAM (p, (UINT_DESC_TYPE << 3) | SIZE_ONE_BYTE); - UINT8_TO_BE_STREAM (p, p_elem_list->mdep_id); - UINT8_TO_BE_STREAM (p, (UINT_DESC_TYPE << 3) | SIZE_TWO_BYTES); - UINT16_TO_BE_STREAM (p, p_elem_list->data_type); - UINT8_TO_BE_STREAM (p, (UINT_DESC_TYPE << 3) | SIZE_ONE_BYTE); - UINT8_TO_BE_STREAM (p, p_elem_list->mdep_role); - - if (str_len) - { - UINT8_TO_BE_STREAM (p, (TEXT_STR_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE); - UINT8_TO_BE_STREAM (p, str_len); - ARRAY_TO_BE_STREAM(p, p_elem_list->p_mdep_desp, str_len); - } - } - - return(p - p_head); +int bta_hl_compose_supported_feature_list( + uint8_t* p, uint16_t num_elem, + const tBTA_HL_SUP_FEATURE_ELEM* p_elem_list) { + uint16_t xx, str_len, seq_len; + uint8_t* p_head = p; + + for (xx = 0; xx < num_elem; xx++, p_elem_list++) { + UINT8_TO_BE_STREAM(p, (DATA_ELE_SEQ_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE); + seq_len = 7; + str_len = 0; + if (p_elem_list->p_mdep_desp) { + str_len = strlen(p_elem_list->p_mdep_desp) + 1; + seq_len += str_len + 2; /* todo add a # symbol for 2 */ + } + + *p++ = (uint8_t)seq_len; + + UINT8_TO_BE_STREAM(p, (UINT_DESC_TYPE << 3) | SIZE_ONE_BYTE); + UINT8_TO_BE_STREAM(p, p_elem_list->mdep_id); + UINT8_TO_BE_STREAM(p, (UINT_DESC_TYPE << 3) | SIZE_TWO_BYTES); + UINT16_TO_BE_STREAM(p, p_elem_list->data_type); + UINT8_TO_BE_STREAM(p, (UINT_DESC_TYPE << 3) | SIZE_ONE_BYTE); + UINT8_TO_BE_STREAM(p, p_elem_list->mdep_role); + + if (str_len) { + UINT8_TO_BE_STREAM(p, (TEXT_STR_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE); + UINT8_TO_BE_STREAM(p, str_len); + ARRAY_TO_BE_STREAM(p, p_elem_list->p_mdep_desp, str_len); + } + } + + return (p - p_head); } /******************************************************************************* @@ -135,27 +131,27 @@ int bta_hl_compose_supported_feature_list( uint8_t *p, uint16_t num_elem, * Function bta_hl_add_sup_feature_list * * Description This function is called to add a protocol descriptor list to - * a record. This would be through the SDP database maintenance API. - * If the protocol list already exists in the record, it is replaced + * a record. This would be through the SDP database maintenance + *API. + * If the protocol list already exists in the record, it is + *replaced * with the new list. * * Returns true if added OK, else false * ******************************************************************************/ -bool bta_hl_add_sup_feature_list (uint32_t handle, uint16_t num_elem, - const tBTA_HL_SUP_FEATURE_ELEM *p_elem_list) -{ - int offset; - bool result; - uint8_t *p_buf = (uint8_t *)osi_malloc(BTA_HL_SUP_FEATURE_SDP_BUF_SIZE); - - offset = bta_hl_compose_supported_feature_list(p_buf, num_elem, - p_elem_list); - result = SDP_AddAttribute(handle, ATTR_ID_HDP_SUP_FEAT_LIST, - DATA_ELE_SEQ_DESC_TYPE, (uint32_t) offset, p_buf); - osi_free(p_buf); - - return result; +bool bta_hl_add_sup_feature_list(uint32_t handle, uint16_t num_elem, + const tBTA_HL_SUP_FEATURE_ELEM* p_elem_list) { + int offset; + bool result; + uint8_t* p_buf = (uint8_t*)osi_malloc(BTA_HL_SUP_FEATURE_SDP_BUF_SIZE); + + offset = bta_hl_compose_supported_feature_list(p_buf, num_elem, p_elem_list); + result = SDP_AddAttribute(handle, ATTR_ID_HDP_SUP_FEAT_LIST, + DATA_ELE_SEQ_DESC_TYPE, (uint32_t)offset, p_buf); + osi_free(p_buf); + + return result; } /***************************************************************************** @@ -169,193 +165,172 @@ bool bta_hl_add_sup_feature_list (uint32_t handle, uint16_t num_elem, * Returns: void * ****************************************************************************/ -tBTA_HL_STATUS bta_hl_sdp_update (UNUSED_ATTR uint8_t app_id) -{ - uint16_t svc_class_id_list[BTA_HL_NUM_SVC_ELEMS]; - tSDP_PROTOCOL_ELEM proto_elem_list[BTA_HL_NUM_PROTO_ELEMS]; - tSDP_PROTO_LIST_ELEM add_proto_list; - tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature_list; - uint16_t browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; - uint8_t i,j, cnt,mdep_id, mdep_role; - uint8_t data_exchange_spec = BTA_HL_SDP_IEEE_11073_20601; - uint8_t mcap_sup_proc = BTA_HL_MCAP_SUP_PROC_MASK; - uint16_t profile_uuid = UUID_SERVCLASS_HDP_PROFILE; - uint16_t version = BTA_HL_VERSION; - uint8_t num_services=1; - tBTA_HL_APP_CB *p_cb = BTA_HL_GET_APP_CB_PTR(0); - bool result = true; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - - if ((p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE) && - (!p_cb->sup_feature.advertize_source_sdp)) - { - return BTA_HL_STATUS_OK; - } - - num_services=1; - svc_class_id_list[0]= UUID_SERVCLASS_HDP_SOURCE; - if (p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SINK) - { - svc_class_id_list[0]= UUID_SERVCLASS_HDP_SINK; - } - else - { - if (p_cb->sup_feature.app_role_mask != BTA_HL_MDEP_ROLE_MASK_SOURCE) - { - /* dual role */ - num_services=2; - svc_class_id_list[1]= UUID_SERVCLASS_HDP_SINK; - } - } - result &= SDP_AddServiceClassIdList(p_cb->sdp_handle, num_services, svc_class_id_list); - - if (result) - { - /* add the protocol element sequence */ - proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; - proto_elem_list[0].num_params = 1; - proto_elem_list[0].params[0] = p_cb->ctrl_psm; - proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_MCAP_CTRL; - proto_elem_list[1].num_params = 1; - proto_elem_list[1].params[0] = version; - result &= SDP_AddProtocolList(p_cb->sdp_handle, BTA_HL_NUM_PROTO_ELEMS, proto_elem_list); - - result &= SDP_AddProfileDescriptorList(p_cb->sdp_handle, profile_uuid, version); - } - - if (result) - { - add_proto_list.num_elems = BTA_HL_NUM_ADD_PROTO_ELEMS; - add_proto_list.list_elem[0].protocol_uuid = UUID_PROTOCOL_L2CAP; - add_proto_list.list_elem[0].num_params = 1; - add_proto_list.list_elem[0].params[0] = p_cb->data_psm; - add_proto_list.list_elem[1].protocol_uuid = UUID_PROTOCOL_MCAP_DATA; - add_proto_list.list_elem[1].num_params = 0; - result &= SDP_AddAdditionProtoLists(p_cb->sdp_handle, BTA_HL_NUM_ADD_PROTO_LISTS, - (tSDP_PROTO_LIST_ELEM *)&add_proto_list); - } - - if (result) - { - if (p_cb->srv_name[0] ) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, - (uint16_t)ATTR_ID_SERVICE_NAME, - (uint8_t)TEXT_STR_DESC_TYPE, - (uint32_t)(strlen(p_cb->srv_name) + 1), - (uint8_t *)p_cb->srv_name); - } /* end of setting optional service name */ - } - - if (result) - { - if (p_cb->srv_desp[0] ) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, - (uint16_t)ATTR_ID_SERVICE_DESCRIPTION, - (uint8_t)TEXT_STR_DESC_TYPE, - (uint32_t)(strlen(p_cb->srv_desp) + 1), - (uint8_t *)p_cb->srv_desp); - - } /* end of setting optional service description */ - - } - - if (result) - { - if (p_cb->provider_name[0] ) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, - (uint16_t)ATTR_ID_PROVIDER_NAME, - (uint8_t)TEXT_STR_DESC_TYPE, - (uint32_t)(strlen(p_cb->provider_name) + 1), - (uint8_t *)p_cb->provider_name); - } /* end of setting optional provider name */ - } - - /* add supported feture list */ - - if (result) - { - cnt=0; - for (i=1; i< BTA_HL_NUM_MDEPS; i++) - { - if (p_cb->sup_feature.mdep[i].mdep_id) - { - mdep_id = (uint8_t)p_cb->sup_feature.mdep[i].mdep_id; - mdep_role = (uint8_t)p_cb->sup_feature.mdep[i].mdep_cfg.mdep_role; - - APPL_TRACE_DEBUG("num_of_mdep_data_types %d ", p_cb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types); - for (j=0; jsup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types; j++) - { - sup_feature_list.list_elem[cnt].mdep_id = mdep_id; - sup_feature_list.list_elem[cnt].mdep_role = mdep_role; - sup_feature_list.list_elem[cnt].data_type = p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].data_type; - if (p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp[0] != '\0') - { - sup_feature_list.list_elem[cnt].p_mdep_desp = p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp; - } - else - { - sup_feature_list.list_elem[cnt].p_mdep_desp = NULL; - } - - cnt++; - if (cnt==BTA_HL_NUM_SUP_FEATURE_ELEMS) - { - result = false; - break; - } - } - } - } - sup_feature_list.num_elems = cnt; - result &= bta_hl_add_sup_feature_list (p_cb->sdp_handle, - sup_feature_list.num_elems, - sup_feature_list.list_elem); - } - if (result) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_DATA_EXCH_SPEC, UINT_DESC_TYPE, - (uint32_t)1, (uint8_t*)&data_exchange_spec); - } - - if (result) - { - - result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_MCAP_SUP_PROC, UINT_DESC_TYPE, - (uint32_t)1, (uint8_t*)&mcap_sup_proc); - } - - if (result) - { - result &= SDP_AddUuidSequence(p_cb->sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, browse_list); - } - - if (result) - { - for(i=0; i < num_services; i++) - { - bta_sys_add_uuid(svc_class_id_list[i]); - APPL_TRACE_DEBUG("dbg bta_sys_add_uuid i=%d uuid=0x%x", i, svc_class_id_list[i]); //todo - } - } - else - { - if (p_cb->sdp_handle) - { - SDP_DeleteRecord(p_cb->sdp_handle); - p_cb->sdp_handle = 0; +tBTA_HL_STATUS bta_hl_sdp_update(UNUSED_ATTR uint8_t app_id) { + uint16_t svc_class_id_list[BTA_HL_NUM_SVC_ELEMS]; + tSDP_PROTOCOL_ELEM proto_elem_list[BTA_HL_NUM_PROTO_ELEMS]; + tSDP_PROTO_LIST_ELEM add_proto_list; + tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature_list; + uint16_t browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; + uint8_t i, j, cnt, mdep_id, mdep_role; + uint8_t data_exchange_spec = BTA_HL_SDP_IEEE_11073_20601; + uint8_t mcap_sup_proc = BTA_HL_MCAP_SUP_PROC_MASK; + uint16_t profile_uuid = UUID_SERVCLASS_HDP_PROFILE; + uint16_t version = BTA_HL_VERSION; + uint8_t num_services = 1; + tBTA_HL_APP_CB* p_cb = BTA_HL_GET_APP_CB_PTR(0); + bool result = true; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + + if ((p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE) && + (!p_cb->sup_feature.advertize_source_sdp)) { + return BTA_HL_STATUS_OK; + } + + num_services = 1; + svc_class_id_list[0] = UUID_SERVCLASS_HDP_SOURCE; + if (p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SINK) { + svc_class_id_list[0] = UUID_SERVCLASS_HDP_SINK; + } else { + if (p_cb->sup_feature.app_role_mask != BTA_HL_MDEP_ROLE_MASK_SOURCE) { + /* dual role */ + num_services = 2; + svc_class_id_list[1] = UUID_SERVCLASS_HDP_SINK; + } + } + result &= SDP_AddServiceClassIdList(p_cb->sdp_handle, num_services, + svc_class_id_list); + + if (result) { + /* add the protocol element sequence */ + proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; + proto_elem_list[0].num_params = 1; + proto_elem_list[0].params[0] = p_cb->ctrl_psm; + proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_MCAP_CTRL; + proto_elem_list[1].num_params = 1; + proto_elem_list[1].params[0] = version; + result &= SDP_AddProtocolList(p_cb->sdp_handle, BTA_HL_NUM_PROTO_ELEMS, + proto_elem_list); + + result &= + SDP_AddProfileDescriptorList(p_cb->sdp_handle, profile_uuid, version); + } + + if (result) { + add_proto_list.num_elems = BTA_HL_NUM_ADD_PROTO_ELEMS; + add_proto_list.list_elem[0].protocol_uuid = UUID_PROTOCOL_L2CAP; + add_proto_list.list_elem[0].num_params = 1; + add_proto_list.list_elem[0].params[0] = p_cb->data_psm; + add_proto_list.list_elem[1].protocol_uuid = UUID_PROTOCOL_MCAP_DATA; + add_proto_list.list_elem[1].num_params = 0; + result &= + SDP_AddAdditionProtoLists(p_cb->sdp_handle, BTA_HL_NUM_ADD_PROTO_LISTS, + (tSDP_PROTO_LIST_ELEM*)&add_proto_list); + } + + if (result) { + if (p_cb->srv_name[0]) { + result &= SDP_AddAttribute( + p_cb->sdp_handle, (uint16_t)ATTR_ID_SERVICE_NAME, + (uint8_t)TEXT_STR_DESC_TYPE, (uint32_t)(strlen(p_cb->srv_name) + 1), + (uint8_t*)p_cb->srv_name); + } /* end of setting optional service name */ + } + + if (result) { + if (p_cb->srv_desp[0]) { + result &= SDP_AddAttribute( + p_cb->sdp_handle, (uint16_t)ATTR_ID_SERVICE_DESCRIPTION, + (uint8_t)TEXT_STR_DESC_TYPE, (uint32_t)(strlen(p_cb->srv_desp) + 1), + (uint8_t*)p_cb->srv_desp); + + } /* end of setting optional service description */ + } + + if (result) { + if (p_cb->provider_name[0]) { + result &= + SDP_AddAttribute(p_cb->sdp_handle, (uint16_t)ATTR_ID_PROVIDER_NAME, + (uint8_t)TEXT_STR_DESC_TYPE, + (uint32_t)(strlen(p_cb->provider_name) + 1), + (uint8_t*)p_cb->provider_name); + } /* end of setting optional provider name */ + } + + /* add supported feture list */ + + if (result) { + cnt = 0; + for (i = 1; i < BTA_HL_NUM_MDEPS; i++) { + if (p_cb->sup_feature.mdep[i].mdep_id) { + mdep_id = (uint8_t)p_cb->sup_feature.mdep[i].mdep_id; + mdep_role = (uint8_t)p_cb->sup_feature.mdep[i].mdep_cfg.mdep_role; + + APPL_TRACE_DEBUG( + "num_of_mdep_data_types %d ", + p_cb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types); + for (j = 0; + j < p_cb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types; + j++) { + sup_feature_list.list_elem[cnt].mdep_id = mdep_id; + sup_feature_list.list_elem[cnt].mdep_role = mdep_role; + sup_feature_list.list_elem[cnt].data_type = + p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].data_type; + if (p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp[0] != '\0') { + sup_feature_list.list_elem[cnt].p_mdep_desp = + p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp; + } else { + sup_feature_list.list_elem[cnt].p_mdep_desp = NULL; + } + + cnt++; + if (cnt == BTA_HL_NUM_SUP_FEATURE_ELEMS) { + result = false; + break; + } } - status = BTA_HL_STATUS_SDP_FAIL; - } + } + } + sup_feature_list.num_elems = cnt; + result &= bta_hl_add_sup_feature_list(p_cb->sdp_handle, + sup_feature_list.num_elems, + sup_feature_list.list_elem); + } + if (result) { + result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_DATA_EXCH_SPEC, + UINT_DESC_TYPE, (uint32_t)1, + (uint8_t*)&data_exchange_spec); + } + + if (result) { + result &= + SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_MCAP_SUP_PROC, + UINT_DESC_TYPE, (uint32_t)1, (uint8_t*)&mcap_sup_proc); + } + + if (result) { + result &= SDP_AddUuidSequence(p_cb->sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, + 1, browse_list); + } + + if (result) { + for (i = 0; i < num_services; i++) { + bta_sys_add_uuid(svc_class_id_list[i]); + APPL_TRACE_DEBUG("dbg bta_sys_add_uuid i=%d uuid=0x%x", i, + svc_class_id_list[i]); // todo + } + } else { + if (p_cb->sdp_handle) { + SDP_DeleteRecord(p_cb->sdp_handle); + p_cb->sdp_handle = 0; + } + status = BTA_HL_STATUS_SDP_FAIL; + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_sdp_update status=%s", bta_hl_status_code(status)); + APPL_TRACE_DEBUG("bta_hl_sdp_update status=%s", bta_hl_status_code(status)); #endif - return status; + return status; } - /***************************************************************************** * * Function: bta_hl_sdp_register @@ -371,265 +346,235 @@ tBTA_HL_STATUS bta_hl_sdp_update (UNUSED_ATTR uint8_t app_id) * Returns: void * ****************************************************************************/ -tBTA_HL_STATUS bta_hl_sdp_register (uint8_t app_idx) -{ - uint16_t svc_class_id_list[BTA_HL_NUM_SVC_ELEMS]; - tSDP_PROTOCOL_ELEM proto_elem_list[BTA_HL_NUM_PROTO_ELEMS]; - tSDP_PROTO_LIST_ELEM add_proto_list; - tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature_list; - uint16_t browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; - uint8_t i,j, cnt,mdep_id, mdep_role; - uint8_t data_exchange_spec = BTA_HL_SDP_IEEE_11073_20601; - uint8_t mcap_sup_proc = BTA_HL_MCAP_SUP_PROC_MASK; - uint16_t profile_uuid = UUID_SERVCLASS_HDP_PROFILE; - uint16_t version = BTA_HL_VERSION; - uint8_t num_services=1; - tBTA_HL_APP_CB *p_cb = BTA_HL_GET_APP_CB_PTR(app_idx); - bool result = true; - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; +tBTA_HL_STATUS bta_hl_sdp_register(uint8_t app_idx) { + uint16_t svc_class_id_list[BTA_HL_NUM_SVC_ELEMS]; + tSDP_PROTOCOL_ELEM proto_elem_list[BTA_HL_NUM_PROTO_ELEMS]; + tSDP_PROTO_LIST_ELEM add_proto_list; + tBTA_HL_SUP_FEATURE_LIST_ELEM sup_feature_list; + uint16_t browse_list[] = {UUID_SERVCLASS_PUBLIC_BROWSE_GROUP}; + uint8_t i, j, cnt, mdep_id, mdep_role; + uint8_t data_exchange_spec = BTA_HL_SDP_IEEE_11073_20601; + uint8_t mcap_sup_proc = BTA_HL_MCAP_SUP_PROC_MASK; + uint16_t profile_uuid = UUID_SERVCLASS_HDP_PROFILE; + uint16_t version = BTA_HL_VERSION; + uint8_t num_services = 1; + tBTA_HL_APP_CB* p_cb = BTA_HL_GET_APP_CB_PTR(app_idx); + bool result = true; + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_sdp_register app_idx=%d",app_idx); + APPL_TRACE_DEBUG("bta_hl_sdp_register app_idx=%d", app_idx); #endif - if ((p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE) && - (!p_cb->sup_feature.advertize_source_sdp)) - { - return BTA_HL_STATUS_OK; - } - - if ((p_cb->sdp_handle = SDP_CreateRecord()) == 0) - { - return BTA_HL_STATUS_SDP_NO_RESOURCE; - } - - num_services=1; - svc_class_id_list[0]= UUID_SERVCLASS_HDP_SOURCE; - if (p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SINK) - { - svc_class_id_list[0]= UUID_SERVCLASS_HDP_SINK; - } - else - { - if (p_cb->sup_feature.app_role_mask != BTA_HL_MDEP_ROLE_MASK_SOURCE) - { - /* dual role */ - num_services=2; - svc_class_id_list[1]= UUID_SERVCLASS_HDP_SINK; - } - } - result &= SDP_AddServiceClassIdList(p_cb->sdp_handle, num_services, svc_class_id_list); - - if (result) - { - /* add the protocol element sequence */ - proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; - proto_elem_list[0].num_params = 1; - proto_elem_list[0].params[0] = p_cb->ctrl_psm; - proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_MCAP_CTRL; - proto_elem_list[1].num_params = 1; - proto_elem_list[1].params[0] = version; - result &= SDP_AddProtocolList(p_cb->sdp_handle, BTA_HL_NUM_PROTO_ELEMS, proto_elem_list); - - result &= SDP_AddProfileDescriptorList(p_cb->sdp_handle, profile_uuid, version); - } - - if (result) - { - add_proto_list.num_elems = BTA_HL_NUM_ADD_PROTO_ELEMS; - add_proto_list.list_elem[0].protocol_uuid = UUID_PROTOCOL_L2CAP; - add_proto_list.list_elem[0].num_params = 1; - add_proto_list.list_elem[0].params[0] = p_cb->data_psm; - add_proto_list.list_elem[1].protocol_uuid = UUID_PROTOCOL_MCAP_DATA; - add_proto_list.list_elem[1].num_params = 0; - result &= SDP_AddAdditionProtoLists(p_cb->sdp_handle, BTA_HL_NUM_ADD_PROTO_LISTS, - (tSDP_PROTO_LIST_ELEM *)&add_proto_list); - } - - if (result) - { - if (p_cb->srv_name[0] ) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, - (uint16_t)ATTR_ID_SERVICE_NAME, - (uint8_t)TEXT_STR_DESC_TYPE, - (uint32_t)(strlen(p_cb->srv_name) + 1), - (uint8_t *)p_cb->srv_name); - } /* end of setting optional service name */ - } - - if (result) - { - if (p_cb->srv_desp[0] ) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, - (uint16_t)ATTR_ID_SERVICE_DESCRIPTION, - (uint8_t)TEXT_STR_DESC_TYPE, - (uint32_t)(strlen(p_cb->srv_desp) + 1), - (uint8_t *)p_cb->srv_desp); - - } /* end of setting optional service description */ - - } - - if (result) - { - if (p_cb->provider_name[0] ) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, - (uint16_t)ATTR_ID_PROVIDER_NAME, - (uint8_t)TEXT_STR_DESC_TYPE, - (uint32_t)(strlen(p_cb->provider_name) + 1), - (uint8_t *)p_cb->provider_name); - } /* end of setting optional provider name */ - } - - /* add supported feture list */ - - if (result) - { - cnt=0; - for (i=1; i<= p_cb->sup_feature.num_of_mdeps; i++) - { - mdep_id = (uint8_t)p_cb->sup_feature.mdep[i].mdep_id; - mdep_role = (uint8_t)p_cb->sup_feature.mdep[i].mdep_cfg.mdep_role; - - for (j=0; jsup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types; j++) - { - sup_feature_list.list_elem[cnt].mdep_id = mdep_id; - sup_feature_list.list_elem[cnt].mdep_role = mdep_role; - sup_feature_list.list_elem[cnt].data_type = p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].data_type; - if (p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp[0] != '\0') - { - sup_feature_list.list_elem[cnt].p_mdep_desp = p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp; - } - else - { - sup_feature_list.list_elem[cnt].p_mdep_desp = NULL; - } - - cnt++; - if (cnt==BTA_HL_NUM_SUP_FEATURE_ELEMS) - { - result = false; - break; - } - } + if ((p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE) && + (!p_cb->sup_feature.advertize_source_sdp)) { + return BTA_HL_STATUS_OK; + } + + if ((p_cb->sdp_handle = SDP_CreateRecord()) == 0) { + return BTA_HL_STATUS_SDP_NO_RESOURCE; + } + + num_services = 1; + svc_class_id_list[0] = UUID_SERVCLASS_HDP_SOURCE; + if (p_cb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SINK) { + svc_class_id_list[0] = UUID_SERVCLASS_HDP_SINK; + } else { + if (p_cb->sup_feature.app_role_mask != BTA_HL_MDEP_ROLE_MASK_SOURCE) { + /* dual role */ + num_services = 2; + svc_class_id_list[1] = UUID_SERVCLASS_HDP_SINK; + } + } + result &= SDP_AddServiceClassIdList(p_cb->sdp_handle, num_services, + svc_class_id_list); + + if (result) { + /* add the protocol element sequence */ + proto_elem_list[0].protocol_uuid = UUID_PROTOCOL_L2CAP; + proto_elem_list[0].num_params = 1; + proto_elem_list[0].params[0] = p_cb->ctrl_psm; + proto_elem_list[1].protocol_uuid = UUID_PROTOCOL_MCAP_CTRL; + proto_elem_list[1].num_params = 1; + proto_elem_list[1].params[0] = version; + result &= SDP_AddProtocolList(p_cb->sdp_handle, BTA_HL_NUM_PROTO_ELEMS, + proto_elem_list); + + result &= + SDP_AddProfileDescriptorList(p_cb->sdp_handle, profile_uuid, version); + } + + if (result) { + add_proto_list.num_elems = BTA_HL_NUM_ADD_PROTO_ELEMS; + add_proto_list.list_elem[0].protocol_uuid = UUID_PROTOCOL_L2CAP; + add_proto_list.list_elem[0].num_params = 1; + add_proto_list.list_elem[0].params[0] = p_cb->data_psm; + add_proto_list.list_elem[1].protocol_uuid = UUID_PROTOCOL_MCAP_DATA; + add_proto_list.list_elem[1].num_params = 0; + result &= + SDP_AddAdditionProtoLists(p_cb->sdp_handle, BTA_HL_NUM_ADD_PROTO_LISTS, + (tSDP_PROTO_LIST_ELEM*)&add_proto_list); + } + + if (result) { + if (p_cb->srv_name[0]) { + result &= SDP_AddAttribute( + p_cb->sdp_handle, (uint16_t)ATTR_ID_SERVICE_NAME, + (uint8_t)TEXT_STR_DESC_TYPE, (uint32_t)(strlen(p_cb->srv_name) + 1), + (uint8_t*)p_cb->srv_name); + } /* end of setting optional service name */ + } + + if (result) { + if (p_cb->srv_desp[0]) { + result &= SDP_AddAttribute( + p_cb->sdp_handle, (uint16_t)ATTR_ID_SERVICE_DESCRIPTION, + (uint8_t)TEXT_STR_DESC_TYPE, (uint32_t)(strlen(p_cb->srv_desp) + 1), + (uint8_t*)p_cb->srv_desp); + + } /* end of setting optional service description */ + } + + if (result) { + if (p_cb->provider_name[0]) { + result &= + SDP_AddAttribute(p_cb->sdp_handle, (uint16_t)ATTR_ID_PROVIDER_NAME, + (uint8_t)TEXT_STR_DESC_TYPE, + (uint32_t)(strlen(p_cb->provider_name) + 1), + (uint8_t*)p_cb->provider_name); + } /* end of setting optional provider name */ + } + + /* add supported feture list */ + + if (result) { + cnt = 0; + for (i = 1; i <= p_cb->sup_feature.num_of_mdeps; i++) { + mdep_id = (uint8_t)p_cb->sup_feature.mdep[i].mdep_id; + mdep_role = (uint8_t)p_cb->sup_feature.mdep[i].mdep_cfg.mdep_role; + + for (j = 0; j < p_cb->sup_feature.mdep[i].mdep_cfg.num_of_mdep_data_types; + j++) { + sup_feature_list.list_elem[cnt].mdep_id = mdep_id; + sup_feature_list.list_elem[cnt].mdep_role = mdep_role; + sup_feature_list.list_elem[cnt].data_type = + p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].data_type; + if (p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp[0] != '\0') { + sup_feature_list.list_elem[cnt].p_mdep_desp = + p_cb->sup_feature.mdep[i].mdep_cfg.data_cfg[j].desp; + } else { + sup_feature_list.list_elem[cnt].p_mdep_desp = NULL; } - sup_feature_list.num_elems = cnt; - result &= bta_hl_add_sup_feature_list (p_cb->sdp_handle, - sup_feature_list.num_elems, - sup_feature_list.list_elem); - } - if (result) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_DATA_EXCH_SPEC, UINT_DESC_TYPE, - (uint32_t)1, (uint8_t*)&data_exchange_spec); - } - - if (result) - { - result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_MCAP_SUP_PROC, UINT_DESC_TYPE, - (uint32_t)1, (uint8_t*)&mcap_sup_proc); - } - - if (result) - { - result &= SDP_AddUuidSequence(p_cb->sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, browse_list); - } - - if (result) - { - for(i=0; i < num_services; i++) - { - bta_sys_add_uuid(svc_class_id_list[i]); - APPL_TRACE_DEBUG("dbg bta_sys_add_uuid i=%d uuid=0x%x", i, svc_class_id_list[i]); //todo - } - } - else - { - if (p_cb->sdp_handle) - { - SDP_DeleteRecord(p_cb->sdp_handle); - p_cb->sdp_handle = 0; + cnt++; + if (cnt == BTA_HL_NUM_SUP_FEATURE_ELEMS) { + result = false; + break; } - status = BTA_HL_STATUS_SDP_FAIL; - } + } + } + sup_feature_list.num_elems = cnt; + result &= bta_hl_add_sup_feature_list(p_cb->sdp_handle, + sup_feature_list.num_elems, + sup_feature_list.list_elem); + } + if (result) { + result &= SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_DATA_EXCH_SPEC, + UINT_DESC_TYPE, (uint32_t)1, + (uint8_t*)&data_exchange_spec); + } + + if (result) { + result &= + SDP_AddAttribute(p_cb->sdp_handle, ATTR_ID_HDP_MCAP_SUP_PROC, + UINT_DESC_TYPE, (uint32_t)1, (uint8_t*)&mcap_sup_proc); + } + + if (result) { + result &= SDP_AddUuidSequence(p_cb->sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, + 1, browse_list); + } + + if (result) { + for (i = 0; i < num_services; i++) { + bta_sys_add_uuid(svc_class_id_list[i]); + APPL_TRACE_DEBUG("dbg bta_sys_add_uuid i=%d uuid=0x%x", i, + svc_class_id_list[i]); // todo + } + } else { + if (p_cb->sdp_handle) { + SDP_DeleteRecord(p_cb->sdp_handle); + p_cb->sdp_handle = 0; + } + status = BTA_HL_STATUS_SDP_FAIL; + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_sdp_register status=%s", bta_hl_status_code(status)); + APPL_TRACE_DEBUG("bta_hl_sdp_register status=%s", bta_hl_status_code(status)); #endif - return status; + return status; } /******************************************************************************* * * Function bta_hl_find_sink_or_src_srv_class_in_db * - * Description This function queries an SDP database for either a HDP Sink or + * Description This function queries an SDP database for either a HDP Sink + *or * Source service class ID. - * If the p_start_rec pointer is NULL, it looks from the beginning - * of the database, else it continues from the next record after + * If the p_start_rec pointer is NULL, it looks from the + *beginning + * of the database, else it continues from the next record + *after * p_start_rec. * * Returns Pointer to record containing service class, or NULL * ******************************************************************************/ -tSDP_DISC_REC *bta_hl_find_sink_or_src_srv_class_in_db (const tSDP_DISCOVERY_DB *p_db, - const tSDP_DISC_REC *p_start_rec) -{ +tSDP_DISC_REC* bta_hl_find_sink_or_src_srv_class_in_db( + const tSDP_DISCOVERY_DB* p_db, const tSDP_DISC_REC* p_start_rec) { #if (SDP_CLIENT_ENABLED == TRUE) - tSDP_DISC_REC *p_rec; - tSDP_DISC_ATTR *p_attr, *p_sattr; - - /* Must have a valid database */ - if (p_db == NULL) - return(NULL); - - - if (!p_start_rec) - { - - p_rec = p_db->p_first_rec; - } - else - { - p_rec = p_start_rec->p_next_rec; - } - - while (p_rec) - { - p_attr = p_rec->p_first_attr; - while (p_attr) - { - if ((p_attr->attr_id == ATTR_ID_SERVICE_CLASS_ID_LIST) - && (SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) == DATA_ELE_SEQ_DESC_TYPE)) - { - for (p_sattr = p_attr->attr_value.v.p_sub_attr; p_sattr; p_sattr = p_sattr->p_next_attr) - { - if ((SDP_DISC_ATTR_TYPE(p_sattr->attr_len_type) == UUID_DESC_TYPE) - && (SDP_DISC_ATTR_LEN(p_sattr->attr_len_type) == 2) - && ( (p_sattr->attr_value.v.u16 == UUID_SERVCLASS_HDP_SINK) || - (p_sattr->attr_value.v.u16 == UUID_SERVCLASS_HDP_SOURCE)) ) - { - return(p_rec); - } - } - break; - } - - p_attr = p_attr->p_next_attr; + tSDP_DISC_REC* p_rec; + tSDP_DISC_ATTR *p_attr, *p_sattr; + + /* Must have a valid database */ + if (p_db == NULL) return (NULL); + + if (!p_start_rec) { + p_rec = p_db->p_first_rec; + } else { + p_rec = p_start_rec->p_next_rec; + } + + while (p_rec) { + p_attr = p_rec->p_first_attr; + while (p_attr) { + if ((p_attr->attr_id == ATTR_ID_SERVICE_CLASS_ID_LIST) && + (SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) == + DATA_ELE_SEQ_DESC_TYPE)) { + for (p_sattr = p_attr->attr_value.v.p_sub_attr; p_sattr; + p_sattr = p_sattr->p_next_attr) { + if ((SDP_DISC_ATTR_TYPE(p_sattr->attr_len_type) == UUID_DESC_TYPE) && + (SDP_DISC_ATTR_LEN(p_sattr->attr_len_type) == 2) && + ((p_sattr->attr_value.v.u16 == UUID_SERVCLASS_HDP_SINK) || + (p_sattr->attr_value.v.u16 == UUID_SERVCLASS_HDP_SOURCE))) { + return (p_rec); + } } + break; + } - p_rec = p_rec->p_next_rec; + p_attr = p_attr->p_next_attr; } + + p_rec = p_rec->p_next_rec; + } #endif - /* If here, no matching UUID found */ +/* If here, no matching UUID found */ #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_find_sink_or_src_srv_class_in_db failed"); + APPL_TRACE_DEBUG("bta_hl_find_sink_or_src_srv_class_in_db failed"); #endif - return(NULL); + return (NULL); } #endif /* HL_INCLUDED */ diff --git a/system/bta/hl/bta_hl_utils.cc b/system/bta/hl/bta_hl_utils.cc index 4bab91034ee..061e64ed003 100644 --- a/system/bta/hl/bta_hl_utils.cc +++ b/system/bta/hl/bta_hl_utils.cc @@ -29,15 +29,13 @@ #include "bt_target.h" #if (HL_INCLUDED == TRUE) - #include "bt_common.h" -#include "utl.h" -#include "bta_hl_int.h" #include "bta_hl_co.h" -#include "mca_defs.h" +#include "bta_hl_int.h" #include "mca_api.h" +#include "mca_defs.h" #include "osi/include/osi.h" - +#include "utl.h" /******************************************************************************* * @@ -48,43 +46,37 @@ * Returns bool - true - control PSM setting is successful ******************************************************************************/ bool bta_hl_set_ctrl_psm_for_dch(uint8_t app_idx, uint8_t mcl_idx, - UNUSED_ATTR uint8_t mdl_idx, uint16_t ctrl_psm) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bool success = true, update_ctrl_psm = false; - - if (p_mcb->sdp.num_recs) - { - if (p_mcb->ctrl_psm != ctrl_psm) - { - /* can not use a different ctrl PSM than the current one*/ - success = false; - } - } - else - { - /* No SDP info control i.e. channel was opened by the peer */ - update_ctrl_psm = true; - } + UNUSED_ATTR uint8_t mdl_idx, + uint16_t ctrl_psm) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bool success = true, update_ctrl_psm = false; - if (success && update_ctrl_psm) - { - p_mcb->ctrl_psm = ctrl_psm; + if (p_mcb->sdp.num_recs) { + if (p_mcb->ctrl_psm != ctrl_psm) { + /* can not use a different ctrl PSM than the current one*/ + success = false; } + } else { + /* No SDP info control i.e. channel was opened by the peer */ + update_ctrl_psm = true; + } + if (success && update_ctrl_psm) { + p_mcb->ctrl_psm = ctrl_psm; + } #if (BTA_HL_DEBUG == TRUE) - if (!success) - { - APPL_TRACE_DEBUG("bta_hl_set_ctrl_psm_for_dch num_recs=%d success=%d update_ctrl_psm=%d ctrl_psm=0x%x ", - p_mcb->sdp.num_recs, success, update_ctrl_psm, ctrl_psm ); - } + if (!success) { + APPL_TRACE_DEBUG( + "bta_hl_set_ctrl_psm_for_dch num_recs=%d success=%d update_ctrl_psm=%d " + "ctrl_psm=0x%x ", + p_mcb->sdp.num_recs, success, update_ctrl_psm, ctrl_psm); + } #endif - return success; + return success; } - /******************************************************************************* * * Function bta_hl_find_sdp_idx_using_ctrl_psm @@ -94,41 +86,34 @@ bool bta_hl_set_ctrl_psm_for_dch(uint8_t app_idx, uint8_t mcl_idx, * Returns true if found * ******************************************************************************/ -bool bta_hl_find_sdp_idx_using_ctrl_psm(tBTA_HL_SDP *p_sdp, - uint16_t ctrl_psm, - uint8_t *p_sdp_idx) -{ - bool found=false; - tBTA_HL_SDP_REC *p_rec; - uint8_t i; - - if (ctrl_psm != 0) - { - for (i=0; inum_recs; i++) - { - p_rec = &p_sdp->sdp_rec[i]; - if (p_rec->ctrl_psm == ctrl_psm) - { - *p_sdp_idx = i; - found = true; - break; - } - } - } - else - { - *p_sdp_idx = 0; +bool bta_hl_find_sdp_idx_using_ctrl_psm(tBTA_HL_SDP* p_sdp, uint16_t ctrl_psm, + uint8_t* p_sdp_idx) { + bool found = false; + tBTA_HL_SDP_REC* p_rec; + uint8_t i; + + if (ctrl_psm != 0) { + for (i = 0; i < p_sdp->num_recs; i++) { + p_rec = &p_sdp->sdp_rec[i]; + if (p_rec->ctrl_psm == ctrl_psm) { + *p_sdp_idx = i; found = true; + break; + } } + } else { + *p_sdp_idx = 0; + found = true; + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_sdp_idx_using_ctrl_psm found=%d sdp_idx=%d ctrl_psm=0x%x ", - found, *p_sdp_idx, ctrl_psm ); - } + if (!found) { + APPL_TRACE_DEBUG( + "bta_hl_find_sdp_idx_using_ctrl_psm found=%d sdp_idx=%d ctrl_psm=0x%x ", + found, *p_sdp_idx, ctrl_psm); + } #endif - return found; + return found; } /******************************************************************************* @@ -141,11 +126,9 @@ bool bta_hl_find_sdp_idx_using_ctrl_psm(tBTA_HL_SDP *p_sdp, * ******************************************************************************/ -uint16_t bta_hl_set_user_tx_buf_size(uint16_t max_tx_size) -{ - if (max_tx_size > BT_DEFAULT_BUFFER_SIZE) - return BTA_HL_LRG_DATA_BUF_SIZE; - return L2CAP_INVALID_ERM_BUF_SIZE; +uint16_t bta_hl_set_user_tx_buf_size(uint16_t max_tx_size) { + if (max_tx_size > BT_DEFAULT_BUFFER_SIZE) return BTA_HL_LRG_DATA_BUF_SIZE; + return L2CAP_INVALID_ERM_BUF_SIZE; } /******************************************************************************* @@ -158,15 +141,11 @@ uint16_t bta_hl_set_user_tx_buf_size(uint16_t max_tx_size) * ******************************************************************************/ -uint16_t bta_hl_set_user_rx_buf_size(uint16_t mtu) -{ - if (mtu > BT_DEFAULT_BUFFER_SIZE) - return BTA_HL_LRG_DATA_BUF_SIZE; - return L2CAP_INVALID_ERM_BUF_SIZE; +uint16_t bta_hl_set_user_rx_buf_size(uint16_t mtu) { + if (mtu > BT_DEFAULT_BUFFER_SIZE) return BTA_HL_LRG_DATA_BUF_SIZE; + return L2CAP_INVALID_ERM_BUF_SIZE; } - - /******************************************************************************* * * Function bta_hl_set_tx_win_size @@ -176,32 +155,25 @@ uint16_t bta_hl_set_user_rx_buf_size(uint16_t mtu) * Returns uint8_t tx_win_size * ******************************************************************************/ -uint8_t bta_hl_set_tx_win_size(uint16_t mtu, uint16_t mps) -{ - uint8_t tx_win_size; +uint8_t bta_hl_set_tx_win_size(uint16_t mtu, uint16_t mps) { + uint8_t tx_win_size; - if (mtu <= mps) - { - tx_win_size =1; - } - else - { - if (mps > 0) - { - tx_win_size = (mtu/mps)+1; - } - else - { - APPL_TRACE_ERROR("The MPS is zero"); - tx_win_size = 10; - } + if (mtu <= mps) { + tx_win_size = 1; + } else { + if (mps > 0) { + tx_win_size = (mtu / mps) + 1; + } else { + APPL_TRACE_ERROR("The MPS is zero"); + tx_win_size = 10; } + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_set_tx_win_size win_size=%d mtu=%d mps=%d", - tx_win_size, mtu, mps); + APPL_TRACE_DEBUG("bta_hl_set_tx_win_size win_size=%d mtu=%d mps=%d", + tx_win_size, mtu, mps); #endif - return tx_win_size; + return tx_win_size; } /******************************************************************************* @@ -213,25 +185,19 @@ uint8_t bta_hl_set_tx_win_size(uint16_t mtu, uint16_t mps) * Returns uint16_t MPS * ******************************************************************************/ -uint16_t bta_hl_set_mps(uint16_t mtu) -{ - uint16_t mps; - if (mtu > BTA_HL_L2C_MPS) - { - mps = BTA_HL_L2C_MPS; - } - else - { - mps = mtu; - } +uint16_t bta_hl_set_mps(uint16_t mtu) { + uint16_t mps; + if (mtu > BTA_HL_L2C_MPS) { + mps = BTA_HL_L2C_MPS; + } else { + mps = mtu; + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_set_mps mps=%d mtu=%d", - mps, mtu); + APPL_TRACE_DEBUG("bta_hl_set_mps mps=%d mtu=%d", mps, mtu); #endif - return mps; + return mps; } - /******************************************************************************* * * Function bta_hl_clean_mdl_cb @@ -241,22 +207,20 @@ uint16_t bta_hl_set_mps(uint16_t mtu) * Returns void * ******************************************************************************/ -void bta_hl_clean_mdl_cb(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx) -{ - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); +void bta_hl_clean_mdl_cb(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx) { + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_clean_mdl_cb app_idx=%d mcl_idx=%d mdl_idx=%d", - app_idx, mcl_idx, mdl_idx); + APPL_TRACE_DEBUG("bta_hl_clean_mdl_cb app_idx=%d mcl_idx=%d mdl_idx=%d", + app_idx, mcl_idx, mdl_idx); #endif - osi_free_and_reset((void **)&p_dcb->p_tx_pkt); - osi_free_and_reset((void **)&p_dcb->p_rx_pkt); - osi_free_and_reset((void **)&p_dcb->p_echo_tx_pkt); - osi_free_and_reset((void **)&p_dcb->p_echo_rx_pkt); + osi_free_and_reset((void**)&p_dcb->p_tx_pkt); + osi_free_and_reset((void**)&p_dcb->p_rx_pkt); + osi_free_and_reset((void**)&p_dcb->p_echo_tx_pkt); + osi_free_and_reset((void**)&p_dcb->p_echo_rx_pkt); - memset((void *)p_dcb, 0 , sizeof(tBTA_HL_MDL_CB)); + memset((void*)p_dcb, 0, sizeof(tBTA_HL_MDL_CB)); } - /******************************************************************************* * * Function bta_hl_get_buf @@ -266,58 +230,52 @@ void bta_hl_clean_mdl_cb(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx) * Returns BT_HDR *. * ******************************************************************************/ -BT_HDR * bta_hl_get_buf(uint16_t data_size, bool fcs_use) -{ - size_t size = data_size + L2CAP_MIN_OFFSET + BT_HDR_SIZE + L2CAP_FCS_LEN - + L2CAP_EXT_CONTROL_OVERHEAD; +BT_HDR* bta_hl_get_buf(uint16_t data_size, bool fcs_use) { + size_t size = data_size + L2CAP_MIN_OFFSET + BT_HDR_SIZE + L2CAP_FCS_LEN + + L2CAP_EXT_CONTROL_OVERHEAD; - if (fcs_use) - size += L2CAP_FCS_LEN; + if (fcs_use) size += L2CAP_FCS_LEN; - BT_HDR *p_new = (BT_HDR *)osi_malloc(size); - p_new->len = data_size; - p_new->offset = L2CAP_MIN_OFFSET; + BT_HDR* p_new = (BT_HDR*)osi_malloc(size); + p_new->len = data_size; + p_new->offset = L2CAP_MIN_OFFSET; - return p_new; + return p_new; } /******************************************************************************* * * Function bta_hl_find_service_in_db * - * Description This function check the specified service class(es) can be find in + * Description This function check the specified service class(es) can be find + *in * the received SDP database * * Returns bool true - found * false - not found * ******************************************************************************/ -bool bta_hl_find_service_in_db( uint8_t app_idx, uint8_t mcl_idx, - uint16_t service_uuid, - tSDP_DISC_REC **pp_rec ) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bool found = true; - - switch (service_uuid) - { - case UUID_SERVCLASS_HDP_SINK: - case UUID_SERVCLASS_HDP_SOURCE: - if ((*pp_rec = SDP_FindServiceInDb(p_mcb->p_db, service_uuid, - *pp_rec)) == NULL) - { - found = false; - } - break; - default: - if ((*pp_rec = bta_hl_find_sink_or_src_srv_class_in_db(p_mcb->p_db, - *pp_rec)) == NULL) - { - found = false; - } - break; - } - return found; +bool bta_hl_find_service_in_db(uint8_t app_idx, uint8_t mcl_idx, + uint16_t service_uuid, tSDP_DISC_REC** pp_rec) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bool found = true; + + switch (service_uuid) { + case UUID_SERVCLASS_HDP_SINK: + case UUID_SERVCLASS_HDP_SOURCE: + if ((*pp_rec = SDP_FindServiceInDb(p_mcb->p_db, service_uuid, *pp_rec)) == + NULL) { + found = false; + } + break; + default: + if ((*pp_rec = bta_hl_find_sink_or_src_srv_class_in_db( + p_mcb->p_db, *pp_rec)) == NULL) { + found = false; + } + break; + } + return found; } /******************************************************************************* @@ -325,46 +283,40 @@ bool bta_hl_find_service_in_db( uint8_t app_idx, uint8_t mcl_idx, * Function bta_hl_get_service_uuids * * - * Description This function finds the service class(es) for both CCH and DCH oeprations + * Description This function finds the service class(es) for both CCH and DCH + *oeprations * * Returns uint16_t - service_id * if service_uuid = 0xFFFF then it means service uuid * can be either Sink or Source * ******************************************************************************/ -uint16_t bta_hl_get_service_uuids(uint8_t sdp_oper, uint8_t app_idx, uint8_t mcl_idx, - uint8_t mdl_idx ) -{ - tBTA_HL_MDL_CB *p_dcb; - uint16_t service_uuid = 0xFFFF; /* both Sink and Source */ - - switch (sdp_oper) - { - - case BTA_HL_SDP_OP_DCH_OPEN_INIT: - case BTA_HL_SDP_OP_DCH_RECONNECT_INIT: - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) - { - if (p_dcb->peer_mdep_role == BTA_HL_MDEP_ROLE_SINK) - { - service_uuid = UUID_SERVCLASS_HDP_SINK; - } - else - { - service_uuid = UUID_SERVCLASS_HDP_SOURCE; - } - } - break; - case BTA_HL_SDP_OP_CCH_INIT: - default: - /* use default that is both Sink and Source */ - break; - } +uint16_t bta_hl_get_service_uuids(uint8_t sdp_oper, uint8_t app_idx, + uint8_t mcl_idx, uint8_t mdl_idx) { + tBTA_HL_MDL_CB* p_dcb; + uint16_t service_uuid = 0xFFFF; /* both Sink and Source */ + + switch (sdp_oper) { + case BTA_HL_SDP_OP_DCH_OPEN_INIT: + case BTA_HL_SDP_OP_DCH_RECONNECT_INIT: + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + if (p_dcb->local_mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) { + if (p_dcb->peer_mdep_role == BTA_HL_MDEP_ROLE_SINK) { + service_uuid = UUID_SERVCLASS_HDP_SINK; + } else { + service_uuid = UUID_SERVCLASS_HDP_SOURCE; + } + } + break; + case BTA_HL_SDP_OP_CCH_INIT: + default: + /* use default that is both Sink and Source */ + break; + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_get_service_uuids service_uuid=0x%x",service_uuid ); + APPL_TRACE_DEBUG("bta_hl_get_service_uuids service_uuid=0x%x", service_uuid); #endif - return service_uuid; + return service_uuid; } /******************************************************************************* @@ -378,40 +330,35 @@ uint16_t bta_hl_get_service_uuids(uint8_t sdp_oper, uint8_t app_idx, uint8_t mcl * false not found * ******************************************************************************/ -bool bta_hl_find_echo_cfg_rsp(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdep_idx, uint8_t cfg, - uint8_t *p_cfg_rsp) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MDEP *p_mdep= &p_acb->sup_feature.mdep[mdep_idx]; - bool status =true; - - if (p_mdep->mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) - { - if ((cfg == BTA_HL_DCH_CFG_RELIABLE) || (cfg == BTA_HL_DCH_CFG_STREAMING)) - { - *p_cfg_rsp = cfg; - } - else if (cfg == BTA_HL_DCH_CFG_NO_PREF ) - { - *p_cfg_rsp = BTA_HL_DEFAULT_ECHO_TEST_SRC_DCH_CFG; - } - else - { - status = false; - APPL_TRACE_ERROR("Inavlid echo cfg value"); - } - return status; +bool bta_hl_find_echo_cfg_rsp(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdep_idx, uint8_t cfg, + uint8_t* p_cfg_rsp) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MDEP* p_mdep = &p_acb->sup_feature.mdep[mdep_idx]; + bool status = true; + + if (p_mdep->mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { + if ((cfg == BTA_HL_DCH_CFG_RELIABLE) || (cfg == BTA_HL_DCH_CFG_STREAMING)) { + *p_cfg_rsp = cfg; + } else if (cfg == BTA_HL_DCH_CFG_NO_PREF) { + *p_cfg_rsp = BTA_HL_DEFAULT_ECHO_TEST_SRC_DCH_CFG; + } else { + status = false; + APPL_TRACE_ERROR("Inavlid echo cfg value"); } + return status; + } #if (BTA_HL_DEBUG == TRUE) - if (!status) - { - APPL_TRACE_DEBUG("bta_hl_find_echo_cfg_rsp status=failed app_idx=%d mcl_idx=%d mdep_idx=%d cfg=%d", - app_idx, mcl_idx, mdep_idx, cfg); - } + if (!status) { + APPL_TRACE_DEBUG( + "bta_hl_find_echo_cfg_rsp status=failed app_idx=%d mcl_idx=%d " + "mdep_idx=%d cfg=%d", + app_idx, mcl_idx, mdep_idx, cfg); + } #endif - return status; + return status; } /******************************************************************************* @@ -425,46 +372,41 @@ bool bta_hl_find_echo_cfg_rsp(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdep_idx * ******************************************************************************/ bool bta_hl_validate_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - uint8_t cfg) -{ - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - bool is_valid =false; - - - if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx) && - (cfg != BTA_HL_DCH_CFG_RELIABLE)) - { - APPL_TRACE_ERROR("the first DCH should be a reliable channel"); - return is_valid; - } - - switch (p_dcb->local_cfg) - { - case BTA_HL_DCH_CFG_NO_PREF: + uint8_t cfg) { + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + bool is_valid = false; - if ((cfg == BTA_HL_DCH_CFG_RELIABLE) || (cfg == BTA_HL_DCH_CFG_STREAMING)) - { - is_valid = true; - } - break; - case BTA_HL_DCH_CFG_RELIABLE: - case BTA_HL_DCH_CFG_STREAMING: - if (p_dcb->local_cfg == cfg ) - { - is_valid = true; - } - break; - default: - break; - } + if (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx) && + (cfg != BTA_HL_DCH_CFG_RELIABLE)) { + APPL_TRACE_ERROR("the first DCH should be a reliable channel"); + return is_valid; + } + + switch (p_dcb->local_cfg) { + case BTA_HL_DCH_CFG_NO_PREF: + + if ((cfg == BTA_HL_DCH_CFG_RELIABLE) || + (cfg == BTA_HL_DCH_CFG_STREAMING)) { + is_valid = true; + } + break; + case BTA_HL_DCH_CFG_RELIABLE: + case BTA_HL_DCH_CFG_STREAMING: + if (p_dcb->local_cfg == cfg) { + is_valid = true; + } + break; + default: + break; + } #if (BTA_HL_DEBUG == TRUE) - if (!is_valid) - { - APPL_TRACE_DEBUG("bta_hl_validate_dch_open_cfg is_valid=%d, cfg=%d", is_valid, cfg ); - } + if (!is_valid) { + APPL_TRACE_DEBUG("bta_hl_validate_dch_open_cfg is_valid=%d, cfg=%d", + is_valid, cfg); + } #endif - return is_valid; + return is_valid; } /******************************************************************************* @@ -477,102 +419,96 @@ bool bta_hl_validate_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, * false not found * ******************************************************************************/ -bool bta_hl_find_cch_cb_indexes(tBTA_HL_DATA *p_msg, - uint8_t *p_app_idx, - uint8_t *p_mcl_idx) -{ - bool found = false; - tBTA_HL_MCL_CB *p_mcb; - uint8_t app_idx = 0, mcl_idx = 0; - - switch (p_msg->hdr.event) - { - case BTA_HL_CCH_SDP_OK_EVT: - case BTA_HL_CCH_SDP_FAIL_EVT: - app_idx = p_msg->cch_sdp.app_idx; - mcl_idx = p_msg->cch_sdp.mcl_idx; - found = true; - break; - - case BTA_HL_MCA_CONNECT_IND_EVT: - - if (bta_hl_find_app_idx_using_handle(p_msg->mca_evt.app_handle, &app_idx)) - { - if (bta_hl_find_mcl_idx(app_idx, p_msg->mca_evt.mca_data.connect_ind.bd_addr, &mcl_idx)) - { - /* local initiated */ - found = true; - } - else if (!bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx)&& - bta_hl_find_avail_mcl_idx(app_idx, &mcl_idx)) - { - /* remote initiated */ - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - p_mcb->in_use = true; - p_mcb->cch_oper = BTA_HL_CCH_OP_REMOTE_OPEN; - found = true; - } - } - break; - - case BTA_HL_MCA_DISCONNECT_IND_EVT: - - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx)) - { - found = true; - } - else if (bta_hl_find_app_idx_using_handle(p_msg->mca_evt.app_handle, &app_idx) && - bta_hl_find_mcl_idx(app_idx, p_msg->mca_evt.mca_data.disconnect_ind.bd_addr, &mcl_idx)) - { - found = true; - } - - if (found) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - if ((p_mcb->cch_oper != BTA_HL_CCH_OP_LOCAL_CLOSE) && (p_mcb->cch_oper != BTA_HL_CCH_OP_LOCAL_OPEN) ) - { - p_mcb->cch_oper = BTA_HL_CCH_OP_REMOTE_CLOSE; - } - } - break; +bool bta_hl_find_cch_cb_indexes(tBTA_HL_DATA* p_msg, uint8_t* p_app_idx, + uint8_t* p_mcl_idx) { + bool found = false; + tBTA_HL_MCL_CB* p_mcb; + uint8_t app_idx = 0, mcl_idx = 0; + + switch (p_msg->hdr.event) { + case BTA_HL_CCH_SDP_OK_EVT: + case BTA_HL_CCH_SDP_FAIL_EVT: + app_idx = p_msg->cch_sdp.app_idx; + mcl_idx = p_msg->cch_sdp.mcl_idx; + found = true; + break; + + case BTA_HL_MCA_CONNECT_IND_EVT: + + if (bta_hl_find_app_idx_using_handle(p_msg->mca_evt.app_handle, + &app_idx)) { + if (bta_hl_find_mcl_idx(app_idx, + p_msg->mca_evt.mca_data.connect_ind.bd_addr, + &mcl_idx)) { + /* local initiated */ + found = true; + } else if (!bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, + &app_idx, &mcl_idx) && + bta_hl_find_avail_mcl_idx(app_idx, &mcl_idx)) { + /* remote initiated */ + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + p_mcb->in_use = true; + p_mcb->cch_oper = BTA_HL_CCH_OP_REMOTE_OPEN; + found = true; + } + } + break; + + case BTA_HL_MCA_DISCONNECT_IND_EVT: + + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx)) { + found = true; + } else if (bta_hl_find_app_idx_using_handle(p_msg->mca_evt.app_handle, + &app_idx) && + bta_hl_find_mcl_idx( + app_idx, p_msg->mca_evt.mca_data.disconnect_ind.bd_addr, + &mcl_idx)) { + found = true; + } - case BTA_HL_MCA_RSP_TOUT_IND_EVT: + if (found) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + if ((p_mcb->cch_oper != BTA_HL_CCH_OP_LOCAL_CLOSE) && + (p_mcb->cch_oper != BTA_HL_CCH_OP_LOCAL_OPEN)) { + p_mcb->cch_oper = BTA_HL_CCH_OP_REMOTE_CLOSE; + } + } + break; - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx)) - { - found = true; - } + case BTA_HL_MCA_RSP_TOUT_IND_EVT: - if (found) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - if ((p_mcb->cch_oper != BTA_HL_CCH_OP_REMOTE_CLOSE) && (p_mcb->cch_oper != BTA_HL_CCH_OP_LOCAL_OPEN)) - { - p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_CLOSE; - } - } - break; - default: - break; - } + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx)) { + found = true; + } + if (found) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + if ((p_mcb->cch_oper != BTA_HL_CCH_OP_REMOTE_CLOSE) && + (p_mcb->cch_oper != BTA_HL_CCH_OP_LOCAL_OPEN)) { + p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_CLOSE; + } + } + break; + default: + break; + } - if (found) - { - *p_app_idx = app_idx; - *p_mcl_idx = mcl_idx; - } + if (found) { + *p_app_idx = app_idx; + *p_mcl_idx = mcl_idx; + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_cch_cb_indexes event=%s found=%d app_idx=%d mcl_idx=%d", - bta_hl_evt_code(p_msg->hdr.event), found, app_idx, mcl_idx); - } + if (!found) { + APPL_TRACE_DEBUG( + "bta_hl_find_cch_cb_indexes event=%s found=%d app_idx=%d mcl_idx=%d", + bta_hl_evt_code(p_msg->hdr.event), found, app_idx, mcl_idx); + } #endif - return found; + return found; } /******************************************************************************* @@ -585,168 +521,175 @@ bool bta_hl_find_cch_cb_indexes(tBTA_HL_DATA *p_msg, * false not found * ******************************************************************************/ -bool bta_hl_find_dch_cb_indexes(tBTA_HL_DATA *p_msg, - uint8_t *p_app_idx, - uint8_t *p_mcl_idx, - uint8_t *p_mdl_idx) -{ - bool found = false; - tBTA_HL_MCL_CB *p_mcb; - uint8_t app_idx = 0, mcl_idx = 0, mdl_idx = 0; - - switch (p_msg->hdr.event) - { - case BTA_HL_MCA_CREATE_CFM_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx) && - bta_hl_find_mdl_idx( app_idx, mcl_idx, p_msg->mca_evt.mca_data.create_cfm.mdl_id, &mdl_idx)) - { - found = true; - } - break; - - case BTA_HL_MCA_CREATE_IND_EVT: - case BTA_HL_MCA_RECONNECT_IND_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx) && - bta_hl_find_avail_mdl_idx( app_idx, mcl_idx, &mdl_idx)) - { - found = true; - } - break; - - case BTA_HL_MCA_OPEN_CFM_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx) && - bta_hl_find_mdl_idx( app_idx, mcl_idx, p_msg->mca_evt.mca_data.open_cfm.mdl_id, &mdl_idx)) - { - found = true; - } - break; +bool bta_hl_find_dch_cb_indexes(tBTA_HL_DATA* p_msg, uint8_t* p_app_idx, + uint8_t* p_mcl_idx, uint8_t* p_mdl_idx) { + bool found = false; + tBTA_HL_MCL_CB* p_mcb; + uint8_t app_idx = 0, mcl_idx = 0, mdl_idx = 0; - case BTA_HL_MCA_OPEN_IND_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx) && - bta_hl_find_mdl_idx( app_idx, mcl_idx, p_msg->mca_evt.mca_data.open_ind.mdl_id, &mdl_idx)) - { - found = true; - } - break; - - case BTA_HL_MCA_CLOSE_CFM_EVT: - - if (bta_hl_find_mdl_idx_using_handle((tBTA_HL_MDL_HANDLE)p_msg->mca_evt.mca_data.close_cfm.mdl, - &app_idx, &mcl_idx, &mdl_idx)) - { - found = true; - } - break; - case BTA_HL_MCA_CLOSE_IND_EVT: - - if (bta_hl_find_mdl_idx_using_handle((tBTA_HL_MDL_HANDLE)p_msg->mca_evt.mca_data.close_ind.mdl, - &app_idx, &mcl_idx, &mdl_idx)) - { - found = true; - } - break; - case BTA_HL_API_SEND_DATA_EVT: - - if (bta_hl_find_mdl_idx_using_handle(p_msg->api_send_data.mdl_handle, - &app_idx, &mcl_idx, &mdl_idx )) - { - found = true; - } - - break; - - case BTA_HL_MCA_CONG_CHG_EVT: - - if (bta_hl_find_mdl_idx_using_handle((tBTA_HL_MDL_HANDLE)p_msg->mca_evt.mca_data.cong_chg.mdl, - &app_idx, &mcl_idx, &mdl_idx )) - { - found = true; - } + switch (p_msg->hdr.event) { + case BTA_HL_MCA_CREATE_CFM_EVT: + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx) && + bta_hl_find_mdl_idx(app_idx, mcl_idx, + p_msg->mca_evt.mca_data.create_cfm.mdl_id, + &mdl_idx)) { + found = true; + } + break; + + case BTA_HL_MCA_CREATE_IND_EVT: + case BTA_HL_MCA_RECONNECT_IND_EVT: + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx) && + bta_hl_find_avail_mdl_idx(app_idx, mcl_idx, &mdl_idx)) { + found = true; + } + break; + + case BTA_HL_MCA_OPEN_CFM_EVT: + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx) && + bta_hl_find_mdl_idx(app_idx, mcl_idx, + p_msg->mca_evt.mca_data.open_cfm.mdl_id, + &mdl_idx)) { + found = true; + } + break; + + case BTA_HL_MCA_OPEN_IND_EVT: + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx) && + bta_hl_find_mdl_idx(app_idx, mcl_idx, + p_msg->mca_evt.mca_data.open_ind.mdl_id, + &mdl_idx)) { + found = true; + } + break; - break; + case BTA_HL_MCA_CLOSE_CFM_EVT: - case BTA_HL_MCA_RCV_DATA_EVT: - app_idx = p_msg->mca_rcv_data_evt.app_idx; - mcl_idx = p_msg->mca_rcv_data_evt.mcl_idx; - mdl_idx = p_msg->mca_rcv_data_evt.mdl_idx; - found = true; - break; - case BTA_HL_DCH_RECONNECT_EVT: - case BTA_HL_DCH_OPEN_EVT: - case BTA_HL_DCH_ECHO_TEST_EVT: - case BTA_HL_DCH_SDP_FAIL_EVT: - app_idx = p_msg->dch_sdp.app_idx; - mcl_idx = p_msg->dch_sdp.mcl_idx; - mdl_idx = p_msg->dch_sdp.mdl_idx; - found = true; - break; - case BTA_HL_MCA_RECONNECT_CFM_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx) && - bta_hl_find_mdl_idx( app_idx, mcl_idx, p_msg->mca_evt.mca_data.reconnect_cfm.mdl_id, &mdl_idx)) - { - found = true; - } - break; + if (bta_hl_find_mdl_idx_using_handle( + (tBTA_HL_MDL_HANDLE)p_msg->mca_evt.mca_data.close_cfm.mdl, + &app_idx, &mcl_idx, &mdl_idx)) { + found = true; + } + break; + case BTA_HL_MCA_CLOSE_IND_EVT: + if (bta_hl_find_mdl_idx_using_handle( + (tBTA_HL_MDL_HANDLE)p_msg->mca_evt.mca_data.close_ind.mdl, + &app_idx, &mcl_idx, &mdl_idx)) { + found = true; + } + break; + case BTA_HL_API_SEND_DATA_EVT: - case BTA_HL_API_DCH_CREATE_RSP_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->api_dch_create_rsp.mcl_handle, &app_idx, &mcl_idx)&& - bta_hl_find_mdl_idx( app_idx, mcl_idx,p_msg->api_dch_create_rsp.mdl_id, &mdl_idx)) - { - found = true; - } - break; - case BTA_HL_MCA_ABORT_IND_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx) && - bta_hl_find_mdl_idx( app_idx, mcl_idx,p_msg->mca_evt.mca_data.abort_ind.mdl_id, &mdl_idx)) - { - found = true; - } - break; - case BTA_HL_MCA_ABORT_CFM_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, &mcl_idx) && - bta_hl_find_mdl_idx( app_idx, mcl_idx, p_msg->mca_evt.mca_data.abort_cfm.mdl_id, &mdl_idx)) - { - found = true; - } - break; - case BTA_HL_CI_GET_TX_DATA_EVT: - case BTA_HL_CI_PUT_RX_DATA_EVT: - if (bta_hl_find_mdl_idx_using_handle(p_msg->ci_get_put_data.mdl_handle, &app_idx, &mcl_idx, &mdl_idx)) - { - found = true; - } - break; - case BTA_HL_CI_GET_ECHO_DATA_EVT: - case BTA_HL_CI_PUT_ECHO_DATA_EVT: - if (bta_hl_find_mcl_idx_using_handle(p_msg->ci_get_put_echo_data.mcl_handle, &app_idx, &mcl_idx)) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - mdl_idx = p_mcb->echo_mdl_idx; - found = true; - } - break; + if (bta_hl_find_mdl_idx_using_handle(p_msg->api_send_data.mdl_handle, + &app_idx, &mcl_idx, &mdl_idx)) { + found = true; + } - default: - break; + break; - } + case BTA_HL_MCA_CONG_CHG_EVT: - if (found) - { - *p_app_idx = app_idx; - *p_mcl_idx = mcl_idx; - *p_mdl_idx = mdl_idx; - } + if (bta_hl_find_mdl_idx_using_handle( + (tBTA_HL_MDL_HANDLE)p_msg->mca_evt.mca_data.cong_chg.mdl, + &app_idx, &mcl_idx, &mdl_idx)) { + found = true; + } + + break; + + case BTA_HL_MCA_RCV_DATA_EVT: + app_idx = p_msg->mca_rcv_data_evt.app_idx; + mcl_idx = p_msg->mca_rcv_data_evt.mcl_idx; + mdl_idx = p_msg->mca_rcv_data_evt.mdl_idx; + found = true; + break; + case BTA_HL_DCH_RECONNECT_EVT: + case BTA_HL_DCH_OPEN_EVT: + case BTA_HL_DCH_ECHO_TEST_EVT: + case BTA_HL_DCH_SDP_FAIL_EVT: + app_idx = p_msg->dch_sdp.app_idx; + mcl_idx = p_msg->dch_sdp.mcl_idx; + mdl_idx = p_msg->dch_sdp.mdl_idx; + found = true; + break; + case BTA_HL_MCA_RECONNECT_CFM_EVT: + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx) && + bta_hl_find_mdl_idx(app_idx, mcl_idx, + p_msg->mca_evt.mca_data.reconnect_cfm.mdl_id, + &mdl_idx)) { + found = true; + } + break; + + case BTA_HL_API_DCH_CREATE_RSP_EVT: + if (bta_hl_find_mcl_idx_using_handle(p_msg->api_dch_create_rsp.mcl_handle, + &app_idx, &mcl_idx) && + bta_hl_find_mdl_idx(app_idx, mcl_idx, + p_msg->api_dch_create_rsp.mdl_id, &mdl_idx)) { + found = true; + } + break; + case BTA_HL_MCA_ABORT_IND_EVT: + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx) && + bta_hl_find_mdl_idx(app_idx, mcl_idx, + p_msg->mca_evt.mca_data.abort_ind.mdl_id, + &mdl_idx)) { + found = true; + } + break; + case BTA_HL_MCA_ABORT_CFM_EVT: + if (bta_hl_find_mcl_idx_using_handle(p_msg->mca_evt.mcl_handle, &app_idx, + &mcl_idx) && + bta_hl_find_mdl_idx(app_idx, mcl_idx, + p_msg->mca_evt.mca_data.abort_cfm.mdl_id, + &mdl_idx)) { + found = true; + } + break; + case BTA_HL_CI_GET_TX_DATA_EVT: + case BTA_HL_CI_PUT_RX_DATA_EVT: + if (bta_hl_find_mdl_idx_using_handle(p_msg->ci_get_put_data.mdl_handle, + &app_idx, &mcl_idx, &mdl_idx)) { + found = true; + } + break; + case BTA_HL_CI_GET_ECHO_DATA_EVT: + case BTA_HL_CI_PUT_ECHO_DATA_EVT: + if (bta_hl_find_mcl_idx_using_handle( + p_msg->ci_get_put_echo_data.mcl_handle, &app_idx, &mcl_idx)) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + mdl_idx = p_mcb->echo_mdl_idx; + found = true; + } + break; + + default: + break; + } + + if (found) { + *p_app_idx = app_idx; + *p_mcl_idx = mcl_idx; + *p_mdl_idx = mdl_idx; + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_dch_cb_indexes event=%s found=%d app_idx=%d mcl_idx=%d mdl_idx=%d", - bta_hl_evt_code(p_msg->hdr.event), found, *p_app_idx, *p_mcl_idx, *p_mdl_idx ); - } + if (!found) { + APPL_TRACE_DEBUG( + "bta_hl_find_dch_cb_indexes event=%s found=%d app_idx=%d mcl_idx=%d " + "mdl_idx=%d", + bta_hl_evt_code(p_msg->hdr.event), found, *p_app_idx, *p_mcl_idx, + *p_mdl_idx); + } #endif - return found; + return found; } /******************************************************************************* @@ -758,54 +701,44 @@ bool bta_hl_find_dch_cb_indexes(tBTA_HL_DATA *p_msg, * Returns uint16_t - MDL ID * ******************************************************************************/ -uint16_t bta_hl_allocate_mdl_id(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx ) -{ - uint16_t mdl_id=0; - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bool duplicate_id; - uint8_t i, mdl_cfg_idx; - - do - { - duplicate_id = false; - mdl_id = ((mdl_id+1) & 0xFEFF); - /* check mdl_ids that are used for the current conenctions */ - for (i=0; i< BTA_HL_NUM_MDLS_PER_MCL; i++) - { - if (p_mcb->mdl[i].in_use && - (i != mdl_idx) && - (p_mcb->mdl[i].mdl_id == mdl_id) ) - { - duplicate_id = true; - break; - } - } - - if (duplicate_id) - { - /* start from the beginning to get another MDL value*/ - continue; - } - else - { - /* check mdl_ids that are stored in the persistent memory */ - if (bta_hl_find_mdl_cfg_idx(app_idx,mcl_idx, mdl_id, &mdl_cfg_idx)) - { - duplicate_id = true; - } - else - { - /* found a new MDL value */ - break; - } - } - - }while (true); +uint16_t bta_hl_allocate_mdl_id(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx) { + uint16_t mdl_id = 0; + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bool duplicate_id; + uint8_t i, mdl_cfg_idx; + + do { + duplicate_id = false; + mdl_id = ((mdl_id + 1) & 0xFEFF); + /* check mdl_ids that are used for the current conenctions */ + for (i = 0; i < BTA_HL_NUM_MDLS_PER_MCL; i++) { + if (p_mcb->mdl[i].in_use && (i != mdl_idx) && + (p_mcb->mdl[i].mdl_id == mdl_id)) { + duplicate_id = true; + break; + } + } + + if (duplicate_id) { + /* start from the beginning to get another MDL value*/ + continue; + } else { + /* check mdl_ids that are stored in the persistent memory */ + if (bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, mdl_id, &mdl_cfg_idx)) { + duplicate_id = true; + } else { + /* found a new MDL value */ + break; + } + } + + } while (true); #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_allocate_mdl OK mdl_id=%d", mdl_id); + APPL_TRACE_DEBUG("bta_hl_allocate_mdl OK mdl_id=%d", mdl_id); #endif - return mdl_id; + return mdl_id; } /******************************************************************************* * @@ -817,33 +750,28 @@ uint16_t bta_hl_allocate_mdl_id(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_i * ******************************************************************************/ bool bta_hl_find_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, uint16_t mdl_id, - uint8_t *p_mdl_idx) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++) - { - if (p_mcb->mdl[i].in_use && - (mdl_id !=0) && - (p_mcb->mdl[i].mdl_id== mdl_id)) - { - found = true; - *p_mdl_idx = i; - break; - } + uint8_t* p_mdl_idx) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MDLS_PER_MCL; i++) { + if (p_mcb->mdl[i].in_use && (mdl_id != 0) && + (p_mcb->mdl[i].mdl_id == mdl_id)) { + found = true; + *p_mdl_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_mdl_idx found=%d mdl_id=%d mdl_idx=%d ", - found, mdl_id, i); - } + if (!found) { + APPL_TRACE_DEBUG("bta_hl_find_mdl_idx found=%d mdl_id=%d mdl_idx=%d ", + found, mdl_id, i); + } #endif - return found; + return found; } /******************************************************************************* @@ -856,32 +784,30 @@ bool bta_hl_find_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, uint16_t mdl_id, * ******************************************************************************/ bool bta_hl_find_an_active_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, - uint8_t *p_mdl_idx) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++) - { - if (p_mcb->mdl[i].in_use && - (p_mcb->mdl[i].dch_state == BTA_HL_DCH_OPEN_ST)) - { - found = true; - *p_mdl_idx = i; - break; - } + uint8_t* p_mdl_idx) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MDLS_PER_MCL; i++) { + if (p_mcb->mdl[i].in_use && + (p_mcb->mdl[i].dch_state == BTA_HL_DCH_OPEN_ST)) { + found = true; + *p_mdl_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (found) - { - APPL_TRACE_DEBUG("bta_hl_find_an_opened_mdl_idx found=%d app_idx=%d mcl_idx=%d mdl_idx=%d", - found, app_idx, mcl_idx, i); - } + if (found) { + APPL_TRACE_DEBUG( + "bta_hl_find_an_opened_mdl_idx found=%d app_idx=%d mcl_idx=%d " + "mdl_idx=%d", + found, app_idx, mcl_idx, i); + } #endif - return found; + return found; } /******************************************************************************* @@ -894,32 +820,30 @@ bool bta_hl_find_an_active_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, * ******************************************************************************/ bool bta_hl_find_dch_setup_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, - uint8_t *p_mdl_idx) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++) - { - if (p_mcb->mdl[i].in_use && - (p_mcb->mdl[i].dch_state == BTA_HL_DCH_OPENING_ST)) - { - found = true; - *p_mdl_idx = i; - break; - } + uint8_t* p_mdl_idx) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MDLS_PER_MCL; i++) { + if (p_mcb->mdl[i].in_use && + (p_mcb->mdl[i].dch_state == BTA_HL_DCH_OPENING_ST)) { + found = true; + *p_mdl_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (found) - { - APPL_TRACE_DEBUG("bta_hl_find_dch_setup_mdl_idx found=%d app_idx=%d mcl_idx=%d mdl_idx=%d", - found, app_idx, mcl_idx, i); - } + if (found) { + APPL_TRACE_DEBUG( + "bta_hl_find_dch_setup_mdl_idx found=%d app_idx=%d mcl_idx=%d " + "mdl_idx=%d", + found, app_idx, mcl_idx, i); + } #endif - return found; + return found; } /******************************************************************************* @@ -931,37 +855,31 @@ bool bta_hl_find_dch_setup_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, * Returns bool true-found * ******************************************************************************/ -bool bta_hl_find_an_in_use_mcl_idx(uint8_t app_idx, - uint8_t *p_mcl_idx) -{ - tBTA_HL_MCL_CB *p_mcb; - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_MCLS ; i ++) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, i); - if (p_mcb->in_use && - (p_mcb->cch_state != BTA_HL_CCH_IDLE_ST)) - { - found = true; - *p_mcl_idx = i; - break; - } +bool bta_hl_find_an_in_use_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx) { + tBTA_HL_MCL_CB* p_mcb; + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MCLS; i++) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, i); + if (p_mcb->in_use && (p_mcb->cch_state != BTA_HL_CCH_IDLE_ST)) { + found = true; + *p_mcl_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (found) - { - APPL_TRACE_DEBUG("bta_hl_find_an_in_use_mcl_idx found=%d app_idx=%d mcl_idx=%d ", - found, app_idx, i); - } + if (found) { + APPL_TRACE_DEBUG( + "bta_hl_find_an_in_use_mcl_idx found=%d app_idx=%d mcl_idx=%d ", found, + app_idx, i); + } #endif - return found; + return found; } - /******************************************************************************* * * Function bta_hl_find_an_in_use_app_idx @@ -971,32 +889,28 @@ bool bta_hl_find_an_in_use_mcl_idx(uint8_t app_idx, * Returns bool true-found * ******************************************************************************/ -bool bta_hl_find_an_in_use_app_idx(uint8_t *p_app_idx) -{ - tBTA_HL_APP_CB *p_acb ; - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_APPS ; i ++) - { - p_acb = BTA_HL_GET_APP_CB_PTR(i); - if (p_acb->in_use) - { - found = true; - *p_app_idx = i; - break; - } +bool bta_hl_find_an_in_use_app_idx(uint8_t* p_app_idx) { + tBTA_HL_APP_CB* p_acb; + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_APPS; i++) { + p_acb = BTA_HL_GET_APP_CB_PTR(i); + if (p_acb->in_use) { + found = true; + *p_app_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (found) - { - APPL_TRACE_DEBUG("bta_hl_find_an_in_use_app_idx found=%d app_idx=%d ", - found, i); - } + if (found) { + APPL_TRACE_DEBUG("bta_hl_find_an_in_use_app_idx found=%d app_idx=%d ", + found, i); + } #endif - return found; + return found; } /******************************************************************************* * @@ -1008,31 +922,26 @@ bool bta_hl_find_an_in_use_app_idx(uint8_t *p_app_idx) * Returns bool true-found * ******************************************************************************/ -bool bta_hl_find_app_idx(uint8_t app_id, uint8_t *p_app_idx) -{ - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_APPS ; i ++) - { - if (bta_hl_cb.acb[i].in_use && - (bta_hl_cb.acb[i].app_id == app_id)) - { - found = true; - *p_app_idx = i; - break; - } +bool bta_hl_find_app_idx(uint8_t app_id, uint8_t* p_app_idx) { + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_APPS; i++) { + if (bta_hl_cb.acb[i].in_use && (bta_hl_cb.acb[i].app_id == app_id)) { + found = true; + *p_app_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_find_app_idx found=%d app_id=%d idx=%d ", - found, app_id, i); + APPL_TRACE_DEBUG("bta_hl_find_app_idx found=%d app_id=%d idx=%d ", found, + app_id, i); #endif - return found; + return found; } - /******************************************************************************* * * Function bta_hl_find_app_idx_using_handle @@ -1044,34 +953,30 @@ bool bta_hl_find_app_idx(uint8_t app_id, uint8_t *p_app_idx) * ******************************************************************************/ bool bta_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle, - uint8_t *p_app_idx) -{ - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_APPS ; i ++) - { - if (bta_hl_cb.acb[i].in_use && - (bta_hl_cb.acb[i].app_handle == app_handle)) - { - found = true; - *p_app_idx = i; - break; - } + uint8_t* p_app_idx) { + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_APPS; i++) { + if (bta_hl_cb.acb[i].in_use && + (bta_hl_cb.acb[i].app_handle == app_handle)) { + found = true; + *p_app_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_app_idx_using_mca_handle status=%d handle=%d app_idx=%d ", - found, app_handle , i); - } + if (!found) { + APPL_TRACE_DEBUG( + "bta_hl_find_app_idx_using_mca_handle status=%d handle=%d app_idx=%d ", + found, app_handle, i); + } #endif - return found; + return found; } - /******************************************************************************* * * Function bta_hl_find_mcl_idx_using_handle @@ -1082,39 +987,34 @@ bool bta_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle, * Returns bool true-found * ******************************************************************************/ -bool bta_hl_find_mcl_idx_using_handle( tBTA_HL_MCL_HANDLE mcl_handle, - uint8_t *p_app_idx, uint8_t *p_mcl_idx) -{ - tBTA_HL_APP_CB *p_acb; - bool found=false; - uint8_t i = 0,j = 0; - - for (i=0; iin_use) - { - for (j=0; j < BTA_HL_NUM_MCLS ; j++) - { - if ( p_acb->mcb[j].mcl_handle == mcl_handle ) - { - found = true; - *p_app_idx = i; - *p_mcl_idx = j; - break; - } - } +bool bta_hl_find_mcl_idx_using_handle(tBTA_HL_MCL_HANDLE mcl_handle, + uint8_t* p_app_idx, uint8_t* p_mcl_idx) { + tBTA_HL_APP_CB* p_acb; + bool found = false; + uint8_t i = 0, j = 0; + + for (i = 0; i < BTA_HL_NUM_APPS; i++) { + p_acb = BTA_HL_GET_APP_CB_PTR(i); + if (p_acb->in_use) { + for (j = 0; j < BTA_HL_NUM_MCLS; j++) { + if (p_acb->mcb[j].mcl_handle == mcl_handle) { + found = true; + *p_app_idx = i; + *p_mcl_idx = j; + break; } + } } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_mcl_idx_using_handle found=%d app_idx=%d mcl_idx=%d", - found, i, j); - } + if (!found) { + APPL_TRACE_DEBUG( + "bta_hl_find_mcl_idx_using_handle found=%d app_idx=%d mcl_idx=%d", + found, i, j); + } #endif - return found; + return found; } /******************************************************************************* @@ -1127,34 +1027,29 @@ bool bta_hl_find_mcl_idx_using_handle( tBTA_HL_MCL_HANDLE mcl_handle, * Returns bool true-found * ******************************************************************************/ -bool bta_hl_find_mcl_idx(uint8_t app_idx, BD_ADDR p_bd_addr, uint8_t *p_mcl_idx) -{ - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_MCLS ; i ++) - { - if (bta_hl_cb.acb[app_idx].mcb[i].in_use && - (!memcmp (bta_hl_cb.acb[app_idx].mcb[i].bd_addr, p_bd_addr, BD_ADDR_LEN))) - { - found = true; - *p_mcl_idx = i; - break; - } +bool bta_hl_find_mcl_idx(uint8_t app_idx, BD_ADDR p_bd_addr, + uint8_t* p_mcl_idx) { + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MCLS; i++) { + if (bta_hl_cb.acb[app_idx].mcb[i].in_use && + (!memcmp(bta_hl_cb.acb[app_idx].mcb[i].bd_addr, p_bd_addr, + BD_ADDR_LEN))) { + found = true; + *p_mcl_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_mcl_idx found=%d idx=%d", - found, i); - } + if (!found) { + APPL_TRACE_DEBUG("bta_hl_find_mcl_idx found=%d idx=%d", found, i); + } #endif - return found; + return found; } - - /******************************************************************************* * * Function bta_hl_find_mdl_idx_using_handle @@ -1166,54 +1061,45 @@ bool bta_hl_find_mcl_idx(uint8_t app_idx, BD_ADDR p_bd_addr, uint8_t *p_mcl_idx) * ******************************************************************************/ bool bta_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle, - uint8_t *p_app_idx,uint8_t *p_mcl_idx, - uint8_t *p_mdl_idx) -{ - tBTA_HL_APP_CB *p_acb; - tBTA_HL_MCL_CB *p_mcb; - tBTA_HL_MDL_CB *p_dcb; - bool found=false; - uint8_t i,j,k; - - for (i=0; i < BTA_HL_NUM_APPS ; i ++) - { - p_acb = BTA_HL_GET_APP_CB_PTR(i); - if (p_acb->in_use) - { - for (j=0; j< BTA_HL_NUM_MCLS; j++) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(i,j); - if (p_mcb->in_use) - { - for (k=0; k< BTA_HL_NUM_MDLS_PER_MCL; k++) - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(i,j,k); - if (p_dcb->in_use) - { - if (p_dcb->mdl_handle == mdl_handle) - { - found = true; - *p_app_idx = i; - *p_mcl_idx =j; - *p_mdl_idx = k; - break; - } - } - } - } + uint8_t* p_app_idx, uint8_t* p_mcl_idx, + uint8_t* p_mdl_idx) { + tBTA_HL_APP_CB* p_acb; + tBTA_HL_MCL_CB* p_mcb; + tBTA_HL_MDL_CB* p_dcb; + bool found = false; + uint8_t i, j, k; + + for (i = 0; i < BTA_HL_NUM_APPS; i++) { + p_acb = BTA_HL_GET_APP_CB_PTR(i); + if (p_acb->in_use) { + for (j = 0; j < BTA_HL_NUM_MCLS; j++) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(i, j); + if (p_mcb->in_use) { + for (k = 0; k < BTA_HL_NUM_MDLS_PER_MCL; k++) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(i, j, k); + if (p_dcb->in_use) { + if (p_dcb->mdl_handle == mdl_handle) { + found = true; + *p_app_idx = i; + *p_mcl_idx = j; + *p_mdl_idx = k; + break; + } } + } } + } } - + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_mdl_idx_using_handle found=%d mdl_handle=%d ", - found, mdl_handle); - } + if (!found) { + APPL_TRACE_DEBUG( + "bta_hl_find_mdl_idx_using_handle found=%d mdl_handle=%d ", found, + mdl_handle); + } #endif - return found; + return found; } /******************************************************************************* * @@ -1226,25 +1112,23 @@ bool bta_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle, * false does not exist * ******************************************************************************/ -bool bta_hl_is_the_first_reliable_existed(uint8_t app_idx, uint8_t mcl_idx ) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bool is_existed =false; - uint8_t i ; - - for (i=0; i< BTA_HL_NUM_MDLS_PER_MCL; i++) - { - if (p_mcb->mdl[i].in_use && p_mcb->mdl[i].is_the_first_reliable) - { - is_existed = true; - break; - } +bool bta_hl_is_the_first_reliable_existed(uint8_t app_idx, uint8_t mcl_idx) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bool is_existed = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MDLS_PER_MCL; i++) { + if (p_mcb->mdl[i].in_use && p_mcb->mdl[i].is_the_first_reliable) { + is_existed = true; + break; } + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_is_the_first_reliable_existed is_existed=%d ",is_existed ); + APPL_TRACE_DEBUG("bta_hl_is_the_first_reliable_existed is_existed=%d ", + is_existed); #endif - return is_existed; + return is_existed; } /******************************************************************************* @@ -1258,55 +1142,45 @@ bool bta_hl_is_the_first_reliable_existed(uint8_t app_idx, uint8_t mcl_idx ) * false not found * ******************************************************************************/ -bool bta_hl_find_non_active_mdl_cfg(uint8_t app_idx, uint8_t start_mdl_cfg_idx, - uint8_t *p_mdl_cfg_idx) -{ - - tBTA_HL_MCL_CB *p_mcb; - tBTA_HL_MDL_CB *p_dcb; - tBTA_HL_MDL_CFG *p_mdl; - bool mdl_in_use; - bool found = false; - uint8_t i,j,k; - - for (i = start_mdl_cfg_idx; i< BTA_HL_NUM_MDL_CFGS; i++) - { - mdl_in_use = false; - p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); - for (j=0; j< BTA_HL_NUM_MCLS; j++) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, j); - if (p_mcb->in_use && - !memcmp(p_mdl->peer_bd_addr,p_mcb->bd_addr,BD_ADDR_LEN)) - { - - for (k=0; kin_use && p_mdl->mdl_id == p_dcb->mdl_id) - { - mdl_in_use = true; - break; - } - } - } - - if (mdl_in_use) - { - break; - } - } - - if (!mdl_in_use) - { - *p_mdl_cfg_idx = i; - found = true; +bool bta_hl_find_non_active_mdl_cfg(uint8_t app_idx, uint8_t start_mdl_cfg_idx, + uint8_t* p_mdl_cfg_idx) { + tBTA_HL_MCL_CB* p_mcb; + tBTA_HL_MDL_CB* p_dcb; + tBTA_HL_MDL_CFG* p_mdl; + bool mdl_in_use; + bool found = false; + uint8_t i, j, k; + + for (i = start_mdl_cfg_idx; i < BTA_HL_NUM_MDL_CFGS; i++) { + mdl_in_use = false; + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); + for (j = 0; j < BTA_HL_NUM_MCLS; j++) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, j); + if (p_mcb->in_use && + !memcmp(p_mdl->peer_bd_addr, p_mcb->bd_addr, BD_ADDR_LEN)) { + for (k = 0; k < BTA_HL_NUM_MDLS_PER_MCL; k++) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, j, k); + + if (p_dcb->in_use && p_mdl->mdl_id == p_dcb->mdl_id) { + mdl_in_use = true; break; + } } + } + + if (mdl_in_use) { + break; + } + } + + if (!mdl_in_use) { + *p_mdl_cfg_idx = i; + found = true; + break; } + } - return found; + return found; } /******************************************************************************* @@ -1319,87 +1193,72 @@ bool bta_hl_find_non_active_mdl_cfg(uint8_t app_idx, uint8_t start_mdl_cfg_idx, * false not found * ******************************************************************************/ -bool bta_hl_find_avail_mdl_cfg_idx(uint8_t app_idx, UNUSED_ATTR uint8_t mcl_idx, - uint8_t *p_mdl_cfg_idx) -{ - tBTA_HL_MDL_CFG *p_mdl, *p_mdl1, *p_mdl2; - uint8_t i; - bool found=false; - uint8_t first_mdl_cfg_idx, second_mdl_cfg_idx, older_mdl_cfg_idx; - bool done; - - for (i=0; i< BTA_HL_NUM_MDL_CFGS; i++) - { - p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); - if (!p_mdl->active ) - { - /* found an unused space to store mdl cfg*/ - found=true; - *p_mdl_cfg_idx =i; - break; - } - } - - if (!found) - { - /* all available mdl cfg spaces are in use so we need to find the mdl cfg which is - not currently in use and has the the oldest time stamp to remove*/ - - found = true; - if (bta_hl_find_non_active_mdl_cfg(app_idx,0, &first_mdl_cfg_idx)) - { - if (bta_hl_find_non_active_mdl_cfg(app_idx,(uint8_t) (first_mdl_cfg_idx+1), &second_mdl_cfg_idx)) - { - done = false; - while (!done) - { - p_mdl1 = BTA_HL_GET_MDL_CFG_PTR(app_idx, first_mdl_cfg_idx); - p_mdl2 = BTA_HL_GET_MDL_CFG_PTR(app_idx, second_mdl_cfg_idx); - - if (p_mdl1->time < p_mdl2->time) - { - older_mdl_cfg_idx = first_mdl_cfg_idx; - } - else - { - older_mdl_cfg_idx = second_mdl_cfg_idx; - } - - if (bta_hl_find_non_active_mdl_cfg(app_idx,(uint8_t) (second_mdl_cfg_idx+1), &second_mdl_cfg_idx)) - { - first_mdl_cfg_idx = older_mdl_cfg_idx; - } - else - { - done = true; - } - } - - *p_mdl_cfg_idx = older_mdl_cfg_idx; - - } - else - { - *p_mdl_cfg_idx = first_mdl_cfg_idx; - } - - } - else - { - found = false; - } - } +bool bta_hl_find_avail_mdl_cfg_idx(uint8_t app_idx, UNUSED_ATTR uint8_t mcl_idx, + uint8_t* p_mdl_cfg_idx) { + tBTA_HL_MDL_CFG *p_mdl, *p_mdl1, *p_mdl2; + uint8_t i; + bool found = false; + uint8_t first_mdl_cfg_idx, second_mdl_cfg_idx, older_mdl_cfg_idx; + bool done; + + for (i = 0; i < BTA_HL_NUM_MDL_CFGS; i++) { + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); + if (!p_mdl->active) { + /* found an unused space to store mdl cfg*/ + found = true; + *p_mdl_cfg_idx = i; + break; + } + } + + if (!found) { + /* all available mdl cfg spaces are in use so we need to find the mdl cfg + which is + not currently in use and has the the oldest time stamp to remove*/ + + found = true; + if (bta_hl_find_non_active_mdl_cfg(app_idx, 0, &first_mdl_cfg_idx)) { + if (bta_hl_find_non_active_mdl_cfg( + app_idx, (uint8_t)(first_mdl_cfg_idx + 1), &second_mdl_cfg_idx)) { + done = false; + while (!done) { + p_mdl1 = BTA_HL_GET_MDL_CFG_PTR(app_idx, first_mdl_cfg_idx); + p_mdl2 = BTA_HL_GET_MDL_CFG_PTR(app_idx, second_mdl_cfg_idx); + + if (p_mdl1->time < p_mdl2->time) { + older_mdl_cfg_idx = first_mdl_cfg_idx; + } else { + older_mdl_cfg_idx = second_mdl_cfg_idx; + } + + if (bta_hl_find_non_active_mdl_cfg(app_idx, + (uint8_t)(second_mdl_cfg_idx + 1), + &second_mdl_cfg_idx)) { + first_mdl_cfg_idx = older_mdl_cfg_idx; + } else { + done = true; + } + } + + *p_mdl_cfg_idx = older_mdl_cfg_idx; + + } else { + *p_mdl_cfg_idx = first_mdl_cfg_idx; + } + + } else { + found = false; + } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_avail_mdl_cfg_idx found=%d mdl_cfg_idx=%d ",found, *p_mdl_cfg_idx ); - } + if (!found) { + APPL_TRACE_DEBUG("bta_hl_find_avail_mdl_cfg_idx found=%d mdl_cfg_idx=%d ", + found, *p_mdl_cfg_idx); + } #endif - return found; - - + return found; } /******************************************************************************* @@ -1413,44 +1272,38 @@ bool bta_hl_find_avail_mdl_cfg_idx(uint8_t app_idx, UNUSED_ATTR uint8_t mcl_idx * false not found * ******************************************************************************/ -bool bta_hl_find_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx, - tBTA_HL_MDL_ID mdl_id, uint8_t *p_mdl_cfg_idx) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CFG *p_mdl; - uint8_t i ; - bool found=false; - - *p_mdl_cfg_idx = 0; - for (i=0; i< BTA_HL_NUM_MDL_CFGS; i++) - { - p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); - if(p_mdl->active) - APPL_TRACE_DEBUG("bta_hl_find_mdl_cfg_idx: mdl_id =%d, p_mdl->mdl_id=%d",mdl_id, - p_mdl->mdl_id); - if (p_mdl->active && - (!memcmp (p_mcb->bd_addr, p_mdl->peer_bd_addr, BD_ADDR_LEN))&& - (p_mdl->mdl_id == mdl_id)) - { - found=true; - *p_mdl_cfg_idx =i; - break; - } - } +bool bta_hl_find_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_MDL_ID mdl_id, uint8_t* p_mdl_cfg_idx) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CFG* p_mdl; + uint8_t i; + bool found = false; + + *p_mdl_cfg_idx = 0; + for (i = 0; i < BTA_HL_NUM_MDL_CFGS; i++) { + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); + if (p_mdl->active) + APPL_TRACE_DEBUG("bta_hl_find_mdl_cfg_idx: mdl_id =%d, p_mdl->mdl_id=%d", + mdl_id, p_mdl->mdl_id); + if (p_mdl->active && + (!memcmp(p_mcb->bd_addr, p_mdl->peer_bd_addr, BD_ADDR_LEN)) && + (p_mdl->mdl_id == mdl_id)) { + found = true; + *p_mdl_cfg_idx = i; + break; + } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_mdl_cfg_idx found=%d mdl_cfg_idx=%d ",found, i ); - } + if (!found) { + APPL_TRACE_DEBUG("bta_hl_find_mdl_cfg_idx found=%d mdl_cfg_idx=%d ", found, + i); + } #endif - return found; - - + return found; } - /******************************************************************************* * * Function bta_hl_get_cur_time @@ -1461,62 +1314,48 @@ bool bta_hl_find_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx, * false not found * ******************************************************************************/ -bool bta_hl_get_cur_time(uint8_t app_idx, uint8_t *p_cur_time) -{ - tBTA_HL_MDL_CFG *p_mdl; - uint8_t i, j, time_latest, time; - bool found=false, result=true; - - for (i=0; i< BTA_HL_NUM_MDL_CFGS; i++) - { - p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); - if (p_mdl->active) - { - found=true; - time_latest = p_mdl->time; - for (j=(i+1); j< BTA_HL_NUM_MDL_CFGS; j++ ) - { - p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, j); - if (p_mdl->active) - { - time = p_mdl->time; - if (time > time_latest) - { - time_latest = time; - } - } - } - break; - } - } - - - if (found) - { - if (time_latest < BTA_HL_MAX_TIME) - { - *p_cur_time = time_latest+1; - } - else - { - /* need to wrap around */ - result = false; - } - } - else - { - *p_cur_time = BTA_HL_MIN_TIME; - } +bool bta_hl_get_cur_time(uint8_t app_idx, uint8_t* p_cur_time) { + tBTA_HL_MDL_CFG* p_mdl; + uint8_t i, j, time_latest, time; + bool found = false, result = true; + + for (i = 0; i < BTA_HL_NUM_MDL_CFGS; i++) { + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); + if (p_mdl->active) { + found = true; + time_latest = p_mdl->time; + for (j = (i + 1); j < BTA_HL_NUM_MDL_CFGS; j++) { + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, j); + if (p_mdl->active) { + time = p_mdl->time; + if (time > time_latest) { + time_latest = time; + } + } + } + break; + } + } + + if (found) { + if (time_latest < BTA_HL_MAX_TIME) { + *p_cur_time = time_latest + 1; + } else { + /* need to wrap around */ + result = false; + } + } else { + *p_cur_time = BTA_HL_MIN_TIME; + } #if (BTA_HL_DEBUG == TRUE) - if (!result) - { - APPL_TRACE_DEBUG("bta_hl_get_cur_time result=%s cur_time=%d", - (result?"OK":"FAIL"), *p_cur_time); - } + if (!result) { + APPL_TRACE_DEBUG("bta_hl_get_cur_time result=%s cur_time=%d", + (result ? "OK" : "FAIL"), *p_cur_time); + } #endif - return result; + return result; } /******************************************************************************* @@ -1530,23 +1369,20 @@ bool bta_hl_get_cur_time(uint8_t app_idx, uint8_t *p_cur_time) * false not found * ******************************************************************************/ -void bta_hl_sort_cfg_time_idx(uint8_t app_idx, uint8_t *a, uint8_t n) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - uint8_t temp_time, temp_idx; - int16_t i, j; - for (i = 1; i < n; ++i) - { - temp_idx = a[i]; - temp_time = p_acb->mdl_cfg[temp_idx].time; - j = i - 1; - while ((j >= 0) && (temp_time < p_acb->mdl_cfg[a[j]].time)) - { - a[j + 1] = a[j]; - --j; - } - a[j + 1] = temp_idx; +void bta_hl_sort_cfg_time_idx(uint8_t app_idx, uint8_t* a, uint8_t n) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + uint8_t temp_time, temp_idx; + int16_t i, j; + for (i = 1; i < n; ++i) { + temp_idx = a[i]; + temp_time = p_acb->mdl_cfg[temp_idx].time; + j = i - 1; + while ((j >= 0) && (temp_time < p_acb->mdl_cfg[a[j]].time)) { + a[j + 1] = a[j]; + --j; } + a[j + 1] = temp_idx; + } } /******************************************************************************* @@ -1560,47 +1396,34 @@ void bta_hl_sort_cfg_time_idx(uint8_t app_idx, uint8_t *a, uint8_t n) * false not found * ******************************************************************************/ -void bta_hl_compact_mdl_cfg_time(uint8_t app_idx, uint8_t mdep_id) -{ - tBTA_HL_MDL_CFG *p_mdl; - uint8_t i, time_min, cnt=0; - uint8_t s_arr[BTA_HL_NUM_MDL_CFGS]; - - - for (i=0; i< BTA_HL_NUM_MDL_CFGS; i++) - { - p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); - if (p_mdl->active ) - { - s_arr[cnt]= i; - cnt++; - } - } - +void bta_hl_compact_mdl_cfg_time(uint8_t app_idx, uint8_t mdep_id) { + tBTA_HL_MDL_CFG* p_mdl; + uint8_t i, time_min, cnt = 0; + uint8_t s_arr[BTA_HL_NUM_MDL_CFGS]; + for (i = 0; i < BTA_HL_NUM_MDL_CFGS; i++) { + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); + if (p_mdl->active) { + s_arr[cnt] = i; + cnt++; + } + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_compact_mdl_cfg_time cnt=%d ",cnt ); + APPL_TRACE_DEBUG("bta_hl_compact_mdl_cfg_time cnt=%d ", cnt); #endif - - if (cnt) - { - bta_hl_sort_cfg_time_idx(app_idx, s_arr, cnt); - time_min = BTA_HL_MIN_TIME; - for (i=0;itime = time_min + i; - bta_hl_co_save_mdl(mdep_id, s_arr[i], p_mdl); - } + if (cnt) { + bta_hl_sort_cfg_time_idx(app_idx, s_arr, cnt); + time_min = BTA_HL_MIN_TIME; + for (i = 0; i < cnt; i++) { + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, s_arr[i]); + p_mdl->time = time_min + i; + bta_hl_co_save_mdl(mdep_id, s_arr[i], p_mdl); } - - + } } - - /******************************************************************************* * * Function bta_hl_is_mdl_exsit_in_mcl @@ -1612,36 +1435,28 @@ void bta_hl_compact_mdl_cfg_time(uint8_t app_idx, uint8_t mdep_id) * false does not exist * ******************************************************************************/ -bool bta_hl_is_mdl_exsit_in_mcl(uint8_t app_idx, BD_ADDR bd_addr, - tBTA_HL_MDL_ID mdl_id) -{ - tBTA_HL_MDL_CFG *p_mdl; - bool found = false; - uint8_t i; - - for (i = 0; i< BTA_HL_NUM_MDL_CFGS; i++) - { - p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); - if (p_mdl->active && - !memcmp(p_mdl->peer_bd_addr, bd_addr,BD_ADDR_LEN)) - { - if (mdl_id != BTA_HL_DELETE_ALL_MDL_IDS) - { - if (p_mdl->mdl_id == mdl_id) - { - found = true; - break; - } - } - else - { - found = true; - break; - } +bool bta_hl_is_mdl_exsit_in_mcl(uint8_t app_idx, BD_ADDR bd_addr, + tBTA_HL_MDL_ID mdl_id) { + tBTA_HL_MDL_CFG* p_mdl; + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MDL_CFGS; i++) { + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); + if (p_mdl->active && !memcmp(p_mdl->peer_bd_addr, bd_addr, BD_ADDR_LEN)) { + if (mdl_id != BTA_HL_DELETE_ALL_MDL_IDS) { + if (p_mdl->mdl_id == mdl_id) { + found = true; + break; } + } else { + found = true; + break; + } } + } - return found; + return found; } /******************************************************************************* @@ -1654,48 +1469,40 @@ bool bta_hl_is_mdl_exsit_in_mcl(uint8_t app_idx, BD_ADDR bd_addr, * false Failed * ******************************************************************************/ -bool bta_hl_delete_mdl_cfg(uint8_t app_idx, BD_ADDR bd_addr, - tBTA_HL_MDL_ID mdl_id) -{ - tBTA_HL_MDL_CFG *p_mdl; - bool success = false; - uint8_t i; - - for (i = 0; i< BTA_HL_NUM_MDL_CFGS; i++) - { - p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); - if (p_mdl->active && - !memcmp(p_mdl->peer_bd_addr, bd_addr,BD_ADDR_LEN)) - { - if (mdl_id != BTA_HL_DELETE_ALL_MDL_IDS) - { - if (p_mdl->mdl_id == mdl_id) - { - bta_hl_co_delete_mdl(p_mdl->local_mdep_id, i); - memset(p_mdl, 0, sizeof(tBTA_HL_MDL_CFG)); - success = true; - break; - } - } - else - { - bta_hl_co_delete_mdl(p_mdl->local_mdep_id, i); - memset(p_mdl, 0, sizeof(tBTA_HL_MDL_CFG)); - success = true; - } - } +bool bta_hl_delete_mdl_cfg(uint8_t app_idx, BD_ADDR bd_addr, + tBTA_HL_MDL_ID mdl_id) { + tBTA_HL_MDL_CFG* p_mdl; + bool success = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MDL_CFGS; i++) { + p_mdl = BTA_HL_GET_MDL_CFG_PTR(app_idx, i); + if (p_mdl->active && !memcmp(p_mdl->peer_bd_addr, bd_addr, BD_ADDR_LEN)) { + if (mdl_id != BTA_HL_DELETE_ALL_MDL_IDS) { + if (p_mdl->mdl_id == mdl_id) { + bta_hl_co_delete_mdl(p_mdl->local_mdep_id, i); + memset(p_mdl, 0, sizeof(tBTA_HL_MDL_CFG)); + success = true; + break; + } + } else { + bta_hl_co_delete_mdl(p_mdl->local_mdep_id, i); + memset(p_mdl, 0, sizeof(tBTA_HL_MDL_CFG)); + success = true; + } } + } - return success; + return success; } - /******************************************************************************* * * Function bta_hl_is_mdl_value_valid * * - * Description This function checks the specified MDL ID is in valid range or not + * Description This function checks the specified MDL ID is in valid range or + *not * * Returns bool - true Success * false Failed @@ -1706,26 +1513,20 @@ bool bta_hl_delete_mdl_cfg(uint8_t app_idx, BD_ADDR bd_addr, * 0xFFFF indicates all MDLs (for delete operation only) * ******************************************************************************/ -bool bta_hl_is_mdl_value_valid(tBTA_HL_MDL_ID mdl_id) -{ - bool status = true; - - if (mdl_id != BTA_HL_DELETE_ALL_MDL_IDS) - { - if (mdl_id != 0) - { - if (mdl_id > BTA_HL_MAX_MDL_VAL ) - { - status = false; - } - } - else - { - status = false; - } +bool bta_hl_is_mdl_value_valid(tBTA_HL_MDL_ID mdl_id) { + bool status = true; + + if (mdl_id != BTA_HL_DELETE_ALL_MDL_IDS) { + if (mdl_id != 0) { + if (mdl_id > BTA_HL_MAX_MDL_VAL) { + status = false; + } + } else { + status = false; } + } - return status; + return status; } /******************************************************************************* @@ -1739,35 +1540,31 @@ bool bta_hl_is_mdl_value_valid(tBTA_HL_MDL_ID mdl_id) * false not found * ******************************************************************************/ -bool bta_hl_find_mdep_cfg_idx(uint8_t app_idx, tBTA_HL_MDEP_ID local_mdep_id, - uint8_t *p_mdep_cfg_idx) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_SUP_FEATURE *p_sup_feature= &p_acb->sup_feature; - bool found =false; - uint8_t i; - - for (i=0; i< p_sup_feature->num_of_mdeps; i++) - { - if ( p_sup_feature->mdep[i].mdep_id == local_mdep_id) - { - found = true; - *p_mdep_cfg_idx = i; - break; - } +bool bta_hl_find_mdep_cfg_idx(uint8_t app_idx, tBTA_HL_MDEP_ID local_mdep_id, + uint8_t* p_mdep_cfg_idx) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_SUP_FEATURE* p_sup_feature = &p_acb->sup_feature; + bool found = false; + uint8_t i; + + for (i = 0; i < p_sup_feature->num_of_mdeps; i++) { + if (p_sup_feature->mdep[i].mdep_id == local_mdep_id) { + found = true; + *p_mdep_cfg_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_mdep_cfg_idx found=%d mdep_idx=%d local_mdep_id=%d ", - found,i, local_mdep_id ); - } + if (!found) { + APPL_TRACE_DEBUG( + "bta_hl_find_mdep_cfg_idx found=%d mdep_idx=%d local_mdep_id=%d ", + found, i, local_mdep_id); + } #endif - return found; + return found; } - /******************************************************************************* * * Function bta_hl_find_rxtx_apdu_size @@ -1779,41 +1576,33 @@ bool bta_hl_find_mdep_cfg_idx(uint8_t app_idx, tBTA_HL_MDEP_ID local_mdep_id, * ******************************************************************************/ void bta_hl_find_rxtx_apdu_size(uint8_t app_idx, uint8_t mdep_cfg_idx, - uint16_t *p_rx_apu_size, - uint16_t *p_tx_apu_size) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MDEP_CFG *p_mdep_cfg; - uint8_t i; - uint16_t max_rx_apdu_size=0, max_tx_apdu_size=0; - - p_mdep_cfg = &p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg; + uint16_t* p_rx_apu_size, + uint16_t* p_tx_apu_size) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MDEP_CFG* p_mdep_cfg; + uint8_t i; + uint16_t max_rx_apdu_size = 0, max_tx_apdu_size = 0; + p_mdep_cfg = &p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg; - for (i=0; i< p_mdep_cfg->num_of_mdep_data_types ; i++) - { - - if (max_rx_apdu_size < p_mdep_cfg->data_cfg[i].max_rx_apdu_size) - { - max_rx_apdu_size = p_mdep_cfg->data_cfg[i].max_rx_apdu_size; - } - - if (max_tx_apdu_size < p_mdep_cfg->data_cfg[i].max_tx_apdu_size) - { - max_tx_apdu_size = p_mdep_cfg->data_cfg[i].max_tx_apdu_size; - } + for (i = 0; i < p_mdep_cfg->num_of_mdep_data_types; i++) { + if (max_rx_apdu_size < p_mdep_cfg->data_cfg[i].max_rx_apdu_size) { + max_rx_apdu_size = p_mdep_cfg->data_cfg[i].max_rx_apdu_size; } + if (max_tx_apdu_size < p_mdep_cfg->data_cfg[i].max_tx_apdu_size) { + max_tx_apdu_size = p_mdep_cfg->data_cfg[i].max_tx_apdu_size; + } + } - *p_rx_apu_size = max_rx_apdu_size; - *p_tx_apu_size = max_tx_apdu_size; + *p_rx_apu_size = max_rx_apdu_size; + *p_tx_apu_size = max_tx_apdu_size; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_find_rxtx_apdu_size max_rx_apdu_size=%d max_tx_apdu_size=%d ", - max_rx_apdu_size, max_tx_apdu_size ); + APPL_TRACE_DEBUG( + "bta_hl_find_rxtx_apdu_size max_rx_apdu_size=%d max_tx_apdu_size=%d ", + max_rx_apdu_size, max_tx_apdu_size); #endif - - } /******************************************************************************* @@ -1827,79 +1616,77 @@ void bta_hl_find_rxtx_apdu_size(uint8_t app_idx, uint8_t mdep_cfg_idx, * ******************************************************************************/ bool bta_hl_validate_peer_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, - tBTA_HL_MDEP_ID peer_mdep_id, - tBTA_HL_MDEP_ROLE peer_mdep_role, - uint8_t sdp_idx) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - tBTA_HL_SDP_REC *p_rec; - bool peer_found =false; - uint8_t i; - - APPL_TRACE_DEBUG("bta_hl_validate_peer_cfg sdp_idx=%d app_idx %d", sdp_idx, app_idx); - - - if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) - { - return true; - } - - p_rec = &p_mcb->sdp.sdp_rec[sdp_idx]; - for (i=0; i< p_rec->num_mdeps; i++) - { - APPL_TRACE_DEBUG("mdep_id %d peer_mdep_id %d",p_rec->mdep_cfg[i].mdep_id , peer_mdep_id); - APPL_TRACE_DEBUG("mdep_role %d peer_mdep_role %d",p_rec->mdep_cfg[i].mdep_role, - peer_mdep_role) - if ( (p_rec->mdep_cfg[i].mdep_id == peer_mdep_id) && - (p_rec->mdep_cfg[i].mdep_role == peer_mdep_role)) - { - peer_found = true; - - break; - } - } + tBTA_HL_MDEP_ID peer_mdep_id, + tBTA_HL_MDEP_ROLE peer_mdep_role, + uint8_t sdp_idx) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + tBTA_HL_SDP_REC* p_rec; + bool peer_found = false; + uint8_t i; + + APPL_TRACE_DEBUG("bta_hl_validate_peer_cfg sdp_idx=%d app_idx %d", sdp_idx, + app_idx); + + if (p_dcb->local_mdep_id == BTA_HL_ECHO_TEST_MDEP_ID) { + return true; + } + + p_rec = &p_mcb->sdp.sdp_rec[sdp_idx]; + for (i = 0; i < p_rec->num_mdeps; i++) { + APPL_TRACE_DEBUG("mdep_id %d peer_mdep_id %d", p_rec->mdep_cfg[i].mdep_id, + peer_mdep_id); + APPL_TRACE_DEBUG("mdep_role %d peer_mdep_role %d", + p_rec->mdep_cfg[i].mdep_role, peer_mdep_role) + if ((p_rec->mdep_cfg[i].mdep_id == peer_mdep_id) && + (p_rec->mdep_cfg[i].mdep_role == peer_mdep_role)) { + peer_found = true; + + break; + } + } #if (BTA_HL_DEBUG == TRUE) - if (!peer_found) - { - APPL_TRACE_DEBUG("bta_hl_validate_peer_cfg failed num_mdeps=%d",p_rec->num_mdeps); - } + if (!peer_found) { + APPL_TRACE_DEBUG("bta_hl_validate_peer_cfg failed num_mdeps=%d", + p_rec->num_mdeps); + } #endif - return peer_found; + return peer_found; } /******************************************************************************* * * Function bta_hl_chk_local_cfg * - * Description This function check whether the local DCH configuration is OK or not + * Description This function check whether the local DCH configuration is OK or + *not * * Returns tBTA_HL_STATUS - OK - local DCH configuration is OK - * NO_FIRST_RELIABLE - the streaming DCH configuration - * is not OK and it needs to use + * NO_FIRST_RELIABLE - the streaming DCH + *configuration + * is not OK and it needs to + *use * reliable DCH configuration * ******************************************************************************/ tBTA_HL_STATUS bta_hl_chk_local_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdep_cfg_idx, - tBTA_HL_DCH_CFG local_cfg) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - - if ( mdep_cfg_idx && - (p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SOURCE) && - (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx)) && - (local_cfg != BTA_HL_DCH_CFG_RELIABLE)) - { - status = BTA_HL_STATUS_NO_FIRST_RELIABLE; - APPL_TRACE_ERROR("BTA_HL_STATUS_INVALID_DCH_CFG"); - } + tBTA_HL_DCH_CFG local_cfg) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - return status; -} + if (mdep_cfg_idx && + (p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.mdep_role == + BTA_HL_MDEP_ROLE_SOURCE) && + (!bta_hl_is_the_first_reliable_existed(app_idx, mcl_idx)) && + (local_cfg != BTA_HL_DCH_CFG_RELIABLE)) { + status = BTA_HL_STATUS_NO_FIRST_RELIABLE; + APPL_TRACE_ERROR("BTA_HL_STATUS_INVALID_DCH_CFG"); + } + return status; +} /******************************************************************************* * @@ -1911,77 +1698,70 @@ tBTA_HL_STATUS bta_hl_chk_local_cfg(uint8_t app_idx, uint8_t mcl_idx, * false validation failed ******************************************************************************/ bool bta_hl_validate_reconnect_params(uint8_t app_idx, uint8_t mcl_idx, - tBTA_HL_API_DCH_RECONNECT *p_reconnect, - uint8_t *p_mdep_cfg_idx, uint8_t *p_mdl_cfg_idx) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_SUP_FEATURE *p_sup_feature = &p_acb->sup_feature; - uint8_t num_mdeps; - uint8_t mdl_cfg_idx; - bool local_mdep_id_found =false; - bool mdl_cfg_found =false; - bool status=false; - uint8_t i, in_use_mdl_idx = 0; + tBTA_HL_API_DCH_RECONNECT* p_reconnect, + uint8_t* p_mdep_cfg_idx, + uint8_t* p_mdl_cfg_idx) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_SUP_FEATURE* p_sup_feature = &p_acb->sup_feature; + uint8_t num_mdeps; + uint8_t mdl_cfg_idx; + bool local_mdep_id_found = false; + bool mdl_cfg_found = false; + bool status = false; + uint8_t i, in_use_mdl_idx = 0; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_validate_reconnect_params mdl_id=%d app_idx=%d", p_reconnect->mdl_id, app_idx); + APPL_TRACE_DEBUG("bta_hl_validate_reconnect_params mdl_id=%d app_idx=%d", + p_reconnect->mdl_id, app_idx); #endif - if (bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, p_reconnect->mdl_id, &mdl_cfg_idx)) - { - mdl_cfg_found = true; - } + if (bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, p_reconnect->mdl_id, + &mdl_cfg_idx)) { + mdl_cfg_found = true; + } #if (BTA_HL_DEBUG == TRUE) - if (!mdl_cfg_found) - { - APPL_TRACE_DEBUG("mdl_cfg_found not found"); - } + if (!mdl_cfg_found) { + APPL_TRACE_DEBUG("mdl_cfg_found not found"); + } #endif - - if (mdl_cfg_found) - { - num_mdeps = p_sup_feature->num_of_mdeps; - for (i=0; i< num_mdeps ; i++) - { - if ( p_sup_feature->mdep[i].mdep_id == p_acb->mdl_cfg[mdl_cfg_idx].local_mdep_id) - { - local_mdep_id_found = true; - *p_mdep_cfg_idx =i; - *p_mdl_cfg_idx = mdl_cfg_idx; - break; - } - } + if (mdl_cfg_found) { + num_mdeps = p_sup_feature->num_of_mdeps; + for (i = 0; i < num_mdeps; i++) { + if (p_sup_feature->mdep[i].mdep_id == + p_acb->mdl_cfg[mdl_cfg_idx].local_mdep_id) { + local_mdep_id_found = true; + *p_mdep_cfg_idx = i; + *p_mdl_cfg_idx = mdl_cfg_idx; + break; + } } + } #if (BTA_HL_DEBUG == TRUE) - if (!local_mdep_id_found) - { - APPL_TRACE_DEBUG("local_mdep_id not found"); - } + if (!local_mdep_id_found) { + APPL_TRACE_DEBUG("local_mdep_id not found"); + } #endif - - if (local_mdep_id_found) - { - if (!bta_hl_find_mdl_idx(app_idx,mcl_idx, p_reconnect->mdl_id, &in_use_mdl_idx)) - { - status= true; - } - else - { - APPL_TRACE_ERROR("mdl_id=%d is curreltly in use",p_reconnect->mdl_id); - } + if (local_mdep_id_found) { + if (!bta_hl_find_mdl_idx(app_idx, mcl_idx, p_reconnect->mdl_id, + &in_use_mdl_idx)) { + status = true; + } else { + APPL_TRACE_ERROR("mdl_id=%d is curreltly in use", p_reconnect->mdl_id); } + } #if (BTA_HL_DEBUG == TRUE) - if (!status) - { - APPL_TRACE_DEBUG("Reconnect validation failed local_mdep_id found=%d mdl_cfg_idx found=%d in_use_mdl_idx=%d ", - local_mdep_id_found, mdl_cfg_found, in_use_mdl_idx); - } + if (!status) { + APPL_TRACE_DEBUG( + "Reconnect validation failed local_mdep_id found=%d mdl_cfg_idx " + "found=%d in_use_mdl_idx=%d ", + local_mdep_id_found, mdl_cfg_found, in_use_mdl_idx); + } #endif - return status; + return status; } /******************************************************************************* @@ -1992,33 +1772,26 @@ bool bta_hl_validate_reconnect_params(uint8_t app_idx, uint8_t mcl_idx, * false not found * ******************************************************************************/ -bool bta_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t *p_mcl_idx) -{ - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_MCLS ; i ++) - { - if (!bta_hl_cb.acb[app_idx].mcb[i].in_use) - { - found = true; - *p_mcl_idx = i; - break; - } +bool bta_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx) { + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MCLS; i++) { + if (!bta_hl_cb.acb[app_idx].mcb[i].in_use) { + found = true; + *p_mcl_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_avail_mcl_idx found=%d idx=%d", - found, i); - } + if (!found) { + APPL_TRACE_DEBUG("bta_hl_find_avail_mcl_idx found=%d idx=%d", found, i); + } #endif - return found; + return found; } - - /******************************************************************************* * * Function bta_hl_find_avail_mdl_idx @@ -2030,31 +1803,26 @@ bool bta_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t *p_mcl_idx) * ******************************************************************************/ bool bta_hl_find_avail_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, - uint8_t *p_mdl_idx) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_MDLS_PER_MCL ; i ++) - { - if (!p_mcb->mdl[i].in_use) - { - memset((void *)&p_mcb->mdl[i],0, sizeof(tBTA_HL_MDL_CB)); - found = true; - *p_mdl_idx = i; - break; - } + uint8_t* p_mdl_idx) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_MDLS_PER_MCL; i++) { + if (!p_mcb->mdl[i].in_use) { + memset((void*)&p_mcb->mdl[i], 0, sizeof(tBTA_HL_MDL_CB)); + found = true; + *p_mdl_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_avail_mdl_idx found=%d idx=%d", - found, i); - } + if (!found) { + APPL_TRACE_DEBUG("bta_hl_find_avail_mdl_idx found=%d idx=%d", found, i); + } #endif - return found; + return found; } /******************************************************************************* @@ -2066,35 +1834,28 @@ bool bta_hl_find_avail_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, * Returns bool - true the app_id is a duplicate ID * false not a duplicate ID ******************************************************************************/ -bool bta_hl_is_a_duplicate_id(uint8_t app_id) -{ - bool is_duplicate=false; - uint8_t i; +bool bta_hl_is_a_duplicate_id(uint8_t app_id) { + bool is_duplicate = false; + uint8_t i; - for (i=0; i < BTA_HL_NUM_APPS ; i ++) - { - if (bta_hl_cb.acb[i].in_use && - (bta_hl_cb.acb[i].app_id == app_id)) - { - is_duplicate = true; + for (i = 0; i < BTA_HL_NUM_APPS; i++) { + if (bta_hl_cb.acb[i].in_use && (bta_hl_cb.acb[i].app_id == app_id)) { + is_duplicate = true; - break; - } + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (is_duplicate) - { - - APPL_TRACE_DEBUG("bta_hl_is_a_duplicate_id app_id=%d is_duplicate=%d", - app_id, is_duplicate); - } + if (is_duplicate) { + APPL_TRACE_DEBUG("bta_hl_is_a_duplicate_id app_id=%d is_duplicate=%d", + app_id, is_duplicate); + } #endif - return is_duplicate; + return is_duplicate; } - /******************************************************************************* * * Function bta_hl_find_avail_app_idx @@ -2105,29 +1866,24 @@ bool bta_hl_is_a_duplicate_id(uint8_t app_id) * false not found * ******************************************************************************/ -bool bta_hl_find_avail_app_idx(uint8_t *p_idx) -{ - bool found=false; - uint8_t i; - - for (i=0; i < BTA_HL_NUM_APPS ; i ++) - { - if (!bta_hl_cb.acb[i].in_use) - { - found = true; - *p_idx = i; - break; - } +bool bta_hl_find_avail_app_idx(uint8_t* p_idx) { + bool found = false; + uint8_t i; + + for (i = 0; i < BTA_HL_NUM_APPS; i++) { + if (!bta_hl_cb.acb[i].in_use) { + found = true; + *p_idx = i; + break; } + } #if (BTA_HL_DEBUG == TRUE) - if (!found) - { - APPL_TRACE_DEBUG("bta_hl_find_avail_app_idx found=%d app_idx=%d", - found, i); - } + if (!found) { + APPL_TRACE_DEBUG("bta_hl_find_avail_app_idx found=%d app_idx=%d", found, i); + } #endif - return found; + return found; } /******************************************************************************* @@ -2139,158 +1895,125 @@ bool bta_hl_find_avail_app_idx(uint8_t *p_idx) * Returns tBTA_HL_STATUS -registration status * ******************************************************************************/ -tBTA_HL_STATUS bta_hl_app_update(uint8_t app_id, bool is_register) -{ - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(0); - tMCA_CS mca_cs; - uint8_t i, mdep_idx, num_of_mdeps; - uint8_t mdep_counter = 0; - +tBTA_HL_STATUS bta_hl_app_update(uint8_t app_id, bool is_register) { + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(0); + tMCA_CS mca_cs; + uint8_t i, mdep_idx, num_of_mdeps; + uint8_t mdep_counter = 0; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_app_update app_id=%d", app_id); + APPL_TRACE_DEBUG("bta_hl_app_update app_id=%d", app_id); #endif - if (is_register) - { - if ((status == BTA_HL_STATUS_OK) && - bta_hl_co_get_num_of_mdep(app_id, &num_of_mdeps)) - { - for (i=0; i < num_of_mdeps; i++) - { - mca_cs.type = MCA_TDEP_DATA; - mca_cs.max_mdl = BTA_HL_NUM_MDLS_PER_MDEP; - mca_cs.p_data_cback = bta_hl_mcap_data_cback; - /* Find the first available mdep index, and create a MDL Endpoint */ - // make a function later if needed - for (mdep_idx = 1; mdep_idx < BTA_HL_NUM_MDEPS; mdep_idx++) - { - if ( p_acb->sup_feature.mdep[mdep_idx].mdep_id == 0) - { - break; /* We found an available index */ - } - else - { - mdep_counter++; - } - } - /* If no available MDEPs, return error */ - if (mdep_idx == BTA_HL_NUM_MDEPS) - { - APPL_TRACE_ERROR("bta_hl_app_update: Out of MDEP IDs"); - status = BTA_HL_STATUS_MCAP_REG_FAIL; - break; - } - if (MCA_CreateDep((tMCA_HANDLE)p_acb->app_handle, - &(p_acb->sup_feature.mdep[mdep_idx].mdep_id), &mca_cs) == MCA_SUCCESS) - { - if (bta_hl_co_get_mdep_config(app_id, - mdep_idx, - mdep_counter, - p_acb->sup_feature.mdep[mdep_idx].mdep_id, - &p_acb->sup_feature.mdep[mdep_idx].mdep_cfg)) - { - p_acb->sup_feature.mdep[mdep_idx].ori_app_id = app_id; - APPL_TRACE_DEBUG("mdep idx %d id %d ori_app_id %d num data type %d",mdep_idx, - p_acb->sup_feature.mdep[mdep_idx].mdep_id, - p_acb->sup_feature.mdep[mdep_idx].ori_app_id, - p_acb->sup_feature.mdep[mdep_idx].mdep_cfg.num_of_mdep_data_types); - if (p_acb->sup_feature.mdep[mdep_idx].mdep_cfg.mdep_role == - BTA_HL_MDEP_ROLE_SOURCE) - { - p_acb->sup_feature.app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SOURCE; - } - else if (p_acb->sup_feature.mdep[mdep_idx].mdep_cfg.mdep_role == - BTA_HL_MDEP_ROLE_SINK) - { - p_acb->sup_feature.app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SINK; - } - else - { - APPL_TRACE_ERROR("bta_hl_app_registration: Invalid Role %d", - p_acb->sup_feature.mdep[mdep_idx].mdep_cfg.mdep_role); - status = BTA_HL_STATUS_MDEP_CO_FAIL; - break; - } - } - else - { - APPL_TRACE_ERROR("bta_hl_app_registration: Cfg callout failed"); - status = BTA_HL_STATUS_MDEP_CO_FAIL; - break; - } - } - else - { - APPL_TRACE_ERROR("bta_hl_app_registration: MCA_CreateDep failed"); - status = BTA_HL_STATUS_MCAP_REG_FAIL; - break; - } - - } - p_acb->sup_feature.num_of_mdeps += num_of_mdeps; - APPL_TRACE_DEBUG("num_of_mdeps %d", p_acb->sup_feature.num_of_mdeps); - - if ((status == BTA_HL_STATUS_OK) && - (p_acb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE)) - { - p_acb->sup_feature.advertize_source_sdp = - bta_hl_co_advrtise_source_sdp(app_id); - } - - if ((status == BTA_HL_STATUS_OK)&& - (!bta_hl_co_get_echo_config(app_id, &p_acb->sup_feature.echo_cfg))) - { - status = BTA_HL_STATUS_ECHO_CO_FAIL; - } - - if ((status == BTA_HL_STATUS_OK)&& - (!bta_hl_co_load_mdl_config(app_id, BTA_HL_NUM_MDL_CFGS, &p_acb->mdl_cfg[0]))) - { - status = BTA_HL_STATUS_MDL_CFG_CO_FAIL; - } - } - else - { - status = BTA_HL_STATUS_MDEP_CO_FAIL; + if (is_register) { + if ((status == BTA_HL_STATUS_OK) && + bta_hl_co_get_num_of_mdep(app_id, &num_of_mdeps)) { + for (i = 0; i < num_of_mdeps; i++) { + mca_cs.type = MCA_TDEP_DATA; + mca_cs.max_mdl = BTA_HL_NUM_MDLS_PER_MDEP; + mca_cs.p_data_cback = bta_hl_mcap_data_cback; + /* Find the first available mdep index, and create a MDL Endpoint */ + // make a function later if needed + for (mdep_idx = 1; mdep_idx < BTA_HL_NUM_MDEPS; mdep_idx++) { + if (p_acb->sup_feature.mdep[mdep_idx].mdep_id == 0) { + break; /* We found an available index */ + } else { + mdep_counter++; + } + } + /* If no available MDEPs, return error */ + if (mdep_idx == BTA_HL_NUM_MDEPS) { + APPL_TRACE_ERROR("bta_hl_app_update: Out of MDEP IDs"); + status = BTA_HL_STATUS_MCAP_REG_FAIL; + break; } - } - else - { - for (i=1; isup_feature.mdep[i].ori_app_id == app_id) - { - APPL_TRACE_DEBUG("Found index %", i); - - - if (MCA_DeleteDep((tMCA_HANDLE)p_acb->app_handle, - (p_acb->sup_feature.mdep[i].mdep_id)) != MCA_SUCCESS) - { - APPL_TRACE_ERROR("Error deregistering"); - status = BTA_HL_STATUS_MCAP_REG_FAIL; - return status; - } - memset(&p_acb->sup_feature.mdep[i], 0, sizeof(tBTA_HL_MDEP)); + if (MCA_CreateDep((tMCA_HANDLE)p_acb->app_handle, + &(p_acb->sup_feature.mdep[mdep_idx].mdep_id), + &mca_cs) == MCA_SUCCESS) { + if (bta_hl_co_get_mdep_config( + app_id, mdep_idx, mdep_counter, + p_acb->sup_feature.mdep[mdep_idx].mdep_id, + &p_acb->sup_feature.mdep[mdep_idx].mdep_cfg)) { + p_acb->sup_feature.mdep[mdep_idx].ori_app_id = app_id; + APPL_TRACE_DEBUG("mdep idx %d id %d ori_app_id %d num data type %d", + mdep_idx, + p_acb->sup_feature.mdep[mdep_idx].mdep_id, + p_acb->sup_feature.mdep[mdep_idx].ori_app_id, + p_acb->sup_feature.mdep[mdep_idx] + .mdep_cfg.num_of_mdep_data_types); + if (p_acb->sup_feature.mdep[mdep_idx].mdep_cfg.mdep_role == + BTA_HL_MDEP_ROLE_SOURCE) { + p_acb->sup_feature.app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SOURCE; + } else if (p_acb->sup_feature.mdep[mdep_idx].mdep_cfg.mdep_role == + BTA_HL_MDEP_ROLE_SINK) { + p_acb->sup_feature.app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SINK; + } else { + APPL_TRACE_ERROR( + "bta_hl_app_registration: Invalid Role %d", + p_acb->sup_feature.mdep[mdep_idx].mdep_cfg.mdep_role); + status = BTA_HL_STATUS_MDEP_CO_FAIL; + break; } + } else { + APPL_TRACE_ERROR("bta_hl_app_registration: Cfg callout failed"); + status = BTA_HL_STATUS_MDEP_CO_FAIL; + break; + } + } else { + APPL_TRACE_ERROR("bta_hl_app_registration: MCA_CreateDep failed"); + status = BTA_HL_STATUS_MCAP_REG_FAIL; + break; } + } + p_acb->sup_feature.num_of_mdeps += num_of_mdeps; + APPL_TRACE_DEBUG("num_of_mdeps %d", p_acb->sup_feature.num_of_mdeps); + if ((status == BTA_HL_STATUS_OK) && + (p_acb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE)) { + p_acb->sup_feature.advertize_source_sdp = + bta_hl_co_advrtise_source_sdp(app_id); + } + if ((status == BTA_HL_STATUS_OK) && + (!bta_hl_co_get_echo_config(app_id, &p_acb->sup_feature.echo_cfg))) { + status = BTA_HL_STATUS_ECHO_CO_FAIL; + } + + if ((status == BTA_HL_STATUS_OK) && + (!bta_hl_co_load_mdl_config(app_id, BTA_HL_NUM_MDL_CFGS, + &p_acb->mdl_cfg[0]))) { + status = BTA_HL_STATUS_MDL_CFG_CO_FAIL; + } + } else { + status = BTA_HL_STATUS_MDEP_CO_FAIL; } + } else { + for (i = 1; i < BTA_HL_NUM_MDEPS; i++) { + if (p_acb->sup_feature.mdep[i].ori_app_id == app_id) { + APPL_TRACE_DEBUG("Found index %", i); - if (status == BTA_HL_STATUS_OK) - { - /* Register/Update MDEP(s) in SDP Record */ - status = bta_hl_sdp_update(app_id); + if (MCA_DeleteDep((tMCA_HANDLE)p_acb->app_handle, + (p_acb->sup_feature.mdep[i].mdep_id)) != + MCA_SUCCESS) { + APPL_TRACE_ERROR("Error deregistering"); + status = BTA_HL_STATUS_MCAP_REG_FAIL; + return status; + } + memset(&p_acb->sup_feature.mdep[i], 0, sizeof(tBTA_HL_MDEP)); + } } - /* else do cleanup */ + } + if (status == BTA_HL_STATUS_OK) { + /* Register/Update MDEP(s) in SDP Record */ + status = bta_hl_sdp_update(app_id); + } + /* else do cleanup */ - return status; + return status; } - /******************************************************************************* * * Function bta_hl_app_registration @@ -2300,138 +2023,112 @@ tBTA_HL_STATUS bta_hl_app_update(uint8_t app_id, bool is_register) * Returns tBTA_HL_STATUS -registration status * ******************************************************************************/ -tBTA_HL_STATUS bta_hl_app_registration(uint8_t app_idx) -{ - tBTA_HL_STATUS status = BTA_HL_STATUS_OK; - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tMCA_REG reg; - tMCA_CS mca_cs; - uint8_t i, num_of_mdeps; - uint8_t mdep_counter = 0; +tBTA_HL_STATUS bta_hl_app_registration(uint8_t app_idx) { + tBTA_HL_STATUS status = BTA_HL_STATUS_OK; + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tMCA_REG reg; + tMCA_CS mca_cs; + uint8_t i, num_of_mdeps; + uint8_t mdep_counter = 0; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_app_registration app_idx=%d", app_idx); + APPL_TRACE_DEBUG("bta_hl_app_registration app_idx=%d", app_idx); #endif - reg.ctrl_psm = p_acb->ctrl_psm; - reg.data_psm = p_acb->data_psm; - reg.sec_mask = p_acb->sec_mask; - reg.rsp_tout = BTA_HL_MCAP_RSP_TOUT; + reg.ctrl_psm = p_acb->ctrl_psm; + reg.data_psm = p_acb->data_psm; + reg.sec_mask = p_acb->sec_mask; + reg.rsp_tout = BTA_HL_MCAP_RSP_TOUT; + + if ((p_acb->app_handle = (tBTA_HL_APP_HANDLE)MCA_Register( + ®, bta_hl_mcap_ctrl_cback)) != 0) { + mca_cs.type = MCA_TDEP_ECHO; + mca_cs.max_mdl = BTA_HL_NUM_MDLS_PER_MDEP; + mca_cs.p_data_cback = bta_hl_mcap_data_cback; + + if (MCA_CreateDep((tMCA_HANDLE)p_acb->app_handle, + &(p_acb->sup_feature.mdep[0].mdep_id), + &mca_cs) == MCA_SUCCESS) { + if (p_acb->sup_feature.mdep[0].mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) { + status = BTA_HL_STATUS_MCAP_REG_FAIL; + APPL_TRACE_ERROR("BAD MDEP ID for echo test mdep_id=%d", + p_acb->sup_feature.mdep[0].mdep_id); + } + } else { + status = BTA_HL_STATUS_MCAP_REG_FAIL; + APPL_TRACE_ERROR("MCA_CreateDep for echo test(mdep_id=0) failed"); + } + + if ((status == BTA_HL_STATUS_OK) && + bta_hl_co_get_num_of_mdep(p_acb->app_id, &num_of_mdeps)) { + p_acb->sup_feature.num_of_mdeps = num_of_mdeps + 1; - if ( (p_acb->app_handle = (tBTA_HL_APP_HANDLE) MCA_Register(®, bta_hl_mcap_ctrl_cback))!=0) - { - mca_cs.type = MCA_TDEP_ECHO; + for (i = 1; i < p_acb->sup_feature.num_of_mdeps; i++) { + mca_cs.type = MCA_TDEP_DATA; mca_cs.max_mdl = BTA_HL_NUM_MDLS_PER_MDEP; mca_cs.p_data_cback = bta_hl_mcap_data_cback; if (MCA_CreateDep((tMCA_HANDLE)p_acb->app_handle, - &(p_acb->sup_feature.mdep[0].mdep_id), - &mca_cs) == MCA_SUCCESS) - { - if (p_acb->sup_feature.mdep[0].mdep_id != BTA_HL_ECHO_TEST_MDEP_ID) - { - status = BTA_HL_STATUS_MCAP_REG_FAIL; - APPL_TRACE_ERROR("BAD MDEP ID for echo test mdep_id=%d", - p_acb->sup_feature.mdep[0].mdep_id ); + &(p_acb->sup_feature.mdep[i].mdep_id), + &mca_cs) == MCA_SUCCESS) { + if (bta_hl_co_get_mdep_config(p_acb->app_id, i, mdep_counter, + p_acb->sup_feature.mdep[i].mdep_id, + &p_acb->sup_feature.mdep[i].mdep_cfg)) { + if (p_acb->sup_feature.mdep[i].mdep_cfg.mdep_role == + BTA_HL_MDEP_ROLE_SOURCE) { + p_acb->sup_feature.app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SOURCE; + } else if (p_acb->sup_feature.mdep[i].mdep_cfg.mdep_role == + BTA_HL_MDEP_ROLE_SINK) { + p_acb->sup_feature.app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SINK; + } else { + status = BTA_HL_STATUS_MDEP_CO_FAIL; + break; } + p_acb->sup_feature.mdep[i].ori_app_id = p_acb->app_id; + APPL_TRACE_DEBUG("index %d ori_app_id %d", i, + p_acb->sup_feature.mdep[i].ori_app_id); + } else { + status = BTA_HL_STATUS_MDEP_CO_FAIL; + break; + } + } else { + status = BTA_HL_STATUS_MCAP_REG_FAIL; + break; } - else - { - status = BTA_HL_STATUS_MCAP_REG_FAIL; - APPL_TRACE_ERROR("MCA_CreateDep for echo test(mdep_id=0) failed"); - } - + } - if ((status == BTA_HL_STATUS_OK) && - bta_hl_co_get_num_of_mdep(p_acb->app_id, &num_of_mdeps)) - { - p_acb->sup_feature.num_of_mdeps = num_of_mdeps+1; - - for (i=1; isup_feature.num_of_mdeps; i++) - { - mca_cs.type = MCA_TDEP_DATA; - mca_cs.max_mdl = BTA_HL_NUM_MDLS_PER_MDEP; - mca_cs.p_data_cback = bta_hl_mcap_data_cback; - - if (MCA_CreateDep((tMCA_HANDLE)p_acb->app_handle, - &(p_acb->sup_feature.mdep[i].mdep_id), &mca_cs) == MCA_SUCCESS) - { - if (bta_hl_co_get_mdep_config(p_acb->app_id, - i,mdep_counter, - p_acb->sup_feature.mdep[i].mdep_id, - &p_acb->sup_feature.mdep[i].mdep_cfg)) - { - if (p_acb->sup_feature.mdep[i].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SOURCE) - { - p_acb->sup_feature.app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SOURCE; - } - else if (p_acb->sup_feature.mdep[i].mdep_cfg.mdep_role == BTA_HL_MDEP_ROLE_SINK) - { - p_acb->sup_feature.app_role_mask |= BTA_HL_MDEP_ROLE_MASK_SINK; - } - else - { - status = BTA_HL_STATUS_MDEP_CO_FAIL; - break; - } - p_acb->sup_feature.mdep[i].ori_app_id = p_acb->app_id; - APPL_TRACE_DEBUG("index %d ori_app_id %d", i, - p_acb->sup_feature.mdep[i].ori_app_id); - } - else - { - status = BTA_HL_STATUS_MDEP_CO_FAIL; - break; - } - } - else - { - status = BTA_HL_STATUS_MCAP_REG_FAIL; - break; - } - } - - - - if ((status == BTA_HL_STATUS_OK) && - (p_acb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE)) - { - /* this is a source only applciation */ - p_acb->sup_feature.advertize_source_sdp = - bta_hl_co_advrtise_source_sdp(p_acb->app_id); - } + if ((status == BTA_HL_STATUS_OK) && + (p_acb->sup_feature.app_role_mask == BTA_HL_MDEP_ROLE_MASK_SOURCE)) { + /* this is a source only applciation */ + p_acb->sup_feature.advertize_source_sdp = + bta_hl_co_advrtise_source_sdp(p_acb->app_id); + } - if ((status == BTA_HL_STATUS_OK)&& - (!bta_hl_co_get_echo_config(p_acb->app_id, &p_acb->sup_feature.echo_cfg))) - { - status = BTA_HL_STATUS_ECHO_CO_FAIL; - } + if ((status == BTA_HL_STATUS_OK) && + (!bta_hl_co_get_echo_config(p_acb->app_id, + &p_acb->sup_feature.echo_cfg))) { + status = BTA_HL_STATUS_ECHO_CO_FAIL; + } - if ((status == BTA_HL_STATUS_OK)&& - (!bta_hl_co_load_mdl_config(p_acb->app_id, BTA_HL_NUM_MDL_CFGS, &p_acb->mdl_cfg[0]))) - { - status = BTA_HL_STATUS_MDL_CFG_CO_FAIL; - } - } - else - { - status = BTA_HL_STATUS_MDEP_CO_FAIL; - } - } - else - { - status = BTA_HL_STATUS_MCAP_REG_FAIL; + if ((status == BTA_HL_STATUS_OK) && + (!bta_hl_co_load_mdl_config(p_acb->app_id, BTA_HL_NUM_MDL_CFGS, + &p_acb->mdl_cfg[0]))) { + status = BTA_HL_STATUS_MDL_CFG_CO_FAIL; + } + } else { + status = BTA_HL_STATUS_MDEP_CO_FAIL; } + } else { + status = BTA_HL_STATUS_MCAP_REG_FAIL; + } - if (status == BTA_HL_STATUS_OK) - { - status = bta_hl_sdp_register(app_idx); - } + if (status == BTA_HL_STATUS_OK) { + status = bta_hl_sdp_register(app_idx); + } - return status; + return status; } - /******************************************************************************* * * Function bta_hl_discard_data @@ -2441,27 +2138,24 @@ tBTA_HL_STATUS bta_hl_app_registration(uint8_t app_idx) * Returns void * ******************************************************************************/ -void bta_hl_discard_data(uint16_t event, tBTA_HL_DATA *p_data) -{ - +void bta_hl_discard_data(uint16_t event, tBTA_HL_DATA* p_data) { #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_ERROR("BTA HL Discard event=%s",bta_hl_evt_code(event)); + APPL_TRACE_ERROR("BTA HL Discard event=%s", bta_hl_evt_code(event)); #endif - switch (event) - { - case BTA_HL_API_SEND_DATA_EVT: - break; + switch (event) { + case BTA_HL_API_SEND_DATA_EVT: + break; - case BTA_HL_MCA_RCV_DATA_EVT: - osi_free_and_reset((void **)&p_data->mca_rcv_data_evt.p_pkt); - break; + case BTA_HL_MCA_RCV_DATA_EVT: + osi_free_and_reset((void**)&p_data->mca_rcv_data_evt.p_pkt); + break; - default: - /*Nothing to free*/ - break; - } + default: + /*Nothing to free*/ + break; + } } /******************************************************************************* @@ -2473,67 +2167,60 @@ void bta_hl_discard_data(uint16_t event, tBTA_HL_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_hl_save_mdl_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx ) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - uint8_t mdl_cfg_idx; - tBTA_HL_MDL_ID mdl_id; - bool found=true; - tBTA_HL_MDL_CFG mdl_cfg; - tBTA_HL_MDEP *p_mdep_cfg; - tBTA_HL_L2CAP_CFG_INFO l2cap_cfg; - uint8_t time_val = 0; - mdl_id = p_dcb->mdl_id; - if (!bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, mdl_id, &mdl_cfg_idx)) - { - if (!bta_hl_find_avail_mdl_cfg_idx(app_idx, mcl_idx, &mdl_cfg_idx)) - { - APPL_TRACE_ERROR("No space to save the MDL config"); - found= false; /*no space available*/ - } - } - - if (found) - { - bta_hl_get_l2cap_cfg(p_dcb->mdl_handle, &l2cap_cfg); - if (!bta_hl_get_cur_time(app_idx, &time_val )) - { - bta_hl_compact_mdl_cfg_time(app_idx,p_dcb->local_mdep_id); - bta_hl_get_cur_time(app_idx, &time_val); - } - mdl_cfg.active = true; - mdl_cfg.time = time_val; - mdl_cfg.mdl_id = p_dcb->mdl_id; - mdl_cfg.dch_mode = p_dcb->dch_mode; - mdl_cfg.mtu = l2cap_cfg.mtu; - mdl_cfg.fcs = l2cap_cfg.fcs; - - bdcpy(mdl_cfg.peer_bd_addr, p_mcb->bd_addr); - mdl_cfg.local_mdep_id= p_dcb->local_mdep_id; - p_mdep_cfg = &p_acb->sup_feature.mdep[p_dcb->local_mdep_cfg_idx]; - mdl_cfg.local_mdep_role= p_mdep_cfg->mdep_cfg.mdep_role; - memcpy(&p_acb->mdl_cfg[mdl_cfg_idx], &mdl_cfg, sizeof(tBTA_HL_MDL_CFG)); - bta_hl_co_save_mdl(mdl_cfg.local_mdep_id, mdl_cfg_idx, &mdl_cfg); - } +void bta_hl_save_mdl_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + uint8_t mdl_cfg_idx; + tBTA_HL_MDL_ID mdl_id; + bool found = true; + tBTA_HL_MDL_CFG mdl_cfg; + tBTA_HL_MDEP* p_mdep_cfg; + tBTA_HL_L2CAP_CFG_INFO l2cap_cfg; + uint8_t time_val = 0; + mdl_id = p_dcb->mdl_id; + if (!bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, mdl_id, &mdl_cfg_idx)) { + if (!bta_hl_find_avail_mdl_cfg_idx(app_idx, mcl_idx, &mdl_cfg_idx)) { + APPL_TRACE_ERROR("No space to save the MDL config"); + found = false; /*no space available*/ + } + } + + if (found) { + bta_hl_get_l2cap_cfg(p_dcb->mdl_handle, &l2cap_cfg); + if (!bta_hl_get_cur_time(app_idx, &time_val)) { + bta_hl_compact_mdl_cfg_time(app_idx, p_dcb->local_mdep_id); + bta_hl_get_cur_time(app_idx, &time_val); + } + mdl_cfg.active = true; + mdl_cfg.time = time_val; + mdl_cfg.mdl_id = p_dcb->mdl_id; + mdl_cfg.dch_mode = p_dcb->dch_mode; + mdl_cfg.mtu = l2cap_cfg.mtu; + mdl_cfg.fcs = l2cap_cfg.fcs; + + bdcpy(mdl_cfg.peer_bd_addr, p_mcb->bd_addr); + mdl_cfg.local_mdep_id = p_dcb->local_mdep_id; + p_mdep_cfg = &p_acb->sup_feature.mdep[p_dcb->local_mdep_cfg_idx]; + mdl_cfg.local_mdep_role = p_mdep_cfg->mdep_cfg.mdep_role; + memcpy(&p_acb->mdl_cfg[mdl_cfg_idx], &mdl_cfg, sizeof(tBTA_HL_MDL_CFG)); + bta_hl_co_save_mdl(mdl_cfg.local_mdep_id, mdl_cfg_idx, &mdl_cfg); + } #if (BTA_HL_DEBUG == TRUE) - if (found) - { - if (p_dcb->mtu != l2cap_cfg.mtu) - { - APPL_TRACE_WARNING("MCAP and L2CAP peer mtu size out of sync from MCAP mtu=%d from l2cap mtu=%d", - p_dcb->mtu, l2cap_cfg.mtu); - } - APPL_TRACE_DEBUG("bta_hl_save_mdl_cfg saved=%d", found); - APPL_TRACE_DEBUG("Saved. L2cap cfg mdl_id=%d mtu=%d fcs=%d dch_mode=%d", - mdl_cfg.mdl_id, mdl_cfg.mtu, mdl_cfg.fcs, mdl_cfg.dch_mode); - } + if (found) { + if (p_dcb->mtu != l2cap_cfg.mtu) { + APPL_TRACE_WARNING( + "MCAP and L2CAP peer mtu size out of sync from MCAP mtu=%d from " + "l2cap mtu=%d", + p_dcb->mtu, l2cap_cfg.mtu); + } + APPL_TRACE_DEBUG("bta_hl_save_mdl_cfg saved=%d", found); + APPL_TRACE_DEBUG("Saved. L2cap cfg mdl_id=%d mtu=%d fcs=%d dch_mode=%d", + mdl_cfg.mdl_id, mdl_cfg.mtu, mdl_cfg.fcs, + mdl_cfg.dch_mode); + } #endif - - - } /******************************************************************************* @@ -2544,87 +2231,76 @@ void bta_hl_save_mdl_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx ) * * Returns void ******************************************************************************/ -void bta_hl_set_dch_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx,tBTA_HL_DATA *p_data) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - uint8_t l2cap_mode = L2CAP_FCR_ERTM_MODE; - tBTA_HL_SUP_FEATURE *p_sup_feature= &p_acb->sup_feature; - uint8_t local_mdep_cfg_idx = p_dcb->local_mdep_cfg_idx; - - switch (p_dcb->dch_oper) - { - case BTA_HL_DCH_OP_LOCAL_RECONNECT: - case BTA_HL_DCH_OP_REMOTE_RECONNECT: - if (p_dcb->dch_mode == BTA_HL_DCH_MODE_STREAMING) - l2cap_mode = L2CAP_FCR_STREAM_MODE; - break; - case BTA_HL_DCH_OP_LOCAL_OPEN: - if (p_data->mca_evt.mca_data.create_cfm.cfg == BTA_HL_DCH_CFG_STREAMING) - l2cap_mode = L2CAP_FCR_STREAM_MODE; - break; - case BTA_HL_DCH_OP_REMOTE_OPEN: - if (p_dcb->local_cfg == BTA_HL_DCH_CFG_STREAMING ) - l2cap_mode = L2CAP_FCR_STREAM_MODE; - break; - default: - APPL_TRACE_ERROR("Invalid dch oper=%d for set dch chan cfg", p_dcb->dch_oper); - break; - } - p_dcb->chnl_cfg.fcr_opt.mode = l2cap_mode; - p_dcb->chnl_cfg.fcr_opt.mps = bta_hl_set_mps(p_dcb->max_rx_apdu_size); - p_dcb->chnl_cfg.fcr_opt.tx_win_sz = bta_hl_set_tx_win_size(p_dcb->max_rx_apdu_size, - p_dcb->chnl_cfg.fcr_opt.mps); - p_dcb->chnl_cfg.fcr_opt.max_transmit= BTA_HL_L2C_MAX_TRANSMIT; - p_dcb->chnl_cfg.fcr_opt.rtrans_tout = BTA_HL_L2C_RTRANS_TOUT; - p_dcb->chnl_cfg.fcr_opt.mon_tout = BTA_HL_L2C_MON_TOUT; - - p_dcb->chnl_cfg.user_rx_buf_size = bta_hl_set_user_rx_buf_size(p_dcb->max_rx_apdu_size); - p_dcb->chnl_cfg.user_tx_buf_size = bta_hl_set_user_tx_buf_size(p_dcb->max_tx_apdu_size); - p_dcb->chnl_cfg.fcr_rx_buf_size = L2CAP_INVALID_ERM_BUF_SIZE; - p_dcb->chnl_cfg.fcr_tx_buf_size = L2CAP_INVALID_ERM_BUF_SIZE; - p_dcb->chnl_cfg.data_mtu = p_dcb->max_rx_apdu_size; - - p_dcb->chnl_cfg.fcs = BTA_HL_MCA_NO_FCS; - if (local_mdep_cfg_idx != BTA_HL_ECHO_TEST_MDEP_CFG_IDX) - { - if (p_sup_feature->mdep[local_mdep_cfg_idx].mdep_cfg.mdep_role == - BTA_HL_MDEP_ROLE_SOURCE) - { - p_dcb->chnl_cfg.fcs = BTA_HL_DEFAULT_SOURCE_FCS; - } - } - else - { - p_dcb->chnl_cfg.fcs = BTA_HL_MCA_USE_FCS; - } +void bta_hl_set_dch_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx, + tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + uint8_t l2cap_mode = L2CAP_FCR_ERTM_MODE; + tBTA_HL_SUP_FEATURE* p_sup_feature = &p_acb->sup_feature; + uint8_t local_mdep_cfg_idx = p_dcb->local_mdep_cfg_idx; + + switch (p_dcb->dch_oper) { + case BTA_HL_DCH_OP_LOCAL_RECONNECT: + case BTA_HL_DCH_OP_REMOTE_RECONNECT: + if (p_dcb->dch_mode == BTA_HL_DCH_MODE_STREAMING) + l2cap_mode = L2CAP_FCR_STREAM_MODE; + break; + case BTA_HL_DCH_OP_LOCAL_OPEN: + if (p_data->mca_evt.mca_data.create_cfm.cfg == BTA_HL_DCH_CFG_STREAMING) + l2cap_mode = L2CAP_FCR_STREAM_MODE; + break; + case BTA_HL_DCH_OP_REMOTE_OPEN: + if (p_dcb->local_cfg == BTA_HL_DCH_CFG_STREAMING) + l2cap_mode = L2CAP_FCR_STREAM_MODE; + break; + default: + APPL_TRACE_ERROR("Invalid dch oper=%d for set dch chan cfg", + p_dcb->dch_oper); + break; + } + p_dcb->chnl_cfg.fcr_opt.mode = l2cap_mode; + p_dcb->chnl_cfg.fcr_opt.mps = bta_hl_set_mps(p_dcb->max_rx_apdu_size); + p_dcb->chnl_cfg.fcr_opt.tx_win_sz = bta_hl_set_tx_win_size( + p_dcb->max_rx_apdu_size, p_dcb->chnl_cfg.fcr_opt.mps); + p_dcb->chnl_cfg.fcr_opt.max_transmit = BTA_HL_L2C_MAX_TRANSMIT; + p_dcb->chnl_cfg.fcr_opt.rtrans_tout = BTA_HL_L2C_RTRANS_TOUT; + p_dcb->chnl_cfg.fcr_opt.mon_tout = BTA_HL_L2C_MON_TOUT; + + p_dcb->chnl_cfg.user_rx_buf_size = + bta_hl_set_user_rx_buf_size(p_dcb->max_rx_apdu_size); + p_dcb->chnl_cfg.user_tx_buf_size = + bta_hl_set_user_tx_buf_size(p_dcb->max_tx_apdu_size); + p_dcb->chnl_cfg.fcr_rx_buf_size = L2CAP_INVALID_ERM_BUF_SIZE; + p_dcb->chnl_cfg.fcr_tx_buf_size = L2CAP_INVALID_ERM_BUF_SIZE; + p_dcb->chnl_cfg.data_mtu = p_dcb->max_rx_apdu_size; + + p_dcb->chnl_cfg.fcs = BTA_HL_MCA_NO_FCS; + if (local_mdep_cfg_idx != BTA_HL_ECHO_TEST_MDEP_CFG_IDX) { + if (p_sup_feature->mdep[local_mdep_cfg_idx].mdep_cfg.mdep_role == + BTA_HL_MDEP_ROLE_SOURCE) { + p_dcb->chnl_cfg.fcs = BTA_HL_DEFAULT_SOURCE_FCS; + } + } else { + p_dcb->chnl_cfg.fcs = BTA_HL_MCA_USE_FCS; + } #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("L2CAP Params l2cap_mode[3-ERTM 4-STREAM]=%d", l2cap_mode); - APPL_TRACE_DEBUG("Use FCS =%s mtu=%d", ((p_dcb->chnl_cfg.fcs & 1)?"YES":"NO"), - p_dcb->chnl_cfg.data_mtu); - APPL_TRACE_DEBUG("tx_win_sz=%d, max_transmit=%d, rtrans_tout=%d, mon_tout=%d, mps=%d", - p_dcb->chnl_cfg.fcr_opt.tx_win_sz, - p_dcb->chnl_cfg.fcr_opt.max_transmit, - p_dcb->chnl_cfg.fcr_opt.rtrans_tout, - p_dcb->chnl_cfg.fcr_opt.mon_tout, - p_dcb->chnl_cfg.fcr_opt.mps); - - APPL_TRACE_DEBUG("USER rx_buf_size=%d, tx_buf_size=%d, FCR rx_buf_size=%d, tx_buf_size=%d", - p_dcb->chnl_cfg.user_rx_buf_size, - p_dcb->chnl_cfg.user_tx_buf_size, - p_dcb->chnl_cfg.fcr_rx_buf_size, - p_dcb->chnl_cfg.fcr_tx_buf_size); + APPL_TRACE_DEBUG("L2CAP Params l2cap_mode[3-ERTM 4-STREAM]=%d", l2cap_mode); + APPL_TRACE_DEBUG("Use FCS =%s mtu=%d", + ((p_dcb->chnl_cfg.fcs & 1) ? "YES" : "NO"), + p_dcb->chnl_cfg.data_mtu); + APPL_TRACE_DEBUG( + "tx_win_sz=%d, max_transmit=%d, rtrans_tout=%d, mon_tout=%d, mps=%d", + p_dcb->chnl_cfg.fcr_opt.tx_win_sz, p_dcb->chnl_cfg.fcr_opt.max_transmit, + p_dcb->chnl_cfg.fcr_opt.rtrans_tout, p_dcb->chnl_cfg.fcr_opt.mon_tout, + p_dcb->chnl_cfg.fcr_opt.mps); + + APPL_TRACE_DEBUG( + "USER rx_buf_size=%d, tx_buf_size=%d, FCR rx_buf_size=%d, tx_buf_size=%d", + p_dcb->chnl_cfg.user_rx_buf_size, p_dcb->chnl_cfg.user_tx_buf_size, + p_dcb->chnl_cfg.fcr_rx_buf_size, p_dcb->chnl_cfg.fcr_tx_buf_size); #endif - - - - - - - - } /******************************************************************************* @@ -2635,68 +2311,54 @@ void bta_hl_set_dch_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx,t * * Returns bool - true - operation is successful ******************************************************************************/ -bool bta_hl_get_l2cap_cfg(tBTA_HL_MDL_HANDLE mdl_hnd, tBTA_HL_L2CAP_CFG_INFO *p_cfg) -{ - bool success = false; - uint16_t lcid; - tL2CAP_CFG_INFO *p_our_cfg; - tL2CAP_CH_CFG_BITS our_cfg_bits; - tL2CAP_CFG_INFO *p_peer_cfg; - tL2CAP_CH_CFG_BITS peer_cfg_bits; - - lcid = MCA_GetL2CapChannel((tMCA_DL) mdl_hnd); - if ( lcid && - L2CA_GetCurrentConfig(lcid, &p_our_cfg, &our_cfg_bits, &p_peer_cfg, - &peer_cfg_bits)) - { - p_cfg->fcs = BTA_HL_MCA_NO_FCS; - if (our_cfg_bits & L2CAP_CH_CFG_MASK_FCS) - { - p_cfg->fcs |= p_our_cfg->fcs; - } - else - { - p_cfg->fcs = BTA_HL_MCA_USE_FCS; - } - - if (p_cfg->fcs != BTA_HL_MCA_USE_FCS ) - { - if (peer_cfg_bits & L2CAP_CH_CFG_MASK_FCS) - { - p_cfg->fcs |= p_peer_cfg->fcs; - } - else - { - p_cfg->fcs = BTA_HL_MCA_USE_FCS; - } - } - - p_cfg->mtu =0; - if (peer_cfg_bits & L2CAP_CH_CFG_MASK_MTU) - { - p_cfg->mtu = p_peer_cfg->mtu; - } - else - { - p_cfg->mtu = L2CAP_DEFAULT_MTU; - } - success = true; - } - else - { +bool bta_hl_get_l2cap_cfg(tBTA_HL_MDL_HANDLE mdl_hnd, + tBTA_HL_L2CAP_CFG_INFO* p_cfg) { + bool success = false; + uint16_t lcid; + tL2CAP_CFG_INFO* p_our_cfg; + tL2CAP_CH_CFG_BITS our_cfg_bits; + tL2CAP_CFG_INFO* p_peer_cfg; + tL2CAP_CH_CFG_BITS peer_cfg_bits; + + lcid = MCA_GetL2CapChannel((tMCA_DL)mdl_hnd); + if (lcid && L2CA_GetCurrentConfig(lcid, &p_our_cfg, &our_cfg_bits, + &p_peer_cfg, &peer_cfg_bits)) { + p_cfg->fcs = BTA_HL_MCA_NO_FCS; + if (our_cfg_bits & L2CAP_CH_CFG_MASK_FCS) { + p_cfg->fcs |= p_our_cfg->fcs; + } else { + p_cfg->fcs = BTA_HL_MCA_USE_FCS; + } + + if (p_cfg->fcs != BTA_HL_MCA_USE_FCS) { + if (peer_cfg_bits & L2CAP_CH_CFG_MASK_FCS) { + p_cfg->fcs |= p_peer_cfg->fcs; + } else { + p_cfg->fcs = BTA_HL_MCA_USE_FCS; + } + } + + p_cfg->mtu = 0; + if (peer_cfg_bits & L2CAP_CH_CFG_MASK_MTU) { + p_cfg->mtu = p_peer_cfg->mtu; + } else { p_cfg->mtu = L2CAP_DEFAULT_MTU; - p_cfg->fcs = BTA_HL_L2C_NO_FCS; } + success = true; + } else { + p_cfg->mtu = L2CAP_DEFAULT_MTU; + p_cfg->fcs = BTA_HL_L2C_NO_FCS; + } #if (BTA_HL_DEBUG == TRUE) - if (!success) - { - APPL_TRACE_DEBUG("bta_hl_get_l2cap_cfg success=%d mdl=%d lcid=%d", success, mdl_hnd, lcid); - APPL_TRACE_DEBUG("l2cap mtu=%d fcs=%d", p_cfg->mtu, p_cfg->fcs); - } + if (!success) { + APPL_TRACE_DEBUG("bta_hl_get_l2cap_cfg success=%d mdl=%d lcid=%d", success, + mdl_hnd, lcid); + APPL_TRACE_DEBUG("l2cap mtu=%d fcs=%d", p_cfg->mtu, p_cfg->fcs); + } #endif - return success; + return success; } /******************************************************************************* @@ -2707,133 +2369,129 @@ bool bta_hl_get_l2cap_cfg(tBTA_HL_MDL_HANDLE mdl_hnd, tBTA_HL_L2CAP_CFG_INFO *p_ * * Returns bool - true - validation is successful ******************************************************************************/ -bool bta_hl_validate_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, uint8_t mdl_idx) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MDL_CB *p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - bool success = false; - uint8_t mdl_cfg_idx = 0; - tBTA_HL_L2CAP_CFG_INFO l2cap_cfg; - bool get_l2cap_result, get_mdl_result; - - get_l2cap_result = bta_hl_get_l2cap_cfg(p_dcb->mdl_handle, &l2cap_cfg); - get_mdl_result = bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, p_dcb->mdl_id, &mdl_cfg_idx); - - if (get_l2cap_result && get_mdl_result) - { - if ((p_acb->mdl_cfg[mdl_cfg_idx].mtu <= l2cap_cfg.mtu) && - (p_acb->mdl_cfg[mdl_cfg_idx].fcs == l2cap_cfg.fcs) && - (p_acb->mdl_cfg[mdl_cfg_idx].dch_mode == p_dcb->dch_mode)) - { - success = true; - } - } - +bool bta_hl_validate_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, + uint8_t mdl_idx) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MDL_CB* p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + bool success = false; + uint8_t mdl_cfg_idx = 0; + tBTA_HL_L2CAP_CFG_INFO l2cap_cfg; + bool get_l2cap_result, get_mdl_result; -#if (BTA_HL_DEBUG == TRUE) + get_l2cap_result = bta_hl_get_l2cap_cfg(p_dcb->mdl_handle, &l2cap_cfg); + get_mdl_result = + bta_hl_find_mdl_cfg_idx(app_idx, mcl_idx, p_dcb->mdl_id, &mdl_cfg_idx); - if (p_dcb->mtu != l2cap_cfg.mtu) - { - APPL_TRACE_WARNING("MCAP and L2CAP peer mtu size out of sync from MCAP mtu=%d from l2cap mtu=%d", - p_dcb->mtu, l2cap_cfg.mtu); + if (get_l2cap_result && get_mdl_result) { + if ((p_acb->mdl_cfg[mdl_cfg_idx].mtu <= l2cap_cfg.mtu) && + (p_acb->mdl_cfg[mdl_cfg_idx].fcs == l2cap_cfg.fcs) && + (p_acb->mdl_cfg[mdl_cfg_idx].dch_mode == p_dcb->dch_mode)) { + success = true; } + } - if (!success) - { - APPL_TRACE_DEBUG("bta_hl_validate_chan_cfg success=%d app_idx=%d mcl_idx=%d mdl_idx=%d",success, app_idx, mcl_idx, mdl_idx); - APPL_TRACE_DEBUG("Cur. L2cap cfg mtu=%d fcs=%d dch_mode=%d", l2cap_cfg.mtu, l2cap_cfg.fcs, p_dcb->dch_mode); - APPL_TRACE_DEBUG("From saved: L2cap cfg mtu=%d fcs=%d dch_mode=%d", p_acb->mdl_cfg[mdl_cfg_idx].mtu, - p_acb->mdl_cfg[mdl_cfg_idx].fcs , p_acb->mdl_cfg[mdl_cfg_idx].dch_mode); - } +#if (BTA_HL_DEBUG == TRUE) + + if (p_dcb->mtu != l2cap_cfg.mtu) { + APPL_TRACE_WARNING( + "MCAP and L2CAP peer mtu size out of sync from MCAP mtu=%d from l2cap " + "mtu=%d", + p_dcb->mtu, l2cap_cfg.mtu); + } + + if (!success) { + APPL_TRACE_DEBUG( + "bta_hl_validate_chan_cfg success=%d app_idx=%d mcl_idx=%d mdl_idx=%d", + success, app_idx, mcl_idx, mdl_idx); + APPL_TRACE_DEBUG("Cur. L2cap cfg mtu=%d fcs=%d dch_mode=%d", l2cap_cfg.mtu, + l2cap_cfg.fcs, p_dcb->dch_mode); + APPL_TRACE_DEBUG("From saved: L2cap cfg mtu=%d fcs=%d dch_mode=%d", + p_acb->mdl_cfg[mdl_cfg_idx].mtu, + p_acb->mdl_cfg[mdl_cfg_idx].fcs, + p_acb->mdl_cfg[mdl_cfg_idx].dch_mode); + } #endif - return success; + return success; } - /******************************************************************************* * * Function bta_hl_is_cong_on * - * Description This function checks whether the congestion condition is on or not + * Description This function checks whether the congestion condition is on or + *not * * Returns bool - true DCH is congested * false not congested * ******************************************************************************/ -bool bta_hl_is_cong_on(uint8_t app_id, BD_ADDR bd_addr, tBTA_HL_MDL_ID mdl_id) +bool bta_hl_is_cong_on(uint8_t app_id, BD_ADDR bd_addr, tBTA_HL_MDL_ID mdl_id) { - tBTA_HL_MDL_CB *p_dcb; - uint8_t app_idx = 0, mcl_idx, mdl_idx; - bool cong_status = true; - - if (bta_hl_find_app_idx(app_id, &app_idx)) - { - if (bta_hl_find_mcl_idx(app_idx, bd_addr, &mcl_idx )) - { - if (bta_hl_find_mdl_idx(app_idx, mcl_idx, mdl_id, &mdl_idx )) - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - cong_status = p_dcb->cong; - } - } + tBTA_HL_MDL_CB* p_dcb; + uint8_t app_idx = 0, mcl_idx, mdl_idx; + bool cong_status = true; + + if (bta_hl_find_app_idx(app_id, &app_idx)) { + if (bta_hl_find_mcl_idx(app_idx, bd_addr, &mcl_idx)) { + if (bta_hl_find_mdl_idx(app_idx, mcl_idx, mdl_id, &mdl_idx)) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + cong_status = p_dcb->cong; + } } + } - return cong_status; + return cong_status; } /******************************************************************************* * * Function bta_hl_check_cch_close * - * Description This function checks whether there is a pending CCH close request + * Description This function checks whether there is a pending CCH close + *request * or not * * Returns void ******************************************************************************/ -void bta_hl_check_cch_close(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_data, bool check_dch_setup ) -{ - tBTA_HL_MCL_CB *p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - tBTA_HL_MDL_CB *p_dcb; - uint8_t mdl_idx; +void bta_hl_check_cch_close(uint8_t app_idx, uint8_t mcl_idx, + tBTA_HL_DATA* p_data, bool check_dch_setup) { + tBTA_HL_MCL_CB* p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + tBTA_HL_MDL_CB* p_dcb; + uint8_t mdl_idx; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_check_cch_close cch_close_dch_oper=%d",p_mcb->cch_close_dch_oper ); + APPL_TRACE_DEBUG("bta_hl_check_cch_close cch_close_dch_oper=%d", + p_mcb->cch_close_dch_oper); #endif - if (p_mcb->cch_oper == BTA_HL_CCH_OP_LOCAL_CLOSE) - { - if (check_dch_setup && bta_hl_find_dch_setup_mdl_idx(app_idx, mcl_idx, &mdl_idx)) - { - p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); - if (!p_mcb->rsp_tout) - { - p_mcb->cch_close_dch_oper = BTA_HL_CCH_CLOSE_OP_DCH_ABORT; - - if (!p_dcb->abort_oper) - { - p_dcb->abort_oper |= BTA_HL_ABORT_CCH_CLOSE_MASK; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, p_data); - } - } - else - { - p_mcb->cch_close_dch_oper = BTA_HL_CCH_CLOSE_OP_DCH_CLOSE; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); - } - } - else if (bta_hl_find_an_active_mdl_idx(app_idx, mcl_idx,&mdl_idx)) - { - p_mcb->cch_close_dch_oper = BTA_HL_CCH_CLOSE_OP_DCH_CLOSE; - bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, p_data); - } - else - { - p_mcb->cch_close_dch_oper = BTA_HL_CCH_CLOSE_OP_DCH_NONE; - bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_EVT, p_data); + if (p_mcb->cch_oper == BTA_HL_CCH_OP_LOCAL_CLOSE) { + if (check_dch_setup && + bta_hl_find_dch_setup_mdl_idx(app_idx, mcl_idx, &mdl_idx)) { + p_dcb = BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx); + if (!p_mcb->rsp_tout) { + p_mcb->cch_close_dch_oper = BTA_HL_CCH_CLOSE_OP_DCH_ABORT; + + if (!p_dcb->abort_oper) { + p_dcb->abort_oper |= BTA_HL_ABORT_CCH_CLOSE_MASK; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_ABORT_EVT, + p_data); } + } else { + p_mcb->cch_close_dch_oper = BTA_HL_CCH_CLOSE_OP_DCH_CLOSE; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, + BTA_HL_DCH_CLOSE_CMPL_EVT, p_data); + } + } else if (bta_hl_find_an_active_mdl_idx(app_idx, mcl_idx, &mdl_idx)) { + p_mcb->cch_close_dch_oper = BTA_HL_CCH_CLOSE_OP_DCH_CLOSE; + bta_hl_dch_sm_execute(app_idx, mcl_idx, mdl_idx, BTA_HL_DCH_CLOSE_EVT, + p_data); + } else { + p_mcb->cch_close_dch_oper = BTA_HL_CCH_CLOSE_OP_DCH_NONE; + bta_hl_cch_sm_execute(app_idx, mcl_idx, BTA_HL_CCH_CLOSE_EVT, p_data); } + } } /******************************************************************************* @@ -2845,31 +2503,28 @@ void bta_hl_check_cch_close(uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_DATA *p_da * Returns void * ******************************************************************************/ -void bta_hl_clean_app(uint8_t app_idx) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - int i, num_act_apps=0; +void bta_hl_clean_app(uint8_t app_idx) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + int i, num_act_apps = 0; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_clean_app"); + APPL_TRACE_DEBUG("bta_hl_clean_app"); #endif - MCA_Deregister((tMCA_HANDLE)p_acb->app_handle); + MCA_Deregister((tMCA_HANDLE)p_acb->app_handle); - if (p_acb->sdp_handle) SDP_DeleteRecord(p_acb->sdp_handle); + if (p_acb->sdp_handle) SDP_DeleteRecord(p_acb->sdp_handle); - memset((void *) p_acb, 0, sizeof(tBTA_HL_APP_CB)); + memset((void*)p_acb, 0, sizeof(tBTA_HL_APP_CB)); - /* check any application is still active */ - for (i=0; i < BTA_HL_NUM_APPS ; i ++) - { - p_acb = BTA_HL_GET_APP_CB_PTR(i); - if (p_acb->in_use) num_act_apps++; - } + /* check any application is still active */ + for (i = 0; i < BTA_HL_NUM_APPS; i++) { + p_acb = BTA_HL_GET_APP_CB_PTR(i); + if (p_acb->in_use) num_act_apps++; + } - if (!num_act_apps) - { - bta_sys_remove_uuid(UUID_SERVCLASS_HDP_PROFILE); - } + if (!num_act_apps) { + bta_sys_remove_uuid(UUID_SERVCLASS_HDP_PROFILE); + } } /******************************************************************************* @@ -2881,45 +2536,39 @@ void bta_hl_clean_app(uint8_t app_idx) * * Returns void ******************************************************************************/ -void bta_hl_check_deregistration(uint8_t app_idx, tBTA_HL_DATA *p_data ) -{ - tBTA_HL_APP_CB *p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - tBTA_HL_MCL_CB *p_mcb; - uint8_t mcl_idx; - tBTA_HL evt_data; +void bta_hl_check_deregistration(uint8_t app_idx, tBTA_HL_DATA* p_data) { + tBTA_HL_APP_CB* p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + tBTA_HL_MCL_CB* p_mcb; + uint8_t mcl_idx; + tBTA_HL evt_data; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_check_deregistration"); + APPL_TRACE_DEBUG("bta_hl_check_deregistration"); #endif - if (p_acb->deregistering) - { - if (bta_hl_find_an_in_use_mcl_idx(app_idx, &mcl_idx)) - { - p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); - if (p_mcb->cch_oper != BTA_HL_CCH_OP_LOCAL_CLOSE) - { - if (p_mcb->cch_state == BTA_HL_CCH_OPENING_ST) - p_mcb->force_close_local_cch_opening = true; - p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_CLOSE; - APPL_TRACE_DEBUG("p_mcb->force_close_local_cch_opening=%d", p_mcb->force_close_local_cch_opening ); - bta_hl_check_cch_close(app_idx,mcl_idx,p_data, true); - } - } - else - { - /* all cchs are closed */ - evt_data.dereg_cfm.app_handle = p_acb->app_handle; - evt_data.dereg_cfm.app_id = p_data->api_dereg.app_id; - evt_data.dereg_cfm.status = BTA_HL_STATUS_OK; - p_acb->p_cback(BTA_HL_DEREGISTER_CFM_EVT, (tBTA_HL *) &evt_data ); - bta_hl_clean_app(app_idx); - bta_hl_check_disable(p_data); - } + if (p_acb->deregistering) { + if (bta_hl_find_an_in_use_mcl_idx(app_idx, &mcl_idx)) { + p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); + if (p_mcb->cch_oper != BTA_HL_CCH_OP_LOCAL_CLOSE) { + if (p_mcb->cch_state == BTA_HL_CCH_OPENING_ST) + p_mcb->force_close_local_cch_opening = true; + p_mcb->cch_oper = BTA_HL_CCH_OP_LOCAL_CLOSE; + APPL_TRACE_DEBUG("p_mcb->force_close_local_cch_opening=%d", + p_mcb->force_close_local_cch_opening); + bta_hl_check_cch_close(app_idx, mcl_idx, p_data, true); + } + } else { + /* all cchs are closed */ + evt_data.dereg_cfm.app_handle = p_acb->app_handle; + evt_data.dereg_cfm.app_id = p_data->api_dereg.app_id; + evt_data.dereg_cfm.status = BTA_HL_STATUS_OK; + p_acb->p_cback(BTA_HL_DEREGISTER_CFM_EVT, (tBTA_HL*)&evt_data); + bta_hl_clean_app(app_idx); + bta_hl_check_disable(p_data); } + } } - /******************************************************************************* * * Function bta_hl_check_disable @@ -2930,37 +2579,33 @@ void bta_hl_check_deregistration(uint8_t app_idx, tBTA_HL_DATA *p_data ) * Returns void * ******************************************************************************/ -void bta_hl_check_disable(tBTA_HL_DATA *p_data ) -{ - tBTA_HL_CB *p_cb= &bta_hl_cb; - tBTA_HL_APP_CB *p_acb; - uint8_t app_idx; - tBTA_HL_CTRL evt_data; +void bta_hl_check_disable(tBTA_HL_DATA* p_data) { + tBTA_HL_CB* p_cb = &bta_hl_cb; + tBTA_HL_APP_CB* p_acb; + uint8_t app_idx; + tBTA_HL_CTRL evt_data; #if (BTA_HL_DEBUG == TRUE) - APPL_TRACE_DEBUG("bta_hl_check_disable"); + APPL_TRACE_DEBUG("bta_hl_check_disable"); #endif - if (bta_hl_cb.disabling) - { - if (bta_hl_find_an_in_use_app_idx(&app_idx)) - { - p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); - if (!p_acb->deregistering) - { - p_acb->deregistering = true; - bta_hl_check_deregistration(app_idx, p_data); - } - } - else - { - /* all apps are deregistered */ - bta_sys_deregister(BTA_ID_HL); - evt_data.disable_cfm.status = BTA_HL_STATUS_OK; - if (p_cb->p_ctrl_cback) p_cb->p_ctrl_cback(BTA_HL_CTRL_DISABLE_CFM_EVT, (tBTA_HL_CTRL *) &evt_data); - memset((void *) p_cb, 0, sizeof(tBTA_HL_CB)); - } + if (bta_hl_cb.disabling) { + if (bta_hl_find_an_in_use_app_idx(&app_idx)) { + p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); + if (!p_acb->deregistering) { + p_acb->deregistering = true; + bta_hl_check_deregistration(app_idx, p_data); + } + } else { + /* all apps are deregistered */ + bta_sys_deregister(BTA_ID_HL); + evt_data.disable_cfm.status = BTA_HL_STATUS_OK; + if (p_cb->p_ctrl_cback) + p_cb->p_ctrl_cback(BTA_HL_CTRL_DISABLE_CFM_EVT, + (tBTA_HL_CTRL*)&evt_data); + memset((void*)p_cb, 0, sizeof(tBTA_HL_CB)); } + } } /******************************************************************************* @@ -2972,14 +2617,12 @@ void bta_hl_check_disable(tBTA_HL_DATA *p_data ) * Returns None * ******************************************************************************/ -void bta_hl_build_abort_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status) -{ - p_evt_data->dch_abort_cfm.status = status; - p_evt_data->dch_abort_cfm.mcl_handle = mcl_handle; - p_evt_data->dch_abort_cfm.app_handle = app_handle; +void bta_hl_build_abort_cfm(tBTA_HL* p_evt_data, tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status) { + p_evt_data->dch_abort_cfm.status = status; + p_evt_data->dch_abort_cfm.mcl_handle = mcl_handle; + p_evt_data->dch_abort_cfm.app_handle = app_handle; } /******************************************************************************* @@ -2991,12 +2634,10 @@ void bta_hl_build_abort_cfm(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_abort_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle) -{ - p_evt_data->dch_abort_ind.mcl_handle = mcl_handle; - p_evt_data->dch_abort_ind.app_handle = app_handle; +void bta_hl_build_abort_ind(tBTA_HL* p_evt_data, tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle) { + p_evt_data->dch_abort_ind.mcl_handle = mcl_handle; + p_evt_data->dch_abort_ind.app_handle = app_handle; } /******************************************************************************* * @@ -3007,16 +2648,15 @@ void bta_hl_build_abort_ind(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_dch_close_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_STATUS status) -{ - p_evt_data->dch_close_cfm.status = status; - p_evt_data->dch_close_cfm.mdl_handle = mdl_handle; - p_evt_data->dch_close_cfm.mcl_handle = mcl_handle; - p_evt_data->dch_close_cfm.app_handle = app_handle; +void bta_hl_build_dch_close_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_STATUS status) { + p_evt_data->dch_close_cfm.status = status; + p_evt_data->dch_close_cfm.mdl_handle = mdl_handle; + p_evt_data->dch_close_cfm.mcl_handle = mcl_handle; + p_evt_data->dch_close_cfm.app_handle = app_handle; } /******************************************************************************* @@ -3028,16 +2668,15 @@ void bta_hl_build_dch_close_cfm(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_dch_close_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle, - bool intentional) -{ - p_evt_data->dch_close_ind.mdl_handle = mdl_handle; - p_evt_data->dch_close_ind.mcl_handle = mcl_handle; - p_evt_data->dch_close_ind.app_handle = app_handle; - p_evt_data->dch_close_ind.intentional = intentional; +void bta_hl_build_dch_close_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle, + bool intentional) { + p_evt_data->dch_close_ind.mdl_handle = mdl_handle; + p_evt_data->dch_close_ind.mcl_handle = mcl_handle; + p_evt_data->dch_close_ind.app_handle = app_handle; + p_evt_data->dch_close_ind.intentional = intentional; } /******************************************************************************* @@ -3049,17 +2688,15 @@ void bta_hl_build_dch_close_ind(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_send_data_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_STATUS status ) -{ - - p_evt_data->dch_send_data_cfm.mdl_handle = mdl_handle; - p_evt_data->dch_send_data_cfm.mcl_handle = mcl_handle; - p_evt_data->dch_send_data_cfm.app_handle = app_handle; - p_evt_data->dch_send_data_cfm.status = status; +void bta_hl_build_send_data_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_STATUS status) { + p_evt_data->dch_send_data_cfm.mdl_handle = mdl_handle; + p_evt_data->dch_send_data_cfm.mcl_handle = mcl_handle; + p_evt_data->dch_send_data_cfm.app_handle = app_handle; + p_evt_data->dch_send_data_cfm.status = status; } /******************************************************************************* @@ -3071,17 +2708,15 @@ void bta_hl_build_send_data_cfm(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_rcv_data_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle) -{ - p_evt_data->dch_rcv_data_ind.mdl_handle = mdl_handle; - p_evt_data->dch_rcv_data_ind.mcl_handle = mcl_handle; - p_evt_data->dch_rcv_data_ind.app_handle = app_handle; +void bta_hl_build_rcv_data_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle) { + p_evt_data->dch_rcv_data_ind.mdl_handle = mdl_handle; + p_evt_data->dch_rcv_data_ind.mcl_handle = mcl_handle; + p_evt_data->dch_rcv_data_ind.app_handle = app_handle; } - /******************************************************************************* * * Function bta_hl_build_cch_open_cfm @@ -3091,19 +2726,16 @@ void bta_hl_build_rcv_data_ind(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_cch_open_cfm(tBTA_HL *p_evt_data, - uint8_t app_id, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - BD_ADDR bd_addr, - tBTA_HL_STATUS status ) -{ - p_evt_data->cch_open_cfm.app_id = app_id; - p_evt_data->cch_open_cfm.app_handle = app_handle; - p_evt_data->cch_open_cfm.mcl_handle = mcl_handle; - bdcpy(p_evt_data->cch_open_cfm.bd_addr, bd_addr); - p_evt_data->cch_open_cfm.status = status; - APPL_TRACE_DEBUG("bta_hl_build_cch_open_cfm: status=%d",status); +void bta_hl_build_cch_open_cfm(tBTA_HL* p_evt_data, uint8_t app_id, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, BD_ADDR bd_addr, + tBTA_HL_STATUS status) { + p_evt_data->cch_open_cfm.app_id = app_id; + p_evt_data->cch_open_cfm.app_handle = app_handle; + p_evt_data->cch_open_cfm.mcl_handle = mcl_handle; + bdcpy(p_evt_data->cch_open_cfm.bd_addr, bd_addr); + p_evt_data->cch_open_cfm.status = status; + APPL_TRACE_DEBUG("bta_hl_build_cch_open_cfm: status=%d", status); } /******************************************************************************* @@ -3115,14 +2747,12 @@ void bta_hl_build_cch_open_cfm(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_cch_open_ind(tBTA_HL *p_evt_data, tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - BD_ADDR bd_addr ) -{ - - p_evt_data->cch_open_ind.app_handle = app_handle; - p_evt_data->cch_open_ind.mcl_handle = mcl_handle; - bdcpy(p_evt_data->cch_open_ind.bd_addr, bd_addr); +void bta_hl_build_cch_open_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, BD_ADDR bd_addr) { + p_evt_data->cch_open_ind.app_handle = app_handle; + p_evt_data->cch_open_ind.mcl_handle = mcl_handle; + bdcpy(p_evt_data->cch_open_ind.bd_addr, bd_addr); } /******************************************************************************* @@ -3134,17 +2764,15 @@ void bta_hl_build_cch_open_ind(tBTA_HL *p_evt_data, tBTA_HL_APP_HANDLE app_hand * Returns None * ******************************************************************************/ -void bta_hl_build_cch_close_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status ) -{ - p_evt_data->cch_close_cfm.mcl_handle = mcl_handle; - p_evt_data->cch_close_cfm.app_handle = app_handle; - p_evt_data->cch_close_cfm.status = status; +void bta_hl_build_cch_close_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status) { + p_evt_data->cch_close_cfm.mcl_handle = mcl_handle; + p_evt_data->cch_close_cfm.app_handle = app_handle; + p_evt_data->cch_close_cfm.status = status; } - /******************************************************************************* * * Function bta_hl_build_cch_close_ind @@ -3154,14 +2782,13 @@ void bta_hl_build_cch_close_cfm(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_cch_close_ind(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - bool intentional) -{ - p_evt_data->cch_close_ind.mcl_handle = mcl_handle; - p_evt_data->cch_close_ind.app_handle = app_handle; - p_evt_data->cch_close_ind.intentional = intentional; +void bta_hl_build_cch_close_ind(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + bool intentional) { + p_evt_data->cch_close_ind.mcl_handle = mcl_handle; + p_evt_data->cch_close_ind.app_handle = app_handle; + p_evt_data->cch_close_ind.intentional = intentional; } /******************************************************************************* @@ -3173,30 +2800,27 @@ void bta_hl_build_cch_close_ind(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_dch_open_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_MDEP_ID local_mdep_id, - tBTA_HL_MDL_ID mdl_id, - tBTA_HL_DCH_MODE dch_mode, - bool first_reliable, - uint16_t mtu, - tBTA_HL_STATUS status) +void bta_hl_build_dch_open_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_MDEP_ID local_mdep_id, + tBTA_HL_MDL_ID mdl_id, tBTA_HL_DCH_MODE dch_mode, + bool first_reliable, uint16_t mtu, + tBTA_HL_STATUS status) { - p_evt_data->dch_open_cfm.mdl_handle = mdl_handle; - p_evt_data->dch_open_cfm.mcl_handle = mcl_handle; - p_evt_data->dch_open_cfm.app_handle = app_handle; - p_evt_data->dch_open_cfm.local_mdep_id = local_mdep_id; - p_evt_data->dch_open_cfm.mdl_id = mdl_id; - p_evt_data->dch_open_cfm.dch_mode = dch_mode; - p_evt_data->dch_open_cfm.first_reliable = first_reliable; - p_evt_data->dch_open_cfm.mtu = mtu; - p_evt_data->dch_open_cfm.status = status; + p_evt_data->dch_open_cfm.mdl_handle = mdl_handle; + p_evt_data->dch_open_cfm.mcl_handle = mcl_handle; + p_evt_data->dch_open_cfm.app_handle = app_handle; + p_evt_data->dch_open_cfm.local_mdep_id = local_mdep_id; + p_evt_data->dch_open_cfm.mdl_id = mdl_id; + p_evt_data->dch_open_cfm.dch_mode = dch_mode; + p_evt_data->dch_open_cfm.first_reliable = first_reliable; + p_evt_data->dch_open_cfm.mtu = mtu; + p_evt_data->dch_open_cfm.status = status; } - /******************************************************************************* * * Function bta_hl_build_sdp_query_cfm @@ -3206,24 +2830,20 @@ void bta_hl_build_dch_open_cfm(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_sdp_query_cfm(tBTA_HL *p_evt_data, - uint8_t app_id, - tBTA_HL_APP_HANDLE app_handle, - BD_ADDR bd_addr, - tBTA_HL_SDP *p_sdp, - tBTA_HL_STATUS status) +void bta_hl_build_sdp_query_cfm(tBTA_HL* p_evt_data, uint8_t app_id, + tBTA_HL_APP_HANDLE app_handle, BD_ADDR bd_addr, + tBTA_HL_SDP* p_sdp, tBTA_HL_STATUS status) { - APPL_TRACE_DEBUG("bta_hl_build_sdp_query_cfm: app_id = %d, app_handle=%d", - app_id,app_handle); - p_evt_data->sdp_query_cfm.app_id = app_id; - p_evt_data->sdp_query_cfm.app_handle = app_handle; - bdcpy(p_evt_data->sdp_query_cfm.bd_addr, bd_addr); - p_evt_data->sdp_query_cfm.p_sdp = p_sdp; - p_evt_data->sdp_query_cfm.status = status; + APPL_TRACE_DEBUG("bta_hl_build_sdp_query_cfm: app_id = %d, app_handle=%d", + app_id, app_handle); + p_evt_data->sdp_query_cfm.app_id = app_id; + p_evt_data->sdp_query_cfm.app_handle = app_handle; + bdcpy(p_evt_data->sdp_query_cfm.bd_addr, bd_addr); + p_evt_data->sdp_query_cfm.p_sdp = p_sdp; + p_evt_data->sdp_query_cfm.status = status; } - /******************************************************************************* * * Function bta_hl_build_delete_mdl_cfm @@ -3233,17 +2853,16 @@ void bta_hl_build_sdp_query_cfm(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_delete_mdl_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_ID mdl_id, - tBTA_HL_STATUS status) +void bta_hl_build_delete_mdl_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_MDL_ID mdl_id, tBTA_HL_STATUS status) { - p_evt_data->delete_mdl_cfm.mcl_handle = mcl_handle; - p_evt_data->delete_mdl_cfm.app_handle = app_handle; - p_evt_data->delete_mdl_cfm.mdl_id = mdl_id; - p_evt_data->delete_mdl_cfm.status = status; + p_evt_data->delete_mdl_cfm.mcl_handle = mcl_handle; + p_evt_data->delete_mdl_cfm.app_handle = app_handle; + p_evt_data->delete_mdl_cfm.mdl_id = mdl_id; + p_evt_data->delete_mdl_cfm.status = status; } /******************************************************************************* @@ -3255,17 +2874,15 @@ void bta_hl_build_delete_mdl_cfm(tBTA_HL *p_evt_data, * Returns None * ******************************************************************************/ -void bta_hl_build_echo_test_cfm(tBTA_HL *p_evt_data, - tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status ) -{ - p_evt_data->echo_test_cfm.mcl_handle = mcl_handle; - p_evt_data->echo_test_cfm.app_handle = app_handle; - p_evt_data->echo_test_cfm.status = status; +void bta_hl_build_echo_test_cfm(tBTA_HL* p_evt_data, + tBTA_HL_APP_HANDLE app_handle, + tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status) { + p_evt_data->echo_test_cfm.mcl_handle = mcl_handle; + p_evt_data->echo_test_cfm.app_handle = app_handle; + p_evt_data->echo_test_cfm.status = status; } - /***************************************************************************** * Debug Functions ****************************************************************************/ @@ -3280,64 +2897,62 @@ void bta_hl_build_echo_test_cfm(tBTA_HL *p_evt_data, * Returns char * - status string pointer * ******************************************************************************/ -const char *bta_hl_status_code(tBTA_HL_STATUS status) -{ - switch (status) - { - case BTA_HL_STATUS_OK: - return "BTA_HL_STATUS_OK"; - case BTA_HL_STATUS_FAIL: - return "BTA_HL_STATUS_FAIL"; - case BTA_HL_STATUS_ABORTED: - return "BTA_HL_STATUS_ABORTED"; - case BTA_HL_STATUS_NO_RESOURCE: - return "BTA_HL_STATUS_NO_RESOURCE"; - case BTA_HL_STATUS_LAST_ITEM: - return "BTA_HL_STATUS_LAST_ITEM"; - case BTA_HL_STATUS_DUPLICATE_APP_ID: - return "BTA_HL_STATUS_DUPLICATE_APP_ID"; - case BTA_HL_STATUS_INVALID_APP_HANDLE: - return "BTA_HL_STATUS_INVALID_APP_HANDLE"; - case BTA_HL_STATUS_INVALID_MCL_HANDLE: - return "BTA_HL_STATUS_INVALID_MCL_HANDLE"; - case BTA_HL_STATUS_MCAP_REG_FAIL: - return "BTA_HL_STATUS_MCAP_REG_FAIL"; - case BTA_HL_STATUS_MDEP_CO_FAIL: - return "BTA_HL_STATUS_MDEP_CO_FAIL"; - case BTA_HL_STATUS_ECHO_CO_FAIL: - return "BTA_HL_STATUS_ECHO_CO_FAIL"; - case BTA_HL_STATUS_MDL_CFG_CO_FAIL: - return "BTA_HL_STATUS_MDL_CFG_CO_FAIL"; - case BTA_HL_STATUS_SDP_NO_RESOURCE: - return "BTA_HL_STATUS_SDP_NO_RESOURCE"; - case BTA_HL_STATUS_SDP_FAIL: - return "BTA_HL_STATUS_SDP_FAIL"; - case BTA_HL_STATUS_NO_CCH: - return "BTA_HL_STATUS_NO_CCH"; - case BTA_HL_STATUS_NO_MCL: - return "BTA_HL_STATUS_NO_MCL"; - - case BTA_HL_STATUS_NO_FIRST_RELIABLE: - return "BTA_HL_STATUS_NO_FIRST_RELIABLE"; - case BTA_HL_STATUS_INVALID_DCH_CFG: - return "BTA_HL_STATUS_INVALID_DCH_CFG"; - case BTA_HL_STATUS_INVALID_BD_ADDR: - return "BTA_HL_STATUS_INVALID_BD_ADDR"; - case BTA_HL_STATUS_INVALID_RECONNECT_CFG: - return "BTA_HL_STATUS_INVALID_RECONNECT_CFG"; - case BTA_HL_STATUS_ECHO_TEST_BUSY: - return "BTA_HL_STATUS_ECHO_TEST_BUSY"; - case BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID: - return "BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID"; - case BTA_HL_STATUS_INVALID_MDL_ID: - return "BTA_HL_STATUS_INVALID_MDL_ID"; - case BTA_HL_STATUS_NO_MDL_ID_FOUND: - return "BTA_HL_STATUS_NO_MDL_ID_FOUND"; - case BTA_HL_STATUS_DCH_BUSY: - return "BTA_HL_STATUS_DCH_BUSY"; - default: - return "Unknown status code"; - } +const char* bta_hl_status_code(tBTA_HL_STATUS status) { + switch (status) { + case BTA_HL_STATUS_OK: + return "BTA_HL_STATUS_OK"; + case BTA_HL_STATUS_FAIL: + return "BTA_HL_STATUS_FAIL"; + case BTA_HL_STATUS_ABORTED: + return "BTA_HL_STATUS_ABORTED"; + case BTA_HL_STATUS_NO_RESOURCE: + return "BTA_HL_STATUS_NO_RESOURCE"; + case BTA_HL_STATUS_LAST_ITEM: + return "BTA_HL_STATUS_LAST_ITEM"; + case BTA_HL_STATUS_DUPLICATE_APP_ID: + return "BTA_HL_STATUS_DUPLICATE_APP_ID"; + case BTA_HL_STATUS_INVALID_APP_HANDLE: + return "BTA_HL_STATUS_INVALID_APP_HANDLE"; + case BTA_HL_STATUS_INVALID_MCL_HANDLE: + return "BTA_HL_STATUS_INVALID_MCL_HANDLE"; + case BTA_HL_STATUS_MCAP_REG_FAIL: + return "BTA_HL_STATUS_MCAP_REG_FAIL"; + case BTA_HL_STATUS_MDEP_CO_FAIL: + return "BTA_HL_STATUS_MDEP_CO_FAIL"; + case BTA_HL_STATUS_ECHO_CO_FAIL: + return "BTA_HL_STATUS_ECHO_CO_FAIL"; + case BTA_HL_STATUS_MDL_CFG_CO_FAIL: + return "BTA_HL_STATUS_MDL_CFG_CO_FAIL"; + case BTA_HL_STATUS_SDP_NO_RESOURCE: + return "BTA_HL_STATUS_SDP_NO_RESOURCE"; + case BTA_HL_STATUS_SDP_FAIL: + return "BTA_HL_STATUS_SDP_FAIL"; + case BTA_HL_STATUS_NO_CCH: + return "BTA_HL_STATUS_NO_CCH"; + case BTA_HL_STATUS_NO_MCL: + return "BTA_HL_STATUS_NO_MCL"; + + case BTA_HL_STATUS_NO_FIRST_RELIABLE: + return "BTA_HL_STATUS_NO_FIRST_RELIABLE"; + case BTA_HL_STATUS_INVALID_DCH_CFG: + return "BTA_HL_STATUS_INVALID_DCH_CFG"; + case BTA_HL_STATUS_INVALID_BD_ADDR: + return "BTA_HL_STATUS_INVALID_BD_ADDR"; + case BTA_HL_STATUS_INVALID_RECONNECT_CFG: + return "BTA_HL_STATUS_INVALID_RECONNECT_CFG"; + case BTA_HL_STATUS_ECHO_TEST_BUSY: + return "BTA_HL_STATUS_ECHO_TEST_BUSY"; + case BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID: + return "BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID"; + case BTA_HL_STATUS_INVALID_MDL_ID: + return "BTA_HL_STATUS_INVALID_MDL_ID"; + case BTA_HL_STATUS_NO_MDL_ID_FOUND: + return "BTA_HL_STATUS_NO_MDL_ID_FOUND"; + case BTA_HL_STATUS_DCH_BUSY: + return "BTA_HL_STATUS_DCH_BUSY"; + default: + return "Unknown status code"; + } } /******************************************************************************* * @@ -3348,135 +2963,125 @@ const char *bta_hl_status_code(tBTA_HL_STATUS status) * Returns string pointer for the associated event name * ******************************************************************************/ -const char *bta_hl_evt_code(tBTA_HL_INT_EVT evt_code) -{ - switch (evt_code) - { - case BTA_HL_CCH_OPEN_EVT: - return "BTA_HL_CCH_OPEN_EVT"; - case BTA_HL_CCH_SDP_OK_EVT: - return "BTA_HL_CCH_SDP_OK_EVT"; - case BTA_HL_CCH_SDP_FAIL_EVT: - return "BTA_HL_CCH_SDP_FAIL_EVT"; - case BTA_HL_MCA_CONNECT_IND_EVT: - return "BTA_HL_MCA_CONNECT_IND_EVT"; - case BTA_HL_MCA_DISCONNECT_IND_EVT: - return "BTA_HL_MCA_DISCONNECT_IND_EVT"; - - case BTA_HL_CCH_CLOSE_EVT: - return "BTA_HL_CCH_CLOSE_EVT"; - case BTA_HL_CCH_CLOSE_CMPL_EVT: - return "BTA_HL_CCH_CLOSE_CMPL_EVT"; - case BTA_HL_DCH_OPEN_EVT: - return "BTA_HL_DCH_OPEN_EVT"; - case BTA_HL_MCA_CREATE_IND_EVT: - return "BTA_HL_MCA_CREATE_IND_EVT"; - case BTA_HL_MCA_CREATE_CFM_EVT: - return "BTA_HL_MCA_CREATE_CFM_EVT"; - case BTA_HL_MCA_OPEN_IND_EVT: - return "BTA_HL_MCA_OPEN_IND_EVT"; - case BTA_HL_MCA_OPEN_CFM_EVT: - return "BTA_HL_MCA_OPEN_CFM_EVT"; - case BTA_HL_DCH_CLOSE_EVT: - return "BTA_HL_DCH_CLOSE_EVT"; - case BTA_HL_MCA_CLOSE_IND_EVT: - return "BTA_HL_MCA_CLOSE_IND_EVT"; - case BTA_HL_MCA_CLOSE_CFM_EVT: - return "BTA_HL_MCA_CLOSE_CFM_EVT"; - case BTA_HL_API_SEND_DATA_EVT: - return "BTA_HL_API_SEND_DATA_EVT"; - case BTA_HL_MCA_RCV_DATA_EVT: - return "BTA_HL_MCA_RCV_DATA_EVT"; - case BTA_HL_DCH_CLOSE_CMPL_EVT: - return "BTA_HL_DCH_CLOSE_CMPL_EVT"; - - case BTA_HL_API_ENABLE_EVT: - return "BTA_HL_API_ENABLE_EVT"; - case BTA_HL_API_DISABLE_EVT: - return "BTA_HL_API_DISABLE_EVT"; - case BTA_HL_API_UPDATE_EVT: - return "BTA_HL_API_UPDATE_EVT"; - case BTA_HL_API_REGISTER_EVT: - return "BTA_HL_API_REGISTER_EVT"; - case BTA_HL_API_DEREGISTER_EVT: - return "BTA_HL_API_DEREGISTER_EVT"; - - case BTA_HL_API_CCH_OPEN_EVT: - return "BTA_HL_API_CCH_OPEN_EVT"; - - case BTA_HL_API_CCH_CLOSE_EVT: - return "BTA_HL_API_CCH_CLOSE_EVT"; - case BTA_HL_API_DCH_OPEN_EVT: - return "BTA_HL_API_DCH_OPEN_EVT"; - - case BTA_HL_API_DCH_RECONNECT_EVT: - return "BTA_HL_API_DCH_RECONNECT_EVT"; - case BTA_HL_API_DCH_CLOSE_EVT: - return "BTA_HL_API_DCH_CLOSE_EVT"; - case BTA_HL_API_DELETE_MDL_EVT: - return "BTA_HL_API_DELETE_MDL_EVT"; - case BTA_HL_API_DCH_ABORT_EVT: - return "BTA_HL_API_DCH_ABORT_EVT"; - - case BTA_HL_DCH_RECONNECT_EVT: - return "BTA_HL_DCH_RECONNECT_EVT"; - case BTA_HL_DCH_SDP_INIT_EVT: - return "BTA_HL_DCH_SDP_INIT_EVT"; - case BTA_HL_DCH_SDP_FAIL_EVT: - return "BTA_HL_DCH_SDP_FAIL_EVT"; - case BTA_HL_API_DCH_ECHO_TEST_EVT: - return "BTA_HL_API_DCH_ECHO_TEST_EVT"; - case BTA_HL_DCH_CLOSE_ECHO_TEST_EVT: - return "BTA_HL_DCH_CLOSE_ECHO_TEST_EVT"; - case BTA_HL_MCA_RECONNECT_IND_EVT: - return "BTA_HL_MCA_RECONNECT_IND_EVT"; - case BTA_HL_MCA_RECONNECT_CFM_EVT: - return "BTA_HL_MCA_RECONNECT_CFM_EVT"; - case BTA_HL_API_DCH_CREATE_RSP_EVT: - return "BTA_HL_API_DCH_CREATE_RSP_EVT"; - case BTA_HL_DCH_ABORT_EVT: - return "BTA_HL_DCH_ABORT_EVT"; - case BTA_HL_MCA_ABORT_IND_EVT: - return "BTA_HL_MCA_ABORT_IND_EVT"; - case BTA_HL_MCA_ABORT_CFM_EVT: - return "BTA_HL_MCA_ABORT_CFM_EVT"; - case BTA_HL_MCA_DELETE_IND_EVT: - return "BTA_HL_MCA_DELETE_IND_EVT"; - case BTA_HL_MCA_DELETE_CFM_EVT: - return "BTA_HL_MCA_DELETE_CFM_EVT"; - case BTA_HL_MCA_CONG_CHG_EVT: - return "BTA_HL_MCA_CONG_CHG_EVT"; - case BTA_HL_CI_GET_TX_DATA_EVT: - return "BTA_HL_CI_GET_TX_DATA_EVT"; - case BTA_HL_CI_PUT_RX_DATA_EVT: - return "BTA_HL_CI_PUT_RX_DATA_EVT"; - case BTA_HL_CI_GET_ECHO_DATA_EVT: - return "BTA_HL_CI_GET_ECHO_DATA_EVT"; - case BTA_HL_DCH_ECHO_TEST_EVT: - return "BTA_HL_DCH_ECHO_TEST_EVT"; - case BTA_HL_CI_PUT_ECHO_DATA_EVT: - return "BTA_HL_CI_PUT_ECHO_DATA_EVT"; - case BTA_HL_API_SDP_QUERY_EVT: - return "BTA_HL_API_SDP_QUERY_EVT"; - case BTA_HL_SDP_QUERY_OK_EVT: - return "BTA_HL_SDP_QUERY_OK_EVT"; - case BTA_HL_SDP_QUERY_FAIL_EVT: - return "BTA_HL_SDP_QUERY_FAIL_EVT"; - case BTA_HL_MCA_RSP_TOUT_IND_EVT: - return "BTA_HL_MCA_RSP_TOUT_IND_EVT"; - - default: - return "Unknown HL event code"; - } +const char* bta_hl_evt_code(tBTA_HL_INT_EVT evt_code) { + switch (evt_code) { + case BTA_HL_CCH_OPEN_EVT: + return "BTA_HL_CCH_OPEN_EVT"; + case BTA_HL_CCH_SDP_OK_EVT: + return "BTA_HL_CCH_SDP_OK_EVT"; + case BTA_HL_CCH_SDP_FAIL_EVT: + return "BTA_HL_CCH_SDP_FAIL_EVT"; + case BTA_HL_MCA_CONNECT_IND_EVT: + return "BTA_HL_MCA_CONNECT_IND_EVT"; + case BTA_HL_MCA_DISCONNECT_IND_EVT: + return "BTA_HL_MCA_DISCONNECT_IND_EVT"; + + case BTA_HL_CCH_CLOSE_EVT: + return "BTA_HL_CCH_CLOSE_EVT"; + case BTA_HL_CCH_CLOSE_CMPL_EVT: + return "BTA_HL_CCH_CLOSE_CMPL_EVT"; + case BTA_HL_DCH_OPEN_EVT: + return "BTA_HL_DCH_OPEN_EVT"; + case BTA_HL_MCA_CREATE_IND_EVT: + return "BTA_HL_MCA_CREATE_IND_EVT"; + case BTA_HL_MCA_CREATE_CFM_EVT: + return "BTA_HL_MCA_CREATE_CFM_EVT"; + case BTA_HL_MCA_OPEN_IND_EVT: + return "BTA_HL_MCA_OPEN_IND_EVT"; + case BTA_HL_MCA_OPEN_CFM_EVT: + return "BTA_HL_MCA_OPEN_CFM_EVT"; + case BTA_HL_DCH_CLOSE_EVT: + return "BTA_HL_DCH_CLOSE_EVT"; + case BTA_HL_MCA_CLOSE_IND_EVT: + return "BTA_HL_MCA_CLOSE_IND_EVT"; + case BTA_HL_MCA_CLOSE_CFM_EVT: + return "BTA_HL_MCA_CLOSE_CFM_EVT"; + case BTA_HL_API_SEND_DATA_EVT: + return "BTA_HL_API_SEND_DATA_EVT"; + case BTA_HL_MCA_RCV_DATA_EVT: + return "BTA_HL_MCA_RCV_DATA_EVT"; + case BTA_HL_DCH_CLOSE_CMPL_EVT: + return "BTA_HL_DCH_CLOSE_CMPL_EVT"; + + case BTA_HL_API_ENABLE_EVT: + return "BTA_HL_API_ENABLE_EVT"; + case BTA_HL_API_DISABLE_EVT: + return "BTA_HL_API_DISABLE_EVT"; + case BTA_HL_API_UPDATE_EVT: + return "BTA_HL_API_UPDATE_EVT"; + case BTA_HL_API_REGISTER_EVT: + return "BTA_HL_API_REGISTER_EVT"; + case BTA_HL_API_DEREGISTER_EVT: + return "BTA_HL_API_DEREGISTER_EVT"; + + case BTA_HL_API_CCH_OPEN_EVT: + return "BTA_HL_API_CCH_OPEN_EVT"; + + case BTA_HL_API_CCH_CLOSE_EVT: + return "BTA_HL_API_CCH_CLOSE_EVT"; + case BTA_HL_API_DCH_OPEN_EVT: + return "BTA_HL_API_DCH_OPEN_EVT"; + + case BTA_HL_API_DCH_RECONNECT_EVT: + return "BTA_HL_API_DCH_RECONNECT_EVT"; + case BTA_HL_API_DCH_CLOSE_EVT: + return "BTA_HL_API_DCH_CLOSE_EVT"; + case BTA_HL_API_DELETE_MDL_EVT: + return "BTA_HL_API_DELETE_MDL_EVT"; + case BTA_HL_API_DCH_ABORT_EVT: + return "BTA_HL_API_DCH_ABORT_EVT"; + + case BTA_HL_DCH_RECONNECT_EVT: + return "BTA_HL_DCH_RECONNECT_EVT"; + case BTA_HL_DCH_SDP_INIT_EVT: + return "BTA_HL_DCH_SDP_INIT_EVT"; + case BTA_HL_DCH_SDP_FAIL_EVT: + return "BTA_HL_DCH_SDP_FAIL_EVT"; + case BTA_HL_API_DCH_ECHO_TEST_EVT: + return "BTA_HL_API_DCH_ECHO_TEST_EVT"; + case BTA_HL_DCH_CLOSE_ECHO_TEST_EVT: + return "BTA_HL_DCH_CLOSE_ECHO_TEST_EVT"; + case BTA_HL_MCA_RECONNECT_IND_EVT: + return "BTA_HL_MCA_RECONNECT_IND_EVT"; + case BTA_HL_MCA_RECONNECT_CFM_EVT: + return "BTA_HL_MCA_RECONNECT_CFM_EVT"; + case BTA_HL_API_DCH_CREATE_RSP_EVT: + return "BTA_HL_API_DCH_CREATE_RSP_EVT"; + case BTA_HL_DCH_ABORT_EVT: + return "BTA_HL_DCH_ABORT_EVT"; + case BTA_HL_MCA_ABORT_IND_EVT: + return "BTA_HL_MCA_ABORT_IND_EVT"; + case BTA_HL_MCA_ABORT_CFM_EVT: + return "BTA_HL_MCA_ABORT_CFM_EVT"; + case BTA_HL_MCA_DELETE_IND_EVT: + return "BTA_HL_MCA_DELETE_IND_EVT"; + case BTA_HL_MCA_DELETE_CFM_EVT: + return "BTA_HL_MCA_DELETE_CFM_EVT"; + case BTA_HL_MCA_CONG_CHG_EVT: + return "BTA_HL_MCA_CONG_CHG_EVT"; + case BTA_HL_CI_GET_TX_DATA_EVT: + return "BTA_HL_CI_GET_TX_DATA_EVT"; + case BTA_HL_CI_PUT_RX_DATA_EVT: + return "BTA_HL_CI_PUT_RX_DATA_EVT"; + case BTA_HL_CI_GET_ECHO_DATA_EVT: + return "BTA_HL_CI_GET_ECHO_DATA_EVT"; + case BTA_HL_DCH_ECHO_TEST_EVT: + return "BTA_HL_DCH_ECHO_TEST_EVT"; + case BTA_HL_CI_PUT_ECHO_DATA_EVT: + return "BTA_HL_CI_PUT_ECHO_DATA_EVT"; + case BTA_HL_API_SDP_QUERY_EVT: + return "BTA_HL_API_SDP_QUERY_EVT"; + case BTA_HL_SDP_QUERY_OK_EVT: + return "BTA_HL_SDP_QUERY_OK_EVT"; + case BTA_HL_SDP_QUERY_FAIL_EVT: + return "BTA_HL_SDP_QUERY_FAIL_EVT"; + case BTA_HL_MCA_RSP_TOUT_IND_EVT: + return "BTA_HL_MCA_RSP_TOUT_IND_EVT"; + + default: + return "Unknown HL event code"; + } } #endif /* Debug Functions */ -#endif // HL_INCLUDED - - - - - - - - +#endif // HL_INCLUDED diff --git a/system/bta/include/bta_ag_api.h b/system/bta/include/bta_ag_api.h index c5e51cf8776..70885363375 100644 --- a/system/bta/include/bta_ag_api.h +++ b/system/bta/include/bta_ag_api.h @@ -34,69 +34,72 @@ extern "C" { /***************************************************************************** * Constants and data types ****************************************************************************/ -#define HFP_VERSION_1_1 0x0101 -#define HFP_VERSION_1_5 0x0105 -#define HFP_VERSION_1_6 0x0106 -#define HFP_VERSION_1_7 0x0107 +#define HFP_VERSION_1_1 0x0101 +#define HFP_VERSION_1_5 0x0105 +#define HFP_VERSION_1_6 0x0106 +#define HFP_VERSION_1_7 0x0107 -#define HSP_VERSION_1_0 0x0100 -#define HSP_VERSION_1_2 0x0102 +#define HSP_VERSION_1_0 0x0100 +#define HSP_VERSION_1_2 0x0102 /* Note, if you change the default version here, please also change the one in * bta_hs_api.h, they are meant to be the same. */ #ifndef BTA_HFP_VERSION -#define BTA_HFP_VERSION HFP_VERSION_1_7 +#define BTA_HFP_VERSION HFP_VERSION_1_7 #endif /* AG feature masks */ -#define BTA_AG_FEAT_3WAY 0x00000001 /* Three-way calling */ -#define BTA_AG_FEAT_ECNR 0x00000002 /* Echo cancellation and/or noise reduction */ -#define BTA_AG_FEAT_VREC 0x00000004 /* Voice recognition */ -#define BTA_AG_FEAT_INBAND 0x00000008 /* In-band ring tone */ -#define BTA_AG_FEAT_VTAG 0x00000010 /* Attach a phone number to a voice tag */ -#define BTA_AG_FEAT_REJECT 0x00000020 /* Ability to reject incoming call */ -#define BTA_AG_FEAT_ECS 0x00000040 /* Enhanced Call Status */ -#define BTA_AG_FEAT_ECC 0x00000080 /* Enhanced Call Control */ -#define BTA_AG_FEAT_EXTERR 0x00000100 /* Extended error codes */ -#define BTA_AG_FEAT_CODEC 0x00000200 /* Codec Negotiation */ - -#define HFP_1_6_FEAT_MASK 0x000003FF /* Valid feature bit mask for HFP 1.6 (and below) */ +#define BTA_AG_FEAT_3WAY 0x00000001 /* Three-way calling */ +#define BTA_AG_FEAT_ECNR \ + 0x00000002 /* Echo cancellation and/or noise reduction */ +#define BTA_AG_FEAT_VREC 0x00000004 /* Voice recognition */ +#define BTA_AG_FEAT_INBAND 0x00000008 /* In-band ring tone */ +#define BTA_AG_FEAT_VTAG 0x00000010 /* Attach a phone number to a voice tag */ +#define BTA_AG_FEAT_REJECT 0x00000020 /* Ability to reject incoming call */ +#define BTA_AG_FEAT_ECS 0x00000040 /* Enhanced Call Status */ +#define BTA_AG_FEAT_ECC 0x00000080 /* Enhanced Call Control */ +#define BTA_AG_FEAT_EXTERR 0x00000100 /* Extended error codes */ +#define BTA_AG_FEAT_CODEC 0x00000200 /* Codec Negotiation */ + +#define HFP_1_6_FEAT_MASK \ + 0x000003FF /* Valid feature bit mask for HFP 1.6 (and below) */ /* HFP 1.7+ */ -#define BTA_AG_FEAT_HF_IND 0x00000400 /* HF Indicators */ -#define BTA_AG_FEAT_ESCO 0x00000800 /* eSCO S4 (and T2) setting supported */ - +#define BTA_AG_FEAT_HF_IND 0x00000400 /* HF Indicators */ +#define BTA_AG_FEAT_ESCO 0x00000800 /* eSCO S4 (and T2) setting supported */ /* Proprietary features: using 31 ~ 16 bits */ -#define BTA_AG_FEAT_BTRH 0x00010000 /* CCAP incoming call hold */ -#define BTA_AG_FEAT_UNAT 0x00020000 /* Pass unknown AT commands to application */ -#define BTA_AG_FEAT_NOSCO 0x00040000 /* No SCO control performed by BTA AG */ -#define BTA_AG_FEAT_NO_ESCO 0x00080000 /* Do not allow or use eSCO */ -#define BTA_AG_FEAT_VOIP 0x00100000 /* VoIP call */ +#define BTA_AG_FEAT_BTRH 0x00010000 /* CCAP incoming call hold */ +#define BTA_AG_FEAT_UNAT \ + 0x00020000 /* Pass unknown AT commands to application */ +#define BTA_AG_FEAT_NOSCO 0x00040000 /* No SCO control performed by BTA AG */ +#define BTA_AG_FEAT_NO_ESCO 0x00080000 /* Do not allow or use eSCO */ +#define BTA_AG_FEAT_VOIP 0x00100000 /* VoIP call */ typedef uint32_t tBTA_AG_FEAT; /* AG parse mode */ -#define BTA_AG_PARSE 0 /* Perform AT command parsing in AG */ -#define BTA_AG_PASS_THROUGH 1 /* Pass data directly to phone's AT command interpreter */ +#define BTA_AG_PARSE 0 /* Perform AT command parsing in AG */ +#define BTA_AG_PASS_THROUGH \ + 1 /* Pass data directly to phone's AT command interpreter */ typedef uint8_t tBTA_AG_PARSE_MODE; /* AG open status */ -#define BTA_AG_SUCCESS 0 /* Connection successfully opened */ -#define BTA_AG_FAIL_SDP 1 /* Open failed due to SDP */ -#define BTA_AG_FAIL_RFCOMM 2 /* Open failed due to RFCOMM */ -#define BTA_AG_FAIL_RESOURCES 3 /* out of resources failure */ +#define BTA_AG_SUCCESS 0 /* Connection successfully opened */ +#define BTA_AG_FAIL_SDP 1 /* Open failed due to SDP */ +#define BTA_AG_FAIL_RFCOMM 2 /* Open failed due to RFCOMM */ +#define BTA_AG_FAIL_RESOURCES 3 /* out of resources failure */ /* Status to disallow passing AT Events after BTIF */ -#define BTA_AG_DISALLOW_AT 5 +#define BTA_AG_DISALLOW_AT 5 typedef uint8_t tBTA_AG_STATUS; /* handle values used with BTA_AgResult */ -#define BTA_AG_HANDLE_NONE 0 -#define BTA_AG_HANDLE_ALL 0xFFFF +#define BTA_AG_HANDLE_NONE 0 +#define BTA_AG_HANDLE_ALL 0xFFFF /* It is safe to use the same value as BTA_AG_HANDLE_ALL * HANDLE_ALL is used for delivering indication * SCO_NO_CHANGE is used for changing sco behavior @@ -109,336 +112,342 @@ typedef uint8_t tBTA_AG_STATUS; 1 for Enhanced Safety Status 2 for Battery Level Status */ #ifndef BTA_AG_NUM_LOCAL_HF_IND -#define BTA_AG_NUM_LOCAL_HF_IND 2 +#define BTA_AG_NUM_LOCAL_HF_IND 2 #endif - - #define BTA_AG_HANDLE_SCO_NO_CHANGE 0xFFFF /* AG result codes used with BTA_AgResult */ -#define BTA_AG_SPK_RES 0 /* Update speaker volume */ -#define BTA_AG_MIC_RES 1 /* Update microphone volume */ -#define BTA_AG_INBAND_RING_RES 2 /* Update inband ring state */ -#define BTA_AG_CIND_RES 3 /* Send indicator response for AT+CIND */ -#define BTA_AG_BINP_RES 4 /* Send phone number for voice tag for AT+BINP */ -#define BTA_AG_IND_RES 5 /* Update an indicator value */ -#define BTA_AG_BVRA_RES 6 /* Update voice recognition state */ -#define BTA_AG_CNUM_RES 7 /* Send subscriber number response for AT+CNUM */ -#define BTA_AG_BTRH_RES 8 /* Send CCAP incoming call hold */ -#define BTA_AG_CLCC_RES 9 /* Query list of calls */ -#define BTA_AG_COPS_RES 10 /* Read network operator */ -#define BTA_AG_IN_CALL_RES 11 /* Indicate incoming phone call */ -#define BTA_AG_IN_CALL_CONN_RES 12 /* Incoming phone call connected */ -#define BTA_AG_CALL_WAIT_RES 13 /* Call waiting notification */ -#define BTA_AG_OUT_CALL_ORIG_RES 14 /* Outgoing phone call origination */ -#define BTA_AG_OUT_CALL_ALERT_RES 15 /* Outgoing phone call alerting remote party */ -#define BTA_AG_OUT_CALL_CONN_RES 16 /* Outgoing phone call connected */ -#define BTA_AG_CALL_CANCEL_RES 17 /* Incoming/outgoing 3-way canceled before connected */ -#define BTA_AG_END_CALL_RES 18 /* End call */ -#define BTA_AG_IN_CALL_HELD_RES 19 /* Incoming call held */ -#define BTA_AG_UNAT_RES 20 /* Response to unknown AT command event */ -#define BTA_AG_MULTI_CALL_RES 21 /* SLC at three way call */ -#define BTA_AG_BIND_RES 22 /* Activate/Deactivate HF indicator */ +#define BTA_AG_SPK_RES 0 /* Update speaker volume */ +#define BTA_AG_MIC_RES 1 /* Update microphone volume */ +#define BTA_AG_INBAND_RING_RES 2 /* Update inband ring state */ +#define BTA_AG_CIND_RES 3 /* Send indicator response for AT+CIND */ +#define BTA_AG_BINP_RES 4 /* Send phone number for voice tag for AT+BINP */ +#define BTA_AG_IND_RES 5 /* Update an indicator value */ +#define BTA_AG_BVRA_RES 6 /* Update voice recognition state */ +#define BTA_AG_CNUM_RES 7 /* Send subscriber number response for AT+CNUM */ +#define BTA_AG_BTRH_RES 8 /* Send CCAP incoming call hold */ +#define BTA_AG_CLCC_RES 9 /* Query list of calls */ +#define BTA_AG_COPS_RES 10 /* Read network operator */ +#define BTA_AG_IN_CALL_RES 11 /* Indicate incoming phone call */ +#define BTA_AG_IN_CALL_CONN_RES 12 /* Incoming phone call connected */ +#define BTA_AG_CALL_WAIT_RES 13 /* Call waiting notification */ +#define BTA_AG_OUT_CALL_ORIG_RES 14 /* Outgoing phone call origination */ +#define BTA_AG_OUT_CALL_ALERT_RES \ + 15 /* Outgoing phone call alerting remote party */ +#define BTA_AG_OUT_CALL_CONN_RES 16 /* Outgoing phone call connected */ +#define BTA_AG_CALL_CANCEL_RES \ + 17 /* Incoming/outgoing 3-way canceled before connected */ +#define BTA_AG_END_CALL_RES 18 /* End call */ +#define BTA_AG_IN_CALL_HELD_RES 19 /* Incoming call held */ +#define BTA_AG_UNAT_RES 20 /* Response to unknown AT command event */ +#define BTA_AG_MULTI_CALL_RES 21 /* SLC at three way call */ +#define BTA_AG_BIND_RES 22 /* Activate/Deactivate HF indicator */ typedef uint8_t tBTA_AG_RES; /* HFP peer features */ -#define BTA_AG_PEER_FEAT_ECNR 0x0001 /* Echo cancellation and/or noise reduction */ -#define BTA_AG_PEER_FEAT_3WAY 0x0002 /* Call waiting and three-way calling */ -#define BTA_AG_PEER_FEAT_CLI 0x0004 /* Caller ID presentation capability */ -#define BTA_AG_PEER_FEAT_VREC 0x0008 /* Voice recognition activation */ -#define BTA_AG_PEER_FEAT_VOL 0x0010 /* Remote volume control */ -#define BTA_AG_PEER_FEAT_ECS 0x0020 /* Enhanced Call Status */ -#define BTA_AG_PEER_FEAT_ECC 0x0040 /* Enhanced Call Control */ -#define BTA_AG_PEER_FEAT_CODEC 0x0080 /* Codec Negotiation */ -#define BTA_AG_PEER_FEAT_HF_IND 0x0100 /* HF Indicators */ -#define BTA_AG_PEER_FEAT_ESCO 0x0200 /* eSCO S4 (and T2) setting supported */ +#define BTA_AG_PEER_FEAT_ECNR \ + 0x0001 /* Echo cancellation and/or noise reduction */ +#define BTA_AG_PEER_FEAT_3WAY 0x0002 /* Call waiting and three-way calling */ +#define BTA_AG_PEER_FEAT_CLI 0x0004 /* Caller ID presentation capability */ +#define BTA_AG_PEER_FEAT_VREC 0x0008 /* Voice recognition activation */ +#define BTA_AG_PEER_FEAT_VOL 0x0010 /* Remote volume control */ +#define BTA_AG_PEER_FEAT_ECS 0x0020 /* Enhanced Call Status */ +#define BTA_AG_PEER_FEAT_ECC 0x0040 /* Enhanced Call Control */ +#define BTA_AG_PEER_FEAT_CODEC 0x0080 /* Codec Negotiation */ +#define BTA_AG_PEER_FEAT_HF_IND 0x0100 /* HF Indicators */ +#define BTA_AG_PEER_FEAT_ESCO 0x0200 /* eSCO S4 (and T2) setting supported */ /* Proprietary features: using bits after 12 */ -#define BTA_AG_PEER_FEAT_UNAT 0x1000 /* Pass unknown AT command responses to application */ -#define BTA_AG_PEER_FEAT_VOIP 0x2000 /* VoIP call */ +#define BTA_AG_PEER_FEAT_UNAT \ + 0x1000 /* Pass unknown AT command responses to application */ +#define BTA_AG_PEER_FEAT_VOIP 0x2000 /* VoIP call */ typedef uint16_t tBTA_AG_PEER_FEAT; /* HFP peer supported codec masks */ // TODO(google) This should use common definitions // in hci/include/hci_audio.h -#define BTA_AG_CODEC_NONE BTM_SCO_CODEC_NONE -#define BTA_AG_CODEC_CVSD BTM_SCO_CODEC_CVSD /* CVSD */ -#define BTA_AG_CODEC_MSBC BTM_SCO_CODEC_MSBC /* mSBC */ +#define BTA_AG_CODEC_NONE BTM_SCO_CODEC_NONE +#define BTA_AG_CODEC_CVSD BTM_SCO_CODEC_CVSD /* CVSD */ +#define BTA_AG_CODEC_MSBC BTM_SCO_CODEC_MSBC /* mSBC */ typedef uint16_t tBTA_AG_PEER_CODEC; /* HFP errcode - Set when BTA_AG_OK_ERROR is returned in 'ok_flag' */ -#define BTA_AG_ERR_PHONE_FAILURE 0 /* Phone Failure */ -#define BTA_AG_ERR_NO_CONN_PHONE 1 /* No connection to phone */ -#define BTA_AG_ERR_OP_NOT_ALLOWED 3 /* Operation not allowed */ -#define BTA_AG_ERR_OP_NOT_SUPPORTED 4 /* Operation not supported */ -#define BTA_AG_ERR_PHSIM_PIN_REQ 5 /* PH-SIM PIN required */ -#define BTA_AG_ERR_SIM_NOT_INSERTED 10 /* SIM not inserted */ -#define BTA_AG_ERR_SIM_PIN_REQ 11 /* SIM PIN required */ -#define BTA_AG_ERR_SIM_PUK_REQ 12 /* SIM PUK required */ -#define BTA_AG_ERR_SIM_FAILURE 13 /* SIM failure */ -#define BTA_AG_ERR_SIM_BUSY 14 /* SIM busy */ -#define BTA_AG_ERR_INCORRECT_PWD 16 /* Incorrect password */ -#define BTA_AG_ERR_SIM_PIN2_REQ 17 /* SIM PIN2 required */ -#define BTA_AG_ERR_SIM_PUK2_REQ 18 /* SIM PUK2 required */ -#define BTA_AG_ERR_MEMORY_FULL 20 /* Memory full */ -#define BTA_AG_ERR_INVALID_INDEX 21 /* Invalid index */ -#define BTA_AG_ERR_MEMORY_FAILURE 23 /* Memory failure */ -#define BTA_AG_ERR_TEXT_TOO_LONG 24 /* Text string too long */ -#define BTA_AG_ERR_INV_CHAR_IN_TSTR 25 /* Invalid characters in text string */ -#define BTA_AG_ERR_DSTR_TOO_LONG 26 /* Dial string too long */ -#define BTA_AG_ERR_INV_CHAR_IN_DSTR 27 /* Invalid characters in dial string */ -#define BTA_AG_ERR_NO_NETWORK_SERV 30 /* No network service */ -#define BTA_AG_ERR_NETWORK_TIME_OUT 31 /* Network timeout */ -#define BTA_AG_ERR_NO_NET_EMG_ONLY 32 /* Network not allowed - emergency service only */ -#define BTA_AG_ERR_VOIP_CS_CALLS 33 /* AG cannot create simultaneous VoIP and CS calls */ -#define BTA_AG_ERR_NOT_FOR_VOIP 34 /* Not supported on this call type(VoIP) */ -#define BTA_AG_ERR_SIP_RESP_CODE 35 /* SIP 3 digit response code */ - -#if 0 /* Not Used in Bluetooth HFP 1.5 Specification */ -#define BTA_AG_ERR_PHADAP_LNK_RES 2 /* Phone-adapter link reserved */ -#define BTA_AG_ERR_PHFSIM_PIN_REQ 6 /* PH-FSIM PIN required */ -#define BTA_AG_ERR_PHFSIM_PUK_REQ 7 /* PH-FSIM PUK required */ -#define BTA_AG_ERR_SIM_WRONG 15 /* SIM wrong */ -#define BTA_AG_ERR_NOT_FOUND 22 /* Not found */ -#define BTA_AG_ERR_NETWORK_TIMEOUT 31 /* Network timeout */ -#define BTA_AG_ERR_NET_PIN_REQ 40 /* Network personalization PIN required */ -#define BTA_AG_ERR_NET_PUK_REQ 41 /* Network personalization PUK required */ -#define BTA_AG_ERR_SUBSET_PIN_REQ 42 /* Network subset personalization PIN required */ -#define BTA_AG_ERR_SUBSET_PUK_REQ 43 /* Network subset personalization PUK required */ -#define BTA_AG_ERR_SERVPRO_PIN_REQ 44 /* Service provider personalization PIN required */ -#define BTA_AG_ERR_SERVPRO_PUK_REQ 45 /* Service provider personalization PUK required */ -#define BTA_AG_ERR_CORP_PIN_REQ 46 /* Corporate personalization PIN required */ -#define BTA_AG_ERR_CORP_PUK_REQ 47 /* Corporate personalization PUK required */ -#define BTA_AG_ERR_UNKNOWN 100 /* Unknown error */ +#define BTA_AG_ERR_PHONE_FAILURE 0 /* Phone Failure */ +#define BTA_AG_ERR_NO_CONN_PHONE 1 /* No connection to phone */ +#define BTA_AG_ERR_OP_NOT_ALLOWED 3 /* Operation not allowed */ +#define BTA_AG_ERR_OP_NOT_SUPPORTED 4 /* Operation not supported */ +#define BTA_AG_ERR_PHSIM_PIN_REQ 5 /* PH-SIM PIN required */ +#define BTA_AG_ERR_SIM_NOT_INSERTED 10 /* SIM not inserted */ +#define BTA_AG_ERR_SIM_PIN_REQ 11 /* SIM PIN required */ +#define BTA_AG_ERR_SIM_PUK_REQ 12 /* SIM PUK required */ +#define BTA_AG_ERR_SIM_FAILURE 13 /* SIM failure */ +#define BTA_AG_ERR_SIM_BUSY 14 /* SIM busy */ +#define BTA_AG_ERR_INCORRECT_PWD 16 /* Incorrect password */ +#define BTA_AG_ERR_SIM_PIN2_REQ 17 /* SIM PIN2 required */ +#define BTA_AG_ERR_SIM_PUK2_REQ 18 /* SIM PUK2 required */ +#define BTA_AG_ERR_MEMORY_FULL 20 /* Memory full */ +#define BTA_AG_ERR_INVALID_INDEX 21 /* Invalid index */ +#define BTA_AG_ERR_MEMORY_FAILURE 23 /* Memory failure */ +#define BTA_AG_ERR_TEXT_TOO_LONG 24 /* Text string too long */ +#define BTA_AG_ERR_INV_CHAR_IN_TSTR 25 /* Invalid characters in text string */ +#define BTA_AG_ERR_DSTR_TOO_LONG 26 /* Dial string too long */ +#define BTA_AG_ERR_INV_CHAR_IN_DSTR 27 /* Invalid characters in dial string */ +#define BTA_AG_ERR_NO_NETWORK_SERV 30 /* No network service */ +#define BTA_AG_ERR_NETWORK_TIME_OUT 31 /* Network timeout */ +#define BTA_AG_ERR_NO_NET_EMG_ONLY \ + 32 /* Network not allowed - emergency service only */ +#define BTA_AG_ERR_VOIP_CS_CALLS \ + 33 /* AG cannot create simultaneous VoIP and CS calls */ +#define BTA_AG_ERR_NOT_FOR_VOIP 34 /* Not supported on this call type(VoIP) */ +#define BTA_AG_ERR_SIP_RESP_CODE 35 /* SIP 3 digit response code */ + +#if 0 /* Not Used in Bluetooth HFP 1.5 Specification */ +#define BTA_AG_ERR_PHADAP_LNK_RES 2 /* Phone-adapter link reserved */ +#define BTA_AG_ERR_PHFSIM_PIN_REQ 6 /* PH-FSIM PIN required */ +#define BTA_AG_ERR_PHFSIM_PUK_REQ 7 /* PH-FSIM PUK required */ +#define BTA_AG_ERR_SIM_WRONG 15 /* SIM wrong */ +#define BTA_AG_ERR_NOT_FOUND 22 /* Not found */ +#define BTA_AG_ERR_NETWORK_TIMEOUT 31 /* Network timeout */ +#define BTA_AG_ERR_NET_PIN_REQ 40 /* Network personalization PIN required */ +#define BTA_AG_ERR_NET_PUK_REQ 41 /* Network personalization PUK required */ +#define BTA_AG_ERR_SUBSET_PIN_REQ \ + 42 /* Network subset personalization PIN required */ +#define BTA_AG_ERR_SUBSET_PUK_REQ \ + 43 /* Network subset personalization PUK required */ +#define BTA_AG_ERR_SERVPRO_PIN_REQ \ + 44 /* Service provider personalization PIN required */ +#define BTA_AG_ERR_SERVPRO_PUK_REQ \ + 45 /* Service provider personalization PUK required */ +#define BTA_AG_ERR_CORP_PIN_REQ \ + 46 /* Corporate personalization PIN required \ + */ +#define BTA_AG_ERR_CORP_PUK_REQ \ + 47 /* Corporate personalization PUK required \ + */ +#define BTA_AG_ERR_UNKNOWN 100 /* Unknown error */ /* GPRS-related errors */ -#define BTA_AG_ERR_ILL_MS 103 /* Illegal MS (#3) */ -#define BTA_AG_ERR_ILL_ME 106 /* Illegal ME (#6) */ -#define BTA_AG_ERR_GPRS_NOT_ALLOWED 107 /* GPRS services not allowed (#7) */ -#define BTA_AG_ERR_PLMN_NOT_ALLOWED 111 /* PLMN services not allowed (#11) */ -#define BTA_AG_ERR_LOC_NOT_ALLOWED 112 /* Location area not allowed (#12) */ -#define BTA_AG_ERR_ROAM_NOT_ALLOWED 113 /* Roaming not allowed in this location area (#13) */ +#define BTA_AG_ERR_ILL_MS 103 /* Illegal MS (#3) */ +#define BTA_AG_ERR_ILL_ME 106 /* Illegal ME (#6) */ +#define BTA_AG_ERR_GPRS_NOT_ALLOWED 107 /* GPRS services not allowed (#7) */ +#define BTA_AG_ERR_PLMN_NOT_ALLOWED 111 /* PLMN services not allowed (#11) */ +#define BTA_AG_ERR_LOC_NOT_ALLOWED 112 /* Location area not allowed (#12) */ +#define BTA_AG_ERR_ROAM_NOT_ALLOWED \ + 113 /* Roaming not allowed in this location area (#13) */ /* Errors related to a failure to Activate a Context */ -#define BTA_AG_ERR_OPT_NOT_SUPP 132 /* Service option not supported (#32) */ -#define BTA_AG_ERR_OPT_NOT_SUBSCR 133 /* Requested service option not subscribed (#33) */ -#define BTA_AG_ERR_OPT_OUT_OF_ORDER 134 /* Service option temporarily out of order (#34) */ -#define BTA_AG_ERR_PDP_AUTH_FAILURE 149 /* PDP authentication failure */ +#define BTA_AG_ERR_OPT_NOT_SUPP 132 /* Service option not supported (#32) */ +#define BTA_AG_ERR_OPT_NOT_SUBSCR \ + 133 /* Requested service option not subscribed (#33) */ +#define BTA_AG_ERR_OPT_OUT_OF_ORDER \ + 134 /* Service option temporarily out of order (#34) */ +#define BTA_AG_ERR_PDP_AUTH_FAILURE 149 /* PDP authentication failure */ /* Other GPRS errors */ -#define BTA_AG_ERR_INV_MOBILE_CLASS 150 /* Invalid mobile class */ -#define BTA_AG_ERR_UNSPEC_GPRS_ERR 148 /* Unspecified GPRS error */ -#endif /* Unused error codes */ - +#define BTA_AG_ERR_INV_MOBILE_CLASS 150 /* Invalid mobile class */ +#define BTA_AG_ERR_UNSPEC_GPRS_ERR 148 /* Unspecified GPRS error */ +#endif /* Unused error codes */ /* HFP result data 'ok_flag' */ -#define BTA_AG_OK_CONTINUE 0 /* Send out response (more responses coming) */ -#define BTA_AG_OK_DONE 1 /* Send out response followed by OK (finished) */ -#define BTA_AG_OK_ERROR 2 /* Error response */ +#define BTA_AG_OK_CONTINUE 0 /* Send out response (more responses coming) */ +#define BTA_AG_OK_DONE 1 /* Send out response followed by OK (finished) */ +#define BTA_AG_OK_ERROR 2 /* Error response */ /* BTRH values */ -#define BTA_AG_BTRH_SET_HOLD 0 /* Put incoming call on hold */ -#define BTA_AG_BTRH_SET_ACC 1 /* Accept incoming call on hold */ -#define BTA_AG_BTRH_SET_REJ 2 /* Reject incoming call on hold */ -#define BTA_AG_BTRH_READ 3 /* Read the current value */ -#define BTA_AG_BTRH_NO_RESP 4 /* Not in RH States (reply to read) */ +#define BTA_AG_BTRH_SET_HOLD 0 /* Put incoming call on hold */ +#define BTA_AG_BTRH_SET_ACC 1 /* Accept incoming call on hold */ +#define BTA_AG_BTRH_SET_REJ 2 /* Reject incoming call on hold */ +#define BTA_AG_BTRH_READ 3 /* Read the current value */ +#define BTA_AG_BTRH_NO_RESP 4 /* Not in RH States (reply to read) */ /* ASCII character string of arguments to the AT command or result */ #ifndef BTA_AG_AT_MAX_LEN -#define BTA_AG_AT_MAX_LEN 256 +#define BTA_AG_AT_MAX_LEN 256 #endif /* data associated with BTA_AG_IND_RES */ -typedef struct -{ - uint16_t id; - uint16_t value; - bool on_demand; +typedef struct { + uint16_t id; + uint16_t value; + bool on_demand; } tBTA_AG_IND; /* data type for BTA_AgResult() */ -typedef struct -{ - char str[BTA_AG_AT_MAX_LEN+1]; - tBTA_AG_IND ind; - uint16_t num; - uint16_t audio_handle; - uint16_t errcode; /* Valid only if 'ok_flag' is set to BTA_AG_OK_ERROR */ - uint8_t ok_flag; /* Indicates if response is finished, and if error occurred */ - bool state; +typedef struct { + char str[BTA_AG_AT_MAX_LEN + 1]; + tBTA_AG_IND ind; + uint16_t num; + uint16_t audio_handle; + uint16_t errcode; /* Valid only if 'ok_flag' is set to BTA_AG_OK_ERROR */ + uint8_t + ok_flag; /* Indicates if response is finished, and if error occurred */ + bool state; } tBTA_AG_RES_DATA; /* AG callback events */ -#define BTA_AG_ENABLE_EVT 0 /* AG enabled */ -#define BTA_AG_REGISTER_EVT 1 /* AG registered */ -#define BTA_AG_OPEN_EVT 2 /* AG connection open */ -#define BTA_AG_CLOSE_EVT 3 /* AG connection closed */ -#define BTA_AG_CONN_EVT 4 /* Service level connection opened */ -#define BTA_AG_AUDIO_OPEN_EVT 5 /* Audio connection open */ -#define BTA_AG_AUDIO_CLOSE_EVT 6 /* Audio connection closed */ -#define BTA_AG_SPK_EVT 7 /* Speaker volume changed */ -#define BTA_AG_MIC_EVT 8 /* Microphone volume changed */ -#define BTA_AG_AT_CKPD_EVT 9 /* CKPD from the HS */ -#define BTA_AG_DISABLE_EVT 30 /* AG disabled */ +#define BTA_AG_ENABLE_EVT 0 /* AG enabled */ +#define BTA_AG_REGISTER_EVT 1 /* AG registered */ +#define BTA_AG_OPEN_EVT 2 /* AG connection open */ +#define BTA_AG_CLOSE_EVT 3 /* AG connection closed */ +#define BTA_AG_CONN_EVT 4 /* Service level connection opened */ +#define BTA_AG_AUDIO_OPEN_EVT 5 /* Audio connection open */ +#define BTA_AG_AUDIO_CLOSE_EVT 6 /* Audio connection closed */ +#define BTA_AG_SPK_EVT 7 /* Speaker volume changed */ +#define BTA_AG_MIC_EVT 8 /* Microphone volume changed */ +#define BTA_AG_AT_CKPD_EVT 9 /* CKPD from the HS */ +#define BTA_AG_DISABLE_EVT 30 /* AG disabled */ #if (BTM_WBS_INCLUDED == TRUE) -#define BTA_AG_WBS_EVT 31 /* SCO codec info */ +#define BTA_AG_WBS_EVT 31 /* SCO codec info */ #endif /* Values below are for HFP only */ -#define BTA_AG_AT_A_EVT 10 /* Answer a call */ -#define BTA_AG_AT_D_EVT 11 /* Place a call using number or memory dial */ -#define BTA_AG_AT_CHLD_EVT 12 /* Call hold */ -#define BTA_AG_AT_CHUP_EVT 13 /* Hang up a call */ -#define BTA_AG_AT_CIND_EVT 14 /* Read indicator settings */ -#define BTA_AG_AT_VTS_EVT 15 /* Transmit DTMF tone */ -#define BTA_AG_AT_BINP_EVT 16 /* Retrieve number from voice tag */ -#define BTA_AG_AT_BLDN_EVT 17 /* Place call to last dialed number */ -#define BTA_AG_AT_BVRA_EVT 18 /* Enable/disable voice recognition */ -#define BTA_AG_AT_NREC_EVT 19 /* Disable echo canceling */ -#define BTA_AG_AT_CNUM_EVT 20 /* Retrieve subscriber number */ -#define BTA_AG_AT_BTRH_EVT 21 /* CCAP-style incoming call hold */ -#define BTA_AG_AT_CLCC_EVT 22 /* Query list of current calls */ -#define BTA_AG_AT_COPS_EVT 23 /* Query list of current calls */ -#define BTA_AG_AT_UNAT_EVT 24 /* Unknown AT command */ -#define BTA_AG_AT_CBC_EVT 25 /* Battery Level report from HF */ -#define BTA_AG_AT_BAC_EVT 26 /* avablable codec */ -#define BTA_AG_AT_BCS_EVT 27 /* Codec select */ -#define BTA_AG_AT_BIND_EVT 28 /* HF indicator */ -#define BTA_AG_AT_BIEV_EVT 29 /* HF indicator updates from peer */ +#define BTA_AG_AT_A_EVT 10 /* Answer a call */ +#define BTA_AG_AT_D_EVT 11 /* Place a call using number or memory dial */ +#define BTA_AG_AT_CHLD_EVT 12 /* Call hold */ +#define BTA_AG_AT_CHUP_EVT 13 /* Hang up a call */ +#define BTA_AG_AT_CIND_EVT 14 /* Read indicator settings */ +#define BTA_AG_AT_VTS_EVT 15 /* Transmit DTMF tone */ +#define BTA_AG_AT_BINP_EVT 16 /* Retrieve number from voice tag */ +#define BTA_AG_AT_BLDN_EVT 17 /* Place call to last dialed number */ +#define BTA_AG_AT_BVRA_EVT 18 /* Enable/disable voice recognition */ +#define BTA_AG_AT_NREC_EVT 19 /* Disable echo canceling */ +#define BTA_AG_AT_CNUM_EVT 20 /* Retrieve subscriber number */ +#define BTA_AG_AT_BTRH_EVT 21 /* CCAP-style incoming call hold */ +#define BTA_AG_AT_CLCC_EVT 22 /* Query list of current calls */ +#define BTA_AG_AT_COPS_EVT 23 /* Query list of current calls */ +#define BTA_AG_AT_UNAT_EVT 24 /* Unknown AT command */ +#define BTA_AG_AT_CBC_EVT 25 /* Battery Level report from HF */ +#define BTA_AG_AT_BAC_EVT 26 /* avablable codec */ +#define BTA_AG_AT_BCS_EVT 27 /* Codec select */ +#define BTA_AG_AT_BIND_EVT 28 /* HF indicator */ +#define BTA_AG_AT_BIEV_EVT 29 /* HF indicator updates from peer */ typedef uint8_t tBTA_AG_EVT; /* data associated with most non-AT events */ -typedef struct -{ - uint16_t handle; - uint8_t app_id; - tBTA_AG_STATUS status; +typedef struct { + uint16_t handle; + uint8_t app_id; + tBTA_AG_STATUS status; } tBTA_AG_HDR; /* data associated with BTA_AG_REGISTER_EVT */ -typedef struct -{ - tBTA_AG_HDR hdr; - tBTA_AG_STATUS status; +typedef struct { + tBTA_AG_HDR hdr; + tBTA_AG_STATUS status; } tBTA_AG_REGISTER; /* data associated with BTA_AG_OPEN_EVT */ -typedef struct -{ - tBTA_AG_HDR hdr; - BD_ADDR bd_addr; - tBTA_SERVICE_ID service_id; - tBTA_AG_STATUS status; +typedef struct { + tBTA_AG_HDR hdr; + BD_ADDR bd_addr; + tBTA_SERVICE_ID service_id; + tBTA_AG_STATUS status; } tBTA_AG_OPEN; /* data associated with BTA_AG_CLOSE_EVT */ -typedef struct -{ - tBTA_AG_HDR hdr; - BD_ADDR bd_addr; +typedef struct { + tBTA_AG_HDR hdr; + BD_ADDR bd_addr; } tBTA_AG_CLOSE; /* data associated with BTA_AG_CONN_EVT */ -typedef struct -{ - tBTA_AG_HDR hdr; - tBTA_AG_PEER_FEAT peer_feat; - BD_ADDR bd_addr; - tBTA_AG_PEER_CODEC peer_codec; +typedef struct { + tBTA_AG_HDR hdr; + tBTA_AG_PEER_FEAT peer_feat; + BD_ADDR bd_addr; + tBTA_AG_PEER_CODEC peer_codec; } tBTA_AG_CONN; /* data associated with AT command event */ -typedef struct -{ - tBTA_AG_HDR hdr; - BD_ADDR bd_addr; - char str[BTA_AG_AT_MAX_LEN+1]; - uint16_t num; - uint8_t idx; /* call number used by CLCC and CHLD */ - uint16_t lidx; /* long index, ex, HF indicator */ +typedef struct { + tBTA_AG_HDR hdr; + BD_ADDR bd_addr; + char str[BTA_AG_AT_MAX_LEN + 1]; + uint16_t num; + uint8_t idx; /* call number used by CLCC and CHLD */ + uint16_t lidx; /* long index, ex, HF indicator */ } tBTA_AG_VAL; /* union of data associated with AG callback */ -typedef union -{ - tBTA_AG_HDR hdr; - tBTA_AG_REGISTER reg; - tBTA_AG_OPEN open; - tBTA_AG_CLOSE close; - tBTA_AG_CONN conn; - tBTA_AG_VAL val; +typedef union { + tBTA_AG_HDR hdr; + tBTA_AG_REGISTER reg; + tBTA_AG_OPEN open; + tBTA_AG_CLOSE close; + tBTA_AG_CONN conn; + tBTA_AG_VAL val; } tBTA_AG; /* AG callback */ -typedef void (tBTA_AG_CBACK)(tBTA_AG_EVT event, tBTA_AG *p_data); +typedef void(tBTA_AG_CBACK)(tBTA_AG_EVT event, tBTA_AG* p_data); /* indicator constants HFP 1.1 and later */ -#define BTA_AG_IND_CALL 1 /* position of call indicator */ -#define BTA_AG_IND_CALLSETUP 2 /* position of callsetup indicator */ -#define BTA_AG_IND_SERVICE 3 /* position of service indicator */ +#define BTA_AG_IND_CALL 1 /* position of call indicator */ +#define BTA_AG_IND_CALLSETUP 2 /* position of callsetup indicator */ +#define BTA_AG_IND_SERVICE 3 /* position of service indicator */ /* indicator constants HFP 1.5 and later */ -#define BTA_AG_IND_SIGNAL 4 /* position of signal strength indicator */ -#define BTA_AG_IND_ROAM 5 /* position of roaming indicator */ -#define BTA_AG_IND_BATTCHG 6 /* position of battery charge indicator */ -#define BTA_AG_IND_CALLHELD 7 /* position of callheld indicator */ -#define BTA_AG_IND_BEARER 8 /* position of bearer indicator */ +#define BTA_AG_IND_SIGNAL 4 /* position of signal strength indicator */ +#define BTA_AG_IND_ROAM 5 /* position of roaming indicator */ +#define BTA_AG_IND_BATTCHG 6 /* position of battery charge indicator */ +#define BTA_AG_IND_CALLHELD 7 /* position of callheld indicator */ +#define BTA_AG_IND_BEARER 8 /* position of bearer indicator */ /* call indicator values */ -#define BTA_AG_CALL_INACTIVE 0 /* Phone call inactive */ -#define BTA_AG_CALL_ACTIVE 1 /* Phone call active */ +#define BTA_AG_CALL_INACTIVE 0 /* Phone call inactive */ +#define BTA_AG_CALL_ACTIVE 1 /* Phone call active */ /* callsetup indicator values */ -#define BTA_AG_CALLSETUP_NONE 0 /* Not currently in call set up */ -#define BTA_AG_CALLSETUP_INCOMING 1 /* Incoming call process ongoing */ -#define BTA_AG_CALLSETUP_OUTGOING 2 /* Outgoing call set up is ongoing */ -#define BTA_AG_CALLSETUP_ALERTING 3 /* Remote party being alerted in an outgoing call */ +#define BTA_AG_CALLSETUP_NONE 0 /* Not currently in call set up */ +#define BTA_AG_CALLSETUP_INCOMING 1 /* Incoming call process ongoing */ +#define BTA_AG_CALLSETUP_OUTGOING 2 /* Outgoing call set up is ongoing */ +#define BTA_AG_CALLSETUP_ALERTING \ + 3 /* Remote party being alerted in an outgoing call */ /* service indicator values */ -#define BTA_AG_SERVICE_NONE 0 /* Neither CS nor VoIP service is available */ -#define BTA_AG_SERVICE_CS 1 /* Only CS service is available */ -#define BTA_AG_SERVICE_VOIP 2 /* Only VoIP service is available */ -#define BTA_AG_SERVICE_CS_VOIP 3 /* Both CS and VoIP services available */ +#define BTA_AG_SERVICE_NONE 0 /* Neither CS nor VoIP service is available */ +#define BTA_AG_SERVICE_CS 1 /* Only CS service is available */ +#define BTA_AG_SERVICE_VOIP 2 /* Only VoIP service is available */ +#define BTA_AG_SERVICE_CS_VOIP \ + 3 /* Both CS and VoIP services available */ /* callheld indicator values */ -#define BTA_AG_CALLHELD_INACTIVE 0 /* No held calls */ -#define BTA_AG_CALLHELD_ACTIVE 1 /* Call held and call active */ -#define BTA_AG_CALLHELD_NOACTIVE 2 /* Call held and no call active */ +#define BTA_AG_CALLHELD_INACTIVE 0 /* No held calls */ +#define BTA_AG_CALLHELD_ACTIVE 1 /* Call held and call active */ +#define BTA_AG_CALLHELD_NOACTIVE 2 /* Call held and no call active */ /* signal strength indicator values */ -#define BTA_AG_ROAMING_INACTIVE 0 /* Phone call inactive */ -#define BTA_AG_ROAMING_ACTIVE 1 /* Phone call active */ +#define BTA_AG_ROAMING_INACTIVE 0 /* Phone call inactive */ +#define BTA_AG_ROAMING_ACTIVE 1 /* Phone call active */ /* bearer indicator values */ -#define BTA_AG_BEARER_WLAN 0 /* WLAN */ -#define BTA_AG_BEARER_BLUETOOTH 1 /* Bluetooth */ -#define BTA_AG_BEARER_WIRED 2 /* Wired */ -#define BTA_AG_BEARER_2G3G 3 /* 2G 3G */ -#define BTA_AG_BEARER_WIMAX 4 /* WIMAX */ -#define BTA_AG_BEARER_RES1 5 /* Reserved */ -#define BTA_AG_BEARER_RES2 6 /* Reserved */ -#define BTA_AG_BEARER_RES3 7 /* Reserved */ +#define BTA_AG_BEARER_WLAN 0 /* WLAN */ +#define BTA_AG_BEARER_BLUETOOTH 1 /* Bluetooth */ +#define BTA_AG_BEARER_WIRED 2 /* Wired */ +#define BTA_AG_BEARER_2G3G 3 /* 2G 3G */ +#define BTA_AG_BEARER_WIMAX 4 /* WIMAX */ +#define BTA_AG_BEARER_RES1 5 /* Reserved */ +#define BTA_AG_BEARER_RES2 6 /* Reserved */ +#define BTA_AG_BEARER_RES3 7 /* Reserved */ /* type for HF indicator */ -typedef struct -{ - uint16_t ind_id; - bool is_supported; - bool is_enable; - uint32_t ind_min_val; - uint32_t ind_max_val; +typedef struct { + uint16_t ind_id; + bool is_supported; + bool is_enable; + uint32_t ind_min_val; + uint32_t ind_max_val; } tBTA_AG_HF_IND; /* AG configuration structure */ -typedef struct -{ - const char *cind_info; - const char *bind_info; - uint8_t num_local_hf_ind; - int32_t conn_tout; - uint16_t sco_pkt_types; - const char *chld_val_ecc; - const char *chld_val; +typedef struct { + const char* cind_info; + const char* bind_info; + uint8_t num_local_hf_ind; + int32_t conn_tout; + uint16_t sco_pkt_types; + const char* chld_val_ecc; + const char* chld_val; } tBTA_AG_CFG; /***************************************************************************** @@ -458,7 +467,7 @@ typedef struct * Returns BTA_SUCCESS if OK, BTA_FAILURE otherwise. * ******************************************************************************/ -tBTA_STATUS BTA_AgEnable(tBTA_AG_PARSE_MODE parse_mode, tBTA_AG_CBACK *p_cback); +tBTA_STATUS BTA_AgEnable(tBTA_AG_PARSE_MODE parse_mode, tBTA_AG_CBACK* p_cback); /******************************************************************************* * @@ -483,7 +492,8 @@ void BTA_AgDisable(void); * ******************************************************************************/ void BTA_AgRegister(tBTA_SERVICE_MASK services, tBTA_SEC sec_mask, - tBTA_AG_FEAT features, const char *p_service_names[], uint8_t app_id); + tBTA_AG_FEAT features, const char* p_service_names[], + uint8_t app_id); /******************************************************************************* * @@ -510,7 +520,8 @@ void BTA_AgDeregister(uint16_t handle); * Returns void * ******************************************************************************/ -void BTA_AgOpen(uint16_t handle, BD_ADDR bd_addr, tBTA_SEC sec_mask, tBTA_SERVICE_MASK services); +void BTA_AgOpen(uint16_t handle, BD_ADDR bd_addr, tBTA_SEC sec_mask, + tBTA_SERVICE_MASK services); /******************************************************************************* * @@ -563,7 +574,8 @@ void BTA_AgAudioClose(uint16_t handle); * Returns void * ******************************************************************************/ -void BTA_AgResult(uint16_t handle, tBTA_AG_RES result, tBTA_AG_RES_DATA *p_data); +void BTA_AgResult(uint16_t handle, tBTA_AG_RES result, + tBTA_AG_RES_DATA* p_data); /******************************************************************************* * diff --git a/system/bta/include/bta_ag_ci.h b/system/bta/include/bta_ag_ci.h index 4b3a60264c4..984625a2d4d 100644 --- a/system/bta/include/bta_ag_ci.h +++ b/system/bta/include/bta_ag_ci.h @@ -30,8 +30,7 @@ * Function Declarations ****************************************************************************/ #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif /******************************************************************************* @@ -45,7 +44,7 @@ extern "C" * Returns void * ******************************************************************************/ -extern void bta_ag_ci_rx_write(uint16_t handle, char *p_data, uint16_t len); +extern void bta_ag_ci_rx_write(uint16_t handle, char* p_data, uint16_t len); /****************************************************************************** * @@ -70,7 +69,7 @@ extern void bta_ag_ci_slc_ready(uint16_t handle); * Returns void * *****************************************************************************/ -extern void bta_ag_ci_wbs_command (uint16_t handle, char *p_data, uint16_t len); +extern void bta_ag_ci_wbs_command(uint16_t handle, char* p_data, uint16_t len); #ifdef __cplusplus } diff --git a/system/bta/include/bta_ag_co.h b/system/bta/include/bta_ag_co.h index e744150c619..336019d0681 100644 --- a/system/bta/include/bta_ag_co.h +++ b/system/bta/include/bta_ag_co.h @@ -50,13 +50,16 @@ extern void bta_ag_co_init(void); * * Function bta_ag_co_audio_state * - * Description This function is called by the AG before the audio connection + * Description This function is called by the AG before the audio + *connection * is brought up, after it comes up, and after it goes down. * * Parameters handle - handle of the AG instance * state - Audio state - * codec - if WBS support is compiled in, codec to going to be used is provided - * and when in SCO_STATE_SETUP, BTM_I2SPCMConfig() must be called with + * codec - if WBS support is compiled in, codec to going to be + *used is provided + * and when in SCO_STATE_SETUP, BTM_I2SPCMConfig() must be + *called with * the correct platform parameters. * in the other states codec type should not be ignored * @@ -64,18 +67,20 @@ extern void bta_ag_co_init(void); * ******************************************************************************/ #if (BTM_WBS_INCLUDED == TRUE) -extern void bta_ag_co_audio_state(uint16_t handle, uint8_t app_id, uint8_t state, - tBTA_AG_PEER_CODEC codec); +extern void bta_ag_co_audio_state(uint16_t handle, uint8_t app_id, + uint8_t state, tBTA_AG_PEER_CODEC codec); #else -extern void bta_ag_co_audio_state(uint16_t handle, uint8_t app_id, uint8_t state); +extern void bta_ag_co_audio_state(uint16_t handle, uint8_t app_id, + uint8_t state); #endif /******************************************************************************* * * Function bta_ag_co_data_open * - * Description This function is executed by AG when a service level connection + * Description This function is executed by AG when a service level + *connection * is opened. The phone can use this function to set * up data paths or perform any required initialization or * set up particular to the connected service. @@ -111,7 +116,7 @@ extern void bta_ag_co_data_close(uint16_t handle); * Returns void * ******************************************************************************/ -extern void bta_ag_co_tx_write(uint16_t handle, uint8_t *p_data, uint16_t len); +extern void bta_ag_co_tx_write(uint16_t handle, uint8_t* p_data, uint16_t len); #ifdef __cplusplus } diff --git a/system/bta/include/bta_api.h b/system/bta/include/bta_api.h index c6bcecf9e9d..a583d707605 100644 --- a/system/bta/include/bta_api.h +++ b/system/bta/include/bta_api.h @@ -42,310 +42,328 @@ extern "C" { ****************************************************************************/ /* Status Return Value */ -#define BTA_SUCCESS 0 /* Successful operation. */ -#define BTA_FAILURE 1 /* Generic failure. */ -#define BTA_PENDING 2 /* API cannot be completed right now */ -#define BTA_BUSY 3 -#define BTA_NO_RESOURCES 4 -#define BTA_WRONG_MODE 5 +#define BTA_SUCCESS 0 /* Successful operation. */ +#define BTA_FAILURE 1 /* Generic failure. */ +#define BTA_PENDING 2 /* API cannot be completed right now */ +#define BTA_BUSY 3 +#define BTA_NO_RESOURCES 4 +#define BTA_WRONG_MODE 5 typedef uint8_t tBTA_STATUS; /* * Service ID * - * NOTES: When you add a new Service ID for BTA AND require to change the value of BTA_MAX_SERVICE_ID, - * make sure that the correct security ID of the new service from Security service definitions (btm_api.h) - * should be added to bta_service_id_to_btm_srv_id_lkup_tbl table in bta_dm_act.c. + * NOTES: When you add a new Service ID for BTA AND require to change the value + * of BTA_MAX_SERVICE_ID, + * make sure that the correct security ID of the new service from + * Security service definitions (btm_api.h) + * should be added to bta_service_id_to_btm_srv_id_lkup_tbl table in + * bta_dm_act.c. */ -#define BTA_RES_SERVICE_ID 0 /* Reserved */ -#define BTA_SPP_SERVICE_ID 1 /* Serial port profile. */ -#define BTA_DUN_SERVICE_ID 2 /* Dial-up networking profile. */ -#define BTA_A2DP_SOURCE_SERVICE_ID 3 /* A2DP Source profile. */ -#define BTA_LAP_SERVICE_ID 4 /* LAN access profile. */ -#define BTA_HSP_SERVICE_ID 5 /* Headset profile. */ -#define BTA_HFP_SERVICE_ID 6 /* Hands-free profile. */ -#define BTA_OPP_SERVICE_ID 7 /* Object push */ -#define BTA_FTP_SERVICE_ID 8 /* File transfer */ -#define BTA_CTP_SERVICE_ID 9 /* Cordless Terminal */ -#define BTA_ICP_SERVICE_ID 10 /* Intercom Terminal */ -#define BTA_SYNC_SERVICE_ID 11 /* Synchronization */ -#define BTA_BPP_SERVICE_ID 12 /* Basic printing profile */ -#define BTA_BIP_SERVICE_ID 13 /* Basic Imaging profile */ -#define BTA_PANU_SERVICE_ID 14 /* PAN User */ -#define BTA_NAP_SERVICE_ID 15 /* PAN Network access point */ -#define BTA_GN_SERVICE_ID 16 /* PAN Group Ad-hoc networks */ -#define BTA_SAP_SERVICE_ID 17 /* SIM Access profile */ -#define BTA_A2DP_SINK_SERVICE_ID 18 /* A2DP Sink */ -#define BTA_AVRCP_SERVICE_ID 19 /* A/V remote control */ -#define BTA_HID_SERVICE_ID 20 /* HID */ -#define BTA_VDP_SERVICE_ID 21 /* Video distribution */ -#define BTA_PBAP_SERVICE_ID 22 /* PhoneBook Access Server*/ -#define BTA_HSP_HS_SERVICE_ID 23 /* HFP HS role */ -#define BTA_HFP_HS_SERVICE_ID 24 /* HSP HS role */ -#define BTA_MAP_SERVICE_ID 25 /* Message Access Profile */ -#define BTA_MN_SERVICE_ID 26 /* Message Notification Service */ -#define BTA_HDP_SERVICE_ID 27 /* Health Device Profile */ -#define BTA_PCE_SERVICE_ID 28 /* PhoneBook Access Client*/ -#define BTA_SDP_SERVICE_ID 29 /* SDP Search*/ +#define BTA_RES_SERVICE_ID 0 /* Reserved */ +#define BTA_SPP_SERVICE_ID 1 /* Serial port profile. */ +#define BTA_DUN_SERVICE_ID 2 /* Dial-up networking profile. */ +#define BTA_A2DP_SOURCE_SERVICE_ID 3 /* A2DP Source profile. */ +#define BTA_LAP_SERVICE_ID 4 /* LAN access profile. */ +#define BTA_HSP_SERVICE_ID 5 /* Headset profile. */ +#define BTA_HFP_SERVICE_ID 6 /* Hands-free profile. */ +#define BTA_OPP_SERVICE_ID 7 /* Object push */ +#define BTA_FTP_SERVICE_ID 8 /* File transfer */ +#define BTA_CTP_SERVICE_ID 9 /* Cordless Terminal */ +#define BTA_ICP_SERVICE_ID 10 /* Intercom Terminal */ +#define BTA_SYNC_SERVICE_ID 11 /* Synchronization */ +#define BTA_BPP_SERVICE_ID 12 /* Basic printing profile */ +#define BTA_BIP_SERVICE_ID 13 /* Basic Imaging profile */ +#define BTA_PANU_SERVICE_ID 14 /* PAN User */ +#define BTA_NAP_SERVICE_ID 15 /* PAN Network access point */ +#define BTA_GN_SERVICE_ID 16 /* PAN Group Ad-hoc networks */ +#define BTA_SAP_SERVICE_ID 17 /* SIM Access profile */ +#define BTA_A2DP_SINK_SERVICE_ID 18 /* A2DP Sink */ +#define BTA_AVRCP_SERVICE_ID 19 /* A/V remote control */ +#define BTA_HID_SERVICE_ID 20 /* HID */ +#define BTA_VDP_SERVICE_ID 21 /* Video distribution */ +#define BTA_PBAP_SERVICE_ID 22 /* PhoneBook Access Server*/ +#define BTA_HSP_HS_SERVICE_ID 23 /* HFP HS role */ +#define BTA_HFP_HS_SERVICE_ID 24 /* HSP HS role */ +#define BTA_MAP_SERVICE_ID 25 /* Message Access Profile */ +#define BTA_MN_SERVICE_ID 26 /* Message Notification Service */ +#define BTA_HDP_SERVICE_ID 27 /* Health Device Profile */ +#define BTA_PCE_SERVICE_ID 28 /* PhoneBook Access Client*/ +#define BTA_SDP_SERVICE_ID 29 /* SDP Search*/ #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) /* BLE profile service ID */ -#define BTA_BLE_SERVICE_ID 30 /* GATT profile */ +#define BTA_BLE_SERVICE_ID 30 /* GATT profile */ -#define BTA_USER_SERVICE_ID 31 /* User requested UUID */ +#define BTA_USER_SERVICE_ID 31 /* User requested UUID */ -#define BTA_MAX_SERVICE_ID 32 +#define BTA_MAX_SERVICE_ID 32 #else -#define BTA_USER_SERVICE_ID 30 /* User requested UUID */ -#define BTA_MAX_SERVICE_ID 31 +#define BTA_USER_SERVICE_ID 30 /* User requested UUID */ +#define BTA_MAX_SERVICE_ID 31 #endif /* service IDs (BTM_SEC_SERVICE_FIRST_EMPTY + 1) to (BTM_SEC_MAX_SERVICES - 1) * are used by BTA JV */ -#define BTA_FIRST_JV_SERVICE_ID (BTM_SEC_SERVICE_FIRST_EMPTY + 1) -#define BTA_LAST_JV_SERVICE_ID (BTM_SEC_MAX_SERVICES - 1) +#define BTA_FIRST_JV_SERVICE_ID (BTM_SEC_SERVICE_FIRST_EMPTY + 1) +#define BTA_LAST_JV_SERVICE_ID (BTM_SEC_MAX_SERVICES - 1) typedef uint8_t tBTA_SERVICE_ID; /* Service ID Mask */ -#define BTA_RES_SERVICE_MASK 0x00000001 /* Reserved */ -#define BTA_SPP_SERVICE_MASK 0x00000002 /* Serial port profile. */ -#define BTA_DUN_SERVICE_MASK 0x00000004 /* Dial-up networking profile. */ -#define BTA_FAX_SERVICE_MASK 0x00000008 /* Fax profile. */ -#define BTA_LAP_SERVICE_MASK 0x00000010 /* LAN access profile. */ -#define BTA_HSP_SERVICE_MASK 0x00000020 /* HSP AG role. */ -#define BTA_HFP_SERVICE_MASK 0x00000040 /* HFP AG role */ -#define BTA_OPP_SERVICE_MASK 0x00000080 /* Object push */ -#define BTA_FTP_SERVICE_MASK 0x00000100 /* File transfer */ -#define BTA_CTP_SERVICE_MASK 0x00000200 /* Cordless Terminal */ -#define BTA_ICP_SERVICE_MASK 0x00000400 /* Intercom Terminal */ -#define BTA_SYNC_SERVICE_MASK 0x00000800 /* Synchronization */ -#define BTA_BPP_SERVICE_MASK 0x00001000 /* Print server */ -#define BTA_BIP_SERVICE_MASK 0x00002000 /* Basic Imaging */ -#define BTA_PANU_SERVICE_MASK 0x00004000 /* PAN User */ -#define BTA_NAP_SERVICE_MASK 0x00008000 /* PAN Network access point */ -#define BTA_GN_SERVICE_MASK 0x00010000 /* PAN Group Ad-hoc networks */ -#define BTA_SAP_SERVICE_MASK 0x00020000 /* PAN Group Ad-hoc networks */ -#define BTA_A2DP_SERVICE_MASK 0x00040000 /* Advanced audio distribution */ -#define BTA_AVRCP_SERVICE_MASK 0x00080000 /* A/V remote control */ -#define BTA_HID_SERVICE_MASK 0x00100000 /* HID */ -#define BTA_VDP_SERVICE_MASK 0x00200000 /* Video distribution */ -#define BTA_PBAP_SERVICE_MASK 0x00400000 /* Phone Book Server */ -#define BTA_HSP_HS_SERVICE_MASK 0x00800000 /* HFP HS role */ -#define BTA_HFP_HS_SERVICE_MASK 0x01000000 /* HSP HS role */ -#define BTA_MAS_SERVICE_MASK 0x02000000 /* Message Access Profile */ -#define BTA_MN_SERVICE_MASK 0x04000000 /* Message Notification Profile */ -#define BTA_HL_SERVICE_MASK 0x08000000 /* Health Device Profile */ -#define BTA_PCE_SERVICE_MASK 0x10000000 /* Phone Book Client */ +#define BTA_RES_SERVICE_MASK 0x00000001 /* Reserved */ +#define BTA_SPP_SERVICE_MASK 0x00000002 /* Serial port profile. */ +#define BTA_DUN_SERVICE_MASK 0x00000004 /* Dial-up networking profile. */ +#define BTA_FAX_SERVICE_MASK 0x00000008 /* Fax profile. */ +#define BTA_LAP_SERVICE_MASK 0x00000010 /* LAN access profile. */ +#define BTA_HSP_SERVICE_MASK 0x00000020 /* HSP AG role. */ +#define BTA_HFP_SERVICE_MASK 0x00000040 /* HFP AG role */ +#define BTA_OPP_SERVICE_MASK 0x00000080 /* Object push */ +#define BTA_FTP_SERVICE_MASK 0x00000100 /* File transfer */ +#define BTA_CTP_SERVICE_MASK 0x00000200 /* Cordless Terminal */ +#define BTA_ICP_SERVICE_MASK 0x00000400 /* Intercom Terminal */ +#define BTA_SYNC_SERVICE_MASK 0x00000800 /* Synchronization */ +#define BTA_BPP_SERVICE_MASK 0x00001000 /* Print server */ +#define BTA_BIP_SERVICE_MASK 0x00002000 /* Basic Imaging */ +#define BTA_PANU_SERVICE_MASK 0x00004000 /* PAN User */ +#define BTA_NAP_SERVICE_MASK 0x00008000 /* PAN Network access point */ +#define BTA_GN_SERVICE_MASK 0x00010000 /* PAN Group Ad-hoc networks */ +#define BTA_SAP_SERVICE_MASK 0x00020000 /* PAN Group Ad-hoc networks */ +#define BTA_A2DP_SERVICE_MASK 0x00040000 /* Advanced audio distribution */ +#define BTA_AVRCP_SERVICE_MASK 0x00080000 /* A/V remote control */ +#define BTA_HID_SERVICE_MASK 0x00100000 /* HID */ +#define BTA_VDP_SERVICE_MASK 0x00200000 /* Video distribution */ +#define BTA_PBAP_SERVICE_MASK 0x00400000 /* Phone Book Server */ +#define BTA_HSP_HS_SERVICE_MASK 0x00800000 /* HFP HS role */ +#define BTA_HFP_HS_SERVICE_MASK 0x01000000 /* HSP HS role */ +#define BTA_MAS_SERVICE_MASK 0x02000000 /* Message Access Profile */ +#define BTA_MN_SERVICE_MASK 0x04000000 /* Message Notification Profile */ +#define BTA_HL_SERVICE_MASK 0x08000000 /* Health Device Profile */ +#define BTA_PCE_SERVICE_MASK 0x10000000 /* Phone Book Client */ #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) -#define BTA_BLE_SERVICE_MASK 0x20000000 /* GATT based service */ -#define BTA_USER_SERVICE_MASK 0x40000000 /* Message Notification Profile */ +#define BTA_BLE_SERVICE_MASK 0x20000000 /* GATT based service */ +#define BTA_USER_SERVICE_MASK 0x40000000 /* Message Notification Profile */ #else -#define BTA_USER_SERVICE_MASK 0x20000000 /* Message Notification Profile */ +#define BTA_USER_SERVICE_MASK 0x20000000 /* Message Notification Profile */ #endif #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) -#define BTA_ALL_SERVICE_MASK 0x3FFFFFFF /* All services supported by BTA. */ +#define BTA_ALL_SERVICE_MASK 0x3FFFFFFF /* All services supported by BTA. */ #else -#define BTA_ALL_SERVICE_MASK 0x1FFFFFFF /* All services supported by BTA. */ +#define BTA_ALL_SERVICE_MASK 0x1FFFFFFF /* All services supported by BTA. */ #endif typedef uint32_t tBTA_SERVICE_MASK; /* extended service mask, including mask with one or more GATT UUID */ -typedef struct -{ - tBTA_SERVICE_MASK srvc_mask; - uint8_t num_uuid; - tBT_UUID *p_uuid; -}tBTA_SERVICE_MASK_EXT; +typedef struct { + tBTA_SERVICE_MASK srvc_mask; + uint8_t num_uuid; + tBT_UUID* p_uuid; +} tBTA_SERVICE_MASK_EXT; /* Security Setting Mask */ -#define BTA_SEC_NONE BTM_SEC_NONE /* No security. */ -#define BTA_SEC_AUTHORIZE (BTM_SEC_IN_AUTHORIZE ) /* Authorization required (only needed for out going connection )*/ -#define BTA_SEC_AUTHENTICATE (BTM_SEC_IN_AUTHENTICATE | BTM_SEC_OUT_AUTHENTICATE) /* Authentication required. */ -#define BTA_SEC_ENCRYPT (BTM_SEC_IN_ENCRYPT | BTM_SEC_OUT_ENCRYPT) /* Encryption required. */ -#define BTA_SEC_MODE4_LEVEL4 (BTM_SEC_MODE4_LEVEL4) /* Mode 4 level 4 service, i.e. incoming/outgoing MITM and P-256 encryption */ -#define BTA_SEC_MITM (BTM_SEC_IN_MITM | BTM_SEC_OUT_MITM) /* Man-In-The_Middle protection */ -#define BTA_SEC_IN_16_DIGITS (BTM_SEC_IN_MIN_16_DIGIT_PIN) /* Min 16 digit for pin code */ +#define BTA_SEC_NONE BTM_SEC_NONE /* No security. */ +#define BTA_SEC_AUTHORIZE \ + (BTM_SEC_IN_AUTHORIZE) /* Authorization required (only needed for out \ + going connection )*/ +#define BTA_SEC_AUTHENTICATE \ + (BTM_SEC_IN_AUTHENTICATE | \ + BTM_SEC_OUT_AUTHENTICATE) /* Authentication required. */ +#define BTA_SEC_ENCRYPT \ + (BTM_SEC_IN_ENCRYPT | BTM_SEC_OUT_ENCRYPT) /* Encryption required. */ +#define BTA_SEC_MODE4_LEVEL4 \ + (BTM_SEC_MODE4_LEVEL4) /* Mode 4 level 4 service, i.e. incoming/outgoing \ + MITM and P-256 encryption */ +#define BTA_SEC_MITM \ + (BTM_SEC_IN_MITM | BTM_SEC_OUT_MITM) /* Man-In-The_Middle protection */ +#define BTA_SEC_IN_16_DIGITS \ + (BTM_SEC_IN_MIN_16_DIGIT_PIN) /* Min 16 digit for pin code */ typedef uint16_t tBTA_SEC; -/* Ignore for Discoverable, Connectable, Pairable and Connectable Paired only device modes */ -#define BTA_DM_IGNORE 0x00FF +/* Ignore for Discoverable, Connectable, Pairable and Connectable Paired only + * device modes */ +#define BTA_DM_IGNORE 0x00FF /* Ignore for Discoverable, Connectable only for LE modes */ -#define BTA_DM_LE_IGNORE 0xFF00 +#define BTA_DM_LE_IGNORE 0xFF00 -#define BTA_APP_ID_PAN_MULTI 0xFE /* app id for pan multiple connection */ -#define BTA_ALL_APP_ID 0xFF +#define BTA_APP_ID_PAN_MULTI 0xFE /* app id for pan multiple connection */ +#define BTA_ALL_APP_ID 0xFF /* Discoverable Modes */ -#define BTA_DM_NON_DISC BTM_NON_DISCOVERABLE /* Device is not discoverable. */ -#define BTA_DM_GENERAL_DISC BTM_GENERAL_DISCOVERABLE /* General discoverable. */ +#define BTA_DM_NON_DISC BTM_NON_DISCOVERABLE /* Device is not discoverable. */ +#define BTA_DM_GENERAL_DISC \ + BTM_GENERAL_DISCOVERABLE /* General discoverable. \ + */ #if (BLE_INCLUDED == TRUE) -#define BTA_DM_BLE_NON_DISCOVERABLE BTM_BLE_NON_DISCOVERABLE /* Device is not LE discoverable */ -#define BTA_DM_BLE_GENERAL_DISCOVERABLE BTM_BLE_GENERAL_DISCOVERABLE /* Device is LE General discoverable */ -#define BTA_DM_BLE_LIMITED_DISCOVERABLE BTM_BLE_LIMITED_DISCOVERABLE /* Device is LE Limited discoverable */ +#define BTA_DM_BLE_NON_DISCOVERABLE \ + BTM_BLE_NON_DISCOVERABLE /* Device is not LE discoverable */ +#define BTA_DM_BLE_GENERAL_DISCOVERABLE \ + BTM_BLE_GENERAL_DISCOVERABLE /* Device is LE General discoverable */ +#define BTA_DM_BLE_LIMITED_DISCOVERABLE \ + BTM_BLE_LIMITED_DISCOVERABLE /* Device is LE Limited discoverable */ #endif -typedef uint16_t tBTA_DM_DISC; /* this discoverability mode is a bit mask among BR mode and LE mode */ +typedef uint16_t + tBTA_DM_DISC; /* this discoverability mode is a bit mask among BR mode and + LE mode */ /* Connectable Modes */ -#define BTA_DM_NON_CONN BTM_NON_CONNECTABLE /* Device is not connectable. */ -#define BTA_DM_CONN BTM_CONNECTABLE /* Device is connectable. */ +#define BTA_DM_NON_CONN BTM_NON_CONNECTABLE /* Device is not connectable. */ +#define BTA_DM_CONN BTM_CONNECTABLE /* Device is connectable. */ #if (BLE_INCLUDED == TRUE) -#define BTA_DM_BLE_NON_CONNECTABLE BTM_BLE_NON_CONNECTABLE /* Device is LE non-connectable. */ -#define BTA_DM_BLE_CONNECTABLE BTM_BLE_CONNECTABLE /* Device is LE connectable. */ +#define BTA_DM_BLE_NON_CONNECTABLE \ + BTM_BLE_NON_CONNECTABLE /* Device is LE non-connectable. */ +#define BTA_DM_BLE_CONNECTABLE \ + BTM_BLE_CONNECTABLE /* Device is LE connectable. */ #endif typedef uint16_t tBTA_DM_CONN; -#define BTA_TRANSPORT_UNKNOWN 0 -#define BTA_TRANSPORT_BR_EDR BT_TRANSPORT_BR_EDR -#define BTA_TRANSPORT_LE BT_TRANSPORT_LE +#define BTA_TRANSPORT_UNKNOWN 0 +#define BTA_TRANSPORT_BR_EDR BT_TRANSPORT_BR_EDR +#define BTA_TRANSPORT_LE BT_TRANSPORT_LE typedef tBT_TRANSPORT tBTA_TRANSPORT; /* Pairable Modes */ -#define BTA_DM_PAIRABLE 1 -#define BTA_DM_NON_PAIRABLE 0 +#define BTA_DM_PAIRABLE 1 +#define BTA_DM_NON_PAIRABLE 0 /* Connectable Paired Only Mode */ -#define BTA_DM_CONN_ALL 0 -#define BTA_DM_CONN_PAIRED 1 +#define BTA_DM_CONN_ALL 0 +#define BTA_DM_CONN_PAIRED 1 /* Inquiry Modes */ -#define BTA_DM_INQUIRY_NONE BTM_INQUIRY_NONE /*No BR inquiry. */ -#define BTA_DM_GENERAL_INQUIRY BTM_GENERAL_INQUIRY /* Perform general inquiry. */ -#define BTA_DM_LIMITED_INQUIRY BTM_LIMITED_INQUIRY /* Perform limited inquiry. */ +#define BTA_DM_INQUIRY_NONE BTM_INQUIRY_NONE /*No BR inquiry. */ +#define BTA_DM_GENERAL_INQUIRY \ + BTM_GENERAL_INQUIRY /* Perform general inquiry. */ +#define BTA_DM_LIMITED_INQUIRY \ + BTM_LIMITED_INQUIRY /* Perform limited inquiry. */ #if (BLE_INCLUDED == TRUE) -#define BTA_BLE_INQUIRY_NONE BTM_BLE_INQUIRY_NONE -#define BTA_BLE_GENERAL_INQUIRY BTM_BLE_GENERAL_INQUIRY /* Perform LE general inquiry. */ -#define BTA_BLE_LIMITED_INQUIRY BTM_BLE_LIMITED_INQUIRY /* Perform LE limited inquiry. */ +#define BTA_BLE_INQUIRY_NONE BTM_BLE_INQUIRY_NONE +#define BTA_BLE_GENERAL_INQUIRY \ + BTM_BLE_GENERAL_INQUIRY /* Perform LE general inquiry. */ +#define BTA_BLE_LIMITED_INQUIRY \ + BTM_BLE_LIMITED_INQUIRY /* Perform LE limited inquiry. */ #endif typedef uint8_t tBTA_DM_INQ_MODE; /* Inquiry Filter Type */ -#define BTA_DM_INQ_CLR BTM_CLR_INQUIRY_FILTER /* Clear inquiry filter. */ -#define BTA_DM_INQ_DEV_CLASS BTM_FILTER_COND_DEVICE_CLASS /* Filter on device class. */ -#define BTA_DM_INQ_BD_ADDR BTM_FILTER_COND_BD_ADDR /* Filter on a specific BD address. */ +#define BTA_DM_INQ_CLR BTM_CLR_INQUIRY_FILTER /* Clear inquiry filter. */ +#define BTA_DM_INQ_DEV_CLASS \ + BTM_FILTER_COND_DEVICE_CLASS /* Filter on device class. */ +#define BTA_DM_INQ_BD_ADDR \ + BTM_FILTER_COND_BD_ADDR /* Filter on a specific BD address. */ typedef uint8_t tBTA_DM_INQ_FILT; /* Authorize Response */ -#define BTA_DM_AUTH_PERM 0 /* Authorized for future connections to the service */ -#define BTA_DM_AUTH_TEMP 1 /* Authorized for current connection only */ -#define BTA_DM_NOT_AUTH 2 /* Not authorized for the service */ +#define BTA_DM_AUTH_PERM \ + 0 /* Authorized for future connections to the service */ +#define BTA_DM_AUTH_TEMP 1 /* Authorized for current connection only */ +#define BTA_DM_NOT_AUTH 2 /* Not authorized for the service */ typedef uint8_t tBTA_AUTH_RESP; /* M/S preferred roles */ -#define BTA_ANY_ROLE 0x00 -#define BTA_MASTER_ROLE_PREF 0x01 -#define BTA_MASTER_ROLE_ONLY 0x02 -#define BTA_SLAVE_ROLE_ONLY 0x03 /* Used for PANU only, skip role switch to master */ +#define BTA_ANY_ROLE 0x00 +#define BTA_MASTER_ROLE_PREF 0x01 +#define BTA_MASTER_ROLE_ONLY 0x02 +#define BTA_SLAVE_ROLE_ONLY \ + 0x03 /* Used for PANU only, skip role switch to master */ typedef uint8_t tBTA_PREF_ROLES; -enum -{ +enum { - BTA_DM_NO_SCATTERNET, /* Device doesn't support scatternet, it might - support "role switch during connection" for - an incoming connection, when it already has - another connection in master role */ - BTA_DM_PARTIAL_SCATTERNET, /* Device supports partial scatternet. It can have - simulateous connection in Master and Slave roles - for short period of time */ - BTA_DM_FULL_SCATTERNET /* Device can have simultaneous connection in master - and slave roles */ + BTA_DM_NO_SCATTERNET, /* Device doesn't support scatternet, it might + support "role switch during connection" for + an incoming connection, when it already has + another connection in master role */ + BTA_DM_PARTIAL_SCATTERNET, /* Device supports partial scatternet. It can have + simulateous connection in Master and Slave roles + for short period of time */ + BTA_DM_FULL_SCATTERNET /* Device can have simultaneous connection in master + and slave roles */ }; - /* Inquiry filter device class condition */ -typedef struct -{ - DEV_CLASS dev_class; /* device class of interest */ - DEV_CLASS dev_class_mask; /* mask to determine the bits of device class of interest */ +typedef struct { + DEV_CLASS dev_class; /* device class of interest */ + DEV_CLASS dev_class_mask; /* mask to determine the bits of device class of + interest */ } tBTA_DM_COD_COND; - /* Inquiry Filter Condition */ -typedef union -{ - BD_ADDR bd_addr; /* BD address of device to filter. */ - tBTA_DM_COD_COND dev_class_cond; /* Device class filter condition */ +typedef union { + BD_ADDR bd_addr; /* BD address of device to filter. */ + tBTA_DM_COD_COND dev_class_cond; /* Device class filter condition */ } tBTA_DM_INQ_COND; /* Inquiry Parameters */ -typedef struct -{ - tBTA_DM_INQ_MODE mode; /* Inquiry mode, limited or general. */ - uint8_t duration; /* Inquiry duration in 1.28 sec units. */ - uint8_t max_resps; /* Maximum inquiry responses. Set to zero for unlimited responses. */ - bool report_dup; /* report duplicated inquiry response with higher RSSI value */ - tBTA_DM_INQ_FILT filter_type; /* Filter condition type. */ - tBTA_DM_INQ_COND filter_cond; /* Filter condition data. */ +typedef struct { + tBTA_DM_INQ_MODE mode; /* Inquiry mode, limited or general. */ + uint8_t duration; /* Inquiry duration in 1.28 sec units. */ + uint8_t max_resps; /* Maximum inquiry responses. Set to zero for unlimited + responses. */ + bool report_dup; /* report duplicated inquiry response with higher RSSI value + */ + tBTA_DM_INQ_FILT filter_type; /* Filter condition type. */ + tBTA_DM_INQ_COND filter_cond; /* Filter condition data. */ #if (BTA_HOST_INTERLEAVE_SEARCH == TRUE) - uint8_t intl_duration[4];/*duration array storing the interleave scan's time portions*/ + uint8_t intl_duration + [4]; /*duration array storing the interleave scan's time portions*/ #endif } tBTA_DM_INQ; -typedef struct -{ - uint8_t bta_dm_eir_min_name_len; /* minimum length of local name when it is shortened */ +typedef struct { + uint8_t bta_dm_eir_min_name_len; /* minimum length of local name when it is + shortened */ #if (BTA_EIR_CANNED_UUID_LIST == TRUE) - uint8_t bta_dm_eir_uuid16_len; /* length of 16-bit UUIDs */ - uint8_t *bta_dm_eir_uuid16; /* 16-bit UUIDs */ + uint8_t bta_dm_eir_uuid16_len; /* length of 16-bit UUIDs */ + uint8_t* bta_dm_eir_uuid16; /* 16-bit UUIDs */ #else - uint32_t uuid_mask[BTM_EIR_SERVICE_ARRAY_SIZE]; /* mask of UUID list in EIR */ + uint32_t uuid_mask[BTM_EIR_SERVICE_ARRAY_SIZE]; /* mask of UUID list in EIR */ #endif - int8_t *bta_dm_eir_inq_tx_power; /* Inquiry TX power */ - uint8_t bta_dm_eir_flag_len; /* length of flags in bytes */ - uint8_t *bta_dm_eir_flags; /* flags for EIR */ - uint8_t bta_dm_eir_manufac_spec_len; /* length of manufacturer specific in bytes */ - uint8_t *bta_dm_eir_manufac_spec; /* manufacturer specific */ - uint8_t bta_dm_eir_additional_len; /* length of additional data in bytes */ - uint8_t *bta_dm_eir_additional; /* additional data */ + int8_t* bta_dm_eir_inq_tx_power; /* Inquiry TX power */ + uint8_t bta_dm_eir_flag_len; /* length of flags in bytes */ + uint8_t* bta_dm_eir_flags; /* flags for EIR */ + uint8_t bta_dm_eir_manufac_spec_len; /* length of manufacturer specific in + bytes */ + uint8_t* bta_dm_eir_manufac_spec; /* manufacturer specific */ + uint8_t bta_dm_eir_additional_len; /* length of additional data in bytes */ + uint8_t* bta_dm_eir_additional; /* additional data */ } tBTA_DM_EIR_CONF; #if (BLE_INCLUDED == TRUE) /* advertising filter policy */ -typedef tBTM_BLE_AFP tBTA_BLE_AFP; +typedef tBTM_BLE_AFP tBTA_BLE_AFP; -enum -{ - BTA_BLE_BATCH_SCAN_MODE_PASS = 1, - BTA_BLE_BATCH_SCAN_MODE_ACTI = 2, - BTA_BLE_BATCH_SCAN_MODE_PASS_ACTI = 3 +enum { + BTA_BLE_BATCH_SCAN_MODE_PASS = 1, + BTA_BLE_BATCH_SCAN_MODE_ACTI = 2, + BTA_BLE_BATCH_SCAN_MODE_PASS_ACTI = 3 }; typedef uint8_t tBTA_BLE_BATCH_SCAN_MODE; -enum -{ - BTA_BLE_DISCARD_OLD_ITEMS=0, - BTA_BLE_DISCARD_LOWER_RSSI_ITEMS=1 -}; +enum { BTA_BLE_DISCARD_OLD_ITEMS = 0, BTA_BLE_DISCARD_LOWER_RSSI_ITEMS = 1 }; typedef uint8_t tBTA_BLE_DISCARD_RULE; -enum -{ - BTA_BLE_ADV_SEEN_FIRST_TIME=0, - BTA_BLE_ADV_TRACKING_TIMEOUT=1 -}; +enum { BTA_BLE_ADV_SEEN_FIRST_TIME = 0, BTA_BLE_ADV_TRACKING_TIMEOUT = 1 }; typedef uint8_t tBTA_BLE_ADV_CHANGE_REASON; -enum -{ - BTA_BLE_BATCH_SCAN_ENB_EVT = 1, - BTA_BLE_BATCH_SCAN_CFG_STRG_EVT = 2, - BTA_BLE_BATCH_SCAN_DATA_EVT = 3, - BTA_BLE_BATCH_SCAN_THRES_EVT = 4, - BTA_BLE_BATCH_SCAN_PARAM_EVT = 5, - BTA_BLE_BATCH_SCAN_DIS_EVT = 6 +enum { + BTA_BLE_BATCH_SCAN_ENB_EVT = 1, + BTA_BLE_BATCH_SCAN_CFG_STRG_EVT = 2, + BTA_BLE_BATCH_SCAN_DATA_EVT = 3, + BTA_BLE_BATCH_SCAN_THRES_EVT = 4, + BTA_BLE_BATCH_SCAN_PARAM_EVT = 5, + BTA_BLE_BATCH_SCAN_DIS_EVT = 6 }; typedef tBTM_BLE_BATCH_SCAN_EVT tBTA_BLE_BATCH_SCAN_EVT; @@ -354,106 +372,105 @@ typedef tBTM_BLE_TRACK_ADV_ACTION tBTA_BLE_TRACK_ADV_ACTION; /* BLE customer specific feature function type definitions */ /* data type used on customer specific feature for RSSI monitoring */ -#define BTA_BLE_RSSI_ALERT_HI 0 -#define BTA_BLE_RSSI_ALERT_RANGE 1 -#define BTA_BLE_RSSI_ALERT_LO 2 +#define BTA_BLE_RSSI_ALERT_HI 0 +#define BTA_BLE_RSSI_ALERT_RANGE 1 +#define BTA_BLE_RSSI_ALERT_LO 2 typedef uint8_t tBTA_DM_BLE_RSSI_ALERT_TYPE; -#define BTA_BLE_RSSI_ALERT_NONE BTM_BLE_RSSI_ALERT_NONE /* (0) */ -#define BTA_BLE_RSSI_ALERT_HI_BIT BTM_BLE_RSSI_ALERT_HI_BIT /* (1) */ -#define BTA_BLE_RSSI_ALERT_RANGE_BIT BTM_BLE_RSSI_ALERT_RANGE_BIT /* (1 << 1) */ -#define BTA_BLE_RSSI_ALERT_LO_BIT BTM_BLE_RSSI_ALERT_LO_BIT /* (1 << 2) */ -typedef uint8_t tBTA_DM_BLE_RSSI_ALERT_MASK; +#define BTA_BLE_RSSI_ALERT_NONE BTM_BLE_RSSI_ALERT_NONE /* (0) */ +#define BTA_BLE_RSSI_ALERT_HI_BIT BTM_BLE_RSSI_ALERT_HI_BIT /* (1) */ +#define BTA_BLE_RSSI_ALERT_RANGE_BIT \ + BTM_BLE_RSSI_ALERT_RANGE_BIT /* (1 << 1) */ +#define BTA_BLE_RSSI_ALERT_LO_BIT BTM_BLE_RSSI_ALERT_LO_BIT /* (1 << 2) */ +typedef uint8_t tBTA_DM_BLE_RSSI_ALERT_MASK; - -typedef void (tBTA_DM_BLE_RSSI_CBACK) (BD_ADDR bd_addr, tBTA_DM_BLE_RSSI_ALERT_TYPE alert_type, int8_t rssi); +typedef void(tBTA_DM_BLE_RSSI_CBACK)(BD_ADDR bd_addr, + tBTA_DM_BLE_RSSI_ALERT_TYPE alert_type, + int8_t rssi); /* max number of filter spot for different filter type */ -#define BTA_DM_BLE_MAX_UUID_FILTER BTM_BLE_MAX_UUID_FILTER /* 8 */ -#define BTA_DM_BLE_MAX_ADDR_FILTER BTM_BLE_MAX_ADDR_FILTER /* 8 */ -#define BTA_DM_BLE_PF_STR_COND_MAX BTM_BLE_PF_STR_COND_MAX /* 4 apply to manu data , or local name */ -#define BTA_DM_BLE_PF_STR_LEN_MAX BTM_BLE_PF_STR_LEN_MAX /* match for first 20 bytes */ - -#define BTA_DM_BLE_PF_LOGIC_OR 0 -#define BTA_DM_BLE_PF_LOGIC_AND 1 +#define BTA_DM_BLE_MAX_UUID_FILTER BTM_BLE_MAX_UUID_FILTER /* 8 */ +#define BTA_DM_BLE_MAX_ADDR_FILTER BTM_BLE_MAX_ADDR_FILTER /* 8 */ +#define BTA_DM_BLE_PF_STR_COND_MAX \ + BTM_BLE_PF_STR_COND_MAX /* 4 apply to manu data , or local name */ +#define BTA_DM_BLE_PF_STR_LEN_MAX \ + BTM_BLE_PF_STR_LEN_MAX /* match for first 20 bytes */ + +#define BTA_DM_BLE_PF_LOGIC_OR 0 +#define BTA_DM_BLE_PF_LOGIC_AND 1 typedef uint8_t tBTA_DM_BLE_PF_LOGIC_TYPE; -enum -{ - BTA_DM_BLE_SCAN_COND_ADD, - BTA_DM_BLE_SCAN_COND_DELETE, - BTA_DM_BLE_SCAN_COND_CLEAR = 2 +enum { + BTA_DM_BLE_SCAN_COND_ADD, + BTA_DM_BLE_SCAN_COND_DELETE, + BTA_DM_BLE_SCAN_COND_CLEAR = 2 }; typedef uint8_t tBTA_DM_BLE_SCAN_COND_OP; /* ADV payload filtering vendor specific call event */ -enum -{ - BTA_BLE_SCAN_PF_ENABLE_EVT = 7, - BTA_BLE_SCAN_PF_COND_EVT -}; +enum { BTA_BLE_SCAN_PF_ENABLE_EVT = 7, BTA_BLE_SCAN_PF_COND_EVT }; /* filter selection bit index */ -#define BTA_DM_BLE_PF_ADDR_FILTER BTM_BLE_PF_ADDR_FILTER -#define BTA_DM_BLE_PF_SRVC_DATA BTM_BLE_PF_SRVC_DATA -#define BTA_DM_BLE_PF_SRVC_UUID BTM_BLE_PF_SRVC_UUID -#define BTA_DM_BLE_PF_SRVC_SOL_UUID BTM_BLE_PF_SRVC_SOL_UUID -#define BTA_DM_BLE_PF_LOCAL_NAME BTM_BLE_PF_LOCAL_NAME -#define BTA_DM_BLE_PF_MANU_DATA BTM_BLE_PF_MANU_DATA -#define BTA_DM_BLE_PF_SRVC_DATA_PATTERN BTM_BLE_PF_SRVC_DATA_PATTERN -#define BTA_DM_BLE_PF_TYPE_ALL BTM_BLE_PF_TYPE_ALL -#define BTA_DM_BLE_PF_TYPE_MAX BTM_BLE_PF_TYPE_MAX -typedef uint8_t tBTA_DM_BLE_PF_COND_TYPE; - -typedef union -{ - uint16_t uuid16_mask; - uint32_t uuid32_mask; - uint8_t uuid128_mask[LEN_UUID_128]; -}tBTA_DM_BLE_PF_COND_MASK; - -typedef struct -{ - tBLE_BD_ADDR *p_target_addr; /* target address, if NULL, generic UUID filter */ - tBT_UUID uuid; /* UUID condition */ - tBTA_DM_BLE_PF_LOGIC_TYPE cond_logic; /* AND/OR */ - tBTA_DM_BLE_PF_COND_MASK *p_uuid_mask; /* UUID condition mask, if NULL, match exact as UUID condition */ -}tBTA_DM_BLE_PF_UUID_COND; - -typedef struct -{ - uint8_t data_len; /* <= 20 bytes */ - uint8_t *p_data; -}tBTA_DM_BLE_PF_LOCAL_NAME_COND; - -typedef struct -{ - uint16_t company_id; /* company ID */ - uint8_t data_len; /* <= 20 bytes */ - uint8_t *p_pattern; - uint16_t company_id_mask; /* UUID value mask */ - uint8_t *p_pattern_mask; /* Manufacturer data matching mask, same length - as data pattern, set to all 0xff, match exact data */ -}tBTA_DM_BLE_PF_MANU_COND; - -typedef struct -{ - uint16_t uuid; /* service ID */ - uint8_t data_len; /* <= 20 bytes */ - uint8_t *p_pattern; - uint8_t *p_pattern_mask; /* Service data matching mask, same length - as data pattern, set to all 0xff, match exact data */ -}tBTA_DM_BLE_PF_SRVC_PATTERN_COND; - -typedef union -{ - tBLE_BD_ADDR target_addr; - tBTA_DM_BLE_PF_LOCAL_NAME_COND local_name; /* lcoal name filtering */ - tBTA_DM_BLE_PF_MANU_COND manu_data; /* manufactuer data filtering */ - tBTA_DM_BLE_PF_UUID_COND srvc_uuid; /* service UUID filtering */ - tBTA_DM_BLE_PF_UUID_COND solicitate_uuid; /* solicitated service UUID filtering */ - tBTA_DM_BLE_PF_SRVC_PATTERN_COND srvc_data; /* service data pattern */ -}tBTA_DM_BLE_PF_COND_PARAM; +#define BTA_DM_BLE_PF_ADDR_FILTER BTM_BLE_PF_ADDR_FILTER +#define BTA_DM_BLE_PF_SRVC_DATA BTM_BLE_PF_SRVC_DATA +#define BTA_DM_BLE_PF_SRVC_UUID BTM_BLE_PF_SRVC_UUID +#define BTA_DM_BLE_PF_SRVC_SOL_UUID BTM_BLE_PF_SRVC_SOL_UUID +#define BTA_DM_BLE_PF_LOCAL_NAME BTM_BLE_PF_LOCAL_NAME +#define BTA_DM_BLE_PF_MANU_DATA BTM_BLE_PF_MANU_DATA +#define BTA_DM_BLE_PF_SRVC_DATA_PATTERN BTM_BLE_PF_SRVC_DATA_PATTERN +#define BTA_DM_BLE_PF_TYPE_ALL BTM_BLE_PF_TYPE_ALL +#define BTA_DM_BLE_PF_TYPE_MAX BTM_BLE_PF_TYPE_MAX +typedef uint8_t tBTA_DM_BLE_PF_COND_TYPE; + +typedef union { + uint16_t uuid16_mask; + uint32_t uuid32_mask; + uint8_t uuid128_mask[LEN_UUID_128]; +} tBTA_DM_BLE_PF_COND_MASK; + +typedef struct { + tBLE_BD_ADDR* + p_target_addr; /* target address, if NULL, generic UUID filter */ + tBT_UUID uuid; /* UUID condition */ + tBTA_DM_BLE_PF_LOGIC_TYPE cond_logic; /* AND/OR */ + tBTA_DM_BLE_PF_COND_MASK* + p_uuid_mask; /* UUID condition mask, if NULL, match exact as UUID + condition */ +} tBTA_DM_BLE_PF_UUID_COND; + +typedef struct { + uint8_t data_len; /* <= 20 bytes */ + uint8_t* p_data; +} tBTA_DM_BLE_PF_LOCAL_NAME_COND; + +typedef struct { + uint16_t company_id; /* company ID */ + uint8_t data_len; /* <= 20 bytes */ + uint8_t* p_pattern; + uint16_t company_id_mask; /* UUID value mask */ + uint8_t* + p_pattern_mask; /* Manufacturer data matching mask, same length + as data pattern, set to all 0xff, match exact data */ +} tBTA_DM_BLE_PF_MANU_COND; + +typedef struct { + uint16_t uuid; /* service ID */ + uint8_t data_len; /* <= 20 bytes */ + uint8_t* p_pattern; + uint8_t* + p_pattern_mask; /* Service data matching mask, same length + as data pattern, set to all 0xff, match exact data */ +} tBTA_DM_BLE_PF_SRVC_PATTERN_COND; + +typedef union { + tBLE_BD_ADDR target_addr; + tBTA_DM_BLE_PF_LOCAL_NAME_COND local_name; /* lcoal name filtering */ + tBTA_DM_BLE_PF_MANU_COND manu_data; /* manufactuer data filtering */ + tBTA_DM_BLE_PF_UUID_COND srvc_uuid; /* service UUID filtering */ + tBTA_DM_BLE_PF_UUID_COND + solicitate_uuid; /* solicitated service UUID filtering */ + tBTA_DM_BLE_PF_SRVC_PATTERN_COND srvc_data; /* service data pattern */ +} tBTA_DM_BLE_PF_COND_PARAM; typedef uint8_t tBTA_DM_BLE_PF_FILT_INDEX; typedef uint8_t tBTA_DM_BLE_PF_AVBL_SPACE; @@ -461,512 +478,537 @@ typedef uint8_t tBTA_DM_BLE_PF_AVBL_SPACE; typedef int8_t tBTA_DM_RSSI_VALUE; typedef uint8_t tBTA_DM_LINK_QUALITY_VALUE; - typedef uint8_t tBTA_SIG_STRENGTH_MASK; - /* Security Callback Events */ -#define BTA_DM_ENABLE_EVT 0 /* Enable Event */ -#define BTA_DM_DISABLE_EVT 1 /* Disable Event */ -#define BTA_DM_PIN_REQ_EVT 2 /* PIN request. */ -#define BTA_DM_AUTH_CMPL_EVT 3 /* Authentication complete indication. */ -#define BTA_DM_AUTHORIZE_EVT 4 /* Authorization request. */ -#define BTA_DM_LINK_UP_EVT 5 /* Connection UP event */ -#define BTA_DM_LINK_DOWN_EVT 6 /* Connection DOWN event */ -#define BTA_DM_SIG_STRENGTH_EVT 7 /* Signal strength for bluetooth connection */ -#define BTA_DM_BUSY_LEVEL_EVT 8 /* System busy level */ -#define BTA_DM_BOND_CANCEL_CMPL_EVT 9 /* Bond cancel complete indication */ -#define BTA_DM_SP_CFM_REQ_EVT 10 /* Simple Pairing User Confirmation request. */ -#define BTA_DM_SP_KEY_NOTIF_EVT 11 /* Simple Pairing Passkey Notification */ -#define BTA_DM_SP_RMT_OOB_EVT 12 /* Simple Pairing Remote OOB Data request. */ -#define BTA_DM_SP_KEYPRESS_EVT 13 /* Key press notification event. */ -#define BTA_DM_ROLE_CHG_EVT 14 /* Role Change event. */ -#define BTA_DM_BLE_KEY_EVT 15 /* BLE SMP key event for peer device keys */ -#define BTA_DM_BLE_SEC_REQ_EVT 16 /* BLE SMP security request */ -#define BTA_DM_BLE_PASSKEY_NOTIF_EVT 17 /* SMP passkey notification event */ -#define BTA_DM_BLE_PASSKEY_REQ_EVT 18 /* SMP passkey request event */ -#define BTA_DM_BLE_OOB_REQ_EVT 19 /* SMP OOB request event */ -#define BTA_DM_BLE_LOCAL_IR_EVT 20 /* BLE local IR event */ -#define BTA_DM_BLE_LOCAL_ER_EVT 21 /* BLE local ER event */ -#define BTA_DM_BLE_NC_REQ_EVT 22 /* SMP Numeric Comparison request event */ -#define BTA_DM_SP_RMT_OOB_EXT_EVT 23 /* Simple Pairing Remote OOB Extended Data request. */ -#define BTA_DM_BLE_AUTH_CMPL_EVT 24 /* BLE Auth complete */ -#define BTA_DM_DEV_UNPAIRED_EVT 25 -#define BTA_DM_HW_ERROR_EVT 26 /* BT Chip H/W error */ -#define BTA_DM_LE_FEATURES_READ 27 /* Cotroller specific LE features are read */ -#define BTA_DM_ENER_INFO_READ 28 /* Energy info read */ -#define BTA_DM_BLE_SC_OOB_REQ_EVT 29 /* SMP SC OOB request event */ +#define BTA_DM_ENABLE_EVT 0 /* Enable Event */ +#define BTA_DM_DISABLE_EVT 1 /* Disable Event */ +#define BTA_DM_PIN_REQ_EVT 2 /* PIN request. */ +#define BTA_DM_AUTH_CMPL_EVT 3 /* Authentication complete indication. */ +#define BTA_DM_AUTHORIZE_EVT 4 /* Authorization request. */ +#define BTA_DM_LINK_UP_EVT 5 /* Connection UP event */ +#define BTA_DM_LINK_DOWN_EVT 6 /* Connection DOWN event */ +#define BTA_DM_SIG_STRENGTH_EVT \ + 7 /* Signal strength for bluetooth connection \ + */ +#define BTA_DM_BUSY_LEVEL_EVT 8 /* System busy level */ +#define BTA_DM_BOND_CANCEL_CMPL_EVT 9 /* Bond cancel complete indication */ +#define BTA_DM_SP_CFM_REQ_EVT \ + 10 /* Simple Pairing User Confirmation request. \ + */ +#define BTA_DM_SP_KEY_NOTIF_EVT 11 /* Simple Pairing Passkey Notification */ +#define BTA_DM_SP_RMT_OOB_EVT 12 /* Simple Pairing Remote OOB Data request. */ +#define BTA_DM_SP_KEYPRESS_EVT 13 /* Key press notification event. */ +#define BTA_DM_ROLE_CHG_EVT 14 /* Role Change event. */ +#define BTA_DM_BLE_KEY_EVT 15 /* BLE SMP key event for peer device keys */ +#define BTA_DM_BLE_SEC_REQ_EVT 16 /* BLE SMP security request */ +#define BTA_DM_BLE_PASSKEY_NOTIF_EVT 17 /* SMP passkey notification event */ +#define BTA_DM_BLE_PASSKEY_REQ_EVT 18 /* SMP passkey request event */ +#define BTA_DM_BLE_OOB_REQ_EVT 19 /* SMP OOB request event */ +#define BTA_DM_BLE_LOCAL_IR_EVT 20 /* BLE local IR event */ +#define BTA_DM_BLE_LOCAL_ER_EVT 21 /* BLE local ER event */ +#define BTA_DM_BLE_NC_REQ_EVT 22 /* SMP Numeric Comparison request event */ +#define BTA_DM_SP_RMT_OOB_EXT_EVT \ + 23 /* Simple Pairing Remote OOB Extended Data request. */ +#define BTA_DM_BLE_AUTH_CMPL_EVT 24 /* BLE Auth complete */ +#define BTA_DM_DEV_UNPAIRED_EVT 25 +#define BTA_DM_HW_ERROR_EVT 26 /* BT Chip H/W error */ +#define BTA_DM_LE_FEATURES_READ \ + 27 /* Cotroller specific LE features are read \ + */ +#define BTA_DM_ENER_INFO_READ 28 /* Energy info read */ +#define BTA_DM_BLE_SC_OOB_REQ_EVT 29 /* SMP SC OOB request event */ typedef uint8_t tBTA_DM_SEC_EVT; /* Structure associated with BTA_DM_ENABLE_EVT */ -typedef struct -{ - tBTA_STATUS status; -} tBTA_DM_ENABLE; +typedef struct { tBTA_STATUS status; } tBTA_DM_ENABLE; /* Structure associated with BTA_DM_PIN_REQ_EVT */ -typedef struct -{ - /* Note: First 3 data members must be, bd_addr, dev_class, and bd_name in order */ - BD_ADDR bd_addr; /* BD address peer device. */ - DEV_CLASS dev_class; /* Class of Device */ - BD_NAME bd_name; /* Name of peer device. */ - bool min_16_digit; /* true if the pin returned must be at least 16 digits */ +typedef struct { + /* Note: First 3 data members must be, bd_addr, dev_class, and bd_name in + * order */ + BD_ADDR bd_addr; /* BD address peer device. */ + DEV_CLASS dev_class; /* Class of Device */ + BD_NAME bd_name; /* Name of peer device. */ + bool min_16_digit; /* true if the pin returned must be at least 16 digits */ } tBTA_DM_PIN_REQ; /* BLE related definition */ -#define BTA_DM_AUTH_FAIL_BASE (HCI_ERR_MAX_ERR + 10) - -/* Converts SMP error codes defined in smp_api.h to SMP auth fail reasons below. */ -#define BTA_DM_AUTH_CONVERT_SMP_CODE(x) (BTA_DM_AUTH_FAIL_BASE + (x)) - -#define BTA_DM_AUTH_SMP_PASSKEY_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_PASSKEY_ENTRY_FAIL) -#define BTA_DM_AUTH_SMP_OOB_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_OOB_FAIL) -#define BTA_DM_AUTH_SMP_PAIR_AUTH_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_PAIR_AUTH_FAIL) -#define BTA_DM_AUTH_SMP_CONFIRM_VALUE_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_CONFIRM_VALUE_ERR) -#define BTA_DM_AUTH_SMP_PAIR_NOT_SUPPORT (BTA_DM_AUTH_FAIL_BASE + SMP_PAIR_NOT_SUPPORT) -#define BTA_DM_AUTH_SMP_ENC_KEY_SIZE (BTA_DM_AUTH_FAIL_BASE + SMP_ENC_KEY_SIZE) -#define BTA_DM_AUTH_SMP_INVALID_CMD (BTA_DM_AUTH_FAIL_BASE + SMP_INVALID_CMD) -#define BTA_DM_AUTH_SMP_UNKNOWN_ERR (BTA_DM_AUTH_FAIL_BASE + SMP_PAIR_FAIL_UNKNOWN) -#define BTA_DM_AUTH_SMP_REPEATED_ATTEMPT (BTA_DM_AUTH_FAIL_BASE + SMP_REPEATED_ATTEMPTS) -#define BTA_DM_AUTH_SMP_INVALID_PARAMETERS (BTA_DM_AUTH_FAIL_BASE + SMP_INVALID_PARAMETERS) -#define BTA_DM_AUTH_SMP_INTERNAL_ERR (BTA_DM_AUTH_FAIL_BASE + SMP_PAIR_INTERNAL_ERR) -#define BTA_DM_AUTH_SMP_UNKNOWN_IO (BTA_DM_AUTH_FAIL_BASE + SMP_UNKNOWN_IO_CAP) -#define BTA_DM_AUTH_SMP_INIT_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_INIT_FAIL) -#define BTA_DM_AUTH_SMP_CONFIRM_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_CONFIRM_FAIL) -#define BTA_DM_AUTH_SMP_BUSY (BTA_DM_AUTH_FAIL_BASE + SMP_BUSY) -#define BTA_DM_AUTH_SMP_ENC_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_ENC_FAIL) -#define BTA_DM_AUTH_SMP_RSP_TIMEOUT (BTA_DM_AUTH_FAIL_BASE + SMP_RSP_TIMEOUT) -#define BTA_DM_AUTH_SMP_CONN_TOUT (BTA_DM_AUTH_FAIL_BASE + SMP_CONN_TOUT) +#define BTA_DM_AUTH_FAIL_BASE (HCI_ERR_MAX_ERR + 10) + +/* Converts SMP error codes defined in smp_api.h to SMP auth fail reasons below. + */ +#define BTA_DM_AUTH_CONVERT_SMP_CODE(x) (BTA_DM_AUTH_FAIL_BASE + (x)) + +#define BTA_DM_AUTH_SMP_PASSKEY_FAIL \ + (BTA_DM_AUTH_FAIL_BASE + SMP_PASSKEY_ENTRY_FAIL) +#define BTA_DM_AUTH_SMP_OOB_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_OOB_FAIL) +#define BTA_DM_AUTH_SMP_PAIR_AUTH_FAIL \ + (BTA_DM_AUTH_FAIL_BASE + SMP_PAIR_AUTH_FAIL) +#define BTA_DM_AUTH_SMP_CONFIRM_VALUE_FAIL \ + (BTA_DM_AUTH_FAIL_BASE + SMP_CONFIRM_VALUE_ERR) +#define BTA_DM_AUTH_SMP_PAIR_NOT_SUPPORT \ + (BTA_DM_AUTH_FAIL_BASE + SMP_PAIR_NOT_SUPPORT) +#define BTA_DM_AUTH_SMP_ENC_KEY_SIZE (BTA_DM_AUTH_FAIL_BASE + SMP_ENC_KEY_SIZE) +#define BTA_DM_AUTH_SMP_INVALID_CMD (BTA_DM_AUTH_FAIL_BASE + SMP_INVALID_CMD) +#define BTA_DM_AUTH_SMP_UNKNOWN_ERR \ + (BTA_DM_AUTH_FAIL_BASE + SMP_PAIR_FAIL_UNKNOWN) +#define BTA_DM_AUTH_SMP_REPEATED_ATTEMPT \ + (BTA_DM_AUTH_FAIL_BASE + SMP_REPEATED_ATTEMPTS) +#define BTA_DM_AUTH_SMP_INVALID_PARAMETERS \ + (BTA_DM_AUTH_FAIL_BASE + SMP_INVALID_PARAMETERS) +#define BTA_DM_AUTH_SMP_INTERNAL_ERR \ + (BTA_DM_AUTH_FAIL_BASE + SMP_PAIR_INTERNAL_ERR) +#define BTA_DM_AUTH_SMP_UNKNOWN_IO (BTA_DM_AUTH_FAIL_BASE + SMP_UNKNOWN_IO_CAP) +#define BTA_DM_AUTH_SMP_INIT_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_INIT_FAIL) +#define BTA_DM_AUTH_SMP_CONFIRM_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_CONFIRM_FAIL) +#define BTA_DM_AUTH_SMP_BUSY (BTA_DM_AUTH_FAIL_BASE + SMP_BUSY) +#define BTA_DM_AUTH_SMP_ENC_FAIL (BTA_DM_AUTH_FAIL_BASE + SMP_ENC_FAIL) +#define BTA_DM_AUTH_SMP_RSP_TIMEOUT (BTA_DM_AUTH_FAIL_BASE + SMP_RSP_TIMEOUT) +#define BTA_DM_AUTH_SMP_CONN_TOUT (BTA_DM_AUTH_FAIL_BASE + SMP_CONN_TOUT) /* connection parameter boundary value and dummy value */ -#define BTA_DM_BLE_SCAN_INT_MIN BTM_BLE_SCAN_INT_MIN -#define BTA_DM_BLE_SCAN_INT_MAX BTM_BLE_SCAN_INT_MAX -#define BTA_DM_BLE_SCAN_WIN_MIN BTM_BLE_SCAN_WIN_MIN -#define BTA_DM_BLE_SCAN_WIN_MAX BTM_BLE_SCAN_WIN_MAX -#define BTA_DM_BLE_CONN_INT_MIN BTM_BLE_CONN_INT_MIN -#define BTA_DM_BLE_CONN_INT_MAX BTM_BLE_CONN_INT_MAX -#define BTA_DM_BLE_CONN_LATENCY_MAX BTM_BLE_CONN_LATENCY_MAX -#define BTA_DM_BLE_CONN_SUP_TOUT_MIN BTM_BLE_CONN_SUP_TOUT_MIN -#define BTA_DM_BLE_CONN_SUP_TOUT_MAX BTM_BLE_CONN_SUP_TOUT_MAX -#define BTA_DM_BLE_CONN_PARAM_UNDEF BTM_BLE_CONN_PARAM_UNDEF /* use this value when a specific value not to be overwritten */ - - -#define BTA_LE_KEY_PENC BTM_LE_KEY_PENC /* encryption information of peer device */ -#define BTA_LE_KEY_PID BTM_LE_KEY_PID /* identity key of the peer device */ -#define BTA_LE_KEY_PCSRK BTM_LE_KEY_PCSRK /* peer SRK */ -#define BTA_LE_KEY_LENC BTM_LE_KEY_LENC /* master role security information:div */ -#define BTA_LE_KEY_LID BTM_LE_KEY_LID /* master device ID key */ -#define BTA_LE_KEY_LCSRK BTM_LE_KEY_LCSRK /* local CSRK has been deliver to peer */ +#define BTA_DM_BLE_SCAN_INT_MIN BTM_BLE_SCAN_INT_MIN +#define BTA_DM_BLE_SCAN_INT_MAX BTM_BLE_SCAN_INT_MAX +#define BTA_DM_BLE_SCAN_WIN_MIN BTM_BLE_SCAN_WIN_MIN +#define BTA_DM_BLE_SCAN_WIN_MAX BTM_BLE_SCAN_WIN_MAX +#define BTA_DM_BLE_CONN_INT_MIN BTM_BLE_CONN_INT_MIN +#define BTA_DM_BLE_CONN_INT_MAX BTM_BLE_CONN_INT_MAX +#define BTA_DM_BLE_CONN_LATENCY_MAX BTM_BLE_CONN_LATENCY_MAX +#define BTA_DM_BLE_CONN_SUP_TOUT_MIN BTM_BLE_CONN_SUP_TOUT_MIN +#define BTA_DM_BLE_CONN_SUP_TOUT_MAX BTM_BLE_CONN_SUP_TOUT_MAX +#define BTA_DM_BLE_CONN_PARAM_UNDEF \ + BTM_BLE_CONN_PARAM_UNDEF /* use this value when a specific value not to be \ + overwritten */ + +#define BTA_LE_KEY_PENC \ + BTM_LE_KEY_PENC /* encryption information of peer device */ +#define BTA_LE_KEY_PID BTM_LE_KEY_PID /* identity key of the peer device */ +#define BTA_LE_KEY_PCSRK BTM_LE_KEY_PCSRK /* peer SRK */ +#define BTA_LE_KEY_LENC \ + BTM_LE_KEY_LENC /* master role security information:div */ +#define BTA_LE_KEY_LID BTM_LE_KEY_LID /* master device ID key */ +#define BTA_LE_KEY_LCSRK \ + BTM_LE_KEY_LCSRK /* local CSRK has been deliver to peer */ typedef uint8_t tBTA_LE_KEY_TYPE; /* can be used as a bit mask */ - -typedef tBTM_LE_PENC_KEYS tBTA_LE_PENC_KEYS ; +typedef tBTM_LE_PENC_KEYS tBTA_LE_PENC_KEYS; typedef tBTM_LE_PCSRK_KEYS tBTA_LE_PCSRK_KEYS; -typedef tBTM_LE_LENC_KEYS tBTA_LE_LENC_KEYS ; -typedef tBTM_LE_LCSRK_KEYS tBTA_LE_LCSRK_KEYS ; -typedef tBTM_LE_PID_KEYS tBTA_LE_PID_KEYS ; - -typedef union -{ - tBTA_LE_PENC_KEYS penc_key; /* received peer encryption key */ - tBTA_LE_PCSRK_KEYS psrk_key; /* received peer device SRK */ - tBTA_LE_PID_KEYS pid_key; /* peer device ID key */ - tBTA_LE_LENC_KEYS lenc_key; /* local encryption reproduction keys LTK = = d1(ER,DIV,0)*/ - tBTA_LE_LCSRK_KEYS lcsrk_key; /* local device CSRK = d1(ER,DIV,1)*/ - tBTA_LE_PID_KEYS lid_key; /* local device ID key for the particular remote */ -}tBTA_LE_KEY_VALUE; - -#define BTA_BLE_LOCAL_KEY_TYPE_ID 1 -#define BTA_BLE_LOCAL_KEY_TYPE_ER 2 +typedef tBTM_LE_LENC_KEYS tBTA_LE_LENC_KEYS; +typedef tBTM_LE_LCSRK_KEYS tBTA_LE_LCSRK_KEYS; +typedef tBTM_LE_PID_KEYS tBTA_LE_PID_KEYS; + +typedef union { + tBTA_LE_PENC_KEYS penc_key; /* received peer encryption key */ + tBTA_LE_PCSRK_KEYS psrk_key; /* received peer device SRK */ + tBTA_LE_PID_KEYS pid_key; /* peer device ID key */ + tBTA_LE_LENC_KEYS + lenc_key; /* local encryption reproduction keys LTK = = d1(ER,DIV,0)*/ + tBTA_LE_LCSRK_KEYS lcsrk_key; /* local device CSRK = d1(ER,DIV,1)*/ + tBTA_LE_PID_KEYS lid_key; /* local device ID key for the particular remote */ +} tBTA_LE_KEY_VALUE; + +#define BTA_BLE_LOCAL_KEY_TYPE_ID 1 +#define BTA_BLE_LOCAL_KEY_TYPE_ER 2 typedef uint8_t tBTA_DM_BLE_LOCAL_KEY_MASK; -typedef struct -{ - BT_OCTET16 ir; - BT_OCTET16 irk; - BT_OCTET16 dhk; -}tBTA_BLE_LOCAL_ID_KEYS; +typedef struct { + BT_OCTET16 ir; + BT_OCTET16 irk; + BT_OCTET16 dhk; +} tBTA_BLE_LOCAL_ID_KEYS; -#define BTA_DM_SEC_GRANTED BTA_SUCCESS -#define BTA_DM_SEC_PAIR_NOT_SPT BTA_DM_AUTH_SMP_PAIR_NOT_SUPPORT -#define BTA_DM_SEC_REP_ATTEMPTS BTA_DM_AUTH_SMP_REPEATED_ATTEMPT +#define BTA_DM_SEC_GRANTED BTA_SUCCESS +#define BTA_DM_SEC_PAIR_NOT_SPT BTA_DM_AUTH_SMP_PAIR_NOT_SUPPORT +#define BTA_DM_SEC_REP_ATTEMPTS BTA_DM_AUTH_SMP_REPEATED_ATTEMPT typedef uint8_t tBTA_DM_BLE_SEC_GRANT; - -#define BTA_DM_BLE_ONN_NONE BTM_BLE_CONN_NONE -#define BTA_DM_BLE_CONN_AUTO BTM_BLE_CONN_AUTO -#define BTA_DM_BLE_CONN_SELECTIVE BTM_BLE_CONN_SELECTIVE +#define BTA_DM_BLE_ONN_NONE BTM_BLE_CONN_NONE +#define BTA_DM_BLE_CONN_AUTO BTM_BLE_CONN_AUTO +#define BTA_DM_BLE_CONN_SELECTIVE BTM_BLE_CONN_SELECTIVE typedef uint8_t tBTA_DM_BLE_CONN_TYPE; -typedef bool (tBTA_DM_BLE_SEL_CBACK)(BD_ADDR random_bda, uint8_t *p_remote_name); +typedef bool(tBTA_DM_BLE_SEL_CBACK)(BD_ADDR random_bda, uint8_t* p_remote_name); /* Structure associated with BTA_DM_BLE_SEC_REQ_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* peer address */ - BD_NAME bd_name; /* peer device name */ +typedef struct { + BD_ADDR bd_addr; /* peer address */ + BD_NAME bd_name; /* peer device name */ } tBTA_DM_BLE_SEC_REQ; -typedef struct -{ - BD_ADDR bd_addr; /* peer address */ - tBTM_LE_KEY_TYPE key_type; - tBTM_LE_KEY_VALUE *p_key_value; -}tBTA_DM_BLE_KEY; +typedef struct { + BD_ADDR bd_addr; /* peer address */ + tBTM_LE_KEY_TYPE key_type; + tBTM_LE_KEY_VALUE* p_key_value; +} tBTA_DM_BLE_KEY; /* Structure associated with BTA_DM_AUTH_CMPL_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ - BD_NAME bd_name; /* Name of peer device. */ - bool key_present; /* Valid link key value in key element */ - LINK_KEY key; /* Link key associated with peer device. */ - uint8_t key_type; /* The type of Link Key */ - bool success; /* true of authentication succeeded, false if failed. */ - uint8_t fail_reason; /* The HCI reason/error code for when success=false */ - tBLE_ADDR_TYPE addr_type; /* Peer device address type */ - tBT_DEVICE_TYPE dev_type; +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ + BD_NAME bd_name; /* Name of peer device. */ + bool key_present; /* Valid link key value in key element */ + LINK_KEY key; /* Link key associated with peer device. */ + uint8_t key_type; /* The type of Link Key */ + bool success; /* true of authentication succeeded, false if failed. */ + uint8_t fail_reason; /* The HCI reason/error code for when success=false */ + tBLE_ADDR_TYPE addr_type; /* Peer device address type */ + tBT_DEVICE_TYPE dev_type; } tBTA_DM_AUTH_CMPL; - /* Structure associated with BTA_DM_AUTHORIZE_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ - BD_NAME bd_name; /* Name of peer device. */ - tBTA_SERVICE_ID service; /* Service ID to authorize. */ - DEV_CLASS dev_class; +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ + BD_NAME bd_name; /* Name of peer device. */ + tBTA_SERVICE_ID service; /* Service ID to authorize. */ + DEV_CLASS dev_class; } tBTA_DM_AUTHORIZE; /* Structure associated with BTA_DM_LINK_UP_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ #if (BLE_INCLUDED == TRUE) - tBTA_TRANSPORT link_type; + tBTA_TRANSPORT link_type; #endif } tBTA_DM_LINK_UP; /* Structure associated with BTA_DM_LINK_DOWN_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ - uint8_t status; /* connection open/closed */ - bool is_removed; /* true if device is removed when link is down */ +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ + uint8_t status; /* connection open/closed */ + bool is_removed; /* true if device is removed when link is down */ #if (BLE_INCLUDED == TRUE) - tBTA_TRANSPORT link_type; + tBTA_TRANSPORT link_type; #endif } tBTA_DM_LINK_DOWN; /* Structure associated with BTA_DM_ROLE_CHG_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ - uint8_t new_role; /* the new connection role */ +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ + uint8_t new_role; /* the new connection role */ } tBTA_DM_ROLE_CHG; /* Structure associated with BTA_DM_BUSY_LEVEL_EVT */ -typedef struct -{ - uint8_t level; /* when paging or inquiring, level is 10. - Otherwise, the number of ACL links */ - uint8_t level_flags; /* indicates individual flags */ +typedef struct { + uint8_t level; /* when paging or inquiring, level is 10. + Otherwise, the number of ACL links */ + uint8_t level_flags; /* indicates individual flags */ } tBTA_DM_BUSY_LEVEL; -#define BTA_IO_CAP_OUT BTM_IO_CAP_OUT /* 0 DisplayOnly */ -#define BTA_IO_CAP_IO BTM_IO_CAP_IO /* 1 DisplayYesNo */ -#define BTA_IO_CAP_IN BTM_IO_CAP_IN /* 2 KeyboardOnly */ -#define BTA_IO_CAP_NONE BTM_IO_CAP_NONE /* 3 NoInputNoOutput */ +#define BTA_IO_CAP_OUT BTM_IO_CAP_OUT /* 0 DisplayOnly */ +#define BTA_IO_CAP_IO BTM_IO_CAP_IO /* 1 DisplayYesNo */ +#define BTA_IO_CAP_IN BTM_IO_CAP_IN /* 2 KeyboardOnly */ +#define BTA_IO_CAP_NONE BTM_IO_CAP_NONE /* 3 NoInputNoOutput */ #if (BLE_INCLUDED == TRUE && SMP_INCLUDED == TRUE) -#define BTA_IO_CAP_KBDISP BTM_IO_CAP_KBDISP /* 4 Keyboard display */ +#define BTA_IO_CAP_KBDISP BTM_IO_CAP_KBDISP /* 4 Keyboard display */ #endif -typedef tBTM_IO_CAP tBTA_IO_CAP; - -#define BTA_AUTH_SP_NO BTM_AUTH_SP_NO /* 0 MITM Protection Not Required - Single Profile/non-bonding - Numeric comparison with automatic accept allowed */ -#define BTA_AUTH_SP_YES BTM_AUTH_SP_YES /* 1 MITM Protection Required - Single Profile/non-bonding - Use IO Capabilities to determine authentication procedure */ -#define BTA_AUTH_AP_NO BTM_AUTH_AP_NO /* 2 MITM Protection Not Required - All Profiles/dedicated bonding - Numeric comparison with automatic accept allowed */ -#define BTA_AUTH_AP_YES BTM_AUTH_AP_YES /* 3 MITM Protection Required - All Profiles/dedicated bonding - Use IO Capabilities to determine authentication procedure */ -#define BTA_AUTH_SPGB_NO BTM_AUTH_SPGB_NO /* 4 MITM Protection Not Required - Single Profiles/general bonding - Numeric comparison with automatic accept allowed */ -#define BTA_AUTH_SPGB_YES BTM_AUTH_SPGB_YES /* 5 MITM Protection Required - Single Profiles/general bonding - Use IO Capabilities to determine authentication procedure */ -typedef tBTM_AUTH_REQ tBTA_AUTH_REQ; - -#define BTA_AUTH_DD_BOND BTM_AUTH_DD_BOND /* 2 this bit is set for dedicated bonding */ -#define BTA_AUTH_GEN_BOND BTM_AUTH_SPGB_NO /* 4 this bit is set for general bonding */ -#define BTA_AUTH_BONDS BTM_AUTH_BONDS /* 6 the general/dedicated bonding bits */ - -#define BTA_LE_AUTH_NO_BOND BTM_LE_AUTH_REQ_NO_BOND /* 0*/ -#define BTA_LE_AUTH_BOND BTM_LE_AUTH_REQ_BOND /* 1 << 0 */ -#define BTA_LE_AUTH_REQ_MITM BTM_LE_AUTH_REQ_MITM /* 1 << 2 */ - -#define BTA_LE_AUTH_REQ_SC_ONLY BTM_LE_AUTH_REQ_SC_ONLY /* 1 << 3 */ -#define BTA_LE_AUTH_REQ_SC_BOND BTM_LE_AUTH_REQ_SC_BOND /* 1001 */ -#define BTA_LE_AUTH_REQ_SC_MITM BTM_LE_AUTH_REQ_SC_MITM /* 1100 */ -#define BTA_LE_AUTH_REQ_SC_MITM_BOND BTM_LE_AUTH_REQ_SC_MITM_BOND /* 1101 */ -typedef tBTM_LE_AUTH_REQ tBTA_LE_AUTH_REQ; /* combination of the above bit pattern */ - -#define BTA_OOB_NONE BTM_OOB_NONE -#define BTA_OOB_PRESENT BTM_OOB_PRESENT -#define BTA_OOB_UNKNOWN BTM_OOB_UNKNOWN - -typedef tBTM_OOB_DATA tBTA_OOB_DATA; +typedef tBTM_IO_CAP tBTA_IO_CAP; + +#define BTA_AUTH_SP_NO \ + BTM_AUTH_SP_NO /* 0 MITM Protection Not Required - Single \ + Profile/non-bonding \ + Numeric comparison with automatic accept allowed */ +#define BTA_AUTH_SP_YES \ + BTM_AUTH_SP_YES /* 1 MITM Protection Required - Single Profile/non-bonding \ + Use IO Capabilities to determine authentication procedure \ + */ +#define BTA_AUTH_AP_NO \ + BTM_AUTH_AP_NO /* 2 MITM Protection Not Required - All Profiles/dedicated \ + bonding \ + Numeric comparison with automatic accept allowed */ +#define BTA_AUTH_AP_YES \ + BTM_AUTH_AP_YES /* 3 MITM Protection Required - All Profiles/dedicated \ + bonding \ + Use IO Capabilities to determine authentication procedure \ + */ +#define BTA_AUTH_SPGB_NO \ + BTM_AUTH_SPGB_NO /* 4 MITM Protection Not Required - Single Profiles/general \ + bonding \ + Numeric comparison with automatic accept allowed */ +#define BTA_AUTH_SPGB_YES \ + BTM_AUTH_SPGB_YES /* 5 MITM Protection Required - Single Profiles/general \ + bonding \ + Use IO Capabilities to determine authentication \ + procedure */ +typedef tBTM_AUTH_REQ tBTA_AUTH_REQ; + +#define BTA_AUTH_DD_BOND \ + BTM_AUTH_DD_BOND /* 2 this bit is set for dedicated bonding */ +#define BTA_AUTH_GEN_BOND \ + BTM_AUTH_SPGB_NO /* 4 this bit is set for general bonding */ +#define BTA_AUTH_BONDS \ + BTM_AUTH_BONDS /* 6 the general/dedicated bonding bits */ + +#define BTA_LE_AUTH_NO_BOND BTM_LE_AUTH_REQ_NO_BOND /* 0*/ +#define BTA_LE_AUTH_BOND BTM_LE_AUTH_REQ_BOND /* 1 << 0 */ +#define BTA_LE_AUTH_REQ_MITM BTM_LE_AUTH_REQ_MITM /* 1 << 2 */ + +#define BTA_LE_AUTH_REQ_SC_ONLY BTM_LE_AUTH_REQ_SC_ONLY /* 1 << 3 */ +#define BTA_LE_AUTH_REQ_SC_BOND BTM_LE_AUTH_REQ_SC_BOND /* 1001 */ +#define BTA_LE_AUTH_REQ_SC_MITM BTM_LE_AUTH_REQ_SC_MITM /* 1100 */ +#define BTA_LE_AUTH_REQ_SC_MITM_BOND BTM_LE_AUTH_REQ_SC_MITM_BOND /* 1101 */ +typedef tBTM_LE_AUTH_REQ + tBTA_LE_AUTH_REQ; /* combination of the above bit pattern */ + +#define BTA_OOB_NONE BTM_OOB_NONE +#define BTA_OOB_PRESENT BTM_OOB_PRESENT +#define BTA_OOB_UNKNOWN BTM_OOB_UNKNOWN + +typedef tBTM_OOB_DATA tBTA_OOB_DATA; /* Structure associated with BTA_DM_SP_CFM_REQ_EVT */ -typedef struct -{ - /* Note: First 3 data members must be, bd_addr, dev_class, and bd_name in order */ - BD_ADDR bd_addr; /* peer address */ - DEV_CLASS dev_class; /* peer CoD */ - BD_NAME bd_name; /* peer device name */ - uint32_t num_val; /* the numeric value for comparison. If just_works, do not show this number to UI */ - bool just_works; /* true, if "Just Works" association model */ - tBTA_AUTH_REQ loc_auth_req; /* Authentication required for local device */ - tBTA_AUTH_REQ rmt_auth_req; /* Authentication required for peer device */ - tBTA_IO_CAP loc_io_caps; /* IO Capabilities of local device */ - tBTA_AUTH_REQ rmt_io_caps; /* IO Capabilities of remote device */ +typedef struct { + /* Note: First 3 data members must be, bd_addr, dev_class, and bd_name in + * order */ + BD_ADDR bd_addr; /* peer address */ + DEV_CLASS dev_class; /* peer CoD */ + BD_NAME bd_name; /* peer device name */ + uint32_t num_val; /* the numeric value for comparison. If just_works, do not + show this number to UI */ + bool just_works; /* true, if "Just Works" association model */ + tBTA_AUTH_REQ loc_auth_req; /* Authentication required for local device */ + tBTA_AUTH_REQ rmt_auth_req; /* Authentication required for peer device */ + tBTA_IO_CAP loc_io_caps; /* IO Capabilities of local device */ + tBTA_AUTH_REQ rmt_io_caps; /* IO Capabilities of remote device */ } tBTA_DM_SP_CFM_REQ; -enum -{ - BTA_SP_KEY_STARTED, /* passkey entry started */ - BTA_SP_KEY_ENTERED, /* passkey digit entered */ - BTA_SP_KEY_ERASED, /* passkey digit erased */ - BTA_SP_KEY_CLEARED, /* passkey cleared */ - BTA_SP_KEY_COMPLT /* passkey entry completed */ +enum { + BTA_SP_KEY_STARTED, /* passkey entry started */ + BTA_SP_KEY_ENTERED, /* passkey digit entered */ + BTA_SP_KEY_ERASED, /* passkey digit erased */ + BTA_SP_KEY_CLEARED, /* passkey cleared */ + BTA_SP_KEY_COMPLT /* passkey entry completed */ }; -typedef uint8_t tBTA_SP_KEY_TYPE; +typedef uint8_t tBTA_SP_KEY_TYPE; /* Structure associated with BTA_DM_SP_KEYPRESS_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* peer address */ - tBTA_SP_KEY_TYPE notif_type; -}tBTA_DM_SP_KEY_PRESS; +typedef struct { + BD_ADDR bd_addr; /* peer address */ + tBTA_SP_KEY_TYPE notif_type; +} tBTA_DM_SP_KEY_PRESS; /* Structure associated with BTA_DM_SP_KEY_NOTIF_EVT */ -typedef struct -{ - /* Note: First 3 data members must be, bd_addr, dev_class, and bd_name in order */ - BD_ADDR bd_addr; /* peer address */ - DEV_CLASS dev_class; /* peer CoD */ - BD_NAME bd_name; /* peer device name */ - uint32_t passkey; /* the numeric value for comparison. If just_works, do not show this number to UI */ +typedef struct { + /* Note: First 3 data members must be, bd_addr, dev_class, and bd_name in + * order */ + BD_ADDR bd_addr; /* peer address */ + DEV_CLASS dev_class; /* peer CoD */ + BD_NAME bd_name; /* peer device name */ + uint32_t passkey; /* the numeric value for comparison. If just_works, do not + show this number to UI */ } tBTA_DM_SP_KEY_NOTIF; /* Structure associated with BTA_DM_SP_RMT_OOB_EVT */ -typedef struct -{ - /* Note: First 3 data members must be, bd_addr, dev_class, and bd_name in order */ - BD_ADDR bd_addr; /* peer address */ - DEV_CLASS dev_class; /* peer CoD */ - BD_NAME bd_name; /* peer device name */ +typedef struct { + /* Note: First 3 data members must be, bd_addr, dev_class, and bd_name in + * order */ + BD_ADDR bd_addr; /* peer address */ + DEV_CLASS dev_class; /* peer CoD */ + BD_NAME bd_name; /* peer device name */ } tBTA_DM_SP_RMT_OOB; /* Structure associated with BTA_DM_BOND_CANCEL_CMPL_EVT */ -typedef struct -{ - tBTA_STATUS result; /* true of bond cancel succeeded, false if failed. */ +typedef struct { + tBTA_STATUS result; /* true of bond cancel succeeded, false if failed. */ } tBTA_DM_BOND_CANCEL_CMPL; /* Union of all security callback structures */ -typedef union -{ - tBTA_DM_ENABLE enable; /* BTA enabled */ - tBTA_DM_PIN_REQ pin_req; /* PIN request. */ - tBTA_DM_AUTH_CMPL auth_cmpl; /* Authentication complete indication. */ - tBTA_DM_AUTHORIZE authorize; /* Authorization request. */ - tBTA_DM_LINK_UP link_up; /* ACL connection down event */ - tBTA_DM_LINK_DOWN link_down; /* ACL connection down event */ - tBTA_DM_BUSY_LEVEL busy_level; /* System busy level */ - tBTA_DM_SP_CFM_REQ cfm_req; /* user confirm request */ - tBTA_DM_SP_KEY_NOTIF key_notif; /* passkey notification */ - tBTA_DM_SP_RMT_OOB rmt_oob; /* remote oob */ - tBTA_DM_BOND_CANCEL_CMPL bond_cancel_cmpl; /* Bond Cancel Complete indication */ - tBTA_DM_SP_KEY_PRESS key_press; /* key press notification event */ - tBTA_DM_ROLE_CHG role_chg; /* role change event */ - tBTA_DM_BLE_SEC_REQ ble_req; /* BLE SMP related request */ - tBTA_DM_BLE_KEY ble_key; /* BLE SMP keys used when pairing */ - tBTA_BLE_LOCAL_ID_KEYS ble_id_keys; /* IR event */ - BT_OCTET16 ble_er; /* ER event data */ +typedef union { + tBTA_DM_ENABLE enable; /* BTA enabled */ + tBTA_DM_PIN_REQ pin_req; /* PIN request. */ + tBTA_DM_AUTH_CMPL auth_cmpl; /* Authentication complete indication. */ + tBTA_DM_AUTHORIZE authorize; /* Authorization request. */ + tBTA_DM_LINK_UP link_up; /* ACL connection down event */ + tBTA_DM_LINK_DOWN link_down; /* ACL connection down event */ + tBTA_DM_BUSY_LEVEL busy_level; /* System busy level */ + tBTA_DM_SP_CFM_REQ cfm_req; /* user confirm request */ + tBTA_DM_SP_KEY_NOTIF key_notif; /* passkey notification */ + tBTA_DM_SP_RMT_OOB rmt_oob; /* remote oob */ + tBTA_DM_BOND_CANCEL_CMPL + bond_cancel_cmpl; /* Bond Cancel Complete indication */ + tBTA_DM_SP_KEY_PRESS key_press; /* key press notification event */ + tBTA_DM_ROLE_CHG role_chg; /* role change event */ + tBTA_DM_BLE_SEC_REQ ble_req; /* BLE SMP related request */ + tBTA_DM_BLE_KEY ble_key; /* BLE SMP keys used when pairing */ + tBTA_BLE_LOCAL_ID_KEYS ble_id_keys; /* IR event */ + BT_OCTET16 ble_er; /* ER event data */ } tBTA_DM_SEC; /* Security callback */ -typedef void (tBTA_DM_SEC_CBACK)(tBTA_DM_SEC_EVT event, tBTA_DM_SEC *p_data); +typedef void(tBTA_DM_SEC_CBACK)(tBTA_DM_SEC_EVT event, tBTA_DM_SEC* p_data); typedef uint32_t tBTA_DM_BLE_REF_VALUE; -#define BTA_DM_BLE_PF_ENABLE_EVT BTM_BLE_PF_ENABLE -#define BTA_DM_BLE_PF_CONFIG_EVT BTM_BLE_PF_CONFIG +#define BTA_DM_BLE_PF_ENABLE_EVT BTM_BLE_PF_ENABLE +#define BTA_DM_BLE_PF_CONFIG_EVT BTM_BLE_PF_CONFIG typedef uint8_t tBTA_DM_BLE_PF_EVT; -#define BTA_DM_BLE_PF_ENABLE 1 -#define BTA_DM_BLE_PF_CONFIG 2 +#define BTA_DM_BLE_PF_ENABLE 1 +#define BTA_DM_BLE_PF_CONFIG 2 typedef uint8_t tBTA_DM_BLE_PF_ACTION; /* Config callback */ -typedef void (tBTA_DM_BLE_PF_CFG_CBACK) (tBTA_DM_BLE_PF_ACTION action, - tBTA_DM_BLE_PF_COND_TYPE cfg_cond, - tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status, - tBTA_DM_BLE_REF_VALUE ref_value); +typedef void(tBTA_DM_BLE_PF_CFG_CBACK)(tBTA_DM_BLE_PF_ACTION action, + tBTA_DM_BLE_PF_COND_TYPE cfg_cond, + tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, + tBTA_STATUS status, + tBTA_DM_BLE_REF_VALUE ref_value); /* Param callback */ -typedef void (tBTA_DM_BLE_PF_PARAM_CBACK) (uint8_t action_type, tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, - tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status); +typedef void(tBTA_DM_BLE_PF_PARAM_CBACK)(uint8_t action_type, + tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, + tBTA_DM_BLE_REF_VALUE ref_value, + tBTA_STATUS status); /* Status callback */ -typedef void (tBTA_DM_BLE_PF_STATUS_CBACK) (uint8_t action, tBTA_STATUS status, - tBTA_DM_BLE_REF_VALUE ref_value); +typedef void(tBTA_DM_BLE_PF_STATUS_CBACK)(uint8_t action, tBTA_STATUS status, + tBTA_DM_BLE_REF_VALUE ref_value); - -#define BTA_DM_BLE_PF_BRDCAST_ADDR_FILT 1 +#define BTA_DM_BLE_PF_BRDCAST_ADDR_FILT 1 #define BTA_DM_BLE_PF_SERV_DATA_CHG_FILT 2 -#define BTA_DM_BLE_PF_SERV_UUID 4 -#define BTA_DM_BLE_PF_SERV_SOLC_UUID 8 -#define BTA_DM_BLE_PF_LOC_NAME_CHECK 16 -#define BTA_DM_BLE_PF_MANUF_NAME_CHECK 32 -#define BTA_DM_BLE_PF_SERV_DATA_CHECK 64 +#define BTA_DM_BLE_PF_SERV_UUID 4 +#define BTA_DM_BLE_PF_SERV_SOLC_UUID 8 +#define BTA_DM_BLE_PF_LOC_NAME_CHECK 16 +#define BTA_DM_BLE_PF_MANUF_NAME_CHECK 32 +#define BTA_DM_BLE_PF_SERV_DATA_CHECK 64 typedef uint16_t tBTA_DM_BLE_PF_FEAT_SEL; -#define BTA_DM_BLE_PF_LIST_LOGIC_OR 1 -#define BTA_DM_BLE_PF_LIST_LOGIC_AND 2 +#define BTA_DM_BLE_PF_LIST_LOGIC_OR 1 +#define BTA_DM_BLE_PF_LIST_LOGIC_AND 2 typedef uint16_t tBTA_DM_BLE_PF_LIST_LOGIC_TYPE; -#define BTA_DM_BLE_PF_FILT_LOGIC_OR 0 -#define BTA_DM_BLE_PF_FILT_LOGIC_AND 1 +#define BTA_DM_BLE_PF_FILT_LOGIC_OR 0 +#define BTA_DM_BLE_PF_FILT_LOGIC_AND 1 typedef uint16_t tBTA_DM_BLE_PF_FILT_LOGIC_TYPE; -typedef uint8_t tBTA_DM_BLE_PF_RSSI_THRESHOLD; -typedef uint8_t tBTA_DM_BLE_PF_DELIVERY_MODE; +typedef uint8_t tBTA_DM_BLE_PF_RSSI_THRESHOLD; +typedef uint8_t tBTA_DM_BLE_PF_DELIVERY_MODE; typedef uint16_t tBTA_DM_BLE_PF_TIMEOUT; -typedef uint8_t tBTA_DM_BLE_PF_TIMEOUT_CNT; +typedef uint8_t tBTA_DM_BLE_PF_TIMEOUT_CNT; typedef uint16_t tBTA_DM_BLE_PF_ADV_TRACK_ENTRIES; -typedef struct -{ - tBTA_DM_BLE_PF_FEAT_SEL feat_seln; - tBTA_DM_BLE_PF_LIST_LOGIC_TYPE list_logic_type; - tBTA_DM_BLE_PF_FILT_LOGIC_TYPE filt_logic_type; - tBTA_DM_BLE_PF_RSSI_THRESHOLD rssi_high_thres; - tBTA_DM_BLE_PF_RSSI_THRESHOLD rssi_low_thres; - tBTA_DM_BLE_PF_DELIVERY_MODE dely_mode; - tBTA_DM_BLE_PF_TIMEOUT found_timeout; - tBTA_DM_BLE_PF_TIMEOUT lost_timeout; - tBTA_DM_BLE_PF_TIMEOUT_CNT found_timeout_cnt; - tBTA_DM_BLE_PF_ADV_TRACK_ENTRIES num_of_tracking_entries; +typedef struct { + tBTA_DM_BLE_PF_FEAT_SEL feat_seln; + tBTA_DM_BLE_PF_LIST_LOGIC_TYPE list_logic_type; + tBTA_DM_BLE_PF_FILT_LOGIC_TYPE filt_logic_type; + tBTA_DM_BLE_PF_RSSI_THRESHOLD rssi_high_thres; + tBTA_DM_BLE_PF_RSSI_THRESHOLD rssi_low_thres; + tBTA_DM_BLE_PF_DELIVERY_MODE dely_mode; + tBTA_DM_BLE_PF_TIMEOUT found_timeout; + tBTA_DM_BLE_PF_TIMEOUT lost_timeout; + tBTA_DM_BLE_PF_TIMEOUT_CNT found_timeout_cnt; + tBTA_DM_BLE_PF_ADV_TRACK_ENTRIES num_of_tracking_entries; } tBTA_DM_BLE_PF_FILT_PARAMS; /* Search callback events */ -#define BTA_DM_INQ_RES_EVT 0 /* Inquiry result for a peer device. */ -#define BTA_DM_INQ_CMPL_EVT 1 /* Inquiry complete. */ -#define BTA_DM_DISC_RES_EVT 2 /* Discovery result for a peer device. */ -#define BTA_DM_DISC_BLE_RES_EVT 3 /* Discovery result for BLE GATT based servoce on a peer device. */ -#define BTA_DM_DISC_CMPL_EVT 4 /* Discovery complete. */ -#define BTA_DM_DI_DISC_CMPL_EVT 5 /* Discovery complete. */ -#define BTA_DM_SEARCH_CANCEL_CMPL_EVT 6 /* Search cancelled */ +#define BTA_DM_INQ_RES_EVT 0 /* Inquiry result for a peer device. */ +#define BTA_DM_INQ_CMPL_EVT 1 /* Inquiry complete. */ +#define BTA_DM_DISC_RES_EVT 2 /* Discovery result for a peer device. */ +#define BTA_DM_DISC_BLE_RES_EVT \ + 3 /* Discovery result for BLE GATT based servoce on a peer device. */ +#define BTA_DM_DISC_CMPL_EVT 4 /* Discovery complete. */ +#define BTA_DM_DI_DISC_CMPL_EVT 5 /* Discovery complete. */ +#define BTA_DM_SEARCH_CANCEL_CMPL_EVT 6 /* Search cancelled */ typedef uint8_t tBTA_DM_SEARCH_EVT; -#define BTA_DM_INQ_RES_IGNORE_RSSI BTM_INQ_RES_IGNORE_RSSI /* 0x7f RSSI value not supplied (ignore it) */ +#define BTA_DM_INQ_RES_IGNORE_RSSI \ + BTM_INQ_RES_IGNORE_RSSI /* 0x7f RSSI value not supplied (ignore it) */ /* Structure associated with BTA_DM_INQ_RES_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ - DEV_CLASS dev_class; /* Device class of peer device. */ - bool remt_name_not_required; /* Application sets this flag if it already knows the name of the device */ - /* If the device name is known to application BTA skips the remote name request */ - bool is_limited; /* true, if the limited inquiry bit is set in the CoD */ - int8_t rssi; /* The rssi value */ - uint8_t *p_eir; /* received EIR */ +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ + DEV_CLASS dev_class; /* Device class of peer device. */ + bool remt_name_not_required; /* Application sets this flag if it already knows + the name of the device */ + /* If the device name is known to application BTA skips the remote name + * request */ + bool is_limited; /* true, if the limited inquiry bit is set in the CoD */ + int8_t rssi; /* The rssi value */ + uint8_t* p_eir; /* received EIR */ #if (BLE_INCLUDED == TRUE) - uint8_t inq_result_type; - uint8_t ble_addr_type; - tBTM_BLE_EVT_TYPE ble_evt_type; - tBT_DEVICE_TYPE device_type; - uint8_t flag; + uint8_t inq_result_type; + uint8_t ble_addr_type; + tBTM_BLE_EVT_TYPE ble_evt_type; + tBT_DEVICE_TYPE device_type; + uint8_t flag; #endif } tBTA_DM_INQ_RES; /* Structure associated with BTA_DM_INQ_CMPL_EVT */ -typedef struct -{ - uint8_t num_resps; /* Number of inquiry responses. */ +typedef struct { + uint8_t num_resps; /* Number of inquiry responses. */ } tBTA_DM_INQ_CMPL; /* Structure associated with BTA_DM_DI_DISC_CMPL_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ - uint8_t num_record; /* Number of DI record */ - tBTA_STATUS result; +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ + uint8_t num_record; /* Number of DI record */ + tBTA_STATUS result; } tBTA_DM_DI_DISC_CMPL; /* Structure associated with BTA_DM_DISC_RES_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ - BD_NAME bd_name; /* Name of peer device. */ - tBTA_SERVICE_MASK services; /* Services found on peer device. */ - uint8_t * p_raw_data; /* Raw data for discovery DB */ - uint32_t raw_data_size; /* size of raw data */ - tBT_DEVICE_TYPE device_type; /* device type in case it is BLE device */ - uint32_t num_uuids; - uint8_t *p_uuid_list; - tBTA_STATUS result; +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ + BD_NAME bd_name; /* Name of peer device. */ + tBTA_SERVICE_MASK services; /* Services found on peer device. */ + uint8_t* p_raw_data; /* Raw data for discovery DB */ + uint32_t raw_data_size; /* size of raw data */ + tBT_DEVICE_TYPE device_type; /* device type in case it is BLE device */ + uint32_t num_uuids; + uint8_t* p_uuid_list; + tBTA_STATUS result; } tBTA_DM_DISC_RES; /* Structure associated with tBTA_DM_DISC_BLE_RES */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address peer device. */ - BD_NAME bd_name; /* Name of peer device. */ - tBT_UUID service; /* GATT based Services UUID found on peer device. */ +typedef struct { + BD_ADDR bd_addr; /* BD address peer device. */ + BD_NAME bd_name; /* Name of peer device. */ + tBT_UUID service; /* GATT based Services UUID found on peer device. */ } tBTA_DM_DISC_BLE_RES; - /* Union of all search callback structures */ -typedef union -{ - tBTA_DM_INQ_RES inq_res; /* Inquiry result for a peer device. */ - tBTA_DM_INQ_CMPL inq_cmpl; /* Inquiry complete. */ - tBTA_DM_DISC_RES disc_res; /* Discovery result for a peer device. */ - tBTA_DM_DISC_BLE_RES disc_ble_res; /* discovery result for GATT based service */ - tBTA_DM_DI_DISC_CMPL di_disc; /* DI discovery result for a peer device */ +typedef union { + tBTA_DM_INQ_RES inq_res; /* Inquiry result for a peer device. */ + tBTA_DM_INQ_CMPL inq_cmpl; /* Inquiry complete. */ + tBTA_DM_DISC_RES disc_res; /* Discovery result for a peer device. */ + tBTA_DM_DISC_BLE_RES + disc_ble_res; /* discovery result for GATT based service */ + tBTA_DM_DI_DISC_CMPL di_disc; /* DI discovery result for a peer device */ } tBTA_DM_SEARCH; /* Search callback */ -typedef void (tBTA_DM_SEARCH_CBACK)(tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data); +typedef void(tBTA_DM_SEARCH_CBACK)(tBTA_DM_SEARCH_EVT event, + tBTA_DM_SEARCH* p_data); /* Execute call back */ -typedef void (tBTA_DM_EXEC_CBACK) (void * p_param); +typedef void(tBTA_DM_EXEC_CBACK)(void* p_param); /* Encryption callback*/ -typedef void (tBTA_DM_ENCRYPT_CBACK) (BD_ADDR bd_addr, tBTA_TRANSPORT transport, tBTA_STATUS result); +typedef void(tBTA_DM_ENCRYPT_CBACK)(BD_ADDR bd_addr, tBTA_TRANSPORT transport, + tBTA_STATUS result); -#define BTA_DM_BLE_SEC_NONE BTM_BLE_SEC_NONE -#define BTA_DM_BLE_SEC_ENCRYPT BTM_BLE_SEC_ENCRYPT -#define BTA_DM_BLE_SEC_NO_MITM BTM_BLE_SEC_ENCRYPT_NO_MITM -#define BTA_DM_BLE_SEC_MITM BTM_BLE_SEC_ENCRYPT_MITM -typedef tBTM_BLE_SEC_ACT tBTA_DM_BLE_SEC_ACT; +#define BTA_DM_BLE_SEC_NONE BTM_BLE_SEC_NONE +#define BTA_DM_BLE_SEC_ENCRYPT BTM_BLE_SEC_ENCRYPT +#define BTA_DM_BLE_SEC_NO_MITM BTM_BLE_SEC_ENCRYPT_NO_MITM +#define BTA_DM_BLE_SEC_MITM BTM_BLE_SEC_ENCRYPT_MITM +typedef tBTM_BLE_SEC_ACT tBTA_DM_BLE_SEC_ACT; #if (BLE_INCLUDED == TRUE) -typedef tBTM_BLE_TX_TIME_MS tBTA_DM_BLE_TX_TIME_MS; -typedef tBTM_BLE_RX_TIME_MS tBTA_DM_BLE_RX_TIME_MS; -typedef tBTM_BLE_IDLE_TIME_MS tBTA_DM_BLE_IDLE_TIME_MS; -typedef tBTM_BLE_ENERGY_USED tBTA_DM_BLE_ENERGY_USED; - -#define BTA_DM_CONTRL_UNKNOWN 0 /* Unknown state */ -#define BTA_DM_CONTRL_ACTIVE 1 /* ACL link on, SCO link ongoing, sniff mode */ -#define BTA_DM_CONTRL_SCAN 2 /* Scan state - paging/inquiry/trying to connect*/ -#define BTA_DM_CONTRL_IDLE 3 /* Idle state - page scan, LE advt, inquiry scan */ +typedef tBTM_BLE_TX_TIME_MS tBTA_DM_BLE_TX_TIME_MS; +typedef tBTM_BLE_RX_TIME_MS tBTA_DM_BLE_RX_TIME_MS; +typedef tBTM_BLE_IDLE_TIME_MS tBTA_DM_BLE_IDLE_TIME_MS; +typedef tBTM_BLE_ENERGY_USED tBTA_DM_BLE_ENERGY_USED; + +#define BTA_DM_CONTRL_UNKNOWN 0 /* Unknown state */ +#define BTA_DM_CONTRL_ACTIVE 1 /* ACL link on, SCO link ongoing, sniff mode */ +#define BTA_DM_CONTRL_SCAN \ + 2 /* Scan state - paging/inquiry/trying to \ + connect*/ +#define BTA_DM_CONTRL_IDLE \ + 3 /* Idle state - page scan, LE advt, inquiry scan \ + */ typedef uint8_t tBTA_DM_CONTRL_STATE; @@ -977,92 +1019,98 @@ typedef uint16_t tBTA_DM_BLE_ADV_INFO_TIMESTAMP; typedef tBTM_BLE_TRACK_ADV_DATA tBTA_DM_BLE_TRACK_ADV_DATA; -typedef void (tBTA_BLE_SCAN_THRESHOLD_CBACK)(tBTA_DM_BLE_REF_VALUE ref_value); +typedef void(tBTA_BLE_SCAN_THRESHOLD_CBACK)(tBTA_DM_BLE_REF_VALUE ref_value); -typedef void (tBTA_BLE_SCAN_REP_CBACK) (tBTA_DM_BLE_REF_VALUE ref_value, uint8_t report_format, - uint8_t num_records, uint16_t data_len, - uint8_t* p_rep_data, tBTA_STATUS status); +typedef void(tBTA_BLE_SCAN_REP_CBACK)(tBTA_DM_BLE_REF_VALUE ref_value, + uint8_t report_format, + uint8_t num_records, uint16_t data_len, + uint8_t* p_rep_data, tBTA_STATUS status); -typedef void (tBTA_BLE_SCAN_SETUP_CBACK) (tBTA_BLE_BATCH_SCAN_EVT evt, - tBTA_DM_BLE_REF_VALUE ref_value, - tBTA_STATUS status); +typedef void(tBTA_BLE_SCAN_SETUP_CBACK)(tBTA_BLE_BATCH_SCAN_EVT evt, + tBTA_DM_BLE_REF_VALUE ref_value, + tBTA_STATUS status); -typedef void (tBTA_BLE_TRACK_ADV_CMPL_CBACK)(int action, tBTA_STATUS status, - tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, - tBTA_DM_BLE_REF_VALUE ref_value); +typedef void(tBTA_BLE_TRACK_ADV_CMPL_CBACK)( + int action, tBTA_STATUS status, tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, + tBTA_DM_BLE_REF_VALUE ref_value); -typedef void (tBTA_BLE_TRACK_ADV_CBACK)(tBTA_DM_BLE_TRACK_ADV_DATA *p_adv_data); +typedef void(tBTA_BLE_TRACK_ADV_CBACK)(tBTA_DM_BLE_TRACK_ADV_DATA* p_adv_data); -typedef void (tBTA_BLE_ENERGY_INFO_CBACK)(tBTA_DM_BLE_TX_TIME_MS tx_time, - tBTA_DM_BLE_RX_TIME_MS rx_time, - tBTA_DM_BLE_IDLE_TIME_MS idle_time, - tBTA_DM_BLE_ENERGY_USED energy_used, - tBTA_DM_CONTRL_STATE ctrl_state, - tBTA_STATUS status); +typedef void(tBTA_BLE_ENERGY_INFO_CBACK)(tBTA_DM_BLE_TX_TIME_MS tx_time, + tBTA_DM_BLE_RX_TIME_MS rx_time, + tBTA_DM_BLE_IDLE_TIME_MS idle_time, + tBTA_DM_BLE_ENERGY_USED energy_used, + tBTA_DM_CONTRL_STATE ctrl_state, + tBTA_STATUS status); #else -typedef uint8_t tBTA_DM_BLE_SEC_ACT; +typedef uint8_t tBTA_DM_BLE_SEC_ACT; #endif /* Maximum service name length */ -#define BTA_SERVICE_NAME_LEN 35 -#define BTA_SERVICE_DESP_LEN BTA_SERVICE_NAME_LEN -#define BTA_PROVIDER_NAME_LEN BTA_SERVICE_NAME_LEN - +#define BTA_SERVICE_NAME_LEN 35 +#define BTA_SERVICE_DESP_LEN BTA_SERVICE_NAME_LEN +#define BTA_PROVIDER_NAME_LEN BTA_SERVICE_NAME_LEN /* link policy masks */ -#define BTA_DM_LP_SWITCH HCI_ENABLE_MASTER_SLAVE_SWITCH -#define BTA_DM_LP_HOLD HCI_ENABLE_HOLD_MODE -#define BTA_DM_LP_SNIFF HCI_ENABLE_SNIFF_MODE -#define BTA_DM_LP_PARK HCI_ENABLE_PARK_MODE +#define BTA_DM_LP_SWITCH HCI_ENABLE_MASTER_SLAVE_SWITCH +#define BTA_DM_LP_HOLD HCI_ENABLE_HOLD_MODE +#define BTA_DM_LP_SNIFF HCI_ENABLE_SNIFF_MODE +#define BTA_DM_LP_PARK HCI_ENABLE_PARK_MODE typedef uint16_t tBTA_DM_LP_MASK; /* power mode actions */ -#define BTA_DM_PM_NO_ACTION 0x00 /* no change to the current pm setting */ -#define BTA_DM_PM_PARK 0x10 /* prefers park mode */ -#define BTA_DM_PM_SNIFF 0x20 /* prefers sniff mode */ -#define BTA_DM_PM_SNIFF1 0x21 /* prefers sniff1 mode */ -#define BTA_DM_PM_SNIFF2 0x22 /* prefers sniff2 mode */ -#define BTA_DM_PM_SNIFF3 0x23 /* prefers sniff3 mode */ -#define BTA_DM_PM_SNIFF4 0x24 /* prefers sniff4 mode */ -#define BTA_DM_PM_SNIFF5 0x25 /* prefers sniff5 mode */ -#define BTA_DM_PM_SNIFF6 0x26 /* prefers sniff6 mode */ -#define BTA_DM_PM_SNIFF7 0x27 /* prefers sniff7 mode */ -#define BTA_DM_PM_SNIFF_USER0 0x28 /* prefers user-defined sniff0 mode (testtool only) */ -#define BTA_DM_PM_SNIFF_USER1 0x29 /* prefers user-defined sniff1 mode (testtool only) */ -#define BTA_DM_PM_ACTIVE 0x40 /* prefers active mode */ -#define BTA_DM_PM_RETRY 0x80 /* retry power mode based on current settings */ -#define BTA_DM_PM_SUSPEND 0x04 /* prefers suspend mode */ -#define BTA_DM_PM_NO_PREF 0x01 /* service has no prefernce on power mode setting. eg. connection to service got closed */ +#define BTA_DM_PM_NO_ACTION 0x00 /* no change to the current pm setting */ +#define BTA_DM_PM_PARK 0x10 /* prefers park mode */ +#define BTA_DM_PM_SNIFF 0x20 /* prefers sniff mode */ +#define BTA_DM_PM_SNIFF1 0x21 /* prefers sniff1 mode */ +#define BTA_DM_PM_SNIFF2 0x22 /* prefers sniff2 mode */ +#define BTA_DM_PM_SNIFF3 0x23 /* prefers sniff3 mode */ +#define BTA_DM_PM_SNIFF4 0x24 /* prefers sniff4 mode */ +#define BTA_DM_PM_SNIFF5 0x25 /* prefers sniff5 mode */ +#define BTA_DM_PM_SNIFF6 0x26 /* prefers sniff6 mode */ +#define BTA_DM_PM_SNIFF7 0x27 /* prefers sniff7 mode */ +#define BTA_DM_PM_SNIFF_USER0 \ + 0x28 /* prefers user-defined sniff0 mode (testtool only) */ +#define BTA_DM_PM_SNIFF_USER1 \ + 0x29 /* prefers user-defined sniff1 mode (testtool only) */ +#define BTA_DM_PM_ACTIVE 0x40 /* prefers active mode */ +#define BTA_DM_PM_RETRY 0x80 /* retry power mode based on current settings */ +#define BTA_DM_PM_SUSPEND 0x04 /* prefers suspend mode */ +#define BTA_DM_PM_NO_PREF \ + 0x01 /* service has no prefernce on power mode setting. eg. connection to \ + service got closed */ typedef uint8_t tBTA_DM_PM_ACTION; /* index to bta_dm_ssr_spec */ -#define BTA_DM_PM_SSR0 0 -#define BTA_DM_PM_SSR1 1 /* BTA_DM_PM_SSR1 will be dedicated for - HH SSR setting entry, no other profile can use it */ -#define BTA_DM_PM_SSR2 2 -#define BTA_DM_PM_SSR3 3 -#define BTA_DM_PM_SSR4 4 -#define BTA_DM_PM_SSR5 5 -#define BTA_DM_PM_SSR6 6 - -#define BTA_DM_PM_NUM_EVTS 9 +#define BTA_DM_PM_SSR0 0 +#define BTA_DM_PM_SSR1 \ + 1 /* BTA_DM_PM_SSR1 will be dedicated for \ + HH SSR setting entry, no other profile can use it */ +#define BTA_DM_PM_SSR2 2 +#define BTA_DM_PM_SSR3 3 +#define BTA_DM_PM_SSR4 4 +#define BTA_DM_PM_SSR5 5 +#define BTA_DM_PM_SSR6 6 + +#define BTA_DM_PM_NUM_EVTS 9 #ifndef BTA_DM_PM_PARK_IDX -#define BTA_DM_PM_PARK_IDX 5 /* the actual index to bta_dm_pm_md[] for PARK mode */ +#define BTA_DM_PM_PARK_IDX \ + 5 /* the actual index to bta_dm_pm_md[] for PARK mode */ #endif #ifndef BTA_DM_PM_SNIFF_A2DP_IDX -#define BTA_DM_PM_SNIFF_A2DP_IDX BTA_DM_PM_SNIFF +#define BTA_DM_PM_SNIFF_A2DP_IDX BTA_DM_PM_SNIFF #endif #ifndef BTA_DM_PM_SNIFF_HD_IDLE_IDX -#define BTA_DM_PM_SNIFF_HD_IDLE_IDX BTA_DM_PM_SNIFF2 +#define BTA_DM_PM_SNIFF_HD_IDLE_IDX BTA_DM_PM_SNIFF2 #endif #ifndef BTA_DM_PM_SNIFF_SCO_OPEN_IDX -#define BTA_DM_PM_SNIFF_SCO_OPEN_IDX BTA_DM_PM_SNIFF3 +#define BTA_DM_PM_SNIFF_SCO_OPEN_IDX BTA_DM_PM_SNIFF3 #endif #ifndef BTA_DM_PM_SNIFF_HD_ACTIVE_IDX @@ -1081,7 +1129,6 @@ typedef uint8_t tBTA_DM_PM_ACTION; #define BTA_DM_PM_SNIFF_HH_IDLE_IDX BTA_DM_PM_SNIFF2 #endif - #ifndef BTA_DM_PM_HH_OPEN_DELAY #define BTA_DM_PM_HH_OPEN_DELAY 30000 #endif @@ -1101,103 +1148,102 @@ typedef uint8_t tBTA_DM_PM_ACTION; * must insure that order is maintained. */ #ifndef BTA_DM_PM_SNIFF_MAX -#define BTA_DM_PM_SNIFF_MAX 800 -#define BTA_DM_PM_SNIFF_MIN 400 -#define BTA_DM_PM_SNIFF_ATTEMPT 4 -#define BTA_DM_PM_SNIFF_TIMEOUT 1 +#define BTA_DM_PM_SNIFF_MAX 800 +#define BTA_DM_PM_SNIFF_MIN 400 +#define BTA_DM_PM_SNIFF_ATTEMPT 4 +#define BTA_DM_PM_SNIFF_TIMEOUT 1 #endif #ifndef BTA_DM_PM_SNIFF1_MAX -#define BTA_DM_PM_SNIFF1_MAX 400 -#define BTA_DM_PM_SNIFF1_MIN 200 +#define BTA_DM_PM_SNIFF1_MAX 400 +#define BTA_DM_PM_SNIFF1_MIN 200 #define BTA_DM_PM_SNIFF1_ATTEMPT 4 #define BTA_DM_PM_SNIFF1_TIMEOUT 1 #endif #ifndef BTA_DM_PM_SNIFF2_MAX -#define BTA_DM_PM_SNIFF2_MAX 180 -#define BTA_DM_PM_SNIFF2_MIN 150 +#define BTA_DM_PM_SNIFF2_MAX 180 +#define BTA_DM_PM_SNIFF2_MIN 150 #define BTA_DM_PM_SNIFF2_ATTEMPT 4 #define BTA_DM_PM_SNIFF2_TIMEOUT 1 #endif #ifndef BTA_DM_PM_SNIFF3_MAX -#define BTA_DM_PM_SNIFF3_MAX 150 -#define BTA_DM_PM_SNIFF3_MIN 50 +#define BTA_DM_PM_SNIFF3_MAX 150 +#define BTA_DM_PM_SNIFF3_MIN 50 #define BTA_DM_PM_SNIFF3_ATTEMPT 4 #define BTA_DM_PM_SNIFF3_TIMEOUT 1 #endif #ifndef BTA_DM_PM_SNIFF4_MAX -#define BTA_DM_PM_SNIFF4_MAX 54 -#define BTA_DM_PM_SNIFF4_MIN 30 +#define BTA_DM_PM_SNIFF4_MAX 54 +#define BTA_DM_PM_SNIFF4_MIN 30 #define BTA_DM_PM_SNIFF4_ATTEMPT 4 #define BTA_DM_PM_SNIFF4_TIMEOUT 1 #endif #ifndef BTA_DM_PM_SNIFF5_MAX -#define BTA_DM_PM_SNIFF5_MAX 36 -#define BTA_DM_PM_SNIFF5_MIN 30 +#define BTA_DM_PM_SNIFF5_MAX 36 +#define BTA_DM_PM_SNIFF5_MIN 30 #define BTA_DM_PM_SNIFF5_ATTEMPT 2 #define BTA_DM_PM_SNIFF5_TIMEOUT 0 #endif #ifndef BTA_DM_PM_PARK_MAX -#define BTA_DM_PM_PARK_MAX 800 -#define BTA_DM_PM_PARK_MIN 400 -#define BTA_DM_PM_PARK_ATTEMPT 0 -#define BTA_DM_PM_PARK_TIMEOUT 0 +#define BTA_DM_PM_PARK_MAX 800 +#define BTA_DM_PM_PARK_MIN 400 +#define BTA_DM_PM_PARK_ATTEMPT 0 +#define BTA_DM_PM_PARK_TIMEOUT 0 #endif - /* Switch callback events */ -#define BTA_DM_SWITCH_CMPL_EVT 0 /* Completion of the Switch API */ +#define BTA_DM_SWITCH_CMPL_EVT 0 /* Completion of the Switch API */ typedef uint8_t tBTA_DM_SWITCH_EVT; -typedef void (tBTA_DM_SWITCH_CBACK)(tBTA_DM_SWITCH_EVT event, tBTA_STATUS status); +typedef void(tBTA_DM_SWITCH_CBACK)(tBTA_DM_SWITCH_EVT event, + tBTA_STATUS status); /* Audio routing out configuration */ -#define BTA_DM_ROUTE_NONE 0x00 /* No Audio output */ -#define BTA_DM_ROUTE_DAC 0x01 /* routing over analog output */ -#define BTA_DM_ROUTE_I2S 0x02 /* routing over digital (I2S) output */ -#define BTA_DM_ROUTE_BT_MONO 0x04 /* routing over SCO */ -#define BTA_DM_ROUTE_BT_STEREO 0x08 /* routing over BT Stereo */ -#define BTA_DM_ROUTE_HOST 0x10 /* routing over Host */ -#define BTA_DM_ROUTE_FMTX 0x20 /* routing over FMTX */ -#define BTA_DM_ROUTE_FMRX 0x40 /* routing over FMRX */ -#define BTA_DM_ROUTE_BTSNK 0x80 /* routing over BT SNK */ +#define BTA_DM_ROUTE_NONE 0x00 /* No Audio output */ +#define BTA_DM_ROUTE_DAC 0x01 /* routing over analog output */ +#define BTA_DM_ROUTE_I2S 0x02 /* routing over digital (I2S) output */ +#define BTA_DM_ROUTE_BT_MONO 0x04 /* routing over SCO */ +#define BTA_DM_ROUTE_BT_STEREO 0x08 /* routing over BT Stereo */ +#define BTA_DM_ROUTE_HOST 0x10 /* routing over Host */ +#define BTA_DM_ROUTE_FMTX 0x20 /* routing over FMTX */ +#define BTA_DM_ROUTE_FMRX 0x40 /* routing over FMRX */ +#define BTA_DM_ROUTE_BTSNK 0x80 /* routing over BT SNK */ typedef uint8_t tBTA_DM_ROUTE_PATH; - /* Device Identification (DI) data structure */ /* Used to set the DI record */ -typedef tSDP_DI_RECORD tBTA_DI_RECORD; +typedef tSDP_DI_RECORD tBTA_DI_RECORD; /* Used to get the DI record */ -typedef tSDP_DI_GET_RECORD tBTA_DI_GET_RECORD; +typedef tSDP_DI_GET_RECORD tBTA_DI_GET_RECORD; /* SDP discovery database */ -typedef tSDP_DISCOVERY_DB tBTA_DISCOVERY_DB; +typedef tSDP_DISCOVERY_DB tBTA_DISCOVERY_DB; -#ifndef BTA_DI_NUM_MAX -#define BTA_DI_NUM_MAX 3 +#ifndef BTA_DI_NUM_MAX +#define BTA_DI_NUM_MAX 3 #endif /* Device features mask definitions */ -#define BTA_FEATURE_BYTES_PER_PAGE BTM_FEATURE_BYTES_PER_PAGE -#define BTA_EXT_FEATURES_PAGE_MAX BTM_EXT_FEATURES_PAGE_MAX +#define BTA_FEATURE_BYTES_PER_PAGE BTM_FEATURE_BYTES_PER_PAGE +#define BTA_EXT_FEATURES_PAGE_MAX BTM_EXT_FEATURES_PAGE_MAX /* ACL type */ -#define BTA_DM_LINK_TYPE_BR_EDR 0x01 -#define BTA_DM_LINK_TYPE_LE 0x02 -#define BTA_DM_LINK_TYPE_ALL 0xFF +#define BTA_DM_LINK_TYPE_BR_EDR 0x01 +#define BTA_DM_LINK_TYPE_LE 0x02 +#define BTA_DM_LINK_TYPE_ALL 0xFF typedef uint8_t tBTA_DM_LINK_TYPE; -#define IMMEDIATE_DELY_MODE 0x00 -#define ONFOUND_DELY_MODE 0x01 -#define BATCH_DELY_MODE 0x02 -#define ALLOW_ALL_FILTER 0x00 -#define LOWEST_RSSI_VALUE 129 +#define IMMEDIATE_DELY_MODE 0x00 +#define ONFOUND_DELY_MODE 0x01 +#define BATCH_DELY_MODE 0x02 +#define ALLOW_ALL_FILTER 0x00 +#define LOWEST_RSSI_VALUE 129 /***************************************************************************** * External Function Declarations @@ -1218,7 +1264,7 @@ typedef uint8_t tBTA_DM_LINK_TYPE; * BTA_FAIL if internal failure. * ******************************************************************************/ -extern tBTA_STATUS BTA_EnableBluetooth(tBTA_DM_SEC_CBACK *p_cback); +extern tBTA_STATUS BTA_EnableBluetooth(tBTA_DM_SEC_CBACK* p_cback); /******************************************************************************* * @@ -1268,22 +1314,25 @@ extern void BTA_DisableTestMode(void); * Returns void * ******************************************************************************/ -extern void BTA_DmSetDeviceName(char *p_name); +extern void BTA_DmSetDeviceName(char* p_name); /******************************************************************************* * * Function BTA_DmSetVisibility * * Description This function sets the Bluetooth connectable,discoverable, - * pairable and conn paired only modesmodes of the local device. - * This controls whether other Bluetooth devices can find and connect to + * pairable and conn paired only modesmodes of the local + *device. + * This controls whether other Bluetooth devices can find and + *connect to * the local device. * * * Returns void * ******************************************************************************/ -extern void BTA_DmSetVisibility(tBTA_DM_DISC disc_mode, tBTA_DM_CONN conn_mode, uint8_t pairable_mode, uint8_t conn_filter); +extern void BTA_DmSetVisibility(tBTA_DM_DISC disc_mode, tBTA_DM_CONN conn_mode, + uint8_t pairable_mode, uint8_t conn_filter); /******************************************************************************* * @@ -1299,8 +1348,8 @@ extern void BTA_DmSetVisibility(tBTA_DM_DISC disc_mode, tBTA_DM_CONN conn_mode, * Returns void * ******************************************************************************/ -extern void BTA_DmSearch(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK services, - tBTA_DM_SEARCH_CBACK *p_cback); +extern void BTA_DmSearch(tBTA_DM_INQ* p_dm_inq, tBTA_SERVICE_MASK services, + tBTA_DM_SEARCH_CBACK* p_cback); /******************************************************************************* * @@ -1327,7 +1376,7 @@ extern void BTA_DmSearchCancel(void); * ******************************************************************************/ extern void BTA_DmDiscover(BD_ADDR bd_addr, tBTA_SERVICE_MASK services, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search); + tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search); /******************************************************************************* * @@ -1340,8 +1389,8 @@ extern void BTA_DmDiscover(BD_ADDR bd_addr, tBTA_SERVICE_MASK services, * Returns void * ******************************************************************************/ -extern void BTA_DmDiscoverUUID(BD_ADDR bd_addr, tSDP_UUID *uuid, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search); +extern void BTA_DmDiscoverUUID(BD_ADDR bd_addr, tSDP_UUID* uuid, + tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search); /******************************************************************************* * @@ -1353,7 +1402,8 @@ extern void BTA_DmDiscoverUUID(BD_ADDR bd_addr, tSDP_UUID *uuid, * BTA_FAILURE if cached name is not available * ******************************************************************************/ -tBTA_STATUS BTA_DmGetCachedRemoteName(BD_ADDR remote_device, uint8_t **pp_cached_name); +tBTA_STATUS BTA_DmGetCachedRemoteName(BD_ADDR remote_device, + uint8_t** pp_cached_name); /******************************************************************************* * @@ -1374,8 +1424,10 @@ extern void BTA_DmBond(BD_ADDR bd_addr); * Function BTA_DmBondByTransport * * Description This function initiates a bonding procedure with a peer - * device by designated transport. The bonding procedure enables - * authentication and optionally encryption on the Bluetooth link. + * device by designated transport. The bonding procedure + *enables + * authentication and optionally encryption on the Bluetooth + *link. * * * Returns void @@ -1383,7 +1435,6 @@ extern void BTA_DmBond(BD_ADDR bd_addr); ******************************************************************************/ extern void BTA_DmBondByTransport(BD_ADDR bd_addr, tBTA_TRANSPORT transport); - /******************************************************************************* * * Function BTA_DmBondCancel @@ -1411,7 +1462,7 @@ extern void BTA_DmBondCancel(BD_ADDR bd_addr); * ******************************************************************************/ extern void BTA_DmPinReply(BD_ADDR bd_addr, bool accept, uint8_t pin_len, - uint8_t *p_pin); + uint8_t* p_pin); /******************************************************************************* * @@ -1482,7 +1533,7 @@ extern tBTA_STATUS BTA_DmRemoveDevice(BD_ADDR bd_addr); * Returns None * ******************************************************************************/ -extern void BTA_GetEirService( uint8_t *p_eir, tBTA_SERVICE_MASK *p_services ); +extern void BTA_GetEirService(uint8_t* p_eir, tBTA_SERVICE_MASK* p_services); /******************************************************************************* * @@ -1493,8 +1544,7 @@ extern void BTA_GetEirService( uint8_t *p_eir, tBTA_SERVICE_MASK *p_services ); * Returns 0 if the device is NOT connected. * ******************************************************************************/ -extern uint16_t BTA_DmGetConnectionState( const BD_ADDR bd_addr ); - +extern uint16_t BTA_DmGetConnectionState(const BD_ADDR bd_addr); /******************************************************************************* * @@ -1505,15 +1555,16 @@ extern uint16_t BTA_DmGetConnectionState( const BD_ADDR bd_addr ); * Returns BTA_SUCCESS if record set sucessfully, otherwise error code. * ******************************************************************************/ -extern tBTA_STATUS BTA_DmSetLocalDiRecord( tBTA_DI_RECORD *p_device_info, - uint32_t *p_handle ); +extern tBTA_STATUS BTA_DmSetLocalDiRecord(tBTA_DI_RECORD* p_device_info, + uint32_t* p_handle); /******************************************************************************* * * * Function BTA_DmCloseACL * - * Description This function force to close an ACL connection and remove the + * Description This function force to close an ACL connection and remove + the * device from the security database list of known devices. * * Parameters: bd_addr - Address of the peer device @@ -1524,20 +1575,23 @@ extern tBTA_STATUS BTA_DmSetLocalDiRecord( tBTA_DI_RECORD *p_device_info, * Returns void. * ******************************************************************************/ -extern void BTA_DmCloseACL(BD_ADDR bd_addr, bool remove_dev, tBTA_TRANSPORT transport); +extern void BTA_DmCloseACL(BD_ADDR bd_addr, bool remove_dev, + tBTA_TRANSPORT transport); /******************************************************************************* * * Function bta_dmexecutecallback * - * Description This function will request BTA to execute a call back in the context of BTU task + * Description This function will request BTA to execute a call back in the + *context of BTU task * This API was named in lower case because it is only intended * for the internal customers(like BTIF). * * Returns void * ******************************************************************************/ -extern void bta_dmexecutecallback (tBTA_DM_EXEC_CBACK* p_callback, void * p_param); +extern void bta_dmexecutecallback(tBTA_DM_EXEC_CBACK* p_callback, + void* p_param); #if (BTM_SCO_HCI_INCLUDED == TRUE) /******************************************************************************* @@ -1554,25 +1608,28 @@ extern void bta_dmexecutecallback (tBTA_DM_EXEC_CBACK* p_callback, void * p_para * Returns none * ******************************************************************************/ -extern void BTA_DmPcmInitSamples (uint32_t src_sps, uint32_t bits, uint32_t n_channels); +extern void BTA_DmPcmInitSamples(uint32_t src_sps, uint32_t bits, + uint32_t n_channels); /************************************************************************************** * Function BTA_DmPcmResample * - * Description Down sampling utility to convert higher sampling rate into 8K/16bits + * Description Down sampling utility to convert higher sampling rate into + *8K/16bits * PCM samples. * * Parameters p_src: pointer to the buffer where the original sampling PCM * are stored. * in_bytes: Length of the input PCM sample buffer in byte. - * p_dst: pointer to the buffer which is to be used to store + * p_dst: pointer to the buffer which is to be used to + *store * the converted PCM samples. * * * Returns int32_t: number of samples converted. * *************************************************************************************/ -extern int32_t BTA_DmPcmResample (void *p_src, uint32_t in_bytes, void *p_dst); +extern int32_t BTA_DmPcmResample(void* p_src, uint32_t in_bytes, void* p_dst); #endif #if (BLE_INCLUDED == TRUE) @@ -1591,8 +1648,6 @@ extern int32_t BTA_DmPcmResample (void *p_src, uint32_t in_bytes, void *p_dst); ******************************************************************************/ extern void BTA_DmBleSecurityGrant(BD_ADDR bd_addr, tBTA_DM_BLE_SEC_GRANT res); - - /******************************************************************************* * * Function BTA_DmBleSetBgConnType @@ -1600,14 +1655,17 @@ extern void BTA_DmBleSecurityGrant(BD_ADDR bd_addr, tBTA_DM_BLE_SEC_GRANT res); * Description This function is called to set BLE connectable mode for a * peripheral device. * - * Parameters bg_conn_type: it can be auto connection, or selective connection. - * p_select_cback: callback function when selective connection procedure + * Parameters bg_conn_type: it can be auto connection, or selective + *connection. + * p_select_cback: callback function when selective connection + *procedure * is being used. * * Returns void * ******************************************************************************/ -extern void BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type, tBTA_DM_BLE_SEL_CBACK *p_select_cback); +extern void BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type, + tBTA_DM_BLE_SEL_CBACK* p_select_cback); /******************************************************************************* * @@ -1623,7 +1681,8 @@ extern void BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type, tBTA_DM_B * Returns void * ******************************************************************************/ -extern void BTA_DmBlePasskeyReply(BD_ADDR bd_addr, bool accept, uint32_t passkey); +extern void BTA_DmBlePasskeyReply(BD_ADDR bd_addr, bool accept, + uint32_t passkey); /******************************************************************************* * @@ -1632,7 +1691,8 @@ extern void BTA_DmBlePasskeyReply(BD_ADDR bd_addr, bool accept, uint32_t passkey * Description Send BLE SMP SC user confirmation reply. * * Parameters: bd_addr - BD address of the peer - * accept - numbers to compare are the same or different. + * accept - numbers to compare are the same or + *different. * * Returns void * @@ -1657,7 +1717,6 @@ extern void BTA_DmBleConfirmReply(BD_ADDR bd_addr, bool accept); extern void BTA_DmAddBleDevice(BD_ADDR bd_addr, tBLE_ADDR_TYPE addr_type, tBT_DEVICE_TYPE dev_type); - /******************************************************************************* * * Function BTA_DmAddBleKey @@ -1673,9 +1732,8 @@ extern void BTA_DmAddBleDevice(BD_ADDR bd_addr, tBLE_ADDR_TYPE addr_type, * Returns void * ******************************************************************************/ -extern void BTA_DmAddBleKey (BD_ADDR bd_addr, - tBTA_LE_KEY_VALUE *p_le_key, - tBTA_LE_KEY_TYPE key_type); +extern void BTA_DmAddBleKey(BD_ADDR bd_addr, tBTA_LE_KEY_VALUE* p_le_key, + tBTA_LE_KEY_TYPE key_type); /******************************************************************************* * @@ -1695,8 +1753,10 @@ extern void BTA_DmAddBleKey (BD_ADDR bd_addr, * ******************************************************************************/ extern void BTA_DmSetBlePrefConnParams(const BD_ADDR bd_addr, - uint16_t min_conn_int, uint16_t max_conn_int, - uint16_t slave_latency, uint16_t supervision_tout ); + uint16_t min_conn_int, + uint16_t max_conn_int, + uint16_t slave_latency, + uint16_t supervision_tout); /******************************************************************************* * @@ -1724,21 +1784,25 @@ extern void BTA_DmSetBleConnScanParams(uint32_t scan_interval, * scan_interval - scan interval * scan_window - scan window * scan_mode - scan mode - * scan_param_setup_status_cback - Set scan param status callback + * scan_param_setup_status_cback - Set scan param status + *callback * * Returns void * ******************************************************************************/ -extern void BTA_DmSetBleScanParams(tGATT_IF client_if, uint32_t scan_interval, - uint32_t scan_window, tBLE_SCAN_MODE scan_mode, - tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_status_cback); +extern void BTA_DmSetBleScanParams( + tGATT_IF client_if, uint32_t scan_interval, uint32_t scan_window, + tBLE_SCAN_MODE scan_mode, + tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_status_cback); /******************************************************************************* * * Function BTA_DmSetBleAdvParams * - * Description This function sets the advertising parameters BLE functionality. - * It is to be called when device act in peripheral or broadcaster + * Description This function sets the advertising parameters BLE + *functionality. + * It is to be called when device act in peripheral or + *broadcaster * role. * * Parameters: adv_int_min - adv interval minimum @@ -1748,19 +1812,22 @@ extern void BTA_DmSetBleScanParams(tGATT_IF client_if, uint32_t scan_interval, * Returns void * ******************************************************************************/ -extern void BTA_DmSetBleAdvParams (uint16_t adv_int_min, uint16_t adv_int_max, - tBLE_BD_ADDR *p_dir_bda); +extern void BTA_DmSetBleAdvParams(uint16_t adv_int_min, uint16_t adv_int_max, + tBLE_BD_ADDR* p_dir_bda); /******************************************************************************* * * Function BTA_DmSearchExt * - * Description This function searches for peer Bluetooth devices. It performs + * Description This function searches for peer Bluetooth devices. It + *performs * an inquiry and gets the remote name for devices. Service * discovery is done if services is non zero * * Parameters p_dm_inq: inquiry conditions - * services: if service is not empty, service discovery will be done. - * for all GATT based service condition, put num_uuid, and + * services: if service is not empty, service discovery will be + *done. + * for all GATT based service condition, put + *num_uuid, and * p_uuid is the pointer to the list of UUID values. * p_cback: callback functino when search is completed. * @@ -1769,8 +1836,9 @@ extern void BTA_DmSetBleAdvParams (uint16_t adv_int_min, uint16_t adv_int_max, * Returns void * ******************************************************************************/ -extern void BTA_DmSearchExt(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK_EXT *p_services, - tBTA_DM_SEARCH_CBACK *p_cback); +extern void BTA_DmSearchExt(tBTA_DM_INQ* p_dm_inq, + tBTA_SERVICE_MASK_EXT* p_services, + tBTA_DM_SEARCH_CBACK* p_cback); /******************************************************************************* * @@ -1787,8 +1855,9 @@ extern void BTA_DmSearchExt(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK_EXT *p_serv * Returns void * ******************************************************************************/ -extern void BTA_DmDiscoverExt(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search); +extern void BTA_DmDiscoverExt(BD_ADDR bd_addr, + tBTA_SERVICE_MASK_EXT* p_services, + tBTA_DM_SEARCH_CBACK* p_cback, bool sdp_search); /******************************************************************************* * @@ -1806,8 +1875,10 @@ extern void BTA_DmDiscoverExt(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services * Returns void * ******************************************************************************/ -extern void BTA_DmDiscoverByTransport(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services, - tBTA_DM_SEARCH_CBACK *p_cback, bool sdp_search, +extern void BTA_DmDiscoverByTransport(BD_ADDR bd_addr, + tBTA_SERVICE_MASK_EXT* p_services, + tBTA_DM_SEARCH_CBACK* p_cback, + bool sdp_search, tBTA_TRANSPORT transport); /******************************************************************************* @@ -1824,9 +1895,11 @@ extern void BTA_DmDiscoverByTransport(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_ * p_callback - Pointer to callback function to indicat the * link encryption status * sec_act - This is the security action to indicate - * what knid of BLE security level is required for + * what knid of BLE security level is required + *for * the BLE link if the BLE is supported - * Note: This parameter is ignored for the BR/EDR link + * Note: This parameter is ignored for the + *BR/EDR link * or the BLE is not supported * * Returns void @@ -1834,10 +1907,9 @@ extern void BTA_DmDiscoverByTransport(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_ * ******************************************************************************/ extern void BTA_DmSetEncryption(BD_ADDR bd_addr, tBTA_TRANSPORT transport, - tBTA_DM_ENCRYPT_CBACK *p_callback, + tBTA_DM_ENCRYPT_CBACK* p_callback, tBTA_DM_BLE_SEC_ACT sec_act); - /******************************************************************************* * * Function BTA_DmBleObserve @@ -1846,15 +1918,15 @@ extern void BTA_DmSetEncryption(BD_ADDR bd_addr, tBTA_TRANSPORT transport, * events from a broadcast device. * * Parameters start: start or stop observe. - * duration : Duration of the scan. Continuous scan if 0 is passed + * duration : Duration of the scan. Continuous scan if 0 is + *passed * p_results_cb: Callback to be called with scan results * * Returns void * ******************************************************************************/ extern void BTA_DmBleObserve(bool start, uint8_t duration, - tBTA_DM_SEARCH_CBACK *p_results_cb); - + tBTA_DM_SEARCH_CBACK* p_results_cb); #endif @@ -1890,19 +1962,23 @@ extern void BTA_DmBleEnableRemotePrivacy(BD_ADDR bd_addr, bool privacy_enable); * * Function BTA_DmBleUpdateConnectionParams * - * Description Update connection parameters, can only be used when connection is up. + * Description Update connection parameters, can only be used when + *connection is up. * * Parameters: bd_addr - BD address of the peer - * min_int - minimum connection interval, [0x0004~ 0x4000] - * max_int - maximum connection interval, [0x0004~ 0x4000] + * min_int - minimum connection interval, [0x0004~ + *0x4000] + * max_int - maximum connection interval, [0x0004~ + *0x4000] * latency - slave latency [0 ~ 500] * timeout - supervision timeout [0x000a ~ 0xc80] * * Returns void * ******************************************************************************/ -extern void BTA_DmBleUpdateConnectionParams(const BD_ADDR bd_addr, uint16_t min_int, - uint16_t max_int, uint16_t latency, uint16_t timeout); +extern void BTA_DmBleUpdateConnectionParams(const BD_ADDR bd_addr, + uint16_t min_int, uint16_t max_int, + uint16_t latency, uint16_t timeout); /******************************************************************************* * @@ -1913,7 +1989,8 @@ extern void BTA_DmBleUpdateConnectionParams(const BD_ADDR bd_addr, uint16_t min_ * Returns void * ******************************************************************************/ -extern void BTA_DmBleSetDataLength(BD_ADDR remote_device, uint16_t tx_data_length); +extern void BTA_DmBleSetDataLength(BD_ADDR remote_device, + uint16_t tx_data_length); /******************************************************************************* * @@ -1921,10 +1998,14 @@ extern void BTA_DmBleSetDataLength(BD_ADDR remote_device, uint16_t tx_data_lengt * * Description This function is called to set the storage parameters * - * Parameters batch_scan_full_max -Max storage space (in %) allocated to full scanning - * batch_scan_trunc_max -Max storage space (in %) allocated to truncated scanning - * batch_scan_notify_threshold - Setup notification level based on total space - * consumed by both pools. Setting it to 0 will disable threshold notification + * Parameters batch_scan_full_max -Max storage space (in %) allocated to + *full scanning + * batch_scan_trunc_max -Max storage space (in %) allocated to + *truncated scanning + * batch_scan_notify_threshold - Setup notification level based + *on total space + * consumed by both pools. Setting it to 0 will disable + *threshold notification * p_setup_cback - Setup callback * p_thres_cback - Threshold callback * p_rep_cback - Reports callback @@ -1933,13 +2014,12 @@ extern void BTA_DmBleSetDataLength(BD_ADDR remote_device, uint16_t tx_data_lengt * Returns None * ******************************************************************************/ -extern void BTA_DmBleSetStorageParams(uint8_t batch_scan_full_max, - uint8_t batch_scan_trunc_max, - uint8_t batch_scan_notify_threshold, - tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback, - tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback, - tBTA_BLE_SCAN_REP_CBACK* p_rep_cback, - tBTA_DM_BLE_REF_VALUE ref_value); +extern void BTA_DmBleSetStorageParams( + uint8_t batch_scan_full_max, uint8_t batch_scan_trunc_max, + uint8_t batch_scan_notify_threshold, + tBTA_BLE_SCAN_SETUP_CBACK* p_setup_cback, + tBTA_BLE_SCAN_THRESHOLD_CBACK* p_thres_cback, + tBTA_BLE_SCAN_REP_CBACK* p_rep_cback, tBTA_DM_BLE_REF_VALUE ref_value); /******************************************************************************* * @@ -1958,10 +2038,11 @@ extern void BTA_DmBleSetStorageParams(uint8_t batch_scan_full_max, * ******************************************************************************/ extern void BTA_DmBleEnableBatchScan(tBTA_BLE_BATCH_SCAN_MODE scan_mode, - uint32_t scan_interval, uint32_t scan_window, - tBTA_BLE_DISCARD_RULE discard_rule, - tBLE_ADDR_TYPE addr_type, - tBTA_DM_BLE_REF_VALUE ref_value); + uint32_t scan_interval, + uint32_t scan_window, + tBTA_BLE_DISCARD_RULE discard_rule, + tBLE_ADDR_TYPE addr_type, + tBTA_DM_BLE_REF_VALUE ref_value); /******************************************************************************* * @@ -1976,7 +2057,7 @@ extern void BTA_DmBleEnableBatchScan(tBTA_BLE_BATCH_SCAN_MODE scan_mode, * ******************************************************************************/ extern void BTA_DmBleReadScanReports(tBTA_BLE_BATCH_SCAN_MODE scan_type, - tBTA_DM_BLE_REF_VALUE ref_value); + tBTA_DM_BLE_REF_VALUE ref_value); /******************************************************************************* * @@ -1995,7 +2076,8 @@ extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value); * * Function BTA_DmEnableScanFilter * - * Description This function is called to enable the adv data payload filter + * Description This function is called to enable the adv data payload + *filter * * Parameters action - enable or disable the APCF feature * p_cmpl_cback - Command completed callback @@ -2005,8 +2087,8 @@ extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value); * ******************************************************************************/ extern void BTA_DmEnableScanFilter(uint8_t action, - tBTA_DM_BLE_PF_STATUS_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value); + tBTA_DM_BLE_PF_STATUS_CBACK* p_cmpl_cback, + tBTA_DM_BLE_REF_VALUE ref_value); /******************************************************************************* * @@ -2014,7 +2096,8 @@ extern void BTA_DmEnableScanFilter(uint8_t action, * * Description This function is called to setup the filter params * - * Parameters p_target: enable the filter condition on a target device; if NULL + * Parameters p_target: enable the filter condition on a target device; if + *NULL * filt_index - Filter index * p_filt_params -Filter parameters * ref_value - Reference value @@ -2025,17 +2108,18 @@ extern void BTA_DmEnableScanFilter(uint8_t action, * ******************************************************************************/ extern void BTA_DmBleScanFilterSetup(uint8_t action, - tBTA_DM_BLE_PF_FILT_INDEX filt_index, - tBTA_DM_BLE_PF_FILT_PARAMS *p_filt_params, - tBLE_BD_ADDR *p_target, - tBTA_DM_BLE_PF_PARAM_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value); + tBTA_DM_BLE_PF_FILT_INDEX filt_index, + tBTA_DM_BLE_PF_FILT_PARAMS* p_filt_params, + tBLE_BD_ADDR* p_target, + tBTA_DM_BLE_PF_PARAM_CBACK* p_cmpl_cback, + tBTA_DM_BLE_REF_VALUE ref_value); /******************************************************************************* * * Function BTA_DmBleCfgFilterCondition * - * Description This function is called to configure the adv data payload filter + * Description This function is called to configure the adv data payload + *filter * condition. * * Parameters action: to read/write/clear @@ -2049,12 +2133,11 @@ extern void BTA_DmBleScanFilterSetup(uint8_t action, * ******************************************************************************/ extern void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action, - tBTA_DM_BLE_PF_COND_TYPE cond_type, - tBTA_DM_BLE_PF_FILT_INDEX filt_index, - tBTA_DM_BLE_PF_COND_PARAM *p_cond, - tBTA_DM_BLE_PF_CFG_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value); - + tBTA_DM_BLE_PF_COND_TYPE cond_type, + tBTA_DM_BLE_PF_FILT_INDEX filt_index, + tBTA_DM_BLE_PF_COND_PARAM* p_cond, + tBTA_DM_BLE_PF_CFG_CBACK* p_cmpl_cback, + tBTA_DM_BLE_REF_VALUE ref_value); /******************************************************************************* * @@ -2068,8 +2151,9 @@ extern void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action, * Returns None * ******************************************************************************/ -extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, - tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback); +extern void BTA_DmBleTrackAdvertiser( + tBTA_DM_BLE_REF_VALUE ref_value, + tBTA_BLE_TRACK_ADV_CBACK* p_track_adv_cback); /******************************************************************************* * @@ -2082,29 +2166,31 @@ extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, * Returns void * ******************************************************************************/ -extern void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback); +extern void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK* p_cmpl_cback); /******************************************************************************* * * Function BTA_BrcmInit * - * Description This function initializes Broadcom specific VS handler in BTA + * Description This function initializes Broadcom specific VS handler in + *BTA * * Returns void * ******************************************************************************/ -extern void BTA_VendorInit (void); +extern void BTA_VendorInit(void); /******************************************************************************* * * Function BTA_BrcmCleanup * - * Description This function frees up Broadcom specific VS specific dynamic memory + * Description This function frees up Broadcom specific VS specific dynamic + *memory * * Returns void * ******************************************************************************/ -extern void BTA_VendorCleanup (void); +extern void BTA_VendorCleanup(void); #endif diff --git a/system/bta/include/bta_ar_api.h b/system/bta/include/bta_ar_api.h index f19e40f1574..46bb3717330 100644 --- a/system/bta/include/bta_ar_api.h +++ b/system/bta/include/bta_ar_api.h @@ -26,12 +26,12 @@ #ifndef BTA_AR_API_H #define BTA_AR_API_H -#include "avdt_api.h" #include "avct_api.h" +#include "avdt_api.h" #include "avrc_api.h" -#include "sdp_api.h" #include "bta_av_api.h" #include "bta_sys.h" +#include "sdp_api.h" #ifdef __cplusplus extern "C" { @@ -41,7 +41,7 @@ extern "C" { * Constants and data types ****************************************************************************/ /* This event signal to AR user that other profile is connected */ -#define BTA_AR_AVDT_CONN_EVT (AVDT_MAX_EVT + 1) +#define BTA_AR_AVDT_CONN_EVT (AVDT_MAX_EVT + 1) /******************************************************************************* * @@ -64,7 +64,8 @@ extern void bta_ar_init(void); * Returns void * ******************************************************************************/ -extern void bta_ar_reg_avdt(tAVDT_REG *p_reg, tAVDT_CTRL_CBACK *p_cback, tBTA_SYS_ID sys_id); +extern void bta_ar_reg_avdt(tAVDT_REG* p_reg, tAVDT_CTRL_CBACK* p_cback, + tBTA_SYS_ID sys_id); /******************************************************************************* * @@ -81,7 +82,8 @@ extern void bta_ar_dereg_avdt(tBTA_SYS_ID sys_id); * * Function bta_ar_avdt_conn * - * Description This function is called to let ar know that some AVDTP profile + * Description This function is called to let ar know that some AVDTP + *profile * is connected for this sys_id. * If the other sys modules started a timer for PENDING_EVT, * the timer can be stopped now. @@ -100,7 +102,8 @@ extern void bta_ar_avdt_conn(tBTA_SYS_ID sys_id, BD_ADDR bd_addr); * Returns void * ******************************************************************************/ -extern void bta_ar_reg_avct(uint16_t mtu, uint16_t mtu_br, uint8_t sec_mask, tBTA_SYS_ID sys_id); +extern void bta_ar_reg_avct(uint16_t mtu, uint16_t mtu_br, uint8_t sec_mask, + tBTA_SYS_ID sys_id); /******************************************************************************* * @@ -122,8 +125,8 @@ extern void bta_ar_dereg_avct(tBTA_SYS_ID sys_id); * Returns void * *****************************************************************************/ -extern void bta_ar_reg_avrc(uint16_t service_uuid, const char *p_service_name, - const char *p_provider_name, uint16_t categories, +extern void bta_ar_reg_avrc(uint16_t service_uuid, const char* p_service_name, + const char* p_provider_name, uint16_t categories, tBTA_SYS_ID sys_id, bool browse_supported, uint16_t profile_version); @@ -131,14 +134,14 @@ extern void bta_ar_reg_avrc(uint16_t service_uuid, const char *p_service_name, * * Function bta_ar_dereg_avrc * - * Description This function is called to de-register/delete an SDP record for AVRCP. + * Description This function is called to de-register/delete an SDP record + *for AVRCP. * * Returns void * *****************************************************************************/ extern void bta_ar_dereg_avrc(uint16_t service_uuid, tBTA_SYS_ID sys_id); - #ifdef __cplusplus } #endif diff --git a/system/bta/include/bta_av_api.h b/system/bta/include/bta_av_api.h index a3df4c329f4..af38ac2502a 100644 --- a/system/bta/include/bta_av_api.h +++ b/system/bta/include/bta_av_api.h @@ -26,9 +26,9 @@ #ifndef BTA_AV_API_H #define BTA_AV_API_H -#include "avrc_api.h" -#include "avdt_api.h" #include "a2dp_api.h" +#include "avdt_api.h" +#include "avrc_api.h" #include "bta_api.h" #ifdef __cplusplus @@ -38,462 +38,455 @@ extern "C" { /***************************************************************************** * Constants and data types ****************************************************************************/ -/* Set to TRUE if seperate authorization prompt desired for AVCTP besides A2DP authorization */ +/* Set to TRUE if seperate authorization prompt desired for AVCTP besides A2DP + * authorization */ /* Typically FALSE when AVRCP is used in conjunction with A2DP */ #ifndef BTA_AV_WITH_AVCTP_AUTHORIZATION #define BTA_AV_WITH_AVCTP_AUTHORIZATION FALSE #endif /* AV status values */ -#define BTA_AV_SUCCESS 0 /* successful operation */ -#define BTA_AV_FAIL 1 /* generic failure */ -#define BTA_AV_FAIL_SDP 2 /* service not found */ -#define BTA_AV_FAIL_STREAM 3 /* stream connection failed */ -#define BTA_AV_FAIL_RESOURCES 4 /* no resources */ -#define BTA_AV_FAIL_ROLE 5 /* failed due to role management related issues */ -#define BTA_AV_FAIL_GET_CAP 6 /* get capability failed due to no SEP availale on the peer */ +#define BTA_AV_SUCCESS 0 /* successful operation */ +#define BTA_AV_FAIL 1 /* generic failure */ +#define BTA_AV_FAIL_SDP 2 /* service not found */ +#define BTA_AV_FAIL_STREAM 3 /* stream connection failed */ +#define BTA_AV_FAIL_RESOURCES 4 /* no resources */ +#define BTA_AV_FAIL_ROLE 5 /* failed due to role management related issues */ +#define BTA_AV_FAIL_GET_CAP \ + 6 /* get capability failed due to no SEP availale on the peer */ typedef uint8_t tBTA_AV_STATUS; /* AV features masks */ -#define BTA_AV_FEAT_RCTG 0x0001 /* remote control target */ -#define BTA_AV_FEAT_RCCT 0x0002 /* remote control controller */ -#define BTA_AV_FEAT_PROTECT 0x0004 /* streaming media contect protection */ -#define BTA_AV_FEAT_VENDOR 0x0008 /* remote control vendor dependent commands */ -#define BTA_AV_FEAT_REPORT 0x0020 /* use reporting service for VDP */ -#define BTA_AV_FEAT_METADATA 0x0040 /* remote control Metadata Transfer command/response */ -#define BTA_AV_FEAT_MULTI_AV 0x0080 /* use multi-av, if controller supports it */ -#define BTA_AV_FEAT_BROWSE 0x0010 /* use browsing channel */ -#define BTA_AV_FEAT_MASTER 0x0100 /* stream only as master role */ -#define BTA_AV_FEAT_ADV_CTRL 0x0200 /* remote control Advanced Control command/response */ -#define BTA_AV_FEAT_DELAY_RPT 0x0400 /* allow delay reporting */ -#define BTA_AV_FEAT_ACP_START 0x0800 /* start stream when 2nd SNK was accepted */ -#define BTA_AV_FEAT_APP_SETTING 0x2000 /* Player app setting support */ +#define BTA_AV_FEAT_RCTG 0x0001 /* remote control target */ +#define BTA_AV_FEAT_RCCT 0x0002 /* remote control controller */ +#define BTA_AV_FEAT_PROTECT 0x0004 /* streaming media contect protection */ +#define BTA_AV_FEAT_VENDOR \ + 0x0008 /* remote control vendor dependent commands \ + */ +#define BTA_AV_FEAT_REPORT 0x0020 /* use reporting service for VDP */ +#define BTA_AV_FEAT_METADATA \ + 0x0040 /* remote control Metadata Transfer command/response */ +#define BTA_AV_FEAT_MULTI_AV \ + 0x0080 /* use multi-av, if controller supports it */ +#define BTA_AV_FEAT_BROWSE 0x0010 /* use browsing channel */ +#define BTA_AV_FEAT_MASTER 0x0100 /* stream only as master role */ +#define BTA_AV_FEAT_ADV_CTRL \ + 0x0200 /* remote control Advanced Control command/response */ +#define BTA_AV_FEAT_DELAY_RPT 0x0400 /* allow delay reporting */ +#define BTA_AV_FEAT_ACP_START \ + 0x0800 /* start stream when 2nd SNK was accepted */ +#define BTA_AV_FEAT_APP_SETTING 0x2000 /* Player app setting support */ /* Internal features */ -#define BTA_AV_FEAT_NO_SCO_SSPD 0x8000 /* Do not suspend av streaming as to AG events(SCO or Call) */ +#define BTA_AV_FEAT_NO_SCO_SSPD \ + 0x8000 /* Do not suspend av streaming as to AG events(SCO or Call) */ typedef uint16_t tBTA_AV_FEAT; /* AV channel values */ -#define BTA_AV_CHNL_MSK 0xC0 -#define BTA_AV_CHNL_AUDIO 0x40 /* audio channel */ -#define BTA_AV_CHNL_VIDEO 0x80 /* video channel */ +#define BTA_AV_CHNL_MSK 0xC0 +#define BTA_AV_CHNL_AUDIO 0x40 /* audio channel */ +#define BTA_AV_CHNL_VIDEO 0x80 /* video channel */ typedef uint8_t tBTA_AV_CHNL; - -#define BTA_AV_HNDL_MSK 0x3F +#define BTA_AV_HNDL_MSK 0x3F typedef uint8_t tBTA_AV_HNDL; /* handle index to mask */ -#define BTA_AV_HNDL_TO_MSK(h) ((uint8_t)(1 << (h))) +#define BTA_AV_HNDL_TO_MSK(h) ((uint8_t)(1 << (h))) /* maximum number of streams created: 1 for audio, 1 for video */ #ifndef BTA_AV_NUM_STRS -#define BTA_AV_NUM_STRS 2 +#define BTA_AV_NUM_STRS 2 #endif #ifndef BTA_AV_MAX_A2DP_MTU - /*#define BTA_AV_MAX_A2DP_MTU 668 //224 (DM5) * 3 - 4(L2CAP header) */ -#define BTA_AV_MAX_A2DP_MTU 1008 +/*#define BTA_AV_MAX_A2DP_MTU 668 //224 (DM5) * 3 - 4(L2CAP header) */ +#define BTA_AV_MAX_A2DP_MTU 1008 #endif #ifndef BTA_AV_MAX_VDP_MTU -#define BTA_AV_MAX_VDP_MTU 1008 +#define BTA_AV_MAX_VDP_MTU 1008 #endif /* operation id list for BTA_AvRemoteCmd */ -#define BTA_AV_RC_SELECT AVRC_ID_SELECT /* select */ -#define BTA_AV_RC_UP AVRC_ID_UP /* up */ -#define BTA_AV_RC_DOWN AVRC_ID_DOWN /* down */ -#define BTA_AV_RC_LEFT AVRC_ID_LEFT /* left */ -#define BTA_AV_RC_RIGHT AVRC_ID_RIGHT /* right */ -#define BTA_AV_RC_RIGHT_UP AVRC_ID_RIGHT_UP /* right-up */ -#define BTA_AV_RC_RIGHT_DOWN AVRC_ID_RIGHT_DOWN /* right-down */ -#define BTA_AV_RC_LEFT_UP AVRC_ID_LEFT_UP /* left-up */ -#define BTA_AV_RC_LEFT_DOWN AVRC_ID_LEFT_DOWN /* left-down */ -#define BTA_AV_RC_ROOT_MENU AVRC_ID_ROOT_MENU /* root menu */ -#define BTA_AV_RC_SETUP_MENU AVRC_ID_SETUP_MENU /* setup menu */ -#define BTA_AV_RC_CONT_MENU AVRC_ID_CONT_MENU /* contents menu */ -#define BTA_AV_RC_FAV_MENU AVRC_ID_FAV_MENU /* favorite menu */ -#define BTA_AV_RC_EXIT AVRC_ID_EXIT /* exit */ -#define BTA_AV_RC_0 AVRC_ID_0 /* 0 */ -#define BTA_AV_RC_1 AVRC_ID_1 /* 1 */ -#define BTA_AV_RC_2 AVRC_ID_2 /* 2 */ -#define BTA_AV_RC_3 AVRC_ID_3 /* 3 */ -#define BTA_AV_RC_4 AVRC_ID_4 /* 4 */ -#define BTA_AV_RC_5 AVRC_ID_5 /* 5 */ -#define BTA_AV_RC_6 AVRC_ID_6 /* 6 */ -#define BTA_AV_RC_7 AVRC_ID_7 /* 7 */ -#define BTA_AV_RC_8 AVRC_ID_8 /* 8 */ -#define BTA_AV_RC_9 AVRC_ID_9 /* 9 */ -#define BTA_AV_RC_DOT AVRC_ID_DOT /* dot */ -#define BTA_AV_RC_ENTER AVRC_ID_ENTER /* enter */ -#define BTA_AV_RC_CLEAR AVRC_ID_CLEAR /* clear */ -#define BTA_AV_RC_CHAN_UP AVRC_ID_CHAN_UP /* channel up */ -#define BTA_AV_RC_CHAN_DOWN AVRC_ID_CHAN_DOWN /* channel down */ -#define BTA_AV_RC_PREV_CHAN AVRC_ID_PREV_CHAN /* previous channel */ -#define BTA_AV_RC_SOUND_SEL AVRC_ID_SOUND_SEL /* sound select */ -#define BTA_AV_RC_INPUT_SEL AVRC_ID_INPUT_SEL /* input select */ -#define BTA_AV_RC_DISP_INFO AVRC_ID_DISP_INFO /* display information */ -#define BTA_AV_RC_HELP AVRC_ID_HELP /* help */ -#define BTA_AV_RC_PAGE_UP AVRC_ID_PAGE_UP /* page up */ -#define BTA_AV_RC_PAGE_DOWN AVRC_ID_PAGE_DOWN /* page down */ -#define BTA_AV_RC_POWER AVRC_ID_POWER /* power */ -#define BTA_AV_RC_VOL_UP AVRC_ID_VOL_UP /* volume up */ -#define BTA_AV_RC_VOL_DOWN AVRC_ID_VOL_DOWN /* volume down */ -#define BTA_AV_RC_MUTE AVRC_ID_MUTE /* mute */ -#define BTA_AV_RC_PLAY AVRC_ID_PLAY /* play */ -#define BTA_AV_RC_STOP AVRC_ID_STOP /* stop */ -#define BTA_AV_RC_PAUSE AVRC_ID_PAUSE /* pause */ -#define BTA_AV_RC_RECORD AVRC_ID_RECORD /* record */ -#define BTA_AV_RC_REWIND AVRC_ID_REWIND /* rewind */ -#define BTA_AV_RC_FAST_FOR AVRC_ID_FAST_FOR /* fast forward */ -#define BTA_AV_RC_EJECT AVRC_ID_EJECT /* eject */ -#define BTA_AV_RC_FORWARD AVRC_ID_FORWARD /* forward */ -#define BTA_AV_RC_BACKWARD AVRC_ID_BACKWARD /* backward */ -#define BTA_AV_RC_ANGLE AVRC_ID_ANGLE /* angle */ -#define BTA_AV_RC_SUBPICT AVRC_ID_SUBPICT /* subpicture */ -#define BTA_AV_RC_F1 AVRC_ID_F1 /* F1 */ -#define BTA_AV_RC_F2 AVRC_ID_F2 /* F2 */ -#define BTA_AV_RC_F3 AVRC_ID_F3 /* F3 */ -#define BTA_AV_RC_F4 AVRC_ID_F4 /* F4 */ -#define BTA_AV_RC_F5 AVRC_ID_F5 /* F5 */ -#define BTA_AV_VENDOR AVRC_ID_VENDOR /* vendor unique */ +#define BTA_AV_RC_SELECT AVRC_ID_SELECT /* select */ +#define BTA_AV_RC_UP AVRC_ID_UP /* up */ +#define BTA_AV_RC_DOWN AVRC_ID_DOWN /* down */ +#define BTA_AV_RC_LEFT AVRC_ID_LEFT /* left */ +#define BTA_AV_RC_RIGHT AVRC_ID_RIGHT /* right */ +#define BTA_AV_RC_RIGHT_UP AVRC_ID_RIGHT_UP /* right-up */ +#define BTA_AV_RC_RIGHT_DOWN AVRC_ID_RIGHT_DOWN /* right-down */ +#define BTA_AV_RC_LEFT_UP AVRC_ID_LEFT_UP /* left-up */ +#define BTA_AV_RC_LEFT_DOWN AVRC_ID_LEFT_DOWN /* left-down */ +#define BTA_AV_RC_ROOT_MENU AVRC_ID_ROOT_MENU /* root menu */ +#define BTA_AV_RC_SETUP_MENU AVRC_ID_SETUP_MENU /* setup menu */ +#define BTA_AV_RC_CONT_MENU AVRC_ID_CONT_MENU /* contents menu */ +#define BTA_AV_RC_FAV_MENU AVRC_ID_FAV_MENU /* favorite menu */ +#define BTA_AV_RC_EXIT AVRC_ID_EXIT /* exit */ +#define BTA_AV_RC_0 AVRC_ID_0 /* 0 */ +#define BTA_AV_RC_1 AVRC_ID_1 /* 1 */ +#define BTA_AV_RC_2 AVRC_ID_2 /* 2 */ +#define BTA_AV_RC_3 AVRC_ID_3 /* 3 */ +#define BTA_AV_RC_4 AVRC_ID_4 /* 4 */ +#define BTA_AV_RC_5 AVRC_ID_5 /* 5 */ +#define BTA_AV_RC_6 AVRC_ID_6 /* 6 */ +#define BTA_AV_RC_7 AVRC_ID_7 /* 7 */ +#define BTA_AV_RC_8 AVRC_ID_8 /* 8 */ +#define BTA_AV_RC_9 AVRC_ID_9 /* 9 */ +#define BTA_AV_RC_DOT AVRC_ID_DOT /* dot */ +#define BTA_AV_RC_ENTER AVRC_ID_ENTER /* enter */ +#define BTA_AV_RC_CLEAR AVRC_ID_CLEAR /* clear */ +#define BTA_AV_RC_CHAN_UP AVRC_ID_CHAN_UP /* channel up */ +#define BTA_AV_RC_CHAN_DOWN AVRC_ID_CHAN_DOWN /* channel down */ +#define BTA_AV_RC_PREV_CHAN AVRC_ID_PREV_CHAN /* previous channel */ +#define BTA_AV_RC_SOUND_SEL AVRC_ID_SOUND_SEL /* sound select */ +#define BTA_AV_RC_INPUT_SEL AVRC_ID_INPUT_SEL /* input select */ +#define BTA_AV_RC_DISP_INFO AVRC_ID_DISP_INFO /* display information */ +#define BTA_AV_RC_HELP AVRC_ID_HELP /* help */ +#define BTA_AV_RC_PAGE_UP AVRC_ID_PAGE_UP /* page up */ +#define BTA_AV_RC_PAGE_DOWN AVRC_ID_PAGE_DOWN /* page down */ +#define BTA_AV_RC_POWER AVRC_ID_POWER /* power */ +#define BTA_AV_RC_VOL_UP AVRC_ID_VOL_UP /* volume up */ +#define BTA_AV_RC_VOL_DOWN AVRC_ID_VOL_DOWN /* volume down */ +#define BTA_AV_RC_MUTE AVRC_ID_MUTE /* mute */ +#define BTA_AV_RC_PLAY AVRC_ID_PLAY /* play */ +#define BTA_AV_RC_STOP AVRC_ID_STOP /* stop */ +#define BTA_AV_RC_PAUSE AVRC_ID_PAUSE /* pause */ +#define BTA_AV_RC_RECORD AVRC_ID_RECORD /* record */ +#define BTA_AV_RC_REWIND AVRC_ID_REWIND /* rewind */ +#define BTA_AV_RC_FAST_FOR AVRC_ID_FAST_FOR /* fast forward */ +#define BTA_AV_RC_EJECT AVRC_ID_EJECT /* eject */ +#define BTA_AV_RC_FORWARD AVRC_ID_FORWARD /* forward */ +#define BTA_AV_RC_BACKWARD AVRC_ID_BACKWARD /* backward */ +#define BTA_AV_RC_ANGLE AVRC_ID_ANGLE /* angle */ +#define BTA_AV_RC_SUBPICT AVRC_ID_SUBPICT /* subpicture */ +#define BTA_AV_RC_F1 AVRC_ID_F1 /* F1 */ +#define BTA_AV_RC_F2 AVRC_ID_F2 /* F2 */ +#define BTA_AV_RC_F3 AVRC_ID_F3 /* F3 */ +#define BTA_AV_RC_F4 AVRC_ID_F4 /* F4 */ +#define BTA_AV_RC_F5 AVRC_ID_F5 /* F5 */ +#define BTA_AV_VENDOR AVRC_ID_VENDOR /* vendor unique */ typedef uint8_t tBTA_AV_RC; /* state flag for pass through command */ -#define BTA_AV_STATE_PRESS AVRC_STATE_PRESS /* key pressed */ -#define BTA_AV_STATE_RELEASE AVRC_STATE_RELEASE /* key released */ +#define BTA_AV_STATE_PRESS AVRC_STATE_PRESS /* key pressed */ +#define BTA_AV_STATE_RELEASE AVRC_STATE_RELEASE /* key released */ typedef uint8_t tBTA_AV_STATE; /* command codes for BTA_AvVendorCmd */ -#define BTA_AV_CMD_CTRL AVRC_CMD_CTRL -#define BTA_AV_CMD_STATUS AVRC_CMD_STATUS -#define BTA_AV_CMD_SPEC_INQ AVRC_CMD_SPEC_INQ -#define BTA_AV_CMD_NOTIF AVRC_CMD_NOTIF -#define BTA_AV_CMD_GEN_INQ AVRC_CMD_GEN_INQ +#define BTA_AV_CMD_CTRL AVRC_CMD_CTRL +#define BTA_AV_CMD_STATUS AVRC_CMD_STATUS +#define BTA_AV_CMD_SPEC_INQ AVRC_CMD_SPEC_INQ +#define BTA_AV_CMD_NOTIF AVRC_CMD_NOTIF +#define BTA_AV_CMD_GEN_INQ AVRC_CMD_GEN_INQ typedef uint8_t tBTA_AV_CMD; /* response codes for BTA_AvVendorRsp */ -#define BTA_AV_RSP_NOT_IMPL AVRC_RSP_NOT_IMPL -#define BTA_AV_RSP_ACCEPT AVRC_RSP_ACCEPT -#define BTA_AV_RSP_REJ AVRC_RSP_REJ -#define BTA_AV_RSP_IN_TRANS AVRC_RSP_IN_TRANS -#define BTA_AV_RSP_IMPL_STBL AVRC_RSP_IMPL_STBL -#define BTA_AV_RSP_CHANGED AVRC_RSP_CHANGED -#define BTA_AV_RSP_INTERIM AVRC_RSP_INTERIM +#define BTA_AV_RSP_NOT_IMPL AVRC_RSP_NOT_IMPL +#define BTA_AV_RSP_ACCEPT AVRC_RSP_ACCEPT +#define BTA_AV_RSP_REJ AVRC_RSP_REJ +#define BTA_AV_RSP_IN_TRANS AVRC_RSP_IN_TRANS +#define BTA_AV_RSP_IMPL_STBL AVRC_RSP_IMPL_STBL +#define BTA_AV_RSP_CHANGED AVRC_RSP_CHANGED +#define BTA_AV_RSP_INTERIM AVRC_RSP_INTERIM typedef uint8_t tBTA_AV_CODE; /* error codes for BTA_AvProtectRsp */ -#define BTA_AV_ERR_NONE A2DP_SUCCESS /* Success, no error */ -#define BTA_AV_ERR_BAD_STATE AVDT_ERR_BAD_STATE /* Message cannot be processed in this state */ -#define BTA_AV_ERR_RESOURCE AVDT_ERR_RESOURCE /* Insufficient resources */ -#define BTA_AV_ERR_BAD_CP_TYPE A2DP_BAD_CP_TYPE /* The requested Content Protection Type is not supported */ -#define BTA_AV_ERR_BAD_CP_FORMAT A2DP_BAD_CP_FORMAT /* The format of Content Protection Data is not correct */ +#define BTA_AV_ERR_NONE A2DP_SUCCESS /* Success, no error */ +#define BTA_AV_ERR_BAD_STATE \ + AVDT_ERR_BAD_STATE /* Message cannot be processed in this state */ +#define BTA_AV_ERR_RESOURCE AVDT_ERR_RESOURCE /* Insufficient resources */ +#define BTA_AV_ERR_BAD_CP_TYPE \ + A2DP_BAD_CP_TYPE /* The requested Content Protection Type is not supported \ + */ +#define BTA_AV_ERR_BAD_CP_FORMAT \ + A2DP_BAD_CP_FORMAT /* The format of Content Protection Data is not correct \ + */ typedef uint8_t tBTA_AV_ERR; /* AV callback events */ -#define BTA_AV_ENABLE_EVT 0 /* AV enabled */ -#define BTA_AV_REGISTER_EVT 1 /* registered to AVDT */ -#define BTA_AV_OPEN_EVT 2 /* connection opened */ -#define BTA_AV_CLOSE_EVT 3 /* connection closed */ -#define BTA_AV_START_EVT 4 /* stream data transfer started */ -#define BTA_AV_STOP_EVT 5 /* stream data transfer stopped */ -#define BTA_AV_PROTECT_REQ_EVT 6 /* content protection request */ -#define BTA_AV_PROTECT_RSP_EVT 7 /* content protection response */ -#define BTA_AV_RC_OPEN_EVT 8 /* remote control channel open */ -#define BTA_AV_RC_CLOSE_EVT 9 /* remote control channel closed */ -#define BTA_AV_REMOTE_CMD_EVT 10 /* remote control command */ -#define BTA_AV_REMOTE_RSP_EVT 11 /* remote control response */ -#define BTA_AV_VENDOR_CMD_EVT 12 /* vendor dependent remote control command */ -#define BTA_AV_VENDOR_RSP_EVT 13 /* vendor dependent remote control response */ -#define BTA_AV_RECONFIG_EVT 14 /* reconfigure response */ -#define BTA_AV_SUSPEND_EVT 15 /* suspend response */ -#define BTA_AV_PENDING_EVT 16 /* incoming connection pending: - * signal channel is open and stream is - * not open after - * BTA_AV_SIGNALLING_TIMEOUT_MS */ -#define BTA_AV_META_MSG_EVT 17 /* metadata messages */ -#define BTA_AV_REJECT_EVT 18 /* incoming connection rejected */ -#define BTA_AV_RC_FEAT_EVT 19 /* remote control channel peer supported features update */ -#define BTA_AV_SINK_MEDIA_CFG_EVT 20 /* command to configure codec */ -#define BTA_AV_SINK_MEDIA_DATA_EVT 21 /* sending data to Media Task */ -#define BTA_AV_OFFLOAD_START_RSP_EVT 22 /* a2dp offload start response */ -#define BTA_AV_RC_BROWSE_OPEN_EVT 23 /* remote control channel open */ -#define BTA_AV_RC_BROWSE_CLOSE_EVT 24 /* remote control channel closed */ +#define BTA_AV_ENABLE_EVT 0 /* AV enabled */ +#define BTA_AV_REGISTER_EVT 1 /* registered to AVDT */ +#define BTA_AV_OPEN_EVT 2 /* connection opened */ +#define BTA_AV_CLOSE_EVT 3 /* connection closed */ +#define BTA_AV_START_EVT 4 /* stream data transfer started */ +#define BTA_AV_STOP_EVT 5 /* stream data transfer stopped */ +#define BTA_AV_PROTECT_REQ_EVT 6 /* content protection request */ +#define BTA_AV_PROTECT_RSP_EVT 7 /* content protection response */ +#define BTA_AV_RC_OPEN_EVT 8 /* remote control channel open */ +#define BTA_AV_RC_CLOSE_EVT 9 /* remote control channel closed */ +#define BTA_AV_REMOTE_CMD_EVT 10 /* remote control command */ +#define BTA_AV_REMOTE_RSP_EVT 11 /* remote control response */ +#define BTA_AV_VENDOR_CMD_EVT 12 /* vendor dependent remote control command */ +#define BTA_AV_VENDOR_RSP_EVT \ + 13 /* vendor dependent remote control response \ + */ +#define BTA_AV_RECONFIG_EVT 14 /* reconfigure response */ +#define BTA_AV_SUSPEND_EVT 15 /* suspend response */ +#define BTA_AV_PENDING_EVT \ + 16 /* incoming connection pending: \ + * signal channel is open and stream is \ + * not open after \ + * BTA_AV_SIGNALLING_TIMEOUT_MS */ +#define BTA_AV_META_MSG_EVT 17 /* metadata messages */ +#define BTA_AV_REJECT_EVT 18 /* incoming connection rejected */ +#define BTA_AV_RC_FEAT_EVT \ + 19 /* remote control channel peer supported features update */ +#define BTA_AV_SINK_MEDIA_CFG_EVT 20 /* command to configure codec */ +#define BTA_AV_SINK_MEDIA_DATA_EVT 21 /* sending data to Media Task */ +#define BTA_AV_OFFLOAD_START_RSP_EVT 22 /* a2dp offload start response */ +#define BTA_AV_RC_BROWSE_OPEN_EVT 23 /* remote control channel open */ +#define BTA_AV_RC_BROWSE_CLOSE_EVT 24 /* remote control channel closed */ /* Max BTA event */ -#define BTA_AV_MAX_EVT 25 +#define BTA_AV_MAX_EVT 25 typedef uint8_t tBTA_AV_EVT; /* Event associated with BTA_AV_ENABLE_EVT */ -typedef struct -{ - tBTA_AV_FEAT features; -} tBTA_AV_ENABLE; +typedef struct { tBTA_AV_FEAT features; } tBTA_AV_ENABLE; /* Event associated with BTA_AV_REGISTER_EVT */ -typedef struct -{ - tBTA_AV_CHNL chnl; /* audio/video */ - tBTA_AV_HNDL hndl; /* Handle associated with the stream. */ - uint8_t app_id; /* ID associated with call to BTA_AvRegister() */ - tBTA_AV_STATUS status; +typedef struct { + tBTA_AV_CHNL chnl; /* audio/video */ + tBTA_AV_HNDL hndl; /* Handle associated with the stream. */ + uint8_t app_id; /* ID associated with call to BTA_AvRegister() */ + tBTA_AV_STATUS status; } tBTA_AV_REGISTER; /* data associated with BTA_AV_OPEN_EVT */ -#define BTA_AV_EDR_2MBPS 0x01 -#define BTA_AV_EDR_3MBPS 0x02 +#define BTA_AV_EDR_2MBPS 0x01 +#define BTA_AV_EDR_3MBPS 0x02 typedef uint8_t tBTA_AV_EDR; -typedef struct -{ - tBTA_AV_CHNL chnl; - tBTA_AV_HNDL hndl; - BD_ADDR bd_addr; - tBTA_AV_STATUS status; - bool starting; - tBTA_AV_EDR edr; /* 0, if peer device does not support EDR */ - uint8_t sep; /* sep type of peer device */ +typedef struct { + tBTA_AV_CHNL chnl; + tBTA_AV_HNDL hndl; + BD_ADDR bd_addr; + tBTA_AV_STATUS status; + bool starting; + tBTA_AV_EDR edr; /* 0, if peer device does not support EDR */ + uint8_t sep; /* sep type of peer device */ } tBTA_AV_OPEN; /* data associated with BTA_AV_CLOSE_EVT */ -typedef struct -{ - tBTA_AV_CHNL chnl; - tBTA_AV_HNDL hndl; +typedef struct { + tBTA_AV_CHNL chnl; + tBTA_AV_HNDL hndl; } tBTA_AV_CLOSE; /* data associated with BTA_AV_START_EVT */ -typedef struct -{ - tBTA_AV_CHNL chnl; - tBTA_AV_HNDL hndl; - tBTA_AV_STATUS status; - bool initiator; /* true, if local device initiates the START */ - bool suspending; +typedef struct { + tBTA_AV_CHNL chnl; + tBTA_AV_HNDL hndl; + tBTA_AV_STATUS status; + bool initiator; /* true, if local device initiates the START */ + bool suspending; } tBTA_AV_START; /* data associated with BTA_AV_SUSPEND_EVT */ -typedef struct -{ - tBTA_AV_CHNL chnl; - tBTA_AV_HNDL hndl; - bool initiator; /* true, if local device initiates the SUSPEND */ - tBTA_AV_STATUS status; +typedef struct { + tBTA_AV_CHNL chnl; + tBTA_AV_HNDL hndl; + bool initiator; /* true, if local device initiates the SUSPEND */ + tBTA_AV_STATUS status; } tBTA_AV_SUSPEND; /* data associated with BTA_AV_RECONFIG_EVT */ -typedef struct -{ - tBTA_AV_CHNL chnl; - tBTA_AV_HNDL hndl; - tBTA_AV_STATUS status; +typedef struct { + tBTA_AV_CHNL chnl; + tBTA_AV_HNDL hndl; + tBTA_AV_STATUS status; } tBTA_AV_RECONFIG; /* data associated with BTA_AV_PROTECT_REQ_EVT */ -typedef struct -{ - tBTA_AV_CHNL chnl; - tBTA_AV_HNDL hndl; - uint8_t *p_data; - uint16_t len; +typedef struct { + tBTA_AV_CHNL chnl; + tBTA_AV_HNDL hndl; + uint8_t* p_data; + uint16_t len; } tBTA_AV_PROTECT_REQ; /* data associated with BTA_AV_PROTECT_RSP_EVT */ -typedef struct -{ - tBTA_AV_CHNL chnl; - tBTA_AV_HNDL hndl; - uint8_t *p_data; - uint16_t len; - tBTA_AV_ERR err_code; +typedef struct { + tBTA_AV_CHNL chnl; + tBTA_AV_HNDL hndl; + uint8_t* p_data; + uint16_t len; + tBTA_AV_ERR err_code; } tBTA_AV_PROTECT_RSP; /* data associated with BTA_AV_RC_OPEN_EVT */ -typedef struct -{ - uint8_t rc_handle; - tBTA_AV_FEAT peer_features; - BD_ADDR peer_addr; - tBTA_AV_STATUS status; +typedef struct { + uint8_t rc_handle; + tBTA_AV_FEAT peer_features; + BD_ADDR peer_addr; + tBTA_AV_STATUS status; } tBTA_AV_RC_OPEN; /* data associated with BTA_AV_RC_CLOSE_EVT */ -typedef struct -{ - uint8_t rc_handle; - BD_ADDR peer_addr; +typedef struct { + uint8_t rc_handle; + BD_ADDR peer_addr; } tBTA_AV_RC_CLOSE; /* data associated with BTA_AV_RC_BROWSE_OPEN_EVT */ -typedef struct -{ - uint8_t rc_handle; - BD_ADDR peer_addr; - tBTA_AV_STATUS status; +typedef struct { + uint8_t rc_handle; + BD_ADDR peer_addr; + tBTA_AV_STATUS status; } tBTA_AV_RC_BROWSE_OPEN; /* data associated with BTA_AV_RC_BROWSE_CLOSE_EVT */ -typedef struct -{ - uint8_t rc_handle; - BD_ADDR peer_addr; +typedef struct { + uint8_t rc_handle; + BD_ADDR peer_addr; } tBTA_AV_RC_BROWSE_CLOSE; /* data associated with BTA_AV_RC_FEAT_EVT */ -typedef struct -{ - uint8_t rc_handle; - tBTA_AV_FEAT peer_features; - BD_ADDR peer_addr; +typedef struct { + uint8_t rc_handle; + tBTA_AV_FEAT peer_features; + BD_ADDR peer_addr; } tBTA_AV_RC_FEAT; /* data associated with BTA_AV_REMOTE_CMD_EVT */ -typedef struct -{ - uint8_t rc_handle; - tBTA_AV_RC rc_id; - tBTA_AV_STATE key_state; - uint8_t len; - uint8_t *p_data; - tAVRC_HDR hdr; /* Message header. */ - uint8_t label; +typedef struct { + uint8_t rc_handle; + tBTA_AV_RC rc_id; + tBTA_AV_STATE key_state; + uint8_t len; + uint8_t* p_data; + tAVRC_HDR hdr; /* Message header. */ + uint8_t label; } tBTA_AV_REMOTE_CMD; /* data associated with BTA_AV_REMOTE_RSP_EVT */ -typedef struct -{ - uint8_t rc_handle; - tBTA_AV_RC rc_id; - tBTA_AV_STATE key_state; - uint8_t len; - uint8_t *p_data; - tBTA_AV_CODE rsp_code; - uint8_t label; +typedef struct { + uint8_t rc_handle; + tBTA_AV_RC rc_id; + tBTA_AV_STATE key_state; + uint8_t len; + uint8_t* p_data; + tBTA_AV_CODE rsp_code; + uint8_t label; } tBTA_AV_REMOTE_RSP; /* data associated with BTA_AV_VENDOR_CMD_EVT, BTA_AV_VENDOR_RSP_EVT */ -typedef struct -{ - uint8_t rc_handle; - uint16_t len; /* Max vendor dependent message is 512 */ - uint8_t label; - tBTA_AV_CODE code; - uint32_t company_id; - uint8_t *p_data; +typedef struct { + uint8_t rc_handle; + uint16_t len; /* Max vendor dependent message is 512 */ + uint8_t label; + tBTA_AV_CODE code; + uint32_t company_id; + uint8_t* p_data; } tBTA_AV_VENDOR; /* data associated with BTA_AV_META_MSG_EVT */ -typedef struct -{ - uint8_t rc_handle; - uint16_t len; - uint8_t label; - tBTA_AV_CODE code; - uint32_t company_id; - uint8_t *p_data; - tAVRC_MSG *p_msg; +typedef struct { + uint8_t rc_handle; + uint16_t len; + uint8_t label; + tBTA_AV_CODE code; + uint32_t company_id; + uint8_t* p_data; + tAVRC_MSG* p_msg; } tBTA_AV_META_MSG; /* data associated with BTA_AV_PENDING_EVT */ -typedef struct -{ - BD_ADDR bd_addr; -} tBTA_AV_PEND; +typedef struct { BD_ADDR bd_addr; } tBTA_AV_PEND; /* data associated with BTA_AV_REJECT_EVT */ -typedef struct -{ - BD_ADDR bd_addr; - tBTA_AV_HNDL hndl; /* Handle associated with the stream that rejected the connection. */ +typedef struct { + BD_ADDR bd_addr; + tBTA_AV_HNDL hndl; /* Handle associated with the stream that rejected the + connection. */ } tBTA_AV_REJECT; - /* union of data associated with AV callback */ -typedef union -{ - tBTA_AV_CHNL chnl; - tBTA_AV_ENABLE enable; - tBTA_AV_REGISTER registr; - tBTA_AV_OPEN open; - tBTA_AV_CLOSE close; - tBTA_AV_START start; - tBTA_AV_PROTECT_REQ protect_req; - tBTA_AV_PROTECT_RSP protect_rsp; - tBTA_AV_RC_OPEN rc_open; - tBTA_AV_RC_CLOSE rc_close; - tBTA_AV_RC_BROWSE_OPEN rc_browse_open; - tBTA_AV_RC_BROWSE_CLOSE rc_browse_close; - tBTA_AV_REMOTE_CMD remote_cmd; - tBTA_AV_REMOTE_RSP remote_rsp; - tBTA_AV_VENDOR vendor_cmd; - tBTA_AV_VENDOR vendor_rsp; - tBTA_AV_RECONFIG reconfig; - tBTA_AV_SUSPEND suspend; - tBTA_AV_PEND pend; - tBTA_AV_META_MSG meta_msg; - tBTA_AV_REJECT reject; - tBTA_AV_RC_FEAT rc_feat; - tBTA_AV_STATUS status; +typedef union { + tBTA_AV_CHNL chnl; + tBTA_AV_ENABLE enable; + tBTA_AV_REGISTER registr; + tBTA_AV_OPEN open; + tBTA_AV_CLOSE close; + tBTA_AV_START start; + tBTA_AV_PROTECT_REQ protect_req; + tBTA_AV_PROTECT_RSP protect_rsp; + tBTA_AV_RC_OPEN rc_open; + tBTA_AV_RC_CLOSE rc_close; + tBTA_AV_RC_BROWSE_OPEN rc_browse_open; + tBTA_AV_RC_BROWSE_CLOSE rc_browse_close; + tBTA_AV_REMOTE_CMD remote_cmd; + tBTA_AV_REMOTE_RSP remote_rsp; + tBTA_AV_VENDOR vendor_cmd; + tBTA_AV_VENDOR vendor_rsp; + tBTA_AV_RECONFIG reconfig; + tBTA_AV_SUSPEND suspend; + tBTA_AV_PEND pend; + tBTA_AV_META_MSG meta_msg; + tBTA_AV_REJECT reject; + tBTA_AV_RC_FEAT rc_feat; + tBTA_AV_STATUS status; } tBTA_AV; -typedef struct -{ - uint8_t *codec_info; - BD_ADDR bd_addr;; +typedef struct { + uint8_t* codec_info; + BD_ADDR bd_addr; + ; } tBTA_AVK_CONFIG; /* union of data associated with AV Media callback */ -typedef union -{ - BT_HDR *p_data; - tBTA_AVK_CONFIG avk_config; +typedef union { + BT_HDR* p_data; + tBTA_AVK_CONFIG avk_config; } tBTA_AV_MEDIA; - -#define BTA_GROUP_NAVI_MSG_OP_DATA_LEN 5 +#define BTA_GROUP_NAVI_MSG_OP_DATA_LEN 5 /* AV callback */ -typedef void (tBTA_AV_CBACK)(tBTA_AV_EVT event, tBTA_AV *p_data); -typedef void (tBTA_AV_SINK_DATA_CBACK)(tBTA_AV_EVT event, - tBTA_AV_MEDIA *p_data); +typedef void(tBTA_AV_CBACK)(tBTA_AV_EVT event, tBTA_AV* p_data); +typedef void(tBTA_AV_SINK_DATA_CBACK)(tBTA_AV_EVT event, tBTA_AV_MEDIA* p_data); /* type for stream state machine action functions */ -typedef void (*tBTA_AV_ACT)(void *p_cb, void *p_data); +typedef void (*tBTA_AV_ACT)(void* p_cb, void* p_data); /* type for registering VDP */ -typedef void (tBTA_AV_REG) (tAVDT_CS *p_cs, char *p_service_name, void *p_data); +typedef void(tBTA_AV_REG)(tAVDT_CS* p_cs, char* p_service_name, void* p_data); /* AV configuration structure */ -typedef struct -{ - uint32_t company_id; /* AVRCP Company ID */ - uint16_t avrc_mtu; /* AVRCP MTU at L2CAP for control channel */ - uint16_t avrc_br_mtu; /* AVRCP MTU at L2CAP for browsing channel */ - uint16_t avrc_ct_cat; /* AVRCP controller categories */ - uint16_t avrc_tg_cat; /* AVRCP target categories */ - uint16_t sig_mtu; /* AVDTP signaling channel MTU at L2CAP */ - uint16_t audio_mtu; /* AVDTP audio transport channel MTU at L2CAP */ - const uint16_t *p_audio_flush_to;/* AVDTP audio transport channel flush timeout */ - uint16_t audio_mqs; /* AVDTP audio channel max data queue size */ - uint16_t video_mtu; /* AVDTP video transport channel MTU at L2CAP */ - uint16_t video_flush_to; /* AVDTP video transport channel flush timeout */ - bool avrc_group; /* true, to accept AVRC 1.3 group nevigation command */ - uint8_t num_co_ids; /* company id count in p_meta_co_ids */ - uint8_t num_evt_ids; /* event id count in p_meta_evt_ids */ - tBTA_AV_CODE rc_pass_rsp; /* the default response code for pass through commands */ - const uint32_t *p_meta_co_ids;/* the metadata Get Capabilities response for company id */ - const uint8_t *p_meta_evt_ids;/* the the metadata Get Capabilities response for event id */ - const tBTA_AV_ACT *p_act_tbl;/* the action function table for VDP stream */ - tBTA_AV_REG *p_reg; /* action function to register VDP */ - char avrc_controller_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP controller name */ - char avrc_target_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP target name*/ +typedef struct { + uint32_t company_id; /* AVRCP Company ID */ + uint16_t avrc_mtu; /* AVRCP MTU at L2CAP for control channel */ + uint16_t avrc_br_mtu; /* AVRCP MTU at L2CAP for browsing channel */ + uint16_t avrc_ct_cat; /* AVRCP controller categories */ + uint16_t avrc_tg_cat; /* AVRCP target categories */ + uint16_t sig_mtu; /* AVDTP signaling channel MTU at L2CAP */ + uint16_t audio_mtu; /* AVDTP audio transport channel MTU at L2CAP */ + const uint16_t* + p_audio_flush_to; /* AVDTP audio transport channel flush timeout */ + uint16_t audio_mqs; /* AVDTP audio channel max data queue size */ + uint16_t video_mtu; /* AVDTP video transport channel MTU at L2CAP */ + uint16_t video_flush_to; /* AVDTP video transport channel flush timeout */ + bool avrc_group; /* true, to accept AVRC 1.3 group nevigation command */ + uint8_t num_co_ids; /* company id count in p_meta_co_ids */ + uint8_t num_evt_ids; /* event id count in p_meta_evt_ids */ + tBTA_AV_CODE + rc_pass_rsp; /* the default response code for pass through commands */ + const uint32_t* + p_meta_co_ids; /* the metadata Get Capabilities response for company id */ + const uint8_t* p_meta_evt_ids; /* the the metadata Get Capabilities response + for event id */ + const tBTA_AV_ACT* p_act_tbl; /* the action function table for VDP stream */ + tBTA_AV_REG* p_reg; /* action function to register VDP */ + char avrc_controller_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP controller + name */ + char avrc_target_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP target name*/ } tBTA_AV_CFG; /***************************************************************************** @@ -514,7 +507,7 @@ typedef struct * ******************************************************************************/ void BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features, - tBTA_AV_CBACK *p_cback); + tBTA_AV_CBACK* p_cback); /******************************************************************************* * @@ -541,8 +534,8 @@ void BTA_AvDisable(void); * Returns void * ******************************************************************************/ -void BTA_AvRegister(tBTA_AV_CHNL chnl, const char *p_service_name, - uint8_t app_id, tBTA_AV_SINK_DATA_CBACK *p_sink_data_cback, +void BTA_AvRegister(tBTA_AV_CHNL chnl, const char* p_service_name, + uint8_t app_id, tBTA_AV_SINK_DATA_CBACK* p_sink_data_cback, uint16_t service_uuid); /******************************************************************************* @@ -567,8 +560,8 @@ void BTA_AvDeregister(tBTA_AV_HNDL hndl); * Returns void * ******************************************************************************/ -void BTA_AvOpen(BD_ADDR bd_addr, tBTA_AV_HNDL handle, - bool use_rc, tBTA_SEC sec_mask, uint16_t uuid); +void BTA_AvOpen(BD_ADDR bd_addr, tBTA_AV_HNDL handle, bool use_rc, + tBTA_SEC sec_mask, uint16_t uuid); /******************************************************************************* * @@ -621,7 +614,8 @@ void BTA_AvStop(bool suspend); * Function BTA_AvReconfig * * Description Reconfigure the audio/video stream. - * If suspend is true, this function tries the suspend/reconfigure + * If suspend is true, this function tries the + *suspend/reconfigure * procedure first. * If suspend is false or when suspend/reconfigure fails, * this function closes and re-opens the AVDT connection. @@ -630,8 +624,8 @@ void BTA_AvStop(bool suspend); * ******************************************************************************/ void BTA_AvReconfig(tBTA_AV_HNDL hndl, bool suspend, uint8_t sep_info_idx, - uint8_t *p_codec_info, uint8_t num_protect, - const uint8_t *p_protect_info); + uint8_t* p_codec_info, uint8_t num_protect, + const uint8_t* p_protect_info); /******************************************************************************* * @@ -643,7 +637,7 @@ void BTA_AvReconfig(tBTA_AV_HNDL hndl, bool suspend, uint8_t sep_info_idx, * Returns void * ******************************************************************************/ -void BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t *p_data, uint16_t len); +void BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t* p_data, uint16_t len); /******************************************************************************* * @@ -657,8 +651,8 @@ void BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t *p_data, uint16_t len); * Returns void * ******************************************************************************/ -void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t *p_data, - uint16_t len); +void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t* p_data, + uint16_t len); /******************************************************************************* * @@ -671,7 +665,7 @@ void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t *p_data, * ******************************************************************************/ void BTA_AvRemoteCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_RC rc_id, - tBTA_AV_STATE key_state); + tBTA_AV_STATE key_state); /******************************************************************************* * @@ -684,8 +678,9 @@ void BTA_AvRemoteCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_RC rc_id, * Returns void * ******************************************************************************/ -void BTA_AvRemoteVendorUniqueCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_STATE key_state, - uint8_t* p_msg, uint8_t buf_len); +void BTA_AvRemoteVendorUniqueCmd(uint8_t rc_handle, uint8_t label, + tBTA_AV_STATE key_state, uint8_t* p_msg, + uint8_t buf_len); /******************************************************************************* * @@ -699,7 +694,7 @@ void BTA_AvRemoteVendorUniqueCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_STATE * ******************************************************************************/ void BTA_AvVendorCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE cmd_code, - uint8_t *p_data, uint16_t len); + uint8_t* p_data, uint16_t len); /******************************************************************************* * @@ -714,8 +709,7 @@ void BTA_AvVendorCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE cmd_code, * ******************************************************************************/ void BTA_AvVendorRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code, - uint8_t *p_data, uint16_t len, uint32_t company_id); - + uint8_t* p_data, uint16_t len, uint32_t company_id); /******************************************************************************* * @@ -753,30 +747,35 @@ void BTA_AvCloseRc(uint8_t rc_handle); * ******************************************************************************/ void BTA_AvMetaRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code, - BT_HDR *p_pkt); + BT_HDR* p_pkt); /******************************************************************************* * * Function BTA_AvMetaCmd * - * Description Send a Metadata/Advanced Control command. The message contained + * Description Send a Metadata/Advanced Control command. The message +*contained * in p_pkt can be composed with AVRC utility functions. * This function can only be used if AV is enabled with feature * BTA_AV_FEAT_METADATA. - * This message is sent only when the peer supports the TG role. -*8 The only command makes sense right now is the absolute volume command. + * This message is sent only when the peer supports the TG +*role. +*8 The only command makes sense right now is the absolute +*volume command. * * Returns void * ******************************************************************************/ -void BTA_AvMetaCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CMD cmd_code, BT_HDR *p_pkt); +void BTA_AvMetaCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CMD cmd_code, + BT_HDR* p_pkt); /******************************************************************************* * * Function BTA_AvOffloadStart * * Description Request Starting of A2DP Offload. - * This function is used to start A2DP offload if vendor lib has + * This function is used to start A2DP offload if vendor lib + *has * the feature enabled. * * Returns void @@ -796,7 +795,6 @@ void BTA_AvOffloadStart(tBTA_AV_HNDL hndl); ******************************************************************************/ void BTA_AvOffloadStartRsp(tBTA_AV_HNDL hndl, tBTA_AV_STATUS status); - #ifdef __cplusplus } #endif diff --git a/system/bta/include/bta_av_ci.h b/system/bta/include/bta_av_ci.h index 099f11363ee..f4b4a378714 100644 --- a/system/bta/include/bta_av_ci.h +++ b/system/bta/include/bta_av_ci.h @@ -30,8 +30,7 @@ * Function Declarations ****************************************************************************/ #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif /******************************************************************************* @@ -61,9 +60,9 @@ extern void bta_av_ci_src_data_ready(tBTA_AV_CHNL chnl); * ******************************************************************************/ extern void bta_av_ci_setconfig(tBTA_AV_HNDL hndl, uint8_t err_code, - uint8_t category, uint8_t num_seid, uint8_t *p_seid, - bool recfg_needed, uint8_t avdt_handle); - + uint8_t category, uint8_t num_seid, + uint8_t* p_seid, bool recfg_needed, + uint8_t avdt_handle); #ifdef __cplusplus } diff --git a/system/bta/include/bta_av_co.h b/system/bta/include/bta_av_co.h index c4679da5eef..271099eca37 100644 --- a/system/bta/include/bta_av_co.h +++ b/system/bta/include/bta_av_co.h @@ -24,8 +24,8 @@ #ifndef BTA_AV_CO_H #define BTA_AV_CO_H -#include "l2c_api.h" #include "bta_av_api.h" +#include "l2c_api.h" #ifdef __cplusplus extern "C" { @@ -49,7 +49,7 @@ extern "C" { * ******************************************************************************/ bool bta_av_co_audio_init(tA2DP_CODEC_SEP_INDEX codec_sep_index, - tAVDT_CFG *p_cfg); + tAVDT_CFG* p_cfg); /******************************************************************************* * @@ -79,33 +79,34 @@ void bta_av_co_audio_disc_res(tBTA_AV_HNDL hndl, uint8_t num_seps, * Returns Stream codec and content protection configuration info. * ******************************************************************************/ -tA2DP_STATUS bta_av_co_audio_getconfig(tBTA_AV_HNDL hndl, - uint8_t *p_codec_info, - uint8_t *p_sep_info_idx, uint8_t seid, - uint8_t *p_num_protect, - uint8_t *p_protect_info); +tA2DP_STATUS bta_av_co_audio_getconfig(tBTA_AV_HNDL hndl, uint8_t* p_codec_info, + uint8_t* p_sep_info_idx, uint8_t seid, + uint8_t* p_num_protect, + uint8_t* p_protect_info); /******************************************************************************* * * Function bta_av_co_audio_setconfig * * Description This callout function is executed by AV to set the - * codec and content protection configuration of the audio stream. + * codec and content protection configuration of the audio + *stream. * * * Returns void * ******************************************************************************/ -void bta_av_co_audio_setconfig(tBTA_AV_HNDL hndl, const uint8_t *p_codec_info, +void bta_av_co_audio_setconfig(tBTA_AV_HNDL hndl, const uint8_t* p_codec_info, uint8_t seid, BD_ADDR addr, uint8_t num_protect, - uint8_t *p_protect_info,uint8_t t_local_sep, + uint8_t* p_protect_info, uint8_t t_local_sep, uint8_t avdt_handle); /******************************************************************************* * * Function bta_av_co_audio_open * - * Description This function is called by AV when the audio stream connection + * Description This function is called by AV when the audio stream + *connection * is opened. * BTA-AV maintains the MTU of A2DP streams. * If this is the 2nd audio stream, mtu is the smaller of the 2 @@ -114,14 +115,15 @@ void bta_av_co_audio_setconfig(tBTA_AV_HNDL hndl, const uint8_t *p_codec_info, * Returns void * ******************************************************************************/ -void bta_av_co_audio_open(tBTA_AV_HNDL hndl, uint8_t *p_codec_info, +void bta_av_co_audio_open(tBTA_AV_HNDL hndl, uint8_t* p_codec_info, uint16_t mtu); /******************************************************************************* * * Function bta_av_co_audio_close * - * Description This function is called by AV when the audio stream connection + * Description This function is called by AV when the audio stream + *connection * is closed. * BTA-AV maintains the MTU of A2DP streams. * When one stream is closed and no other audio stream is open, @@ -144,8 +146,8 @@ void bta_av_co_audio_close(tBTA_AV_HNDL hndl, uint16_t mtu); * Returns void * ******************************************************************************/ -void bta_av_co_audio_start(tBTA_AV_HNDL hndl, uint8_t *p_codec_info, - bool *p_no_rtp_hdr); +void bta_av_co_audio_start(tBTA_AV_HNDL hndl, uint8_t* p_codec_info, + bool* p_no_rtp_hdr); /******************************************************************************* * @@ -171,8 +173,8 @@ void bta_av_co_audio_stop(tBTA_AV_HNDL hndl); * Otherwise, a buffer (BT_HDR*) containing the audio data. * ******************************************************************************/ -void *bta_av_co_audio_src_data_path(const uint8_t *p_codec_info, - uint32_t *p_timestamp); +void* bta_av_co_audio_src_data_path(const uint8_t* p_codec_info, + uint32_t* p_timestamp); /******************************************************************************* * @@ -192,7 +194,8 @@ void bta_av_co_audio_drop(tBTA_AV_HNDL hndl); * * Function bta_av_co_audio_delay * - * Description This function is called by AV when the audio stream connection + * Description This function is called by AV when the audio stream + *connection * needs to send the initial delay report to the connected SRC. * * diff --git a/system/bta/include/bta_dm_ci.h b/system/bta/include/bta_dm_ci.h index 7ccbfadc10a..735447648a0 100644 --- a/system/bta/include/bta_dm_ci.h +++ b/system/bta/include/bta_dm_ci.h @@ -45,7 +45,7 @@ extern "C" { * ******************************************************************************/ extern void bta_dm_ci_io_req(BD_ADDR bd_addr, tBTA_IO_CAP io_cap, - tBTA_OOB_DATA oob_data, tBTA_AUTH_REQ auth_req); + tBTA_OOB_DATA oob_data, tBTA_AUTH_REQ auth_req); /******************************************************************************* * @@ -58,8 +58,8 @@ extern void bta_dm_ci_io_req(BD_ADDR bd_addr, tBTA_IO_CAP io_cap, * Returns void * ******************************************************************************/ -extern void bta_dm_ci_rmt_oob(bool accept, BD_ADDR bd_addr, - BT_OCTET16 c, BT_OCTET16 r); +extern void bta_dm_ci_rmt_oob(bool accept, BD_ADDR bd_addr, BT_OCTET16 c, + BT_OCTET16 r); /******************************************************************************* * * Function bta_dm_sco_ci_data_ready diff --git a/system/bta/include/bta_dm_co.h b/system/bta/include/bta_dm_co.h index e1397fd65b1..1dffd882ff4 100644 --- a/system/bta/include/bta_dm_co.h +++ b/system/bta/include/bta_dm_co.h @@ -31,28 +31,24 @@ extern "C" { #endif #ifndef BTA_SCO_OUT_PKT_SIZE - #define BTA_SCO_OUT_PKT_SIZE BTM_SCO_DATA_SIZE_MAX +#define BTA_SCO_OUT_PKT_SIZE BTM_SCO_DATA_SIZE_MAX #endif -#define BTA_SCO_CODEC_PCM 0 /* used for regular SCO */ -#define BTA_SCO_CODEC_SBC 1 /* used for WBS */ -typedef uint8_t tBTA_SCO_CODEC_TYPE; +#define BTA_SCO_CODEC_PCM 0 /* used for regular SCO */ +#define BTA_SCO_CODEC_SBC 1 /* used for WBS */ +typedef uint8_t tBTA_SCO_CODEC_TYPE; -#define BTA_DM_SCO_SAMP_RATE_8K 8000 -#define BTA_DM_SCO_SAMP_RATE_16K 16000 +#define BTA_DM_SCO_SAMP_RATE_8K 8000 +#define BTA_DM_SCO_SAMP_RATE_16K 16000 /* SCO codec information */ -typedef struct -{ - tBTA_SCO_CODEC_TYPE codec_type; -}tBTA_CODEC_INFO; +typedef struct { tBTA_SCO_CODEC_TYPE codec_type; } tBTA_CODEC_INFO; -#define BTA_DM_SCO_ROUTE_PCM BTM_SCO_ROUTE_PCM -#define BTA_DM_SCO_ROUTE_HCI BTM_SCO_ROUTE_HCI +#define BTA_DM_SCO_ROUTE_PCM BTM_SCO_ROUTE_PCM +#define BTA_DM_SCO_ROUTE_HCI BTM_SCO_ROUTE_HCI typedef tBTM_SCO_ROUTE_TYPE tBTA_DM_SCO_ROUTE_TYPE; - /***************************************************************************** * Function Declarations ****************************************************************************/ @@ -61,31 +57,35 @@ typedef tBTM_SCO_ROUTE_TYPE tBTA_DM_SCO_ROUTE_TYPE; * * Function bta_dm_co_io_req * - * Description This callout function is executed by DM to get IO capabilities + * Description This callout function is executed by DM to get IO + *capabilities * of the local device for the Simple Pairing process * * Parameters bd_addr - The peer device * *p_io_cap - The local Input/Output capabilities - * *p_oob_data - true, if OOB data is available for the peer device. + * *p_oob_data - true, if OOB data is available for the peer + *device. * *p_auth_req - true, if MITM protection is required. * * Returns void. * ******************************************************************************/ -extern void bta_dm_co_io_req(BD_ADDR bd_addr, tBTA_IO_CAP *p_io_cap, - tBTA_OOB_DATA *p_oob_data, tBTA_AUTH_REQ *p_auth_req, - bool is_orig); +extern void bta_dm_co_io_req(BD_ADDR bd_addr, tBTA_IO_CAP* p_io_cap, + tBTA_OOB_DATA* p_oob_data, + tBTA_AUTH_REQ* p_auth_req, bool is_orig); /******************************************************************************* * * Function bta_dm_co_io_rsp * - * Description This callout function is executed by DM to report IO capabilities + * Description This callout function is executed by DM to report IO + *capabilities * of the peer device for the Simple Pairing process * * Parameters bd_addr - The peer device * io_cap - The remote Input/Output capabilities - * oob_data - true, if OOB data is available for the peer device. + * oob_data - true, if OOB data is available for the peer + *device. * auth_req - true, if MITM protection is required. * * Returns void. @@ -107,7 +107,7 @@ extern void bta_dm_co_io_rsp(BD_ADDR bd_addr, tBTA_IO_CAP io_cap, * Returns void. * ******************************************************************************/ -extern void bta_dm_co_lk_upgrade(BD_ADDR bd_addr, bool *p_upgrade ); +extern void bta_dm_co_lk_upgrade(BD_ADDR bd_addr, bool* p_upgrade); /******************************************************************************* * @@ -147,7 +147,8 @@ extern void bta_dm_co_rmt_oob(BD_ADDR bd_addr); * Function bta_dm_sco_co_init * * Description This function can be used by the phone to initialize audio - * codec or for other initialization purposes before SCO connection + * codec or for other initialization purposes before SCO + *connection * is opened. * * @@ -155,8 +156,8 @@ extern void bta_dm_co_rmt_oob(BD_ADDR bd_addr); * ******************************************************************************/ extern tBTA_DM_SCO_ROUTE_TYPE bta_dm_sco_co_init(uint32_t rx_bw, uint32_t tx_bw, - tBTA_CODEC_INFO *p_codec_info, uint8_t app_id); - + tBTA_CODEC_INFO* p_codec_info, + uint8_t app_id); /******************************************************************************* * @@ -168,7 +169,8 @@ extern tBTA_DM_SCO_ROUTE_TYPE bta_dm_sco_co_init(uint32_t rx_bw, uint32_t tx_bw, * Returns void * ******************************************************************************/ -extern void bta_dm_sco_co_open(uint16_t handle, uint8_t pkt_size, uint16_t event); +extern void bta_dm_sco_co_open(uint16_t handle, uint8_t pkt_size, + uint16_t event); /******************************************************************************* * @@ -191,32 +193,34 @@ extern void bta_dm_sco_co_close(void); * Returns void * ******************************************************************************/ -extern void bta_dm_sco_co_out_data(BT_HDR **p_buf); +extern void bta_dm_sco_co_out_data(BT_HDR** p_buf); /******************************************************************************* * * Function bta_dm_sco_co_in_data * - * Description This function is called to send incoming SCO data to application. + * Description This function is called to send incoming SCO data to + *application. * * Returns void * ******************************************************************************/ -extern void bta_dm_sco_co_in_data(BT_HDR *p_buf, tBTM_SCO_DATA_FLAG status); - - +extern void bta_dm_sco_co_in_data(BT_HDR* p_buf, tBTM_SCO_DATA_FLAG status); /******************************************************************************* * * Function bta_dm_co_ble_io_req * - * Description This callout function is executed by DM to get BLE IO capabilities + * Description This callout function is executed by DM to get BLE IO + *capabilities * before SMP pairing gets going. * * Parameters bd_addr - The peer device * *p_io_cap - The local Input/Output capabilities - * *p_oob_data - true, if OOB data is available for the peer device. - * *p_auth_req - Auth request setting (Bonding and MITM required or not) + * *p_oob_data - true, if OOB data is available for the peer + *device. + * *p_auth_req - Auth request setting (Bonding and MITM + *required or not) * *p_max_key_size - max key size local device supported. * *p_init_key - initiator keys. * *p_resp_key - responder keys. @@ -224,19 +228,19 @@ extern void bta_dm_sco_co_in_data(BT_HDR *p_buf, tBTM_SCO_DATA_FLAG status); * Returns void. * ******************************************************************************/ -extern void bta_dm_co_ble_io_req(BD_ADDR bd_addr, tBTA_IO_CAP *p_io_cap, - tBTA_OOB_DATA *p_oob_data, - tBTA_LE_AUTH_REQ *p_auth_req, - uint8_t *p_max_key_size, - tBTA_LE_KEY_TYPE *p_init_key, - tBTA_LE_KEY_TYPE *p_resp_key ); - +extern void bta_dm_co_ble_io_req(BD_ADDR bd_addr, tBTA_IO_CAP* p_io_cap, + tBTA_OOB_DATA* p_oob_data, + tBTA_LE_AUTH_REQ* p_auth_req, + uint8_t* p_max_key_size, + tBTA_LE_KEY_TYPE* p_init_key, + tBTA_LE_KEY_TYPE* p_resp_key); /******************************************************************************* * * Function bta_dm_co_ble_local_key_reload * - * Description This callout function is to load the local BLE keys if available + * Description This callout function is to load the local BLE keys if + *available * on the device. * * Parameters none @@ -244,20 +248,24 @@ extern void bta_dm_co_ble_io_req(BD_ADDR bd_addr, tBTA_IO_CAP *p_io_cap, * Returns void. * ******************************************************************************/ -extern void bta_dm_co_ble_load_local_keys (tBTA_DM_BLE_LOCAL_KEY_MASK *p_key_mask, BT_OCTET16 er, - tBTA_BLE_LOCAL_ID_KEYS *p_id_keys); +extern void bta_dm_co_ble_load_local_keys( + tBTA_DM_BLE_LOCAL_KEY_MASK* p_key_mask, BT_OCTET16 er, + tBTA_BLE_LOCAL_ID_KEYS* p_id_keys); /******************************************************************************* * * Function bta_dm_co_ble_io_req * - * Description This callout function is executed by DM to get BLE IO capabilities + * Description This callout function is executed by DM to get BLE IO + *capabilities * before SMP pairing gets going. * * Parameters bd_addr - The peer device * *p_io_cap - The local Input/Output capabilities - * *p_oob_data - true, if OOB data is available for the peer device. - * *p_auth_req - Auth request setting (Bonding and MITM required or not) + * *p_oob_data - true, if OOB data is available for the peer + *device. + * *p_auth_req - Auth request setting (Bonding and MITM + *required or not) * *p_max_key_size - max key size local device supported. * *p_init_key - initiator keys. * *p_resp_key - responder keys. @@ -265,12 +273,12 @@ extern void bta_dm_co_ble_load_local_keys (tBTA_DM_BLE_LOCAL_KEY_MASK *p_key_mas * Returns void. * ******************************************************************************/ -extern void bta_dm_co_ble_io_req(BD_ADDR bd_addr, tBTA_IO_CAP *p_io_cap, - tBTA_OOB_DATA *p_oob_data, - tBTA_LE_AUTH_REQ *p_auth_req, - uint8_t *p_max_key_size, - tBTA_LE_KEY_TYPE *p_init_key, - tBTA_LE_KEY_TYPE *p_resp_key ); +extern void bta_dm_co_ble_io_req(BD_ADDR bd_addr, tBTA_IO_CAP* p_io_cap, + tBTA_OOB_DATA* p_oob_data, + tBTA_LE_AUTH_REQ* p_auth_req, + uint8_t* p_max_key_size, + tBTA_LE_KEY_TYPE* p_init_key, + tBTA_LE_KEY_TYPE* p_resp_key); #ifdef __cplusplus } diff --git a/system/bta/include/bta_gatt_api.h b/system/bta/include/bta_gatt_api.h index 66ae35ea9a9..1be65fdefd4 100644 --- a/system/bta/include/bta_gatt_api.h +++ b/system/bta/include/bta_gatt_api.h @@ -34,19 +34,18 @@ using std::vector; -#ifndef BTA_GATT_INCLUDED +#ifndef BTA_GATT_INCLUDED #warning BTA_GATT_INCLUDED not defined -#define BTA_GATT_INCLUDED false +#define BTA_GATT_INCLUDED false #endif #if (BLE_INCLUDED == FALSE && BTA_GATT_INCLUDED == TRUE) #undef BTA_GATT_INCLUDED -#define BTA_GATT_INCLUDED false +#define BTA_GATT_INCLUDED false #endif - -#ifndef BTA_GATT_DEBUG -#define BTA_GATT_DEBUG false +#ifndef BTA_GATT_DEBUG +#define BTA_GATT_DEBUG false #endif /***************************************************************************** @@ -56,380 +55,380 @@ using std::vector; * Common Definitions **************************/ /* GATT ID */ -typedef struct -{ - tBT_UUID uuid; /* uuid of the attribute */ - uint8_t inst_id; /* instance ID */ +typedef struct { + tBT_UUID uuid; /* uuid of the attribute */ + uint8_t inst_id; /* instance ID */ } __attribute__((packed)) tBTA_GATT_ID; /* Success code and error codes */ -#define BTA_GATT_OK GATT_SUCCESS -#define BTA_GATT_INVALID_HANDLE GATT_INVALID_HANDLE /* 0x0001 */ -#define BTA_GATT_READ_NOT_PERMIT GATT_READ_NOT_PERMIT /* 0x0002 */ -#define BTA_GATT_WRITE_NOT_PERMIT GATT_WRITE_NOT_PERMIT /* 0x0003 */ -#define BTA_GATT_INVALID_PDU GATT_INVALID_PDU /* 0x0004 */ -#define BTA_GATT_INSUF_AUTHENTICATION GATT_INSUF_AUTHENTICATION /* 0x0005 */ -#define BTA_GATT_REQ_NOT_SUPPORTED GATT_REQ_NOT_SUPPORTED /* 0x0006 */ -#define BTA_GATT_INVALID_OFFSET GATT_INVALID_OFFSET /* 0x0007 */ -#define BTA_GATT_INSUF_AUTHORIZATION GATT_INSUF_AUTHORIZATION /* 0x0008 */ -#define BTA_GATT_PREPARE_Q_FULL GATT_PREPARE_Q_FULL /* 0x0009 */ -#define BTA_GATT_NOT_FOUND GATT_NOT_FOUND /* 0x000a */ -#define BTA_GATT_NOT_LONG GATT_NOT_LONG /* 0x000b */ -#define BTA_GATT_INSUF_KEY_SIZE GATT_INSUF_KEY_SIZE /* 0x000c */ -#define BTA_GATT_INVALID_ATTR_LEN GATT_INVALID_ATTR_LEN /* 0x000d */ -#define BTA_GATT_ERR_UNLIKELY GATT_ERR_UNLIKELY /* 0x000e */ -#define BTA_GATT_INSUF_ENCRYPTION GATT_INSUF_ENCRYPTION /* 0x000f */ -#define BTA_GATT_UNSUPPORT_GRP_TYPE GATT_UNSUPPORT_GRP_TYPE /* 0x0010 */ -#define BTA_GATT_INSUF_RESOURCE GATT_INSUF_RESOURCE /* 0x0011 */ - - -#define BTA_GATT_NO_RESOURCES GATT_NO_RESOURCES /* 0x80 */ -#define BTA_GATT_INTERNAL_ERROR GATT_INTERNAL_ERROR /* 0x81 */ -#define BTA_GATT_WRONG_STATE GATT_WRONG_STATE /* 0x82 */ -#define BTA_GATT_DB_FULL GATT_DB_FULL /* 0x83 */ -#define BTA_GATT_BUSY GATT_BUSY /* 0x84 */ -#define BTA_GATT_ERROR GATT_ERROR /* 0x85 */ -#define BTA_GATT_CMD_STARTED GATT_CMD_STARTED /* 0x86 */ -#define BTA_GATT_ILLEGAL_PARAMETER GATT_ILLEGAL_PARAMETER /* 0x87 */ -#define BTA_GATT_PENDING GATT_PENDING /* 0x88 */ -#define BTA_GATT_AUTH_FAIL GATT_AUTH_FAIL /* 0x89 */ -#define BTA_GATT_MORE GATT_MORE /* 0x8a */ -#define BTA_GATT_INVALID_CFG GATT_INVALID_CFG /* 0x8b */ -#define BTA_GATT_SERVICE_STARTED GATT_SERVICE_STARTED /* 0x8c */ -#define BTA_GATT_ENCRYPED_MITM GATT_ENCRYPED_MITM /* GATT_SUCCESS */ -#define BTA_GATT_ENCRYPED_NO_MITM GATT_ENCRYPED_NO_MITM /* 0x8d */ -#define BTA_GATT_NOT_ENCRYPTED GATT_NOT_ENCRYPTED /* 0x8e */ -#define BTA_GATT_CONGESTED GATT_CONGESTED /* 0x8f */ - -#define BTA_GATT_DUP_REG 0x90 /* 0x90 */ -#define BTA_GATT_ALREADY_OPEN 0x91 /* 0x91 */ -#define BTA_GATT_CANCEL 0x92 /* 0x92 */ - - /* 0xE0 ~ 0xFC reserved for future use */ -#define BTA_GATT_CCC_CFG_ERR GATT_CCC_CFG_ERR /* 0xFD Client Characteristic Configuration Descriptor Improperly Configured */ -#define BTA_GATT_PRC_IN_PROGRESS GATT_PRC_IN_PROGRESS /* 0xFE Procedure Already in progress */ -#define BTA_GATT_OUT_OF_RANGE GATT_OUT_OF_RANGE /* 0xFFAttribute value out of range */ +#define BTA_GATT_OK GATT_SUCCESS +#define BTA_GATT_INVALID_HANDLE GATT_INVALID_HANDLE /* 0x0001 */ +#define BTA_GATT_READ_NOT_PERMIT GATT_READ_NOT_PERMIT /* 0x0002 */ +#define BTA_GATT_WRITE_NOT_PERMIT GATT_WRITE_NOT_PERMIT /* 0x0003 */ +#define BTA_GATT_INVALID_PDU GATT_INVALID_PDU /* 0x0004 */ +#define BTA_GATT_INSUF_AUTHENTICATION GATT_INSUF_AUTHENTICATION /* 0x0005 */ +#define BTA_GATT_REQ_NOT_SUPPORTED GATT_REQ_NOT_SUPPORTED /* 0x0006 */ +#define BTA_GATT_INVALID_OFFSET GATT_INVALID_OFFSET /* 0x0007 */ +#define BTA_GATT_INSUF_AUTHORIZATION GATT_INSUF_AUTHORIZATION /* 0x0008 */ +#define BTA_GATT_PREPARE_Q_FULL GATT_PREPARE_Q_FULL /* 0x0009 */ +#define BTA_GATT_NOT_FOUND GATT_NOT_FOUND /* 0x000a */ +#define BTA_GATT_NOT_LONG GATT_NOT_LONG /* 0x000b */ +#define BTA_GATT_INSUF_KEY_SIZE GATT_INSUF_KEY_SIZE /* 0x000c */ +#define BTA_GATT_INVALID_ATTR_LEN GATT_INVALID_ATTR_LEN /* 0x000d */ +#define BTA_GATT_ERR_UNLIKELY GATT_ERR_UNLIKELY /* 0x000e */ +#define BTA_GATT_INSUF_ENCRYPTION GATT_INSUF_ENCRYPTION /* 0x000f */ +#define BTA_GATT_UNSUPPORT_GRP_TYPE GATT_UNSUPPORT_GRP_TYPE /* 0x0010 */ +#define BTA_GATT_INSUF_RESOURCE GATT_INSUF_RESOURCE /* 0x0011 */ + +#define BTA_GATT_NO_RESOURCES GATT_NO_RESOURCES /* 0x80 */ +#define BTA_GATT_INTERNAL_ERROR GATT_INTERNAL_ERROR /* 0x81 */ +#define BTA_GATT_WRONG_STATE GATT_WRONG_STATE /* 0x82 */ +#define BTA_GATT_DB_FULL GATT_DB_FULL /* 0x83 */ +#define BTA_GATT_BUSY GATT_BUSY /* 0x84 */ +#define BTA_GATT_ERROR GATT_ERROR /* 0x85 */ +#define BTA_GATT_CMD_STARTED GATT_CMD_STARTED /* 0x86 */ +#define BTA_GATT_ILLEGAL_PARAMETER GATT_ILLEGAL_PARAMETER /* 0x87 */ +#define BTA_GATT_PENDING GATT_PENDING /* 0x88 */ +#define BTA_GATT_AUTH_FAIL GATT_AUTH_FAIL /* 0x89 */ +#define BTA_GATT_MORE GATT_MORE /* 0x8a */ +#define BTA_GATT_INVALID_CFG GATT_INVALID_CFG /* 0x8b */ +#define BTA_GATT_SERVICE_STARTED GATT_SERVICE_STARTED /* 0x8c */ +#define BTA_GATT_ENCRYPED_MITM GATT_ENCRYPED_MITM /* GATT_SUCCESS */ +#define BTA_GATT_ENCRYPED_NO_MITM GATT_ENCRYPED_NO_MITM /* 0x8d */ +#define BTA_GATT_NOT_ENCRYPTED GATT_NOT_ENCRYPTED /* 0x8e */ +#define BTA_GATT_CONGESTED GATT_CONGESTED /* 0x8f */ + +#define BTA_GATT_DUP_REG 0x90 /* 0x90 */ +#define BTA_GATT_ALREADY_OPEN 0x91 /* 0x91 */ +#define BTA_GATT_CANCEL 0x92 /* 0x92 */ + +/* 0xE0 ~ 0xFC reserved for future use */ +#define BTA_GATT_CCC_CFG_ERR \ + GATT_CCC_CFG_ERR /* 0xFD Client Characteristic Configuration Descriptor \ + Improperly Configured */ +#define BTA_GATT_PRC_IN_PROGRESS \ + GATT_PRC_IN_PROGRESS /* 0xFE Procedure Already in progress */ +#define BTA_GATT_OUT_OF_RANGE \ + GATT_OUT_OF_RANGE /* 0xFFAttribute value out of range */ typedef uint8_t tBTA_GATT_STATUS; -#define BTA_GATT_INVALID_CONN_ID GATT_INVALID_CONN_ID - +#define BTA_GATT_INVALID_CONN_ID GATT_INVALID_CONN_ID /* Client callback function events */ -#define BTA_GATTC_REG_EVT 0 /* GATT client is registered. */ -#define BTA_GATTC_DEREG_EVT 1 /* GATT client deregistered event */ -#define BTA_GATTC_OPEN_EVT 2 /* GATTC open request status event */ -#define BTA_GATTC_CLOSE_EVT 5 /* GATTC close request status event */ -#define BTA_GATTC_SEARCH_CMPL_EVT 6 /* GATT discovery complete event */ -#define BTA_GATTC_SEARCH_RES_EVT 7 /* GATT discovery result event */ -#define BTA_GATTC_NOTIF_EVT 10 /* GATT attribute notification event */ -#define BTA_GATTC_EXEC_EVT 12 /* execute write complete event */ -#define BTA_GATTC_ACL_EVT 13 /* ACL up event */ -#define BTA_GATTC_CANCEL_OPEN_EVT 14 /* cancel open event */ -#define BTA_GATTC_SRVC_CHG_EVT 15 /* service change event */ -#define BTA_GATTC_ENC_CMPL_CB_EVT 17 /* encryption complete callback event */ -#define BTA_GATTC_CFG_MTU_EVT 18 /* configure MTU complete event */ -#define BTA_GATTC_CONGEST_EVT 24 /* Congestion event */ +#define BTA_GATTC_REG_EVT 0 /* GATT client is registered. */ +#define BTA_GATTC_DEREG_EVT 1 /* GATT client deregistered event */ +#define BTA_GATTC_OPEN_EVT 2 /* GATTC open request status event */ +#define BTA_GATTC_CLOSE_EVT 5 /* GATTC close request status event */ +#define BTA_GATTC_SEARCH_CMPL_EVT 6 /* GATT discovery complete event */ +#define BTA_GATTC_SEARCH_RES_EVT 7 /* GATT discovery result event */ +#define BTA_GATTC_NOTIF_EVT 10 /* GATT attribute notification event */ +#define BTA_GATTC_EXEC_EVT 12 /* execute write complete event */ +#define BTA_GATTC_ACL_EVT 13 /* ACL up event */ +#define BTA_GATTC_CANCEL_OPEN_EVT 14 /* cancel open event */ +#define BTA_GATTC_SRVC_CHG_EVT 15 /* service change event */ +#define BTA_GATTC_ENC_CMPL_CB_EVT 17 /* encryption complete callback event */ +#define BTA_GATTC_CFG_MTU_EVT 18 /* configure MTU complete event */ +#define BTA_GATTC_CONGEST_EVT 24 /* Congestion event */ typedef uint8_t tBTA_GATTC_EVT; typedef tGATT_IF tBTA_GATTC_IF; -typedef struct -{ - uint16_t unit; /* as UUIUD defined by SIG */ - uint16_t descr; /* as UUID as defined by SIG */ - tGATT_FORMAT format; - int8_t exp; - uint8_t name_spc; /* The name space of the description */ -}tBTA_GATT_CHAR_PRES; +typedef struct { + uint16_t unit; /* as UUIUD defined by SIG */ + uint16_t descr; /* as UUID as defined by SIG */ + tGATT_FORMAT format; + int8_t exp; + uint8_t name_spc; /* The name space of the description */ +} tBTA_GATT_CHAR_PRES; -#define BTA_GATT_CLT_CONFIG_NONE GATT_CLT_CONFIG_NONE /* 0x0000 */ -#define BTA_GATT_CLT_CONFIG_NOTIFICATION GATT_CLT_CONFIG_NOTIFICATION /* 0x0001 */ -#define BTA_GATT_CLT_CONFIG_INDICATION GATT_CLT_CONFIG_INDICATION /* 0x0002 */ -typedef uint16_t tBTA_GATT_CLT_CHAR_CONFIG; +#define BTA_GATT_CLT_CONFIG_NONE GATT_CLT_CONFIG_NONE /* 0x0000 */ +#define BTA_GATT_CLT_CONFIG_NOTIFICATION \ + GATT_CLT_CONFIG_NOTIFICATION /* 0x0001 */ +#define BTA_GATT_CLT_CONFIG_INDICATION GATT_CLT_CONFIG_INDICATION /* 0x0002 */ +typedef uint16_t tBTA_GATT_CLT_CHAR_CONFIG; /* characteristic descriptor: server configuration value */ -#define BTA_GATT_SVR_CONFIG_NONE GATT_SVR_CONFIG_NONE /* 0x0000 */ -#define BTA_GATT_SVR_CONFIG_BROADCAST GATT_SVR_CONFIG_BROADCAST /* 0x0001 */ -typedef uint16_t tBTA_GATT_SVR_CHAR_CONFIG; +#define BTA_GATT_SVR_CONFIG_NONE GATT_SVR_CONFIG_NONE /* 0x0000 */ +#define BTA_GATT_SVR_CONFIG_BROADCAST GATT_SVR_CONFIG_BROADCAST /* 0x0001 */ +typedef uint16_t tBTA_GATT_SVR_CHAR_CONFIG; /* Characteristic Aggregate Format attribute value */ -#define BTA_GATT_AGGR_HANDLE_NUM_MAX 10 -typedef struct -{ - uint8_t num_handle; - uint16_t handle_list[BTA_GATT_AGGR_HANDLE_NUM_MAX]; +#define BTA_GATT_AGGR_HANDLE_NUM_MAX 10 +typedef struct { + uint8_t num_handle; + uint16_t handle_list[BTA_GATT_AGGR_HANDLE_NUM_MAX]; } tBTA_GATT_CHAR_AGGRE; -typedef tGATT_VALID_RANGE tBTA_GATT_VALID_RANGE; +typedef tGATT_VALID_RANGE tBTA_GATT_VALID_RANGE; -typedef struct -{ - uint16_t len; - uint8_t *p_value; -}tBTA_GATT_UNFMT; +typedef struct { + uint16_t len; + uint8_t* p_value; +} tBTA_GATT_UNFMT; -#define BTA_GATT_MAX_ATTR_LEN GATT_MAX_ATTR_LEN +#define BTA_GATT_MAX_ATTR_LEN GATT_MAX_ATTR_LEN -#define BTA_GATTC_TYPE_WRITE GATT_WRITE -#define BTA_GATTC_TYPE_WRITE_NO_RSP GATT_WRITE_NO_RSP +#define BTA_GATTC_TYPE_WRITE GATT_WRITE +#define BTA_GATTC_TYPE_WRITE_NO_RSP GATT_WRITE_NO_RSP typedef uint8_t tBTA_GATTC_WRITE_TYPE; -#define BTA_GATT_CONN_UNKNOWN 0 -#define BTA_GATT_CONN_L2C_FAILURE GATT_CONN_L2C_FAILURE /* general l2cap resource failure */ -#define BTA_GATT_CONN_TIMEOUT GATT_CONN_TIMEOUT /* 0x08 connection timeout */ -#define BTA_GATT_CONN_TERMINATE_PEER_USER GATT_CONN_TERMINATE_PEER_USER /* 0x13 connection terminate by peer user */ -#define BTA_GATT_CONN_TERMINATE_LOCAL_HOST GATT_CONN_TERMINATE_LOCAL_HOST/* 0x16 connectionterminated by local host */ -#define BTA_GATT_CONN_FAIL_ESTABLISH GATT_CONN_FAIL_ESTABLISH /* 0x03E connection fail to establish */ -#define BTA_GATT_CONN_LMP_TIMEOUT GATT_CONN_LMP_TIMEOUT /* 0x22 connection fail for LMP response tout */ -#define BTA_GATT_CONN_CANCEL GATT_CONN_CANCEL /* 0x0100 L2CAP connection cancelled */ -#define BTA_GATT_CONN_NONE 0x0101 /* 0x0101 no connection to cancel */ +#define BTA_GATT_CONN_UNKNOWN 0 +#define BTA_GATT_CONN_L2C_FAILURE \ + GATT_CONN_L2C_FAILURE /* general l2cap resource failure */ +#define BTA_GATT_CONN_TIMEOUT GATT_CONN_TIMEOUT /* 0x08 connection timeout */ +#define BTA_GATT_CONN_TERMINATE_PEER_USER \ + GATT_CONN_TERMINATE_PEER_USER /* 0x13 connection terminate by peer user */ +#define BTA_GATT_CONN_TERMINATE_LOCAL_HOST \ + GATT_CONN_TERMINATE_LOCAL_HOST /* 0x16 connectionterminated by local host */ +#define BTA_GATT_CONN_FAIL_ESTABLISH \ + GATT_CONN_FAIL_ESTABLISH /* 0x03E connection fail to establish */ +#define BTA_GATT_CONN_LMP_TIMEOUT \ + GATT_CONN_LMP_TIMEOUT /* 0x22 connection fail for LMP response tout */ +#define BTA_GATT_CONN_CANCEL \ + GATT_CONN_CANCEL /* 0x0100 L2CAP connection cancelled */ +#define BTA_GATT_CONN_NONE 0x0101 /* 0x0101 no connection to cancel */ typedef uint16_t tBTA_GATT_REASON; -#define BTA_GATTC_MULTI_MAX GATT_MAX_READ_MULTI_HANDLES +#define BTA_GATTC_MULTI_MAX GATT_MAX_READ_MULTI_HANDLES -typedef struct -{ - uint8_t num_attr; - uint16_t handles[BTA_GATTC_MULTI_MAX]; -}tBTA_GATTC_MULTI; +typedef struct { + uint8_t num_attr; + uint16_t handles[BTA_GATTC_MULTI_MAX]; +} tBTA_GATTC_MULTI; -#define BTA_GATT_AUTH_REQ_NONE GATT_AUTH_REQ_NONE -#define BTA_GATT_AUTH_REQ_NO_MITM GATT_AUTH_REQ_NO_MITM /* unauthenticated encryption */ -#define BTA_GATT_AUTH_REQ_MITM GATT_AUTH_REQ_MITM /* authenticated encryption */ +#define BTA_GATT_AUTH_REQ_NONE GATT_AUTH_REQ_NONE +#define BTA_GATT_AUTH_REQ_NO_MITM \ + GATT_AUTH_REQ_NO_MITM /* unauthenticated encryption */ +#define BTA_GATT_AUTH_REQ_MITM \ + GATT_AUTH_REQ_MITM /* authenticated encryption \ + */ #define BTA_GATT_AUTH_REQ_SIGNED_NO_MITM GATT_AUTH_REQ_SIGNED_NO_MITM -#define BTA_GATT_AUTH_REQ_SIGNED_MITM GATT_AUTH_REQ_SIGNED_MITM +#define BTA_GATT_AUTH_REQ_SIGNED_MITM GATT_AUTH_REQ_SIGNED_MITM typedef tGATT_AUTH_REQ tBTA_GATT_AUTH_REQ; -enum -{ - BTA_GATTC_ATTR_TYPE_INCL_SRVC, - BTA_GATTC_ATTR_TYPE_CHAR, - BTA_GATTC_ATTR_TYPE_CHAR_DESCR, - BTA_GATTC_ATTR_TYPE_SRVC +enum { + BTA_GATTC_ATTR_TYPE_INCL_SRVC, + BTA_GATTC_ATTR_TYPE_CHAR, + BTA_GATTC_ATTR_TYPE_CHAR_DESCR, + BTA_GATTC_ATTR_TYPE_SRVC }; typedef uint8_t tBTA_GATTC_ATTR_TYPE; - -typedef struct -{ - tBT_UUID uuid; - uint16_t s_handle; - uint16_t e_handle; /* used for service only */ - uint8_t attr_type; - uint8_t id; - uint8_t prop; /* used when attribute type is characteristic */ - bool is_primary; /* used when attribute type is service */ - uint16_t incl_srvc_handle; /* used when attribute type is included service */ -}tBTA_GATTC_NV_ATTR; +typedef struct { + tBT_UUID uuid; + uint16_t s_handle; + uint16_t e_handle; /* used for service only */ + uint8_t attr_type; + uint8_t id; + uint8_t prop; /* used when attribute type is characteristic */ + bool is_primary; /* used when attribute type is service */ + uint16_t incl_srvc_handle; /* used when attribute type is included service */ +} tBTA_GATTC_NV_ATTR; /* callback data structure */ -typedef struct -{ - tBTA_GATT_STATUS status; - tBTA_GATTC_IF client_if; - tBT_UUID app_uuid; -}tBTA_GATTC_REG; - -typedef struct -{ - uint16_t conn_id; - tBTA_GATT_STATUS status; - uint16_t handle; - uint16_t len; - uint8_t value[BTA_GATT_MAX_ATTR_LEN]; -}tBTA_GATTC_READ; - -typedef struct -{ - uint16_t conn_id; - tBTA_GATT_STATUS status; - uint16_t handle; -}tBTA_GATTC_WRITE; - -typedef struct -{ - uint16_t conn_id; - tBTA_GATT_STATUS status; -}tBTA_GATTC_EXEC_CMPL; - -typedef struct -{ - uint16_t conn_id; - tBTA_GATT_STATUS status; -}tBTA_GATTC_SEARCH_CMPL; - -typedef struct -{ - uint16_t conn_id; - tBTA_GATT_ID service_uuid; -}tBTA_GATTC_SRVC_RES; - -typedef struct -{ - uint16_t conn_id; - tBTA_GATT_STATUS status; - uint16_t mtu; -}tBTA_GATTC_CFG_MTU; - -typedef struct -{ - tBTA_GATT_STATUS status; - uint16_t conn_id; - tBTA_GATTC_IF client_if; - BD_ADDR remote_bda; - tBTA_TRANSPORT transport; - uint16_t mtu; -}tBTA_GATTC_OPEN; - -typedef struct -{ - tBTA_GATT_STATUS status; - uint16_t conn_id; - tBTA_GATTC_IF client_if; - BD_ADDR remote_bda; - tBTA_GATT_REASON reason; /* disconnect reason code, not useful when connect event is reported */ -}tBTA_GATTC_CLOSE; - -typedef struct -{ - uint16_t conn_id; - BD_ADDR bda; - uint16_t handle; - uint16_t len; - uint8_t value[BTA_GATT_MAX_ATTR_LEN]; - bool is_notify; -}tBTA_GATTC_NOTIFY; - -typedef struct -{ - uint16_t conn_id; - bool congested; /* congestion indicator */ -}tBTA_GATTC_CONGEST; - -typedef struct -{ - tBTA_GATT_STATUS status; - tBTA_GATTC_IF client_if; - uint16_t conn_id; - BD_ADDR remote_bda; -}tBTA_GATTC_OPEN_CLOSE; - -typedef struct -{ - tBTA_GATTC_IF client_if; - BD_ADDR remote_bda; -}tBTA_GATTC_ENC_CMPL_CB; - -typedef union -{ - tBTA_GATT_STATUS status; - - tBTA_GATTC_SEARCH_CMPL search_cmpl; /* discovery complete */ - tBTA_GATTC_SRVC_RES srvc_res; /* discovery result */ - tBTA_GATTC_REG reg_oper; /* registration data */ - tBTA_GATTC_OPEN open; - tBTA_GATTC_CLOSE close; - tBTA_GATTC_READ read; /* read attribute/descriptor data */ - tBTA_GATTC_WRITE write; /* write complete data */ - tBTA_GATTC_EXEC_CMPL exec_cmpl; /* execute complete */ - tBTA_GATTC_NOTIFY notify; /* notification/indication event data */ - tBTA_GATTC_ENC_CMPL_CB enc_cmpl; - BD_ADDR remote_bda; /* service change event */ - tBTA_GATTC_CFG_MTU cfg_mtu; /* configure MTU operation */ - tBTA_GATTC_CONGEST congest; +typedef struct { + tBTA_GATT_STATUS status; + tBTA_GATTC_IF client_if; + tBT_UUID app_uuid; +} tBTA_GATTC_REG; + +typedef struct { + uint16_t conn_id; + tBTA_GATT_STATUS status; + uint16_t handle; + uint16_t len; + uint8_t value[BTA_GATT_MAX_ATTR_LEN]; +} tBTA_GATTC_READ; + +typedef struct { + uint16_t conn_id; + tBTA_GATT_STATUS status; + uint16_t handle; +} tBTA_GATTC_WRITE; + +typedef struct { + uint16_t conn_id; + tBTA_GATT_STATUS status; +} tBTA_GATTC_EXEC_CMPL; + +typedef struct { + uint16_t conn_id; + tBTA_GATT_STATUS status; +} tBTA_GATTC_SEARCH_CMPL; + +typedef struct { + uint16_t conn_id; + tBTA_GATT_ID service_uuid; +} tBTA_GATTC_SRVC_RES; + +typedef struct { + uint16_t conn_id; + tBTA_GATT_STATUS status; + uint16_t mtu; +} tBTA_GATTC_CFG_MTU; + +typedef struct { + tBTA_GATT_STATUS status; + uint16_t conn_id; + tBTA_GATTC_IF client_if; + BD_ADDR remote_bda; + tBTA_TRANSPORT transport; + uint16_t mtu; +} tBTA_GATTC_OPEN; + +typedef struct { + tBTA_GATT_STATUS status; + uint16_t conn_id; + tBTA_GATTC_IF client_if; + BD_ADDR remote_bda; + tBTA_GATT_REASON reason; /* disconnect reason code, not useful when connect + event is reported */ +} tBTA_GATTC_CLOSE; + +typedef struct { + uint16_t conn_id; + BD_ADDR bda; + uint16_t handle; + uint16_t len; + uint8_t value[BTA_GATT_MAX_ATTR_LEN]; + bool is_notify; +} tBTA_GATTC_NOTIFY; + +typedef struct { + uint16_t conn_id; + bool congested; /* congestion indicator */ +} tBTA_GATTC_CONGEST; + +typedef struct { + tBTA_GATT_STATUS status; + tBTA_GATTC_IF client_if; + uint16_t conn_id; + BD_ADDR remote_bda; +} tBTA_GATTC_OPEN_CLOSE; + +typedef struct { + tBTA_GATTC_IF client_if; + BD_ADDR remote_bda; +} tBTA_GATTC_ENC_CMPL_CB; + +typedef union { + tBTA_GATT_STATUS status; + + tBTA_GATTC_SEARCH_CMPL search_cmpl; /* discovery complete */ + tBTA_GATTC_SRVC_RES srvc_res; /* discovery result */ + tBTA_GATTC_REG reg_oper; /* registration data */ + tBTA_GATTC_OPEN open; + tBTA_GATTC_CLOSE close; + tBTA_GATTC_READ read; /* read attribute/descriptor data */ + tBTA_GATTC_WRITE write; /* write complete data */ + tBTA_GATTC_EXEC_CMPL exec_cmpl; /* execute complete */ + tBTA_GATTC_NOTIFY notify; /* notification/indication event data */ + tBTA_GATTC_ENC_CMPL_CB enc_cmpl; + BD_ADDR remote_bda; /* service change event */ + tBTA_GATTC_CFG_MTU cfg_mtu; /* configure MTU operation */ + tBTA_GATTC_CONGEST congest; } tBTA_GATTC; /* GATTC enable callback function */ -typedef void (tBTA_GATTC_ENB_CBACK)(tBTA_GATT_STATUS status); +typedef void(tBTA_GATTC_ENB_CBACK)(tBTA_GATT_STATUS status); /* Client callback function */ -typedef void (tBTA_GATTC_CBACK)(tBTA_GATTC_EVT event, tBTA_GATTC *p_data); - +typedef void(tBTA_GATTC_CBACK)(tBTA_GATTC_EVT event, tBTA_GATTC* p_data); /* GATT Server Data Structure */ /* Server callback function events */ -#define BTA_GATTS_REG_EVT 0 -#define BTA_GATTS_READ_CHARACTERISTIC_EVT GATTS_REQ_TYPE_READ_CHARACTERISTIC /* 1 */ -#define BTA_GATTS_READ_DESCRIPTOR_EVT GATTS_REQ_TYPE_READ_DESCRIPTOR /* 2 */ -#define BTA_GATTS_WRITE_CHARACTERISTIC_EVT GATTS_REQ_TYPE_WRITE_CHARACTERISTIC /* 3 */ -#define BTA_GATTS_WRITE_DESCRIPTOR_EVT GATTS_REQ_TYPE_WRITE_DESCRIPTOR /* 4 */ -#define BTA_GATTS_EXEC_WRITE_EVT GATTS_REQ_TYPE_WRITE_EXEC /* 5 */ -#define BTA_GATTS_MTU_EVT GATTS_REQ_TYPE_MTU /* 6 */ -#define BTA_GATTS_CONF_EVT GATTS_REQ_TYPE_CONF /* 7 */ -#define BTA_GATTS_DEREG_EVT 8 -#define BTA_GATTS_DELELTE_EVT 11 -#define BTA_GATTS_STOP_EVT 13 -#define BTA_GATTS_CONNECT_EVT 14 -#define BTA_GATTS_DISCONNECT_EVT 15 -#define BTA_GATTS_OPEN_EVT 16 -#define BTA_GATTS_CANCEL_OPEN_EVT 17 -#define BTA_GATTS_CLOSE_EVT 18 -#define BTA_GATTS_CONGEST_EVT 20 - -typedef uint8_t tBTA_GATTS_EVT; +#define BTA_GATTS_REG_EVT 0 +#define BTA_GATTS_READ_CHARACTERISTIC_EVT \ + GATTS_REQ_TYPE_READ_CHARACTERISTIC /* 1 */ +#define BTA_GATTS_READ_DESCRIPTOR_EVT GATTS_REQ_TYPE_READ_DESCRIPTOR /* 2 */ +#define BTA_GATTS_WRITE_CHARACTERISTIC_EVT \ + GATTS_REQ_TYPE_WRITE_CHARACTERISTIC /* 3 */ +#define BTA_GATTS_WRITE_DESCRIPTOR_EVT GATTS_REQ_TYPE_WRITE_DESCRIPTOR /* 4 */ +#define BTA_GATTS_EXEC_WRITE_EVT GATTS_REQ_TYPE_WRITE_EXEC /* 5 */ +#define BTA_GATTS_MTU_EVT GATTS_REQ_TYPE_MTU /* 6 */ +#define BTA_GATTS_CONF_EVT GATTS_REQ_TYPE_CONF /* 7 */ +#define BTA_GATTS_DEREG_EVT 8 +#define BTA_GATTS_DELELTE_EVT 11 +#define BTA_GATTS_STOP_EVT 13 +#define BTA_GATTS_CONNECT_EVT 14 +#define BTA_GATTS_DISCONNECT_EVT 15 +#define BTA_GATTS_OPEN_EVT 16 +#define BTA_GATTS_CANCEL_OPEN_EVT 17 +#define BTA_GATTS_CLOSE_EVT 18 +#define BTA_GATTS_CONGEST_EVT 20 + +typedef uint8_t tBTA_GATTS_EVT; typedef tGATT_IF tBTA_GATTS_IF; /* Attribute permissions */ -#define BTA_GATT_PERM_READ GATT_PERM_READ /* bit 0 - 0x0001 */ -#define BTA_GATT_PERM_READ_ENCRYPTED GATT_PERM_READ_ENCRYPTED /* bit 1 - 0x0002 */ -#define BTA_GATT_PERM_READ_ENC_MITM GATT_PERM_READ_ENC_MITM /* bit 2 - 0x0004 */ -#define BTA_GATT_PERM_WRITE GATT_PERM_WRITE /* bit 4 - 0x0010 */ -#define BTA_GATT_PERM_WRITE_ENCRYPTED GATT_PERM_WRITE_ENCRYPTED /* bit 5 - 0x0020 */ -#define BTA_GATT_PERM_WRITE_ENC_MITM GATT_PERM_WRITE_ENC_MITM /* bit 6 - 0x0040 */ -#define BTA_GATT_PERM_WRITE_SIGNED GATT_PERM_WRITE_SIGNED /* bit 7 - 0x0080 */ -#define BTA_GATT_PERM_WRITE_SIGNED_MITM GATT_PERM_WRITE_SIGNED_MITM /* bit 8 - 0x0100 */ +#define BTA_GATT_PERM_READ GATT_PERM_READ /* bit 0 - 0x0001 */ +#define BTA_GATT_PERM_READ_ENCRYPTED \ + GATT_PERM_READ_ENCRYPTED /* bit 1 - 0x0002 */ +#define BTA_GATT_PERM_READ_ENC_MITM \ + GATT_PERM_READ_ENC_MITM /* bit 2 - 0x0004 */ +#define BTA_GATT_PERM_WRITE GATT_PERM_WRITE /* bit 4 - 0x0010 */ +#define BTA_GATT_PERM_WRITE_ENCRYPTED \ + GATT_PERM_WRITE_ENCRYPTED /* bit 5 - 0x0020 */ +#define BTA_GATT_PERM_WRITE_ENC_MITM \ + GATT_PERM_WRITE_ENC_MITM /* bit 6 - 0x0040 */ +#define BTA_GATT_PERM_WRITE_SIGNED \ + GATT_PERM_WRITE_SIGNED /* bit 7 - 0x0080 \ + */ +#define BTA_GATT_PERM_WRITE_SIGNED_MITM \ + GATT_PERM_WRITE_SIGNED_MITM /* bit 8 - 0x0100 */ typedef uint16_t tBTA_GATT_PERM; -#define BTA_GATTS_INVALID_APP 0xff +#define BTA_GATTS_INVALID_APP 0xff -#define BTA_GATTS_INVALID_IF 0 +#define BTA_GATTS_INVALID_IF 0 /* definition of characteristic properties */ -#define BTA_GATT_CHAR_PROP_BIT_BROADCAST GATT_CHAR_PROP_BIT_BROADCAST /* 0x01 */ -#define BTA_GATT_CHAR_PROP_BIT_READ GATT_CHAR_PROP_BIT_READ /* 0x02 */ -#define BTA_GATT_CHAR_PROP_BIT_WRITE_NR GATT_CHAR_PROP_BIT_WRITE_NR /* 0x04 */ -#define BTA_GATT_CHAR_PROP_BIT_WRITE GATT_CHAR_PROP_BIT_WRITE /* 0x08 */ -#define BTA_GATT_CHAR_PROP_BIT_NOTIFY GATT_CHAR_PROP_BIT_NOTIFY /* 0x10 */ -#define BTA_GATT_CHAR_PROP_BIT_INDICATE GATT_CHAR_PROP_BIT_INDICATE /* 0x20 */ -#define BTA_GATT_CHAR_PROP_BIT_AUTH GATT_CHAR_PROP_BIT_AUTH /* 0x40 */ -#define BTA_GATT_CHAR_PROP_BIT_EXT_PROP GATT_CHAR_PROP_BIT_EXT_PROP /* 0x80 */ +#define BTA_GATT_CHAR_PROP_BIT_BROADCAST \ + GATT_CHAR_PROP_BIT_BROADCAST /* 0x01 \ + */ +#define BTA_GATT_CHAR_PROP_BIT_READ GATT_CHAR_PROP_BIT_READ /* 0x02 */ +#define BTA_GATT_CHAR_PROP_BIT_WRITE_NR GATT_CHAR_PROP_BIT_WRITE_NR /* 0x04 */ +#define BTA_GATT_CHAR_PROP_BIT_WRITE GATT_CHAR_PROP_BIT_WRITE /* 0x08 */ +#define BTA_GATT_CHAR_PROP_BIT_NOTIFY GATT_CHAR_PROP_BIT_NOTIFY /* 0x10 */ +#define BTA_GATT_CHAR_PROP_BIT_INDICATE GATT_CHAR_PROP_BIT_INDICATE /* 0x20 */ +#define BTA_GATT_CHAR_PROP_BIT_AUTH GATT_CHAR_PROP_BIT_AUTH /* 0x40 */ +#define BTA_GATT_CHAR_PROP_BIT_EXT_PROP GATT_CHAR_PROP_BIT_EXT_PROP /* 0x80 */ typedef uint8_t tBTA_GATT_CHAR_PROP; #ifndef BTA_GATTC_CHAR_DESCR_MAX -#define BTA_GATTC_CHAR_DESCR_MAX 7 +#define BTA_GATTC_CHAR_DESCR_MAX 7 #endif /*********************** NV callback Data Definitions ********************** */ -typedef struct -{ - tBT_UUID app_uuid128; - tBT_UUID svc_uuid; - uint16_t svc_inst; - uint16_t s_handle; - uint16_t e_handle; - bool is_primary; /* primary service or secondary */ +typedef struct { + tBT_UUID app_uuid128; + tBT_UUID svc_uuid; + uint16_t svc_inst; + uint16_t s_handle; + uint16_t e_handle; + bool is_primary; /* primary service or secondary */ } tBTA_GATTS_HNDL_RANGE; -#define BTA_GATTS_SRV_CHG_CMD_ADD_CLIENT GATTS_SRV_CHG_CMD_ADD_CLIENT -#define BTA_GATTS_SRV_CHG_CMD_UPDATE_CLIENT GATTS_SRV_CHG_CMD_UPDATE_CLIENT -#define BTA_GATTS_SRV_CHG_CMD_REMOVE_CLIENT GATTS_SRV_CHG_CMD_REMOVE_CLIENT -#define BTA_GATTS_SRV_CHG_CMD_READ_NUM_CLENTS GATTS_SRV_CHG_CMD_READ_NUM_CLENTS -#define BTA_GATTS_SRV_CHG_CMD_READ_CLENT GATTS_SRV_CHG_CMD_READ_CLENT +#define BTA_GATTS_SRV_CHG_CMD_ADD_CLIENT GATTS_SRV_CHG_CMD_ADD_CLIENT +#define BTA_GATTS_SRV_CHG_CMD_UPDATE_CLIENT GATTS_SRV_CHG_CMD_UPDATE_CLIENT +#define BTA_GATTS_SRV_CHG_CMD_REMOVE_CLIENT GATTS_SRV_CHG_CMD_REMOVE_CLIENT +#define BTA_GATTS_SRV_CHG_CMD_READ_NUM_CLENTS GATTS_SRV_CHG_CMD_READ_NUM_CLENTS +#define BTA_GATTS_SRV_CHG_CMD_READ_CLENT GATTS_SRV_CHG_CMD_READ_CLENT typedef tGATTS_SRV_CHG_CMD tBTA_GATTS_SRV_CHG_CMD; -typedef tGATTS_SRV_CHG tBTA_GATTS_SRV_CHG; +typedef tGATTS_SRV_CHG tBTA_GATTS_SRV_CHG; typedef tGATTS_SRV_CHG_REQ tBTA_GATTS_SRV_CHG_REQ; typedef tGATTS_SRV_CHG_RSP tBTA_GATTS_SRV_CHG_RSP; -#define BTA_GATT_TRANSPORT_LE GATT_TRANSPORT_LE -#define BTA_GATT_TRANSPORT_BR_EDR GATT_TRANSPORT_BR_EDR -#define BTA_GATT_TRANSPORT_LE_BR_EDR GATT_TRANSPORT_LE_BR_EDR +#define BTA_GATT_TRANSPORT_LE GATT_TRANSPORT_LE +#define BTA_GATT_TRANSPORT_BR_EDR GATT_TRANSPORT_BR_EDR +#define BTA_GATT_TRANSPORT_LE_BR_EDR GATT_TRANSPORT_LE_BR_EDR typedef uint8_t tBTA_GATT_TRANSPORT; /* attribute value */ @@ -439,8 +438,8 @@ typedef tGATT_VALUE tBTA_GATT_VALUE; typedef tGATTS_RSP tBTA_GATTS_RSP; /* attribute request data from the client */ -#define BTA_GATT_PREP_WRITE_CANCEL 0x00 -#define BTA_GATT_PREP_WRITE_EXEC 0x01 +#define BTA_GATT_PREP_WRITE_CANCEL 0x00 +#define BTA_GATT_PREP_WRITE_EXEC 0x01 typedef tGATT_EXEC_FLAG tBTA_GATT_EXEC_FLAG; /* read request always based on UUID */ @@ -452,114 +451,100 @@ typedef tGATT_WRITE_REQ tBTA_GATT_WRITE_REQ; /* callback data for server access request from client */ typedef tGATTS_DATA tBTA_GATTS_REQ_DATA; -typedef struct -{ - tBTA_GATT_STATUS status; - BD_ADDR remote_bda; - uint32_t trans_id; - uint16_t conn_id; - tBTA_GATTS_REQ_DATA *p_data; -}tBTA_GATTS_REQ; - -typedef struct -{ - tBTA_GATTS_IF server_if; - tBTA_GATT_STATUS status; - tBT_UUID uuid; -}tBTA_GATTS_REG_OPER; - - -typedef struct -{ - tBTA_GATTS_IF server_if; - uint16_t service_id; - uint16_t svc_instance; - bool is_primary; - tBTA_GATT_STATUS status; - tBT_UUID uuid; -}tBTA_GATTS_CREATE; - -typedef struct -{ - tBTA_GATTS_IF server_if; - uint16_t service_id; - tBTA_GATT_STATUS status; -}tBTA_GATTS_SRVC_OPER; - - -typedef struct -{ - tBTA_GATTS_IF server_if; - BD_ADDR remote_bda; - uint16_t conn_id; - tBTA_GATT_REASON reason; /* report disconnect reason */ - tBTA_GATT_TRANSPORT transport; -}tBTA_GATTS_CONN; - -typedef struct -{ - uint16_t conn_id; - bool congested; /* report channel congestion indicator */ -}tBTA_GATTS_CONGEST; - -typedef struct -{ - uint16_t conn_id; /* connection ID */ - tBTA_GATT_STATUS status; /* notification/indication status */ -}tBTA_GATTS_CONF; +typedef struct { + tBTA_GATT_STATUS status; + BD_ADDR remote_bda; + uint32_t trans_id; + uint16_t conn_id; + tBTA_GATTS_REQ_DATA* p_data; +} tBTA_GATTS_REQ; + +typedef struct { + tBTA_GATTS_IF server_if; + tBTA_GATT_STATUS status; + tBT_UUID uuid; +} tBTA_GATTS_REG_OPER; + +typedef struct { + tBTA_GATTS_IF server_if; + uint16_t service_id; + uint16_t svc_instance; + bool is_primary; + tBTA_GATT_STATUS status; + tBT_UUID uuid; +} tBTA_GATTS_CREATE; + +typedef struct { + tBTA_GATTS_IF server_if; + uint16_t service_id; + tBTA_GATT_STATUS status; +} tBTA_GATTS_SRVC_OPER; + +typedef struct { + tBTA_GATTS_IF server_if; + BD_ADDR remote_bda; + uint16_t conn_id; + tBTA_GATT_REASON reason; /* report disconnect reason */ + tBTA_GATT_TRANSPORT transport; +} tBTA_GATTS_CONN; + +typedef struct { + uint16_t conn_id; + bool congested; /* report channel congestion indicator */ +} tBTA_GATTS_CONGEST; + +typedef struct { + uint16_t conn_id; /* connection ID */ + tBTA_GATT_STATUS status; /* notification/indication status */ +} tBTA_GATTS_CONF; /* GATTS callback data */ -typedef union -{ - tBTA_GATTS_REG_OPER reg_oper; - tBTA_GATTS_CREATE create; - tBTA_GATTS_SRVC_OPER srvc_oper; - tBTA_GATT_STATUS status; /* BTA_GATTS_LISTEN_EVT */ - tBTA_GATTS_REQ req_data; - tBTA_GATTS_CONN conn; /* BTA_GATTS_CONN_EVT */ - tBTA_GATTS_CONGEST congest; /* BTA_GATTS_CONGEST_EVT callback data */ - tBTA_GATTS_CONF confirm; /* BTA_GATTS_CONF_EVT callback data */ -}tBTA_GATTS; +typedef union { + tBTA_GATTS_REG_OPER reg_oper; + tBTA_GATTS_CREATE create; + tBTA_GATTS_SRVC_OPER srvc_oper; + tBTA_GATT_STATUS status; /* BTA_GATTS_LISTEN_EVT */ + tBTA_GATTS_REQ req_data; + tBTA_GATTS_CONN conn; /* BTA_GATTS_CONN_EVT */ + tBTA_GATTS_CONGEST congest; /* BTA_GATTS_CONGEST_EVT callback data */ + tBTA_GATTS_CONF confirm; /* BTA_GATTS_CONF_EVT callback data */ +} tBTA_GATTS; /* GATTS enable callback function */ -typedef void (tBTA_GATTS_ENB_CBACK)(tBTA_GATT_STATUS status); +typedef void(tBTA_GATTS_ENB_CBACK)(tBTA_GATT_STATUS status); /* Server callback function */ -typedef void (tBTA_GATTS_CBACK)(tBTA_GATTS_EVT event, tBTA_GATTS *p_data); - -typedef struct -{ - tBT_UUID uuid; - bool is_primary; - uint16_t handle; - uint16_t s_handle; - uint16_t e_handle; - list_t *characteristics; /* list of tBTA_GATTC_CHARACTERISTIC */ - list_t *included_svc; /* list of tBTA_GATTC_INCLUDED_SVC */ +typedef void(tBTA_GATTS_CBACK)(tBTA_GATTS_EVT event, tBTA_GATTS* p_data); + +typedef struct { + tBT_UUID uuid; + bool is_primary; + uint16_t handle; + uint16_t s_handle; + uint16_t e_handle; + list_t* characteristics; /* list of tBTA_GATTC_CHARACTERISTIC */ + list_t* included_svc; /* list of tBTA_GATTC_INCLUDED_SVC */ } __attribute__((packed)) tBTA_GATTC_SERVICE; -typedef struct -{ - tBT_UUID uuid; - uint16_t handle; - tBTA_GATT_CHAR_PROP properties; - tBTA_GATTC_SERVICE *service; /* owning service*/ - list_t *descriptors; /* list of tBTA_GATTC_DESCRIPTOR */ +typedef struct { + tBT_UUID uuid; + uint16_t handle; + tBTA_GATT_CHAR_PROP properties; + tBTA_GATTC_SERVICE* service; /* owning service*/ + list_t* descriptors; /* list of tBTA_GATTC_DESCRIPTOR */ } __attribute__((packed)) tBTA_GATTC_CHARACTERISTIC; -typedef struct -{ - tBT_UUID uuid; - uint16_t handle; - tBTA_GATTC_CHARACTERISTIC *characteristic; /* owning characteristic */ +typedef struct { + tBT_UUID uuid; + uint16_t handle; + tBTA_GATTC_CHARACTERISTIC* characteristic; /* owning characteristic */ } __attribute__((packed)) tBTA_GATTC_DESCRIPTOR; -typedef struct -{ - tBT_UUID uuid; - uint16_t handle; - tBTA_GATTC_SERVICE *owning_service; /* owning service*/ - tBTA_GATTC_SERVICE *included_service; +typedef struct { + tBT_UUID uuid; + uint16_t handle; + tBTA_GATTC_SERVICE* owning_service; /* owning service*/ + tBTA_GATTC_SERVICE* included_service; } __attribute__((packed)) tBTA_GATTC_INCLUDED_SVC; /***************************************************************************** @@ -596,7 +581,8 @@ extern void BTA_GATTC_Disable(void); * Returns None * ******************************************************************************/ -extern void BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb); +extern void BTA_GATTC_AppRegister(tBT_UUID* p_app_uuid, + tBTA_GATTC_CBACK* p_client_cb); /******************************************************************************* * @@ -610,7 +596,7 @@ extern void BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_clie * Returns None * ******************************************************************************/ -extern void BTA_GATTC_AppDeregister (tBTA_GATTC_IF client_if); +extern void BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if); /******************************************************************************* * @@ -643,7 +629,8 @@ extern void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, * Returns void * ******************************************************************************/ -extern void BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, bool is_direct); +extern void BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, + bool is_direct); /******************************************************************************* * @@ -663,24 +650,29 @@ extern void BTA_GATTC_Close(uint16_t conn_id); * Function BTA_GATTC_ServiceSearchRequest * * Description This function is called to request a GATT service discovery - * on a GATT server. This function report service search result - * by a callback event, and followed by a service search complete + * on a GATT server. This function report service search + *result + * by a callback event, and followed by a service search + *complete * event. * * Parameters conn_id: connection ID. - * p_srvc_uuid: a UUID of the service application is interested in. + * p_srvc_uuid: a UUID of the service application is interested + *in. * If Null, discover for all services. * * Returns None * ******************************************************************************/ -extern void BTA_GATTC_ServiceSearchRequest(uint16_t conn_id, tBT_UUID *p_srvc_uuid); +extern void BTA_GATTC_ServiceSearchRequest(uint16_t conn_id, + tBT_UUID* p_srvc_uuid); /******************************************************************************* * * Function BTA_GATTC_GetServices * - * Description This function is called to find the services on the given server. + * Description This function is called to find the services on the given + *server. * * Parameters conn_id: connection ID which identify the server. * @@ -693,7 +685,8 @@ extern const list_t* BTA_GATTC_GetServices(uint16_t conn_id); * * Function BTA_GATTC_GetCharacteristic * - * Description This function is called to find the characteristic on the given server. + * Description This function is called to find the characteristic on the + *given server. * * Parameters conn_id: connection ID which identify the server. * handle: characteristic handle @@ -701,13 +694,15 @@ extern const list_t* BTA_GATTC_GetServices(uint16_t conn_id); * Returns returns pointer to tBTA_GATTC_CHARACTERISTIC or NULL. * ******************************************************************************/ -extern const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t conn_id, uint16_t handle); +extern const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic( + uint16_t conn_id, uint16_t handle); /******************************************************************************* * * Function BTA_GATTC_GetDescriptor * - * Description This function is called to find the characteristic on the given server. + * Description This function is called to find the characteristic on the + *given server. * * Parameters conn_id: connection ID which identify the server. * handle: descriptor handle @@ -715,7 +710,8 @@ extern const tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t con * Returns returns pointer to tBTA_GATTC_DESCRIPTOR or NULL. * ******************************************************************************/ -extern const tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, uint16_t handle); +extern const tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, + uint16_t handle); /******************************************************************************* * @@ -729,12 +725,15 @@ extern const tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, ui * count: number of elements in db. * ******************************************************************************/ -extern void BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, - btgatt_db_element_t **db, int *count); +extern void BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, + uint16_t end_handle, btgatt_db_element_t** db, + int* count); -typedef void (*GATT_READ_OP_CB)(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, uint16_t len, - uint8_t *value, void* data); -typedef void (*GATT_WRITE_OP_CB)(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, void* data); +typedef void (*GATT_READ_OP_CB)(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, uint16_t len, uint8_t* value, + void* data); +typedef void (*GATT_WRITE_OP_CB)(uint16_t conn_id, tGATT_STATUS status, + uint16_t handle, void* data); /******************************************************************************* * @@ -748,7 +747,8 @@ typedef void (*GATT_WRITE_OP_CB)(uint16_t conn_id, tGATT_STATUS status, uint16_t * Returns None * ******************************************************************************/ -void BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, tBTA_GATT_AUTH_REQ auth_req, +void BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, + tBTA_GATT_AUTH_REQ auth_req, GATT_READ_OP_CB callback, void* cb_data); /******************************************************************************* @@ -763,8 +763,9 @@ void BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, tBTA_GATT_A * Returns None * ******************************************************************************/ -void BTA_GATTC_ReadCharDescr (uint16_t conn_id, uint16_t handle, tBTA_GATT_AUTH_REQ auth_req, - GATT_READ_OP_CB callback, void* cb_data); +void BTA_GATTC_ReadCharDescr(uint16_t conn_id, uint16_t handle, + tBTA_GATT_AUTH_REQ auth_req, + GATT_READ_OP_CB callback, void* cb_data); /******************************************************************************* * @@ -780,13 +781,11 @@ void BTA_GATTC_ReadCharDescr (uint16_t conn_id, uint16_t handle, tBTA_GATT_AUTH_ * Returns None * ******************************************************************************/ -void BTA_GATTC_WriteCharValue ( uint16_t conn_id, - uint16_t handle, - tBTA_GATTC_WRITE_TYPE write_type, - vector value, - tBTA_GATT_AUTH_REQ auth_req, - GATT_WRITE_OP_CB callback, - void* cb_data); +void BTA_GATTC_WriteCharValue(uint16_t conn_id, uint16_t handle, + tBTA_GATTC_WRITE_TYPE write_type, + vector value, + tBTA_GATT_AUTH_REQ auth_req, + GATT_WRITE_OP_CB callback, void* cb_data); /******************************************************************************* * @@ -801,12 +800,10 @@ void BTA_GATTC_WriteCharValue ( uint16_t conn_id, * Returns None * ******************************************************************************/ -void BTA_GATTC_WriteCharDescr (uint16_t conn_id, - uint16_t handle, - vector value, - tBTA_GATT_AUTH_REQ auth_req, - GATT_WRITE_OP_CB callback, - void* cb_data); +void BTA_GATTC_WriteCharDescr(uint16_t conn_id, uint16_t handle, + vector value, + tBTA_GATT_AUTH_REQ auth_req, + GATT_WRITE_OP_CB callback, void* cb_data); /******************************************************************************* * @@ -820,13 +817,14 @@ void BTA_GATTC_WriteCharDescr (uint16_t conn_id, * Returns None * ******************************************************************************/ -extern void BTA_GATTC_SendIndConfirm (uint16_t conn_id, uint16_t handle); +extern void BTA_GATTC_SendIndConfirm(uint16_t conn_id, uint16_t handle); /******************************************************************************* * * Function BTA_GATTC_RegisterForNotifications * - * Description This function is called to register for notification of a service. + * Description This function is called to register for notification of a + *service. * * Parameters client_if - client interface. * remote_bda - target GATT server. @@ -835,15 +833,15 @@ extern void BTA_GATTC_SendIndConfirm (uint16_t conn_id, uint16_t handle); * Returns OK if registration succeed, otherwise failed. * ******************************************************************************/ -extern tBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF client_if, - const BD_ADDR remote_bda, - uint16_t handle); +extern tBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications( + tBTA_GATTC_IF client_if, const BD_ADDR remote_bda, uint16_t handle); /******************************************************************************* * * Function BTA_GATTC_DeregisterForNotifications * - * Description This function is called to de-register for notification of a servbice. + * Description This function is called to de-register for notification of a + *servbice. * * Parameters client_if - client interface. * remote_bda - target GATT server. @@ -852,15 +850,15 @@ extern tBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF c * Returns OK if deregistration succeed, otherwise failed. * ******************************************************************************/ -extern tBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF client_if, - const BD_ADDR remote_bda, - uint16_t handle); +extern tBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications( + tBTA_GATTC_IF client_if, const BD_ADDR remote_bda, uint16_t handle); /******************************************************************************* * * Function BTA_GATTC_PrepareWrite * - * Description This function is called to prepare write a characteristic value. + * Description This function is called to prepare write a characteristic + *value. * * Parameters conn_id - connection ID. * handle - GATT characteritic handle. @@ -870,19 +868,17 @@ extern tBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF * Returns None * ******************************************************************************/ -extern void BTA_GATTC_PrepareWrite (uint16_t conn_id, - uint16_t handle, - uint16_t offset, - vector value, - tBTA_GATT_AUTH_REQ auth_req, - GATT_WRITE_OP_CB callback, - void* cb_data); +extern void BTA_GATTC_PrepareWrite(uint16_t conn_id, uint16_t handle, + uint16_t offset, vector value, + tBTA_GATT_AUTH_REQ auth_req, + GATT_WRITE_OP_CB callback, void* cb_data); /******************************************************************************* * * Function BTA_GATTC_ExecuteWrite * - * Description This function is called to execute write a prepare write sequence. + * Description This function is called to execute write a prepare write + *sequence. * * Parameters conn_id - connection ID. * is_execute - execute or cancel. @@ -890,7 +886,7 @@ extern void BTA_GATTC_PrepareWrite (uint16_t conn_id, * Returns None * ******************************************************************************/ -extern void BTA_GATTC_ExecuteWrite (uint16_t conn_id, bool is_execute); +extern void BTA_GATTC_ExecuteWrite(uint16_t conn_id, bool is_execute); /******************************************************************************* * @@ -905,10 +901,10 @@ extern void BTA_GATTC_ExecuteWrite (uint16_t conn_id, bool is_execute); * Returns None * ******************************************************************************/ -extern void BTA_GATTC_ReadMultiple(uint16_t conn_id, tBTA_GATTC_MULTI *p_read_multi, +extern void BTA_GATTC_ReadMultiple(uint16_t conn_id, + tBTA_GATTC_MULTI* p_read_multi, tBTA_GATT_AUTH_REQ auth_req); - /******************************************************************************* * * Function BTA_GATTC_Refresh @@ -935,7 +931,7 @@ extern void BTA_GATTC_Refresh(const BD_ADDR remote_bda); * Returns void * ******************************************************************************/ -extern void BTA_GATTC_ConfigureMTU (uint16_t conn_id, uint16_t mtu); +extern void BTA_GATTC_ConfigureMTU(uint16_t conn_id, uint16_t mtu); /******************************************************************************* * BTA GATT Server API @@ -980,8 +976,8 @@ extern void BTA_GATTS_Disable(void); * Returns None * ******************************************************************************/ -extern void BTA_GATTS_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTS_CBACK *p_cback); - +extern void BTA_GATTS_AppRegister(tBT_UUID* p_app_uuid, + tBTA_GATTS_CBACK* p_cback); /******************************************************************************* * @@ -1011,21 +1007,24 @@ extern void BTA_GATTS_AppDeregister(tBTA_GATTS_IF server_if); * service cannot be added. * ******************************************************************************/ -extern uint16_t BTA_GATTS_AddService(tBTA_GATTS_IF server_if, vector &service); +extern uint16_t BTA_GATTS_AddService(tBTA_GATTS_IF server_if, + vector& service); /******************************************************************************* * * Function BTA_GATTS_DeleteService * - * Description This function is called to delete a service. When this is done, - * a callback event BTA_GATTS_DELETE_EVT is report with the status. + * Description This function is called to delete a service. When this is + *done, + * a callback event BTA_GATTS_DELETE_EVT is report with the + *status. * * Parameters service_id: service_id to be deleted. * * Returns returns none. * ******************************************************************************/ -extern void BTA_GATTS_DeleteService(uint16_t service_id); +extern void BTA_GATTS_DeleteService(uint16_t service_id); /******************************************************************************* * @@ -1044,19 +1043,21 @@ extern void BTA_GATTS_StopService(uint16_t service_id); * * Function BTA_GATTS_HandleValueIndication * - * Description This function is called to read a characteristics descriptor. + * Description This function is called to read a characteristics + *descriptor. * * Parameters conn_id - connection identifier. * attr_id - attribute ID to indicate. * value - data to indicate. - * need_confirm - if this indication expects a confirmation or not. + * need_confirm - if this indication expects a confirmation or + *not. * * Returns None * ******************************************************************************/ -extern void BTA_GATTS_HandleValueIndication (uint16_t conn_id, uint16_t attr_id, - vector value, - bool need_confirm); +extern void BTA_GATTS_HandleValueIndication(uint16_t conn_id, uint16_t attr_id, + vector value, + bool need_confirm); /******************************************************************************* * @@ -1072,15 +1073,15 @@ extern void BTA_GATTS_HandleValueIndication (uint16_t conn_id, uint16_t attr_id, * Returns None * ******************************************************************************/ -extern void BTA_GATTS_SendRsp (uint16_t conn_id, uint32_t trans_id, - tBTA_GATT_STATUS status, tBTA_GATTS_RSP *p_msg); - +extern void BTA_GATTS_SendRsp(uint16_t conn_id, uint32_t trans_id, + tBTA_GATT_STATUS status, tBTA_GATTS_RSP* p_msg); /******************************************************************************* * * Function BTA_GATTS_Open * - * Description Open a direct open connection or add a background auto connection + * Description Open a direct open connection or add a background auto + *connection * bd address * * Parameters server_if: server interface. @@ -1093,12 +1094,12 @@ extern void BTA_GATTS_SendRsp (uint16_t conn_id, uint32_t trans_id, extern void BTA_GATTS_Open(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, bool is_direct, tBTA_GATT_TRANSPORT transport); - /******************************************************************************* * * Function BTA_GATTS_CancelOpen * - * Description Cancel a direct open connection or remove a background auto connection + * Description Cancel a direct open connection or remove a background auto + *connection * bd address * * Parameters server_if: server interface. @@ -1108,8 +1109,8 @@ extern void BTA_GATTS_Open(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, * Returns void * ******************************************************************************/ -extern void BTA_GATTS_CancelOpen(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, bool is_direct); - +extern void BTA_GATTS_CancelOpen(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, + bool is_direct); /******************************************************************************* * diff --git a/system/bta/include/bta_gatts_co.h b/system/bta/include/bta_gatts_co.h index fe90b2f0e25..c84f4491894 100644 --- a/system/bta/include/bta_gatts_co.h +++ b/system/bta/include/bta_gatts_co.h @@ -34,23 +34,27 @@ extern "C" { * * Function bta_gatts_co_update_handle_range * - * Description This callout function is executed by GATTS when a GATT server + * Description This callout function is executed by GATTS when a GATT + *server * handle range ios to be added or removed. * - * Parameter is_add: true is to add a handle range; otherwise is to delete. + * Parameter is_add: true is to add a handle range; otherwise is to + *delete. * p_hndl_range: handle range. * * Returns void. * ******************************************************************************/ -extern void bta_gatts_co_update_handle_range(bool is_add, tBTA_GATTS_HNDL_RANGE *p_hndl_range); +extern void bta_gatts_co_update_handle_range( + bool is_add, tBTA_GATTS_HNDL_RANGE* p_hndl_range); /******************************************************************************* * * Function bta_gatts_co_srv_chg * * Description This call-out is to read/write/remove service change related - * informaiton. The request consists of the cmd and p_req and the + * informaiton. The request consists of the cmd and p_req and + *the * response is returned in p_rsp * * Parameter cmd - request command @@ -63,14 +67,15 @@ extern void bta_gatts_co_update_handle_range(bool is_add, tBTA_GATTS_HNDL_RANGE * ******************************************************************************/ extern bool bta_gatts_co_srv_chg(tBTA_GATTS_SRV_CHG_CMD cmd, - tBTA_GATTS_SRV_CHG_REQ *p_req, - tBTA_GATTS_SRV_CHG_RSP *p_rsp); + tBTA_GATTS_SRV_CHG_REQ* p_req, + tBTA_GATTS_SRV_CHG_RSP* p_rsp); /******************************************************************************* * * Function bta_gatts_co_load_handle_range * - * Description This callout function is executed by GATTS when a GATT server + * Description This callout function is executed by GATTS when a GATT + *server * handle range is requested to be loaded from NV. * * Parameter @@ -78,8 +83,8 @@ extern bool bta_gatts_co_srv_chg(tBTA_GATTS_SRV_CHG_CMD cmd, * Returns void. * ******************************************************************************/ -extern bool bta_gatts_co_load_handle_range(uint8_t index, - tBTA_GATTS_HNDL_RANGE *p_handle); +extern bool bta_gatts_co_load_handle_range(uint8_t index, + tBTA_GATTS_HNDL_RANGE* p_handle); #ifdef __cplusplus } diff --git a/system/bta/include/bta_hf_client_api.h b/system/bta/include/bta_hf_client_api.h index 84d8531c8d8..bc107e6e93b 100644 --- a/system/bta/include/bta_hf_client_api.h +++ b/system/bta/include/bta_hf_client_api.h @@ -36,211 +36,216 @@ extern "C" { ****************************************************************************/ /* HFP peer (AG) features*/ -#define BTA_HF_CLIENT_PEER_FEAT_3WAY 0x00000001 /* Three-way calling */ -#define BTA_HF_CLIENT_PEER_FEAT_ECNR 0x00000002 /* Echo cancellation and/or noise reduction */ -#define BTA_HF_CLIENT_PEER_FEAT_VREC 0x00000004 /* Voice recognition */ -#define BTA_HF_CLIENT_PEER_INBAND 0x00000008 /* In-band ring tone */ -#define BTA_HF_CLIENT_PEER_VTAG 0x00000010 /* Attach a phone number to a voice tag */ -#define BTA_HF_CLIENT_PEER_REJECT 0x00000020 /* Ability to reject incoming call */ -#define BTA_HF_CLIENT_PEER_ECS 0x00000040 /* Enhanced Call Status */ -#define BTA_HF_CLIENT_PEER_ECC 0x00000080 /* Enhanced Call Control */ -#define BTA_HF_CLIENT_PEER_EXTERR 0x00000100 /* Extended error codes */ -#define BTA_HF_CLIENT_PEER_CODEC 0x00000200 /* Codec Negotiation */ +#define BTA_HF_CLIENT_PEER_FEAT_3WAY 0x00000001 /* Three-way calling */ +#define BTA_HF_CLIENT_PEER_FEAT_ECNR \ + 0x00000002 /* Echo cancellation and/or noise reduction */ +#define BTA_HF_CLIENT_PEER_FEAT_VREC 0x00000004 /* Voice recognition */ +#define BTA_HF_CLIENT_PEER_INBAND 0x00000008 /* In-band ring tone */ +#define BTA_HF_CLIENT_PEER_VTAG \ + 0x00000010 /* Attach a phone number to a voice tag */ +#define BTA_HF_CLIENT_PEER_REJECT \ + 0x00000020 /* Ability to reject incoming call */ +#define BTA_HF_CLIENT_PEER_ECS 0x00000040 /* Enhanced Call Status */ +#define BTA_HF_CLIENT_PEER_ECC 0x00000080 /* Enhanced Call Control */ +#define BTA_HF_CLIENT_PEER_EXTERR 0x00000100 /* Extended error codes */ +#define BTA_HF_CLIENT_PEER_CODEC 0x00000200 /* Codec Negotiation */ typedef uint16_t tBTA_HF_CLIENT_PEER_FEAT; /* HFP HF features */ -#define BTA_HF_CLIENT_FEAT_ECNR 0x00000001 /* Echo cancellation and/or noise reduction */ -#define BTA_HF_CLIENT_FEAT_3WAY 0x00000002 /* Call waiting and three-way calling */ -#define BTA_HF_CLIENT_FEAT_CLI 0x00000004 /* Caller ID presentation capability */ -#define BTA_HF_CLIENT_FEAT_VREC 0x00000008 /* Voice recognition activation */ -#define BTA_HF_CLIENT_FEAT_VOL 0x00000010 /* Remote volume control */ -#define BTA_HF_CLIENT_FEAT_ECS 0x00000020 /* Enhanced Call Status */ -#define BTA_HF_CLIENT_FEAT_ECC 0x00000040 /* Enhanced Call Control */ -#define BTA_HF_CLIENT_FEAT_CODEC 0x00000080 /* Codec Negotiation */ +#define BTA_HF_CLIENT_FEAT_ECNR \ + 0x00000001 /* Echo cancellation and/or noise reduction */ +#define BTA_HF_CLIENT_FEAT_3WAY \ + 0x00000002 /* Call waiting and three-way calling */ +#define BTA_HF_CLIENT_FEAT_CLI \ + 0x00000004 /* Caller ID presentation capability */ +#define BTA_HF_CLIENT_FEAT_VREC 0x00000008 /* Voice recognition activation */ +#define BTA_HF_CLIENT_FEAT_VOL 0x00000010 /* Remote volume control */ +#define BTA_HF_CLIENT_FEAT_ECS 0x00000020 /* Enhanced Call Status */ +#define BTA_HF_CLIENT_FEAT_ECC 0x00000040 /* Enhanced Call Control */ +#define BTA_HF_CLIENT_FEAT_CODEC 0x00000080 /* Codec Negotiation */ /* HFP HF extended call handling - masks not related to any spec */ -#define BTA_HF_CLIENT_CHLD_REL 0x00000001 /* 0 Release waiting call or held calls */ -#define BTA_HF_CLIENT_CHLD_REL_ACC 0x00000002 /* 1 Release active calls and accept other (waiting or held) cal */ -#define BTA_HF_CLIENT_CHLD_REL_X 0x00000004 /* 1x Release x call*/ -#define BTA_HF_CLIENT_CHLD_HOLD_ACC 0x00000008 /* 2 Active calls on hold and accept other call */ -#define BTA_HF_CLIENT_CHLD_PRIV_X 0x00000010 /* 2x Active multiparty call on hold except call x */ -#define BTA_HF_CLIENT_CHLD_MERGE 0x00000020 /* 3 Add held call to multiparty */ -#define BTA_HF_CLIENT_CHLD_MERGE_DETACH 0x00000040 /* 4 Add held call to multiparty */ +#define BTA_HF_CLIENT_CHLD_REL \ + 0x00000001 /* 0 Release waiting call or held calls */ +#define BTA_HF_CLIENT_CHLD_REL_ACC \ + 0x00000002 /* 1 Release active calls and accept other (waiting or held) cal \ + */ +#define BTA_HF_CLIENT_CHLD_REL_X 0x00000004 /* 1x Release x call*/ +#define BTA_HF_CLIENT_CHLD_HOLD_ACC \ + 0x00000008 /* 2 Active calls on hold and accept other call */ +#define BTA_HF_CLIENT_CHLD_PRIV_X \ + 0x00000010 /* 2x Active multiparty call on hold except call x */ +#define BTA_HF_CLIENT_CHLD_MERGE \ + 0x00000020 /* 3 Add held call to multiparty \ + */ +#define BTA_HF_CLIENT_CHLD_MERGE_DETACH \ + 0x00000040 /* 4 Add held call to multiparty */ typedef uint16_t tBTA_HF_CLIENT_CHLD_FEAT; /* HFP AG errors ot OK sent to HF Unit */ -#define BTA_HF_CLIENT_AT_RESULT_OK 0 -#define BTA_HF_CLIENT_AT_RESULT_ERROR 1 -#define BTA_HF_CLIENT_AT_RESULT_NO_CARRIER 2 -#define BTA_HF_CLIENT_AT_RESULT_BUSY 3 -#define BTA_HF_CLIENT_AT_RESULT_NO_ANSWER 4 -#define BTA_HF_CLIENT_AT_RESULT_DELAY 5 -#define BTA_HF_CLIENT_AT_RESULT_BLACKLISTED 6 -#define BTA_HF_CLIENT_AT_RESULT_CME 7 +#define BTA_HF_CLIENT_AT_RESULT_OK 0 +#define BTA_HF_CLIENT_AT_RESULT_ERROR 1 +#define BTA_HF_CLIENT_AT_RESULT_NO_CARRIER 2 +#define BTA_HF_CLIENT_AT_RESULT_BUSY 3 +#define BTA_HF_CLIENT_AT_RESULT_NO_ANSWER 4 +#define BTA_HF_CLIENT_AT_RESULT_DELAY 5 +#define BTA_HF_CLIENT_AT_RESULT_BLACKLISTED 6 +#define BTA_HF_CLIENT_AT_RESULT_CME 7 typedef uint8_t tBTA_HF_CLIENT_AT_RESULT_TYPE; /* HF Client callback events */ -#define BTA_HF_CLIENT_ENABLE_EVT 0 /* HF Client enabled */ -#define BTA_HF_CLIENT_REGISTER_EVT 1 /* HF Client registered */ -#define BTA_HF_CLIENT_OPEN_EVT 2 /* HF Client connection open */ -#define BTA_HF_CLIENT_CLOSE_EVT 3 /* HF Client connection closed */ -#define BTA_HF_CLIENT_CONN_EVT 4 /* Service level connection opened */ -#define BTA_HF_CLIENT_AUDIO_OPEN_EVT 5 /* Audio connection open */ -#define BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT 6 /* Audio connection with mSBC codec open */ -#define BTA_HF_CLIENT_AUDIO_CLOSE_EVT 7 /* Audio connection closed */ -#define BTA_HF_CLIENT_SPK_EVT 8 /* Speaker volume changed */ -#define BTA_HF_CLIENT_MIC_EVT 9 /* Microphone volume changed */ -#define BTA_HF_CLIENT_IND_EVT 10 /* Indicator */ -#define BTA_HF_CLIENT_VOICE_REC_EVT 11 /* AG changed voice recognition setting */ -#define BTA_HF_CLIENT_OPERATOR_NAME_EVT 12 /* Operator name acquired */ -#define BTA_HF_CLIENT_CLIP_EVT 13 /* Calling line identification event */ -#define BTA_HF_CLIENT_CCWA_EVT 14 /* Call waiting notification */ -#define BTA_HF_CLIENT_AT_RESULT_EVT 15 /* Call waiting notification */ -#define BTA_HF_CLIENT_CLCC_EVT 16 /* current call event */ -#define BTA_HF_CLIENT_CNUM_EVT 17 /* subscriber information event */ -#define BTA_HF_CLIENT_BTRH_EVT 18 /* bluetooth response and hold event */ -#define BTA_HF_CLIENT_BSIR_EVT 19 /* in-band ring tone setting changed event */ -#define BTA_HF_CLIENT_BINP_EVT 20 /* binp number event */ -#define BTA_HF_CLIENT_RING_INDICATION 21 /* HF Client ring indication */ -#define BTA_HF_CLIENT_DISABLE_EVT 30 /* HF Client disabled */ +#define BTA_HF_CLIENT_ENABLE_EVT 0 /* HF Client enabled */ +#define BTA_HF_CLIENT_REGISTER_EVT 1 /* HF Client registered */ +#define BTA_HF_CLIENT_OPEN_EVT 2 /* HF Client connection open */ +#define BTA_HF_CLIENT_CLOSE_EVT 3 /* HF Client connection closed */ +#define BTA_HF_CLIENT_CONN_EVT 4 /* Service level connection opened */ +#define BTA_HF_CLIENT_AUDIO_OPEN_EVT 5 /* Audio connection open */ +#define BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT \ + 6 /* Audio connection with mSBC codec open */ +#define BTA_HF_CLIENT_AUDIO_CLOSE_EVT 7 /* Audio connection closed */ +#define BTA_HF_CLIENT_SPK_EVT 8 /* Speaker volume changed */ +#define BTA_HF_CLIENT_MIC_EVT 9 /* Microphone volume changed */ +#define BTA_HF_CLIENT_IND_EVT 10 /* Indicator */ +#define BTA_HF_CLIENT_VOICE_REC_EVT \ + 11 /* AG changed voice recognition setting */ +#define BTA_HF_CLIENT_OPERATOR_NAME_EVT 12 /* Operator name acquired */ +#define BTA_HF_CLIENT_CLIP_EVT 13 /* Calling line identification event */ +#define BTA_HF_CLIENT_CCWA_EVT 14 /* Call waiting notification */ +#define BTA_HF_CLIENT_AT_RESULT_EVT 15 /* Call waiting notification */ +#define BTA_HF_CLIENT_CLCC_EVT 16 /* current call event */ +#define BTA_HF_CLIENT_CNUM_EVT 17 /* subscriber information event */ +#define BTA_HF_CLIENT_BTRH_EVT 18 /* bluetooth response and hold event */ +#define BTA_HF_CLIENT_BSIR_EVT \ + 19 /* in-band ring tone setting changed event \ + */ +#define BTA_HF_CLIENT_BINP_EVT 20 /* binp number event */ +#define BTA_HF_CLIENT_RING_INDICATION 21 /* HF Client ring indication */ +#define BTA_HF_CLIENT_DISABLE_EVT 30 /* HF Client disabled */ typedef uint8_t tBTA_HF_CLIENT_EVT; /* HF Client open status */ -#define BTA_HF_CLIENT_SUCCESS 0 /* Connection successfully opened */ -#define BTA_HF_CLIENT_FAIL_SDP 1 /* Open failed due to SDP */ -#define BTA_HF_CLIENT_FAIL_RFCOMM 2 /* Open failed due to RFCOMM */ -#define BTA_HF_CLIENT_FAIL_RESOURCES 3 /* out of resources failure */ +#define BTA_HF_CLIENT_SUCCESS 0 /* Connection successfully opened */ +#define BTA_HF_CLIENT_FAIL_SDP 1 /* Open failed due to SDP */ +#define BTA_HF_CLIENT_FAIL_RFCOMM 2 /* Open failed due to RFCOMM */ +#define BTA_HF_CLIENT_FAIL_RESOURCES 3 /* out of resources failure */ typedef uint8_t tBTA_HF_CLIENT_STATUS; /* indicator type */ -#define BTA_HF_CLIENT_IND_BATTCH 0 /* Battery charge indicator */ -#define BTA_HF_CLIENT_IND_SIGNAL 1 /* Signal Strength indicator */ -#define BTA_HF_CLIENT_IND_SERVICE 2 /* Service availability indicator */ -#define BTA_HF_CLIENT_IND_CALL 3 /* Standard call status indicator*/ -#define BTA_HF_CLIENT_IND_ROAM 4 /* Roaming status indicator */ -#define BTA_HF_CLIENT_IND_CALLSETUP 5 /* Call setup status indicator */ -#define BTA_HF_CLIENT_IND_CALLHELD 6 /* Call hold status indicator */ +#define BTA_HF_CLIENT_IND_BATTCH 0 /* Battery charge indicator */ +#define BTA_HF_CLIENT_IND_SIGNAL 1 /* Signal Strength indicator */ +#define BTA_HF_CLIENT_IND_SERVICE 2 /* Service availability indicator */ +#define BTA_HF_CLIENT_IND_CALL 3 /* Standard call status indicator*/ +#define BTA_HF_CLIENT_IND_ROAM 4 /* Roaming status indicator */ +#define BTA_HF_CLIENT_IND_CALLSETUP 5 /* Call setup status indicator */ +#define BTA_HF_CLIENT_IND_CALLHELD 6 /* Call hold status indicator */ typedef uint8_t tBTA_HF_CLIENT_IND_TYPE; /* AT commands */ -#define BTA_HF_CLIENT_AT_CMD_VTS 0 -#define BTA_HF_CLIENT_AT_CMD_BTRH 1 -#define BTA_HF_CLIENT_AT_CMD_CHUP 2 -#define BTA_HF_CLIENT_AT_CMD_CHLD 3 -#define BTA_HF_CLIENT_AT_CMD_BCC 4 -#define BTA_HF_CLIENT_AT_CMD_CNUM 5 -#define BTA_HF_CLIENT_AT_CMD_ATA 6 -#define BTA_HF_CLIENT_AT_CMD_COPS 7 -#define BTA_HF_CLIENT_AT_CMD_ATD 8 -#define BTA_HF_CLIENT_AT_CMD_VGM 9 -#define BTA_HF_CLIENT_AT_CMD_VGS 10 -#define BTA_HF_CLIENT_AT_CMD_BVRA 11 -#define BTA_HF_CLIENT_AT_CMD_CLCC 12 -#define BTA_HF_CLIENT_AT_CMD_BINP 13 -#define BTA_HF_CLIENT_AT_CMD_BLDN 14 -#define BTA_HF_CLIENT_AT_CMD_NREC 15 +#define BTA_HF_CLIENT_AT_CMD_VTS 0 +#define BTA_HF_CLIENT_AT_CMD_BTRH 1 +#define BTA_HF_CLIENT_AT_CMD_CHUP 2 +#define BTA_HF_CLIENT_AT_CMD_CHLD 3 +#define BTA_HF_CLIENT_AT_CMD_BCC 4 +#define BTA_HF_CLIENT_AT_CMD_CNUM 5 +#define BTA_HF_CLIENT_AT_CMD_ATA 6 +#define BTA_HF_CLIENT_AT_CMD_COPS 7 +#define BTA_HF_CLIENT_AT_CMD_ATD 8 +#define BTA_HF_CLIENT_AT_CMD_VGM 9 +#define BTA_HF_CLIENT_AT_CMD_VGS 10 +#define BTA_HF_CLIENT_AT_CMD_BVRA 11 +#define BTA_HF_CLIENT_AT_CMD_CLCC 12 +#define BTA_HF_CLIENT_AT_CMD_BINP 13 +#define BTA_HF_CLIENT_AT_CMD_BLDN 14 +#define BTA_HF_CLIENT_AT_CMD_NREC 15 typedef uint8_t tBTA_HF_CLIENT_AT_CMD_TYPE; - /* data associated with BTA_HF_CLIENT_REGISTER_EVT */ -typedef struct -{ - uint16_t handle; - tBTA_HF_CLIENT_STATUS status; +typedef struct { + uint16_t handle; + tBTA_HF_CLIENT_STATUS status; } tBTA_HF_CLIENT_REGISTER; /* data associated with BTA_HF_CLIENT_OPEN_EVT */ -typedef struct -{ - BD_ADDR bd_addr; - tBTA_HF_CLIENT_STATUS status; +typedef struct { + BD_ADDR bd_addr; + tBTA_HF_CLIENT_STATUS status; } tBTA_HF_CLIENT_OPEN; /* data associated with BTA_HF_CLIENT_CONN_EVT */ -typedef struct -{ - tBTA_HF_CLIENT_PEER_FEAT peer_feat; - tBTA_HF_CLIENT_CHLD_FEAT chld_feat; +typedef struct { + tBTA_HF_CLIENT_PEER_FEAT peer_feat; + tBTA_HF_CLIENT_CHLD_FEAT chld_feat; } tBTA_HF_CLIENT_CONN; /* data associated with BTA_HF_CLIENT_IND_EVT event */ -typedef struct -{ - tBTA_HF_CLIENT_IND_TYPE type; - uint16_t value; +typedef struct { + tBTA_HF_CLIENT_IND_TYPE type; + uint16_t value; } tBTA_HF_CLIENT_IND; /* data associated with BTA_HF_CLIENT_OPERATOR_NAME_EVT */ #define BTA_HF_CLIENT_OPERATOR_NAME_LEN 16 -typedef struct -{ - char name[BTA_HF_CLIENT_OPERATOR_NAME_LEN + 1]; +typedef struct { + char name[BTA_HF_CLIENT_OPERATOR_NAME_LEN + 1]; } tBTA_HF_CLIENT_OPERATOR_NAME; /* data associated with BTA_HF_CLIENT_CLIP_EVT and BTA_HF_CLIENT_CCWA_EVT*/ #define BTA_HF_CLIENT_NUMBER_LEN 32 -typedef struct -{ - char number[BTA_HF_CLIENT_NUMBER_LEN + 1]; +typedef struct { + char number[BTA_HF_CLIENT_NUMBER_LEN + 1]; } tBTA_HF_CLIENT_NUMBER; /* data associated with BTA_HF_CLIENT_AT_RESULT_EVT event */ -typedef struct -{ - tBTA_HF_CLIENT_AT_RESULT_TYPE type; - uint16_t cme; +typedef struct { + tBTA_HF_CLIENT_AT_RESULT_TYPE type; + uint16_t cme; } tBTA_HF_CLIENT_AT_RESULT; /* data associated with BTA_HF_CLIENT_CLCC_EVT event */ -typedef struct -{ - uint32_t idx; - bool inc; - uint8_t status; - bool mpty; - bool number_present; - char number[BTA_HF_CLIENT_NUMBER_LEN + 1]; +typedef struct { + uint32_t idx; + bool inc; + uint8_t status; + bool mpty; + bool number_present; + char number[BTA_HF_CLIENT_NUMBER_LEN + 1]; } tBTA_HF_CLIENT_CLCC; /* data associated with BTA_HF_CLIENT_CNUM_EVT event */ -typedef struct -{ - uint16_t service; - char number[BTA_HF_CLIENT_NUMBER_LEN + 1]; +typedef struct { + uint16_t service; + char number[BTA_HF_CLIENT_NUMBER_LEN + 1]; } tBTA_HF_CLIENT_CNUM; /* data associated with other events */ -typedef struct -{ - uint16_t value; -} tBTA_HF_CLIENT_VAL; +typedef struct { uint16_t value; } tBTA_HF_CLIENT_VAL; /* union of data associated with AG callback */ -typedef union -{ - tBTA_HF_CLIENT_REGISTER reg; - tBTA_HF_CLIENT_OPEN open; - tBTA_HF_CLIENT_CONN conn; - tBTA_HF_CLIENT_IND ind; - tBTA_HF_CLIENT_VAL val; - tBTA_HF_CLIENT_OPERATOR_NAME operator_name; - tBTA_HF_CLIENT_NUMBER number; - tBTA_HF_CLIENT_AT_RESULT result; - tBTA_HF_CLIENT_CLCC clcc; - tBTA_HF_CLIENT_CNUM cnum; +typedef union { + tBTA_HF_CLIENT_REGISTER reg; + tBTA_HF_CLIENT_OPEN open; + tBTA_HF_CLIENT_CONN conn; + tBTA_HF_CLIENT_IND ind; + tBTA_HF_CLIENT_VAL val; + tBTA_HF_CLIENT_OPERATOR_NAME operator_name; + tBTA_HF_CLIENT_NUMBER number; + tBTA_HF_CLIENT_AT_RESULT result; + tBTA_HF_CLIENT_CLCC clcc; + tBTA_HF_CLIENT_CNUM cnum; } tBTA_HF_CLIENT; typedef uint32_t tBTA_HF_CLIENT_FEAT; /* HF Client callback */ -typedef void (tBTA_HF_CLIENT_CBACK)(tBTA_HF_CLIENT_EVT event, tBTA_HF_CLIENT *p_data); +typedef void(tBTA_HF_CLIENT_CBACK)(tBTA_HF_CLIENT_EVT event, + tBTA_HF_CLIENT* p_data); /***************************************************************************** * External Function Declarations @@ -259,7 +264,7 @@ typedef void (tBTA_HF_CLIENT_CBACK)(tBTA_HF_CLIENT_EVT event, tBTA_HF_CLIENT *p_ * Returns BTA_SUCCESS if OK, BTA_FAILURE otherwise. * ******************************************************************************/ -tBTA_STATUS BTA_HfClientEnable(tBTA_HF_CLIENT_CBACK *p_cback); +tBTA_STATUS BTA_HfClientEnable(tBTA_HF_CLIENT_CBACK* p_cback); /******************************************************************************* * @@ -284,7 +289,7 @@ void BTA_HfClientDisable(void); * ******************************************************************************/ void BTA_HfClientRegister(tBTA_SEC sec_mask, tBTA_HF_CLIENT_FEAT features, - const char *p_service_name); + const char* p_service_name); /******************************************************************************* * @@ -362,7 +367,8 @@ void BTA_HfClientAudioClose(uint16_t handle); * Returns void * ******************************************************************************/ -void BTA_HfClientSendAT(uint16_t handle, tBTA_HF_CLIENT_AT_CMD_TYPE at, uint32_t val1, uint32_t val2, const char *str); +void BTA_HfClientSendAT(uint16_t handle, tBTA_HF_CLIENT_AT_CMD_TYPE at, + uint32_t val1, uint32_t val2, const char* str); #ifdef __cplusplus } diff --git a/system/bta/include/bta_hh_api.h b/system/bta/include/bta_hh_api.h index 6406debf8d8..6d2ad69ae18 100644 --- a/system/bta/include/bta_hh_api.h +++ b/system/bta/include/bta_hh_api.h @@ -33,197 +33,187 @@ extern "C" { * Constants and Type Definitions ****************************************************************************/ #ifndef BTA_HH_DEBUG -#define BTA_HH_DEBUG true +#define BTA_HH_DEBUG true #endif #ifndef BTA_HH_SSR_MAX_LATENCY_DEF -#define BTA_HH_SSR_MAX_LATENCY_DEF 800 /* 500 ms*/ +#define BTA_HH_SSR_MAX_LATENCY_DEF 800 /* 500 ms*/ #endif #ifndef BTA_HH_SSR_MIN_TOUT_DEF -#define BTA_HH_SSR_MIN_TOUT_DEF 2 +#define BTA_HH_SSR_MIN_TOUT_DEF 2 #endif /* BTA HID Host callback events */ -#define BTA_HH_ENABLE_EVT 0 /* HH enabled */ -#define BTA_HH_DISABLE_EVT 1 /* HH disabled */ -#define BTA_HH_OPEN_EVT 2 /* connection opened */ -#define BTA_HH_CLOSE_EVT 3 /* connection closed */ -#define BTA_HH_GET_RPT_EVT 4 /* BTA_HhGetReport callback */ -#define BTA_HH_SET_RPT_EVT 5 /* BTA_HhSetReport callback */ -#define BTA_HH_GET_PROTO_EVT 6 /* BTA_GetProtoMode callback */ -#define BTA_HH_SET_PROTO_EVT 7 /* BTA_HhSetProtoMode callback */ -#define BTA_HH_GET_IDLE_EVT 8 /* BTA_HhGetIdle comes callback */ -#define BTA_HH_SET_IDLE_EVT 9 /* BTA_HhSetIdle finish callback */ -#define BTA_HH_GET_DSCP_EVT 10 /* Get report descriptor */ -#define BTA_HH_ADD_DEV_EVT 11 /* Add Device callback */ -#define BTA_HH_RMV_DEV_EVT 12 /* remove device finished */ -#define BTA_HH_VC_UNPLUG_EVT 13 /* virtually unplugged */ -#define BTA_HH_DATA_EVT 15 -#define BTA_HH_API_ERR_EVT 16 /* API error is caught */ -#define BTA_HH_UPDATE_SCPP_EVT 17 /* update scan paramter complete */ +#define BTA_HH_ENABLE_EVT 0 /* HH enabled */ +#define BTA_HH_DISABLE_EVT 1 /* HH disabled */ +#define BTA_HH_OPEN_EVT 2 /* connection opened */ +#define BTA_HH_CLOSE_EVT 3 /* connection closed */ +#define BTA_HH_GET_RPT_EVT 4 /* BTA_HhGetReport callback */ +#define BTA_HH_SET_RPT_EVT 5 /* BTA_HhSetReport callback */ +#define BTA_HH_GET_PROTO_EVT 6 /* BTA_GetProtoMode callback */ +#define BTA_HH_SET_PROTO_EVT 7 /* BTA_HhSetProtoMode callback */ +#define BTA_HH_GET_IDLE_EVT 8 /* BTA_HhGetIdle comes callback */ +#define BTA_HH_SET_IDLE_EVT 9 /* BTA_HhSetIdle finish callback */ +#define BTA_HH_GET_DSCP_EVT 10 /* Get report descriptor */ +#define BTA_HH_ADD_DEV_EVT 11 /* Add Device callback */ +#define BTA_HH_RMV_DEV_EVT 12 /* remove device finished */ +#define BTA_HH_VC_UNPLUG_EVT 13 /* virtually unplugged */ +#define BTA_HH_DATA_EVT 15 +#define BTA_HH_API_ERR_EVT 16 /* API error is caught */ +#define BTA_HH_UPDATE_SCPP_EVT 17 /* update scan paramter complete */ typedef uint16_t tBTA_HH_EVT; /* application ID(none-zero) for each type of device */ -#define BTA_HH_APP_ID_MI 1 -#define BTA_HH_APP_ID_KB 2 -#define BTA_HH_APP_ID_RMC 3 -#define BTA_HH_APP_ID_3DSG 4 -#define BTA_HH_APP_ID_JOY 5 -#define BTA_HH_APP_ID_GPAD 6 -#define BTA_HH_APP_ID_LE 0xff +#define BTA_HH_APP_ID_MI 1 +#define BTA_HH_APP_ID_KB 2 +#define BTA_HH_APP_ID_RMC 3 +#define BTA_HH_APP_ID_3DSG 4 +#define BTA_HH_APP_ID_JOY 5 +#define BTA_HH_APP_ID_GPAD 6 +#define BTA_HH_APP_ID_LE 0xff /* defined the minimum offset */ -#define BTA_HH_MIN_OFFSET (L2CAP_MIN_OFFSET+1) +#define BTA_HH_MIN_OFFSET (L2CAP_MIN_OFFSET + 1) /* HID_HOST_MAX_DEVICES can not exceed 15 for th design of BTA HH */ -#define BTA_HH_IDX_INVALID 0xff -#define BTA_HH_MAX_KNOWN HID_HOST_MAX_DEVICES +#define BTA_HH_IDX_INVALID 0xff +#define BTA_HH_MAX_KNOWN HID_HOST_MAX_DEVICES #if (BTA_HH_LE_INCLUDED == TRUE) /* GATT_MAX_PHY_CHANNEL can not exceed 14 for the design of BTA HH */ -#define BTA_HH_LE_MAX_KNOWN GATT_MAX_PHY_CHANNEL -#define BTA_HH_MAX_DEVICE (HID_HOST_MAX_DEVICES + GATT_MAX_PHY_CHANNEL) +#define BTA_HH_LE_MAX_KNOWN GATT_MAX_PHY_CHANNEL +#define BTA_HH_MAX_DEVICE (HID_HOST_MAX_DEVICES + GATT_MAX_PHY_CHANNEL) #else -#define BTA_HH_MAX_DEVICE HID_HOST_MAX_DEVICES +#define BTA_HH_MAX_DEVICE HID_HOST_MAX_DEVICES #endif /* invalid device handle */ -#define BTA_HH_INVALID_HANDLE 0xff +#define BTA_HH_INVALID_HANDLE 0xff /* type of protocol mode */ -#define BTA_HH_PROTO_RPT_MODE (0x00) -#define BTA_HH_PROTO_BOOT_MODE (0x01) -#define BTA_HH_PROTO_UNKNOWN (0xff) -typedef uint8_t tBTA_HH_PROTO_MODE; - -enum -{ - BTA_HH_KEYBD_RPT_ID = 1, - BTA_HH_MOUSE_RPT_ID -}; +#define BTA_HH_PROTO_RPT_MODE (0x00) +#define BTA_HH_PROTO_BOOT_MODE (0x01) +#define BTA_HH_PROTO_UNKNOWN (0xff) +typedef uint8_t tBTA_HH_PROTO_MODE; + +enum { BTA_HH_KEYBD_RPT_ID = 1, BTA_HH_MOUSE_RPT_ID }; typedef uint8_t tBTA_HH_BOOT_RPT_ID; /* type of devices, bit mask */ -#define BTA_HH_DEVT_UNKNOWN 0x00 -#define BTA_HH_DEVT_JOS 0x01 /* joy stick */ -#define BTA_HH_DEVT_GPD 0x02 /* game pad */ -#define BTA_HH_DEVT_RMC 0x03 /* remote control */ -#define BTA_HH_DEVT_SED 0x04 /* sensing device */ -#define BTA_HH_DEVT_DGT 0x05 /* Digitizer tablet */ -#define BTA_HH_DEVT_CDR 0x06 /* card reader */ -#define BTA_HH_DEVT_KBD 0x10 /* keyboard */ -#define BTA_HH_DEVT_MIC 0x20 /* pointing device */ -#define BTA_HH_DEVT_COM 0x30 /* Combo keyboard/pointing */ -#define BTA_HH_DEVT_OTHER 0x80 -typedef uint8_t tBTA_HH_DEVT; - -enum -{ - BTA_HH_OK, - BTA_HH_HS_HID_NOT_READY, /* handshake error : device not ready */ - BTA_HH_HS_INVALID_RPT_ID, /* handshake error : invalid report ID */ - BTA_HH_HS_TRANS_NOT_SPT, /* handshake error : transaction not spt */ - BTA_HH_HS_INVALID_PARAM, /* handshake error : invalid paremter */ - BTA_HH_HS_ERROR, /* handshake error : unspecified HS error */ - BTA_HH_ERR, /* general BTA HH error */ - BTA_HH_ERR_SDP, /* SDP error */ - BTA_HH_ERR_PROTO, /* SET_Protocol error, - only used in BTA_HH_OPEN_EVT callback */ - - BTA_HH_ERR_DB_FULL, /* device database full error, used in - BTA_HH_OPEN_EVT/BTA_HH_ADD_DEV_EVT */ - BTA_HH_ERR_TOD_UNSPT, /* type of device not supported */ - BTA_HH_ERR_NO_RES, /* out of system resources */ - BTA_HH_ERR_AUTH_FAILED, /* authentication fail */ - BTA_HH_ERR_HDL, - BTA_HH_ERR_SEC +#define BTA_HH_DEVT_UNKNOWN 0x00 +#define BTA_HH_DEVT_JOS 0x01 /* joy stick */ +#define BTA_HH_DEVT_GPD 0x02 /* game pad */ +#define BTA_HH_DEVT_RMC 0x03 /* remote control */ +#define BTA_HH_DEVT_SED 0x04 /* sensing device */ +#define BTA_HH_DEVT_DGT 0x05 /* Digitizer tablet */ +#define BTA_HH_DEVT_CDR 0x06 /* card reader */ +#define BTA_HH_DEVT_KBD 0x10 /* keyboard */ +#define BTA_HH_DEVT_MIC 0x20 /* pointing device */ +#define BTA_HH_DEVT_COM 0x30 /* Combo keyboard/pointing */ +#define BTA_HH_DEVT_OTHER 0x80 +typedef uint8_t tBTA_HH_DEVT; + +enum { + BTA_HH_OK, + BTA_HH_HS_HID_NOT_READY, /* handshake error : device not ready */ + BTA_HH_HS_INVALID_RPT_ID, /* handshake error : invalid report ID */ + BTA_HH_HS_TRANS_NOT_SPT, /* handshake error : transaction not spt */ + BTA_HH_HS_INVALID_PARAM, /* handshake error : invalid paremter */ + BTA_HH_HS_ERROR, /* handshake error : unspecified HS error */ + BTA_HH_ERR, /* general BTA HH error */ + BTA_HH_ERR_SDP, /* SDP error */ + BTA_HH_ERR_PROTO, /* SET_Protocol error, + only used in BTA_HH_OPEN_EVT callback */ + + BTA_HH_ERR_DB_FULL, /* device database full error, used in + BTA_HH_OPEN_EVT/BTA_HH_ADD_DEV_EVT */ + BTA_HH_ERR_TOD_UNSPT, /* type of device not supported */ + BTA_HH_ERR_NO_RES, /* out of system resources */ + BTA_HH_ERR_AUTH_FAILED, /* authentication fail */ + BTA_HH_ERR_HDL, + BTA_HH_ERR_SEC }; typedef uint8_t tBTA_HH_STATUS; - -#define BTA_HH_VIRTUAL_CABLE HID_VIRTUAL_CABLE -#define BTA_HH_NORMALLY_CONNECTABLE HID_NORMALLY_CONNECTABLE -#define BTA_HH_RECONN_INIT HID_RECONN_INIT -#define BTA_HH_SDP_DISABLE HID_SDP_DISABLE -#define BTA_HH_BATTERY_POWER HID_BATTERY_POWER -#define BTA_HH_REMOTE_WAKE HID_REMOTE_WAKE -#define BTA_HH_SUP_TOUT_AVLBL HID_SUP_TOUT_AVLBL -#define BTA_HH_SEC_REQUIRED HID_SEC_REQUIRED +#define BTA_HH_VIRTUAL_CABLE HID_VIRTUAL_CABLE +#define BTA_HH_NORMALLY_CONNECTABLE HID_NORMALLY_CONNECTABLE +#define BTA_HH_RECONN_INIT HID_RECONN_INIT +#define BTA_HH_SDP_DISABLE HID_SDP_DISABLE +#define BTA_HH_BATTERY_POWER HID_BATTERY_POWER +#define BTA_HH_REMOTE_WAKE HID_REMOTE_WAKE +#define BTA_HH_SUP_TOUT_AVLBL HID_SUP_TOUT_AVLBL +#define BTA_HH_SEC_REQUIRED HID_SEC_REQUIRED typedef uint16_t tBTA_HH_ATTR_MASK; /* supported type of device and corresponding application ID */ -typedef struct -{ - tBTA_HH_DEVT tod; /* type of device */ - uint8_t app_id; /* corresponding application ID */ -}tBTA_HH_SPT_TOD; +typedef struct { + tBTA_HH_DEVT tod; /* type of device */ + uint8_t app_id; /* corresponding application ID */ +} tBTA_HH_SPT_TOD; /* configuration struct */ -typedef struct -{ - uint8_t max_devt_spt; /* max number of types of devices spt */ - tBTA_HH_SPT_TOD *p_devt_list; /* supported types of device list */ - uint16_t sdp_db_size; -}tBTA_HH_CFG; - -enum -{ - BTA_HH_RPTT_RESRV, /* reserved */ - BTA_HH_RPTT_INPUT, /* input report */ - BTA_HH_RPTT_OUTPUT, /* output report */ - BTA_HH_RPTT_FEATURE /* feature report */ +typedef struct { + uint8_t max_devt_spt; /* max number of types of devices spt */ + tBTA_HH_SPT_TOD* p_devt_list; /* supported types of device list */ + uint16_t sdp_db_size; +} tBTA_HH_CFG; + +enum { + BTA_HH_RPTT_RESRV, /* reserved */ + BTA_HH_RPTT_INPUT, /* input report */ + BTA_HH_RPTT_OUTPUT, /* output report */ + BTA_HH_RPTT_FEATURE /* feature report */ }; typedef uint8_t tBTA_HH_RPT_TYPE; /* HID_CONTROL operation code used in BTA_HhSendCtrl() */ -enum -{ - BTA_HH_CTRL_NOP = 0 + HID_PAR_CONTROL_NOP ,/* mapping from BTE */ - BTA_HH_CTRL_HARD_RESET, /* hard reset */ - BTA_HH_CTRL_SOFT_RESET, /* soft reset */ - BTA_HH_CTRL_SUSPEND, /* enter suspend */ - BTA_HH_CTRL_EXIT_SUSPEND, /* exit suspend */ - BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG /* virtual unplug */ +enum { + BTA_HH_CTRL_NOP = 0 + HID_PAR_CONTROL_NOP, /* mapping from BTE */ + BTA_HH_CTRL_HARD_RESET, /* hard reset */ + BTA_HH_CTRL_SOFT_RESET, /* soft reset */ + BTA_HH_CTRL_SUSPEND, /* enter suspend */ + BTA_HH_CTRL_EXIT_SUSPEND, /* exit suspend */ + BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG /* virtual unplug */ }; typedef uint8_t tBTA_HH_TRANS_CTRL_TYPE; typedef tHID_DEV_DSCP_INFO tBTA_HH_DEV_DESCR; -#define BTA_HH_SSR_PARAM_INVALID HID_SSR_PARAM_INVALID - -/* id DI is not existing in remote device, vendor_id in tBTA_HH_DEV_DSCP_INFO will be set to 0xffff */ -#define BTA_HH_VENDOR_ID_INVALID 0xffff +#define BTA_HH_SSR_PARAM_INVALID HID_SSR_PARAM_INVALID +/* id DI is not existing in remote device, vendor_id in tBTA_HH_DEV_DSCP_INFO + * will be set to 0xffff */ +#define BTA_HH_VENDOR_ID_INVALID 0xffff /* report descriptor information */ -typedef struct -{ - uint16_t vendor_id; /* vendor ID */ - uint16_t product_id; /* product ID */ - uint16_t version; /* version */ - uint16_t ssr_max_latency; /* SSR max latency, BTA_HH_SSR_PARAM_INVALID if unknown */ - uint16_t ssr_min_tout; /* SSR min timeout, BTA_HH_SSR_PARAM_INVALID if unknown */ - uint8_t ctry_code; /*Country Code.*/ +typedef struct { + uint16_t vendor_id; /* vendor ID */ + uint16_t product_id; /* product ID */ + uint16_t version; /* version */ + uint16_t ssr_max_latency; /* SSR max latency, BTA_HH_SSR_PARAM_INVALID if + unknown */ + uint16_t + ssr_min_tout; /* SSR min timeout, BTA_HH_SSR_PARAM_INVALID if unknown */ + uint8_t ctry_code; /*Country Code.*/ #if (BTA_HH_LE_INCLUDED == TRUE) -#define BTA_HH_LE_REMOTE_WAKE 0x01 -#define BTA_HH_LE_NORMAL_CONN 0x02 +#define BTA_HH_LE_REMOTE_WAKE 0x01 +#define BTA_HH_LE_NORMAL_CONN 0x02 - uint8_t flag; + uint8_t flag; #endif - tBTA_HH_DEV_DESCR descriptor; -}tBTA_HH_DEV_DSCP_INFO; + tBTA_HH_DEV_DESCR descriptor; +} tBTA_HH_DEV_DSCP_INFO; /* callback event data for BTA_HH_OPEN_EVT */ -typedef struct -{ - BD_ADDR bda; /* HID device bd address */ - tBTA_HH_STATUS status; /* operation status */ - uint8_t handle; /* device handle */ +typedef struct { + BD_ADDR bda; /* HID device bd address */ + tBTA_HH_STATUS status; /* operation status */ + uint8_t handle; /* device handle */ #if (BTA_HH_LE_INCLUDED == TRUE) - bool le_hid; /* is LE devices? */ - bool scps_supported; /* scan parameter service supported */ + bool le_hid; /* is LE devices? */ + bool scps_supported; /* scan parameter service supported */ #endif } tBTA_HH_CONN; @@ -231,90 +221,80 @@ typedef struct typedef tBTA_HH_CONN tBTA_HH_DEV_INFO; /* callback event data */ -typedef struct -{ - tBTA_HH_STATUS status; /* operation status */ - uint8_t handle; /* device handle */ +typedef struct { + tBTA_HH_STATUS status; /* operation status */ + uint8_t handle; /* device handle */ } tBTA_HH_CBDATA; -enum -{ - BTA_HH_MOD_CTRL_KEY, - BTA_HH_MOD_SHFT_KEY, - BTA_HH_MOD_ALT_KEY, - BTA_HH_MOD_GUI_KEY, - BTA_HH_MOD_MAX_KEY +enum { + BTA_HH_MOD_CTRL_KEY, + BTA_HH_MOD_SHFT_KEY, + BTA_HH_MOD_ALT_KEY, + BTA_HH_MOD_GUI_KEY, + BTA_HH_MOD_MAX_KEY }; /* parsed boot mode keyboard report */ -typedef struct -{ - uint8_t this_char[6]; /* virtual key code */ - bool mod_key[BTA_HH_MOD_MAX_KEY]; - /* ctrl, shift, Alt, GUI */ - /* modifier key: is Shift key pressed */ - /* modifier key: is Ctrl key pressed */ - /* modifier key: is Alt key pressed */ - /* modifier key: GUI up/down */ - bool caps_lock; /* is caps locked */ - bool num_lock; /* is Num key pressed */ +typedef struct { + uint8_t this_char[6]; /* virtual key code */ + bool mod_key[BTA_HH_MOD_MAX_KEY]; + /* ctrl, shift, Alt, GUI */ + /* modifier key: is Shift key pressed */ + /* modifier key: is Ctrl key pressed */ + /* modifier key: is Alt key pressed */ + /* modifier key: GUI up/down */ + bool caps_lock; /* is caps locked */ + bool num_lock; /* is Num key pressed */ } tBTA_HH_KEYBD_RPT; /* parsed boot mode mouse report */ -typedef struct -{ - uint8_t mouse_button; /* mouse button is clicked */ - int8_t delta_x; /* displacement x */ - int8_t delta_y; /* displacement y */ -}tBTA_HH_MICE_RPT; +typedef struct { + uint8_t mouse_button; /* mouse button is clicked */ + int8_t delta_x; /* displacement x */ + int8_t delta_y; /* displacement y */ +} tBTA_HH_MICE_RPT; /* parsed Boot report */ -typedef struct -{ - tBTA_HH_BOOT_RPT_ID dev_type; /* type of device report */ - union - { - tBTA_HH_KEYBD_RPT keybd_rpt; /* keyboard report */ - tBTA_HH_MICE_RPT mice_rpt; /* mouse report */ - } data_rpt; +typedef struct { + tBTA_HH_BOOT_RPT_ID dev_type; /* type of device report */ + union { + tBTA_HH_KEYBD_RPT keybd_rpt; /* keyboard report */ + tBTA_HH_MICE_RPT mice_rpt; /* mouse report */ + } data_rpt; } tBTA_HH_BOOT_RPT; /* handshake data */ -typedef struct -{ - tBTA_HH_STATUS status; /* handshake status */ - uint8_t handle; /* device handle */ - union - { - tBTA_HH_PROTO_MODE proto_mode; /* GET_PROTO_EVT :protocol mode */ - BT_HDR *p_rpt_data; /* GET_RPT_EVT : report data */ - uint8_t idle_rate; /* GET_IDLE_EVT : idle rate */ - } rsp_data; - -}tBTA_HH_HSDATA; +typedef struct { + tBTA_HH_STATUS status; /* handshake status */ + uint8_t handle; /* device handle */ + union { + tBTA_HH_PROTO_MODE proto_mode; /* GET_PROTO_EVT :protocol mode */ + BT_HDR* p_rpt_data; /* GET_RPT_EVT : report data */ + uint8_t idle_rate; /* GET_IDLE_EVT : idle rate */ + } rsp_data; + +} tBTA_HH_HSDATA; /* union of data associated with HD callback */ -typedef union -{ - tBTA_HH_DEV_INFO dev_info; /* BTA_HH_ADD_DEV_EVT, BTA_HH_RMV_DEV_EVT */ - tBTA_HH_CONN conn; /* BTA_HH_OPEN_EVT */ - tBTA_HH_CBDATA dev_status; /* BTA_HH_CLOSE_EVT, - BTA_HH_SET_PROTO_EVT - BTA_HH_SET_RPT_EVT - BTA_HH_SET_IDLE_EVT - BTA_HH_UPDATE_SCPP_EVT */ - - tBTA_HH_STATUS status; /* BTA_HH_ENABLE_EVT */ - tBTA_HH_DEV_DSCP_INFO dscp_info; /* BTA_HH_GET_DSCP_EVT */ - tBTA_HH_HSDATA hs_data; /* GET_ transaction callback - BTA_HH_GET_RPT_EVT - BTA_HH_GET_PROTO_EVT - BTA_HH_GET_IDLE_EVT */ +typedef union { + tBTA_HH_DEV_INFO dev_info; /* BTA_HH_ADD_DEV_EVT, BTA_HH_RMV_DEV_EVT */ + tBTA_HH_CONN conn; /* BTA_HH_OPEN_EVT */ + tBTA_HH_CBDATA dev_status; /* BTA_HH_CLOSE_EVT, + BTA_HH_SET_PROTO_EVT + BTA_HH_SET_RPT_EVT + BTA_HH_SET_IDLE_EVT + BTA_HH_UPDATE_SCPP_EVT */ + + tBTA_HH_STATUS status; /* BTA_HH_ENABLE_EVT */ + tBTA_HH_DEV_DSCP_INFO dscp_info; /* BTA_HH_GET_DSCP_EVT */ + tBTA_HH_HSDATA hs_data; /* GET_ transaction callback + BTA_HH_GET_RPT_EVT + BTA_HH_GET_PROTO_EVT + BTA_HH_GET_IDLE_EVT */ } tBTA_HH; /* BTA HH callback function */ -typedef void (tBTA_HH_CBACK) (tBTA_HH_EVT event, tBTA_HH *p_data); - +typedef void(tBTA_HH_CBACK)(tBTA_HH_EVT event, tBTA_HH* p_data); /***************************************************************************** * External Function Declarations @@ -330,7 +310,7 @@ typedef void (tBTA_HH_CBACK) (tBTA_HH_EVT event, tBTA_HH *p_data); * Returns void * ******************************************************************************/ -extern void BTA_HhEnable(tBTA_SEC sec_mask, tBTA_HH_CBACK *p_cback); +extern void BTA_HhEnable(tBTA_SEC sec_mask, tBTA_HH_CBACK* p_cback); /******************************************************************************* * @@ -354,8 +334,8 @@ extern void BTA_HhDisable(void); * Returns void * ******************************************************************************/ -extern void BTA_HhOpen (BD_ADDR dev_bda, tBTA_HH_PROTO_MODE mode, - tBTA_SEC sec_mask); +extern void BTA_HhOpen(BD_ADDR dev_bda, tBTA_HH_PROTO_MODE mode, + tBTA_SEC sec_mask); /******************************************************************************* * @@ -383,7 +363,8 @@ extern void BTA_HhSetProtoMode(uint8_t handle, tBTA_HH_PROTO_MODE t_type); * * Function BTA_HhGetProtoMode * - * Description This function get the protocol mode of a specified HID device. + * Description This function get the protocol mode of a specified HID + *device. * * Returns void * @@ -399,7 +380,7 @@ extern void BTA_HhGetProtoMode(uint8_t dev_handle); * ******************************************************************************/ extern void BTA_HhSetReport(uint8_t dev_handle, tBTA_HH_RPT_TYPE r_type, - BT_HDR *p_data); + BT_HDR* p_data); /******************************************************************************* * @@ -443,8 +424,7 @@ extern void BTA_HhGetIdle(uint8_t dev_handle); * Returns void * ******************************************************************************/ -extern void BTA_HhSendCtrl(uint8_t dev_handle, - tBTA_HH_TRANS_CTRL_TYPE c_type); +extern void BTA_HhSendCtrl(uint8_t dev_handle, tBTA_HH_TRANS_CTRL_TYPE c_type); /******************************************************************************* * @@ -457,7 +437,6 @@ extern void BTA_HhSendCtrl(uint8_t dev_handle, ******************************************************************************/ extern void BTA_HhSetIdle(uint8_t dev_handle, uint16_t idle_rate); - /******************************************************************************* * * Function BTA_HhGetIdle @@ -478,7 +457,7 @@ extern void BTA_HhGetIdle(uint8_t dev_handle); * Returns void * ******************************************************************************/ -extern void BTA_HhSendData(uint8_t dev_handle, BD_ADDR dev_bda, BT_HDR *p_buf); +extern void BTA_HhSendData(uint8_t dev_handle, BD_ADDR dev_bda, BT_HDR* p_buf); /******************************************************************************* * @@ -514,7 +493,7 @@ extern void BTA_HhAddDev(BD_ADDR bda, tBTA_HH_ATTR_MASK attr_mask, * Returns void * ******************************************************************************/ -extern void BTA_HhRemoveDev(uint8_t dev_handle ); +extern void BTA_HhRemoveDev(uint8_t dev_handle); /******************************************************************************* * @@ -530,7 +509,7 @@ extern void BTA_HhRemoveDev(uint8_t dev_handle ); * Returns void * ******************************************************************************/ -extern void BTA_HhParseBootRpt(tBTA_HH_BOOT_RPT *p_data, uint8_t *p_report, +extern void BTA_HhParseBootRpt(tBTA_HH_BOOT_RPT* p_data, uint8_t* p_report, uint16_t report_len); /* test commands */ @@ -540,4 +519,4 @@ extern void bta_hh_le_hid_read_rpt_clt_cfg(BD_ADDR bd_addr, uint8_t rpt_id); } #endif -#endif /* BTA_HH_API_H */ +#endif /* BTA_HH_API_H */ diff --git a/system/bta/include/bta_hh_co.h b/system/bta/include/bta_hh_co.h index 435aa283aee..ac44c21541f 100644 --- a/system/bta/include/bta_hh_co.h +++ b/system/bta/include/bta_hh_co.h @@ -30,29 +30,30 @@ extern "C" { #endif -typedef struct -{ - uint16_t rpt_uuid; - uint8_t rpt_id; - tBTA_HH_RPT_TYPE rpt_type; - uint8_t srvc_inst_id; - uint8_t char_inst_id; -}tBTA_HH_RPT_CACHE_ENTRY; +typedef struct { + uint16_t rpt_uuid; + uint8_t rpt_id; + tBTA_HH_RPT_TYPE rpt_type; + uint8_t srvc_inst_id; + uint8_t char_inst_id; +} tBTA_HH_RPT_CACHE_ENTRY; /******************************************************************************* * * Function bta_hh_co_data * - * Description This callout function is executed by HH when data is received + * Description This callout function is executed by HH when data is + *received * in interupt channel. * * * Returns void. * ******************************************************************************/ -extern void bta_hh_co_data(uint8_t dev_handle, uint8_t *p_rpt, uint16_t len, - tBTA_HH_PROTO_MODE mode, uint8_t sub_class, - uint8_t ctry_code, BD_ADDR peer_addr, uint8_t app_id); +extern void bta_hh_co_data(uint8_t dev_handle, uint8_t* p_rpt, uint16_t len, + tBTA_HH_PROTO_MODE mode, uint8_t sub_class, + uint8_t ctry_code, BD_ADDR peer_addr, + uint8_t app_id); /******************************************************************************* * @@ -98,15 +99,17 @@ extern void bta_hh_co_close(uint8_t dev_handle, uint8_t app_id); * ******************************************************************************/ extern void bta_hh_le_co_rpt_info(BD_ADDR remote_bda, - tBTA_HH_RPT_CACHE_ENTRY *p_entry, - uint8_t app_id); + tBTA_HH_RPT_CACHE_ENTRY* p_entry, + uint8_t app_id); /******************************************************************************* * * Function bta_hh_le_co_cache_load * - * Description This callout function is to request the application to load the - * cached HOGP report if there is any. When cache reading is completed, + * Description This callout function is to request the application to load + *the + * cached HOGP report if there is any. When cache reading is + *completed, * bta_hh_le_ci_cache_load() is called by the application. * * Parameters remote_bda - remote device address @@ -116,9 +119,9 @@ extern void bta_hh_le_co_rpt_info(BD_ADDR remote_bda, * Returns the acched report array * ******************************************************************************/ -extern tBTA_HH_RPT_CACHE_ENTRY *bta_hh_le_co_cache_load (BD_ADDR remote_bda, - uint8_t *p_num_rpt, - uint8_t app_id); +extern tBTA_HH_RPT_CACHE_ENTRY* bta_hh_le_co_cache_load(BD_ADDR remote_bda, + uint8_t* p_num_rpt, + uint8_t app_id); /******************************************************************************* * @@ -131,7 +134,7 @@ extern tBTA_HH_RPT_CACHE_ENTRY *bta_hh_le_co_cache_load (BD_ADDR remote_bda, * Returns none * ******************************************************************************/ -extern void bta_hh_le_co_reset_rpt_cache (BD_ADDR remote_bda, uint8_t app_id); +extern void bta_hh_le_co_reset_rpt_cache(BD_ADDR remote_bda, uint8_t app_id); #endif /* #if (BLE_INCLUDED == true && BTA_HH_LE_INCLUDED == TRUE) */ diff --git a/system/bta/include/bta_hl_api.h b/system/bta/include/bta_hl_api.h index 30334217861..bc7ae8ce0cb 100644 --- a/system/bta/include/bta_hl_api.h +++ b/system/bta/include/bta_hl_api.h @@ -39,172 +39,169 @@ extern "C" { ****************************************************************************/ /* Extra Debug Code */ #ifndef BTA_HL_DEBUG -#define BTA_HL_DEBUG true +#define BTA_HL_DEBUG true #endif #ifndef BTA_HL_NUM_APPS -#define BTA_HL_NUM_APPS 12 +#define BTA_HL_NUM_APPS 12 #endif #ifndef BTA_HL_NUM_MDEPS -#define BTA_HL_NUM_MDEPS 13 +#define BTA_HL_NUM_MDEPS 13 #endif #ifndef BTA_HL_NUM_MCLS -#define BTA_HL_NUM_MCLS 7 +#define BTA_HL_NUM_MCLS 7 #endif #ifndef BTA_HL_NUM_MDLS_PER_MDEP -#define BTA_HL_NUM_MDLS_PER_MDEP 4 +#define BTA_HL_NUM_MDLS_PER_MDEP 4 #endif #ifndef BTA_HL_NUM_MDLS_PER_MCL -#define BTA_HL_NUM_MDLS_PER_MCL 10 +#define BTA_HL_NUM_MDLS_PER_MCL 10 #endif #ifndef BTA_HL_NUM_DATA_TYPES -#define BTA_HL_NUM_DATA_TYPES 5 /* maximum number of data types can be supported - per MDEP ID */ +#define BTA_HL_NUM_DATA_TYPES \ + 5 /* maximum number of data types can be supported \ + per MDEP ID */ #endif -#define BTA_HL_MCAP_RSP_TOUT 2 /* 2 seconds */ +#define BTA_HL_MCAP_RSP_TOUT 2 /* 2 seconds */ #ifndef BTA_HL_CCH_NUM_FILTER_ELEMS -#define BTA_HL_CCH_NUM_FILTER_ELEMS 3 +#define BTA_HL_CCH_NUM_FILTER_ELEMS 3 #endif #ifndef BTA_HL_NUM_SDP_CBACKS -#define BTA_HL_NUM_SDP_CBACKS 7 +#define BTA_HL_NUM_SDP_CBACKS 7 #endif #ifndef BTA_HL_NUM_SDP_RECS -#define BTA_HL_NUM_SDP_RECS 5 +#define BTA_HL_NUM_SDP_RECS 5 #endif #ifndef BTA_HL_NUM_SDP_MDEPS -#define BTA_HL_NUM_SDP_MDEPS 12 +#define BTA_HL_NUM_SDP_MDEPS 12 #endif #ifndef BTA_HL_NUM_SVC_ELEMS -#define BTA_HL_NUM_SVC_ELEMS 2 +#define BTA_HL_NUM_SVC_ELEMS 2 #endif #ifndef BTA_HL_NUM_PROTO_ELEMS -#define BTA_HL_NUM_PROTO_ELEMS 2 +#define BTA_HL_NUM_PROTO_ELEMS 2 #endif -#define BTA_HL_VERSION 0x0101 -#define BTA_HL_NUM_ADD_PROTO_LISTS 1 -#define BTA_HL_NUM_ADD_PROTO_ELEMS 2 -#define BTA_HL_MDEP_SEQ_SIZE 20 -#define BTA_HL_VAL_ARRY_SIZE 320 +#define BTA_HL_VERSION 0x0101 +#define BTA_HL_NUM_ADD_PROTO_LISTS 1 +#define BTA_HL_NUM_ADD_PROTO_ELEMS 2 +#define BTA_HL_MDEP_SEQ_SIZE 20 +#define BTA_HL_VAL_ARRY_SIZE 320 #ifndef BTA_HL_NUM_MDL_CFGS -#define BTA_HL_NUM_MDL_CFGS 16 /* numer of MDL cfg saved in the persistent memory*/ +#define BTA_HL_NUM_MDL_CFGS \ + 16 /* numer of MDL cfg saved in the persistent memory*/ #endif -#define BTA_HL_NUM_TIMERS 7 - -#define BTA_HL_CCH_RSP_TOUT 2000 -#define BTA_HL_MAX_TIME 255 -#define BTA_HL_MIN_TIME 1 -#define BTA_HL_INVALID_APP_HANDLE 0xFF -#define BTA_HL_INVALID_MCL_HANDLE 0xFF -#define BTA_HL_INVALID_MDL_HANDLE 0xFFFF - -#define BTA_HL_STATUS_OK 0 -#define BTA_HL_STATUS_FAIL 1 /* Used to pass all other errors */ -#define BTA_HL_STATUS_ABORTED 2 -#define BTA_HL_STATUS_NO_RESOURCE 3 -#define BTA_HL_STATUS_LAST_ITEM 4 -#define BTA_HL_STATUS_DUPLICATE_APP_ID 5 -#define BTA_HL_STATUS_INVALID_APP_HANDLE 6 -#define BTA_HL_STATUS_INVALID_MCL_HANDLE 7 -#define BTA_HL_STATUS_MCAP_REG_FAIL 8 -#define BTA_HL_STATUS_MDEP_CO_FAIL 9 -#define BTA_HL_STATUS_ECHO_CO_FAIL 10 -#define BTA_HL_STATUS_MDL_CFG_CO_FAIL 11 -#define BTA_HL_STATUS_SDP_NO_RESOURCE 12 -#define BTA_HL_STATUS_SDP_FAIL 13 -#define BTA_HL_STATUS_NO_CCH 14 -#define BTA_HL_STATUS_NO_MCL 15 - -#define BTA_HL_STATUS_NO_FIRST_RELIABLE 17 -#define BTA_HL_STATUS_INVALID_DCH_CFG 18 -#define BTA_HL_STATUS_INVALID_MDL_HANDLE 19 -#define BTA_HL_STATUS_INVALID_BD_ADDR 20 +#define BTA_HL_NUM_TIMERS 7 + +#define BTA_HL_CCH_RSP_TOUT 2000 +#define BTA_HL_MAX_TIME 255 +#define BTA_HL_MIN_TIME 1 +#define BTA_HL_INVALID_APP_HANDLE 0xFF +#define BTA_HL_INVALID_MCL_HANDLE 0xFF +#define BTA_HL_INVALID_MDL_HANDLE 0xFFFF + +#define BTA_HL_STATUS_OK 0 +#define BTA_HL_STATUS_FAIL 1 /* Used to pass all other errors */ +#define BTA_HL_STATUS_ABORTED 2 +#define BTA_HL_STATUS_NO_RESOURCE 3 +#define BTA_HL_STATUS_LAST_ITEM 4 +#define BTA_HL_STATUS_DUPLICATE_APP_ID 5 +#define BTA_HL_STATUS_INVALID_APP_HANDLE 6 +#define BTA_HL_STATUS_INVALID_MCL_HANDLE 7 +#define BTA_HL_STATUS_MCAP_REG_FAIL 8 +#define BTA_HL_STATUS_MDEP_CO_FAIL 9 +#define BTA_HL_STATUS_ECHO_CO_FAIL 10 +#define BTA_HL_STATUS_MDL_CFG_CO_FAIL 11 +#define BTA_HL_STATUS_SDP_NO_RESOURCE 12 +#define BTA_HL_STATUS_SDP_FAIL 13 +#define BTA_HL_STATUS_NO_CCH 14 +#define BTA_HL_STATUS_NO_MCL 15 + +#define BTA_HL_STATUS_NO_FIRST_RELIABLE 17 +#define BTA_HL_STATUS_INVALID_DCH_CFG 18 +#define BTA_HL_STATUS_INVALID_MDL_HANDLE 19 +#define BTA_HL_STATUS_INVALID_BD_ADDR 20 #define BTA_HL_STATUS_INVALID_RECONNECT_CFG 21 -#define BTA_HL_STATUS_ECHO_TEST_BUSY 22 +#define BTA_HL_STATUS_ECHO_TEST_BUSY 22 #define BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID 23 -#define BTA_HL_STATUS_INVALID_MDL_ID 24 -#define BTA_HL_STATUS_NO_MDL_ID_FOUND 25 -#define BTA_HL_STATUS_DCH_BUSY 26 /* DCH is congested*/ -#define BTA_HL_STATUS_INVALID_CTRL_PSM 27 -#define BTA_HL_STATUS_DUPLICATE_CCH_OPEN 28 +#define BTA_HL_STATUS_INVALID_MDL_ID 24 +#define BTA_HL_STATUS_NO_MDL_ID_FOUND 25 +#define BTA_HL_STATUS_DCH_BUSY 26 /* DCH is congested*/ +#define BTA_HL_STATUS_INVALID_CTRL_PSM 27 +#define BTA_HL_STATUS_DUPLICATE_CCH_OPEN 28 typedef uint8_t tBTA_HL_STATUS; typedef tMCA_HANDLE tBTA_HL_APP_HANDLE; -typedef tMCA_CL tBTA_HL_MCL_HANDLE; -typedef tMCA_DL tBTA_HL_MDL_HANDLE; -enum -{ - BTA_HL_DEVICE_TYPE_SINK, - BTA_HL_DEVICE_TYPE_SOURCE, - BTA_HL_DEVICE_TYPE_DUAL +typedef tMCA_CL tBTA_HL_MCL_HANDLE; +typedef tMCA_DL tBTA_HL_MDL_HANDLE; +enum { + BTA_HL_DEVICE_TYPE_SINK, + BTA_HL_DEVICE_TYPE_SOURCE, + BTA_HL_DEVICE_TYPE_DUAL }; typedef uint8_t tBTA_HL_DEVICE_TYPE; +#define BTA_HL_SDP_IEEE_11073_20601 0x01 +#define BTA_HL_MCAP_SUP_RECONNECT_MASK_INIT 2 /* 0x02 */ +#define BTA_HL_MCAP_SUP_RECONNECT_MASK_ACCEPT 4 /* 0x04 */ +#define BTA_HL_MCAP_SUP_CSP_MASK_SYNC_SLAVE 0 /* 0x08 */ +#define BTA_HL_MCAP_SUP_CSP_MASK_SYNC_MASTER 0 /* 0x10 */ -#define BTA_HL_SDP_IEEE_11073_20601 0x01 - -#define BTA_HL_MCAP_SUP_RECONNECT_MASK_INIT 2 /* 0x02 */ -#define BTA_HL_MCAP_SUP_RECONNECT_MASK_ACCEPT 4 /* 0x04 */ -#define BTA_HL_MCAP_SUP_CSP_MASK_SYNC_SLAVE 0 /* 0x08 */ -#define BTA_HL_MCAP_SUP_CSP_MASK_SYNC_MASTER 0 /* 0x10 */ - -#define BTA_HL_MCAP_SUP_PROC_MASK (BTA_HL_MCAP_SUP_RECONNECT_MASK_INIT | \ - BTA_HL_MCAP_SUP_RECONNECT_MASK_ACCEPT | \ - BTA_HL_MCAP_SUP_CSP_MASK_SYNC_SLAVE | \ - BTA_HL_MCAP_SUP_CSP_MASK_SYNC_MASTER) -#define BTA_HL_MDEP_ROLE_SOURCE 0x00 -#define BTA_HL_MDEP_ROLE_SINK 0x01 +#define BTA_HL_MCAP_SUP_PROC_MASK \ + (BTA_HL_MCAP_SUP_RECONNECT_MASK_INIT | \ + BTA_HL_MCAP_SUP_RECONNECT_MASK_ACCEPT | \ + BTA_HL_MCAP_SUP_CSP_MASK_SYNC_SLAVE | BTA_HL_MCAP_SUP_CSP_MASK_SYNC_MASTER) +#define BTA_HL_MDEP_ROLE_SOURCE 0x00 +#define BTA_HL_MDEP_ROLE_SINK 0x01 typedef uint8_t tBTA_HL_MDEP_ROLE; -#define BTA_HL_MDEP_ROLE_MASK_SOURCE 0x01 /* bit mask */ -#define BTA_HL_MDEP_ROLE_MASK_SINK 0x02 +#define BTA_HL_MDEP_ROLE_MASK_SOURCE 0x01 /* bit mask */ +#define BTA_HL_MDEP_ROLE_MASK_SINK 0x02 typedef uint8_t tBTA_HL_MDEP_ROLE_MASK; +#define BTA_HL_ECHO_TEST_MDEP_ID 0 +#define BTA_HL_ECHO_TEST_MDEP_CFG_IDX 0 -#define BTA_HL_ECHO_TEST_MDEP_ID 0 -#define BTA_HL_ECHO_TEST_MDEP_CFG_IDX 0 - -#define BTA_HL_INVALID_MDEP_ID 0xFF +#define BTA_HL_INVALID_MDEP_ID 0xFF typedef tMCA_DEP tBTA_HL_MDEP_ID; /* 0 is for echo test, 0x01-0x7F availave for use, 0x80-0xFF reserved*/ +#define BTA_HL_DELETE_ALL_MDL_IDS 0xFFFF +#define BTA_HL_MAX_MDL_VAL 0xFEFF +typedef uint16_t tBTA_HL_MDL_ID; /* 0x0000 reserved, + 0x0001-0xFEFF dynamic range, + 0xFF00-0xFFFE reserved, + 0xFFFF indicates all MDLs*/ -#define BTA_HL_DELETE_ALL_MDL_IDS 0xFFFF -#define BTA_HL_MAX_MDL_VAL 0xFEFF -typedef uint16_t tBTA_HL_MDL_ID; /* 0x0000 reserved, - 0x0001-0xFEFF dynamic range, - 0xFF00-0xFFFE reserved, - 0xFFFF indicates all MDLs*/ +#define BTA_HL_MDEP_DESP_LEN 35 -#define BTA_HL_MDEP_DESP_LEN 35 - -#define BTA_HL_DCH_MODE_RELIABLE 0 -#define BTA_HL_DCH_MODE_STREAMING 1 +#define BTA_HL_DCH_MODE_RELIABLE 0 +#define BTA_HL_DCH_MODE_STREAMING 1 typedef uint8_t tBTA_HL_DCH_MODE; -#define BTA_HL_DCH_CFG_NO_PREF 0 -#define BTA_HL_DCH_CFG_RELIABLE 1 -#define BTA_HL_DCH_CFG_STREAMING 2 -#define BTA_HL_DCH_CFG_UNKNOWN 0xFF +#define BTA_HL_DCH_CFG_NO_PREF 0 +#define BTA_HL_DCH_CFG_RELIABLE 1 +#define BTA_HL_DCH_CFG_STREAMING 2 +#define BTA_HL_DCH_CFG_UNKNOWN 0xFF typedef uint8_t tBTA_HL_DCH_CFG; @@ -217,415 +214,359 @@ typedef uint8_t tBTA_HL_DCH_CFG; typedef uint8_t tBTA_HL_DCH_CREATE_RSP; #define BTA_HL_MCAP_SUP_PROC_RECONNECT_INIT 0x02 -#define BTA_HL_MCAP_SUP_PROC_RECONNECT_APT 0x04 -#define BTA_HL_MCAP_SUP_PROC_CSP_SLAVE 0x08 -#define BTA_HL_MCAP_SUP_PROC_CSP_MASTER 0x10 +#define BTA_HL_MCAP_SUP_PROC_RECONNECT_APT 0x04 +#define BTA_HL_MCAP_SUP_PROC_CSP_SLAVE 0x08 +#define BTA_HL_MCAP_SUP_PROC_CSP_MASTER 0x10 typedef uint8_t tBTA_HL_SUP_PROC_MASK; -typedef struct -{ - uint16_t max_rx_apdu_size; /* local rcv MTU */ - uint16_t max_tx_apdu_size; /* maximum TX APDU size*/ +typedef struct { + uint16_t max_rx_apdu_size; /* local rcv MTU */ + uint16_t max_tx_apdu_size; /* maximum TX APDU size*/ } tBTA_HL_ECHO_CFG; - -typedef struct -{ - uint16_t data_type; - uint16_t max_rx_apdu_size; /* local rcv MTU */ - uint16_t max_tx_apdu_size; /* maximum TX APDU size*/ - char desp[BTA_HL_MDEP_DESP_LEN+1]; +typedef struct { + uint16_t data_type; + uint16_t max_rx_apdu_size; /* local rcv MTU */ + uint16_t max_tx_apdu_size; /* maximum TX APDU size*/ + char desp[BTA_HL_MDEP_DESP_LEN + 1]; } tBTA_HL_MDEP_DATA_TYPE_CFG; - -typedef struct -{ - tBTA_HL_MDEP_ROLE mdep_role; - uint8_t num_of_mdep_data_types; - tBTA_HL_MDEP_DATA_TYPE_CFG data_cfg[BTA_HL_NUM_DATA_TYPES]; +typedef struct { + tBTA_HL_MDEP_ROLE mdep_role; + uint8_t num_of_mdep_data_types; + tBTA_HL_MDEP_DATA_TYPE_CFG data_cfg[BTA_HL_NUM_DATA_TYPES]; } tBTA_HL_MDEP_CFG; -typedef struct -{ - tBTA_HL_MDEP_ID mdep_id; /* MDEP ID 0x01-0x7F */ - tBTA_HL_MDEP_CFG mdep_cfg; - uint8_t ori_app_id; +typedef struct { + tBTA_HL_MDEP_ID mdep_id; /* MDEP ID 0x01-0x7F */ + tBTA_HL_MDEP_CFG mdep_cfg; + uint8_t ori_app_id; } tBTA_HL_MDEP; -typedef struct -{ - tBTA_HL_MDEP mdep[BTA_HL_NUM_MDEPS]; - tBTA_HL_ECHO_CFG echo_cfg; - tBTA_HL_MDEP_ROLE_MASK app_role_mask; - bool advertize_source_sdp; - uint8_t num_of_mdeps; +typedef struct { + tBTA_HL_MDEP mdep[BTA_HL_NUM_MDEPS]; + tBTA_HL_ECHO_CFG echo_cfg; + tBTA_HL_MDEP_ROLE_MASK app_role_mask; + bool advertize_source_sdp; + uint8_t num_of_mdeps; } tBTA_HL_SUP_FEATURE; -typedef struct -{ - bool delete_req_pending; - tBTA_HL_MDL_ID mdl_id; - tBTA_HL_MCL_HANDLE mcl_handle; +typedef struct { + bool delete_req_pending; + tBTA_HL_MDL_ID mdl_id; + tBTA_HL_MCL_HANDLE mcl_handle; } tBTA_HL_DELETE_MDL; -typedef struct -{ - uint8_t time; - uint16_t mtu; - tBTA_HL_MDL_ID mdl_id; - tBTA_HL_MDEP_ID local_mdep_id; - tBTA_HL_MDEP_ROLE local_mdep_role; - bool active; /* true if this item is in use */ - tBTA_HL_DCH_MODE dch_mode; - uint8_t fcs; - BD_ADDR peer_bd_addr; +typedef struct { + uint8_t time; + uint16_t mtu; + tBTA_HL_MDL_ID mdl_id; + tBTA_HL_MDEP_ID local_mdep_id; + tBTA_HL_MDEP_ROLE local_mdep_role; + bool active; /* true if this item is in use */ + tBTA_HL_DCH_MODE dch_mode; + uint8_t fcs; + BD_ADDR peer_bd_addr; } tBTA_HL_MDL_CFG; - -/* Maximum number of supported feature list items (list_elem in tSDP_SUP_FEATURE_ELEM) */ -#define BTA_HL_NUM_SUP_FEATURE_ELEMS 13 -#define BTA_HL_SUP_FEATURE_SDP_BUF_SIZE 512 -/* This structure is used to add supported feature lists and find supported feature elements */ -typedef struct -{ - uint8_t mdep_id; - uint16_t data_type; - tBTA_HL_MDEP_ROLE mdep_role; - char *p_mdep_desp; +/* Maximum number of supported feature list items (list_elem in + * tSDP_SUP_FEATURE_ELEM) */ +#define BTA_HL_NUM_SUP_FEATURE_ELEMS 13 +#define BTA_HL_SUP_FEATURE_SDP_BUF_SIZE 512 +/* This structure is used to add supported feature lists and find supported + * feature elements */ +typedef struct { + uint8_t mdep_id; + uint16_t data_type; + tBTA_HL_MDEP_ROLE mdep_role; + char* p_mdep_desp; } tBTA_HL_SUP_FEATURE_ELEM; -typedef struct -{ - uint16_t num_elems; - tBTA_HL_SUP_FEATURE_ELEM list_elem[BTA_HL_NUM_SUP_FEATURE_ELEMS]; +typedef struct { + uint16_t num_elems; + tBTA_HL_SUP_FEATURE_ELEM list_elem[BTA_HL_NUM_SUP_FEATURE_ELEMS]; } tBTA_HL_SUP_FEATURE_LIST_ELEM; - -typedef struct -{ - tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */ - tBTA_SEC sec_mask; /* security mask for accepting conenction*/ - const char *p_srv_name; /* service name to be used in the SDP; null terminated*/ - const char *p_srv_desp; /* service description to be used in the SDP; null terminated */ - const char *p_provider_name; /* provide name to be used in the SDP; null terminated */ +typedef struct { + tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */ + tBTA_SEC sec_mask; /* security mask for accepting conenction*/ + const char* + p_srv_name; /* service name to be used in the SDP; null terminated*/ + const char* p_srv_desp; /* service description to be used in the SDP; null + terminated */ + const char* + p_provider_name; /* provide name to be used in the SDP; null terminated */ } tBTA_HL_REG_PARAM; -typedef struct -{ - uint16_t ctrl_psm; - BD_ADDR bd_addr; /* Address of peer device */ - tBTA_SEC sec_mask; /* security mask for initiating connection*/ +typedef struct { + uint16_t ctrl_psm; + BD_ADDR bd_addr; /* Address of peer device */ + tBTA_SEC sec_mask; /* security mask for initiating connection*/ } tBTA_HL_CCH_OPEN_PARAM; - -typedef struct -{ - uint16_t ctrl_psm; - tBTA_HL_MDEP_ID local_mdep_id; /* local MDEP ID */ - tBTA_HL_MDEP_ID peer_mdep_id; /* peer mdep id */ - tBTA_HL_DCH_CFG local_cfg; - tBTA_SEC sec_mask; /* security mask for initiating connection*/ +typedef struct { + uint16_t ctrl_psm; + tBTA_HL_MDEP_ID local_mdep_id; /* local MDEP ID */ + tBTA_HL_MDEP_ID peer_mdep_id; /* peer mdep id */ + tBTA_HL_DCH_CFG local_cfg; + tBTA_SEC sec_mask; /* security mask for initiating connection*/ } tBTA_HL_DCH_OPEN_PARAM; - -typedef struct -{ - uint16_t ctrl_psm; - tBTA_HL_MDL_ID mdl_id; +typedef struct { + uint16_t ctrl_psm; + tBTA_HL_MDL_ID mdl_id; } tBTA_HL_DCH_RECONNECT_PARAM; - -typedef struct -{ - uint16_t ctrl_psm; - uint16_t pkt_size; - tBTA_HL_DCH_CFG local_cfg; +typedef struct { + uint16_t ctrl_psm; + uint16_t pkt_size; + tBTA_HL_DCH_CFG local_cfg; } tBTA_HL_DCH_ECHO_TEST_PARAM; -typedef struct -{ - uint16_t buf_size; - uint8_t p_buf; /* buffer pointer */ +typedef struct { + uint16_t buf_size; + uint8_t p_buf; /* buffer pointer */ } tBTA_HL_DCH_BUF_INFO; -typedef struct -{ - tBTA_HL_MDEP_ID local_mdep_id; /* local MDEP ID */ - tBTA_HL_MDL_ID mdl_id; - tBTA_HL_DCH_CREATE_RSP rsp_code; - tBTA_HL_DCH_CFG cfg_rsp; +typedef struct { + tBTA_HL_MDEP_ID local_mdep_id; /* local MDEP ID */ + tBTA_HL_MDL_ID mdl_id; + tBTA_HL_DCH_CREATE_RSP rsp_code; + tBTA_HL_DCH_CFG cfg_rsp; } tBTA_HL_DCH_CREATE_RSP_PARAM; -typedef struct -{ - uint16_t data_type; - uint8_t mdep_id; - tBTA_HL_MDEP_ROLE mdep_role; - char mdep_desp[BTA_HL_MDEP_DESP_LEN+1]; -}tBTA_HL_SDP_MDEP_CFG; - -typedef struct -{ - uint16_t ctrl_psm; - uint16_t data_psm; - uint8_t mcap_sup_proc; - uint8_t num_mdeps; /* number of mdep elements from SDP*/ - char srv_name[BTA_SERVICE_NAME_LEN+1]; - char srv_desp[BTA_SERVICE_DESP_LEN+1]; - char provider_name[BTA_PROVIDER_NAME_LEN+1]; - tBTA_HL_SDP_MDEP_CFG mdep_cfg[BTA_HL_NUM_SDP_MDEPS]; +typedef struct { + uint16_t data_type; + uint8_t mdep_id; + tBTA_HL_MDEP_ROLE mdep_role; + char mdep_desp[BTA_HL_MDEP_DESP_LEN + 1]; +} tBTA_HL_SDP_MDEP_CFG; + +typedef struct { + uint16_t ctrl_psm; + uint16_t data_psm; + uint8_t mcap_sup_proc; + uint8_t num_mdeps; /* number of mdep elements from SDP*/ + char srv_name[BTA_SERVICE_NAME_LEN + 1]; + char srv_desp[BTA_SERVICE_DESP_LEN + 1]; + char provider_name[BTA_PROVIDER_NAME_LEN + 1]; + tBTA_HL_SDP_MDEP_CFG mdep_cfg[BTA_HL_NUM_SDP_MDEPS]; } tBTA_HL_SDP_REC; -typedef struct -{ - uint8_t num_recs; - tBTA_HL_SDP_REC sdp_rec[BTA_HL_NUM_SDP_RECS]; +typedef struct { + uint8_t num_recs; + tBTA_HL_SDP_REC sdp_rec[BTA_HL_NUM_SDP_RECS]; } tBTA_HL_SDP; /* HL control callback function events */ -enum -{ - BTA_HL_CTRL_ENABLE_CFM_EVT = 0, - BTA_HL_CTRL_DISABLE_CFM_EVT -}; +enum { BTA_HL_CTRL_ENABLE_CFM_EVT = 0, BTA_HL_CTRL_DISABLE_CFM_EVT }; typedef uint8_t tBTA_HL_CTRL_EVT; /* Structure associated with BTA_HL_ENABLE_EVT BTA_HL_DISABLE_EVT */ -typedef struct -{ - tBTA_HL_STATUS status; -} tBTA_HL_CTRL_ENABLE_DISABLE; +typedef struct { tBTA_HL_STATUS status; } tBTA_HL_CTRL_ENABLE_DISABLE; -typedef union -{ - tBTA_HL_CTRL_ENABLE_DISABLE enable_cfm; - tBTA_HL_CTRL_ENABLE_DISABLE disable_cfm; +typedef union { + tBTA_HL_CTRL_ENABLE_DISABLE enable_cfm; + tBTA_HL_CTRL_ENABLE_DISABLE disable_cfm; } tBTA_HL_CTRL; /* HL instance callback function events */ -enum -{ - BTA_HL_REGISTER_CFM_EVT =0, - BTA_HL_DEREGISTER_CFM_EVT, - BTA_HL_CCH_OPEN_IND_EVT, - BTA_HL_CCH_OPEN_CFM_EVT, - BTA_HL_CCH_CLOSE_IND_EVT, - BTA_HL_CCH_CLOSE_CFM_EVT, - BTA_HL_DCH_CREATE_IND_EVT, - BTA_HL_DCH_OPEN_IND_EVT, - BTA_HL_DCH_OPEN_CFM_EVT, - BTA_HL_DCH_CLOSE_IND_EVT, - BTA_HL_DCH_CLOSE_CFM_EVT, - BTA_HL_DCH_RECONNECT_IND_EVT, - BTA_HL_DCH_RECONNECT_CFM_EVT, - - BTA_HL_DCH_ABORT_IND_EVT, - BTA_HL_DCH_ABORT_CFM_EVT, - BTA_HL_DELETE_MDL_IND_EVT, - BTA_HL_DELETE_MDL_CFM_EVT, - BTA_HL_DCH_SEND_DATA_CFM_EVT, - BTA_HL_DCH_RCV_DATA_IND_EVT, - BTA_HL_CONG_CHG_IND_EVT, - BTA_HL_DCH_ECHO_TEST_CFM_EVT, - BTA_HL_SDP_QUERY_CFM_EVT, - BTA_HL_SDP_INFO_IND_EVT +enum { + BTA_HL_REGISTER_CFM_EVT = 0, + BTA_HL_DEREGISTER_CFM_EVT, + BTA_HL_CCH_OPEN_IND_EVT, + BTA_HL_CCH_OPEN_CFM_EVT, + BTA_HL_CCH_CLOSE_IND_EVT, + BTA_HL_CCH_CLOSE_CFM_EVT, + BTA_HL_DCH_CREATE_IND_EVT, + BTA_HL_DCH_OPEN_IND_EVT, + BTA_HL_DCH_OPEN_CFM_EVT, + BTA_HL_DCH_CLOSE_IND_EVT, + BTA_HL_DCH_CLOSE_CFM_EVT, + BTA_HL_DCH_RECONNECT_IND_EVT, + BTA_HL_DCH_RECONNECT_CFM_EVT, + + BTA_HL_DCH_ABORT_IND_EVT, + BTA_HL_DCH_ABORT_CFM_EVT, + BTA_HL_DELETE_MDL_IND_EVT, + BTA_HL_DELETE_MDL_CFM_EVT, + BTA_HL_DCH_SEND_DATA_CFM_EVT, + BTA_HL_DCH_RCV_DATA_IND_EVT, + BTA_HL_CONG_CHG_IND_EVT, + BTA_HL_DCH_ECHO_TEST_CFM_EVT, + BTA_HL_SDP_QUERY_CFM_EVT, + BTA_HL_SDP_INFO_IND_EVT }; typedef uint8_t tBTA_HL_EVT; - -typedef struct -{ - tBTA_HL_STATUS status; /* start status */ - uint8_t app_id; - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + tBTA_HL_STATUS status; /* start status */ + uint8_t app_id; + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_REGISTER_CFM; - -typedef struct -{ - tBTA_HL_STATUS status; /* start status */ - uint8_t app_id; - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + tBTA_HL_STATUS status; /* start status */ + uint8_t app_id; + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_DEREGISTER_CFM; - -typedef struct -{ - bool intentional; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + bool intentional; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_CCH_CLOSE_IND; - -typedef struct -{ - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_MCL_IND; -typedef struct -{ - tBTA_HL_STATUS status; /* connection status */ - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + tBTA_HL_STATUS status; /* connection status */ + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_MCL_CFM; -typedef struct -{ - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; - BD_ADDR bd_addr; /* address of peer device */ +typedef struct { + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; + BD_ADDR bd_addr; /* address of peer device */ } tBTA_HL_CCH_OPEN_IND; -typedef struct -{ - tBTA_HL_STATUS status; /* connection status */ - uint8_t app_id; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; - BD_ADDR bd_addr; /* address of peer device */ +typedef struct { + tBTA_HL_STATUS status; /* connection status */ + uint8_t app_id; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; + BD_ADDR bd_addr; /* address of peer device */ } tBTA_HL_CCH_OPEN_CFM; -typedef struct -{ - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; - tBTA_HL_MDEP_ID local_mdep_id; - tBTA_HL_MDL_ID mdl_id; /* MCAP data link ID for this - data channel conenction */ - tBTA_HL_DCH_CFG cfg; /* dch cfg requested by the peer device */ - BD_ADDR bd_addr; /* address of peer device */ +typedef struct { + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; + tBTA_HL_MDEP_ID local_mdep_id; + tBTA_HL_MDL_ID mdl_id; /* MCAP data link ID for this + data channel conenction */ + tBTA_HL_DCH_CFG cfg; /* dch cfg requested by the peer device */ + BD_ADDR bd_addr; /* address of peer device */ } tBTA_HL_DCH_CREATE_IND; -typedef struct -{ - tBTA_HL_MDL_HANDLE mdl_handle; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; - tBTA_HL_MDEP_ID local_mdep_id; - tBTA_HL_MDL_ID mdl_id; /* MCAP data link ID for this - data channel conenction */ - tBTA_HL_DCH_MODE dch_mode; /* data channel mode - reliable or streaming*/ - - bool first_reliable; /* whether this is the first reliable data channel */ - uint16_t mtu; +typedef struct { + tBTA_HL_MDL_HANDLE mdl_handle; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; + tBTA_HL_MDEP_ID local_mdep_id; + tBTA_HL_MDL_ID mdl_id; /* MCAP data link ID for this + data channel conenction */ + tBTA_HL_DCH_MODE dch_mode; /* data channel mode - reliable or streaming*/ + + bool first_reliable; /* whether this is the first reliable data channel */ + uint16_t mtu; } tBTA_HL_DCH_OPEN_IND; -typedef struct -{ - tBTA_HL_STATUS status; /* connection status */ - tBTA_HL_MDL_HANDLE mdl_handle; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; - tBTA_HL_MDEP_ID local_mdep_id; - tBTA_HL_MDL_ID mdl_id; /* MCAP data link ID for this - data channel conenction */ - tBTA_HL_DCH_MODE dch_mode; /* data channel mode - reliable or streaming*/ - bool first_reliable; /* whether this is the first reliable data channel */ - uint16_t mtu; +typedef struct { + tBTA_HL_STATUS status; /* connection status */ + tBTA_HL_MDL_HANDLE mdl_handle; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; + tBTA_HL_MDEP_ID local_mdep_id; + tBTA_HL_MDL_ID mdl_id; /* MCAP data link ID for this + data channel conenction */ + tBTA_HL_DCH_MODE dch_mode; /* data channel mode - reliable or streaming*/ + bool first_reliable; /* whether this is the first reliable data channel */ + uint16_t mtu; } tBTA_HL_DCH_OPEN_CFM; - -typedef struct -{ - bool intentional; - tBTA_HL_MDL_HANDLE mdl_handle; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + bool intentional; + tBTA_HL_MDL_HANDLE mdl_handle; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_DCH_CLOSE_IND; - -typedef struct -{ - tBTA_HL_MDL_HANDLE mdl_handle; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + tBTA_HL_MDL_HANDLE mdl_handle; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_MDL_IND; -typedef struct -{ - tBTA_HL_STATUS status; - tBTA_HL_MDL_HANDLE mdl_handle; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; +typedef struct { + tBTA_HL_STATUS status; + tBTA_HL_MDL_HANDLE mdl_handle; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; } tBTA_HL_MDL_CFM; -typedef struct -{ - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; - tBTA_HL_MDL_ID mdl_id; +typedef struct { + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; + tBTA_HL_MDL_ID mdl_id; } tBTA_HL_DELETE_MDL_IND; -typedef struct -{ - tBTA_HL_STATUS status; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; - tBTA_HL_MDL_ID mdl_id; +typedef struct { + tBTA_HL_STATUS status; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; + tBTA_HL_MDL_ID mdl_id; } tBTA_HL_DELETE_MDL_CFM; -typedef struct -{ - tBTA_HL_MDL_HANDLE mdl_handle; - tBTA_HL_MCL_HANDLE mcl_handle; - tBTA_HL_APP_HANDLE app_handle; - bool cong; +typedef struct { + tBTA_HL_MDL_HANDLE mdl_handle; + tBTA_HL_MCL_HANDLE mcl_handle; + tBTA_HL_APP_HANDLE app_handle; + bool cong; } tBTA_HL_DCH_CONG_IND; -typedef struct -{ - tBTA_HL_APP_HANDLE app_handle; - uint16_t ctrl_psm; - uint16_t data_psm; - uint8_t data_x_spec; - uint8_t mcap_sup_procs; +typedef struct { + tBTA_HL_APP_HANDLE app_handle; + uint16_t ctrl_psm; + uint16_t data_psm; + uint8_t data_x_spec; + uint8_t mcap_sup_procs; } tBTA_HL_SDP_INFO_IND; -typedef struct -{ - tBTA_HL_STATUS status; - uint8_t app_id; - tBTA_HL_APP_HANDLE app_handle; - BD_ADDR bd_addr; - tBTA_HL_SDP *p_sdp; +typedef struct { + tBTA_HL_STATUS status; + uint8_t app_id; + tBTA_HL_APP_HANDLE app_handle; + BD_ADDR bd_addr; + tBTA_HL_SDP* p_sdp; } tBTA_HL_SDP_QUERY_CFM; -typedef union -{ - tBTA_HL_REGISTER_CFM reg_cfm; - tBTA_HL_DEREGISTER_CFM dereg_cfm; - tBTA_HL_CCH_OPEN_IND cch_open_ind; - tBTA_HL_CCH_OPEN_CFM cch_open_cfm; - tBTA_HL_CCH_CLOSE_IND cch_close_ind; - tBTA_HL_MCL_CFM cch_close_cfm; - tBTA_HL_DCH_CREATE_IND dch_create_ind; - tBTA_HL_DCH_OPEN_IND dch_open_ind; - tBTA_HL_DCH_OPEN_CFM dch_open_cfm; - tBTA_HL_DCH_CLOSE_IND dch_close_ind; - tBTA_HL_MDL_CFM dch_close_cfm; - tBTA_HL_DCH_OPEN_IND dch_reconnect_ind; - tBTA_HL_DCH_OPEN_CFM dch_reconnect_cfm; - tBTA_HL_MCL_IND dch_abort_ind; - tBTA_HL_MCL_CFM dch_abort_cfm; - tBTA_HL_DELETE_MDL_IND delete_mdl_ind; - tBTA_HL_DELETE_MDL_CFM delete_mdl_cfm; - tBTA_HL_MDL_CFM dch_send_data_cfm; - tBTA_HL_MDL_IND dch_rcv_data_ind; - tBTA_HL_DCH_CONG_IND dch_cong_ind; - tBTA_HL_MCL_CFM echo_test_cfm; - tBTA_HL_SDP_QUERY_CFM sdp_query_cfm; - tBTA_HL_SDP_INFO_IND sdp_info_ind; +typedef union { + tBTA_HL_REGISTER_CFM reg_cfm; + tBTA_HL_DEREGISTER_CFM dereg_cfm; + tBTA_HL_CCH_OPEN_IND cch_open_ind; + tBTA_HL_CCH_OPEN_CFM cch_open_cfm; + tBTA_HL_CCH_CLOSE_IND cch_close_ind; + tBTA_HL_MCL_CFM cch_close_cfm; + tBTA_HL_DCH_CREATE_IND dch_create_ind; + tBTA_HL_DCH_OPEN_IND dch_open_ind; + tBTA_HL_DCH_OPEN_CFM dch_open_cfm; + tBTA_HL_DCH_CLOSE_IND dch_close_ind; + tBTA_HL_MDL_CFM dch_close_cfm; + tBTA_HL_DCH_OPEN_IND dch_reconnect_ind; + tBTA_HL_DCH_OPEN_CFM dch_reconnect_cfm; + tBTA_HL_MCL_IND dch_abort_ind; + tBTA_HL_MCL_CFM dch_abort_cfm; + tBTA_HL_DELETE_MDL_IND delete_mdl_ind; + tBTA_HL_DELETE_MDL_CFM delete_mdl_cfm; + tBTA_HL_MDL_CFM dch_send_data_cfm; + tBTA_HL_MDL_IND dch_rcv_data_ind; + tBTA_HL_DCH_CONG_IND dch_cong_ind; + tBTA_HL_MCL_CFM echo_test_cfm; + tBTA_HL_SDP_QUERY_CFM sdp_query_cfm; + tBTA_HL_SDP_INFO_IND sdp_info_ind; } tBTA_HL; /* HL callback functions */ -typedef void tBTA_HL_CTRL_CBACK(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data); -typedef void tBTA_HL_CBACK(tBTA_HL_EVT event, tBTA_HL *p_data); - +typedef void tBTA_HL_CTRL_CBACK(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL* p_data); +typedef void tBTA_HL_CBACK(tBTA_HL_EVT event, tBTA_HL* p_data); /***************************************************************************** * External Function Declarations @@ -649,7 +590,7 @@ typedef void tBTA_HL_CBACK(tBTA_HL_EVT event, tBTA_HL *p_data); * Returns void * ******************************************************************************/ -extern void BTA_HlEnable(tBTA_HL_CTRL_CBACK *p_ctrl_cback); +extern void BTA_HlEnable(tBTA_HL_CTRL_CBACK* p_ctrl_cback); /******************************************************************************* * * Function BTA_HlDisable @@ -675,9 +616,8 @@ extern void BTA_HlDisable(void); * Returns void * ******************************************************************************/ -extern void BTA_HlUpdate(uint8_t app_id, - tBTA_HL_REG_PARAM *p_reg_param, bool is_register, - tBTA_HL_CBACK *p_cback); +extern void BTA_HlUpdate(uint8_t app_id, tBTA_HL_REG_PARAM* p_reg_param, + bool is_register, tBTA_HL_CBACK* p_cback); /******************************************************************************* * @@ -694,9 +634,8 @@ extern void BTA_HlUpdate(uint8_t app_id, * Returns void * ******************************************************************************/ -extern void BTA_HlRegister(uint8_t app_id, - tBTA_HL_REG_PARAM *p_reg_param, - tBTA_HL_CBACK *p_cback); +extern void BTA_HlRegister(uint8_t app_id, tBTA_HL_REG_PARAM* p_reg_param, + tBTA_HL_CBACK* p_cback); /******************************************************************************* * @@ -709,13 +648,14 @@ extern void BTA_HlRegister(uint8_t app_id, * Returns void * ******************************************************************************/ -extern void BTA_HlDeregister(uint8_t app_id,tBTA_HL_APP_HANDLE app_handle); +extern void BTA_HlDeregister(uint8_t app_id, tBTA_HL_APP_HANDLE app_handle); /******************************************************************************* * * Function BTA_HlCchOpen * - * Description Open a Control channel connection with the specified BD address + * Description Open a Control channel connection with the specified BD + *address * and the control PSM value is used to select which * HDP insatnce should be used in case the peer device support * multiple HDP instances. @@ -730,7 +670,7 @@ extern void BTA_HlDeregister(uint8_t app_id,tBTA_HL_APP_HANDLE app_handle); * instance is used for the control channel setup ******************************************************************************/ extern void BTA_HlCchOpen(uint8_t app_id, tBTA_HL_APP_HANDLE app_handle, - tBTA_HL_CCH_OPEN_PARAM *p_open_param); + tBTA_HL_CCH_OPEN_PARAM* p_open_param); /******************************************************************************* * @@ -744,13 +684,14 @@ extern void BTA_HlCchOpen(uint8_t app_id, tBTA_HL_APP_HANDLE app_handle, * Returns void * ******************************************************************************/ -extern void BTA_HlCchClose(tBTA_HL_MCL_HANDLE mcl_handle); +extern void BTA_HlCchClose(tBTA_HL_MCL_HANDLE mcl_handle); /******************************************************************************* * * Function BTA_HlDchOpen * - * Description Open a data channel connection with the specified DCH parameters + * Description Open a data channel connection with the specified DCH + *parameters * * Parameters mcl_handle - MCL handle * p_open_param - parameters for opening a data channel @@ -758,8 +699,8 @@ extern void BTA_HlCchClose(tBTA_HL_MCL_HANDLE mcl_handle); * Returns void * ******************************************************************************/ -extern void BTA_HlDchOpen(tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_DCH_OPEN_PARAM *p_open_param); +extern void BTA_HlDchOpen(tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_DCH_OPEN_PARAM* p_open_param); /******************************************************************************* * * Function BTA_HlDchReconnect @@ -773,7 +714,7 @@ extern void BTA_HlDchOpen(tBTA_HL_MCL_HANDLE mcl_handle, * ******************************************************************************/ extern void BTA_HlDchReconnect(tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_DCH_RECONNECT_PARAM *p_recon_param); + tBTA_HL_DCH_RECONNECT_PARAM* p_recon_param); /******************************************************************************* * * Function BTA_HlDchClose @@ -814,8 +755,7 @@ extern void BTA_HlDchAbort(tBTA_HL_MCL_HANDLE mcl_handle); * Returns void * ******************************************************************************/ -extern void BTA_HlSendData(tBTA_HL_MDL_HANDLE mdl_handle, - uint16_t pkt_size); +extern void BTA_HlSendData(tBTA_HL_MDL_HANDLE mdl_handle, uint16_t pkt_size); /******************************************************************************* * @@ -829,12 +769,13 @@ extern void BTA_HlSendData(tBTA_HL_MDL_HANDLE mdl_handle, * Returns void * * note: If mdl_id = 0xFFFF then this means to delete all MDLs - * and this value can only be used with DeleteMdl request only + * and this value can only be used with DeleteMdl request + *only * not other requests * ******************************************************************************/ extern void BTA_HlDeleteMdl(tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_MDL_ID mdl_id ); + tBTA_HL_MDL_ID mdl_id); /******************************************************************************* * @@ -848,8 +789,8 @@ extern void BTA_HlDeleteMdl(tBTA_HL_MCL_HANDLE mcl_handle, * Returns void * ******************************************************************************/ -extern void BTA_HlDchEchoTest( tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_DCH_ECHO_TEST_PARAM *p_echo_test_param); +extern void BTA_HlDchEchoTest(tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_DCH_ECHO_TEST_PARAM* p_echo_test_param); /******************************************************************************* * @@ -864,8 +805,8 @@ extern void BTA_HlDchEchoTest( tBTA_HL_MCL_HANDLE mcl_handle, * Returns void * ******************************************************************************/ -extern void BTA_HlSdpQuery(uint8_t app_id,tBTA_HL_APP_HANDLE app_handle, - BD_ADDR bd_addr); +extern void BTA_HlSdpQuery(uint8_t app_id, tBTA_HL_APP_HANDLE app_handle, + BD_ADDR bd_addr); /******************************************************************************* * @@ -875,21 +816,21 @@ extern void BTA_HlSdpQuery(uint8_t app_id,tBTA_HL_APP_HANDLE app_handle, * request * * Parameters mcl_handle - MCL handle - * p_rsp_param - parameters specified whether the request should - * be accepted or not and if it should be accepted - * then it also specified the configuration response + * p_rsp_param - parameters specified whether the request + *should + * be accepted or not and if it should be + *accepted + * then it also specified the configuration + *response * value * * Returns void * ******************************************************************************/ extern void BTA_HlDchCreateRsp(tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_DCH_CREATE_RSP_PARAM *p_rsp_param); - - + tBTA_HL_DCH_CREATE_RSP_PARAM* p_rsp_param); #ifdef __cplusplus - } #endif diff --git a/system/bta/include/bta_hl_ci.h b/system/bta/include/bta_hl_ci.h index fd4116e9ee6..f12ed12b620 100644 --- a/system/bta/include/bta_hl_ci.h +++ b/system/bta/include/bta_hl_ci.h @@ -60,9 +60,8 @@ extern "C" { * Returns void * ******************************************************************************/ -extern void bta_hl_ci_get_tx_data( tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_STATUS status, - uint16_t evt ); +extern void bta_hl_ci_get_tx_data(tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_STATUS status, uint16_t evt); /******************************************************************************* * @@ -79,11 +78,8 @@ extern void bta_hl_ci_get_tx_data( tBTA_HL_MDL_HANDLE mdl_handle, * Returns void * ******************************************************************************/ -extern void bta_hl_ci_put_rx_data( tBTA_HL_MDL_HANDLE mdl_handle, - tBTA_HL_STATUS status, - uint16_t evt ); - - +extern void bta_hl_ci_put_rx_data(tBTA_HL_MDL_HANDLE mdl_handle, + tBTA_HL_STATUS status, uint16_t evt); /******************************************************************************* * @@ -100,10 +96,8 @@ extern void bta_hl_ci_put_rx_data( tBTA_HL_MDL_HANDLE mdl_handle, * Returns void * ******************************************************************************/ -extern void bta_hl_ci_get_echo_data( tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status, - uint16_t evt ); - +extern void bta_hl_ci_get_echo_data(tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status, uint16_t evt); /******************************************************************************* * @@ -120,9 +114,8 @@ extern void bta_hl_ci_get_echo_data( tBTA_HL_MCL_HANDLE mcl_handle, * Returns void * ******************************************************************************/ -extern void bta_hl_ci_put_echo_data( tBTA_HL_MCL_HANDLE mcl_handle, - tBTA_HL_STATUS status, - uint16_t evt ); +extern void bta_hl_ci_put_echo_data(tBTA_HL_MCL_HANDLE mcl_handle, + tBTA_HL_STATUS status, uint16_t evt); #ifdef __cplusplus } diff --git a/system/bta/include/bta_hl_co.h b/system/bta/include/bta_hl_co.h index 92759072f92..7a290c53c39 100644 --- a/system/bta/include/bta_hl_co.h +++ b/system/bta/include/bta_hl_co.h @@ -39,7 +39,6 @@ extern "C" { * Common Definitions **************************/ - /******************************************************************************* * * Function bta_hl_co_get_num_of_mdep @@ -48,19 +47,21 @@ extern "C" { * application ID * * Parameters app_id - application ID - * p_num_of_mdep (output) - number of MDEP configurations supported + * p_num_of_mdep (output) - number of MDEP configurations + *supported * by the application * * Returns Bloolean - true success * ******************************************************************************/ -extern bool bta_hl_co_get_num_of_mdep(uint8_t app_id, uint8_t *p_num_of_mdep); +extern bool bta_hl_co_get_num_of_mdep(uint8_t app_id, uint8_t* p_num_of_mdep); /******************************************************************************* * * Function bta_hl_co_advrtise_source_sdp * * Description This function is called to find out whether the SOURCE MDEP - * configuration information should be advertize in the SDP or nopt + * configuration information should be advertize in the SDP or + *nopt * * Parameters app_id - application ID * @@ -74,7 +75,8 @@ extern bool bta_hl_co_advrtise_source_sdp(uint8_t app_id); * Function bta_hl_co_get_mdep_config * * Description This function is called to get the supported feature - * configuration for the specified mdep index and it also assigns + * configuration for the specified mdep index and it also + *assigns * the MDEP ID for the specified mdep index * * Parameters app_id - HDP application ID @@ -86,12 +88,10 @@ extern bool bta_hl_co_advrtise_source_sdp(uint8_t app_id); * * Returns Bloolean - true success ******************************************************************************/ -extern bool bta_hl_co_get_mdep_config(uint8_t app_id, - uint8_t mdep_idx, - uint8_t mdep_counter, - tBTA_HL_MDEP_ID mdep_id, - tBTA_HL_MDEP_CFG *p_mdep_cfg); - +extern bool bta_hl_co_get_mdep_config(uint8_t app_id, uint8_t mdep_idx, + uint8_t mdep_counter, + tBTA_HL_MDEP_ID mdep_id, + tBTA_HL_MDEP_CFG* p_mdep_cfg); /******************************************************************************* * @@ -101,20 +101,21 @@ extern bool bta_hl_co_get_mdep_config(uint8_t app_id, * maximum APDU size configuration * * Parameters app_id - HDP application ID - * p_echo_cfg (output) - pointer to the Echo test maximum APDU size + * p_echo_cfg (output) - pointer to the Echo test maximum APDU + *size * configuration * * Returns Bloolean - true success ******************************************************************************/ -extern bool bta_hl_co_get_echo_config(uint8_t app_id, - tBTA_HL_ECHO_CFG *p_echo_cfg); - +extern bool bta_hl_co_get_echo_config(uint8_t app_id, + tBTA_HL_ECHO_CFG* p_echo_cfg); /******************************************************************************* * * Function bta_hl_co_save_mdl * - * Description This function is called to save a MDL configuration item in persistent + * Description This function is called to save a MDL configuration item in + *persistent * storage * * Parameters app_id - HDP application ID @@ -124,12 +125,14 @@ extern bool bta_hl_co_get_echo_config(uint8_t app_id, * Returns void * ******************************************************************************/ -extern void bta_hl_co_save_mdl(uint8_t app_id, uint8_t item_idx, tBTA_HL_MDL_CFG *p_mdl_cfg ); +extern void bta_hl_co_save_mdl(uint8_t app_id, uint8_t item_idx, + tBTA_HL_MDL_CFG* p_mdl_cfg); /******************************************************************************* * * Function bta_hl_co_delete_mdl * - * Description This function is called to delete a MDL configuration item in persistent + * Description This function is called to delete a MDL configuration item in + *persistent * storage * * Parameters app_id - HDP application ID @@ -144,20 +147,21 @@ extern void bta_hl_co_delete_mdl(uint8_t app_id, uint8_t item_idx); * Function bta_hl_co_get_mdl_config * * Description This function is called to get the MDL configuration - * from teh persistent memory. This function shall only be called + * from teh persistent memory. This function shall only be +*called *8 once after the device is powered up * * Parameters app_id - HDP application ID - * buffer_size - the unit of the buffer size is sizeof(tBTA_HL_MDL_CFG) + * buffer_size - the unit of the buffer size is +*sizeof(tBTA_HL_MDL_CFG) * p_mdl_buf - Point to the starting location of the buffer * * Returns bool * * ******************************************************************************/ -extern bool bta_hl_co_load_mdl_config (uint8_t app_id, uint8_t buffer_size, - tBTA_HL_MDL_CFG *p_mdl_buf ); - +extern bool bta_hl_co_load_mdl_config(uint8_t app_id, uint8_t buffer_size, + tBTA_HL_MDL_CFG* p_mdl_buf); /******************************************************************************* * @@ -175,9 +179,9 @@ extern bool bta_hl_co_load_mdl_config (uint8_t app_id, uint8_t buffer_size, * Returns Void * ******************************************************************************/ -extern void bta_hl_co_get_tx_data (uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle, - uint16_t buf_size, uint8_t *p_buf, uint16_t evt); - +extern void bta_hl_co_get_tx_data(uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle, + uint16_t buf_size, uint8_t* p_buf, + uint16_t evt); /******************************************************************************* * @@ -195,8 +199,9 @@ extern void bta_hl_co_get_tx_data (uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle * Returns Void * ******************************************************************************/ -extern void bta_hl_co_put_rx_data (uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle, - uint16_t data_size, uint8_t *p_data, uint16_t evt); +extern void bta_hl_co_put_rx_data(uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle, + uint16_t data_size, uint8_t* p_data, + uint16_t evt); /******************************************************************************* * * Function bta_hl_co_get_tx_data @@ -213,8 +218,10 @@ extern void bta_hl_co_put_rx_data (uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle * Returns Void * ******************************************************************************/ -extern void bta_hl_co_get_echo_data (uint8_t app_id, tBTA_HL_MCL_HANDLE mcl_handle, - uint16_t buf_size, uint8_t *p_buf, uint16_t evt); +extern void bta_hl_co_get_echo_data(uint8_t app_id, + tBTA_HL_MCL_HANDLE mcl_handle, + uint16_t buf_size, uint8_t* p_buf, + uint16_t evt); /******************************************************************************* * @@ -232,8 +239,10 @@ extern void bta_hl_co_get_echo_data (uint8_t app_id, tBTA_HL_MCL_HANDLE mcl_hand * Returns Void * ******************************************************************************/ -extern void bta_hl_co_put_echo_data (uint8_t app_id, tBTA_HL_MCL_HANDLE mcl_handle, - uint16_t data_size, uint8_t *p_data, uint16_t evt); +extern void bta_hl_co_put_echo_data(uint8_t app_id, + tBTA_HL_MCL_HANDLE mcl_handle, + uint16_t data_size, uint8_t* p_data, + uint16_t evt); #ifdef __cplusplus } diff --git a/system/bta/include/bta_jv_api.h b/system/bta/include/bta_jv_api.h index bf1371cbdbc..b25b312e05d 100644 --- a/system/bta/include/bta_jv_api.h +++ b/system/bta/include/bta_jv_api.h @@ -38,372 +38,355 @@ extern "C" { * Constants and data types ****************************************************************************/ /* status values */ -#define BTA_JV_SUCCESS 0 /* Successful operation. */ -#define BTA_JV_FAILURE 1 /* Generic failure. */ -#define BTA_JV_BUSY 2 /* Temporarily can not handle this request. */ -#define BTA_JV_NO_DATA 3 /* no data. */ -#define BTA_JV_NO_RESOURCE 4 /* No more set pm control block */ +#define BTA_JV_SUCCESS 0 /* Successful operation. */ +#define BTA_JV_FAILURE 1 /* Generic failure. */ +#define BTA_JV_BUSY 2 /* Temporarily can not handle this request. */ +#define BTA_JV_NO_DATA 3 /* no data. */ +#define BTA_JV_NO_RESOURCE 4 /* No more set pm control block */ typedef uint8_t tBTA_JV_STATUS; -#define BTA_JV_INTERNAL_ERR (-1) /* internal error. */ - -#define BTA_JV_MAX_UUIDS SDP_MAX_UUID_FILTERS -#define BTA_JV_MAX_ATTRS SDP_MAX_ATTR_FILTERS -#define BTA_JV_MAX_SDP_REC SDP_MAX_RECORDS -#define BTA_JV_MAX_L2C_CONN GAP_MAX_CONNECTIONS /* GAP handle is used as index, hence do not change this value */ -#define BTA_JV_MAX_SCN PORT_MAX_RFC_PORTS /* same as BTM_MAX_SCN (in btm_int.h) */ -#define BTA_JV_MAX_RFC_CONN MAX_RFC_PORTS +#define BTA_JV_INTERNAL_ERR (-1) /* internal error. */ + +#define BTA_JV_MAX_UUIDS SDP_MAX_UUID_FILTERS +#define BTA_JV_MAX_ATTRS SDP_MAX_ATTR_FILTERS +#define BTA_JV_MAX_SDP_REC SDP_MAX_RECORDS +#define BTA_JV_MAX_L2C_CONN \ + GAP_MAX_CONNECTIONS /* GAP handle is used as index, hence do not change this \ + value */ +#define BTA_JV_MAX_SCN \ + PORT_MAX_RFC_PORTS /* same as BTM_MAX_SCN (in btm_int.h) */ +#define BTA_JV_MAX_RFC_CONN MAX_RFC_PORTS #ifndef BTA_JV_DEF_RFC_MTU -#define BTA_JV_DEF_RFC_MTU (3*330) +#define BTA_JV_DEF_RFC_MTU (3 * 330) #endif #ifndef BTA_JV_MAX_RFC_SR_SESSION -#define BTA_JV_MAX_RFC_SR_SESSION MAX_BD_CONNECTIONS +#define BTA_JV_MAX_RFC_SR_SESSION MAX_BD_CONNECTIONS #endif /* BTA_JV_MAX_RFC_SR_SESSION can not be bigger than MAX_BD_CONNECTIONS */ #if (BTA_JV_MAX_RFC_SR_SESSION > MAX_BD_CONNECTIONS) #undef BTA_JV_MAX_RFC_SR_SESSION -#define BTA_JV_MAX_RFC_SR_SESSION MAX_BD_CONNECTIONS +#define BTA_JV_MAX_RFC_SR_SESSION MAX_BD_CONNECTIONS #endif #define BTA_JV_FIRST_SERVICE_ID BTA_FIRST_JV_SERVICE_ID -#define BTA_JV_LAST_SERVICE_ID BTA_LAST_JV_SERVICE_ID -#define BTA_JV_NUM_SERVICE_ID (BTA_LAST_JV_SERVICE_ID - BTA_FIRST_JV_SERVICE_ID + 1) +#define BTA_JV_LAST_SERVICE_ID BTA_LAST_JV_SERVICE_ID +#define BTA_JV_NUM_SERVICE_ID \ + (BTA_LAST_JV_SERVICE_ID - BTA_FIRST_JV_SERVICE_ID + 1) /* Discoverable modes */ -enum -{ - BTA_JV_DISC_NONE, - BTA_JV_DISC_LIMITED, - BTA_JV_DISC_GENERAL -}; +enum { BTA_JV_DISC_NONE, BTA_JV_DISC_LIMITED, BTA_JV_DISC_GENERAL }; typedef uint16_t tBTA_JV_DISC; -#define BTA_JV_ROLE_SLAVE BTM_ROLE_SLAVE -#define BTA_JV_ROLE_MASTER BTM_ROLE_MASTER +#define BTA_JV_ROLE_SLAVE BTM_ROLE_SLAVE +#define BTA_JV_ROLE_MASTER BTM_ROLE_MASTER typedef uint32_t tBTA_JV_ROLE; -#define BTA_JV_SERVICE_LMTD_DISCOVER BTM_COD_SERVICE_LMTD_DISCOVER /* 0x0020 */ -#define BTA_JV_SERVICE_POSITIONING BTM_COD_SERVICE_POSITIONING /* 0x0100 */ -#define BTA_JV_SERVICE_NETWORKING BTM_COD_SERVICE_NETWORKING /* 0x0200 */ -#define BTA_JV_SERVICE_RENDERING BTM_COD_SERVICE_RENDERING /* 0x0400 */ -#define BTA_JV_SERVICE_CAPTURING BTM_COD_SERVICE_CAPTURING /* 0x0800 */ -#define BTA_JV_SERVICE_OBJ_TRANSFER BTM_COD_SERVICE_OBJ_TRANSFER /* 0x1000 */ -#define BTA_JV_SERVICE_AUDIO BTM_COD_SERVICE_AUDIO /* 0x2000 */ -#define BTA_JV_SERVICE_TELEPHONY BTM_COD_SERVICE_TELEPHONY /* 0x4000 */ -#define BTA_JV_SERVICE_INFORMATION BTM_COD_SERVICE_INFORMATION /* 0x8000 */ +#define BTA_JV_SERVICE_LMTD_DISCOVER \ + BTM_COD_SERVICE_LMTD_DISCOVER /* 0x0020 \ + */ +#define BTA_JV_SERVICE_POSITIONING BTM_COD_SERVICE_POSITIONING /* 0x0100 */ +#define BTA_JV_SERVICE_NETWORKING BTM_COD_SERVICE_NETWORKING /* 0x0200 */ +#define BTA_JV_SERVICE_RENDERING BTM_COD_SERVICE_RENDERING /* 0x0400 */ +#define BTA_JV_SERVICE_CAPTURING BTM_COD_SERVICE_CAPTURING /* 0x0800 */ +#define BTA_JV_SERVICE_OBJ_TRANSFER BTM_COD_SERVICE_OBJ_TRANSFER /* 0x1000 */ +#define BTA_JV_SERVICE_AUDIO BTM_COD_SERVICE_AUDIO /* 0x2000 */ +#define BTA_JV_SERVICE_TELEPHONY BTM_COD_SERVICE_TELEPHONY /* 0x4000 */ +#define BTA_JV_SERVICE_INFORMATION BTM_COD_SERVICE_INFORMATION /* 0x8000 */ /* JV ID type */ -#define BTA_JV_PM_ID_1 1 /* PM example profile 1 */ -#define BTA_JV_PM_ID_2 2 /* PM example profile 2 */ -#define BTA_JV_PM_ID_CLEAR 0 /* Special JV ID used to clear PM profile */ -#define BTA_JV_PM_ALL 0xFF /* Generic match all id, see bta_dm_cfg.c */ +#define BTA_JV_PM_ID_1 1 /* PM example profile 1 */ +#define BTA_JV_PM_ID_2 2 /* PM example profile 2 */ +#define BTA_JV_PM_ID_CLEAR 0 /* Special JV ID used to clear PM profile */ +#define BTA_JV_PM_ALL 0xFF /* Generic match all id, see bta_dm_cfg.c */ typedef uint8_t tBTA_JV_PM_ID; -#define BTA_JV_PM_HANDLE_CLEAR 0xFF /* Special JV ID used to clear PM profile */ +#define BTA_JV_PM_HANDLE_CLEAR \ + 0xFF /* Special JV ID used to clear PM profile */ -/* define maximum number of registered PM entities. should be in sync with bta pm! */ +/* define maximum number of registered PM entities. should be in sync with bta + * pm! */ #ifndef BTA_JV_PM_MAX_NUM #define BTA_JV_PM_MAX_NUM 5 #endif /* JV pm connection states */ -enum -{ - BTA_JV_CONN_OPEN = 0, /* Connection opened state */ - BTA_JV_CONN_CLOSE, /* Connection closed state */ - BTA_JV_APP_OPEN, /* JV Application opened state */ - BTA_JV_APP_CLOSE, /* JV Application closed state */ - BTA_JV_SCO_OPEN, /* SCO connection opened state */ - BTA_JV_SCO_CLOSE, /* SCO connection opened state */ - BTA_JV_CONN_IDLE, /* Connection idle state */ - BTA_JV_CONN_BUSY, /* Connection busy state */ - BTA_JV_MAX_CONN_STATE /* Max number of connection state */ +enum { + BTA_JV_CONN_OPEN = 0, /* Connection opened state */ + BTA_JV_CONN_CLOSE, /* Connection closed state */ + BTA_JV_APP_OPEN, /* JV Application opened state */ + BTA_JV_APP_CLOSE, /* JV Application closed state */ + BTA_JV_SCO_OPEN, /* SCO connection opened state */ + BTA_JV_SCO_CLOSE, /* SCO connection opened state */ + BTA_JV_CONN_IDLE, /* Connection idle state */ + BTA_JV_CONN_BUSY, /* Connection busy state */ + BTA_JV_MAX_CONN_STATE /* Max number of connection state */ }; typedef uint8_t tBTA_JV_CONN_STATE; /* JV Connection types */ -#define BTA_JV_CONN_TYPE_RFCOMM 0 -#define BTA_JV_CONN_TYPE_L2CAP 1 -#define BTA_JV_CONN_TYPE_L2CAP_LE 2 +#define BTA_JV_CONN_TYPE_RFCOMM 0 +#define BTA_JV_CONN_TYPE_L2CAP 1 +#define BTA_JV_CONN_TYPE_L2CAP_LE 2 /* Java I/F callback events */ /* events received by tBTA_JV_DM_CBACK */ -#define BTA_JV_ENABLE_EVT 0 /* JV enabled */ -#define BTA_JV_GET_SCN_EVT 6 /* Reserved an SCN */ -#define BTA_JV_GET_PSM_EVT 7 /* Reserved a PSM */ -#define BTA_JV_DISCOVERY_COMP_EVT 8 /* SDP discovery complete */ -#define BTA_JV_CREATE_RECORD_EVT 11 /* the result for BTA_JvCreateRecord */ +#define BTA_JV_ENABLE_EVT 0 /* JV enabled */ +#define BTA_JV_GET_SCN_EVT 6 /* Reserved an SCN */ +#define BTA_JV_GET_PSM_EVT 7 /* Reserved a PSM */ +#define BTA_JV_DISCOVERY_COMP_EVT 8 /* SDP discovery complete */ +#define BTA_JV_CREATE_RECORD_EVT 11 /* the result for BTA_JvCreateRecord */ /* events received by tBTA_JV_L2CAP_CBACK */ -#define BTA_JV_L2CAP_OPEN_EVT 16 /* open status of L2CAP connection */ -#define BTA_JV_L2CAP_CLOSE_EVT 17 /* L2CAP connection closed */ -#define BTA_JV_L2CAP_START_EVT 18 /* L2CAP server started */ -#define BTA_JV_L2CAP_CL_INIT_EVT 19 /* L2CAP client initiated a connection */ -#define BTA_JV_L2CAP_DATA_IND_EVT 20 /* L2CAP connection received data */ -#define BTA_JV_L2CAP_CONG_EVT 21 /* L2CAP connection congestion status changed */ -#define BTA_JV_L2CAP_READ_EVT 22 /* the result for BTA_JvL2capRead */ -#define BTA_JV_L2CAP_WRITE_EVT 24 /* the result for BTA_JvL2capWrite*/ -#define BTA_JV_L2CAP_WRITE_FIXED_EVT 25 /* the result for BTA_JvL2capWriteFixed */ +#define BTA_JV_L2CAP_OPEN_EVT 16 /* open status of L2CAP connection */ +#define BTA_JV_L2CAP_CLOSE_EVT 17 /* L2CAP connection closed */ +#define BTA_JV_L2CAP_START_EVT 18 /* L2CAP server started */ +#define BTA_JV_L2CAP_CL_INIT_EVT 19 /* L2CAP client initiated a connection */ +#define BTA_JV_L2CAP_DATA_IND_EVT 20 /* L2CAP connection received data */ +#define BTA_JV_L2CAP_CONG_EVT \ + 21 /* L2CAP connection congestion status changed */ +#define BTA_JV_L2CAP_READ_EVT 22 /* the result for BTA_JvL2capRead */ +#define BTA_JV_L2CAP_WRITE_EVT 24 /* the result for BTA_JvL2capWrite*/ +#define BTA_JV_L2CAP_WRITE_FIXED_EVT \ + 25 /* the result for BTA_JvL2capWriteFixed */ /* events received by tBTA_JV_RFCOMM_CBACK */ -#define BTA_JV_RFCOMM_OPEN_EVT 26 /* open status of RFCOMM Client connection */ -#define BTA_JV_RFCOMM_CLOSE_EVT 27 /* RFCOMM connection closed */ -#define BTA_JV_RFCOMM_START_EVT 28 /* RFCOMM server started */ -#define BTA_JV_RFCOMM_CL_INIT_EVT 29 /* RFCOMM client initiated a connection */ -#define BTA_JV_RFCOMM_DATA_IND_EVT 30 /* RFCOMM connection received data */ -#define BTA_JV_RFCOMM_CONG_EVT 31 /* RFCOMM connection congestion status changed */ -#define BTA_JV_RFCOMM_WRITE_EVT 33 /* the result for BTA_JvRfcommWrite*/ -#define BTA_JV_RFCOMM_SRV_OPEN_EVT 34 /* open status of Server RFCOMM connection */ -#define BTA_JV_MAX_EVT 35 /* max number of JV events */ +#define BTA_JV_RFCOMM_OPEN_EVT \ + 26 /* open status of RFCOMM Client connection \ + */ +#define BTA_JV_RFCOMM_CLOSE_EVT 27 /* RFCOMM connection closed */ +#define BTA_JV_RFCOMM_START_EVT 28 /* RFCOMM server started */ +#define BTA_JV_RFCOMM_CL_INIT_EVT \ + 29 /* RFCOMM client initiated a connection \ + */ +#define BTA_JV_RFCOMM_DATA_IND_EVT 30 /* RFCOMM connection received data */ +#define BTA_JV_RFCOMM_CONG_EVT \ + 31 /* RFCOMM connection congestion status changed */ +#define BTA_JV_RFCOMM_WRITE_EVT 33 /* the result for BTA_JvRfcommWrite*/ +#define BTA_JV_RFCOMM_SRV_OPEN_EVT \ + 34 /* open status of Server RFCOMM connection */ +#define BTA_JV_MAX_EVT 35 /* max number of JV events */ typedef uint16_t tBTA_JV_EVT; /* data associated with BTA_JV_SET_DISCOVER_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - tBTA_JV_DISC disc_mode; /* The current discoverable mode */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + tBTA_JV_DISC disc_mode; /* The current discoverable mode */ } tBTA_JV_SET_DISCOVER; /* data associated with BTA_JV_DISCOVERY_COMP_EVT_ */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - int scn; /* channel # */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + int scn; /* channel # */ } tBTA_JV_DISCOVERY_COMP; /* data associated with BTA_JV_CREATE_RECORD_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ } tBTA_JV_CREATE_RECORD; /* data associated with BTA_JV_L2CAP_OPEN_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - BD_ADDR rem_bda; /* The peer address */ - int32_t tx_mtu; /* The transmit MTU */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + BD_ADDR rem_bda; /* The peer address */ + int32_t tx_mtu; /* The transmit MTU */ } tBTA_JV_L2CAP_OPEN; /* data associated with BTA_JV_L2CAP_OPEN_EVT for LE sockets */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - BD_ADDR rem_bda; /* The peer address */ - int32_t tx_mtu; /* The transmit MTU */ - void **p_p_cback; /* set them for new socket */ - void **p_user_data;/* set them for new socket */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + BD_ADDR rem_bda; /* The peer address */ + int32_t tx_mtu; /* The transmit MTU */ + void** p_p_cback; /* set them for new socket */ + void** p_user_data; /* set them for new socket */ } tBTA_JV_L2CAP_LE_OPEN; - /* data associated with BTA_JV_L2CAP_CLOSE_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - bool async; /* false, if local initiates disconnect */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + bool async; /* false, if local initiates disconnect */ } tBTA_JV_L2CAP_CLOSE; /* data associated with BTA_JV_L2CAP_START_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - uint8_t sec_id; /* security ID used by this server */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + uint8_t sec_id; /* security ID used by this server */ } tBTA_JV_L2CAP_START; /* data associated with BTA_JV_L2CAP_CL_INIT_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - uint8_t sec_id; /* security ID used by this client */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + uint8_t sec_id; /* security ID used by this client */ } tBTA_JV_L2CAP_CL_INIT; /* data associated with BTA_JV_L2CAP_CONG_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - bool cong; /* true, congested. false, uncongested */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + bool cong; /* true, congested. false, uncongested */ } tBTA_JV_L2CAP_CONG; /* data associated with BTA_JV_L2CAP_READ_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - uint32_t req_id; /* The req_id in the associated BTA_JvL2capRead() */ - uint8_t *p_data; /* This points the same location as the p_data - * parameter in BTA_JvL2capRead () */ - uint16_t len; /* The length of the data read. */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + uint32_t req_id; /* The req_id in the associated BTA_JvL2capRead() */ + uint8_t* p_data; /* This points the same location as the p_data + * parameter in BTA_JvL2capRead () */ + uint16_t len; /* The length of the data read. */ } tBTA_JV_L2CAP_READ; /* data associated with BTA_JV_L2CAP_WRITE_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - uint32_t req_id; /* The req_id in the associated BTA_JvL2capWrite() */ - uint16_t len; /* The length of the data written. */ - bool cong; /* congestion status */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + uint32_t req_id; /* The req_id in the associated BTA_JvL2capWrite() */ + uint16_t len; /* The length of the data written. */ + bool cong; /* congestion status */ } tBTA_JV_L2CAP_WRITE; - /* data associated with BTA_JV_L2CAP_WRITE_FIXED_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint16_t channel; /* The connection channel */ - BD_ADDR addr; /* The peer address */ - uint32_t req_id; /* The req_id in the associated BTA_JvL2capWrite() */ - uint16_t len; /* The length of the data written. */ - bool cong; /* congestion status */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint16_t channel; /* The connection channel */ + BD_ADDR addr; /* The peer address */ + uint32_t req_id; /* The req_id in the associated BTA_JvL2capWrite() */ + uint16_t len; /* The length of the data written. */ + bool cong; /* congestion status */ } tBTA_JV_L2CAP_WRITE_FIXED; /* data associated with BTA_JV_RFCOMM_OPEN_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - BD_ADDR rem_bda; /* The peer address */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + BD_ADDR rem_bda; /* The peer address */ } tBTA_JV_RFCOMM_OPEN; /* data associated with BTA_JV_RFCOMM_SRV_OPEN_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - uint32_t new_listen_handle; /* The new listen handle */ - BD_ADDR rem_bda; /* The peer address */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + uint32_t new_listen_handle; /* The new listen handle */ + BD_ADDR rem_bda; /* The peer address */ } tBTA_JV_RFCOMM_SRV_OPEN; - /* data associated with BTA_JV_RFCOMM_CLOSE_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t port_status; /* PORT status */ - uint32_t handle; /* The connection handle */ - bool async; /* false, if local initiates disconnect */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t port_status; /* PORT status */ + uint32_t handle; /* The connection handle */ + bool async; /* false, if local initiates disconnect */ } tBTA_JV_RFCOMM_CLOSE; /* data associated with BTA_JV_RFCOMM_START_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - uint8_t sec_id; /* security ID used by this server */ - bool use_co; /* true to use co_rfc_data */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + uint8_t sec_id; /* security ID used by this server */ + bool use_co; /* true to use co_rfc_data */ } tBTA_JV_RFCOMM_START; /* data associated with BTA_JV_RFCOMM_CL_INIT_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - uint8_t sec_id; /* security ID used by this client */ - bool use_co; /* true to use co_rfc_data */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + uint8_t sec_id; /* security ID used by this client */ + bool use_co; /* true to use co_rfc_data */ } tBTA_JV_RFCOMM_CL_INIT; /*data associated with BTA_JV_L2CAP_DATA_IND_EVT & BTA_JV_RFCOMM_DATA_IND_EVT */ -typedef struct -{ - uint32_t handle; /* The connection handle */ +typedef struct { + uint32_t handle; /* The connection handle */ } tBTA_JV_DATA_IND; /*data associated with BTA_JV_L2CAP_DATA_IND_EVT if used for LE */ -typedef struct -{ - uint32_t handle; /* The connection handle */ - BT_HDR *p_buf; /* The incoming data */ +typedef struct { + uint32_t handle; /* The connection handle */ + BT_HDR* p_buf; /* The incoming data */ } tBTA_JV_LE_DATA_IND; - /* data associated with BTA_JV_RFCOMM_CONG_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - bool cong; /* true, congested. false, uncongested */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + bool cong; /* true, congested. false, uncongested */ } tBTA_JV_RFCOMM_CONG; /* data associated with BTA_JV_RFCOMM_WRITE_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ - uint32_t handle; /* The connection handle */ - uint32_t req_id; /* The req_id in the associated BTA_JvRfcommWrite() */ - int len; /* The length of the data written. */ - bool cong; /* congestion status */ +typedef struct { + tBTA_JV_STATUS status; /* Whether the operation succeeded or failed. */ + uint32_t handle; /* The connection handle */ + uint32_t req_id; /* The req_id in the associated BTA_JvRfcommWrite() */ + int len; /* The length of the data written. */ + bool cong; /* congestion status */ } tBTA_JV_RFCOMM_WRITE; /* data associated with BTA_JV_API_SET_PM_PROFILE_EVT */ -typedef struct -{ - tBTA_JV_STATUS status; /* Status of the operation */ - uint32_t handle; /* Connection handle */ - tBTA_JV_PM_ID app_id; /* JV app ID */ +typedef struct { + tBTA_JV_STATUS status; /* Status of the operation */ + uint32_t handle; /* Connection handle */ + tBTA_JV_PM_ID app_id; /* JV app ID */ } tBTA_JV_SET_PM_PROFILE; /* data associated with BTA_JV_API_NOTIFY_PM_STATE_CHANGE_EVT */ -typedef struct -{ - uint32_t handle; /* Connection handle */ - tBTA_JV_CONN_STATE state; /* JV connection stata */ +typedef struct { + uint32_t handle; /* Connection handle */ + tBTA_JV_CONN_STATE state; /* JV connection stata */ } tBTA_JV_NOTIFY_PM_STATE_CHANGE; - /* union of data associated with JV callback */ -typedef union -{ - tBTA_JV_STATUS status; /* BTA_JV_ENABLE_EVT */ - tBTA_JV_DISCOVERY_COMP disc_comp; /* BTA_JV_DISCOVERY_COMP_EVT */ - tBTA_JV_SET_DISCOVER set_discover; /* BTA_JV_SET_DISCOVER_EVT */ - uint8_t scn; /* BTA_JV_GET_SCN_EVT */ - uint16_t psm; /* BTA_JV_GET_PSM_EVT */ - tBTA_JV_CREATE_RECORD create_rec; /* BTA_JV_CREATE_RECORD_EVT */ - tBTA_JV_L2CAP_OPEN l2c_open; /* BTA_JV_L2CAP_OPEN_EVT */ - tBTA_JV_L2CAP_CLOSE l2c_close; /* BTA_JV_L2CAP_CLOSE_EVT */ - tBTA_JV_L2CAP_START l2c_start; /* BTA_JV_L2CAP_START_EVT */ - tBTA_JV_L2CAP_CL_INIT l2c_cl_init; /* BTA_JV_L2CAP_CL_INIT_EVT */ - tBTA_JV_L2CAP_CONG l2c_cong; /* BTA_JV_L2CAP_CONG_EVT */ - tBTA_JV_L2CAP_READ l2c_read; /* BTA_JV_L2CAP_READ_EVT */ - tBTA_JV_L2CAP_WRITE l2c_write; /* BTA_JV_L2CAP_WRITE_EVT */ - tBTA_JV_RFCOMM_OPEN rfc_open; /* BTA_JV_RFCOMM_OPEN_EVT */ - tBTA_JV_RFCOMM_SRV_OPEN rfc_srv_open; /* BTA_JV_RFCOMM_SRV_OPEN_EVT */ - tBTA_JV_RFCOMM_CLOSE rfc_close; /* BTA_JV_RFCOMM_CLOSE_EVT */ - tBTA_JV_RFCOMM_START rfc_start; /* BTA_JV_RFCOMM_START_EVT */ - tBTA_JV_RFCOMM_CL_INIT rfc_cl_init; /* BTA_JV_RFCOMM_CL_INIT_EVT */ - tBTA_JV_RFCOMM_CONG rfc_cong; /* BTA_JV_RFCOMM_CONG_EVT */ - tBTA_JV_RFCOMM_WRITE rfc_write; /* BTA_JV_RFCOMM_WRITE_EVT */ - tBTA_JV_DATA_IND data_ind; /* BTA_JV_L2CAP_DATA_IND_EVT - BTA_JV_RFCOMM_DATA_IND_EVT */ - tBTA_JV_LE_DATA_IND le_data_ind; /* BTA_JV_L2CAP_LE_DATA_IND_EVT */ - tBTA_JV_L2CAP_LE_OPEN l2c_le_open; /* BTA_JV_L2CAP_OPEN_EVT */ - tBTA_JV_L2CAP_WRITE_FIXED l2c_write_fixed; /* BTA_JV_L2CAP_WRITE_FIXED_EVT */ +typedef union { + tBTA_JV_STATUS status; /* BTA_JV_ENABLE_EVT */ + tBTA_JV_DISCOVERY_COMP disc_comp; /* BTA_JV_DISCOVERY_COMP_EVT */ + tBTA_JV_SET_DISCOVER set_discover; /* BTA_JV_SET_DISCOVER_EVT */ + uint8_t scn; /* BTA_JV_GET_SCN_EVT */ + uint16_t psm; /* BTA_JV_GET_PSM_EVT */ + tBTA_JV_CREATE_RECORD create_rec; /* BTA_JV_CREATE_RECORD_EVT */ + tBTA_JV_L2CAP_OPEN l2c_open; /* BTA_JV_L2CAP_OPEN_EVT */ + tBTA_JV_L2CAP_CLOSE l2c_close; /* BTA_JV_L2CAP_CLOSE_EVT */ + tBTA_JV_L2CAP_START l2c_start; /* BTA_JV_L2CAP_START_EVT */ + tBTA_JV_L2CAP_CL_INIT l2c_cl_init; /* BTA_JV_L2CAP_CL_INIT_EVT */ + tBTA_JV_L2CAP_CONG l2c_cong; /* BTA_JV_L2CAP_CONG_EVT */ + tBTA_JV_L2CAP_READ l2c_read; /* BTA_JV_L2CAP_READ_EVT */ + tBTA_JV_L2CAP_WRITE l2c_write; /* BTA_JV_L2CAP_WRITE_EVT */ + tBTA_JV_RFCOMM_OPEN rfc_open; /* BTA_JV_RFCOMM_OPEN_EVT */ + tBTA_JV_RFCOMM_SRV_OPEN rfc_srv_open; /* BTA_JV_RFCOMM_SRV_OPEN_EVT */ + tBTA_JV_RFCOMM_CLOSE rfc_close; /* BTA_JV_RFCOMM_CLOSE_EVT */ + tBTA_JV_RFCOMM_START rfc_start; /* BTA_JV_RFCOMM_START_EVT */ + tBTA_JV_RFCOMM_CL_INIT rfc_cl_init; /* BTA_JV_RFCOMM_CL_INIT_EVT */ + tBTA_JV_RFCOMM_CONG rfc_cong; /* BTA_JV_RFCOMM_CONG_EVT */ + tBTA_JV_RFCOMM_WRITE rfc_write; /* BTA_JV_RFCOMM_WRITE_EVT */ + tBTA_JV_DATA_IND data_ind; /* BTA_JV_L2CAP_DATA_IND_EVT + BTA_JV_RFCOMM_DATA_IND_EVT */ + tBTA_JV_LE_DATA_IND le_data_ind; /* BTA_JV_L2CAP_LE_DATA_IND_EVT */ + tBTA_JV_L2CAP_LE_OPEN l2c_le_open; /* BTA_JV_L2CAP_OPEN_EVT */ + tBTA_JV_L2CAP_WRITE_FIXED l2c_write_fixed; /* BTA_JV_L2CAP_WRITE_FIXED_EVT */ } tBTA_JV; /* JAVA DM Interface callback */ -typedef void (tBTA_JV_DM_CBACK)(tBTA_JV_EVT event, tBTA_JV *p_data, void * user_data); +typedef void(tBTA_JV_DM_CBACK)(tBTA_JV_EVT event, tBTA_JV* p_data, + void* user_data); /* JAVA RFCOMM interface callback */ -typedef void* (tBTA_JV_RFCOMM_CBACK)(tBTA_JV_EVT event, tBTA_JV *p_data, void *user_data); +typedef void*(tBTA_JV_RFCOMM_CBACK)(tBTA_JV_EVT event, tBTA_JV* p_data, + void* user_data); /* JAVA L2CAP interface callback */ -typedef void (tBTA_JV_L2CAP_CBACK)(tBTA_JV_EVT event, tBTA_JV *p_data, void *user_Data); +typedef void(tBTA_JV_L2CAP_CBACK)(tBTA_JV_EVT event, tBTA_JV* p_data, + void* user_Data); /* JV configuration structure */ -typedef struct -{ - uint16_t sdp_raw_size; /* The size of p_sdp_raw_data */ - uint16_t sdp_db_size; /* The size of p_sdp_db */ - uint8_t *p_sdp_raw_data; /* The data buffer to keep raw data */ - tSDP_DISCOVERY_DB *p_sdp_db; /* The data buffer to keep SDP database */ +typedef struct { + uint16_t sdp_raw_size; /* The size of p_sdp_raw_data */ + uint16_t sdp_db_size; /* The size of p_sdp_db */ + uint8_t* p_sdp_raw_data; /* The data buffer to keep raw data */ + tSDP_DISCOVERY_DB* p_sdp_db; /* The data buffer to keep SDP database */ } tBTA_JV_CFG; /******************************************************************************* @@ -420,7 +403,7 @@ typedef struct * BTA_JV_FAIL if internal failure. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvEnable(tBTA_JV_DM_CBACK *p_cback); +tBTA_JV_STATUS BTA_JvEnable(tBTA_JV_DM_CBACK* p_cback); /******************************************************************************* * @@ -451,15 +434,19 @@ bool BTA_JvIsEncrypted(BD_ADDR bd_addr); * * Description This function reserves a SCN/PSM for applications running * over RFCOMM or L2CAP. It is primarily called by - * server profiles/applications to register their SCN/PSM into the + * server profiles/applications to register their SCN/PSM into + *the * SDP database. The SCN is reported by the tBTA_JV_DM_CBACK * callback with a BTA_JV_GET_SCN_EVT. - * If the SCN/PSM reported is 0, that means all SCN resources are + * If the SCN/PSM reported is 0, that means all SCN resources + *are * exhausted. * The channel parameter can be used to request a specific * channel. If the request on the specific channel fails, the - * SCN/PSM returned in the EVT will be 0 - no attempt to request - * a new channel will be made. set channel to <= 0 to automatically + * SCN/PSM returned in the EVT will be 0 - no attempt to + *request + * a new channel will be made. set channel to <= 0 to + *automatically * assign an channel ID. * * Returns BTA_JV_SUCCESS, if the request is being processed. @@ -467,7 +454,7 @@ bool BTA_JvIsEncrypted(BD_ADDR bd_addr); * ******************************************************************************/ tBTA_JV_STATUS BTA_JvGetChannelId(int conn_type, void* user_data, - int32_t channel); + int32_t channel); /******************************************************************************* * @@ -496,7 +483,7 @@ tBTA_JV_STATUS BTA_JvFreeChannel(uint16_t channel, int conn_type); * ******************************************************************************/ tBTA_JV_STATUS BTA_JvStartDiscovery(BD_ADDR bd_addr, uint16_t num_uuid, - tSDP_UUID *p_uuid_list, void* user_data); + tSDP_UUID* p_uuid_list, void* user_data); /******************************************************************************* * @@ -539,9 +526,11 @@ tBTA_JV_STATUS BTA_JvDeleteRecord(uint32_t handle); * ******************************************************************************/ tBTA_JV_STATUS BTA_JvL2capConnectLE(tBTA_SEC sec_mask, tBTA_JV_ROLE role, - const tL2CAP_ERTM_INFO *ertm_info, uint16_t remote_chan, - uint16_t rx_mtu, tL2CAP_CFG_INFO *cfg, - BD_ADDR peer_bd_addr, tBTA_JV_L2CAP_CBACK *p_cback, void *user_data); + const tL2CAP_ERTM_INFO* ertm_info, + uint16_t remote_chan, uint16_t rx_mtu, + tL2CAP_CFG_INFO* cfg, BD_ADDR peer_bd_addr, + tBTA_JV_L2CAP_CBACK* p_cback, + void* user_data); /******************************************************************************* * @@ -558,10 +547,13 @@ tBTA_JV_STATUS BTA_JvL2capConnectLE(tBTA_SEC sec_mask, tBTA_JV_ROLE role, * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capConnect(int conn_type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, - const tL2CAP_ERTM_INFO *ertm_info, uint16_t remote_psm, - uint16_t rx_mtu, tL2CAP_CFG_INFO *cfg, - BD_ADDR peer_bd_addr, tBTA_JV_L2CAP_CBACK *p_cback, void *user_data); +tBTA_JV_STATUS BTA_JvL2capConnect(int conn_type, tBTA_SEC sec_mask, + tBTA_JV_ROLE role, + const tL2CAP_ERTM_INFO* ertm_info, + uint16_t remote_psm, uint16_t rx_mtu, + tL2CAP_CFG_INFO* cfg, BD_ADDR peer_bd_addr, + tBTA_JV_L2CAP_CBACK* p_cback, + void* user_data); /******************************************************************************* * @@ -579,7 +571,8 @@ tBTA_JV_STATUS BTA_JvL2capClose(uint32_t handle); * * Function BTA_JvL2capCloseLE * - * Description This function closes an L2CAP client connection for Fixed Channels + * Description This function closes an L2CAP client connection for Fixed + *Channels * Function is idempotent and no callbacks are called! * * Returns BTA_JV_SUCCESS, if the request is being processed. @@ -592,7 +585,8 @@ tBTA_JV_STATUS BTA_JvL2capCloseLE(uint32_t handle); * * Function BTA_JvL2capStartServer * - * Description This function starts an L2CAP server and listens for an L2CAP + * Description This function starts an L2CAP server and listens for an + *L2CAP * connection from a remote Bluetooth device. When the server * is started successfully, tBTA_JV_L2CAP_CBACK is called with * BTA_JV_L2CAP_START_EVT. When the connection is established, @@ -602,16 +596,17 @@ tBTA_JV_STATUS BTA_JvL2capCloseLE(uint32_t handle); * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capStartServer(int conn_type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, - const tL2CAP_ERTM_INFO *ertm_info, - uint16_t local_psm, uint16_t rx_mtu, tL2CAP_CFG_INFO *cfg, - tBTA_JV_L2CAP_CBACK *p_cback, void *user_data); +tBTA_JV_STATUS BTA_JvL2capStartServer( + int conn_type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, + const tL2CAP_ERTM_INFO* ertm_info, uint16_t local_psm, uint16_t rx_mtu, + tL2CAP_CFG_INFO* cfg, tBTA_JV_L2CAP_CBACK* p_cback, void* user_data); /******************************************************************************* * * Function BTA_JvL2capStartServerLE * - * Description This function starts an LE L2CAP server and listens for an L2CAP + * Description This function starts an LE L2CAP server and listens for an + *L2CAP * connection from a remote Bluetooth device on a fixed channel * over an LE link. When the server * is started successfully, tBTA_JV_L2CAP_CBACK is called with @@ -623,35 +618,39 @@ tBTA_JV_STATUS BTA_JvL2capStartServer(int conn_type, tBTA_SEC sec_mask, tBTA_JV_ * ******************************************************************************/ tBTA_JV_STATUS BTA_JvL2capStartServerLE(tBTA_SEC sec_mask, tBTA_JV_ROLE role, - const tL2CAP_ERTM_INFO *ertm_info, - uint16_t local_chan, uint16_t rx_mtu, tL2CAP_CFG_INFO *cfg, - tBTA_JV_L2CAP_CBACK *p_cback, void *user_data); + const tL2CAP_ERTM_INFO* ertm_info, + uint16_t local_chan, uint16_t rx_mtu, + tL2CAP_CFG_INFO* cfg, + tBTA_JV_L2CAP_CBACK* p_cback, + void* user_data); /******************************************************************************* * * Function BTA_JvL2capStopServerLE * - * Description This function stops the LE L2CAP server. If the server has an + * Description This function stops the LE L2CAP server. If the server has + *an * active connection, it would be closed. * * Returns BTA_JV_SUCCESS, if the request is being processed. * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capStopServerLE(uint16_t local_chan, void *user_data); +tBTA_JV_STATUS BTA_JvL2capStopServerLE(uint16_t local_chan, void* user_data); /******************************************************************************* * * Function BTA_JvL2capStopServerLE * - * Description This function stops the LE L2CAP server. If the server has an + * Description This function stops the LE L2CAP server. If the server has + *an * active connection, it would be closed. * * Returns BTA_JV_SUCCESS, if the request is being processed. * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capStopServer(uint16_t local_psm, void *user_data); +tBTA_JV_STATUS BTA_JvL2capStopServer(uint16_t local_psm, void* user_data); /******************************************************************************* * @@ -666,7 +665,7 @@ tBTA_JV_STATUS BTA_JvL2capStopServer(uint16_t local_psm, void *user_data); * ******************************************************************************/ tBTA_JV_STATUS BTA_JvL2capRead(uint32_t handle, uint32_t req_id, - uint8_t *p_data, uint16_t len); + uint8_t* p_data, uint16_t len); /******************************************************************************* * @@ -679,7 +678,7 @@ tBTA_JV_STATUS BTA_JvL2capRead(uint32_t handle, uint32_t req_id, * BTA_JV_FAILURE, if error. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capReady(uint32_t handle, uint32_t *p_data_size); +tBTA_JV_STATUS BTA_JvL2capReady(uint32_t handle, uint32_t* p_data_size); /******************************************************************************* * @@ -695,8 +694,7 @@ tBTA_JV_STATUS BTA_JvL2capReady(uint32_t handle, uint32_t *p_data_size); * ******************************************************************************/ tBTA_JV_STATUS BTA_JvL2capWrite(uint32_t handle, uint32_t req_id, - uint8_t *p_data, uint16_t len, void *user_data); - + uint8_t* p_data, uint16_t len, void* user_data); /******************************************************************************* * @@ -711,9 +709,11 @@ tBTA_JV_STATUS BTA_JvL2capWrite(uint32_t handle, uint32_t req_id, * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capWriteFixed(uint16_t channel, BD_ADDR *addr, uint32_t req_id, - tBTA_JV_L2CAP_CBACK *p_cback, - uint8_t *p_data, uint16_t len, void *user_data); +tBTA_JV_STATUS BTA_JvL2capWriteFixed(uint16_t channel, BD_ADDR* addr, + uint32_t req_id, + tBTA_JV_L2CAP_CBACK* p_cback, + uint8_t* p_data, uint16_t len, + void* user_data); /******************************************************************************* * @@ -722,7 +722,8 @@ tBTA_JV_STATUS BTA_JvL2capWriteFixed(uint16_t channel, BD_ADDR *addr, uint32_t r * Description This function makes an RFCOMM conection to a remote BD * Address. * When the connection is initiated or failed to initiate, - * tBTA_JV_RFCOMM_CBACK is called with BTA_JV_RFCOMM_CL_INIT_EVT + * tBTA_JV_RFCOMM_CBACK is called with + *BTA_JV_RFCOMM_CL_INIT_EVT * When the connection is established or failed, * tBTA_JV_RFCOMM_CBACK is called with BTA_JV_RFCOMM_OPEN_EVT * @@ -730,9 +731,10 @@ tBTA_JV_STATUS BTA_JvL2capWriteFixed(uint16_t channel, BD_ADDR *addr, uint32_t r * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, - tBTA_JV_ROLE role, uint8_t remote_scn, BD_ADDR peer_bd_addr, - tBTA_JV_RFCOMM_CBACK *p_cback, void *user_data); +tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, tBTA_JV_ROLE role, + uint8_t remote_scn, BD_ADDR peer_bd_addr, + tBTA_JV_RFCOMM_CBACK* p_cback, + void* user_data); /******************************************************************************* * @@ -761,9 +763,10 @@ tBTA_JV_STATUS BTA_JvRfcommClose(uint32_t handle, void* user_data); * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvRfcommStartServer(tBTA_SEC sec_mask, - tBTA_JV_ROLE role, uint8_t local_scn, uint8_t max_session, - tBTA_JV_RFCOMM_CBACK *p_cback, void *user_data); +tBTA_JV_STATUS BTA_JvRfcommStartServer(tBTA_SEC sec_mask, tBTA_JV_ROLE role, + uint8_t local_scn, uint8_t max_session, + tBTA_JV_RFCOMM_CBACK* p_cback, + void* user_data); /******************************************************************************* * @@ -796,23 +799,28 @@ tBTA_JV_STATUS BTA_JvRfcommWrite(uint32_t handle, uint32_t req_id); * * Function BTA_JVSetPmProfile * - * Description This function set or free power mode profile for different JV application + * Description This function set or free power mode profile for different JV + *application * * Parameters: handle, JV handle from RFCOMM or L2CAP - * app_id: app specific pm ID, can be BTA_JV_PM_ALL, see bta_dm_cfg.c for details - * BTA_JV_PM_ID_CLEAR: removes pm management on the handle. init_st is ignored and + * app_id: app specific pm ID, can be BTA_JV_PM_ALL, see + *bta_dm_cfg.c for details + * BTA_JV_PM_ID_CLEAR: removes pm management on the handle. init_st + *is ignored and * BTA_JV_CONN_CLOSE is called implicitely - * init_st: state after calling this API. typically it should be BTA_JV_CONN_OPEN + * init_st: state after calling this API. typically it should be + *BTA_JV_CONN_OPEN * * Returns BTA_JV_SUCCESS, if the request is being processed. * BTA_JV_FAILURE, otherwise. * - * NOTE: BTA_JV_PM_ID_CLEAR: In general no need to be called as jv pm calls automatically + * NOTE: BTA_JV_PM_ID_CLEAR: In general no need to be called as jv pm + *calls automatically * BTA_JV_CONN_CLOSE to remove in case of connection close! * *******************************************************************************/ tBTA_JV_STATUS BTA_JvSetPmProfile(uint32_t handle, tBTA_JV_PM_ID app_id, - tBTA_JV_CONN_STATE init_st); + tBTA_JV_CONN_STATE init_st); /******************************************************************************* * diff --git a/system/bta/include/bta_jv_co.h b/system/bta/include/bta_jv_co.h index d0dd48d0ebd..ce9ab1cf1d9 100644 --- a/system/bta/include/bta_jv_co.h +++ b/system/bta/include/bta_jv_co.h @@ -34,7 +34,6 @@ extern "C" { * Function Declarations ****************************************************************************/ - /******************************************************************************* * * Function bta_jv_co_rfc_data @@ -46,13 +45,15 @@ extern "C" { * ******************************************************************************/ -extern int bta_co_rfc_data_incoming(void *user_data, BT_HDR *p_buf); -extern int bta_co_rfc_data_outgoing_size(void *user_data, int *size); -extern int bta_co_rfc_data_outgoing(void *user_data, uint8_t* buf, uint16_t size); +extern int bta_co_rfc_data_incoming(void* user_data, BT_HDR* p_buf); +extern int bta_co_rfc_data_outgoing_size(void* user_data, int* size); +extern int bta_co_rfc_data_outgoing(void* user_data, uint8_t* buf, + uint16_t size); -extern int bta_co_l2cap_data_incoming(void *user_data, BT_HDR *p_buf); -extern int bta_co_l2cap_data_outgoing_size(void *user_data, int *size); -extern int bta_co_l2cap_data_outgoing(void *user_data, uint8_t* buf, uint16_t size); +extern int bta_co_l2cap_data_incoming(void* user_data, BT_HDR* p_buf); +extern int bta_co_l2cap_data_outgoing_size(void* user_data, int* size); +extern int bta_co_l2cap_data_outgoing(void* user_data, uint8_t* buf, + uint16_t size); #ifdef __cplusplus } diff --git a/system/bta/include/bta_mce_api.h b/system/bta/include/bta_mce_api.h index b5423652941..ef5525dbf71 100644 --- a/system/bta/include/bta_mce_api.h +++ b/system/bta/include/bta_mce_api.h @@ -38,55 +38,53 @@ extern "C" { * Constants and data types ****************************************************************************/ /* status values */ -#define BTA_MCE_SUCCESS 0 /* Successful operation. */ -#define BTA_MCE_FAILURE 1 /* Generic failure. */ -#define BTA_MCE_BUSY 2 /* Temporarily can not handle this request. */ +#define BTA_MCE_SUCCESS 0 /* Successful operation. */ +#define BTA_MCE_FAILURE 1 /* Generic failure. */ +#define BTA_MCE_BUSY 2 /* Temporarily can not handle this request. */ typedef uint8_t tBTA_MCE_STATUS; /* MCE I/F callback events */ /* events received by tBTA_MCE_DM_CBACK */ -#define BTA_MCE_ENABLE_EVT 0 /* MCE enabled */ -#define BTA_MCE_MAS_DISCOVERY_COMP_EVT 1 /* SDP MAS discovery complete */ -#define BTA_MCE_MAX_EVT 2 /* max number of MCE events */ +#define BTA_MCE_ENABLE_EVT 0 /* MCE enabled */ +#define BTA_MCE_MAS_DISCOVERY_COMP_EVT 1 /* SDP MAS discovery complete */ +#define BTA_MCE_MAX_EVT 2 /* max number of MCE events */ #define BTA_MCE_MAX_MAS_INSTANCES 12 typedef uint16_t tBTA_MCE_EVT; -typedef struct -{ - uint8_t scn; - char *p_srv_name; - uint16_t srv_name_len; - uint8_t instance_id; - uint8_t msg_type; +typedef struct { + uint8_t scn; + char* p_srv_name; + uint16_t srv_name_len; + uint8_t instance_id; + uint8_t msg_type; } tBTA_MCE_MAS_INFO; /* data associated with BTA_MCE_MAS_DISCOVERY_COMP_EVT */ -typedef struct -{ - tBTA_MCE_STATUS status; - BD_ADDR remote_addr; - int num_mas; - tBTA_MCE_MAS_INFO mas[BTA_MCE_MAX_MAS_INSTANCES]; +typedef struct { + tBTA_MCE_STATUS status; + BD_ADDR remote_addr; + int num_mas; + tBTA_MCE_MAS_INFO mas[BTA_MCE_MAX_MAS_INSTANCES]; } tBTA_MCE_MAS_DISCOVERY_COMP; /* union of data associated with MCE callback */ -typedef union -{ - tBTA_MCE_STATUS status; /* BTA_MCE_ENABLE_EVT */ - tBTA_MCE_MAS_DISCOVERY_COMP mas_disc_comp; /* BTA_MCE_MAS_DISCOVERY_COMP_EVT */ +typedef union { + tBTA_MCE_STATUS status; /* BTA_MCE_ENABLE_EVT */ + tBTA_MCE_MAS_DISCOVERY_COMP + mas_disc_comp; /* BTA_MCE_MAS_DISCOVERY_COMP_EVT */ } tBTA_MCE; /* MCE DM Interface callback */ -typedef void (tBTA_MCE_DM_CBACK)(tBTA_MCE_EVT event, tBTA_MCE *p_data, void * user_data); +typedef void(tBTA_MCE_DM_CBACK)(tBTA_MCE_EVT event, tBTA_MCE* p_data, + void* user_data); /* MCE configuration structure */ -typedef struct -{ - uint16_t sdp_db_size; /* The size of p_sdp_db */ - tSDP_DISCOVERY_DB *p_sdp_db; /* The data buffer to keep SDP database */ +typedef struct { + uint16_t sdp_db_size; /* The size of p_sdp_db */ + tSDP_DISCOVERY_DB* p_sdp_db; /* The data buffer to keep SDP database */ } tBTA_MCE_CFG; /***************************************************************************** @@ -107,7 +105,7 @@ typedef struct * BTA_MCE_FAIL if internal failure. * ******************************************************************************/ -extern tBTA_MCE_STATUS BTA_MceEnable(tBTA_MCE_DM_CBACK *p_cback); +extern tBTA_MCE_STATUS BTA_MceEnable(tBTA_MCE_DM_CBACK* p_cback); /******************************************************************************* * diff --git a/system/bta/include/bta_op_api.h b/system/bta/include/bta_op_api.h index 28012f6443a..39185682ca7 100644 --- a/system/bta/include/bta_op_api.h +++ b/system/bta/include/bta_op_api.h @@ -33,35 +33,33 @@ ****************************************************************************/ /* Extra Debug Code */ #ifndef BTA_OPS_DEBUG -#define BTA_OPS_DEBUG false +#define BTA_OPS_DEBUG false #endif #ifndef BTA_OPC_DEBUG -#define BTA_OPC_DEBUG false +#define BTA_OPC_DEBUG false #endif - /* Object format */ -#define BTA_OP_VCARD21_FMT 1 /* vCard 2.1 */ -#define BTA_OP_VCARD30_FMT 2 /* vCard 3.0 */ -#define BTA_OP_VCAL_FMT 3 /* vCal 1.0 */ -#define BTA_OP_ICAL_FMT 4 /* iCal 2.0 */ -#define BTA_OP_VNOTE_FMT 5 /* vNote */ -#define BTA_OP_VMSG_FMT 6 /* vMessage */ -#define BTA_OP_OTHER_FMT 0xFF /* other format */ +#define BTA_OP_VCARD21_FMT 1 /* vCard 2.1 */ +#define BTA_OP_VCARD30_FMT 2 /* vCard 3.0 */ +#define BTA_OP_VCAL_FMT 3 /* vCal 1.0 */ +#define BTA_OP_ICAL_FMT 4 /* iCal 2.0 */ +#define BTA_OP_VNOTE_FMT 5 /* vNote */ +#define BTA_OP_VMSG_FMT 6 /* vMessage */ +#define BTA_OP_OTHER_FMT 0xFF /* other format */ typedef uint8_t tBTA_OP_FMT; /* Object format mask */ -#define BTA_OP_VCARD21_MASK 0x01 /* vCard 2.1 */ -#define BTA_OP_VCARD30_MASK 0x02 /* vCard 3.0 */ -#define BTA_OP_VCAL_MASK 0x04 /* vCal 1.0 */ -#define BTA_OP_ICAL_MASK 0x08 /* iCal 2.0 */ -#define BTA_OP_VNOTE_MASK 0x10 /* vNote */ -#define BTA_OP_VMSG_MASK 0x20 /* vMessage */ -#define BTA_OP_ANY_MASK 0x40 /* Any type of object. */ +#define BTA_OP_VCARD21_MASK 0x01 /* vCard 2.1 */ +#define BTA_OP_VCARD30_MASK 0x02 /* vCard 3.0 */ +#define BTA_OP_VCAL_MASK 0x04 /* vCal 1.0 */ +#define BTA_OP_ICAL_MASK 0x08 /* iCal 2.0 */ +#define BTA_OP_VNOTE_MASK 0x10 /* vNote */ +#define BTA_OP_VMSG_MASK 0x20 /* vMessage */ +#define BTA_OP_ANY_MASK 0x40 /* Any type of object. */ typedef uint8_t tBTA_OP_FMT_MASK; #endif /* BTA_OP_API_H */ - diff --git a/system/bta/include/bta_pan_api.h b/system/bta/include/bta_pan_api.h index a9920cbb930..8eae000ad7a 100644 --- a/system/bta/include/bta_pan_api.h +++ b/system/bta/include/bta_pan_api.h @@ -36,89 +36,78 @@ extern "C" { /***************************************************************************** * Constants and data types ****************************************************************************/ -#define BTA_PAN_SUCCESS 0 -#define BTA_PAN_FAIL 1 +#define BTA_PAN_SUCCESS 0 +#define BTA_PAN_FAIL 1 typedef uint8_t tBTA_PAN_STATUS; - /* PAN Callback events */ -#define BTA_PAN_ENABLE_EVT 0 /* PAN service is enabled. */ -#define BTA_PAN_SET_ROLE_EVT 1 /* PAN roles registered */ -#define BTA_PAN_OPENING_EVT 2 /* Connection is being opened. */ -#define BTA_PAN_OPEN_EVT 3 /* Connection has been opened. */ -#define BTA_PAN_CLOSE_EVT 4 /* Connection has been closed. */ +#define BTA_PAN_ENABLE_EVT 0 /* PAN service is enabled. */ +#define BTA_PAN_SET_ROLE_EVT 1 /* PAN roles registered */ +#define BTA_PAN_OPENING_EVT 2 /* Connection is being opened. */ +#define BTA_PAN_OPEN_EVT 3 /* Connection has been opened. */ +#define BTA_PAN_CLOSE_EVT 4 /* Connection has been closed. */ typedef uint8_t tBTA_PAN_EVT; - /* pan roles */ -#define BTA_PAN_ROLE_PANU PAN_ROLE_CLIENT -#define BTA_PAN_ROLE_GN PAN_ROLE_GN_SERVER -#define BTA_PAN_ROLE_NAP PAN_ROLE_NAP_SERVER - +#define BTA_PAN_ROLE_PANU PAN_ROLE_CLIENT +#define BTA_PAN_ROLE_GN PAN_ROLE_GN_SERVER +#define BTA_PAN_ROLE_NAP PAN_ROLE_NAP_SERVER -typedef uint8_t tBTA_PAN_ROLE; +typedef uint8_t tBTA_PAN_ROLE; /* information regarding PAN roles */ -typedef struct -{ - const char *p_srv_name; /* service name for the PAN role */ - uint8_t app_id; /* application id */ - tBTA_SEC sec_mask; /* security setting for the role */ +typedef struct { + const char* p_srv_name; /* service name for the PAN role */ + uint8_t app_id; /* application id */ + tBTA_SEC sec_mask; /* security setting for the role */ } tBTA_PAN_ROLE_INFO; - /* Event associated with BTA_PAN_SET_ROLE_EVT */ -typedef struct -{ - tBTA_PAN_STATUS status; /* status of set role event */ - tBTA_PAN_ROLE role; /* PAN roles successfully registered */ +typedef struct { + tBTA_PAN_STATUS status; /* status of set role event */ + tBTA_PAN_ROLE role; /* PAN roles successfully registered */ } tBTA_PAN_SET_ROLE; /* Event associated with BTA_PAN_OPENING_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address of peer device. */ - uint16_t handle; /* Handle associated with this connection. */ +typedef struct { + BD_ADDR bd_addr; /* BD address of peer device. */ + uint16_t handle; /* Handle associated with this connection. */ } tBTA_PAN_OPENING; - /* Event associated with BTA_PAN_OPEN_EVT */ -typedef struct -{ - BD_ADDR bd_addr; /* BD address of peer device. */ - uint16_t handle; /* Handle associated with this connection. */ - tBTA_PAN_STATUS status; /* status of open event */ - tBTA_PAN_ROLE local_role; /* Local device PAN role for the connection */ - tBTA_PAN_ROLE peer_role; /* Peer device PAN role for the connection */ +typedef struct { + BD_ADDR bd_addr; /* BD address of peer device. */ + uint16_t handle; /* Handle associated with this connection. */ + tBTA_PAN_STATUS status; /* status of open event */ + tBTA_PAN_ROLE local_role; /* Local device PAN role for the connection */ + tBTA_PAN_ROLE peer_role; /* Peer device PAN role for the connection */ } tBTA_PAN_OPEN; /* Event associated with BTA_PAN_CLOSE_EVT */ -typedef struct -{ - uint16_t handle; /* Handle associated with the connection. */ +typedef struct { + uint16_t handle; /* Handle associated with the connection. */ } tBTA_PAN_CLOSE; /* Union of all PAN callback structures */ -typedef union -{ - tBTA_PAN_SET_ROLE set_role; /* set_role event */ - tBTA_PAN_OPEN open; /* Connection has been opened. */ - tBTA_PAN_OPENING opening; /* Connection being opened */ - tBTA_PAN_CLOSE close; /* Connection has been closed. */ +typedef union { + tBTA_PAN_SET_ROLE set_role; /* set_role event */ + tBTA_PAN_OPEN open; /* Connection has been opened. */ + tBTA_PAN_OPENING opening; /* Connection being opened */ + tBTA_PAN_CLOSE close; /* Connection has been closed. */ } tBTA_PAN; /* Number of PAN connections */ #ifndef BTA_PAN_NUM_CONN -#define BTA_PAN_NUM_CONN 4 +#define BTA_PAN_NUM_CONN 4 #endif /* PAN callback */ -typedef void (tBTA_PAN_CBACK)(tBTA_PAN_EVT event, tBTA_PAN *p_data); +typedef void(tBTA_PAN_CBACK)(tBTA_PAN_EVT event, tBTA_PAN* p_data); /***************************************************************************** * External Function Declarations @@ -149,20 +138,20 @@ extern void BTA_PanEnable(tBTA_PAN_CBACK p_cback); ******************************************************************************/ extern void BTA_PanDisable(void); - /******************************************************************************* * * Function BTA_PanSetRole * * Description Sets PAN roles. When the enable operation is complete - * the callback function will be called with a BTA_PAN_SET_ROLE_EVT. + * the callback function will be called with a + *BTA_PAN_SET_ROLE_EVT. * * Returns void * ******************************************************************************/ -void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO *p_user_info, tBTA_PAN_ROLE_INFO *p_gn_info, - tBTA_PAN_ROLE_INFO *p_nap_info); - +void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO* p_user_info, + tBTA_PAN_ROLE_INFO* p_gn_info, + tBTA_PAN_ROLE_INFO* p_nap_info); /******************************************************************************* * @@ -176,9 +165,8 @@ void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO *p_user_info, tBTA_PA * Returns void * ******************************************************************************/ -void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role, tBTA_PAN_ROLE peer_role); - - +void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role, + tBTA_PAN_ROLE peer_role); /******************************************************************************* * @@ -192,7 +180,6 @@ void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role, tBTA_PAN_ROLE pe ******************************************************************************/ extern void BTA_PanClose(uint16_t handle); - #ifdef __cplusplus } #endif diff --git a/system/bta/include/bta_pan_ci.h b/system/bta/include/bta_pan_ci.h index 2c67db19f15..a5ae0e31ba5 100644 --- a/system/bta/include/bta_pan_ci.h +++ b/system/bta/include/bta_pan_ci.h @@ -30,8 +30,7 @@ * Function Declarations ****************************************************************************/ #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif /******************************************************************************* @@ -39,7 +38,8 @@ extern "C" * Function bta_pan_ci_tx_ready * * Description This function sends an event to PAN indicating the phone is - * ready for more data and PAN should call bta_pan_co_tx_path(). + * ready for more data and PAN should call + *bta_pan_co_tx_path(). * This function is used when the TX data path is configured * to use a pull interface. * @@ -95,7 +95,8 @@ extern void bta_pan_ci_tx_flow(uint16_t handle, bool enable); * Returns true if flow enabled * ******************************************************************************/ -extern void bta_pan_ci_rx_writebuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, uint16_t protocol, BT_HDR *p_buf, bool ext); +extern void bta_pan_ci_rx_writebuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, + uint16_t protocol, BT_HDR* p_buf, bool ext); /******************************************************************************* * @@ -110,8 +111,9 @@ extern void bta_pan_ci_rx_writebuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, ui * Returns void * ******************************************************************************/ -extern BT_HDR * bta_pan_ci_readbuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, uint16_t *p_protocol, - bool* p_ext, bool* p_forward); +extern BT_HDR* bta_pan_ci_readbuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, + uint16_t* p_protocol, bool* p_ext, + bool* p_forward); /******************************************************************************* * @@ -123,8 +125,9 @@ extern BT_HDR * bta_pan_ci_readbuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, ui * Returns void * ******************************************************************************/ -extern void bta_pan_ci_set_pfilters(uint16_t handle, uint16_t num_filters, uint16_t *p_start_array, uint16_t *p_end_array); - +extern void bta_pan_ci_set_pfilters(uint16_t handle, uint16_t num_filters, + uint16_t* p_start_array, + uint16_t* p_end_array); /******************************************************************************* * @@ -136,8 +139,9 @@ extern void bta_pan_ci_set_pfilters(uint16_t handle, uint16_t num_filters, uint1 * Returns void * ******************************************************************************/ -extern void bta_pan_ci_set_mfilters(uint16_t handle, uint16_t num_mcast_filters, uint8_t *p_start_array, - uint8_t *p_end_array); +extern void bta_pan_ci_set_mfilters(uint16_t handle, uint16_t num_mcast_filters, + uint8_t* p_start_array, + uint8_t* p_end_array); #ifdef __cplusplus } diff --git a/system/bta/include/bta_pan_co.h b/system/bta/include/bta_pan_co.h index 6de2c1f4875..f3d80f2bbe4 100644 --- a/system/bta/include/bta_pan_co.h +++ b/system/bta/include/bta_pan_co.h @@ -34,21 +34,16 @@ extern "C" { * Constants ****************************************************************************/ - - /* BT_HDR buffer offset */ -#define BTA_PAN_MIN_OFFSET PAN_MINIMUM_OFFSET - +#define BTA_PAN_MIN_OFFSET PAN_MINIMUM_OFFSET /* Data Flow Mask */ -#define BTA_PAN_RX_PUSH 0x00 /* RX push. */ -#define BTA_PAN_RX_PUSH_BUF 0x01 /* RX push with zero copy. */ -#define BTA_PAN_RX_PULL 0x02 /* RX pull. */ -#define BTA_PAN_TX_PUSH 0x00 /* TX push. */ -#define BTA_PAN_TX_PUSH_BUF 0x10 /* TX push with zero copy. */ -#define BTA_PAN_TX_PULL 0x20 /* TX pull. */ - - +#define BTA_PAN_RX_PUSH 0x00 /* RX push. */ +#define BTA_PAN_RX_PUSH_BUF 0x01 /* RX push with zero copy. */ +#define BTA_PAN_RX_PULL 0x02 /* RX pull. */ +#define BTA_PAN_TX_PUSH 0x00 /* TX push. */ +#define BTA_PAN_TX_PUSH_BUF 0x10 /* TX push with zero copy. */ +#define BTA_PAN_TX_PULL 0x20 /* TX pull. */ /***************************************************************************** * Function Declarations @@ -68,7 +63,7 @@ extern "C" { * Returns Data flow mask. * ******************************************************************************/ -extern uint8_t bta_pan_co_init(uint8_t *q_level); +extern uint8_t bta_pan_co_init(uint8_t* q_level); /******************************************************************************* * @@ -82,7 +77,9 @@ extern uint8_t bta_pan_co_init(uint8_t *q_level); * Returns void * ******************************************************************************/ -extern void bta_pan_co_open(uint16_t handle, uint8_t app_id, tBTA_PAN_ROLE local_role, tBTA_PAN_ROLE peer_role, BD_ADDR peer_addr); +extern void bta_pan_co_open(uint16_t handle, uint8_t app_id, + tBTA_PAN_ROLE local_role, tBTA_PAN_ROLE peer_role, + BD_ADDR peer_addr); /******************************************************************************* * @@ -140,7 +137,8 @@ extern void bta_pan_co_rx_path(uint16_t handle, uint8_t app_id); * Returns void * ******************************************************************************/ -extern void bta_pan_co_tx_write(uint16_t handle, uint8_t app_id, BD_ADDR src, BD_ADDR dst, uint16_t protocol, uint8_t *p_data, +extern void bta_pan_co_tx_write(uint16_t handle, uint8_t app_id, BD_ADDR src, + BD_ADDR dst, uint16_t protocol, uint8_t* p_data, uint16_t len, bool ext, bool forward); /******************************************************************************* @@ -156,9 +154,9 @@ extern void bta_pan_co_tx_write(uint16_t handle, uint8_t app_id, BD_ADDR src, BD * Returns void * ******************************************************************************/ -extern void bta_pan_co_tx_writebuf(uint16_t handle, uint8_t app_id, BD_ADDR src, BD_ADDR dst, uint16_t protocol, BT_HDR *p_buf, - bool ext, bool forward); - +extern void bta_pan_co_tx_writebuf(uint16_t handle, uint8_t app_id, BD_ADDR src, + BD_ADDR dst, uint16_t protocol, + BT_HDR* p_buf, bool ext, bool forward); /******************************************************************************* * @@ -176,7 +174,6 @@ extern void bta_pan_co_tx_writebuf(uint16_t handle, uint8_t app_id, BD_ADDR src, ******************************************************************************/ extern void bta_pan_co_rx_flow(uint16_t handle, uint8_t app_id, bool enable); - /******************************************************************************* * * Function bta_pan_co_filt_ind @@ -186,8 +183,9 @@ extern void bta_pan_co_rx_flow(uint16_t handle, uint8_t app_id, bool enable); * Returns void * ******************************************************************************/ -extern void bta_pan_co_pfilt_ind(uint16_t handle, bool indication, tBTA_PAN_STATUS result, - uint16_t len, uint8_t *p_filters); +extern void bta_pan_co_pfilt_ind(uint16_t handle, bool indication, + tBTA_PAN_STATUS result, uint16_t len, + uint8_t* p_filters); /******************************************************************************* * @@ -198,8 +196,9 @@ extern void bta_pan_co_pfilt_ind(uint16_t handle, bool indication, tBTA_PAN_STAT * Returns void * ******************************************************************************/ -extern void bta_pan_co_mfilt_ind(uint16_t handle, bool indication, tBTA_PAN_STATUS result, - uint16_t len, uint8_t *p_filters); +extern void bta_pan_co_mfilt_ind(uint16_t handle, bool indication, + tBTA_PAN_STATUS result, uint16_t len, + uint8_t* p_filters); #ifdef __cplusplus } diff --git a/system/bta/include/bta_sdp_api.h b/system/bta/include/bta_sdp_api.h index dadf18d09f5..6884ea95e26 100644 --- a/system/bta/include/bta_sdp_api.h +++ b/system/bta/include/bta_sdp_api.h @@ -36,49 +36,47 @@ extern "C" { #endif /* status values */ -#define BTA_SDP_SUCCESS 0 /* Successful operation. */ -#define BTA_SDP_FAILURE 1 /* Generic failure. */ -#define BTA_SDP_BUSY 2 /* Temporarily can not handle this request. */ +#define BTA_SDP_SUCCESS 0 /* Successful operation. */ +#define BTA_SDP_FAILURE 1 /* Generic failure. */ +#define BTA_SDP_BUSY 2 /* Temporarily can not handle this request. */ typedef uint8_t tBTA_SDP_STATUS; /* SDP I/F callback events */ /* events received by tBTA_SDP_DM_CBACK */ -#define BTA_SDP_ENABLE_EVT 0 /* SDP service i/f enabled*/ -#define BTA_SDP_SEARCH_EVT 1 /* SDP Service started */ -#define BTA_SDP_SEARCH_COMP_EVT 2 /* SDP search complete */ -#define BTA_SDP_CREATE_RECORD_USER_EVT 3 /* SDP search complete */ -#define BTA_SDP_REMOVE_RECORD_USER_EVT 4 /* SDP search complete */ -#define BTA_SDP_MAX_EVT 5 /* max number of SDP events */ +#define BTA_SDP_ENABLE_EVT 0 /* SDP service i/f enabled*/ +#define BTA_SDP_SEARCH_EVT 1 /* SDP Service started */ +#define BTA_SDP_SEARCH_COMP_EVT 2 /* SDP search complete */ +#define BTA_SDP_CREATE_RECORD_USER_EVT 3 /* SDP search complete */ +#define BTA_SDP_REMOVE_RECORD_USER_EVT 4 /* SDP search complete */ +#define BTA_SDP_MAX_EVT 5 /* max number of SDP events */ #define BTA_SDP_MAX_RECORDS 15 typedef uint16_t tBTA_SDP_EVT; /* data associated with BTA_SDP_DISCOVERY_COMP_EVT */ -typedef struct -{ - tBTA_SDP_STATUS status; - BD_ADDR remote_addr; - tBT_UUID uuid; - int record_count; - bluetooth_sdp_record records[BTA_SDP_MAX_RECORDS]; +typedef struct { + tBTA_SDP_STATUS status; + BD_ADDR remote_addr; + tBT_UUID uuid; + int record_count; + bluetooth_sdp_record records[BTA_SDP_MAX_RECORDS]; } tBTA_SDP_SEARCH_COMP; -typedef union -{ - tBTA_SDP_STATUS status; /* BTA_SDP_SEARCH_EVT */ - tBTA_SDP_SEARCH_COMP sdp_search_comp; /* BTA_SDP_SEARCH_COMP_EVT */ +typedef union { + tBTA_SDP_STATUS status; /* BTA_SDP_SEARCH_EVT */ + tBTA_SDP_SEARCH_COMP sdp_search_comp; /* BTA_SDP_SEARCH_COMP_EVT */ } tBTA_SDP; /* SDP DM Interface callback */ -typedef void (tBTA_SDP_DM_CBACK)(tBTA_SDP_EVT event, tBTA_SDP *p_data, void * user_data); +typedef void(tBTA_SDP_DM_CBACK)(tBTA_SDP_EVT event, tBTA_SDP* p_data, + void* user_data); /* MCE configuration structure */ -typedef struct -{ - uint16_t sdp_db_size; /* The size of p_sdp_db */ - tSDP_DISCOVERY_DB *p_sdp_db; /* The data buffer to keep SDP database */ +typedef struct { + uint16_t sdp_db_size; /* The size of p_sdp_db */ + tSDP_DISCOVERY_DB* p_sdp_db; /* The data buffer to keep SDP database */ } tBTA_SDP_CFG; /******************************************************************************* @@ -95,7 +93,7 @@ typedef struct * BTA_SDP_FAIL if internal failure. * ******************************************************************************/ -extern tBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK *p_cback); +extern tBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK* p_cback); /******************************************************************************* * @@ -103,13 +101,14 @@ extern tBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK *p_cback); * * Description Start a search for sdp records for a specific BD_ADDR with a * specific profile uuid. - * When the search operation is completed, the callback function + * When the search operation is completed, the callback + *function * will be called with a BTA_SDP_SEARCH_EVT. * Returns BTA_SDP_SUCCESS if successful. * BTA_SDP_FAIL if internal failure. * ******************************************************************************/ -extern tBTA_SDP_STATUS BTA_SdpSearch(BD_ADDR bd_addr,tSDP_UUID *uuid); +extern tBTA_SDP_STATUS BTA_SdpSearch(BD_ADDR bd_addr, tSDP_UUID* uuid); /******************************************************************************* * diff --git a/system/bta/include/utl.h b/system/bta/include/utl.h index 63903503761..200a965c726 100644 --- a/system/bta/include/utl.h +++ b/system/bta/include/utl.h @@ -35,25 +35,26 @@ extern "C" { * Constants ****************************************************************************/ /*** class of device settings ***/ -#define BTA_UTL_SET_COD_MAJOR_MINOR 0x01 -#define BTA_UTL_SET_COD_SERVICE_CLASS 0x02 /* only set the bits in the input */ -#define BTA_UTL_CLR_COD_SERVICE_CLASS 0x04 -#define BTA_UTL_SET_COD_ALL 0x08 /* take service class as the input (may clear some set bits!!) */ -#define BTA_UTL_INIT_COD 0x0a +#define BTA_UTL_SET_COD_MAJOR_MINOR 0x01 +#define BTA_UTL_SET_COD_SERVICE_CLASS \ + 0x02 /* only set the bits in the input \ + */ +#define BTA_UTL_CLR_COD_SERVICE_CLASS 0x04 +#define BTA_UTL_SET_COD_ALL \ + 0x08 /* take service class as the input (may clear some set bits!!) */ +#define BTA_UTL_INIT_COD 0x0a /***************************************************************************** * Type Definitions ****************************************************************************/ /** for utl_set_device_class() **/ -typedef struct -{ - uint8_t minor; - uint8_t major; - uint16_t service; +typedef struct { + uint8_t minor; + uint8_t major; + uint16_t service; } tBTA_UTL_COD; - /***************************************************************************** * External Function Declarations ****************************************************************************/ @@ -70,7 +71,7 @@ typedef struct * Returns Integer value or -1 on error. * ******************************************************************************/ -extern int16_t utl_str2int(const char *p_s); +extern int16_t utl_str2int(const char* p_s); /******************************************************************************* * @@ -85,7 +86,7 @@ extern int16_t utl_str2int(const char *p_s); * Returns 0 if strings match, nonzero otherwise. * ******************************************************************************/ -extern int utl_strucmp(const char *p_s, const char *p_t); +extern int utl_strucmp(const char* p_s, const char* p_t); /******************************************************************************* * @@ -99,7 +100,7 @@ extern int utl_strucmp(const char *p_s, const char *p_t); * Returns Length of string. * ******************************************************************************/ -extern uint8_t utl_itoa(uint16_t i, char *p_s); +extern uint8_t utl_itoa(uint16_t i, char* p_s); /******************************************************************************* * @@ -111,16 +112,21 @@ extern uint8_t utl_itoa(uint16_t i, char *p_s); * p_cod - Pointer to the device class to set to * * cmd - the fields of the device class to update. - * BTA_UTL_SET_COD_MAJOR_MINOR, - overwrite major, minor class - * BTA_UTL_SET_COD_SERVICE_CLASS - set the bits in the input - * BTA_UTL_CLR_COD_SERVICE_CLASS - clear the bits in the input - * BTA_UTL_SET_COD_ALL - overwrite major, minor, set the bits in service class - * BTA_UTL_INIT_COD - overwrite major, minor, and service class + * BTA_UTL_SET_COD_MAJOR_MINOR, - overwrite major, + *minor class + * BTA_UTL_SET_COD_SERVICE_CLASS - set the bits in + *the input + * BTA_UTL_CLR_COD_SERVICE_CLASS - clear the bits in + *the input + * BTA_UTL_SET_COD_ALL - overwrite major, minor, set + *the bits in service class + * BTA_UTL_INIT_COD - overwrite major, minor, and + *service class * * Returns true if successful, Otherwise false * ******************************************************************************/ -extern bool utl_set_device_class(tBTA_UTL_COD *p_cod, uint8_t cmd); +extern bool utl_set_device_class(tBTA_UTL_COD* p_cod, uint8_t cmd); /******************************************************************************* * @@ -133,7 +139,7 @@ extern bool utl_set_device_class(tBTA_UTL_COD *p_cod, uint8_t cmd); * Returns true if successful, Otherwise false * ******************************************************************************/ -extern bool utl_isintstr(const char *p_s); +extern bool utl_isintstr(const char* p_s); /******************************************************************************* * @@ -158,7 +164,7 @@ extern bool utl_isdialchar(const char d); * Returns true if successful, Otherwise false * ******************************************************************************/ -extern bool utl_isdialstr(const char *p_s); +extern bool utl_isdialstr(const char* p_s); #ifdef __cplusplus } diff --git a/system/bta/jv/bta_jv_act.cc b/system/bta/jv/bta_jv_act.cc index 4ba721564b9..962cccfaf62 100644 --- a/system/bta/jv/bta_jv_act.cc +++ b/system/bta/jv/bta_jv_act.cc @@ -21,85 +21,80 @@ * This file contains action functions for BTA JV APIs. * ******************************************************************************/ -#include #include +#include #include #include #include -#include "osi/include/allocator.h" -#include "bt_types.h" +#include "avct_api.h" +#include "avdt_api.h" #include "bt_common.h" -#include "utl.h" -#include "bta_sys.h" +#include "bt_types.h" #include "bta_api.h" #include "bta_jv_api.h" -#include "bta_jv_int.h" #include "bta_jv_co.h" +#include "bta_jv_int.h" +#include "bta_sys.h" #include "btm_api.h" #include "btm_int.h" -#include "sdp_api.h" +#include "gap_api.h" #include "l2c_api.h" +#include "osi/include/allocator.h" #include "port_api.h" #include "rfcdefs.h" -#include "avct_api.h" -#include "avdt_api.h" -#include "gap_api.h" -#include "l2c_api.h" +#include "sdp_api.h" +#include "utl.h" #include "osi/include/osi.h" - /* one of these exists for each client */ struct fc_client { - struct fc_client *next_all_list; - struct fc_client *next_chan_list; - BD_ADDR remote_addr; - uint32_t id; - tBTA_JV_L2CAP_CBACK *p_cback; - void *user_data; - uint16_t handle; - uint16_t chan; - uint8_t sec_id; - unsigned server : 1; - unsigned init_called : 1; + struct fc_client* next_all_list; + struct fc_client* next_chan_list; + BD_ADDR remote_addr; + uint32_t id; + tBTA_JV_L2CAP_CBACK* p_cback; + void* user_data; + uint16_t handle; + uint16_t chan; + uint8_t sec_id; + unsigned server : 1; + unsigned init_called : 1; }; /* one of these exists for each channel we're dealing with */ struct fc_channel { - struct fc_channel *next; - struct fc_client *clients; - uint8_t has_server : 1; - uint16_t chan; + struct fc_channel* next; + struct fc_client* clients; + uint8_t has_server : 1; + uint16_t chan; }; - -static struct fc_client *fc_clients; -static struct fc_channel *fc_channels; +static struct fc_client* fc_clients; +static struct fc_channel* fc_channels; static uint32_t fc_next_id; - static void fcchan_conn_chng_cbk(uint16_t chan, BD_ADDR bd_addr, bool connected, - uint16_t reason, tBT_TRANSPORT ); -static void fcchan_data_cbk(uint16_t chan, BD_ADDR bd_addr, BT_HDR *p_buf); - - -extern void uuid_to_string_legacy(bt_uuid_t *p_uuid, char *str, size_t str_len); -static inline void logu(const char* title, const uint8_t * p_uuid) -{ - char uuids[128]; - uuid_to_string_legacy((bt_uuid_t*)p_uuid, uuids, sizeof(uuids)); - APPL_TRACE_DEBUG("%s: %s", title, uuids); + uint16_t reason, tBT_TRANSPORT); +static void fcchan_data_cbk(uint16_t chan, BD_ADDR bd_addr, BT_HDR* p_buf); + +extern void uuid_to_string_legacy(bt_uuid_t* p_uuid, char* str, size_t str_len); +static inline void logu(const char* title, const uint8_t* p_uuid) { + char uuids[128]; + uuid_to_string_legacy((bt_uuid_t*)p_uuid, uuids, sizeof(uuids)); + APPL_TRACE_DEBUG("%s: %s", title, uuids); } - -static tBTA_JV_PCB * bta_jv_add_rfc_port(tBTA_JV_RFC_CB *p_cb, tBTA_JV_PCB *p_pcb_open); +static tBTA_JV_PCB* bta_jv_add_rfc_port(tBTA_JV_RFC_CB* p_cb, + tBTA_JV_PCB* p_pcb_open); static tBTA_JV_STATUS bta_jv_free_set_pm_profile_cb(uint32_t jv_handle); -static void bta_jv_pm_conn_busy(tBTA_JV_PM_CB *p_cb); -static void bta_jv_pm_conn_idle(tBTA_JV_PM_CB *p_cb); -static void bta_jv_pm_state_change(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_STATE state); -tBTA_JV_STATUS bta_jv_set_pm_conn_state(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_STATE - new_st); +static void bta_jv_pm_conn_busy(tBTA_JV_PM_CB* p_cb); +static void bta_jv_pm_conn_idle(tBTA_JV_PM_CB* p_cb); +static void bta_jv_pm_state_change(tBTA_JV_PM_CB* p_cb, + const tBTA_JV_CONN_STATE state); +tBTA_JV_STATUS bta_jv_set_pm_conn_state(tBTA_JV_PM_CB* p_cb, + const tBTA_JV_CONN_STATE new_st); /******************************************************************************* * @@ -110,49 +105,39 @@ tBTA_JV_STATUS bta_jv_set_pm_conn_state(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_ * Returns * ******************************************************************************/ -uint8_t bta_jv_alloc_sec_id(void) -{ - uint8_t ret = 0; - int i; - for(i=0; i= BTA_JV_FIRST_SERVICE_ID && sec_id <= BTA_JV_LAST_SERVICE_ID) - { - BTM_SecClrService(sec_id); - bta_jv_cb.sec_id[sec_id - BTA_JV_FIRST_SERVICE_ID] = 0; - } +static void bta_jv_free_sec_id(uint8_t* p_sec_id) { + uint8_t sec_id = *p_sec_id; + *p_sec_id = 0; + if (sec_id >= BTA_JV_FIRST_SERVICE_ID && sec_id <= BTA_JV_LAST_SERVICE_ID) { + BTM_SecClrService(sec_id); + bta_jv_cb.sec_id[sec_id - BTA_JV_FIRST_SERVICE_ID] = 0; + } } /******************************************************************************* @@ -184,192 +167,190 @@ static void bta_jv_free_sec_id(uint8_t *p_sec_id) * Returns * ******************************************************************************/ -tBTA_JV_RFC_CB * bta_jv_alloc_rfc_cb(uint16_t port_handle, tBTA_JV_PCB **pp_pcb) -{ - tBTA_JV_RFC_CB *p_cb = NULL; - tBTA_JV_PCB *p_pcb; - int i, j; - for(i=0; ihandle = (i + 1) | BTA_JV_RFCOMM_MASK; - - p_cb->max_sess = 1; - p_cb->curr_sess = 1; - for (j = 0; j < BTA_JV_MAX_RFC_SR_SESSION; j++) - p_cb->rfc_hdl[j] = 0; - p_cb->rfc_hdl[0] = port_handle; - APPL_TRACE_DEBUG( "bta_jv_alloc_rfc_cb port_handle:%d handle:0x%2x", - port_handle, p_cb->handle); - - p_pcb = &bta_jv_cb.port_cb[port_handle - 1]; - p_pcb->handle = p_cb->handle; - p_pcb->port_handle = port_handle; - p_pcb->p_pm_cb = NULL; - *pp_pcb = p_pcb; - break; - } - } - if(p_cb == NULL) - { - APPL_TRACE_ERROR( "bta_jv_alloc_rfc_cb: port_handle:%d, ctrl block exceeds " - "limit:%d", port_handle, BTA_JV_MAX_RFC_CONN); - } - return p_cb; +tBTA_JV_RFC_CB* bta_jv_alloc_rfc_cb(uint16_t port_handle, + tBTA_JV_PCB** pp_pcb) { + tBTA_JV_RFC_CB* p_cb = NULL; + tBTA_JV_PCB* p_pcb; + int i, j; + for (i = 0; i < BTA_JV_MAX_RFC_CONN; i++) { + if (0 == bta_jv_cb.rfc_cb[i].handle) { + p_cb = &bta_jv_cb.rfc_cb[i]; + /* mask handle to distinguish it with L2CAP handle */ + p_cb->handle = (i + 1) | BTA_JV_RFCOMM_MASK; + + p_cb->max_sess = 1; + p_cb->curr_sess = 1; + for (j = 0; j < BTA_JV_MAX_RFC_SR_SESSION; j++) p_cb->rfc_hdl[j] = 0; + p_cb->rfc_hdl[0] = port_handle; + APPL_TRACE_DEBUG("bta_jv_alloc_rfc_cb port_handle:%d handle:0x%2x", + port_handle, p_cb->handle); + + p_pcb = &bta_jv_cb.port_cb[port_handle - 1]; + p_pcb->handle = p_cb->handle; + p_pcb->port_handle = port_handle; + p_pcb->p_pm_cb = NULL; + *pp_pcb = p_pcb; + break; + } + } + if (p_cb == NULL) { + APPL_TRACE_ERROR( + "bta_jv_alloc_rfc_cb: port_handle:%d, ctrl block exceeds " + "limit:%d", + port_handle, BTA_JV_MAX_RFC_CONN); + } + return p_cb; } /******************************************************************************* * * Function bta_jv_rfc_port_to_pcb * - * Description find the port control block associated with the given port handle + * Description find the port control block associated with the given port + *handle * * Returns * ******************************************************************************/ -tBTA_JV_PCB * bta_jv_rfc_port_to_pcb(uint16_t port_handle) -{ - tBTA_JV_PCB *p_pcb = NULL; +tBTA_JV_PCB* bta_jv_rfc_port_to_pcb(uint16_t port_handle) { + tBTA_JV_PCB* p_pcb = NULL; - if ((port_handle > 0) && (port_handle <= MAX_RFC_PORTS) - && bta_jv_cb.port_cb[port_handle - 1].handle) - { - p_pcb = &bta_jv_cb.port_cb[port_handle - 1]; - } + if ((port_handle > 0) && (port_handle <= MAX_RFC_PORTS) && + bta_jv_cb.port_cb[port_handle - 1].handle) { + p_pcb = &bta_jv_cb.port_cb[port_handle - 1]; + } - return p_pcb; + return p_pcb; } /******************************************************************************* * * Function bta_jv_rfc_port_to_cb * - * Description find the RFCOMM control block associated with the given port handle + * Description find the RFCOMM control block associated with the given port + *handle * * Returns * ******************************************************************************/ -tBTA_JV_RFC_CB * bta_jv_rfc_port_to_cb(uint16_t port_handle) -{ - tBTA_JV_RFC_CB *p_cb = NULL; - uint32_t handle; - - if ((port_handle > 0) && (port_handle <= MAX_RFC_PORTS) - && bta_jv_cb.port_cb[port_handle - 1].handle) - { - handle = bta_jv_cb.port_cb[port_handle - 1].handle; - handle &= BTA_JV_RFC_HDL_MASK; - handle &= ~BTA_JV_RFCOMM_MASK; - if (handle) - p_cb = &bta_jv_cb.rfc_cb[handle - 1]; - } - else - { - APPL_TRACE_WARNING("bta_jv_rfc_port_to_cb(port_handle:0x%x):jv handle:0x%x not" - " FOUND", port_handle, bta_jv_cb.port_cb[port_handle - 1].handle); - } - return p_cb; +tBTA_JV_RFC_CB* bta_jv_rfc_port_to_cb(uint16_t port_handle) { + tBTA_JV_RFC_CB* p_cb = NULL; + uint32_t handle; + + if ((port_handle > 0) && (port_handle <= MAX_RFC_PORTS) && + bta_jv_cb.port_cb[port_handle - 1].handle) { + handle = bta_jv_cb.port_cb[port_handle - 1].handle; + handle &= BTA_JV_RFC_HDL_MASK; + handle &= ~BTA_JV_RFCOMM_MASK; + if (handle) p_cb = &bta_jv_cb.rfc_cb[handle - 1]; + } else { + APPL_TRACE_WARNING( + "bta_jv_rfc_port_to_cb(port_handle:0x%x):jv handle:0x%x not" + " FOUND", + port_handle, bta_jv_cb.port_cb[port_handle - 1].handle); + } + return p_cb; } -static tBTA_JV_STATUS bta_jv_free_rfc_cb(tBTA_JV_RFC_CB *p_cb, tBTA_JV_PCB *p_pcb) -{ - tBTA_JV_STATUS status = BTA_JV_SUCCESS; - bool remove_server = false; - int close_pending = 0; - - if (!p_cb || !p_pcb) - { - APPL_TRACE_ERROR("bta_jv_free_sr_rfc_cb, p_cb or p_pcb cannot be null"); - return BTA_JV_FAILURE; - } - APPL_TRACE_DEBUG("bta_jv_free_sr_rfc_cb: max_sess:%d, curr_sess:%d, p_pcb:%p, user:" - "%p, state:%d, jv handle: 0x%x" ,p_cb->max_sess, p_cb->curr_sess, p_pcb, - p_pcb->user_data, p_pcb->state, p_pcb->handle); - - if (p_cb->curr_sess <= 0) - return BTA_JV_SUCCESS; - - switch (p_pcb->state) - { +static tBTA_JV_STATUS bta_jv_free_rfc_cb(tBTA_JV_RFC_CB* p_cb, + tBTA_JV_PCB* p_pcb) { + tBTA_JV_STATUS status = BTA_JV_SUCCESS; + bool remove_server = false; + int close_pending = 0; + + if (!p_cb || !p_pcb) { + APPL_TRACE_ERROR("bta_jv_free_sr_rfc_cb, p_cb or p_pcb cannot be null"); + return BTA_JV_FAILURE; + } + APPL_TRACE_DEBUG( + "bta_jv_free_sr_rfc_cb: max_sess:%d, curr_sess:%d, p_pcb:%p, user:" + "%p, state:%d, jv handle: 0x%x", + p_cb->max_sess, p_cb->curr_sess, p_pcb, p_pcb->user_data, p_pcb->state, + p_pcb->handle); + + if (p_cb->curr_sess <= 0) return BTA_JV_SUCCESS; + + switch (p_pcb->state) { case BTA_JV_ST_CL_CLOSING: case BTA_JV_ST_SR_CLOSING: - APPL_TRACE_WARNING("bta_jv_free_sr_rfc_cb: return on closing, port state:%d, " - "scn:%d, p_pcb:%p, user_data:%p", p_pcb->state, p_cb->scn, p_pcb, - p_pcb->user_data); - status = BTA_JV_FAILURE; - return status; + APPL_TRACE_WARNING( + "bta_jv_free_sr_rfc_cb: return on closing, port state:%d, " + "scn:%d, p_pcb:%p, user_data:%p", + p_pcb->state, p_cb->scn, p_pcb, p_pcb->user_data); + status = BTA_JV_FAILURE; + return status; case BTA_JV_ST_CL_OPEN: case BTA_JV_ST_CL_OPENING: - APPL_TRACE_DEBUG("bta_jv_free_sr_rfc_cb: state: %d, scn:%d," - " user_data:%p", p_pcb->state, p_cb->scn, p_pcb->user_data); - p_pcb->state = BTA_JV_ST_CL_CLOSING; - break; + APPL_TRACE_DEBUG( + "bta_jv_free_sr_rfc_cb: state: %d, scn:%d," + " user_data:%p", + p_pcb->state, p_cb->scn, p_pcb->user_data); + p_pcb->state = BTA_JV_ST_CL_CLOSING; + break; case BTA_JV_ST_SR_LISTEN: - p_pcb->state = BTA_JV_ST_SR_CLOSING; - remove_server = true; - APPL_TRACE_DEBUG("bta_jv_free_sr_rfc_cb: state: BTA_JV_ST_SR_LISTEN, scn:%d," - " user_data:%p", p_cb->scn, p_pcb->user_data); - break; + p_pcb->state = BTA_JV_ST_SR_CLOSING; + remove_server = true; + APPL_TRACE_DEBUG( + "bta_jv_free_sr_rfc_cb: state: BTA_JV_ST_SR_LISTEN, scn:%d," + " user_data:%p", + p_cb->scn, p_pcb->user_data); + break; case BTA_JV_ST_SR_OPEN: - p_pcb->state = BTA_JV_ST_SR_CLOSING; - APPL_TRACE_DEBUG("bta_jv_free_sr_rfc_cb: state: BTA_JV_ST_SR_OPEN, scn:%d," - " user_data:%p", p_cb->scn, p_pcb->user_data); - break; + p_pcb->state = BTA_JV_ST_SR_CLOSING; + APPL_TRACE_DEBUG( + "bta_jv_free_sr_rfc_cb: state: BTA_JV_ST_SR_OPEN, scn:%d," + " user_data:%p", + p_cb->scn, p_pcb->user_data); + break; default: - APPL_TRACE_WARNING("bta_jv_free_sr_rfc_cb():failed, ignore port state:%d, scn:" - "%d, p_pcb:%p, jv handle: 0x%x, port_handle: %d, user_data:%p", - p_pcb->state, p_cb->scn, p_pcb, p_pcb->handle, p_pcb->port_handle, - p_pcb->user_data); - status = BTA_JV_FAILURE; - break; - } - if (BTA_JV_SUCCESS == status) - { - int port_status; - - if (!remove_server) - port_status = RFCOMM_RemoveConnection(p_pcb->port_handle); - else - port_status = RFCOMM_RemoveServer(p_pcb->port_handle); - if (port_status != PORT_SUCCESS) - { - status = BTA_JV_FAILURE; - APPL_TRACE_WARNING("bta_jv_free_rfc_cb(jv handle: 0x%x, state %d)::" - "port_status: %d, port_handle: %d, close_pending: %d:Remove", - p_pcb->handle, p_pcb->state, port_status, p_pcb->port_handle, - close_pending); - } - } - if (!close_pending) - { - p_pcb->port_handle = 0; - p_pcb->state = BTA_JV_ST_NONE; - bta_jv_free_set_pm_profile_cb(p_pcb->handle); - - //Initialize congestion flags - p_pcb->cong = false; - p_pcb->user_data = 0; - int si = BTA_JV_RFC_HDL_TO_SIDX(p_pcb->handle); - if (0 <= si && si < BTA_JV_MAX_RFC_SR_SESSION) - p_cb->rfc_hdl[si] = 0; - p_pcb->handle = 0; - p_cb->curr_sess--; - if (p_cb->curr_sess == 0) - { - p_cb->scn = 0; - bta_jv_free_sec_id(&p_cb->sec_id); - p_cb->p_cback = NULL; - p_cb->handle = 0; - p_cb->curr_sess = -1; - } - if (remove_server) { - bta_jv_free_sec_id(&p_cb->sec_id); - } - } - return status; + APPL_TRACE_WARNING( + "bta_jv_free_sr_rfc_cb():failed, ignore port state:%d, scn:" + "%d, p_pcb:%p, jv handle: 0x%x, port_handle: %d, user_data:%p", + p_pcb->state, p_cb->scn, p_pcb, p_pcb->handle, p_pcb->port_handle, + p_pcb->user_data); + status = BTA_JV_FAILURE; + break; + } + if (BTA_JV_SUCCESS == status) { + int port_status; + + if (!remove_server) + port_status = RFCOMM_RemoveConnection(p_pcb->port_handle); + else + port_status = RFCOMM_RemoveServer(p_pcb->port_handle); + if (port_status != PORT_SUCCESS) { + status = BTA_JV_FAILURE; + APPL_TRACE_WARNING( + "bta_jv_free_rfc_cb(jv handle: 0x%x, state %d)::" + "port_status: %d, port_handle: %d, close_pending: %d:Remove", + p_pcb->handle, p_pcb->state, port_status, p_pcb->port_handle, + close_pending); + } + } + if (!close_pending) { + p_pcb->port_handle = 0; + p_pcb->state = BTA_JV_ST_NONE; + bta_jv_free_set_pm_profile_cb(p_pcb->handle); + + // Initialize congestion flags + p_pcb->cong = false; + p_pcb->user_data = 0; + int si = BTA_JV_RFC_HDL_TO_SIDX(p_pcb->handle); + if (0 <= si && si < BTA_JV_MAX_RFC_SR_SESSION) p_cb->rfc_hdl[si] = 0; + p_pcb->handle = 0; + p_cb->curr_sess--; + if (p_cb->curr_sess == 0) { + p_cb->scn = 0; + bta_jv_free_sec_id(&p_cb->sec_id); + p_cb->p_cback = NULL; + p_cb->handle = 0; + p_cb->curr_sess = -1; + } + if (remove_server) { + bta_jv_free_sec_id(&p_cb->sec_id); + } + } + return status; } /******************************************************************************* @@ -381,22 +362,19 @@ static tBTA_JV_STATUS bta_jv_free_rfc_cb(tBTA_JV_RFC_CB *p_cb, tBTA_JV_PCB *p_pc * Returns * ******************************************************************************/ -tBTA_JV_STATUS bta_jv_free_l2c_cb(tBTA_JV_L2C_CB *p_cb) -{ - tBTA_JV_STATUS status = BTA_JV_SUCCESS; - - if(BTA_JV_ST_NONE != p_cb->state) - { - bta_jv_free_set_pm_profile_cb((uint32_t)p_cb->handle); - if (GAP_ConnClose(p_cb->handle) != BT_PASS) - status = BTA_JV_FAILURE; - } - p_cb->psm = 0; - p_cb->state = BTA_JV_ST_NONE; - p_cb->cong = false; - bta_jv_free_sec_id(&p_cb->sec_id); - p_cb->p_cback = NULL; - return status; +tBTA_JV_STATUS bta_jv_free_l2c_cb(tBTA_JV_L2C_CB* p_cb) { + tBTA_JV_STATUS status = BTA_JV_SUCCESS; + + if (BTA_JV_ST_NONE != p_cb->state) { + bta_jv_free_set_pm_profile_cb((uint32_t)p_cb->handle); + if (GAP_ConnClose(p_cb->handle) != BT_PASS) status = BTA_JV_FAILURE; + } + p_cb->psm = 0; + p_cb->state = BTA_JV_ST_NONE; + p_cb->cong = false; + bta_jv_free_sec_id(&p_cb->sec_id); + p_cb->p_cback = NULL; + return status; } /******************************************************************************* @@ -404,22 +382,25 @@ tBTA_JV_STATUS bta_jv_free_l2c_cb(tBTA_JV_L2C_CB *p_cb) * * Function bta_jv_clear_pm_cb * - * Description clears jv pm control block and optionally calls bta_sys_conn_close() - * In general close_conn should be set to true to remove registering with + * Description clears jv pm control block and optionally calls + *bta_sys_conn_close() + * In general close_conn should be set to true to remove registering + *with * dm pm! * - * WARNING: Make sure to clear pointer form port or l2c to this control block too! + * WARNING: Make sure to clear pointer form port or l2c to this control block + *too! * ******************************************************************************/ -static void bta_jv_clear_pm_cb(tBTA_JV_PM_CB *p_pm_cb, bool close_conn) -{ - /* needs to be called if registered with bta pm, otherwise we may run out of dm pm slots! */ - if (close_conn) - bta_sys_conn_close(BTA_ID_JV, p_pm_cb->app_id, p_pm_cb->peer_bd_addr); - p_pm_cb->state = BTA_JV_PM_FREE_ST; - p_pm_cb->app_id = BTA_JV_PM_ALL; - p_pm_cb->handle = BTA_JV_PM_HANDLE_CLEAR; - bdcpy(p_pm_cb->peer_bd_addr, bd_addr_null); +static void bta_jv_clear_pm_cb(tBTA_JV_PM_CB* p_pm_cb, bool close_conn) { + /* needs to be called if registered with bta pm, otherwise we may run out of + * dm pm slots! */ + if (close_conn) + bta_sys_conn_close(BTA_ID_JV, p_pm_cb->app_id, p_pm_cb->peer_bd_addr); + p_pm_cb->state = BTA_JV_PM_FREE_ST; + p_pm_cb->app_id = BTA_JV_PM_ALL; + p_pm_cb->handle = BTA_JV_PM_HANDLE_CLEAR; + bdcpy(p_pm_cb->peer_bd_addr, bd_addr_null); } /******************************************************************************* @@ -429,84 +410,82 @@ static void bta_jv_clear_pm_cb(tBTA_JV_PM_CB *p_pm_cb, bool close_conn) * Description free pm profile control block * * Returns BTA_JV_SUCCESS if cb has been freed correctly, - * BTA_JV_FAILURE in case of no profile has been registered or already freed + * BTA_JV_FAILURE in case of no profile has been registered or + *already freed * *******************************************************************************/ -static tBTA_JV_STATUS bta_jv_free_set_pm_profile_cb(uint32_t jv_handle) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; - tBTA_JV_PM_CB **p_cb; - int i, j, bd_counter = 0, appid_counter = 0; - - for (i = 0; i < BTA_JV_PM_MAX_NUM; i++) - { - p_cb = NULL; - if ((bta_jv_cb.pm_cb[i].state != BTA_JV_PM_FREE_ST) && - (jv_handle == bta_jv_cb.pm_cb[i].handle)) - { - for (j = 0; j < BTA_JV_PM_MAX_NUM; j++) - { - if (bdcmp(bta_jv_cb.pm_cb[j].peer_bd_addr, bta_jv_cb.pm_cb[i].peer_bd_addr) == 0) - bd_counter++; - if (bta_jv_cb.pm_cb[j].app_id == bta_jv_cb.pm_cb[i].app_id) - appid_counter++; - } - - APPL_TRACE_API("%s(jv_handle: 0x%2x), idx: %d, " - "app_id: 0x%x",__func__, jv_handle, i, bta_jv_cb.pm_cb[i].app_id); - APPL_TRACE_API("%s, bd_counter = %d, " - "appid_counter = %d", __func__, bd_counter, appid_counter); - if (bd_counter > 1) - { - bta_jv_pm_conn_idle(&bta_jv_cb.pm_cb[i]); - } - - if (bd_counter <= 1 || (appid_counter <= 1)) - { - bta_jv_clear_pm_cb(&bta_jv_cb.pm_cb[i], true); - } - else - { - bta_jv_clear_pm_cb(&bta_jv_cb.pm_cb[i], false); - } - - if (BTA_JV_RFCOMM_MASK & jv_handle) - { - uint32_t hi = ((jv_handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1; - uint32_t si = BTA_JV_RFC_HDL_TO_SIDX(jv_handle); - if (hi < BTA_JV_MAX_RFC_CONN && bta_jv_cb.rfc_cb[hi].p_cback && si - < BTA_JV_MAX_RFC_SR_SESSION && bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) - { - tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(bta_jv_cb.rfc_cb[hi].rfc_hdl[si]); - if (p_pcb) - { - if (NULL == p_pcb->p_pm_cb) - APPL_TRACE_WARNING("%s(jv_handle:" - " 0x%x):port_handle: 0x%x, p_pm_cb: %d: no link to " - "pm_cb?", __func__, jv_handle, p_pcb->port_handle, i); - p_cb = &p_pcb->p_pm_cb; - } - } - } - else - { - if (jv_handle < BTA_JV_MAX_L2C_CONN) - { - tBTA_JV_L2C_CB *p_l2c_cb = &bta_jv_cb.l2c_cb[jv_handle]; - if (NULL == p_l2c_cb->p_pm_cb) - APPL_TRACE_WARNING("%s(jv_handle: " - "0x%x): p_pm_cb: %d: no link to pm_cb?", __func__, jv_handle, i); - p_cb = &p_l2c_cb->p_pm_cb; - } - } - if (p_cb) - { - *p_cb = NULL; - status = BTA_JV_SUCCESS; - } +static tBTA_JV_STATUS bta_jv_free_set_pm_profile_cb(uint32_t jv_handle) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; + tBTA_JV_PM_CB** p_cb; + int i, j, bd_counter = 0, appid_counter = 0; + + for (i = 0; i < BTA_JV_PM_MAX_NUM; i++) { + p_cb = NULL; + if ((bta_jv_cb.pm_cb[i].state != BTA_JV_PM_FREE_ST) && + (jv_handle == bta_jv_cb.pm_cb[i].handle)) { + for (j = 0; j < BTA_JV_PM_MAX_NUM; j++) { + if (bdcmp(bta_jv_cb.pm_cb[j].peer_bd_addr, + bta_jv_cb.pm_cb[i].peer_bd_addr) == 0) + bd_counter++; + if (bta_jv_cb.pm_cb[j].app_id == bta_jv_cb.pm_cb[i].app_id) + appid_counter++; + } + + APPL_TRACE_API( + "%s(jv_handle: 0x%2x), idx: %d, " + "app_id: 0x%x", + __func__, jv_handle, i, bta_jv_cb.pm_cb[i].app_id); + APPL_TRACE_API( + "%s, bd_counter = %d, " + "appid_counter = %d", + __func__, bd_counter, appid_counter); + if (bd_counter > 1) { + bta_jv_pm_conn_idle(&bta_jv_cb.pm_cb[i]); + } + + if (bd_counter <= 1 || (appid_counter <= 1)) { + bta_jv_clear_pm_cb(&bta_jv_cb.pm_cb[i], true); + } else { + bta_jv_clear_pm_cb(&bta_jv_cb.pm_cb[i], false); + } + + if (BTA_JV_RFCOMM_MASK & jv_handle) { + uint32_t hi = + ((jv_handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1; + uint32_t si = BTA_JV_RFC_HDL_TO_SIDX(jv_handle); + if (hi < BTA_JV_MAX_RFC_CONN && bta_jv_cb.rfc_cb[hi].p_cback && + si < BTA_JV_MAX_RFC_SR_SESSION && + bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) { + tBTA_JV_PCB* p_pcb = + bta_jv_rfc_port_to_pcb(bta_jv_cb.rfc_cb[hi].rfc_hdl[si]); + if (p_pcb) { + if (NULL == p_pcb->p_pm_cb) + APPL_TRACE_WARNING( + "%s(jv_handle:" + " 0x%x):port_handle: 0x%x, p_pm_cb: %d: no link to " + "pm_cb?", + __func__, jv_handle, p_pcb->port_handle, i); + p_cb = &p_pcb->p_pm_cb; + } } - } - return status; + } else { + if (jv_handle < BTA_JV_MAX_L2C_CONN) { + tBTA_JV_L2C_CB* p_l2c_cb = &bta_jv_cb.l2c_cb[jv_handle]; + if (NULL == p_l2c_cb->p_pm_cb) + APPL_TRACE_WARNING( + "%s(jv_handle: " + "0x%x): p_pm_cb: %d: no link to pm_cb?", + __func__, jv_handle, i); + p_cb = &p_l2c_cb->p_pm_cb; + } + } + if (p_cb) { + *p_cb = NULL; + status = BTA_JV_SUCCESS; + } + } + } + return status; } /******************************************************************************* @@ -518,69 +497,63 @@ static tBTA_JV_STATUS bta_jv_free_set_pm_profile_cb(uint32_t jv_handle) * Returns pointer to allocated cb or NULL in case of failure * *******************************************************************************/ -static tBTA_JV_PM_CB *bta_jv_alloc_set_pm_profile_cb(uint32_t jv_handle, tBTA_JV_PM_ID app_id) -{ - bool bRfcHandle = (jv_handle & BTA_JV_RFCOMM_MASK) != 0; - BD_ADDR peer_bd_addr; - int i, j; - tBTA_JV_PM_CB **pp_cb; - - for (i = 0; i < BTA_JV_PM_MAX_NUM; i++) - { - pp_cb = NULL; - if (bta_jv_cb.pm_cb[i].state == BTA_JV_PM_FREE_ST) - { - /* rfc handle bd addr retrieval requires core stack handle */ - if (bRfcHandle) - { - for (j = 0; j < BTA_JV_MAX_RFC_CONN; j++) - { - if (jv_handle == bta_jv_cb.port_cb[j].handle) - { - pp_cb = &bta_jv_cb.port_cb[j].p_pm_cb; - if (PORT_SUCCESS != PORT_CheckConnection( - bta_jv_cb.port_cb[j].port_handle, peer_bd_addr, NULL)) - i = BTA_JV_PM_MAX_NUM; - break; - } - } - } +static tBTA_JV_PM_CB* bta_jv_alloc_set_pm_profile_cb(uint32_t jv_handle, + tBTA_JV_PM_ID app_id) { + bool bRfcHandle = (jv_handle & BTA_JV_RFCOMM_MASK) != 0; + BD_ADDR peer_bd_addr; + int i, j; + tBTA_JV_PM_CB** pp_cb; + + for (i = 0; i < BTA_JV_PM_MAX_NUM; i++) { + pp_cb = NULL; + if (bta_jv_cb.pm_cb[i].state == BTA_JV_PM_FREE_ST) { + /* rfc handle bd addr retrieval requires core stack handle */ + if (bRfcHandle) { + for (j = 0; j < BTA_JV_MAX_RFC_CONN; j++) { + if (jv_handle == bta_jv_cb.port_cb[j].handle) { + pp_cb = &bta_jv_cb.port_cb[j].p_pm_cb; + if (PORT_SUCCESS != + PORT_CheckConnection(bta_jv_cb.port_cb[j].port_handle, + peer_bd_addr, NULL)) + i = BTA_JV_PM_MAX_NUM; + break; + } + } + } else { + /* use jv handle for l2cap bd address retrieval */ + for (j = 0; j < BTA_JV_MAX_L2C_CONN; j++) { + if (jv_handle == bta_jv_cb.l2c_cb[j].handle) { + pp_cb = &bta_jv_cb.l2c_cb[j].p_pm_cb; + uint8_t* p_bd_addr = GAP_ConnGetRemoteAddr((uint16_t)jv_handle); + if (NULL != p_bd_addr) + bdcpy(peer_bd_addr, p_bd_addr); else - { - /* use jv handle for l2cap bd address retrieval */ - for (j = 0; j < BTA_JV_MAX_L2C_CONN; j++) - { - if (jv_handle == bta_jv_cb.l2c_cb[j].handle) - { - pp_cb = &bta_jv_cb.l2c_cb[j].p_pm_cb; - uint8_t *p_bd_addr = GAP_ConnGetRemoteAddr((uint16_t)jv_handle); - if (NULL != p_bd_addr) - bdcpy(peer_bd_addr, p_bd_addr); - else - i = BTA_JV_PM_MAX_NUM; - break; - } - } - } - APPL_TRACE_API("bta_jv_alloc_set_pm_profile_cb(handle 0x%2x, app_id %d): " - "idx: %d, (BTA_JV_PM_MAX_NUM: %d), pp_cb: 0x%x", jv_handle, app_id, - i, BTA_JV_PM_MAX_NUM, pp_cb); + i = BTA_JV_PM_MAX_NUM; break; + } } - } - - if ((i != BTA_JV_PM_MAX_NUM) && (NULL != pp_cb)) - { - *pp_cb = &bta_jv_cb.pm_cb[i]; - bta_jv_cb.pm_cb[i].handle = jv_handle; - bta_jv_cb.pm_cb[i].app_id = app_id; - bdcpy(bta_jv_cb.pm_cb[i].peer_bd_addr, peer_bd_addr); - bta_jv_cb.pm_cb[i].state = BTA_JV_PM_IDLE_ST; - return &bta_jv_cb.pm_cb[i]; - } - APPL_TRACE_WARNING("bta_jv_alloc_set_pm_profile_cb(jv_handle: 0x%x, app_id: %d) " - "return NULL", jv_handle, app_id); - return (tBTA_JV_PM_CB *)NULL; + } + APPL_TRACE_API( + "bta_jv_alloc_set_pm_profile_cb(handle 0x%2x, app_id %d): " + "idx: %d, (BTA_JV_PM_MAX_NUM: %d), pp_cb: 0x%x", + jv_handle, app_id, i, BTA_JV_PM_MAX_NUM, pp_cb); + break; + } + } + + if ((i != BTA_JV_PM_MAX_NUM) && (NULL != pp_cb)) { + *pp_cb = &bta_jv_cb.pm_cb[i]; + bta_jv_cb.pm_cb[i].handle = jv_handle; + bta_jv_cb.pm_cb[i].app_id = app_id; + bdcpy(bta_jv_cb.pm_cb[i].peer_bd_addr, peer_bd_addr); + bta_jv_cb.pm_cb[i].state = BTA_JV_PM_IDLE_ST; + return &bta_jv_cb.pm_cb[i]; + } + APPL_TRACE_WARNING( + "bta_jv_alloc_set_pm_profile_cb(jv_handle: 0x%x, app_id: %d) " + "return NULL", + jv_handle, app_id); + return (tBTA_JV_PM_CB*)NULL; } /******************************************************************************* @@ -592,61 +565,53 @@ static tBTA_JV_PM_CB *bta_jv_alloc_set_pm_profile_cb(uint32_t jv_handle, tBTA_JV * Returns true, if allowed * ******************************************************************************/ -bool bta_jv_check_psm(uint16_t psm) -{ - bool ret = false; +bool bta_jv_check_psm(uint16_t psm) { + bool ret = false; + + if (L2C_IS_VALID_PSM(psm)) { + if (psm < 0x1001) { + /* see if this is defined by spec */ + switch (psm) { + case SDP_PSM: /* 1 */ + case BT_PSM_RFCOMM: /* 3 */ + /* do not allow java app to use these 2 PSMs */ + break; + + case TCS_PSM_INTERCOM: /* 5 */ + case TCS_PSM_CORDLESS: /* 7 */ + if (false == bta_sys_is_register(BTA_ID_CT) && + false == bta_sys_is_register(BTA_ID_CG)) + ret = true; + break; - if (L2C_IS_VALID_PSM(psm)) - { - if (psm < 0x1001) - { - /* see if this is defined by spec */ - switch (psm) - { - case SDP_PSM: /* 1 */ - case BT_PSM_RFCOMM: /* 3 */ - /* do not allow java app to use these 2 PSMs */ - break; - - case TCS_PSM_INTERCOM: /* 5 */ - case TCS_PSM_CORDLESS: /* 7 */ - if( false == bta_sys_is_register(BTA_ID_CT) && - false == bta_sys_is_register(BTA_ID_CG) ) - ret = true; - break; - - case BT_PSM_BNEP: /* F */ - if(false == bta_sys_is_register(BTA_ID_PAN)) - ret = true; - break; - - case HID_PSM_CONTROL: /* 0x11 */ - case HID_PSM_INTERRUPT: /* 0x13 */ - //FIX: allow HID Device and HID Host to coexist - if( false == bta_sys_is_register(BTA_ID_HD) || - false == bta_sys_is_register(BTA_ID_HH) ) - ret = true; - break; - - case AVCT_PSM: /* 0x17 */ - case AVDT_PSM: /* 0x19 */ - if ((false == bta_sys_is_register(BTA_ID_AV)) && - (false == bta_sys_is_register(BTA_ID_AVK))) - ret = true; - break; - - default: - ret = true; - break; - } - } - else - { + case BT_PSM_BNEP: /* F */ + if (false == bta_sys_is_register(BTA_ID_PAN)) ret = true; + break; + + case HID_PSM_CONTROL: /* 0x11 */ + case HID_PSM_INTERRUPT: /* 0x13 */ + // FIX: allow HID Device and HID Host to coexist + if (false == bta_sys_is_register(BTA_ID_HD) || + false == bta_sys_is_register(BTA_ID_HH)) ret = true; - } - } - return ret; + break; + + case AVCT_PSM: /* 0x17 */ + case AVDT_PSM: /* 0x19 */ + if ((false == bta_sys_is_register(BTA_ID_AV)) && + (false == bta_sys_is_register(BTA_ID_AVK))) + ret = true; + break; + default: + ret = true; + break; + } + } else { + ret = true; + } + } + return ret; } /******************************************************************************* @@ -658,12 +623,11 @@ bool bta_jv_check_psm(uint16_t psm) * Returns void * ******************************************************************************/ -void bta_jv_enable(tBTA_JV_MSG *p_data) -{ - tBTA_JV_STATUS status = BTA_JV_SUCCESS; - bta_jv_cb.p_dm_cback = p_data->enable.p_cback; - bta_jv_cb.p_dm_cback(BTA_JV_ENABLE_EVT, (tBTA_JV *)&status, 0); - memset(bta_jv_cb.free_psm_list,0,sizeof(bta_jv_cb.free_psm_list)); +void bta_jv_enable(tBTA_JV_MSG* p_data) { + tBTA_JV_STATUS status = BTA_JV_SUCCESS; + bta_jv_cb.p_dm_cback = p_data->enable.p_cback; + bta_jv_cb.p_dm_cback(BTA_JV_ENABLE_EVT, (tBTA_JV*)&status, 0); + memset(bta_jv_cb.free_psm_list, 0, sizeof(bta_jv_cb.free_psm_list)); } /******************************************************************************* @@ -676,12 +640,10 @@ void bta_jv_enable(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_disable (UNUSED_ATTR tBTA_JV_MSG *p_data) -{ - APPL_TRACE_ERROR("%s",__func__); +void bta_jv_disable(UNUSED_ATTR tBTA_JV_MSG* p_data) { + APPL_TRACE_ERROR("%s", __func__); } - /** * We keep a list of PSM's that have been freed from JAVA, for reuse. * This function will return a free PSM, and delete it from the free @@ -689,34 +651,37 @@ void bta_jv_disable (UNUSED_ATTR tBTA_JV_MSG *p_data) * If no free PSMs exist, 0 will be returned. */ static uint16_t bta_jv_get_free_psm() { - const int cnt = sizeof(bta_jv_cb.free_psm_list)/sizeof(bta_jv_cb.free_psm_list[0]); - for (int i = 0; i < cnt; i++) { - uint16_t psm = bta_jv_cb.free_psm_list[i]; - if (psm != 0) { - APPL_TRACE_DEBUG("%s(): Reusing PSM: 0x%04d", __func__, psm) - bta_jv_cb.free_psm_list[i] = 0; - return psm; - } - } - return 0; + const int cnt = + sizeof(bta_jv_cb.free_psm_list) / sizeof(bta_jv_cb.free_psm_list[0]); + for (int i = 0; i < cnt; i++) { + uint16_t psm = bta_jv_cb.free_psm_list[i]; + if (psm != 0) { + APPL_TRACE_DEBUG("%s(): Reusing PSM: 0x%04d", __func__, psm) + bta_jv_cb.free_psm_list[i] = 0; + return psm; + } + } + return 0; } static void bta_jv_set_free_psm(uint16_t psm) { - int free_index = -1; - const int cnt = sizeof(bta_jv_cb.free_psm_list)/sizeof(bta_jv_cb.free_psm_list[0]); - for (int i = 0; i < cnt; i++) { - if (bta_jv_cb.free_psm_list[i] == 0) { - free_index = i; - } else if (psm == bta_jv_cb.free_psm_list[i]) { - return; // PSM already freed? - } - } - if (free_index != -1) { - bta_jv_cb.free_psm_list[free_index] = psm; - APPL_TRACE_DEBUG("%s(): Recycling PSM: 0x%04d", __func__, psm) - } else { - APPL_TRACE_ERROR("%s unable to free psm 0x%x no more free slots",__func__, psm); - } + int free_index = -1; + const int cnt = + sizeof(bta_jv_cb.free_psm_list) / sizeof(bta_jv_cb.free_psm_list[0]); + for (int i = 0; i < cnt; i++) { + if (bta_jv_cb.free_psm_list[i] == 0) { + free_index = i; + } else if (psm == bta_jv_cb.free_psm_list[i]) { + return; // PSM already freed? + } + } + if (free_index != -1) { + bta_jv_cb.free_psm_list[free_index] = psm; + APPL_TRACE_DEBUG("%s(): Recycling PSM: 0x%04d", __func__, psm) + } else { + APPL_TRACE_ERROR("%s unable to free psm 0x%x no more free slots", __func__, + psm); + } } /******************************************************************************* @@ -729,49 +694,47 @@ static void bta_jv_set_free_psm(uint16_t psm) { * Returns void * ******************************************************************************/ -void bta_jv_get_channel_id(tBTA_JV_MSG *p_data) -{ - uint16_t psm = 0; - - switch (p_data->alloc_channel.type) { - case BTA_JV_CONN_TYPE_RFCOMM: { - int32_t channel = p_data->alloc_channel.channel; - uint8_t scn = 0; - if (channel > 0) - { - if (BTM_TryAllocateSCN(channel) == false) - { - APPL_TRACE_ERROR("rfc channel:%d already in use or invalid", channel); - channel = 0; - } - } else if ((channel = BTM_AllocateSCN()) == 0) { - APPL_TRACE_ERROR("run out of rfc channels"); - channel = 0; - } - if (channel != 0) { - bta_jv_cb.scn[channel-1] = true; - scn = (uint8_t) channel; - } - if (bta_jv_cb.p_dm_cback) - bta_jv_cb.p_dm_cback(BTA_JV_GET_SCN_EVT, (tBTA_JV *)&scn, - p_data->alloc_channel.user_data); - return; +void bta_jv_get_channel_id(tBTA_JV_MSG* p_data) { + uint16_t psm = 0; + + switch (p_data->alloc_channel.type) { + case BTA_JV_CONN_TYPE_RFCOMM: { + int32_t channel = p_data->alloc_channel.channel; + uint8_t scn = 0; + if (channel > 0) { + if (BTM_TryAllocateSCN(channel) == false) { + APPL_TRACE_ERROR("rfc channel:%d already in use or invalid", channel); + channel = 0; } - case BTA_JV_CONN_TYPE_L2CAP: - psm = bta_jv_get_free_psm(); - if (psm == 0) { - psm = L2CA_AllocatePSM(); - APPL_TRACE_DEBUG("%s() returned PSM: 0x%04x", __func__, psm); - } - break; - case BTA_JV_CONN_TYPE_L2CAP_LE: - break; - default: - break; - } + } else if ((channel = BTM_AllocateSCN()) == 0) { + APPL_TRACE_ERROR("run out of rfc channels"); + channel = 0; + } + if (channel != 0) { + bta_jv_cb.scn[channel - 1] = true; + scn = (uint8_t)channel; + } + if (bta_jv_cb.p_dm_cback) + bta_jv_cb.p_dm_cback(BTA_JV_GET_SCN_EVT, (tBTA_JV*)&scn, + p_data->alloc_channel.user_data); + return; + } + case BTA_JV_CONN_TYPE_L2CAP: + psm = bta_jv_get_free_psm(); + if (psm == 0) { + psm = L2CA_AllocatePSM(); + APPL_TRACE_DEBUG("%s() returned PSM: 0x%04x", __func__, psm); + } + break; + case BTA_JV_CONN_TYPE_L2CAP_LE: + break; + default: + break; + } - if (bta_jv_cb.p_dm_cback) - bta_jv_cb.p_dm_cback(BTA_JV_GET_PSM_EVT, (tBTA_JV *)&psm, p_data->alloc_channel.user_data); + if (bta_jv_cb.p_dm_cback) + bta_jv_cb.p_dm_cback(BTA_JV_GET_PSM_EVT, (tBTA_JV*)&psm, + p_data->alloc_channel.user_data); } /******************************************************************************* @@ -783,64 +746,57 @@ void bta_jv_get_channel_id(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_free_scn(tBTA_JV_MSG *p_data) -{ - uint16_t scn = p_data->free_channel.scn; - - switch (p_data->free_channel.type) { - case BTA_JV_CONN_TYPE_RFCOMM: { - if (scn > 0 && scn <= BTA_JV_MAX_SCN && bta_jv_cb.scn[scn-1]) - { - /* this scn is used by JV */ - bta_jv_cb.scn[scn-1] = false; - BTM_FreeSCN(scn); - } - break; - } - case BTA_JV_CONN_TYPE_L2CAP: - bta_jv_set_free_psm(scn); - break; - case BTA_JV_CONN_TYPE_L2CAP_LE: - // TODO: Not yet implemented... - break; - default: - break; - } +void bta_jv_free_scn(tBTA_JV_MSG* p_data) { + uint16_t scn = p_data->free_channel.scn; + + switch (p_data->free_channel.type) { + case BTA_JV_CONN_TYPE_RFCOMM: { + if (scn > 0 && scn <= BTA_JV_MAX_SCN && bta_jv_cb.scn[scn - 1]) { + /* this scn is used by JV */ + bta_jv_cb.scn[scn - 1] = false; + BTM_FreeSCN(scn); + } + break; + } + case BTA_JV_CONN_TYPE_L2CAP: + bta_jv_set_free_psm(scn); + break; + case BTA_JV_CONN_TYPE_L2CAP_LE: + // TODO: Not yet implemented... + break; + default: + break; + } } -static inline tBT_UUID shorten_sdp_uuid(const tBT_UUID* u) -{ - static uint8_t bt_base_uuid[] = - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }; - - logu("in, uuid:", u->uu.uuid128); - APPL_TRACE_DEBUG("uuid len:%d", u->len); - if(u->len == 16) - { - if(memcmp(&u->uu.uuid128[4], &bt_base_uuid[4], 12) == 0) - { - tBT_UUID su; - memset(&su, 0, sizeof(su)); - if(u->uu.uuid128[0] == 0 && u->uu.uuid128[1] == 0) - { - su.len = 2; - uint16_t u16; - memcpy(&u16, &u->uu.uuid128[2], sizeof(u16)); - su.uu.uuid16 = ntohs(u16); - APPL_TRACE_DEBUG("shorten to 16 bits uuid: %x", su.uu.uuid16); - } - else - { - su.len = 4; - uint32_t u32; - memcpy(&u32, &u->uu.uuid128[0], sizeof(u32)); - su.uu.uuid32 = ntohl(u32); - APPL_TRACE_DEBUG("shorten to 32 bits uuid: %x", su.uu.uuid32); - } - return su; - } - } - APPL_TRACE_DEBUG("cannot shorten none-reserved 128 bits uuid"); - return *u; +static inline tBT_UUID shorten_sdp_uuid(const tBT_UUID* u) { + static uint8_t bt_base_uuid[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x5F, 0x9B, 0x34, 0xFB}; + + logu("in, uuid:", u->uu.uuid128); + APPL_TRACE_DEBUG("uuid len:%d", u->len); + if (u->len == 16) { + if (memcmp(&u->uu.uuid128[4], &bt_base_uuid[4], 12) == 0) { + tBT_UUID su; + memset(&su, 0, sizeof(su)); + if (u->uu.uuid128[0] == 0 && u->uu.uuid128[1] == 0) { + su.len = 2; + uint16_t u16; + memcpy(&u16, &u->uu.uuid128[2], sizeof(u16)); + su.uu.uuid16 = ntohs(u16); + APPL_TRACE_DEBUG("shorten to 16 bits uuid: %x", su.uu.uuid16); + } else { + su.len = 4; + uint32_t u32; + memcpy(&u32, &u->uu.uuid128[0], sizeof(u32)); + su.uu.uuid32 = ntohl(u32); + APPL_TRACE_DEBUG("shorten to 32 bits uuid: %x", su.uu.uuid32); + } + return su; + } + } + APPL_TRACE_DEBUG("cannot shorten none-reserved 128 bits uuid"); + return *u; } /******************************************************************************* @@ -852,37 +808,36 @@ static inline tBT_UUID shorten_sdp_uuid(const tBT_UUID* u) * Returns void * ******************************************************************************/ -static void bta_jv_start_discovery_cback(uint16_t result, void * user_data) -{ - tBTA_JV_STATUS status; - - APPL_TRACE_DEBUG("bta_jv_start_discovery_cback res: 0x%x", result); - - bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE; - if(bta_jv_cb.p_dm_cback) - { - tBTA_JV_DISCOVERY_COMP dcomp; - dcomp.scn = 0; - status = BTA_JV_FAILURE; - if (result == SDP_SUCCESS || result == SDP_DB_FULL) - { - tSDP_DISC_REC *p_sdp_rec = NULL; - tSDP_PROTOCOL_ELEM pe; - logu("bta_jv_cb.uuid", bta_jv_cb.uuid.uu.uuid128); - tBT_UUID su = shorten_sdp_uuid(&bta_jv_cb.uuid); - logu("shorten uuid:", su.uu.uuid128); - p_sdp_rec = SDP_FindServiceUUIDInDb(p_bta_jv_cfg->p_sdp_db, &su, p_sdp_rec); - APPL_TRACE_DEBUG("p_sdp_rec:%p", p_sdp_rec); - if (p_sdp_rec && SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - dcomp.scn = (uint8_t) pe.params[0]; - status = BTA_JV_SUCCESS; - } - } - - dcomp.status = status; - bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&dcomp, user_data); - } +static void bta_jv_start_discovery_cback(uint16_t result, void* user_data) { + tBTA_JV_STATUS status; + + APPL_TRACE_DEBUG("bta_jv_start_discovery_cback res: 0x%x", result); + + bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE; + if (bta_jv_cb.p_dm_cback) { + tBTA_JV_DISCOVERY_COMP dcomp; + dcomp.scn = 0; + status = BTA_JV_FAILURE; + if (result == SDP_SUCCESS || result == SDP_DB_FULL) { + tSDP_DISC_REC* p_sdp_rec = NULL; + tSDP_PROTOCOL_ELEM pe; + logu("bta_jv_cb.uuid", bta_jv_cb.uuid.uu.uuid128); + tBT_UUID su = shorten_sdp_uuid(&bta_jv_cb.uuid); + logu("shorten uuid:", su.uu.uuid128); + p_sdp_rec = + SDP_FindServiceUUIDInDb(p_bta_jv_cfg->p_sdp_db, &su, p_sdp_rec); + APPL_TRACE_DEBUG("p_sdp_rec:%p", p_sdp_rec); + if (p_sdp_rec && + SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + dcomp.scn = (uint8_t)pe.params[0]; + status = BTA_JV_SUCCESS; + } + } + + dcomp.status = status; + bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV*)&dcomp, + user_data); + } } /******************************************************************************* @@ -894,45 +849,47 @@ static void bta_jv_start_discovery_cback(uint16_t result, void * user_data) * Returns void * ******************************************************************************/ -void bta_jv_start_discovery(tBTA_JV_MSG *p_data) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; - APPL_TRACE_DEBUG("bta_jv_start_discovery in, sdp_active:%d", bta_jv_cb.sdp_active); - if (bta_jv_cb.sdp_active != BTA_JV_SDP_ACT_NONE) - { - /* SDP is still in progress */ - status = BTA_JV_BUSY; - if(bta_jv_cb.p_dm_cback) - bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&status, p_data->start_discovery.user_data); - return; - } - - /* init the database/set up the filter */ - APPL_TRACE_DEBUG("call SDP_InitDiscoveryDb, p_data->start_discovery.num_uuid:%d", - p_data->start_discovery.num_uuid); - SDP_InitDiscoveryDb (p_bta_jv_cfg->p_sdp_db, p_bta_jv_cfg->sdp_db_size, - p_data->start_discovery.num_uuid, p_data->start_discovery.uuid_list, 0, NULL); - - /* tell SDP to keep the raw data */ - p_bta_jv_cfg->p_sdp_db->raw_data = p_bta_jv_cfg->p_sdp_raw_data; - p_bta_jv_cfg->p_sdp_db->raw_size = p_bta_jv_cfg->sdp_raw_size; - - bta_jv_cb.p_sel_raw_data = 0; - bta_jv_cb.uuid = p_data->start_discovery.uuid_list[0]; - - bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_YES; - if (!SDP_ServiceSearchAttributeRequest2(p_data->start_discovery.bd_addr, - p_bta_jv_cfg->p_sdp_db, - bta_jv_start_discovery_cback, p_data->start_discovery.user_data)) - { - bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE; - /* failed to start SDP. report the failure right away */ - if(bta_jv_cb.p_dm_cback) - bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV *)&status, p_data->start_discovery.user_data); - } - /* - else report the result when the cback is called - */ +void bta_jv_start_discovery(tBTA_JV_MSG* p_data) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; + APPL_TRACE_DEBUG("bta_jv_start_discovery in, sdp_active:%d", + bta_jv_cb.sdp_active); + if (bta_jv_cb.sdp_active != BTA_JV_SDP_ACT_NONE) { + /* SDP is still in progress */ + status = BTA_JV_BUSY; + if (bta_jv_cb.p_dm_cback) + bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV*)&status, + p_data->start_discovery.user_data); + return; + } + + /* init the database/set up the filter */ + APPL_TRACE_DEBUG( + "call SDP_InitDiscoveryDb, p_data->start_discovery.num_uuid:%d", + p_data->start_discovery.num_uuid); + SDP_InitDiscoveryDb(p_bta_jv_cfg->p_sdp_db, p_bta_jv_cfg->sdp_db_size, + p_data->start_discovery.num_uuid, + p_data->start_discovery.uuid_list, 0, NULL); + + /* tell SDP to keep the raw data */ + p_bta_jv_cfg->p_sdp_db->raw_data = p_bta_jv_cfg->p_sdp_raw_data; + p_bta_jv_cfg->p_sdp_db->raw_size = p_bta_jv_cfg->sdp_raw_size; + + bta_jv_cb.p_sel_raw_data = 0; + bta_jv_cb.uuid = p_data->start_discovery.uuid_list[0]; + + bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_YES; + if (!SDP_ServiceSearchAttributeRequest2( + p_data->start_discovery.bd_addr, p_bta_jv_cfg->p_sdp_db, + bta_jv_start_discovery_cback, p_data->start_discovery.user_data)) { + bta_jv_cb.sdp_active = BTA_JV_SDP_ACT_NONE; + /* failed to start SDP. report the failure right away */ + if (bta_jv_cb.p_dm_cback) + bta_jv_cb.p_dm_cback(BTA_JV_DISCOVERY_COMP_EVT, (tBTA_JV*)&status, + p_data->start_discovery.user_data); + } + /* + else report the result when the cback is called + */ } /******************************************************************************* @@ -944,14 +901,15 @@ void bta_jv_start_discovery(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_create_record(tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_CREATE_RECORD *cr = &(p_data->create_record); - tBTA_JV_CREATE_RECORD evt_data; - evt_data.status = BTA_JV_SUCCESS; - if(bta_jv_cb.p_dm_cback) - //callback user immediately to create his own sdp record in stack thread context - bta_jv_cb.p_dm_cback(BTA_JV_CREATE_RECORD_EVT, (tBTA_JV *)&evt_data, cr->user_data); +void bta_jv_create_record(tBTA_JV_MSG* p_data) { + tBTA_JV_API_CREATE_RECORD* cr = &(p_data->create_record); + tBTA_JV_CREATE_RECORD evt_data; + evt_data.status = BTA_JV_SUCCESS; + if (bta_jv_cb.p_dm_cback) + // callback user immediately to create his own sdp record in stack thread + // context + bta_jv_cb.p_dm_cback(BTA_JV_CREATE_RECORD_EVT, (tBTA_JV*)&evt_data, + cr->user_data); } /******************************************************************************* @@ -964,14 +922,12 @@ void bta_jv_create_record(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_delete_record(tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_ADD_ATTRIBUTE *dr = &(p_data->add_attr); - if(dr->handle) - { - /* this is a record created by btif layer*/ - SDP_DeleteRecord(dr->handle); - } +void bta_jv_delete_record(tBTA_JV_MSG* p_data) { + tBTA_JV_API_ADD_ATTRIBUTE* dr = &(p_data->add_attr); + if (dr->handle) { + /* this is a record created by btif layer*/ + SDP_DeleteRecord(dr->handle); + } } /******************************************************************************* @@ -983,57 +939,54 @@ void bta_jv_delete_record(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_jv_l2cap_client_cback(uint16_t gap_handle, uint16_t event) -{ - tBTA_JV_L2C_CB *p_cb = &bta_jv_cb.l2c_cb[gap_handle]; - tBTA_JV evt_data; +static void bta_jv_l2cap_client_cback(uint16_t gap_handle, uint16_t event) { + tBTA_JV_L2C_CB* p_cb = &bta_jv_cb.l2c_cb[gap_handle]; + tBTA_JV evt_data; - if (gap_handle >= BTA_JV_MAX_L2C_CONN && !p_cb->p_cback) - return; + if (gap_handle >= BTA_JV_MAX_L2C_CONN && !p_cb->p_cback) return; - APPL_TRACE_DEBUG( "%s: %d evt:x%x",__func__, gap_handle, event); - evt_data.l2c_open.status = BTA_JV_SUCCESS; - evt_data.l2c_open.handle = gap_handle; + APPL_TRACE_DEBUG("%s: %d evt:x%x", __func__, gap_handle, event); + evt_data.l2c_open.status = BTA_JV_SUCCESS; + evt_data.l2c_open.handle = gap_handle; - switch (event) - { + switch (event) { case GAP_EVT_CONN_OPENED: - bdcpy(evt_data.l2c_open.rem_bda, GAP_ConnGetRemoteAddr(gap_handle)); - evt_data.l2c_open.tx_mtu = GAP_ConnGetRemMtuSize(gap_handle); - p_cb->state = BTA_JV_ST_CL_OPEN; - p_cb->p_cback(BTA_JV_L2CAP_OPEN_EVT, &evt_data, p_cb->user_data); - break; + bdcpy(evt_data.l2c_open.rem_bda, GAP_ConnGetRemoteAddr(gap_handle)); + evt_data.l2c_open.tx_mtu = GAP_ConnGetRemMtuSize(gap_handle); + p_cb->state = BTA_JV_ST_CL_OPEN; + p_cb->p_cback(BTA_JV_L2CAP_OPEN_EVT, &evt_data, p_cb->user_data); + break; case GAP_EVT_CONN_CLOSED: - p_cb->state = BTA_JV_ST_NONE; - bta_jv_free_sec_id(&p_cb->sec_id); - evt_data.l2c_close.async = true; - p_cb->p_cback(BTA_JV_L2CAP_CLOSE_EVT, &evt_data, p_cb->user_data); - p_cb->p_cback = NULL; - break; + p_cb->state = BTA_JV_ST_NONE; + bta_jv_free_sec_id(&p_cb->sec_id); + evt_data.l2c_close.async = true; + p_cb->p_cback(BTA_JV_L2CAP_CLOSE_EVT, &evt_data, p_cb->user_data); + p_cb->p_cback = NULL; + break; case GAP_EVT_CONN_DATA_AVAIL: - evt_data.data_ind.handle = gap_handle; - /* Reset idle timer to avoid requesting sniff mode while receiving data */ - bta_jv_pm_conn_busy(p_cb->p_pm_cb); - p_cb->p_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data, p_cb->user_data); - bta_jv_pm_conn_idle(p_cb->p_pm_cb); - break; + evt_data.data_ind.handle = gap_handle; + /* Reset idle timer to avoid requesting sniff mode while receiving data */ + bta_jv_pm_conn_busy(p_cb->p_pm_cb); + p_cb->p_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data, p_cb->user_data); + bta_jv_pm_conn_idle(p_cb->p_pm_cb); + break; case GAP_EVT_TX_EMPTY: - bta_jv_pm_conn_idle(p_cb->p_pm_cb); - break; + bta_jv_pm_conn_idle(p_cb->p_pm_cb); + break; case GAP_EVT_CONN_CONGESTED: case GAP_EVT_CONN_UNCONGESTED: - p_cb->cong = (event == GAP_EVT_CONN_CONGESTED) ? true : false; - evt_data.l2c_cong.cong = p_cb->cong; - p_cb->p_cback(BTA_JV_L2CAP_CONG_EVT, &evt_data, p_cb->user_data); - break; + p_cb->cong = (event == GAP_EVT_CONN_CONGESTED) ? true : false; + evt_data.l2c_cong.cong = p_cb->cong; + p_cb->p_cback(BTA_JV_L2CAP_CONG_EVT, &evt_data, p_cb->user_data); + break; default: - break; - } + break; + } } /******************************************************************************* @@ -1045,79 +998,73 @@ static void bta_jv_l2cap_client_cback(uint16_t gap_handle, uint16_t event) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_connect(tBTA_JV_MSG *p_data) -{ - tBTA_JV_L2C_CB *p_cb; - tBTA_JV_L2CAP_CL_INIT evt_data; - uint16_t handle=GAP_INVALID_HANDLE; - uint8_t sec_id; - tL2CAP_CFG_INFO cfg; - tBTA_JV_API_L2CAP_CONNECT *cc = &(p_data->l2cap_connect); - uint8_t chan_mode_mask = GAP_FCR_CHAN_OPT_BASIC; - tL2CAP_ERTM_INFO *ertm_info = NULL; - - memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); - - if (cc->has_cfg == true) - { - cfg = cc->cfg; - if (cfg.fcr_present && cfg.fcr.mode == L2CAP_FCR_ERTM_MODE) { - chan_mode_mask = GAP_FCR_CHAN_OPT_ERTM; - } - } - - if (cc->has_ertm_info == true) - { - ertm_info = &(cc->ertm_info); - } - - /* We need to use this value for MTU to be able to handle cases where cfg is not set in req. */ - cfg.mtu_present = true; - cfg.mtu = cc->rx_mtu; - - /* TODO: DM role manager - L2CA_SetDesireRole(cc->role); - */ - - sec_id = bta_jv_alloc_sec_id(); - evt_data.sec_id = sec_id; - evt_data.status = BTA_JV_FAILURE; - - if (sec_id) - { - /* PSM checking is not required for LE COC */ - if ((cc->type != BTA_JV_CONN_TYPE_L2CAP) || (bta_jv_check_psm(cc->remote_psm))) /* allowed */ - { - if ((handle = GAP_ConnOpen("", sec_id, 0, cc->peer_bd_addr, cc->remote_psm, - &cfg, ertm_info, cc->sec_mask, chan_mode_mask, - bta_jv_l2cap_client_cback, cc->type)) != GAP_INVALID_HANDLE ) - { - evt_data.status = BTA_JV_SUCCESS; - } - } - } - - if (evt_data.status == BTA_JV_SUCCESS) - { - p_cb = &bta_jv_cb.l2c_cb[handle]; - p_cb->handle = handle; - p_cb->p_cback = cc->p_cback; - p_cb->user_data = cc->user_data; - p_cb->psm = 0; /* not a server */ - p_cb->sec_id = sec_id; - p_cb->state = BTA_JV_ST_CL_OPENING; - } - else +void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data) { + tBTA_JV_L2C_CB* p_cb; + tBTA_JV_L2CAP_CL_INIT evt_data; + uint16_t handle = GAP_INVALID_HANDLE; + uint8_t sec_id; + tL2CAP_CFG_INFO cfg; + tBTA_JV_API_L2CAP_CONNECT* cc = &(p_data->l2cap_connect); + uint8_t chan_mode_mask = GAP_FCR_CHAN_OPT_BASIC; + tL2CAP_ERTM_INFO* ertm_info = NULL; + + memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); + + if (cc->has_cfg == true) { + cfg = cc->cfg; + if (cfg.fcr_present && cfg.fcr.mode == L2CAP_FCR_ERTM_MODE) { + chan_mode_mask = GAP_FCR_CHAN_OPT_ERTM; + } + } + + if (cc->has_ertm_info == true) { + ertm_info = &(cc->ertm_info); + } + + /* We need to use this value for MTU to be able to handle cases where cfg is + * not set in req. */ + cfg.mtu_present = true; + cfg.mtu = cc->rx_mtu; + + /* TODO: DM role manager + L2CA_SetDesireRole(cc->role); + */ + + sec_id = bta_jv_alloc_sec_id(); + evt_data.sec_id = sec_id; + evt_data.status = BTA_JV_FAILURE; + + if (sec_id) { + /* PSM checking is not required for LE COC */ + if ((cc->type != BTA_JV_CONN_TYPE_L2CAP) || + (bta_jv_check_psm(cc->remote_psm))) /* allowed */ { - bta_jv_free_sec_id(&sec_id); - } - - evt_data.handle = handle; - if(cc->p_cback) - cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, (tBTA_JV *)&evt_data, cc->user_data); + if ((handle = GAP_ConnOpen("", sec_id, 0, cc->peer_bd_addr, + cc->remote_psm, &cfg, ertm_info, cc->sec_mask, + chan_mode_mask, bta_jv_l2cap_client_cback, + cc->type)) != GAP_INVALID_HANDLE) { + evt_data.status = BTA_JV_SUCCESS; + } + } + } + + if (evt_data.status == BTA_JV_SUCCESS) { + p_cb = &bta_jv_cb.l2c_cb[handle]; + p_cb->handle = handle; + p_cb->p_cback = cc->p_cback; + p_cb->user_data = cc->user_data; + p_cb->psm = 0; /* not a server */ + p_cb->sec_id = sec_id; + p_cb->state = BTA_JV_ST_CL_OPENING; + } else { + bta_jv_free_sec_id(&sec_id); + } + + evt_data.handle = handle; + if (cc->p_cback) + cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, (tBTA_JV*)&evt_data, cc->user_data); } - /******************************************************************************* * * Function bta_jv_l2cap_close @@ -1127,19 +1074,17 @@ void bta_jv_l2cap_connect(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_close(tBTA_JV_MSG *p_data) -{ - tBTA_JV_L2CAP_CLOSE evt_data; - tBTA_JV_API_L2CAP_CLOSE *cc = &(p_data->l2cap_close); - tBTA_JV_L2CAP_CBACK *p_cback = cc->p_cb->p_cback; - void *user_data = cc->p_cb->user_data; - - evt_data.handle = cc->handle; - evt_data.status = bta_jv_free_l2c_cb(cc->p_cb); - evt_data.async = false; - - if (p_cback) - p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV *)&evt_data, user_data); +void bta_jv_l2cap_close(tBTA_JV_MSG* p_data) { + tBTA_JV_L2CAP_CLOSE evt_data; + tBTA_JV_API_L2CAP_CLOSE* cc = &(p_data->l2cap_close); + tBTA_JV_L2CAP_CBACK* p_cback = cc->p_cb->p_cback; + void* user_data = cc->p_cb->user_data; + + evt_data.handle = cc->handle; + evt_data.status = bta_jv_free_l2c_cb(cc->p_cb); + evt_data.async = false; + + if (p_cback) p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV*)&evt_data, user_data); } /******************************************************************************* @@ -1151,60 +1096,57 @@ void bta_jv_l2cap_close(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_jv_l2cap_server_cback(uint16_t gap_handle, uint16_t event) -{ - tBTA_JV_L2C_CB *p_cb = &bta_jv_cb.l2c_cb[gap_handle]; - tBTA_JV evt_data; - tBTA_JV_L2CAP_CBACK *p_cback; - void *user_data; - - if (gap_handle >= BTA_JV_MAX_L2C_CONN && !p_cb->p_cback) - return; +static void bta_jv_l2cap_server_cback(uint16_t gap_handle, uint16_t event) { + tBTA_JV_L2C_CB* p_cb = &bta_jv_cb.l2c_cb[gap_handle]; + tBTA_JV evt_data; + tBTA_JV_L2CAP_CBACK* p_cback; + void* user_data; - APPL_TRACE_DEBUG( "%s: %d evt:x%x", __func__, gap_handle, event); - evt_data.l2c_open.status = BTA_JV_SUCCESS; - evt_data.l2c_open.handle = gap_handle; + if (gap_handle >= BTA_JV_MAX_L2C_CONN && !p_cb->p_cback) return; - switch (event) - { + APPL_TRACE_DEBUG("%s: %d evt:x%x", __func__, gap_handle, event); + evt_data.l2c_open.status = BTA_JV_SUCCESS; + evt_data.l2c_open.handle = gap_handle; + + switch (event) { case GAP_EVT_CONN_OPENED: - bdcpy(evt_data.l2c_open.rem_bda, GAP_ConnGetRemoteAddr(gap_handle)); - evt_data.l2c_open.tx_mtu = GAP_ConnGetRemMtuSize(gap_handle); - p_cb->state = BTA_JV_ST_SR_OPEN; - p_cb->p_cback(BTA_JV_L2CAP_OPEN_EVT, &evt_data, p_cb->user_data); - break; + bdcpy(evt_data.l2c_open.rem_bda, GAP_ConnGetRemoteAddr(gap_handle)); + evt_data.l2c_open.tx_mtu = GAP_ConnGetRemMtuSize(gap_handle); + p_cb->state = BTA_JV_ST_SR_OPEN; + p_cb->p_cback(BTA_JV_L2CAP_OPEN_EVT, &evt_data, p_cb->user_data); + break; case GAP_EVT_CONN_CLOSED: - evt_data.l2c_close.async = true; - evt_data.l2c_close.handle = p_cb->handle; - p_cback = p_cb->p_cback; - user_data = p_cb->user_data; - evt_data.l2c_close.status = bta_jv_free_l2c_cb(p_cb); - p_cback(BTA_JV_L2CAP_CLOSE_EVT, &evt_data, user_data); - break; + evt_data.l2c_close.async = true; + evt_data.l2c_close.handle = p_cb->handle; + p_cback = p_cb->p_cback; + user_data = p_cb->user_data; + evt_data.l2c_close.status = bta_jv_free_l2c_cb(p_cb); + p_cback(BTA_JV_L2CAP_CLOSE_EVT, &evt_data, user_data); + break; case GAP_EVT_CONN_DATA_AVAIL: - evt_data.data_ind.handle = gap_handle; - /* Reset idle timer to avoid requesting sniff mode while receiving data */ - bta_jv_pm_conn_busy(p_cb->p_pm_cb); - p_cb->p_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data, p_cb->user_data); - bta_jv_pm_conn_idle(p_cb->p_pm_cb); - break; + evt_data.data_ind.handle = gap_handle; + /* Reset idle timer to avoid requesting sniff mode while receiving data */ + bta_jv_pm_conn_busy(p_cb->p_pm_cb); + p_cb->p_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data, p_cb->user_data); + bta_jv_pm_conn_idle(p_cb->p_pm_cb); + break; case GAP_EVT_TX_EMPTY: - bta_jv_pm_conn_idle(p_cb->p_pm_cb); - break; + bta_jv_pm_conn_idle(p_cb->p_pm_cb); + break; case GAP_EVT_CONN_CONGESTED: case GAP_EVT_CONN_UNCONGESTED: - p_cb->cong = (event == GAP_EVT_CONN_CONGESTED) ? true : false; - evt_data.l2c_cong.cong = p_cb->cong; - p_cb->p_cback(BTA_JV_L2CAP_CONG_EVT, &evt_data, p_cb->user_data); - break; + p_cb->cong = (event == GAP_EVT_CONN_CONGESTED) ? true : false; + evt_data.l2c_cong.cong = p_cb->cong; + p_cb->p_cback(BTA_JV_L2CAP_CONG_EVT, &evt_data, p_cb->user_data); + break; default: - break; - } + break; + } } /******************************************************************************* @@ -1216,71 +1158,67 @@ static void bta_jv_l2cap_server_cback(uint16_t gap_handle, uint16_t event) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_start_server(tBTA_JV_MSG *p_data) -{ - tBTA_JV_L2C_CB *p_cb; - uint8_t sec_id; - uint16_t handle; - tL2CAP_CFG_INFO cfg; - tBTA_JV_L2CAP_START evt_data; - tBTA_JV_API_L2CAP_SERVER *ls = &(p_data->l2cap_server); - uint8_t chan_mode_mask = GAP_FCR_CHAN_OPT_BASIC; - tL2CAP_ERTM_INFO *ertm_info = NULL; - - memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); - - if (ls->has_cfg == true) { - cfg = ls->cfg; - if (cfg.fcr_present && cfg.fcr.mode == L2CAP_FCR_ERTM_MODE) { - chan_mode_mask = GAP_FCR_CHAN_OPT_ERTM; - } - } - - if (ls->has_ertm_info == true) { - ertm_info = &(ls->ertm_info); - } - - //FIX: MTU=0 means not present - if (ls->rx_mtu >0) - { - cfg.mtu_present = true; - cfg.mtu = ls->rx_mtu; - } - else - { - cfg.mtu_present = false; - cfg.mtu = 0; - } - - /* TODO DM role manager - L2CA_SetDesireRole(ls->role); - */ - - sec_id = bta_jv_alloc_sec_id(); - /* PSM checking is not required for LE COC */ - if (0 == sec_id || ((ls->type == BTA_JV_CONN_TYPE_L2CAP) && (false == bta_jv_check_psm(ls->local_psm))) || - (handle = GAP_ConnOpen("JV L2CAP", sec_id, 1, 0, ls->local_psm, &cfg, ertm_info, - ls->sec_mask, chan_mode_mask, bta_jv_l2cap_server_cback, ls->type)) == GAP_INVALID_HANDLE) - { - bta_jv_free_sec_id(&sec_id); - evt_data.status = BTA_JV_FAILURE; - } - else - { - p_cb = &bta_jv_cb.l2c_cb[handle]; - evt_data.status = BTA_JV_SUCCESS; - evt_data.handle = handle; - evt_data.sec_id = sec_id; - p_cb->p_cback = ls->p_cback; - p_cb->user_data = ls->user_data; - p_cb->handle = handle; - p_cb->sec_id = sec_id; - p_cb->state = BTA_JV_ST_SR_LISTEN; - p_cb->psm = ls->local_psm; - } - - if(ls->p_cback) - ls->p_cback(BTA_JV_L2CAP_START_EVT, (tBTA_JV *)&evt_data, ls->user_data); +void bta_jv_l2cap_start_server(tBTA_JV_MSG* p_data) { + tBTA_JV_L2C_CB* p_cb; + uint8_t sec_id; + uint16_t handle; + tL2CAP_CFG_INFO cfg; + tBTA_JV_L2CAP_START evt_data; + tBTA_JV_API_L2CAP_SERVER* ls = &(p_data->l2cap_server); + uint8_t chan_mode_mask = GAP_FCR_CHAN_OPT_BASIC; + tL2CAP_ERTM_INFO* ertm_info = NULL; + + memset(&cfg, 0, sizeof(tL2CAP_CFG_INFO)); + + if (ls->has_cfg == true) { + cfg = ls->cfg; + if (cfg.fcr_present && cfg.fcr.mode == L2CAP_FCR_ERTM_MODE) { + chan_mode_mask = GAP_FCR_CHAN_OPT_ERTM; + } + } + + if (ls->has_ertm_info == true) { + ertm_info = &(ls->ertm_info); + } + + // FIX: MTU=0 means not present + if (ls->rx_mtu > 0) { + cfg.mtu_present = true; + cfg.mtu = ls->rx_mtu; + } else { + cfg.mtu_present = false; + cfg.mtu = 0; + } + + /* TODO DM role manager + L2CA_SetDesireRole(ls->role); + */ + + sec_id = bta_jv_alloc_sec_id(); + /* PSM checking is not required for LE COC */ + if (0 == sec_id || ((ls->type == BTA_JV_CONN_TYPE_L2CAP) && + (false == bta_jv_check_psm(ls->local_psm))) || + (handle = GAP_ConnOpen("JV L2CAP", sec_id, 1, 0, ls->local_psm, &cfg, + ertm_info, ls->sec_mask, chan_mode_mask, + bta_jv_l2cap_server_cback, ls->type)) == + GAP_INVALID_HANDLE) { + bta_jv_free_sec_id(&sec_id); + evt_data.status = BTA_JV_FAILURE; + } else { + p_cb = &bta_jv_cb.l2c_cb[handle]; + evt_data.status = BTA_JV_SUCCESS; + evt_data.handle = handle; + evt_data.sec_id = sec_id; + p_cb->p_cback = ls->p_cback; + p_cb->user_data = ls->user_data; + p_cb->handle = handle; + p_cb->sec_id = sec_id; + p_cb->state = BTA_JV_ST_SR_LISTEN; + p_cb->psm = ls->local_psm; + } + + if (ls->p_cback) + ls->p_cback(BTA_JV_L2CAP_START_EVT, (tBTA_JV*)&evt_data, ls->user_data); } /******************************************************************************* @@ -1292,32 +1230,27 @@ void bta_jv_l2cap_start_server(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_stop_server(tBTA_JV_MSG *p_data) -{ - tBTA_JV_L2C_CB *p_cb; - tBTA_JV_L2CAP_CLOSE evt_data; - tBTA_JV_API_L2CAP_SERVER *ls = &(p_data->l2cap_server); - tBTA_JV_L2CAP_CBACK *p_cback; - void *user_data; - for (int i = 0; i < BTA_JV_MAX_L2C_CONN; i++) - { - if (bta_jv_cb.l2c_cb[i].psm == ls->local_psm) - { - p_cb = &bta_jv_cb.l2c_cb[i]; - p_cback = p_cb->p_cback; - user_data = p_cb->user_data; - evt_data.handle = p_cb->handle; - evt_data.status = bta_jv_free_l2c_cb(p_cb); - evt_data.async = false; - if(p_cback) - p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV *)&evt_data, user_data); - break; - } - } +void bta_jv_l2cap_stop_server(tBTA_JV_MSG* p_data) { + tBTA_JV_L2C_CB* p_cb; + tBTA_JV_L2CAP_CLOSE evt_data; + tBTA_JV_API_L2CAP_SERVER* ls = &(p_data->l2cap_server); + tBTA_JV_L2CAP_CBACK* p_cback; + void* user_data; + for (int i = 0; i < BTA_JV_MAX_L2C_CONN; i++) { + if (bta_jv_cb.l2c_cb[i].psm == ls->local_psm) { + p_cb = &bta_jv_cb.l2c_cb[i]; + p_cback = p_cb->p_cback; + user_data = p_cb->user_data; + evt_data.handle = p_cb->handle; + evt_data.status = bta_jv_free_l2c_cb(p_cb); + evt_data.async = false; + if (p_cback) + p_cback(BTA_JV_L2CAP_CLOSE_EVT, (tBTA_JV*)&evt_data, user_data); + break; + } + } } - - /******************************************************************************* * * Function bta_jv_l2cap_read @@ -1327,26 +1260,24 @@ void bta_jv_l2cap_stop_server(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_read(tBTA_JV_MSG *p_data) -{ - tBTA_JV_L2CAP_READ evt_data; - tBTA_JV_API_L2CAP_READ *rc = &(p_data->l2cap_read); - - evt_data.status = BTA_JV_FAILURE; - evt_data.handle = rc->handle; - evt_data.req_id = rc->req_id; - evt_data.p_data = rc->p_data; - evt_data.len = 0; - - if (BT_PASS == GAP_ConnReadData(rc->handle, rc->p_data, rc->len, &evt_data.len)) - { - evt_data.status = BTA_JV_SUCCESS; - } +void bta_jv_l2cap_read(tBTA_JV_MSG* p_data) { + tBTA_JV_L2CAP_READ evt_data; + tBTA_JV_API_L2CAP_READ* rc = &(p_data->l2cap_read); + + evt_data.status = BTA_JV_FAILURE; + evt_data.handle = rc->handle; + evt_data.req_id = rc->req_id; + evt_data.p_data = rc->p_data; + evt_data.len = 0; + + if (BT_PASS == + GAP_ConnReadData(rc->handle, rc->p_data, rc->len, &evt_data.len)) { + evt_data.status = BTA_JV_SUCCESS; + } - rc->p_cback(BTA_JV_L2CAP_READ_EVT, (tBTA_JV *)&evt_data, rc->user_data); + rc->p_cback(BTA_JV_L2CAP_READ_EVT, (tBTA_JV*)&evt_data, rc->user_data); } - /******************************************************************************* * * Function bta_jv_l2cap_write @@ -1356,42 +1287,54 @@ void bta_jv_l2cap_read(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_write(tBTA_JV_MSG *p_data) -{ - tBTA_JV_L2CAP_WRITE evt_data; - tBTA_JV_API_L2CAP_WRITE *ls = &(p_data->l2cap_write); - - /* As we check this callback exists before the tBTA_JV_API_L2CAP_WRITE can be send through the - * API this check should not be needed. - * But the API is not designed to be used (safely at least) in a multi-threaded scheduler, hence - * if the peer device disconnects the l2cap link after the API is called, but before this - * message is handled, the ->p_cback will be cleared at this point. At first glanch this seems - * highly unlikely, but for all obex-profiles with two channels connected - e.g. MAP, this - * happens around 1 of 4 disconnects, as a disconnect on the server channel causes a disconnect - * to be send on the client (notification) channel, but at the peer typically disconnects both - * the OBEX disconnect request crosses the incoming l2cap disconnect. - * If p_cback is cleared, we simply discard the data. - * RISK: The caller must handle any cleanup based on another signal than BTA_JV_L2CAP_WRITE_EVT, - * which is typically not possible, as the pointer to the allocated buffer is stored - * in this message, and can therefore not be freed, hence we have a mem-leak-by-design.*/ - if (ls->p_cb->p_cback != NULL) { - evt_data.status = BTA_JV_FAILURE; - evt_data.handle = ls->handle; - evt_data.req_id = ls->req_id; - evt_data.cong = ls->p_cb->cong; - evt_data.len = 0; - bta_jv_pm_conn_busy(ls->p_cb->p_pm_cb); - if (!evt_data.cong && - BT_PASS == GAP_ConnWriteData(ls->handle, ls->p_data, ls->len, &evt_data.len)) - { - evt_data.status = BTA_JV_SUCCESS; - } - ls->p_cb->p_cback(BTA_JV_L2CAP_WRITE_EVT, (tBTA_JV *)&evt_data, ls->user_data); - } else { - /* As this pointer is checked in the API function, this occurs only when the channel is - * disconnected after the API function is called, but before the message is handled. */ - APPL_TRACE_ERROR("%s() ls->p_cb->p_cback == NULL", __func__); - } +void bta_jv_l2cap_write(tBTA_JV_MSG* p_data) { + tBTA_JV_L2CAP_WRITE evt_data; + tBTA_JV_API_L2CAP_WRITE* ls = &(p_data->l2cap_write); + + /* As we check this callback exists before the tBTA_JV_API_L2CAP_WRITE can be + * send through the + * API this check should not be needed. + * But the API is not designed to be used (safely at least) in a + * multi-threaded scheduler, hence + * if the peer device disconnects the l2cap link after the API is called, but + * before this + * message is handled, the ->p_cback will be cleared at this point. At first + * glanch this seems + * highly unlikely, but for all obex-profiles with two channels connected - + * e.g. MAP, this + * happens around 1 of 4 disconnects, as a disconnect on the server channel + * causes a disconnect + * to be send on the client (notification) channel, but at the peer typically + * disconnects both + * the OBEX disconnect request crosses the incoming l2cap disconnect. + * If p_cback is cleared, we simply discard the data. + * RISK: The caller must handle any cleanup based on another signal than + * BTA_JV_L2CAP_WRITE_EVT, + * which is typically not possible, as the pointer to the allocated + * buffer is stored + * in this message, and can therefore not be freed, hence we have a + * mem-leak-by-design.*/ + if (ls->p_cb->p_cback != NULL) { + evt_data.status = BTA_JV_FAILURE; + evt_data.handle = ls->handle; + evt_data.req_id = ls->req_id; + evt_data.cong = ls->p_cb->cong; + evt_data.len = 0; + bta_jv_pm_conn_busy(ls->p_cb->p_pm_cb); + if (!evt_data.cong && + BT_PASS == + GAP_ConnWriteData(ls->handle, ls->p_data, ls->len, &evt_data.len)) { + evt_data.status = BTA_JV_SUCCESS; + } + ls->p_cb->p_cback(BTA_JV_L2CAP_WRITE_EVT, (tBTA_JV*)&evt_data, + ls->user_data); + } else { + /* As this pointer is checked in the API function, this occurs only when the + * channel is + * disconnected after the API function is called, but before the message is + * handled. */ + APPL_TRACE_ERROR("%s() ls->p_cb->p_cback == NULL", __func__); + } } /******************************************************************************* @@ -1403,26 +1346,25 @@ void bta_jv_l2cap_write(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_write_fixed(tBTA_JV_MSG *p_data) -{ - tBTA_JV_L2CAP_WRITE_FIXED evt_data; - tBTA_JV_API_L2CAP_WRITE_FIXED *ls = &(p_data->l2cap_write_fixed); - BT_HDR *msg = (BT_HDR *)osi_malloc(sizeof(BT_HDR) + ls->len + L2CAP_MIN_OFFSET); +void bta_jv_l2cap_write_fixed(tBTA_JV_MSG* p_data) { + tBTA_JV_L2CAP_WRITE_FIXED evt_data; + tBTA_JV_API_L2CAP_WRITE_FIXED* ls = &(p_data->l2cap_write_fixed); + BT_HDR* msg = + (BT_HDR*)osi_malloc(sizeof(BT_HDR) + ls->len + L2CAP_MIN_OFFSET); - evt_data.status = BTA_JV_FAILURE; - evt_data.channel = ls->channel; - memcpy(evt_data.addr, ls->addr, sizeof(evt_data.addr)); - evt_data.req_id = ls->req_id; - evt_data.len = 0; + evt_data.status = BTA_JV_FAILURE; + evt_data.channel = ls->channel; + memcpy(evt_data.addr, ls->addr, sizeof(evt_data.addr)); + evt_data.req_id = ls->req_id; + evt_data.len = 0; + memcpy(((uint8_t*)(msg + 1)) + L2CAP_MIN_OFFSET, ls->p_data, ls->len); + msg->len = ls->len; + msg->offset = L2CAP_MIN_OFFSET; - memcpy(((uint8_t*)(msg + 1)) + L2CAP_MIN_OFFSET, ls->p_data, ls->len); - msg->len = ls->len; - msg->offset = L2CAP_MIN_OFFSET; + L2CA_SendFixedChnlData(ls->channel, ls->addr, msg); - L2CA_SendFixedChnlData(ls->channel, ls->addr, msg); - - ls->p_cback(BTA_JV_L2CAP_WRITE_FIXED_EVT, (tBTA_JV *)&evt_data, ls->user_data); + ls->p_cback(BTA_JV_L2CAP_WRITE_FIXED_EVT, (tBTA_JV*)&evt_data, ls->user_data); } /******************************************************************************* @@ -1435,27 +1377,26 @@ void bta_jv_l2cap_write_fixed(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -static int bta_jv_port_data_co_cback(uint16_t port_handle, uint8_t *buf, uint16_t len, int type) -{ - tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); - tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); - APPL_TRACE_DEBUG("%s, p_cb:%p, p_pcb:%p, len:%d, type:%d", __func__, p_cb, p_pcb, len, type); - if (p_pcb != NULL) - { - switch(type) - { - case DATA_CO_CALLBACK_TYPE_INCOMING: - return bta_co_rfc_data_incoming(p_pcb->user_data, (BT_HDR*)buf); - case DATA_CO_CALLBACK_TYPE_OUTGOING_SIZE: - return bta_co_rfc_data_outgoing_size(p_pcb->user_data, (int*)buf); - case DATA_CO_CALLBACK_TYPE_OUTGOING: - return bta_co_rfc_data_outgoing(p_pcb->user_data, buf, len); - default: - APPL_TRACE_ERROR("unknown callout type:%d", type); - break; - } +static int bta_jv_port_data_co_cback(uint16_t port_handle, uint8_t* buf, + uint16_t len, int type) { + tBTA_JV_RFC_CB* p_cb = bta_jv_rfc_port_to_cb(port_handle); + tBTA_JV_PCB* p_pcb = bta_jv_rfc_port_to_pcb(port_handle); + APPL_TRACE_DEBUG("%s, p_cb:%p, p_pcb:%p, len:%d, type:%d", __func__, p_cb, + p_pcb, len, type); + if (p_pcb != NULL) { + switch (type) { + case DATA_CO_CALLBACK_TYPE_INCOMING: + return bta_co_rfc_data_incoming(p_pcb->user_data, (BT_HDR*)buf); + case DATA_CO_CALLBACK_TYPE_OUTGOING_SIZE: + return bta_co_rfc_data_outgoing_size(p_pcb->user_data, (int*)buf); + case DATA_CO_CALLBACK_TYPE_OUTGOING: + return bta_co_rfc_data_outgoing(p_pcb->user_data, buf, len); + default: + APPL_TRACE_ERROR("unknown callout type:%d", type); + break; } - return 0; + } + return 0; } /******************************************************************************* @@ -1468,49 +1409,43 @@ static int bta_jv_port_data_co_cback(uint16_t port_handle, uint8_t *buf, uint16_ * Returns void * ******************************************************************************/ -static void bta_jv_port_mgmt_cl_cback(uint32_t code, uint16_t port_handle) -{ - tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); - tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); - tBTA_JV evt_data; - BD_ADDR rem_bda; - uint16_t lcid; - tBTA_JV_RFCOMM_CBACK *p_cback; /* the callback function */ - - APPL_TRACE_DEBUG( "bta_jv_port_mgmt_cl_cback:code:%d, port_handle%d", code, port_handle); - if(NULL == p_cb || NULL == p_cb->p_cback) - return; - - APPL_TRACE_DEBUG( "bta_jv_port_mgmt_cl_cback code=%d port_handle:%d handle:%d", - code, port_handle, p_cb->handle); - - PORT_CheckConnection(port_handle, rem_bda, &lcid); - - if(code == PORT_SUCCESS) - { - evt_data.rfc_open.handle = p_cb->handle; - evt_data.rfc_open.status = BTA_JV_SUCCESS; - bdcpy(evt_data.rfc_open.rem_bda, rem_bda); - p_pcb->state = BTA_JV_ST_CL_OPEN; - p_cb->p_cback(BTA_JV_RFCOMM_OPEN_EVT, &evt_data, p_pcb->user_data); - } - else - { - evt_data.rfc_close.handle = p_cb->handle; - evt_data.rfc_close.status = BTA_JV_FAILURE; - evt_data.rfc_close.port_status = code; - evt_data.rfc_close.async = true; - if (p_pcb->state == BTA_JV_ST_CL_CLOSING) - { - evt_data.rfc_close.async = false; - } - //p_pcb->state = BTA_JV_ST_NONE; - //p_pcb->cong = false; - p_cback = p_cb->p_cback; - p_cback(BTA_JV_RFCOMM_CLOSE_EVT, &evt_data, p_pcb->user_data); - //bta_jv_free_rfc_cb(p_cb, p_pcb); - } - +static void bta_jv_port_mgmt_cl_cback(uint32_t code, uint16_t port_handle) { + tBTA_JV_RFC_CB* p_cb = bta_jv_rfc_port_to_cb(port_handle); + tBTA_JV_PCB* p_pcb = bta_jv_rfc_port_to_pcb(port_handle); + tBTA_JV evt_data; + BD_ADDR rem_bda; + uint16_t lcid; + tBTA_JV_RFCOMM_CBACK* p_cback; /* the callback function */ + + APPL_TRACE_DEBUG("bta_jv_port_mgmt_cl_cback:code:%d, port_handle%d", code, + port_handle); + if (NULL == p_cb || NULL == p_cb->p_cback) return; + + APPL_TRACE_DEBUG("bta_jv_port_mgmt_cl_cback code=%d port_handle:%d handle:%d", + code, port_handle, p_cb->handle); + + PORT_CheckConnection(port_handle, rem_bda, &lcid); + + if (code == PORT_SUCCESS) { + evt_data.rfc_open.handle = p_cb->handle; + evt_data.rfc_open.status = BTA_JV_SUCCESS; + bdcpy(evt_data.rfc_open.rem_bda, rem_bda); + p_pcb->state = BTA_JV_ST_CL_OPEN; + p_cb->p_cback(BTA_JV_RFCOMM_OPEN_EVT, &evt_data, p_pcb->user_data); + } else { + evt_data.rfc_close.handle = p_cb->handle; + evt_data.rfc_close.status = BTA_JV_FAILURE; + evt_data.rfc_close.port_status = code; + evt_data.rfc_close.async = true; + if (p_pcb->state == BTA_JV_ST_CL_CLOSING) { + evt_data.rfc_close.async = false; + } + // p_pcb->state = BTA_JV_ST_NONE; + // p_pcb->cong = false; + p_cback = p_cb->p_cback; + p_cback(BTA_JV_RFCOMM_CLOSE_EVT, &evt_data, p_pcb->user_data); + // bta_jv_free_rfc_cb(p_cb, p_pcb); + } } /******************************************************************************* @@ -1522,37 +1457,33 @@ static void bta_jv_port_mgmt_cl_cback(uint32_t code, uint16_t port_handle) * Returns void * ******************************************************************************/ -static void bta_jv_port_event_cl_cback(uint32_t code, uint16_t port_handle) -{ - tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); - tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); - tBTA_JV evt_data; - - APPL_TRACE_DEBUG( "bta_jv_port_event_cl_cback:%d", port_handle); - if (NULL == p_cb || NULL == p_cb->p_cback) - return; - - APPL_TRACE_DEBUG( "bta_jv_port_event_cl_cback code=x%x port_handle:%d handle:%d", - code, port_handle, p_cb->handle); - if (code & PORT_EV_RXCHAR) - { - evt_data.data_ind.handle = p_cb->handle; - p_cb->p_cback(BTA_JV_RFCOMM_DATA_IND_EVT, &evt_data, p_pcb->user_data); - } - - if (code & PORT_EV_FC) - { - p_pcb->cong = (code & PORT_EV_FCS) ? false : true; - evt_data.rfc_cong.cong = p_pcb->cong; - evt_data.rfc_cong.handle = p_cb->handle; - evt_data.rfc_cong.status = BTA_JV_SUCCESS; - p_cb->p_cback(BTA_JV_RFCOMM_CONG_EVT, &evt_data, p_pcb->user_data); - } - - if (code & PORT_EV_TXEMPTY) - { - bta_jv_pm_conn_idle(p_pcb->p_pm_cb); - } +static void bta_jv_port_event_cl_cback(uint32_t code, uint16_t port_handle) { + tBTA_JV_RFC_CB* p_cb = bta_jv_rfc_port_to_cb(port_handle); + tBTA_JV_PCB* p_pcb = bta_jv_rfc_port_to_pcb(port_handle); + tBTA_JV evt_data; + + APPL_TRACE_DEBUG("bta_jv_port_event_cl_cback:%d", port_handle); + if (NULL == p_cb || NULL == p_cb->p_cback) return; + + APPL_TRACE_DEBUG( + "bta_jv_port_event_cl_cback code=x%x port_handle:%d handle:%d", code, + port_handle, p_cb->handle); + if (code & PORT_EV_RXCHAR) { + evt_data.data_ind.handle = p_cb->handle; + p_cb->p_cback(BTA_JV_RFCOMM_DATA_IND_EVT, &evt_data, p_pcb->user_data); + } + + if (code & PORT_EV_FC) { + p_pcb->cong = (code & PORT_EV_FCS) ? false : true; + evt_data.rfc_cong.cong = p_pcb->cong; + evt_data.rfc_cong.handle = p_cb->handle; + evt_data.rfc_cong.status = BTA_JV_SUCCESS; + p_cb->p_cback(BTA_JV_RFCOMM_CONG_EVT, &evt_data, p_pcb->user_data); + } + + if (code & PORT_EV_TXEMPTY) { + bta_jv_pm_conn_idle(p_pcb->p_pm_cb); + } } /******************************************************************************* @@ -1564,103 +1495,96 @@ static void bta_jv_port_event_cl_cback(uint32_t code, uint16_t port_handle) * Returns void * ******************************************************************************/ -void bta_jv_rfcomm_connect(tBTA_JV_MSG *p_data) -{ - uint16_t handle = 0; - uint32_t event_mask = BTA_JV_RFC_EV_MASK; - tPORT_STATE port_state; - uint8_t sec_id = 0; - tBTA_JV_RFC_CB *p_cb = NULL; - tBTA_JV_PCB *p_pcb; - tBTA_JV_API_RFCOMM_CONNECT *cc = &(p_data->rfcomm_connect); - tBTA_JV_RFCOMM_CL_INIT evt_data; - - /* TODO DM role manager - L2CA_SetDesireRole(cc->role); - */ - - sec_id = bta_jv_alloc_sec_id(); - memset(&evt_data, 0, sizeof(evt_data)); - evt_data.sec_id = sec_id; - evt_data.status = BTA_JV_SUCCESS; - if (0 == sec_id || - BTM_SetSecurityLevel(true, "", sec_id, cc->sec_mask, BT_PSM_RFCOMM, - BTM_SEC_PROTO_RFCOMM, cc->remote_scn) == false) - { - evt_data.status = BTA_JV_FAILURE; - APPL_TRACE_ERROR("sec_id:%d is zero or BTM_SetSecurityLevel failed, remote_scn:%d", sec_id, cc->remote_scn); - } - - if (evt_data.status == BTA_JV_SUCCESS && - RFCOMM_CreateConnection(UUID_SERVCLASS_SERIAL_PORT, cc->remote_scn, false, - BTA_JV_DEF_RFC_MTU, cc->peer_bd_addr, &handle, bta_jv_port_mgmt_cl_cback) != PORT_SUCCESS) - { - APPL_TRACE_ERROR("bta_jv_rfcomm_connect, RFCOMM_CreateConnection failed"); - evt_data.status = BTA_JV_FAILURE; - } - if (evt_data.status == BTA_JV_SUCCESS) - { - p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb); - if(p_cb) - { - p_cb->p_cback = cc->p_cback; - p_cb->sec_id = sec_id; - p_cb->scn = 0; - p_pcb->state = BTA_JV_ST_CL_OPENING; - p_pcb->user_data = cc->user_data; - evt_data.use_co = true; - - PORT_SetEventCallback(handle, bta_jv_port_event_cl_cback); - PORT_SetEventMask(handle, event_mask); - PORT_SetDataCOCallback (handle, bta_jv_port_data_co_cback); - - PORT_GetState(handle, &port_state); - - port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); - - /* coverity[uninit_use_in_call] - false-POSITIVE: port_state is initialized at PORT_GetState() */ - PORT_SetState(handle, &port_state); +void bta_jv_rfcomm_connect(tBTA_JV_MSG* p_data) { + uint16_t handle = 0; + uint32_t event_mask = BTA_JV_RFC_EV_MASK; + tPORT_STATE port_state; + uint8_t sec_id = 0; + tBTA_JV_RFC_CB* p_cb = NULL; + tBTA_JV_PCB* p_pcb; + tBTA_JV_API_RFCOMM_CONNECT* cc = &(p_data->rfcomm_connect); + tBTA_JV_RFCOMM_CL_INIT evt_data; + + /* TODO DM role manager + L2CA_SetDesireRole(cc->role); + */ + + sec_id = bta_jv_alloc_sec_id(); + memset(&evt_data, 0, sizeof(evt_data)); + evt_data.sec_id = sec_id; + evt_data.status = BTA_JV_SUCCESS; + if (0 == sec_id || + BTM_SetSecurityLevel(true, "", sec_id, cc->sec_mask, BT_PSM_RFCOMM, + BTM_SEC_PROTO_RFCOMM, cc->remote_scn) == false) { + evt_data.status = BTA_JV_FAILURE; + APPL_TRACE_ERROR( + "sec_id:%d is zero or BTM_SetSecurityLevel failed, remote_scn:%d", + sec_id, cc->remote_scn); + } + + if (evt_data.status == BTA_JV_SUCCESS && + RFCOMM_CreateConnection(UUID_SERVCLASS_SERIAL_PORT, cc->remote_scn, false, + BTA_JV_DEF_RFC_MTU, cc->peer_bd_addr, &handle, + bta_jv_port_mgmt_cl_cback) != PORT_SUCCESS) { + APPL_TRACE_ERROR("bta_jv_rfcomm_connect, RFCOMM_CreateConnection failed"); + evt_data.status = BTA_JV_FAILURE; + } + if (evt_data.status == BTA_JV_SUCCESS) { + p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb); + if (p_cb) { + p_cb->p_cback = cc->p_cback; + p_cb->sec_id = sec_id; + p_cb->scn = 0; + p_pcb->state = BTA_JV_ST_CL_OPENING; + p_pcb->user_data = cc->user_data; + evt_data.use_co = true; + + PORT_SetEventCallback(handle, bta_jv_port_event_cl_cback); + PORT_SetEventMask(handle, event_mask); + PORT_SetDataCOCallback(handle, bta_jv_port_data_co_cback); + + PORT_GetState(handle, &port_state); + + port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); + + /* coverity[uninit_use_in_call] + false-POSITIVE: port_state is initialized at PORT_GetState() */ + PORT_SetState(handle, &port_state); + + evt_data.handle = p_cb->handle; + } else { + evt_data.status = BTA_JV_FAILURE; + APPL_TRACE_ERROR("run out of rfc control block"); + } + } + cc->p_cback(BTA_JV_RFCOMM_CL_INIT_EVT, (tBTA_JV*)&evt_data, cc->user_data); + if (evt_data.status == BTA_JV_FAILURE) { + if (sec_id) bta_jv_free_sec_id(&sec_id); + if (handle) RFCOMM_RemoveConnection(handle); + } +} - evt_data.handle = p_cb->handle; - } - else - { - evt_data.status = BTA_JV_FAILURE; - APPL_TRACE_ERROR("run out of rfc control block"); - } - } - cc->p_cback(BTA_JV_RFCOMM_CL_INIT_EVT, (tBTA_JV *)&evt_data, cc->user_data); - if(evt_data.status == BTA_JV_FAILURE) - { - if(sec_id) - bta_jv_free_sec_id(&sec_id); - if(handle) - RFCOMM_RemoveConnection(handle); - } - } - -static int find_rfc_pcb(void* user_data, tBTA_JV_RFC_CB **cb, tBTA_JV_PCB **pcb) -{ - *cb = NULL; - *pcb = NULL; - int i; - for (i = 0; i < MAX_RFC_PORTS; i++) - { - uint32_t rfc_handle = bta_jv_cb.port_cb[i].handle & BTA_JV_RFC_HDL_MASK; - rfc_handle &= ~BTA_JV_RFCOMM_MASK; - if (rfc_handle && bta_jv_cb.port_cb[i].user_data == user_data) - { - *pcb = &bta_jv_cb.port_cb[i]; - *cb = &bta_jv_cb.rfc_cb[rfc_handle - 1]; - APPL_TRACE_DEBUG("find_rfc_pcb(): FOUND rfc_cb_handle 0x%x, port.jv_handle:" - " 0x%x, state: %d, rfc_cb->handle: 0x%x", rfc_handle, (*pcb)->handle, - (*pcb)->state, (*cb)->handle); - return 1; - } - } - APPL_TRACE_DEBUG("find_rfc_pcb: cannot find rfc_cb from user data: %u", PTR_TO_UINT(user_data)); - return 0; +static int find_rfc_pcb(void* user_data, tBTA_JV_RFC_CB** cb, + tBTA_JV_PCB** pcb) { + *cb = NULL; + *pcb = NULL; + int i; + for (i = 0; i < MAX_RFC_PORTS; i++) { + uint32_t rfc_handle = bta_jv_cb.port_cb[i].handle & BTA_JV_RFC_HDL_MASK; + rfc_handle &= ~BTA_JV_RFCOMM_MASK; + if (rfc_handle && bta_jv_cb.port_cb[i].user_data == user_data) { + *pcb = &bta_jv_cb.port_cb[i]; + *cb = &bta_jv_cb.rfc_cb[rfc_handle - 1]; + APPL_TRACE_DEBUG( + "find_rfc_pcb(): FOUND rfc_cb_handle 0x%x, port.jv_handle:" + " 0x%x, state: %d, rfc_cb->handle: 0x%x", + rfc_handle, (*pcb)->handle, (*pcb)->state, (*cb)->handle); + return 1; + } + } + APPL_TRACE_DEBUG("find_rfc_pcb: cannot find rfc_cb from user data: %u", + PTR_TO_UINT(user_data)); + return 0; } /******************************************************************************* @@ -1672,24 +1596,21 @@ static int find_rfc_pcb(void* user_data, tBTA_JV_RFC_CB **cb, tBTA_JV_PCB **pcb) * Returns void * ******************************************************************************/ -void bta_jv_rfcomm_close(tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_RFCOMM_CLOSE *cc = &(p_data->rfcomm_close); - tBTA_JV_RFC_CB *p_cb = NULL; - tBTA_JV_PCB *p_pcb = NULL; - APPL_TRACE_DEBUG("bta_jv_rfcomm_close, rfc handle:%d", cc->handle); - if (!cc->handle) - { - APPL_TRACE_ERROR("bta_jv_rfcomm_close, rfc handle is null"); - return; - } - - void* user_data = cc->user_data; - if (!find_rfc_pcb(user_data, &p_cb, &p_pcb)) - return; - bta_jv_free_rfc_cb(p_cb, p_pcb); - APPL_TRACE_DEBUG("bta_jv_rfcomm_close: sec id in use:%d, rfc_cb in use:%d", - get_sec_id_used(), get_rfc_cb_used()); +void bta_jv_rfcomm_close(tBTA_JV_MSG* p_data) { + tBTA_JV_API_RFCOMM_CLOSE* cc = &(p_data->rfcomm_close); + tBTA_JV_RFC_CB* p_cb = NULL; + tBTA_JV_PCB* p_pcb = NULL; + APPL_TRACE_DEBUG("bta_jv_rfcomm_close, rfc handle:%d", cc->handle); + if (!cc->handle) { + APPL_TRACE_ERROR("bta_jv_rfcomm_close, rfc handle is null"); + return; + } + + void* user_data = cc->user_data; + if (!find_rfc_pcb(user_data, &p_cb, &p_pcb)) return; + bta_jv_free_rfc_cb(p_cb, p_pcb); + APPL_TRACE_DEBUG("bta_jv_rfcomm_close: sec id in use:%d, rfc_cb in use:%d", + get_sec_id_used(), get_rfc_cb_used()); } /******************************************************************************* @@ -1702,65 +1623,65 @@ void bta_jv_rfcomm_close(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -static void bta_jv_port_mgmt_sr_cback(uint32_t code, uint16_t port_handle) -{ - tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); - tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); - tBTA_JV evt_data; - BD_ADDR rem_bda; - uint16_t lcid; - APPL_TRACE_DEBUG("bta_jv_port_mgmt_sr_cback, code:%d, port_handle:%d", code, port_handle); - if (NULL == p_cb || NULL == p_cb->p_cback) - { - APPL_TRACE_ERROR("bta_jv_port_mgmt_sr_cback, p_cb:%p, p_cb->p_cback%p", - p_cb, p_cb ? p_cb->p_cback : NULL); - return; - } - void *user_data = p_pcb->user_data; - APPL_TRACE_DEBUG( "bta_jv_port_mgmt_sr_cback code=%d port_handle:0x%x handle:0x%x, p_pcb:%p, user:%d", - code, port_handle, p_cb->handle, p_pcb, p_pcb->user_data); - - PORT_CheckConnection(port_handle, rem_bda, &lcid); - int failed = true; - if (code == PORT_SUCCESS) - { - evt_data.rfc_srv_open.handle = p_pcb->handle; - evt_data.rfc_srv_open.status = BTA_JV_SUCCESS; - bdcpy(evt_data.rfc_srv_open.rem_bda, rem_bda); - tBTA_JV_PCB *p_pcb_new_listen = bta_jv_add_rfc_port(p_cb, p_pcb); - if (p_pcb_new_listen) - { - evt_data.rfc_srv_open.new_listen_handle = p_pcb_new_listen->handle; - p_pcb_new_listen->user_data = p_cb->p_cback(BTA_JV_RFCOMM_SRV_OPEN_EVT, &evt_data, user_data); - APPL_TRACE_DEBUG("PORT_SUCCESS: curr_sess:%d, max_sess:%d", p_cb->curr_sess, p_cb->max_sess); - failed = false; - } - else - APPL_TRACE_ERROR("bta_jv_add_rfc_port failed to create new listen port"); - } - if (failed) - { - evt_data.rfc_close.handle = p_cb->handle; - evt_data.rfc_close.status = BTA_JV_FAILURE; - evt_data.rfc_close.async = true; - evt_data.rfc_close.port_status = code; - p_pcb->cong = false; - - tBTA_JV_RFCOMM_CBACK *p_cback = p_cb->p_cback; - APPL_TRACE_DEBUG("PORT_CLOSED before BTA_JV_RFCOMM_CLOSE_EVT: curr_sess:%d, max_sess:%d", - p_cb->curr_sess, p_cb->max_sess); - if (BTA_JV_ST_SR_CLOSING == p_pcb->state) - { - evt_data.rfc_close.async = false; - evt_data.rfc_close.status = BTA_JV_SUCCESS; - } - //p_pcb->state = BTA_JV_ST_NONE; - p_cback(BTA_JV_RFCOMM_CLOSE_EVT, &evt_data, user_data); - //bta_jv_free_rfc_cb(p_cb, p_pcb); - - APPL_TRACE_DEBUG("PORT_CLOSED after BTA_JV_RFCOMM_CLOSE_EVT: curr_sess:%d, max_sess:%d", - p_cb->curr_sess, p_cb->max_sess); - } +static void bta_jv_port_mgmt_sr_cback(uint32_t code, uint16_t port_handle) { + tBTA_JV_PCB* p_pcb = bta_jv_rfc_port_to_pcb(port_handle); + tBTA_JV_RFC_CB* p_cb = bta_jv_rfc_port_to_cb(port_handle); + tBTA_JV evt_data; + BD_ADDR rem_bda; + uint16_t lcid; + APPL_TRACE_DEBUG("bta_jv_port_mgmt_sr_cback, code:%d, port_handle:%d", code, + port_handle); + if (NULL == p_cb || NULL == p_cb->p_cback) { + APPL_TRACE_ERROR("bta_jv_port_mgmt_sr_cback, p_cb:%p, p_cb->p_cback%p", + p_cb, p_cb ? p_cb->p_cback : NULL); + return; + } + void* user_data = p_pcb->user_data; + APPL_TRACE_DEBUG( + "bta_jv_port_mgmt_sr_cback code=%d port_handle:0x%x handle:0x%x, " + "p_pcb:%p, user:%d", + code, port_handle, p_cb->handle, p_pcb, p_pcb->user_data); + + PORT_CheckConnection(port_handle, rem_bda, &lcid); + int failed = true; + if (code == PORT_SUCCESS) { + evt_data.rfc_srv_open.handle = p_pcb->handle; + evt_data.rfc_srv_open.status = BTA_JV_SUCCESS; + bdcpy(evt_data.rfc_srv_open.rem_bda, rem_bda); + tBTA_JV_PCB* p_pcb_new_listen = bta_jv_add_rfc_port(p_cb, p_pcb); + if (p_pcb_new_listen) { + evt_data.rfc_srv_open.new_listen_handle = p_pcb_new_listen->handle; + p_pcb_new_listen->user_data = + p_cb->p_cback(BTA_JV_RFCOMM_SRV_OPEN_EVT, &evt_data, user_data); + APPL_TRACE_DEBUG("PORT_SUCCESS: curr_sess:%d, max_sess:%d", + p_cb->curr_sess, p_cb->max_sess); + failed = false; + } else + APPL_TRACE_ERROR("bta_jv_add_rfc_port failed to create new listen port"); + } + if (failed) { + evt_data.rfc_close.handle = p_cb->handle; + evt_data.rfc_close.status = BTA_JV_FAILURE; + evt_data.rfc_close.async = true; + evt_data.rfc_close.port_status = code; + p_pcb->cong = false; + + tBTA_JV_RFCOMM_CBACK* p_cback = p_cb->p_cback; + APPL_TRACE_DEBUG( + "PORT_CLOSED before BTA_JV_RFCOMM_CLOSE_EVT: curr_sess:%d, max_sess:%d", + p_cb->curr_sess, p_cb->max_sess); + if (BTA_JV_ST_SR_CLOSING == p_pcb->state) { + evt_data.rfc_close.async = false; + evt_data.rfc_close.status = BTA_JV_SUCCESS; + } + // p_pcb->state = BTA_JV_ST_NONE; + p_cback(BTA_JV_RFCOMM_CLOSE_EVT, &evt_data, user_data); + // bta_jv_free_rfc_cb(p_cb, p_pcb); + + APPL_TRACE_DEBUG( + "PORT_CLOSED after BTA_JV_RFCOMM_CLOSE_EVT: curr_sess:%d, max_sess:%d", + p_cb->curr_sess, p_cb->max_sess); + } } /******************************************************************************* @@ -1772,38 +1693,34 @@ static void bta_jv_port_mgmt_sr_cback(uint32_t code, uint16_t port_handle) * Returns void * ******************************************************************************/ -static void bta_jv_port_event_sr_cback(uint32_t code, uint16_t port_handle) -{ - tBTA_JV_PCB *p_pcb = bta_jv_rfc_port_to_pcb(port_handle); - tBTA_JV_RFC_CB *p_cb = bta_jv_rfc_port_to_cb(port_handle); - tBTA_JV evt_data; - - if (NULL == p_cb || NULL == p_cb->p_cback) - return; - - APPL_TRACE_DEBUG( "bta_jv_port_event_sr_cback code=x%x port_handle:%d handle:%d", - code, port_handle, p_cb->handle); - - void *user_data = p_pcb->user_data; - if (code & PORT_EV_RXCHAR) - { - evt_data.data_ind.handle = p_cb->handle; - p_cb->p_cback(BTA_JV_RFCOMM_DATA_IND_EVT, &evt_data, user_data); - } - - if (code & PORT_EV_FC) - { - p_pcb->cong = (code & PORT_EV_FCS) ? false : true; - evt_data.rfc_cong.cong = p_pcb->cong; - evt_data.rfc_cong.handle = p_cb->handle; - evt_data.rfc_cong.status = BTA_JV_SUCCESS; - p_cb->p_cback(BTA_JV_RFCOMM_CONG_EVT, &evt_data, user_data); - } - - if (code & PORT_EV_TXEMPTY) - { - bta_jv_pm_conn_idle(p_pcb->p_pm_cb); - } +static void bta_jv_port_event_sr_cback(uint32_t code, uint16_t port_handle) { + tBTA_JV_PCB* p_pcb = bta_jv_rfc_port_to_pcb(port_handle); + tBTA_JV_RFC_CB* p_cb = bta_jv_rfc_port_to_cb(port_handle); + tBTA_JV evt_data; + + if (NULL == p_cb || NULL == p_cb->p_cback) return; + + APPL_TRACE_DEBUG( + "bta_jv_port_event_sr_cback code=x%x port_handle:%d handle:%d", code, + port_handle, p_cb->handle); + + void* user_data = p_pcb->user_data; + if (code & PORT_EV_RXCHAR) { + evt_data.data_ind.handle = p_cb->handle; + p_cb->p_cback(BTA_JV_RFCOMM_DATA_IND_EVT, &evt_data, user_data); + } + + if (code & PORT_EV_FC) { + p_pcb->cong = (code & PORT_EV_FCS) ? false : true; + evt_data.rfc_cong.cong = p_pcb->cong; + evt_data.rfc_cong.handle = p_cb->handle; + evt_data.rfc_cong.status = BTA_JV_SUCCESS; + p_cb->p_cback(BTA_JV_RFCOMM_CONG_EVT, &evt_data, user_data); + } + + if (code & PORT_EV_TXEMPTY) { + bta_jv_pm_conn_idle(p_pcb->p_pm_cb); + } } /******************************************************************************* @@ -1815,80 +1732,76 @@ static void bta_jv_port_event_sr_cback(uint32_t code, uint16_t port_handle) * Returns return a pointer to tBTA_JV_PCB just added * ******************************************************************************/ -static tBTA_JV_PCB * bta_jv_add_rfc_port(tBTA_JV_RFC_CB *p_cb, tBTA_JV_PCB *p_pcb_open) -{ - uint8_t used = 0, i, listen=0; - uint32_t si = 0; - tPORT_STATE port_state; - uint32_t event_mask = BTA_JV_RFC_EV_MASK; - tBTA_JV_PCB *p_pcb = NULL; - if (p_cb->max_sess > 1) - { - for (i=0; i < p_cb->max_sess; i++) - { - if (p_cb->rfc_hdl[i] != 0) - { - p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[i] - 1]; - if (p_pcb->state == BTA_JV_ST_SR_LISTEN) - { - listen++; - if (p_pcb_open == p_pcb) - { - APPL_TRACE_DEBUG("bta_jv_add_rfc_port, port_handle:%d, change the listen port to open state", - p_pcb->port_handle); - p_pcb->state = BTA_JV_ST_SR_OPEN; - - } - else - { - APPL_TRACE_ERROR("bta_jv_add_rfc_port, open pcb not matching listen one," - "listen count:%d, listen pcb handle:%d, open pcb:%d", - listen, p_pcb->port_handle, p_pcb_open->handle); - return NULL; - } - } - used++; - } - else if (si == 0) - { - si = i + 1; - } +static tBTA_JV_PCB* bta_jv_add_rfc_port(tBTA_JV_RFC_CB* p_cb, + tBTA_JV_PCB* p_pcb_open) { + uint8_t used = 0, i, listen = 0; + uint32_t si = 0; + tPORT_STATE port_state; + uint32_t event_mask = BTA_JV_RFC_EV_MASK; + tBTA_JV_PCB* p_pcb = NULL; + if (p_cb->max_sess > 1) { + for (i = 0; i < p_cb->max_sess; i++) { + if (p_cb->rfc_hdl[i] != 0) { + p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[i] - 1]; + if (p_pcb->state == BTA_JV_ST_SR_LISTEN) { + listen++; + if (p_pcb_open == p_pcb) { + APPL_TRACE_DEBUG( + "bta_jv_add_rfc_port, port_handle:%d, change the listen port " + "to open state", + p_pcb->port_handle); + p_pcb->state = BTA_JV_ST_SR_OPEN; + + } else { + APPL_TRACE_ERROR( + "bta_jv_add_rfc_port, open pcb not matching listen one," + "listen count:%d, listen pcb handle:%d, open pcb:%d", + listen, p_pcb->port_handle, p_pcb_open->handle); + return NULL; + } } + used++; + } else if (si == 0) { + si = i + 1; + } + } + + APPL_TRACE_DEBUG( + "bta_jv_add_rfc_port max_sess=%d used:%d curr_sess:%d, listen:%d si:%d", + p_cb->max_sess, used, p_cb->curr_sess, listen, si); + if (used < p_cb->max_sess && listen == 1 && si) { + si--; + if (RFCOMM_CreateConnection(p_cb->sec_id, p_cb->scn, true, + BTA_JV_DEF_RFC_MTU, (uint8_t*)bd_addr_any, + &(p_cb->rfc_hdl[si]), + bta_jv_port_mgmt_sr_cback) == PORT_SUCCESS) { + p_cb->curr_sess++; + p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[si] - 1]; + p_pcb->state = BTA_JV_ST_SR_LISTEN; + p_pcb->port_handle = p_cb->rfc_hdl[si]; + p_pcb->user_data = p_pcb_open->user_data; - APPL_TRACE_DEBUG("bta_jv_add_rfc_port max_sess=%d used:%d curr_sess:%d, listen:%d si:%d", - p_cb->max_sess, used, p_cb->curr_sess, listen, si); - if (used < p_cb->max_sess && listen == 1 && si) - { - si--; - if (RFCOMM_CreateConnection(p_cb->sec_id, p_cb->scn, true, - BTA_JV_DEF_RFC_MTU, (uint8_t *) bd_addr_any, &(p_cb->rfc_hdl[si]), bta_jv_port_mgmt_sr_cback) == PORT_SUCCESS) - { - p_cb->curr_sess++; - p_pcb = &bta_jv_cb.port_cb[p_cb->rfc_hdl[si] - 1]; - p_pcb->state = BTA_JV_ST_SR_LISTEN; - p_pcb->port_handle = p_cb->rfc_hdl[si]; - p_pcb->user_data = p_pcb_open->user_data; - - PORT_ClearKeepHandleFlag(p_pcb->port_handle); - PORT_SetEventCallback(p_pcb->port_handle, bta_jv_port_event_sr_cback); - PORT_SetDataCOCallback (p_pcb->port_handle, bta_jv_port_data_co_cback); - PORT_SetEventMask(p_pcb->port_handle, event_mask); - PORT_GetState(p_pcb->port_handle, &port_state); - - port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); - - PORT_SetState(p_pcb->port_handle, &port_state); - p_pcb->handle = BTA_JV_RFC_H_S_TO_HDL(p_cb->handle, si); - APPL_TRACE_DEBUG("bta_jv_add_rfc_port: p_pcb->handle:0x%x, curr_sess:%d", - p_pcb->handle, p_cb->curr_sess); - } - } - else - APPL_TRACE_ERROR("bta_jv_add_rfc_port, cannot create new rfc listen port"); - } - APPL_TRACE_DEBUG("bta_jv_add_rfc_port: sec id in use:%d, rfc_cb in use:%d", - get_sec_id_used(), get_rfc_cb_used()); - return p_pcb; + PORT_ClearKeepHandleFlag(p_pcb->port_handle); + PORT_SetEventCallback(p_pcb->port_handle, bta_jv_port_event_sr_cback); + PORT_SetDataCOCallback(p_pcb->port_handle, bta_jv_port_data_co_cback); + PORT_SetEventMask(p_pcb->port_handle, event_mask); + PORT_GetState(p_pcb->port_handle, &port_state); + + port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); + + PORT_SetState(p_pcb->port_handle, &port_state); + p_pcb->handle = BTA_JV_RFC_H_S_TO_HDL(p_cb->handle, si); + APPL_TRACE_DEBUG( + "bta_jv_add_rfc_port: p_pcb->handle:0x%x, curr_sess:%d", + p_pcb->handle, p_cb->curr_sess); + } + } else + APPL_TRACE_ERROR( + "bta_jv_add_rfc_port, cannot create new rfc listen port"); + } + APPL_TRACE_DEBUG("bta_jv_add_rfc_port: sec id in use:%d, rfc_cb in use:%d", + get_sec_id_used(), get_rfc_cb_used()); + return p_pcb; } /******************************************************************************* @@ -1901,85 +1814,79 @@ static tBTA_JV_PCB * bta_jv_add_rfc_port(tBTA_JV_RFC_CB *p_cb, tBTA_JV_PCB *p_pc * Returns void * ******************************************************************************/ -void bta_jv_rfcomm_start_server(tBTA_JV_MSG *p_data) -{ - uint16_t handle = 0; - uint32_t event_mask = BTA_JV_RFC_EV_MASK; - tPORT_STATE port_state; - uint8_t sec_id = 0; - tBTA_JV_RFC_CB *p_cb = NULL; - tBTA_JV_PCB *p_pcb; - tBTA_JV_API_RFCOMM_SERVER *rs = &(p_data->rfcomm_server); - tBTA_JV_RFCOMM_START evt_data; - - /* TODO DM role manager - L2CA_SetDesireRole(rs->role); - */ - memset(&evt_data, 0, sizeof(evt_data)); - evt_data.status = BTA_JV_FAILURE; - APPL_TRACE_DEBUG("bta_jv_rfcomm_start_server: sec id in use:%d, rfc_cb in use:%d", - get_sec_id_used(), get_rfc_cb_used()); - - do - { - sec_id = bta_jv_alloc_sec_id(); - - if (0 == sec_id || - BTM_SetSecurityLevel(false, "JV PORT", sec_id, rs->sec_mask, - BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, rs->local_scn) == false) - { - APPL_TRACE_ERROR("bta_jv_rfcomm_start_server, run out of sec_id"); - break; - } - - if (RFCOMM_CreateConnection(sec_id, rs->local_scn, true, - BTA_JV_DEF_RFC_MTU, (uint8_t *) bd_addr_any, &handle, bta_jv_port_mgmt_sr_cback) != PORT_SUCCESS) - { - APPL_TRACE_ERROR("bta_jv_rfcomm_start_server, RFCOMM_CreateConnection failed"); - break; - } - - - p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb); - if (!p_cb) - { - APPL_TRACE_ERROR("bta_jv_rfcomm_start_server, run out of rfc control block"); - break; - } +void bta_jv_rfcomm_start_server(tBTA_JV_MSG* p_data) { + uint16_t handle = 0; + uint32_t event_mask = BTA_JV_RFC_EV_MASK; + tPORT_STATE port_state; + uint8_t sec_id = 0; + tBTA_JV_RFC_CB* p_cb = NULL; + tBTA_JV_PCB* p_pcb; + tBTA_JV_API_RFCOMM_SERVER* rs = &(p_data->rfcomm_server); + tBTA_JV_RFCOMM_START evt_data; + + /* TODO DM role manager + L2CA_SetDesireRole(rs->role); + */ + memset(&evt_data, 0, sizeof(evt_data)); + evt_data.status = BTA_JV_FAILURE; + APPL_TRACE_DEBUG( + "bta_jv_rfcomm_start_server: sec id in use:%d, rfc_cb in use:%d", + get_sec_id_used(), get_rfc_cb_used()); + + do { + sec_id = bta_jv_alloc_sec_id(); - p_cb->max_sess = rs->max_session; - p_cb->p_cback = rs->p_cback; - p_cb->sec_id = sec_id; - p_cb->scn = rs->local_scn; - p_pcb->state = BTA_JV_ST_SR_LISTEN; - p_pcb->user_data = rs->user_data; - evt_data.status = BTA_JV_SUCCESS; - evt_data.handle = p_cb->handle; - evt_data.sec_id = sec_id; - evt_data.use_co = true; + if (0 == sec_id || + BTM_SetSecurityLevel(false, "JV PORT", sec_id, rs->sec_mask, + BT_PSM_RFCOMM, BTM_SEC_PROTO_RFCOMM, + rs->local_scn) == false) { + APPL_TRACE_ERROR("bta_jv_rfcomm_start_server, run out of sec_id"); + break; + } + + if (RFCOMM_CreateConnection(sec_id, rs->local_scn, true, BTA_JV_DEF_RFC_MTU, + (uint8_t*)bd_addr_any, &handle, + bta_jv_port_mgmt_sr_cback) != PORT_SUCCESS) { + APPL_TRACE_ERROR( + "bta_jv_rfcomm_start_server, RFCOMM_CreateConnection failed"); + break; + } + + p_cb = bta_jv_alloc_rfc_cb(handle, &p_pcb); + if (!p_cb) { + APPL_TRACE_ERROR( + "bta_jv_rfcomm_start_server, run out of rfc control block"); + break; + } + + p_cb->max_sess = rs->max_session; + p_cb->p_cback = rs->p_cback; + p_cb->sec_id = sec_id; + p_cb->scn = rs->local_scn; + p_pcb->state = BTA_JV_ST_SR_LISTEN; + p_pcb->user_data = rs->user_data; + evt_data.status = BTA_JV_SUCCESS; + evt_data.handle = p_cb->handle; + evt_data.sec_id = sec_id; + evt_data.use_co = true; - PORT_ClearKeepHandleFlag(handle); - PORT_SetEventCallback(handle, bta_jv_port_event_sr_cback); - PORT_SetEventMask(handle, event_mask); - PORT_GetState(handle, &port_state); + PORT_ClearKeepHandleFlag(handle); + PORT_SetEventCallback(handle, bta_jv_port_event_sr_cback); + PORT_SetEventMask(handle, event_mask); + PORT_GetState(handle, &port_state); - port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); + port_state.fc_type = (PORT_FC_CTS_ON_INPUT | PORT_FC_CTS_ON_OUTPUT); - PORT_SetState(handle, &port_state); - } while (0); + PORT_SetState(handle, &port_state); + } while (0); - rs->p_cback(BTA_JV_RFCOMM_START_EVT, (tBTA_JV *)&evt_data, rs->user_data); - if (evt_data.status == BTA_JV_SUCCESS) - { - PORT_SetDataCOCallback (handle, bta_jv_port_data_co_cback); - } - else - { - if (sec_id) - bta_jv_free_sec_id(&sec_id); - if (handle) - RFCOMM_RemoveConnection(handle); - } + rs->p_cback(BTA_JV_RFCOMM_START_EVT, (tBTA_JV*)&evt_data, rs->user_data); + if (evt_data.status == BTA_JV_SUCCESS) { + PORT_SetDataCOCallback(handle, bta_jv_port_data_co_cback); + } else { + if (sec_id) bta_jv_free_sec_id(&sec_id); + if (handle) RFCOMM_RemoveConnection(handle); + } } /******************************************************************************* @@ -1992,25 +1899,23 @@ void bta_jv_rfcomm_start_server(tBTA_JV_MSG *p_data) * ******************************************************************************/ -void bta_jv_rfcomm_stop_server(tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_RFCOMM_SERVER *ls = &(p_data->rfcomm_server); - tBTA_JV_RFC_CB *p_cb = NULL; - tBTA_JV_PCB *p_pcb = NULL; - APPL_TRACE_DEBUG("bta_jv_rfcomm_stop_server"); - if (!ls->handle) - { - APPL_TRACE_ERROR("bta_jv_rfcomm_stop_server, jv handle is null"); - return; - } - void* user_data = ls->user_data; - if (!find_rfc_pcb(user_data, &p_cb, &p_pcb)) - return; - APPL_TRACE_DEBUG("bta_jv_rfcomm_stop_server: p_pcb:%p, p_pcb->port_handle:%d", - p_pcb, p_pcb->port_handle); - bta_jv_free_rfc_cb(p_cb, p_pcb); - APPL_TRACE_DEBUG("bta_jv_rfcomm_stop_server: sec id in use:%d, rfc_cb in use:%d", - get_sec_id_used(), get_rfc_cb_used()); +void bta_jv_rfcomm_stop_server(tBTA_JV_MSG* p_data) { + tBTA_JV_API_RFCOMM_SERVER* ls = &(p_data->rfcomm_server); + tBTA_JV_RFC_CB* p_cb = NULL; + tBTA_JV_PCB* p_pcb = NULL; + APPL_TRACE_DEBUG("bta_jv_rfcomm_stop_server"); + if (!ls->handle) { + APPL_TRACE_ERROR("bta_jv_rfcomm_stop_server, jv handle is null"); + return; + } + void* user_data = ls->user_data; + if (!find_rfc_pcb(user_data, &p_cb, &p_pcb)) return; + APPL_TRACE_DEBUG("bta_jv_rfcomm_stop_server: p_pcb:%p, p_pcb->port_handle:%d", + p_pcb, p_pcb->port_handle); + bta_jv_free_rfc_cb(p_cb, p_pcb); + APPL_TRACE_DEBUG( + "bta_jv_rfcomm_stop_server: sec id in use:%d, rfc_cb in use:%d", + get_sec_id_used(), get_rfc_cb_used()); } /******************************************************************************* @@ -2022,42 +1927,39 @@ void bta_jv_rfcomm_stop_server(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_rfcomm_write(tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_RFCOMM_WRITE *wc = &(p_data->rfcomm_write); - tBTA_JV_RFC_CB *p_cb = wc->p_cb; - tBTA_JV_PCB *p_pcb = wc->p_pcb; - - if (p_pcb->state == BTA_JV_ST_NONE) { - APPL_TRACE_ERROR("%s in state BTA_JV_ST_NONE - cannot write", __func__); - return; - } +void bta_jv_rfcomm_write(tBTA_JV_MSG* p_data) { + tBTA_JV_API_RFCOMM_WRITE* wc = &(p_data->rfcomm_write); + tBTA_JV_RFC_CB* p_cb = wc->p_cb; + tBTA_JV_PCB* p_pcb = wc->p_pcb; + + if (p_pcb->state == BTA_JV_ST_NONE) { + APPL_TRACE_ERROR("%s in state BTA_JV_ST_NONE - cannot write", __func__); + return; + } + + tBTA_JV_RFCOMM_WRITE evt_data; + evt_data.status = BTA_JV_FAILURE; + evt_data.handle = p_cb->handle; + evt_data.req_id = wc->req_id; + evt_data.cong = p_pcb->cong; + evt_data.len = 0; + + bta_jv_pm_conn_busy(p_pcb->p_pm_cb); + + if (!evt_data.cong && + PORT_WriteDataCO(p_pcb->port_handle, &evt_data.len) == PORT_SUCCESS) { + evt_data.status = BTA_JV_SUCCESS; + } - tBTA_JV_RFCOMM_WRITE evt_data; - evt_data.status = BTA_JV_FAILURE; - evt_data.handle = p_cb->handle; - evt_data.req_id = wc->req_id; - evt_data.cong = p_pcb->cong; - evt_data.len = 0; - - bta_jv_pm_conn_busy(p_pcb->p_pm_cb); - - if (!evt_data.cong && - PORT_WriteDataCO(p_pcb->port_handle, &evt_data.len) == - PORT_SUCCESS) - { - evt_data.status = BTA_JV_SUCCESS; - } - - // Update congestion flag - evt_data.cong = p_pcb->cong; - - if (p_cb->p_cback) - { - p_cb->p_cback(BTA_JV_RFCOMM_WRITE_EVT, (tBTA_JV *)&evt_data, p_pcb->user_data); - } else { - APPL_TRACE_ERROR("%s No JV callback set", __func__); - } + // Update congestion flag + evt_data.cong = p_pcb->cong; + + if (p_cb->p_cback) { + p_cb->p_cback(BTA_JV_RFCOMM_WRITE_EVT, (tBTA_JV*)&evt_data, + p_pcb->user_data); + } else { + APPL_TRACE_ERROR("%s No JV callback set", __func__); + } } /******************************************************************************* @@ -2069,35 +1971,32 @@ void bta_jv_rfcomm_write(tBTA_JV_MSG *p_data) * Returns void * *******************************************************************************/ -void bta_jv_set_pm_profile(tBTA_JV_MSG *p_data) -{ - tBTA_JV_STATUS status; - tBTA_JV_PM_CB *p_cb; +void bta_jv_set_pm_profile(tBTA_JV_MSG* p_data) { + tBTA_JV_STATUS status; + tBTA_JV_PM_CB* p_cb; - APPL_TRACE_API("bta_jv_set_pm_profile(handle: 0x%x, app_id: %d, init_st: %d)", - p_data->set_pm.handle, p_data->set_pm.app_id, p_data->set_pm.init_st); + APPL_TRACE_API("bta_jv_set_pm_profile(handle: 0x%x, app_id: %d, init_st: %d)", + p_data->set_pm.handle, p_data->set_pm.app_id, + p_data->set_pm.init_st); - /* clear PM control block */ - if (p_data->set_pm.app_id == BTA_JV_PM_ID_CLEAR) - { - status = bta_jv_free_set_pm_profile_cb(p_data->set_pm.handle); + /* clear PM control block */ + if (p_data->set_pm.app_id == BTA_JV_PM_ID_CLEAR) { + status = bta_jv_free_set_pm_profile_cb(p_data->set_pm.handle); - if (status != BTA_JV_SUCCESS) - { - APPL_TRACE_WARNING("bta_jv_set_pm_profile() free pm cb failed: reason %d", - status); - } + if (status != BTA_JV_SUCCESS) { + APPL_TRACE_WARNING("bta_jv_set_pm_profile() free pm cb failed: reason %d", + status); } - else /* set PM control block */ - { - p_cb = bta_jv_alloc_set_pm_profile_cb(p_data->set_pm.handle, - p_data->set_pm.app_id); + } else /* set PM control block */ + { + p_cb = bta_jv_alloc_set_pm_profile_cb(p_data->set_pm.handle, + p_data->set_pm.app_id); - if (NULL != p_cb) - bta_jv_pm_state_change(p_cb, p_data->set_pm.init_st); - else - APPL_TRACE_WARNING("bta_jv_alloc_set_pm_profile_cb() failed"); - } + if (NULL != p_cb) + bta_jv_pm_state_change(p_cb, p_data->set_pm.init_st); + else + APPL_TRACE_WARNING("bta_jv_alloc_set_pm_profile_cb() failed"); + } } /******************************************************************************* @@ -2109,46 +2008,42 @@ void bta_jv_set_pm_profile(tBTA_JV_MSG *p_data) * Returns void * *******************************************************************************/ -void bta_jv_change_pm_state(tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_PM_STATE_CHANGE *p_msg = (tBTA_JV_API_PM_STATE_CHANGE *)p_data; +void bta_jv_change_pm_state(tBTA_JV_MSG* p_data) { + tBTA_JV_API_PM_STATE_CHANGE* p_msg = (tBTA_JV_API_PM_STATE_CHANGE*)p_data; - if (p_msg->p_cb) - bta_jv_pm_state_change(p_msg->p_cb, p_msg->state); + if (p_msg->p_cb) bta_jv_pm_state_change(p_msg->p_cb, p_msg->state); } - /******************************************************************************* * * Function bta_jv_set_pm_conn_state * - * Description Send pm event state change to jv state machine to serialize jv pm changes + * Description Send pm event state change to jv state machine to serialize jv pm + *changes * in relation to other jv messages. internal API use mainly. * * Params: p_cb: jv pm control block, NULL pointer returns failure - * new_state: new PM connections state, setting is forced by action function + * new_state: new PM connections state, setting is forced by action + *function * * Returns BTA_JV_SUCCESS, BTA_JV_FAILURE (buffer allocation, or NULL ptr!) * *******************************************************************************/ -tBTA_JV_STATUS bta_jv_set_pm_conn_state(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_STATE - new_st) -{ - if (p_cb == NULL) - return BTA_JV_FAILURE; +tBTA_JV_STATUS bta_jv_set_pm_conn_state(tBTA_JV_PM_CB* p_cb, + const tBTA_JV_CONN_STATE new_st) { + if (p_cb == NULL) return BTA_JV_FAILURE; - APPL_TRACE_API("%s: handle:0x%x, state: %d", __func__, p_cb->handle, - new_st); + APPL_TRACE_API("%s: handle:0x%x, state: %d", __func__, p_cb->handle, new_st); - tBTA_JV_API_PM_STATE_CHANGE *p_msg = - (tBTA_JV_API_PM_STATE_CHANGE *)osi_malloc(sizeof(tBTA_JV_API_PM_STATE_CHANGE)); - p_msg->hdr.event = BTA_JV_API_PM_STATE_CHANGE_EVT; - p_msg->p_cb = p_cb; - p_msg->state = new_st; + tBTA_JV_API_PM_STATE_CHANGE* p_msg = (tBTA_JV_API_PM_STATE_CHANGE*)osi_malloc( + sizeof(tBTA_JV_API_PM_STATE_CHANGE)); + p_msg->hdr.event = BTA_JV_API_PM_STATE_CHANGE_EVT; + p_msg->p_cb = p_cb; + p_msg->state = new_st; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_JV_SUCCESS; + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -2162,10 +2057,9 @@ tBTA_JV_STATUS bta_jv_set_pm_conn_state(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_ * Returns void * *******************************************************************************/ -static void bta_jv_pm_conn_busy(tBTA_JV_PM_CB *p_cb) -{ - if ((NULL != p_cb) && (BTA_JV_PM_IDLE_ST == p_cb->state)) - bta_jv_pm_state_change(p_cb, BTA_JV_CONN_BUSY); +static void bta_jv_pm_conn_busy(tBTA_JV_PM_CB* p_cb) { + if ((NULL != p_cb) && (BTA_JV_PM_IDLE_ST == p_cb->state)) + bta_jv_pm_state_change(p_cb, BTA_JV_CONN_BUSY); } /******************************************************************************* @@ -2179,10 +2073,9 @@ static void bta_jv_pm_conn_busy(tBTA_JV_PM_CB *p_cb) * Returns void * *******************************************************************************/ -static void bta_jv_pm_conn_idle(tBTA_JV_PM_CB *p_cb) -{ - if ((NULL != p_cb) && (BTA_JV_PM_IDLE_ST != p_cb->state)) - bta_jv_pm_state_change(p_cb, BTA_JV_CONN_IDLE); +static void bta_jv_pm_conn_idle(tBTA_JV_PM_CB* p_cb) { + if ((NULL != p_cb) && (BTA_JV_PM_IDLE_ST != p_cb->state)) + bta_jv_pm_state_change(p_cb, BTA_JV_CONN_IDLE); } /******************************************************************************* @@ -2196,317 +2089,305 @@ static void bta_jv_pm_conn_idle(tBTA_JV_PM_CB *p_cb) * Returns void * *******************************************************************************/ -static void bta_jv_pm_state_change(tBTA_JV_PM_CB *p_cb, const tBTA_JV_CONN_STATE state) -{ - APPL_TRACE_API("bta_jv_pm_state_change(p_cb: 0x%x, handle: 0x%x, busy/idle_state: %d" - ", app_id: %d, conn_state: %d)", p_cb, p_cb->handle, p_cb->state, - p_cb->app_id, state); - - switch (state) - { +static void bta_jv_pm_state_change(tBTA_JV_PM_CB* p_cb, + const tBTA_JV_CONN_STATE state) { + APPL_TRACE_API( + "bta_jv_pm_state_change(p_cb: 0x%x, handle: 0x%x, busy/idle_state: %d" + ", app_id: %d, conn_state: %d)", + p_cb, p_cb->handle, p_cb->state, p_cb->app_id, state); + + switch (state) { case BTA_JV_CONN_OPEN: - bta_sys_conn_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); - break; + bta_sys_conn_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); + break; case BTA_JV_CONN_CLOSE: - bta_sys_conn_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); - break; + bta_sys_conn_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); + break; case BTA_JV_APP_OPEN: - bta_sys_app_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); - break; + bta_sys_app_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); + break; case BTA_JV_APP_CLOSE: - bta_sys_app_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); - break; + bta_sys_app_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); + break; case BTA_JV_SCO_OPEN: - bta_sys_sco_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); - break; + bta_sys_sco_open(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); + break; case BTA_JV_SCO_CLOSE: - bta_sys_sco_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); - break; + bta_sys_sco_close(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); + break; case BTA_JV_CONN_IDLE: - p_cb->state = BTA_JV_PM_IDLE_ST; - bta_sys_idle(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); - break; + p_cb->state = BTA_JV_PM_IDLE_ST; + bta_sys_idle(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); + break; case BTA_JV_CONN_BUSY: - p_cb->state = BTA_JV_PM_BUSY_ST; - bta_sys_busy(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); - break; + p_cb->state = BTA_JV_PM_BUSY_ST; + bta_sys_busy(BTA_ID_JV, p_cb->app_id, p_cb->peer_bd_addr); + break; default: - APPL_TRACE_WARNING("bta_jv_pm_state_change(state: %d): Invalid state", state); - break; - } + APPL_TRACE_WARNING("bta_jv_pm_state_change(state: %d): Invalid state", + state); + break; + } } /**********************************************************************************************/ +static struct fc_channel* fcchan_get(uint16_t chan, char create) { + struct fc_channel* t = fc_channels; + static tL2CAP_FIXED_CHNL_REG fcr = { + .pL2CA_FixedConn_Cb = fcchan_conn_chng_cbk, + .pL2CA_FixedData_Cb = fcchan_data_cbk, + .default_idle_tout = 0xffff, + .fixed_chnl_opts = + { + .mode = L2CAP_FCR_BASIC_MODE, + .max_transmit = 0xFF, + .rtrans_tout = 2000, + .mon_tout = 12000, + .mps = 670, + .tx_win_sz = 1, + }, + }; + + while (t && t->chan != chan) t = t->next; + + if (t) + return t; + else if (!create) + return NULL; /* we cannot alloc a struct if not asked to */ -static struct fc_channel *fcchan_get(uint16_t chan, char create) -{ - struct fc_channel *t = fc_channels; - static tL2CAP_FIXED_CHNL_REG fcr = { - .pL2CA_FixedConn_Cb = fcchan_conn_chng_cbk, - .pL2CA_FixedData_Cb = fcchan_data_cbk, - .default_idle_tout = 0xffff, - .fixed_chnl_opts = { - .mode = L2CAP_FCR_BASIC_MODE, - .max_transmit = 0xFF, - .rtrans_tout = 2000, - .mon_tout = 12000, - .mps = 670, - .tx_win_sz = 1, - }, - }; - - while (t && t->chan != chan) - t = t->next; - - if (t) - return t; - else if (!create) - return NULL; /* we cannot alloc a struct if not asked to */ - - t = static_cast(osi_calloc(sizeof(*t))); - t->chan = chan; + t = static_cast(osi_calloc(sizeof(*t))); + t->chan = chan; - if (!L2CA_RegisterFixedChannel(chan, &fcr)) { - osi_free(t); - return NULL; - } + if (!L2CA_RegisterFixedChannel(chan, &fcr)) { + osi_free(t); + return NULL; + } - //link it in - t->next = fc_channels; - fc_channels = t; + // link it in + t->next = fc_channels; + fc_channels = t; - return t; + return t; } /* pass NULL to find servers */ -static struct fc_client *fcclient_find_by_addr(struct fc_client *start, BD_ADDR addr) -{ - struct fc_client *t = start; - - while (t) { +static struct fc_client* fcclient_find_by_addr(struct fc_client* start, + BD_ADDR addr) { + struct fc_client* t = start; - /* match client if have addr */ - if (addr && !memcmp(addr, &t->remote_addr, sizeof(t->remote_addr))) - break; + while (t) { + /* match client if have addr */ + if (addr && !memcmp(addr, &t->remote_addr, sizeof(t->remote_addr))) break; - /* match server if do not have addr */ - if (!addr && t->server) - break; + /* match server if do not have addr */ + if (!addr && t->server) break; - t = t->next_all_list; - } + t = t->next_all_list; + } - return t; + return t; } -static struct fc_client *fcclient_find_by_id(uint32_t id) -{ - struct fc_client *t = fc_clients; +static struct fc_client* fcclient_find_by_id(uint32_t id) { + struct fc_client* t = fc_clients; - while (t && t->id != id) - t = t->next_all_list; + while (t && t->id != id) t = t->next_all_list; - return t; + return t; } -static struct fc_client *fcclient_alloc(uint16_t chan, char server, const uint8_t *sec_id_to_use) -{ - struct fc_channel *fc = fcchan_get(chan, true); - struct fc_client *t; - uint8_t sec_id; +static struct fc_client* fcclient_alloc(uint16_t chan, char server, + const uint8_t* sec_id_to_use) { + struct fc_channel* fc = fcchan_get(chan, true); + struct fc_client* t; + uint8_t sec_id; - if (!fc) - return NULL; + if (!fc) return NULL; - if (fc->has_server && server) - return NULL; /* no way to have multiple servers on same channel */ + if (fc->has_server && server) + return NULL; /* no way to have multiple servers on same channel */ - if (sec_id_to_use) - sec_id = *sec_id_to_use; - else - sec_id = bta_jv_alloc_sec_id(); + if (sec_id_to_use) + sec_id = *sec_id_to_use; + else + sec_id = bta_jv_alloc_sec_id(); - t = static_cast(osi_calloc(sizeof(*t))); - // Allocate it a unique ID - do { - t->id = ++fc_next_id; - } while (!t->id || fcclient_find_by_id(t->id)); + t = static_cast(osi_calloc(sizeof(*t))); + // Allocate it a unique ID + do { + t->id = ++fc_next_id; + } while (!t->id || fcclient_find_by_id(t->id)); - // Populate some params - t->chan = chan; - t->server = server; + // Populate some params + t->chan = chan; + t->server = server; - // Get a security id - t->sec_id = sec_id; + // Get a security id + t->sec_id = sec_id; - // Link it in to global list - t->next_all_list = fc_clients; - fc_clients = t; + // Link it in to global list + t->next_all_list = fc_clients; + fc_clients = t; - // Link it in to channel list - t->next_chan_list = fc->clients; - fc->clients = t; + // Link it in to channel list + t->next_chan_list = fc->clients; + fc->clients = t; - // Update channel if needed - if (server) - fc->has_server = true; + // Update channel if needed + if (server) fc->has_server = true; - return t; + return t; } -static void fcclient_free(struct fc_client *fc) -{ - struct fc_client *t = fc_clients; - struct fc_channel *tc = fcchan_get(fc->chan, false); +static void fcclient_free(struct fc_client* fc) { + struct fc_client* t = fc_clients; + struct fc_channel* tc = fcchan_get(fc->chan, false); - //remove from global list - while (t && t->next_all_list != fc) - t = t->next_all_list; + // remove from global list + while (t && t->next_all_list != fc) t = t->next_all_list; - if (!t && fc != fc_clients) - return; /* prevent double-free */ + if (!t && fc != fc_clients) return; /* prevent double-free */ - if (t) - t->next_all_list = fc->next_all_list; - else - fc_clients = fc->next_all_list; + if (t) + t->next_all_list = fc->next_all_list; + else + fc_clients = fc->next_all_list; - //remove from channel list - if (tc) { - t = tc->clients; + // remove from channel list + if (tc) { + t = tc->clients; - while (t && t->next_chan_list != fc) - t = t->next_chan_list; + while (t && t->next_chan_list != fc) t = t->next_chan_list; - if (t) - t->next_chan_list = fc->next_chan_list; - else - tc->clients = fc->next_chan_list; + if (t) + t->next_chan_list = fc->next_chan_list; + else + tc->clients = fc->next_chan_list; - //if was server then channel no longer has a server - if (fc->server) - tc->has_server = false; - } + // if was server then channel no longer has a server + if (fc->server) tc->has_server = false; + } - //free security id - bta_jv_free_sec_id(&fc->sec_id); + // free security id + bta_jv_free_sec_id(&fc->sec_id); - osi_free(fc); + osi_free(fc); } -static void fcchan_conn_chng_cbk(uint16_t chan, BD_ADDR bd_addr, bool connected, uint16_t reason, tBT_TRANSPORT transport) -{ - tBTA_JV init_evt; - tBTA_JV open_evt; - struct fc_channel *tc; - struct fc_client *t = NULL, *new_conn; - tBTA_JV_L2CAP_CBACK *p_cback = NULL; - char call_init = false; - void *user_data = NULL; - - - tc = fcchan_get(chan, false); - if (tc) { - t = fcclient_find_by_addr(tc->clients, bd_addr); // try to find an open socked for that addr - if (t) { - p_cback = t->p_cback; - user_data = t->user_data; - } else { - t = fcclient_find_by_addr(tc->clients, NULL); // try to find a listening socked for that channel - if (t) { - //found: create a normal connection socket and assign the connection to it - new_conn = fcclient_alloc(chan, false, &t->sec_id); - if (new_conn){ - - memcpy(&new_conn->remote_addr, bd_addr, sizeof(new_conn->remote_addr)); - new_conn->p_cback = NULL; //for now - new_conn->init_called = true; /*nop need to do it again */ - - p_cback = t->p_cback; - user_data = t->user_data; - - t = new_conn; - } - } else { - //drop it - return; - } +static void fcchan_conn_chng_cbk(uint16_t chan, BD_ADDR bd_addr, bool connected, + uint16_t reason, tBT_TRANSPORT transport) { + tBTA_JV init_evt; + tBTA_JV open_evt; + struct fc_channel* tc; + struct fc_client *t = NULL, *new_conn; + tBTA_JV_L2CAP_CBACK* p_cback = NULL; + char call_init = false; + void* user_data = NULL; + + tc = fcchan_get(chan, false); + if (tc) { + t = fcclient_find_by_addr( + tc->clients, bd_addr); // try to find an open socked for that addr + if (t) { + p_cback = t->p_cback; + user_data = t->user_data; + } else { + t = fcclient_find_by_addr( + tc->clients, + NULL); // try to find a listening socked for that channel + if (t) { + // found: create a normal connection socket and assign the connection to + // it + new_conn = fcclient_alloc(chan, false, &t->sec_id); + if (new_conn) { + memcpy(&new_conn->remote_addr, bd_addr, + sizeof(new_conn->remote_addr)); + new_conn->p_cback = NULL; // for now + new_conn->init_called = true; /*nop need to do it again */ + + p_cback = t->p_cback; + user_data = t->user_data; + + t = new_conn; } + } else { + // drop it + return; + } } + } - if (t) { - - if (!t->init_called) { + if (t) { + if (!t->init_called) { + call_init = true; + t->init_called = true; - call_init = true; - t->init_called = true; + init_evt.l2c_cl_init.handle = t->id; + init_evt.l2c_cl_init.status = BTA_JV_SUCCESS; + init_evt.l2c_cl_init.sec_id = t->sec_id; + } - init_evt.l2c_cl_init.handle = t->id; - init_evt.l2c_cl_init.status = BTA_JV_SUCCESS; - init_evt.l2c_cl_init.sec_id = t->sec_id; - } + open_evt.l2c_open.handle = t->id; + open_evt.l2c_open.tx_mtu = 23; /* 23, why not ?*/ + memcpy(&open_evt.l2c_le_open.rem_bda, &t->remote_addr, + sizeof(open_evt.l2c_le_open.rem_bda)); + open_evt.l2c_le_open.p_p_cback = (void**)&t->p_cback; + open_evt.l2c_le_open.p_user_data = &t->user_data; + open_evt.l2c_le_open.status = BTA_JV_SUCCESS; - open_evt.l2c_open.handle = t->id; - open_evt.l2c_open.tx_mtu = 23; /* 23, why not ?*/ - memcpy(&open_evt.l2c_le_open.rem_bda, &t->remote_addr, sizeof(open_evt.l2c_le_open.rem_bda)); - open_evt.l2c_le_open.p_p_cback = (void**)&t->p_cback; - open_evt.l2c_le_open.p_user_data = &t->user_data; - open_evt.l2c_le_open.status = BTA_JV_SUCCESS; - - if (connected) { - open_evt.l2c_open.status = BTA_JV_SUCCESS; - } else { - fcclient_free(t); - open_evt.l2c_open.status = BTA_JV_FAILURE; - } + if (connected) { + open_evt.l2c_open.status = BTA_JV_SUCCESS; + } else { + fcclient_free(t); + open_evt.l2c_open.status = BTA_JV_FAILURE; } + } - if (call_init) - p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &init_evt, user_data); + if (call_init) p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &init_evt, user_data); - //call this with lock taken so socket does not disappear from under us */ - if (p_cback) { - p_cback(BTA_JV_L2CAP_OPEN_EVT, &open_evt, user_data); - if (!t->p_cback) /* no callback set, means they do not want this one... */ - fcclient_free(t); - } + // call this with lock taken so socket does not disappear from under us */ + if (p_cback) { + p_cback(BTA_JV_L2CAP_OPEN_EVT, &open_evt, user_data); + if (!t->p_cback) /* no callback set, means they do not want this one... */ + fcclient_free(t); + } } -static void fcchan_data_cbk(uint16_t chan, BD_ADDR bd_addr, BT_HDR *p_buf) -{ - tBTA_JV evt_data; - struct fc_channel *tc; - struct fc_client *t = NULL; - tBTA_JV_L2CAP_CBACK *sock_cback = NULL; - void *sock_user_data; - - tc = fcchan_get(chan, false); - if (tc) { - t = fcclient_find_by_addr(tc->clients, bd_addr); // try to find an open socked for that addr and channel - if (!t) { - //no socket -> drop it - return; - } +static void fcchan_data_cbk(uint16_t chan, BD_ADDR bd_addr, BT_HDR* p_buf) { + tBTA_JV evt_data; + struct fc_channel* tc; + struct fc_client* t = NULL; + tBTA_JV_L2CAP_CBACK* sock_cback = NULL; + void* sock_user_data; + + tc = fcchan_get(chan, false); + if (tc) { + t = fcclient_find_by_addr( + tc->clients, + bd_addr); // try to find an open socked for that addr and channel + if (!t) { + // no socket -> drop it + return; } + } - sock_cback = t->p_cback; - sock_user_data = t->user_data; - evt_data.le_data_ind.handle = t->id; - evt_data.le_data_ind.p_buf = p_buf; + sock_cback = t->p_cback; + sock_user_data = t->user_data; + evt_data.le_data_ind.handle = t->id; + evt_data.le_data_ind.p_buf = p_buf; - if (sock_cback) - sock_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data, sock_user_data); + if (sock_cback) + sock_cback(BTA_JV_L2CAP_DATA_IND_EVT, &evt_data, sock_user_data); } - /******************************************************************************* * * Function bta_jv_l2cap_connect_le @@ -2516,49 +2397,45 @@ static void fcchan_data_cbk(uint16_t chan, BD_ADDR bd_addr, BT_HDR *p_buf) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_connect_le(tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_L2CAP_CONNECT *cc = &(p_data->l2cap_connect); - tBTA_JV evt; - uint32_t id; - char call_init_f = true; - struct fc_client *t; - - evt.l2c_cl_init.handle = GAP_INVALID_HANDLE; - evt.l2c_cl_init.status = BTA_JV_FAILURE; - - t = fcclient_alloc(cc->remote_chan, false, NULL); - if (!t) { - cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &evt, cc->user_data); - return; - } - - t->p_cback = cc->p_cback; - t->user_data = cc->user_data; - memcpy(&t->remote_addr, &cc->peer_bd_addr, sizeof(t->remote_addr)); - id = t->id; - t->init_called = false; - - if (L2CA_ConnectFixedChnl(t->chan, t->remote_addr)) { - - evt.l2c_cl_init.status = BTA_JV_SUCCESS; - evt.l2c_cl_init.handle = id; - } - - //it could have been deleted/moved from under us, so re-find it */ - t = fcclient_find_by_id(id); - if (t) { - if (evt.l2c_cl_init.status == BTA_JV_SUCCESS) - call_init_f = !t->init_called; - else - fcclient_free(t); - } - if (call_init_f) - cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &evt, cc->user_data); - t->init_called = true; +void bta_jv_l2cap_connect_le(tBTA_JV_MSG* p_data) { + tBTA_JV_API_L2CAP_CONNECT* cc = &(p_data->l2cap_connect); + tBTA_JV evt; + uint32_t id; + char call_init_f = true; + struct fc_client* t; + + evt.l2c_cl_init.handle = GAP_INVALID_HANDLE; + evt.l2c_cl_init.status = BTA_JV_FAILURE; + + t = fcclient_alloc(cc->remote_chan, false, NULL); + if (!t) { + cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &evt, cc->user_data); + return; + } + + t->p_cback = cc->p_cback; + t->user_data = cc->user_data; + memcpy(&t->remote_addr, &cc->peer_bd_addr, sizeof(t->remote_addr)); + id = t->id; + t->init_called = false; + + if (L2CA_ConnectFixedChnl(t->chan, t->remote_addr)) { + evt.l2c_cl_init.status = BTA_JV_SUCCESS; + evt.l2c_cl_init.handle = id; + } + + // it could have been deleted/moved from under us, so re-find it */ + t = fcclient_find_by_id(id); + if (t) { + if (evt.l2c_cl_init.status == BTA_JV_SUCCESS) + call_init_f = !t->init_called; + else + fcclient_free(t); + } + if (call_init_f) cc->p_cback(BTA_JV_L2CAP_CL_INIT_EVT, &evt, cc->user_data); + t->init_called = true; } - /******************************************************************************* * * Function bta_jv_l2cap_stop_server_le @@ -2568,35 +2445,33 @@ void bta_jv_l2cap_connect_le(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_stop_server_le(tBTA_JV_MSG *p_data) -{ - tBTA_JV evt; - tBTA_JV_API_L2CAP_SERVER *ls = &(p_data->l2cap_server); - tBTA_JV_L2CAP_CBACK *p_cback = NULL; - struct fc_channel *fcchan; - struct fc_client *fcclient; - void *user_data; - - evt.l2c_close.status = BTA_JV_FAILURE; - evt.l2c_close.async = false; - evt.l2c_close.handle = GAP_INVALID_HANDLE; - - fcchan = fcchan_get(ls->local_chan, false); - if (fcchan) { - while((fcclient = fcchan->clients)) { - p_cback = fcclient->p_cback; - user_data = fcclient->user_data; - - evt.l2c_close.handle = fcclient->id; - evt.l2c_close.status = BTA_JV_SUCCESS; - evt.l2c_close.async = false; - - fcclient_free(fcclient); - - if (p_cback) - p_cback(BTA_JV_L2CAP_CLOSE_EVT, &evt, user_data); - } +void bta_jv_l2cap_stop_server_le(tBTA_JV_MSG* p_data) { + tBTA_JV evt; + tBTA_JV_API_L2CAP_SERVER* ls = &(p_data->l2cap_server); + tBTA_JV_L2CAP_CBACK* p_cback = NULL; + struct fc_channel* fcchan; + struct fc_client* fcclient; + void* user_data; + + evt.l2c_close.status = BTA_JV_FAILURE; + evt.l2c_close.async = false; + evt.l2c_close.handle = GAP_INVALID_HANDLE; + + fcchan = fcchan_get(ls->local_chan, false); + if (fcchan) { + while ((fcclient = fcchan->clients)) { + p_cback = fcclient->p_cback; + user_data = fcclient->user_data; + + evt.l2c_close.handle = fcclient->id; + evt.l2c_close.status = BTA_JV_SUCCESS; + evt.l2c_close.async = false; + + fcclient_free(fcclient); + + if (p_cback) p_cback(BTA_JV_L2CAP_CLOSE_EVT, &evt, user_data); } + } } /******************************************************************************* @@ -2608,30 +2483,27 @@ void bta_jv_l2cap_stop_server_le(tBTA_JV_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_jv_l2cap_start_server_le(tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_L2CAP_SERVER *ss = &(p_data->l2cap_server); - tBTA_JV_L2CAP_START evt_data; - struct fc_client *t; - - evt_data.handle = GAP_INVALID_HANDLE; - evt_data.status = BTA_JV_FAILURE; +void bta_jv_l2cap_start_server_le(tBTA_JV_MSG* p_data) { + tBTA_JV_API_L2CAP_SERVER* ss = &(p_data->l2cap_server); + tBTA_JV_L2CAP_START evt_data; + struct fc_client* t; + evt_data.handle = GAP_INVALID_HANDLE; + evt_data.status = BTA_JV_FAILURE; - t = fcclient_alloc(ss->local_chan, true, NULL); - if (!t) - goto out; + t = fcclient_alloc(ss->local_chan, true, NULL); + if (!t) goto out; - t->p_cback = ss->p_cback; - t->user_data = ss->user_data; + t->p_cback = ss->p_cback; + t->user_data = ss->user_data; - //if we got here, we're registered... - evt_data.status = BTA_JV_SUCCESS; - evt_data.handle = t->id; - evt_data.sec_id = t->sec_id; + // if we got here, we're registered... + evt_data.status = BTA_JV_SUCCESS; + evt_data.handle = t->id; + evt_data.sec_id = t->sec_id; out: - ss->p_cback(BTA_JV_L2CAP_START_EVT, (tBTA_JV *)&evt_data, ss->user_data); + ss->p_cback(BTA_JV_L2CAP_START_EVT, (tBTA_JV*)&evt_data, ss->user_data); } /******************************************************************************* @@ -2643,12 +2515,10 @@ out: * Returns void * ******************************************************************************/ -extern void bta_jv_l2cap_close_fixed (tBTA_JV_MSG *p_data) -{ - tBTA_JV_API_L2CAP_CLOSE *cc = &(p_data->l2cap_close); - struct fc_client *t; +extern void bta_jv_l2cap_close_fixed(tBTA_JV_MSG* p_data) { + tBTA_JV_API_L2CAP_CLOSE* cc = &(p_data->l2cap_close); + struct fc_client* t; - t = fcclient_find_by_id(cc->handle); - if (t) - fcclient_free(t); + t = fcclient_find_by_id(cc->handle); + if (t) fcclient_free(t); } diff --git a/system/bta/jv/bta_jv_api.cc b/system/bta/jv/bta_jv_api.cc index 68bbcbe839c..a1de8db804d 100644 --- a/system/bta/jv/bta_jv_api.cc +++ b/system/bta/jv/bta_jv_api.cc @@ -24,25 +24,21 @@ ******************************************************************************/ #include +#include "bt_common.h" #include "bta_api.h" -#include "bta_sys.h" #include "bta_jv_api.h" #include "bta_jv_int.h" -#include "bt_common.h" +#include "bta_sys.h" +#include "gap_api.h" #include "port_api.h" #include "sdp_api.h" #include "utl.h" -#include "gap_api.h" /***************************************************************************** * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_jv_reg = -{ - bta_jv_sm_execute, - NULL -}; +static const tBTA_SYS_REG bta_jv_reg = {bta_jv_sm_execute, NULL}; /******************************************************************************* * @@ -58,38 +54,33 @@ static const tBTA_SYS_REG bta_jv_reg = * BTA_JV_FAIL if internal failure. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvEnable(tBTA_JV_DM_CBACK *p_cback) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; - int i; - - APPL_TRACE_API( "BTA_JvEnable"); - if(p_cback && false == bta_sys_is_register(BTA_ID_JV)) - { - memset(&bta_jv_cb, 0, sizeof(tBTA_JV_CB)); - /* set handle to invalid value by default */ - for (i=0; ihdr.event = BTA_JV_API_ENABLE_EVT; - p_buf->p_cback = p_cback; - bta_sys_sendmsg(p_buf); - status = BTA_JV_SUCCESS; - } +tBTA_JV_STATUS BTA_JvEnable(tBTA_JV_DM_CBACK* p_cback) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; + int i; + + APPL_TRACE_API("BTA_JvEnable"); + if (p_cback && false == bta_sys_is_register(BTA_ID_JV)) { + memset(&bta_jv_cb, 0, sizeof(tBTA_JV_CB)); + /* set handle to invalid value by default */ + for (i = 0; i < BTA_JV_PM_MAX_NUM; i++) { + bta_jv_cb.pm_cb[i].handle = BTA_JV_PM_HANDLE_CLEAR; } - else - { - APPL_TRACE_ERROR("JVenable fails"); - } - return(status); + + /* register with BTA system manager */ + bta_sys_register(BTA_ID_JV, &bta_jv_reg); + + if (p_cback) { + tBTA_JV_API_ENABLE* p_buf = + (tBTA_JV_API_ENABLE*)osi_malloc(sizeof(tBTA_JV_API_ENABLE)); + p_buf->hdr.event = BTA_JV_API_ENABLE_EVT; + p_buf->p_cback = p_cback; + bta_sys_sendmsg(p_buf); + status = BTA_JV_SUCCESS; + } + } else { + APPL_TRACE_ERROR("JVenable fails"); + } + return (status); } /******************************************************************************* @@ -101,16 +92,15 @@ tBTA_JV_STATUS BTA_JvEnable(tBTA_JV_DM_CBACK *p_cback) * Returns void * ******************************************************************************/ -void BTA_JvDisable(void) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_JvDisable(void) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - bta_sys_deregister(BTA_ID_JV); - p_buf->event = BTA_JV_API_DISABLE_EVT; + bta_sys_deregister(BTA_ID_JV); + p_buf->event = BTA_JV_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -123,19 +113,16 @@ void BTA_JvDisable(void) * false if not. * ******************************************************************************/ -bool BTA_JvIsEncrypted(BD_ADDR bd_addr) -{ - bool is_encrypted = false; - uint8_t sec_flags, le_flags; - - if (BTM_GetSecurityFlags(bd_addr, &sec_flags) && - BTM_GetSecurityFlagsByTransport(bd_addr, &le_flags, BT_TRANSPORT_LE)) - { - if(sec_flags & BTM_SEC_FLAG_ENCRYPTED || - le_flags & BTM_SEC_FLAG_ENCRYPTED) - is_encrypted = true; - } - return is_encrypted; +bool BTA_JvIsEncrypted(BD_ADDR bd_addr) { + bool is_encrypted = false; + uint8_t sec_flags, le_flags; + + if (BTM_GetSecurityFlags(bd_addr, &sec_flags) && + BTM_GetSecurityFlagsByTransport(bd_addr, &le_flags, BT_TRANSPORT_LE)) { + if (sec_flags & BTM_SEC_FLAG_ENCRYPTED || le_flags & BTM_SEC_FLAG_ENCRYPTED) + is_encrypted = true; + } + return is_encrypted; } /******************************************************************************* * @@ -144,7 +131,8 @@ bool BTA_JvIsEncrypted(BD_ADDR bd_addr) * Description This function reserves a SCN (server channel number) for * applications running over RFCOMM, L2CAP of L2CAP_LE. * It is primarily called by server profiles/applications to - * register their SCN into the SDP database. The SCN is reported + * register their SCN into the SDP database. The SCN is + *reported * by the tBTA_JV_DM_CBACK callback with a BTA_JV_GET_SCN_EVT * for RFCOMM channels and BTA_JV_GET_PSM_EVT for L2CAP and LE. * If the SCN/PSM reported is 0, that means all resources are @@ -159,22 +147,21 @@ bool BTA_JvIsEncrypted(BD_ADDR bd_addr) * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvGetChannelId(int conn_type, void* user_data, int32_t channel) -{ - tBTA_JV_API_ALLOC_CHANNEL *p_msg = - (tBTA_JV_API_ALLOC_CHANNEL *)osi_malloc(sizeof(tBTA_JV_API_ALLOC_CHANNEL)); +tBTA_JV_STATUS BTA_JvGetChannelId(int conn_type, void* user_data, + int32_t channel) { + tBTA_JV_API_ALLOC_CHANNEL* p_msg = + (tBTA_JV_API_ALLOC_CHANNEL*)osi_malloc(sizeof(tBTA_JV_API_ALLOC_CHANNEL)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_JV_API_GET_CHANNEL_EVT; - p_msg->type = conn_type; - p_msg->channel = channel; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); + p_msg->hdr.event = BTA_JV_API_GET_CHANNEL_EVT; + p_msg->type = conn_type; + p_msg->channel = channel; + p_msg->user_data = user_data; - return BTA_JV_SUCCESS; + bta_sys_sendmsg(p_msg); + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -191,20 +178,19 @@ tBTA_JV_STATUS BTA_JvGetChannelId(int conn_type, void* user_data, int32_t channe * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvFreeChannel(uint16_t channel, int conn_type) -{ - tBTA_JV_API_FREE_CHANNEL *p_msg = - (tBTA_JV_API_FREE_CHANNEL *)osi_malloc(sizeof(tBTA_JV_API_FREE_CHANNEL)); +tBTA_JV_STATUS BTA_JvFreeChannel(uint16_t channel, int conn_type) { + tBTA_JV_API_FREE_CHANNEL* p_msg = + (tBTA_JV_API_FREE_CHANNEL*)osi_malloc(sizeof(tBTA_JV_API_FREE_CHANNEL)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_JV_API_FREE_SCN_EVT; - p_msg->scn = channel; - p_msg->type = conn_type; + p_msg->hdr.event = BTA_JV_API_FREE_SCN_EVT; + p_msg->scn = channel; + p_msg->type = conn_type; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_JV_SUCCESS; + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -221,23 +207,22 @@ tBTA_JV_STATUS BTA_JvFreeChannel(uint16_t channel, int conn_type) * ******************************************************************************/ tBTA_JV_STATUS BTA_JvStartDiscovery(BD_ADDR bd_addr, uint16_t num_uuid, - tSDP_UUID *p_uuid_list, void * user_data) -{ - tBTA_JV_API_START_DISCOVERY *p_msg = - (tBTA_JV_API_START_DISCOVERY *)osi_malloc(sizeof(tBTA_JV_API_START_DISCOVERY)); - - APPL_TRACE_API("%s", __func__); - - p_msg->hdr.event = BTA_JV_API_START_DISCOVERY_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - p_msg->num_uuid = num_uuid; - memcpy(p_msg->uuid_list, p_uuid_list, num_uuid * sizeof(tSDP_UUID)); - p_msg->num_attr = 0; - p_msg->user_data = user_data; + tSDP_UUID* p_uuid_list, void* user_data) { + tBTA_JV_API_START_DISCOVERY* p_msg = (tBTA_JV_API_START_DISCOVERY*)osi_malloc( + sizeof(tBTA_JV_API_START_DISCOVERY)); - bta_sys_sendmsg(p_msg); + APPL_TRACE_API("%s", __func__); + + p_msg->hdr.event = BTA_JV_API_START_DISCOVERY_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + p_msg->num_uuid = num_uuid; + memcpy(p_msg->uuid_list, p_uuid_list, num_uuid * sizeof(tSDP_UUID)); + p_msg->num_attr = 0; + p_msg->user_data = user_data; - return BTA_JV_SUCCESS; + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -252,19 +237,18 @@ tBTA_JV_STATUS BTA_JvStartDiscovery(BD_ADDR bd_addr, uint16_t num_uuid, * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvCreateRecordByUser(void *user_data) -{ - tBTA_JV_API_CREATE_RECORD *p_msg = - (tBTA_JV_API_CREATE_RECORD *)osi_malloc(sizeof(tBTA_JV_API_CREATE_RECORD)); +tBTA_JV_STATUS BTA_JvCreateRecordByUser(void* user_data) { + tBTA_JV_API_CREATE_RECORD* p_msg = + (tBTA_JV_API_CREATE_RECORD*)osi_malloc(sizeof(tBTA_JV_API_CREATE_RECORD)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_JV_API_CREATE_RECORD_EVT; - p_msg->user_data = user_data; + p_msg->hdr.event = BTA_JV_API_CREATE_RECORD_EVT; + p_msg->user_data = user_data; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_JV_SUCCESS; + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -277,19 +261,18 @@ tBTA_JV_STATUS BTA_JvCreateRecordByUser(void *user_data) * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvDeleteRecord(uint32_t handle) -{ - tBTA_JV_API_ADD_ATTRIBUTE *p_msg = - (tBTA_JV_API_ADD_ATTRIBUTE *)osi_malloc(sizeof(tBTA_JV_API_ADD_ATTRIBUTE)); +tBTA_JV_STATUS BTA_JvDeleteRecord(uint32_t handle) { + tBTA_JV_API_ADD_ATTRIBUTE* p_msg = + (tBTA_JV_API_ADD_ATTRIBUTE*)osi_malloc(sizeof(tBTA_JV_API_ADD_ATTRIBUTE)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_JV_API_DELETE_RECORD_EVT; - p_msg->handle = handle; + p_msg->hdr.event = BTA_JV_API_DELETE_RECORD_EVT; + p_msg->handle = handle; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_JV_SUCCESS; + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -308,41 +291,41 @@ tBTA_JV_STATUS BTA_JvDeleteRecord(uint32_t handle) * ******************************************************************************/ tBTA_JV_STATUS BTA_JvL2capConnectLE(tBTA_SEC sec_mask, tBTA_JV_ROLE role, - const tL2CAP_ERTM_INFO *ertm_info, uint16_t remote_chan, - uint16_t rx_mtu, tL2CAP_CFG_INFO *cfg, - BD_ADDR peer_bd_addr, tBTA_JV_L2CAP_CBACK *p_cback, void *user_data) -{ - APPL_TRACE_API("%s", __func__); - - if (p_cback == NULL) - return BTA_JV_FAILURE; /* Nothing to do */ - - tBTA_JV_API_L2CAP_CONNECT *p_msg = - (tBTA_JV_API_L2CAP_CONNECT *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CONNECT)); - p_msg->hdr.event = BTA_JV_API_L2CAP_CONNECT_LE_EVT; - p_msg->sec_mask = sec_mask; - p_msg->role = role; - p_msg->remote_chan = remote_chan; - p_msg->rx_mtu = rx_mtu; - if (cfg != NULL) { - p_msg->has_cfg = true; - p_msg->cfg = *cfg; - } else { - p_msg->has_cfg = false; - } - if (ertm_info != NULL) { - p_msg->has_ertm_info = true; - p_msg->ertm_info = *ertm_info; - } else { - p_msg->has_ertm_info = false; - } - memcpy(p_msg->peer_bd_addr, peer_bd_addr, sizeof(BD_ADDR)); - p_msg->p_cback = p_cback; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); - - return BTA_JV_SUCCESS; + const tL2CAP_ERTM_INFO* ertm_info, + uint16_t remote_chan, uint16_t rx_mtu, + tL2CAP_CFG_INFO* cfg, BD_ADDR peer_bd_addr, + tBTA_JV_L2CAP_CBACK* p_cback, + void* user_data) { + APPL_TRACE_API("%s", __func__); + + if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */ + + tBTA_JV_API_L2CAP_CONNECT* p_msg = + (tBTA_JV_API_L2CAP_CONNECT*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CONNECT)); + p_msg->hdr.event = BTA_JV_API_L2CAP_CONNECT_LE_EVT; + p_msg->sec_mask = sec_mask; + p_msg->role = role; + p_msg->remote_chan = remote_chan; + p_msg->rx_mtu = rx_mtu; + if (cfg != NULL) { + p_msg->has_cfg = true; + p_msg->cfg = *cfg; + } else { + p_msg->has_cfg = false; + } + if (ertm_info != NULL) { + p_msg->has_ertm_info = true; + p_msg->ertm_info = *ertm_info; + } else { + p_msg->has_ertm_info = false; + } + memcpy(p_msg->peer_bd_addr, peer_bd_addr, sizeof(BD_ADDR)); + p_msg->p_cback = p_cback; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -360,43 +343,44 @@ tBTA_JV_STATUS BTA_JvL2capConnectLE(tBTA_SEC sec_mask, tBTA_JV_ROLE role, * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capConnect(int conn_type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, - const tL2CAP_ERTM_INFO *ertm_info, uint16_t remote_psm, - uint16_t rx_mtu, tL2CAP_CFG_INFO *cfg, - BD_ADDR peer_bd_addr, tBTA_JV_L2CAP_CBACK *p_cback, void *user_data) -{ - APPL_TRACE_API("%s", __func__); - - if (p_cback == NULL) - return BTA_JV_FAILURE; /* Nothing to do */ - - tBTA_JV_API_L2CAP_CONNECT *p_msg = - (tBTA_JV_API_L2CAP_CONNECT *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CONNECT)); - p_msg->hdr.event = BTA_JV_API_L2CAP_CONNECT_EVT; - p_msg->type = conn_type; - p_msg->sec_mask = sec_mask; - p_msg->role = role; - p_msg->remote_psm = remote_psm; - p_msg->rx_mtu = rx_mtu; - if (cfg != NULL) { - p_msg->has_cfg = true; - p_msg->cfg = *cfg; - } else { - p_msg->has_cfg = false; - } - if (ertm_info != NULL) { - p_msg->has_ertm_info = true; - p_msg->ertm_info = *ertm_info; - } else { - p_msg->has_ertm_info = false; - } - memcpy(p_msg->peer_bd_addr, peer_bd_addr, sizeof(BD_ADDR)); - p_msg->p_cback = p_cback; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); - - return BTA_JV_SUCCESS; +tBTA_JV_STATUS BTA_JvL2capConnect(int conn_type, tBTA_SEC sec_mask, + tBTA_JV_ROLE role, + const tL2CAP_ERTM_INFO* ertm_info, + uint16_t remote_psm, uint16_t rx_mtu, + tL2CAP_CFG_INFO* cfg, BD_ADDR peer_bd_addr, + tBTA_JV_L2CAP_CBACK* p_cback, + void* user_data) { + APPL_TRACE_API("%s", __func__); + + if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */ + + tBTA_JV_API_L2CAP_CONNECT* p_msg = + (tBTA_JV_API_L2CAP_CONNECT*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CONNECT)); + p_msg->hdr.event = BTA_JV_API_L2CAP_CONNECT_EVT; + p_msg->type = conn_type; + p_msg->sec_mask = sec_mask; + p_msg->role = role; + p_msg->remote_psm = remote_psm; + p_msg->rx_mtu = rx_mtu; + if (cfg != NULL) { + p_msg->has_cfg = true; + p_msg->cfg = *cfg; + } else { + p_msg->has_cfg = false; + } + if (ertm_info != NULL) { + p_msg->has_ertm_info = true; + p_msg->ertm_info = *ertm_info; + } else { + p_msg->has_ertm_info = false; + } + memcpy(p_msg->peer_bd_addr, peer_bd_addr, sizeof(BD_ADDR)); + p_msg->p_cback = p_cback; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -409,57 +393,57 @@ tBTA_JV_STATUS BTA_JvL2capConnect(int conn_type, tBTA_SEC sec_mask, tBTA_JV_ROLE * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capClose(uint32_t handle) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; +tBTA_JV_STATUS BTA_JvL2capClose(uint32_t handle) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - if (handle < BTA_JV_MAX_L2C_CONN && bta_jv_cb.l2c_cb[handle].p_cback) { - tBTA_JV_API_L2CAP_CLOSE *p_msg = - (tBTA_JV_API_L2CAP_CLOSE *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CLOSE)); - p_msg->hdr.event = BTA_JV_API_L2CAP_CLOSE_EVT; - p_msg->handle = handle; - p_msg->p_cb = &bta_jv_cb.l2c_cb[handle]; + if (handle < BTA_JV_MAX_L2C_CONN && bta_jv_cb.l2c_cb[handle].p_cback) { + tBTA_JV_API_L2CAP_CLOSE* p_msg = + (tBTA_JV_API_L2CAP_CLOSE*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CLOSE)); + p_msg->hdr.event = BTA_JV_API_L2CAP_CLOSE_EVT; + p_msg->handle = handle; + p_msg->p_cb = &bta_jv_cb.l2c_cb[handle]; - bta_sys_sendmsg(p_msg); - status = BTA_JV_SUCCESS; - } + bta_sys_sendmsg(p_msg); + status = BTA_JV_SUCCESS; + } - return status; + return status; } /******************************************************************************* * * Function BTA_JvL2capCloseLE * - * Description This function closes an L2CAP client connection for Fixed Channels + * Description This function closes an L2CAP client connection for Fixed + *Channels * Function is idempotent and no callbacks are called! * * Returns BTA_JV_SUCCESS, if the request is being processed. * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capCloseLE(uint32_t handle) -{ - tBTA_JV_API_L2CAP_CLOSE *p_msg = - (tBTA_JV_API_L2CAP_CLOSE *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CLOSE)); +tBTA_JV_STATUS BTA_JvL2capCloseLE(uint32_t handle) { + tBTA_JV_API_L2CAP_CLOSE* p_msg = + (tBTA_JV_API_L2CAP_CLOSE*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_CLOSE)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_JV_API_L2CAP_CLOSE_FIXED_EVT; - p_msg->handle = handle; + p_msg->hdr.event = BTA_JV_API_L2CAP_CLOSE_FIXED_EVT; + p_msg->handle = handle; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_JV_SUCCESS; + return BTA_JV_SUCCESS; } /******************************************************************************* * * Function BTA_JvL2capStartServer * - * Description This function starts an L2CAP server and listens for an L2CAP + * Description This function starts an L2CAP server and listens for an + *L2CAP * connection from a remote Bluetooth device. When the server * is started successfully, tBTA_JV_L2CAP_CBACK is called with * BTA_JV_L2CAP_START_EVT. When the connection is established, @@ -469,48 +453,48 @@ tBTA_JV_STATUS BTA_JvL2capCloseLE(uint32_t handle) * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capStartServer(int conn_type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, - const tL2CAP_ERTM_INFO *ertm_info,uint16_t local_psm, uint16_t rx_mtu, tL2CAP_CFG_INFO *cfg, - tBTA_JV_L2CAP_CBACK *p_cback, void *user_data) -{ - APPL_TRACE_API("%s", __func__); - - if (p_cback == NULL) - return BTA_JV_FAILURE; /* Nothing to do */ - - tBTA_JV_API_L2CAP_SERVER *p_msg = - (tBTA_JV_API_L2CAP_SERVER *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); - p_msg->hdr.event = BTA_JV_API_L2CAP_START_SERVER_EVT; - p_msg->type = conn_type; - p_msg->sec_mask = sec_mask; - p_msg->role = role; - p_msg->local_psm = local_psm; - p_msg->rx_mtu = rx_mtu; - if (cfg != NULL) { - p_msg->has_cfg = true; - p_msg->cfg = *cfg; - } else { - p_msg->has_cfg = false; - } - if (ertm_info != NULL) { - p_msg->has_ertm_info = true; - p_msg->ertm_info = *ertm_info; - } else { - p_msg->has_ertm_info = false; - } - p_msg->p_cback = p_cback; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); - - return BTA_JV_SUCCESS; +tBTA_JV_STATUS BTA_JvL2capStartServer( + int conn_type, tBTA_SEC sec_mask, tBTA_JV_ROLE role, + const tL2CAP_ERTM_INFO* ertm_info, uint16_t local_psm, uint16_t rx_mtu, + tL2CAP_CFG_INFO* cfg, tBTA_JV_L2CAP_CBACK* p_cback, void* user_data) { + APPL_TRACE_API("%s", __func__); + + if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */ + + tBTA_JV_API_L2CAP_SERVER* p_msg = + (tBTA_JV_API_L2CAP_SERVER*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); + p_msg->hdr.event = BTA_JV_API_L2CAP_START_SERVER_EVT; + p_msg->type = conn_type; + p_msg->sec_mask = sec_mask; + p_msg->role = role; + p_msg->local_psm = local_psm; + p_msg->rx_mtu = rx_mtu; + if (cfg != NULL) { + p_msg->has_cfg = true; + p_msg->cfg = *cfg; + } else { + p_msg->has_cfg = false; + } + if (ertm_info != NULL) { + p_msg->has_ertm_info = true; + p_msg->ertm_info = *ertm_info; + } else { + p_msg->has_ertm_info = false; + } + p_msg->p_cback = p_cback; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* * * Function BTA_JvL2capStartServerLE * - * Description This function starts an LE L2CAP server and listens for an L2CAP + * Description This function starts an LE L2CAP server and listens for an + *L2CAP * connection from a remote Bluetooth device. When the server * is started successfully, tBTA_JV_L2CAP_CBACK is called with * BTA_JV_L2CAP_START_EVT. When the connection is established, @@ -521,39 +505,40 @@ tBTA_JV_STATUS BTA_JvL2capStartServer(int conn_type, tBTA_SEC sec_mask, tBTA_JV_ * ******************************************************************************/ tBTA_JV_STATUS BTA_JvL2capStartServerLE(tBTA_SEC sec_mask, tBTA_JV_ROLE role, - const tL2CAP_ERTM_INFO *ertm_info,uint16_t local_chan, uint16_t rx_mtu, tL2CAP_CFG_INFO *cfg, - tBTA_JV_L2CAP_CBACK *p_cback, void *user_data) -{ - APPL_TRACE_API("%s", __func__); - - if (p_cback == NULL) - return BTA_JV_FAILURE; /* Nothing to do */ - - tBTA_JV_API_L2CAP_SERVER *p_msg = - (tBTA_JV_API_L2CAP_SERVER *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); - p_msg->hdr.event = BTA_JV_API_L2CAP_START_SERVER_LE_EVT; - p_msg->sec_mask = sec_mask; - p_msg->role = role; - p_msg->local_chan = local_chan; - p_msg->rx_mtu = rx_mtu; - if (cfg != NULL) { - p_msg->has_cfg = true; - p_msg->cfg = *cfg; - } else { - p_msg->has_cfg = false; - } - if (ertm_info != NULL) { - p_msg->has_ertm_info = true; - p_msg->ertm_info = *ertm_info; - } else { - p_msg->has_ertm_info = false; - } - p_msg->p_cback = p_cback; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); - - return BTA_JV_SUCCESS; + const tL2CAP_ERTM_INFO* ertm_info, + uint16_t local_chan, uint16_t rx_mtu, + tL2CAP_CFG_INFO* cfg, + tBTA_JV_L2CAP_CBACK* p_cback, + void* user_data) { + APPL_TRACE_API("%s", __func__); + + if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */ + + tBTA_JV_API_L2CAP_SERVER* p_msg = + (tBTA_JV_API_L2CAP_SERVER*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); + p_msg->hdr.event = BTA_JV_API_L2CAP_START_SERVER_LE_EVT; + p_msg->sec_mask = sec_mask; + p_msg->role = role; + p_msg->local_chan = local_chan; + p_msg->rx_mtu = rx_mtu; + if (cfg != NULL) { + p_msg->has_cfg = true; + p_msg->cfg = *cfg; + } else { + p_msg->has_cfg = false; + } + if (ertm_info != NULL) { + p_msg->has_ertm_info = true; + p_msg->ertm_info = *ertm_info; + } else { + p_msg->has_ertm_info = false; + } + p_msg->p_cback = p_cback; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -567,45 +552,44 @@ tBTA_JV_STATUS BTA_JvL2capStartServerLE(tBTA_SEC sec_mask, tBTA_JV_ROLE role, * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capStopServer(uint16_t local_psm, void *user_data) -{ - APPL_TRACE_API("%s", __func__); - - tBTA_JV_API_L2CAP_SERVER *p_msg = - (tBTA_JV_API_L2CAP_SERVER *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); - p_msg->hdr.event = BTA_JV_API_L2CAP_STOP_SERVER_EVT; - p_msg->local_psm = local_psm; - p_msg->user_data = user_data; +tBTA_JV_STATUS BTA_JvL2capStopServer(uint16_t local_psm, void* user_data) { + APPL_TRACE_API("%s", __func__); - bta_sys_sendmsg(p_msg); + tBTA_JV_API_L2CAP_SERVER* p_msg = + (tBTA_JV_API_L2CAP_SERVER*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); + p_msg->hdr.event = BTA_JV_API_L2CAP_STOP_SERVER_EVT; + p_msg->local_psm = local_psm; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); - return BTA_JV_SUCCESS; + return BTA_JV_SUCCESS; } /******************************************************************************* * * Function BTA_JvL2capStopServerLE * - * Description This function stops the LE L2CAP server. If the server has an + * Description This function stops the LE L2CAP server. If the server has + *an * active connection, it would be closed. * * Returns BTA_JV_SUCCESS, if the request is being processed. * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capStopServerLE(uint16_t local_chan, void *user_data) -{ - APPL_TRACE_API("%s", __func__); - - tBTA_JV_API_L2CAP_SERVER *p_msg = - (tBTA_JV_API_L2CAP_SERVER *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); - p_msg->hdr.event = BTA_JV_API_L2CAP_STOP_SERVER_LE_EVT; - p_msg->local_chan = local_chan; - p_msg->user_data = user_data; +tBTA_JV_STATUS BTA_JvL2capStopServerLE(uint16_t local_chan, void* user_data) { + APPL_TRACE_API("%s", __func__); - bta_sys_sendmsg(p_msg); + tBTA_JV_API_L2CAP_SERVER* p_msg = + (tBTA_JV_API_L2CAP_SERVER*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_SERVER)); + p_msg->hdr.event = BTA_JV_API_L2CAP_STOP_SERVER_LE_EVT; + p_msg->local_chan = local_chan; + p_msg->user_data = user_data; - return BTA_JV_SUCCESS; + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -622,32 +606,30 @@ on * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capRead(uint32_t handle, uint32_t req_id, uint8_t *p_data, uint16_t len) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; - tBTA_JV_L2CAP_READ evt_data; - - APPL_TRACE_API( "%s", __func__); - - - if (handle < BTA_JV_MAX_L2C_CONN && bta_jv_cb.l2c_cb[handle].p_cback) - { - status = BTA_JV_SUCCESS; - evt_data.status = BTA_JV_FAILURE; - evt_data.handle = handle; - evt_data.req_id = req_id; - evt_data.p_data = p_data; - evt_data.len = 0; - - if (BT_PASS == GAP_ConnReadData((uint16_t)handle, p_data, len, &evt_data.len)) - { - evt_data.status = BTA_JV_SUCCESS; - } - bta_jv_cb.l2c_cb[handle].p_cback( - BTA_JV_L2CAP_READ_EVT, (tBTA_JV *)&evt_data, bta_jv_cb.l2c_cb[handle].user_data); +tBTA_JV_STATUS BTA_JvL2capRead(uint32_t handle, uint32_t req_id, + uint8_t* p_data, uint16_t len) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; + tBTA_JV_L2CAP_READ evt_data; + + APPL_TRACE_API("%s", __func__); + + if (handle < BTA_JV_MAX_L2C_CONN && bta_jv_cb.l2c_cb[handle].p_cback) { + status = BTA_JV_SUCCESS; + evt_data.status = BTA_JV_FAILURE; + evt_data.handle = handle; + evt_data.req_id = req_id; + evt_data.p_data = p_data; + evt_data.len = 0; + + if (BT_PASS == + GAP_ConnReadData((uint16_t)handle, p_data, len, &evt_data.len)) { + evt_data.status = BTA_JV_SUCCESS; } + bta_jv_cb.l2c_cb[handle].p_cback(BTA_JV_L2CAP_READ_EVT, (tBTA_JV*)&evt_data, + bta_jv_cb.l2c_cb[handle].user_data); + } - return(status); + return (status); } /******************************************************************************* @@ -661,24 +643,21 @@ tBTA_JV_STATUS BTA_JvL2capRead(uint32_t handle, uint32_t req_id, uint8_t *p_data * BTA_JV_FAILURE, if error. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capReady(uint32_t handle, uint32_t *p_data_size) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; - - APPL_TRACE_API( "%s: %d", __func__, handle); - if (p_data_size && handle < BTA_JV_MAX_L2C_CONN && bta_jv_cb.l2c_cb[handle].p_cback) - { - *p_data_size = 0; - if(BT_PASS == GAP_GetRxQueueCnt((uint16_t)handle, p_data_size) ) - { - status = BTA_JV_SUCCESS; - } +tBTA_JV_STATUS BTA_JvL2capReady(uint32_t handle, uint32_t* p_data_size) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; + + APPL_TRACE_API("%s: %d", __func__, handle); + if (p_data_size && handle < BTA_JV_MAX_L2C_CONN && + bta_jv_cb.l2c_cb[handle].p_cback) { + *p_data_size = 0; + if (BT_PASS == GAP_GetRxQueueCnt((uint16_t)handle, p_data_size)) { + status = BTA_JV_SUCCESS; } + } - return(status); + return (status); } - /******************************************************************************* * * Function BTA_JvL2capWrite @@ -692,30 +671,30 @@ tBTA_JV_STATUS BTA_JvL2capReady(uint32_t handle, uint32_t *p_data_size) * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capWrite(uint32_t handle, uint32_t req_id, uint8_t *p_data, - uint16_t len, void *user_data) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; - - APPL_TRACE_API("%s", __func__); - - if (handle < BTA_JV_MAX_L2C_CONN && bta_jv_cb.l2c_cb[handle].p_cback) { - tBTA_JV_API_L2CAP_WRITE *p_msg = - (tBTA_JV_API_L2CAP_WRITE *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_WRITE)); - p_msg->hdr.event = BTA_JV_API_L2CAP_WRITE_EVT; - p_msg->handle = handle; - p_msg->req_id = req_id; - p_msg->p_data = p_data; - p_msg->p_cb = &bta_jv_cb.l2c_cb[handle]; - p_msg->len = len; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); - - status = BTA_JV_SUCCESS; - } +tBTA_JV_STATUS BTA_JvL2capWrite(uint32_t handle, uint32_t req_id, + uint8_t* p_data, uint16_t len, + void* user_data) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; - return status; + APPL_TRACE_API("%s", __func__); + + if (handle < BTA_JV_MAX_L2C_CONN && bta_jv_cb.l2c_cb[handle].p_cback) { + tBTA_JV_API_L2CAP_WRITE* p_msg = + (tBTA_JV_API_L2CAP_WRITE*)osi_malloc(sizeof(tBTA_JV_API_L2CAP_WRITE)); + p_msg->hdr.event = BTA_JV_API_L2CAP_WRITE_EVT; + p_msg->handle = handle; + p_msg->req_id = req_id; + p_msg->p_data = p_data; + p_msg->p_cb = &bta_jv_cb.l2c_cb[handle]; + p_msg->len = len; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); + + status = BTA_JV_SUCCESS; + } + + return status; } /******************************************************************************* @@ -731,26 +710,29 @@ tBTA_JV_STATUS BTA_JvL2capWrite(uint32_t handle, uint32_t req_id, uint8_t *p_dat * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvL2capWriteFixed(uint16_t channel, BD_ADDR *addr, uint32_t req_id, - tBTA_JV_L2CAP_CBACK *p_cback, uint8_t *p_data, uint16_t len, void *user_data) -{ - tBTA_JV_API_L2CAP_WRITE_FIXED *p_msg = - (tBTA_JV_API_L2CAP_WRITE_FIXED *)osi_malloc(sizeof(tBTA_JV_API_L2CAP_WRITE_FIXED)); - - APPL_TRACE_API("%s", __func__); - - p_msg->hdr.event = BTA_JV_API_L2CAP_WRITE_FIXED_EVT; - p_msg->channel = channel; - memcpy(p_msg->addr, addr, sizeof(p_msg->addr)); - p_msg->req_id = req_id; - p_msg->p_data = p_data; - p_msg->p_cback = p_cback; - p_msg->len = len; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); - - return BTA_JV_SUCCESS; +tBTA_JV_STATUS BTA_JvL2capWriteFixed(uint16_t channel, BD_ADDR* addr, + uint32_t req_id, + tBTA_JV_L2CAP_CBACK* p_cback, + uint8_t* p_data, uint16_t len, + void* user_data) { + tBTA_JV_API_L2CAP_WRITE_FIXED* p_msg = + (tBTA_JV_API_L2CAP_WRITE_FIXED*)osi_malloc( + sizeof(tBTA_JV_API_L2CAP_WRITE_FIXED)); + + APPL_TRACE_API("%s", __func__); + + p_msg->hdr.event = BTA_JV_API_L2CAP_WRITE_FIXED_EVT; + p_msg->channel = channel; + memcpy(p_msg->addr, addr, sizeof(p_msg->addr)); + p_msg->req_id = req_id; + p_msg->p_data = p_data; + p_msg->p_cback = p_cback; + p_msg->len = len; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -760,7 +742,8 @@ tBTA_JV_STATUS BTA_JvL2capWriteFixed(uint16_t channel, BD_ADDR *addr, uint32_t r * Description This function makes an RFCOMM conection to a remote BD * Address. * When the connection is initiated or failed to initiate, - * tBTA_JV_RFCOMM_CBACK is called with BTA_JV_RFCOMM_CL_INIT_EVT + * tBTA_JV_RFCOMM_CBACK is called with + *BTA_JV_RFCOMM_CL_INIT_EVT * When the connection is established or failed, * tBTA_JV_RFCOMM_CBACK is called with BTA_JV_RFCOMM_OPEN_EVT * @@ -768,28 +751,27 @@ tBTA_JV_STATUS BTA_JvL2capWriteFixed(uint16_t channel, BD_ADDR *addr, uint32_t r * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, - tBTA_JV_ROLE role, uint8_t remote_scn, BD_ADDR peer_bd_addr, - tBTA_JV_RFCOMM_CBACK *p_cback, void* user_data) -{ - APPL_TRACE_API("%s", __func__); - - if (p_cback == NULL) - return BTA_JV_FAILURE; /* Nothing to do */ - - tBTA_JV_API_RFCOMM_CONNECT *p_msg = - (tBTA_JV_API_RFCOMM_CONNECT *)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_CONNECT)); - p_msg->hdr.event = BTA_JV_API_RFCOMM_CONNECT_EVT; - p_msg->sec_mask = sec_mask; - p_msg->role = role; - p_msg->remote_scn = remote_scn; - memcpy(p_msg->peer_bd_addr, peer_bd_addr, sizeof(BD_ADDR)); - p_msg->p_cback = p_cback; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); - - return BTA_JV_SUCCESS; +tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, tBTA_JV_ROLE role, + uint8_t remote_scn, BD_ADDR peer_bd_addr, + tBTA_JV_RFCOMM_CBACK* p_cback, + void* user_data) { + APPL_TRACE_API("%s", __func__); + + if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */ + + tBTA_JV_API_RFCOMM_CONNECT* p_msg = (tBTA_JV_API_RFCOMM_CONNECT*)osi_malloc( + sizeof(tBTA_JV_API_RFCOMM_CONNECT)); + p_msg->hdr.event = BTA_JV_API_RFCOMM_CONNECT_EVT; + p_msg->sec_mask = sec_mask; + p_msg->role = role; + p_msg->remote_scn = remote_scn; + memcpy(p_msg->peer_bd_addr, peer_bd_addr, sizeof(BD_ADDR)); + p_msg->p_cback = p_cback; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -802,30 +784,29 @@ tBTA_JV_STATUS BTA_JvRfcommConnect(tBTA_SEC sec_mask, * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvRfcommClose(uint32_t handle, void *user_data) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; - uint32_t hi = ((handle & BTA_JV_RFC_HDL_MASK)&~BTA_JV_RFCOMM_MASK) - 1; - uint32_t si = BTA_JV_RFC_HDL_TO_SIDX(handle); - - APPL_TRACE_API("%s", __func__); - - if (hi < BTA_JV_MAX_RFC_CONN && bta_jv_cb.rfc_cb[hi].p_cback && - si < BTA_JV_MAX_RFC_SR_SESSION && bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) { - tBTA_JV_API_RFCOMM_CLOSE *p_msg = - (tBTA_JV_API_RFCOMM_CLOSE *)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_CLOSE)); - p_msg->hdr.event = BTA_JV_API_RFCOMM_CLOSE_EVT; - p_msg->handle = handle; - p_msg->p_cb = &bta_jv_cb.rfc_cb[hi]; - p_msg->p_pcb = &bta_jv_cb.port_cb[p_msg->p_cb->rfc_hdl[si] - 1]; - p_msg->user_data = user_data; - - bta_sys_sendmsg(p_msg); - - status = BTA_JV_SUCCESS; - } +tBTA_JV_STATUS BTA_JvRfcommClose(uint32_t handle, void* user_data) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; + uint32_t hi = ((handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1; + uint32_t si = BTA_JV_RFC_HDL_TO_SIDX(handle); + + APPL_TRACE_API("%s", __func__); + + if (hi < BTA_JV_MAX_RFC_CONN && bta_jv_cb.rfc_cb[hi].p_cback && + si < BTA_JV_MAX_RFC_SR_SESSION && bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) { + tBTA_JV_API_RFCOMM_CLOSE* p_msg = + (tBTA_JV_API_RFCOMM_CLOSE*)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_CLOSE)); + p_msg->hdr.event = BTA_JV_API_RFCOMM_CLOSE_EVT; + p_msg->handle = handle; + p_msg->p_cb = &bta_jv_cb.rfc_cb[hi]; + p_msg->p_pcb = &bta_jv_cb.port_cb[p_msg->p_cb->rfc_hdl[si] - 1]; + p_msg->user_data = user_data; + + bta_sys_sendmsg(p_msg); - return status; + status = BTA_JV_SUCCESS; + } + + return status; } /******************************************************************************* @@ -843,34 +824,33 @@ tBTA_JV_STATUS BTA_JvRfcommClose(uint32_t handle, void *user_data) * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvRfcommStartServer(tBTA_SEC sec_mask, - tBTA_JV_ROLE role, uint8_t local_scn, uint8_t max_session, - tBTA_JV_RFCOMM_CBACK *p_cback, void* user_data) -{ - APPL_TRACE_API("%s", __func__); - - if (p_cback == NULL) - return BTA_JV_FAILURE; /* Nothing to do */ - - tBTA_JV_API_RFCOMM_SERVER *p_msg = - (tBTA_JV_API_RFCOMM_SERVER *)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_SERVER)); - if (max_session == 0) - max_session = 1; - if (max_session > BTA_JV_MAX_RFC_SR_SESSION) { - APPL_TRACE_DEBUG( "max_session is too big. use max (%d)", max_session, BTA_JV_MAX_RFC_SR_SESSION); - max_session = BTA_JV_MAX_RFC_SR_SESSION; - } - p_msg->hdr.event = BTA_JV_API_RFCOMM_START_SERVER_EVT; - p_msg->sec_mask = sec_mask; - p_msg->role = role; - p_msg->local_scn = local_scn; - p_msg->max_session = max_session; - p_msg->p_cback = p_cback; - p_msg->user_data = user_data; //caller's private data - - bta_sys_sendmsg(p_msg); - - return BTA_JV_SUCCESS; +tBTA_JV_STATUS BTA_JvRfcommStartServer(tBTA_SEC sec_mask, tBTA_JV_ROLE role, + uint8_t local_scn, uint8_t max_session, + tBTA_JV_RFCOMM_CBACK* p_cback, + void* user_data) { + APPL_TRACE_API("%s", __func__); + + if (p_cback == NULL) return BTA_JV_FAILURE; /* Nothing to do */ + + tBTA_JV_API_RFCOMM_SERVER* p_msg = + (tBTA_JV_API_RFCOMM_SERVER*)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_SERVER)); + if (max_session == 0) max_session = 1; + if (max_session > BTA_JV_MAX_RFC_SR_SESSION) { + APPL_TRACE_DEBUG("max_session is too big. use max (%d)", max_session, + BTA_JV_MAX_RFC_SR_SESSION); + max_session = BTA_JV_MAX_RFC_SR_SESSION; + } + p_msg->hdr.event = BTA_JV_API_RFCOMM_START_SERVER_EVT; + p_msg->sec_mask = sec_mask; + p_msg->role = role; + p_msg->local_scn = local_scn; + p_msg->max_session = max_session; + p_msg->p_cback = p_cback; + p_msg->user_data = user_data; // caller's private data + + bta_sys_sendmsg(p_msg); + + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -884,20 +864,19 @@ tBTA_JV_STATUS BTA_JvRfcommStartServer(tBTA_SEC sec_mask, * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvRfcommStopServer(uint32_t handle, void * user_data) -{ - tBTA_JV_API_RFCOMM_SERVER *p_msg = - (tBTA_JV_API_RFCOMM_SERVER *)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_SERVER)); +tBTA_JV_STATUS BTA_JvRfcommStopServer(uint32_t handle, void* user_data) { + tBTA_JV_API_RFCOMM_SERVER* p_msg = + (tBTA_JV_API_RFCOMM_SERVER*)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_SERVER)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_JV_API_RFCOMM_STOP_SERVER_EVT; - p_msg->handle = handle; - p_msg->user_data = user_data; //caller's private data + p_msg->hdr.event = BTA_JV_API_RFCOMM_STOP_SERVER_EVT; + p_msg->handle = handle; + p_msg->user_data = user_data; // caller's private data - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_JV_SUCCESS; + return BTA_JV_SUCCESS; } /******************************************************************************* @@ -910,16 +889,15 @@ tBTA_JV_STATUS BTA_JvRfcommStopServer(uint32_t handle, void * user_data) * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -uint16_t BTA_JvRfcommGetPortHdl(uint32_t handle) -{ - uint32_t hi = ((handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1; - uint32_t si = BTA_JV_RFC_HDL_TO_SIDX(handle); - - if (hi < BTA_JV_MAX_RFC_CONN && - si < BTA_JV_MAX_RFC_SR_SESSION && bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) - return bta_jv_cb.port_cb[bta_jv_cb.rfc_cb[hi].rfc_hdl[si] - 1].port_handle; - else - return 0xffff; +uint16_t BTA_JvRfcommGetPortHdl(uint32_t handle) { + uint32_t hi = ((handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1; + uint32_t si = BTA_JV_RFC_HDL_TO_SIDX(handle); + + if (hi < BTA_JV_MAX_RFC_CONN && si < BTA_JV_MAX_RFC_SR_SESSION && + bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) + return bta_jv_cb.port_cb[bta_jv_cb.rfc_cb[hi].rfc_hdl[si] - 1].port_handle; + else + return 0xffff; } /******************************************************************************* @@ -932,66 +910,69 @@ uint16_t BTA_JvRfcommGetPortHdl(uint32_t handle) * BTA_JV_FAILURE, otherwise. * ******************************************************************************/ -tBTA_JV_STATUS BTA_JvRfcommWrite(uint32_t handle, uint32_t req_id) -{ - tBTA_JV_STATUS status = BTA_JV_FAILURE; - uint32_t hi = ((handle & BTA_JV_RFC_HDL_MASK)&~BTA_JV_RFCOMM_MASK) - 1; - uint32_t si = BTA_JV_RFC_HDL_TO_SIDX(handle); - - APPL_TRACE_API("%s", __func__); - - APPL_TRACE_DEBUG( "handle:0x%x, hi:%d, si:%d", handle, hi, si); - if (hi < BTA_JV_MAX_RFC_CONN && bta_jv_cb.rfc_cb[hi].p_cback && - si < BTA_JV_MAX_RFC_SR_SESSION && bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) { - tBTA_JV_API_RFCOMM_WRITE *p_msg = - (tBTA_JV_API_RFCOMM_WRITE *)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_WRITE)); - p_msg->hdr.event = BTA_JV_API_RFCOMM_WRITE_EVT; - p_msg->handle = handle; - p_msg->req_id = req_id; - p_msg->p_cb = &bta_jv_cb.rfc_cb[hi]; - p_msg->p_pcb = &bta_jv_cb.port_cb[p_msg->p_cb->rfc_hdl[si] - 1]; - APPL_TRACE_API( "write ok"); - - bta_sys_sendmsg(p_msg); - status = BTA_JV_SUCCESS; - } +tBTA_JV_STATUS BTA_JvRfcommWrite(uint32_t handle, uint32_t req_id) { + tBTA_JV_STATUS status = BTA_JV_FAILURE; + uint32_t hi = ((handle & BTA_JV_RFC_HDL_MASK) & ~BTA_JV_RFCOMM_MASK) - 1; + uint32_t si = BTA_JV_RFC_HDL_TO_SIDX(handle); + + APPL_TRACE_API("%s", __func__); + + APPL_TRACE_DEBUG("handle:0x%x, hi:%d, si:%d", handle, hi, si); + if (hi < BTA_JV_MAX_RFC_CONN && bta_jv_cb.rfc_cb[hi].p_cback && + si < BTA_JV_MAX_RFC_SR_SESSION && bta_jv_cb.rfc_cb[hi].rfc_hdl[si]) { + tBTA_JV_API_RFCOMM_WRITE* p_msg = + (tBTA_JV_API_RFCOMM_WRITE*)osi_malloc(sizeof(tBTA_JV_API_RFCOMM_WRITE)); + p_msg->hdr.event = BTA_JV_API_RFCOMM_WRITE_EVT; + p_msg->handle = handle; + p_msg->req_id = req_id; + p_msg->p_cb = &bta_jv_cb.rfc_cb[hi]; + p_msg->p_pcb = &bta_jv_cb.port_cb[p_msg->p_cb->rfc_hdl[si] - 1]; + APPL_TRACE_API("write ok"); - return status; -} + bta_sys_sendmsg(p_msg); + status = BTA_JV_SUCCESS; + } + return status; +} /******************************************************************************* * * Function BTA_JVSetPmProfile * - * Description This function set or free power mode profile for different JV application + * Description This function set or free power mode profile for different JV + *application * * Parameters: handle, JV handle from RFCOMM or L2CAP - * app_id: app specific pm ID, can be BTA_JV_PM_ALL, see bta_dm_cfg.c for details - * BTA_JV_PM_ID_CLEAR: removes pm management on the handle. init_st is ignored and + * app_id: app specific pm ID, can be BTA_JV_PM_ALL, see + *bta_dm_cfg.c for details + * BTA_JV_PM_ID_CLEAR: removes pm management on the handle. init_st + *is ignored and * BTA_JV_CONN_CLOSE is called implicitely - * init_st: state after calling this API. typically it should be BTA_JV_CONN_OPEN + * init_st: state after calling this API. typically it should be + *BTA_JV_CONN_OPEN * * Returns BTA_JV_SUCCESS, if the request is being processed. * BTA_JV_FAILURE, otherwise. * - * NOTE: BTA_JV_PM_ID_CLEAR: In general no need to be called as jv pm calls automatically + * NOTE: BTA_JV_PM_ID_CLEAR: In general no need to be called as jv pm + *calls automatically * BTA_JV_CONN_CLOSE to remove in case of connection close! * *******************************************************************************/ -tBTA_JV_STATUS BTA_JvSetPmProfile(uint32_t handle, tBTA_JV_PM_ID app_id, tBTA_JV_CONN_STATE init_st) -{ - tBTA_JV_API_SET_PM_PROFILE *p_msg = - (tBTA_JV_API_SET_PM_PROFILE *)osi_malloc(sizeof(tBTA_JV_API_SET_PM_PROFILE)); +tBTA_JV_STATUS BTA_JvSetPmProfile(uint32_t handle, tBTA_JV_PM_ID app_id, + tBTA_JV_CONN_STATE init_st) { + tBTA_JV_API_SET_PM_PROFILE* p_msg = (tBTA_JV_API_SET_PM_PROFILE*)osi_malloc( + sizeof(tBTA_JV_API_SET_PM_PROFILE)); - APPL_TRACE_API("%s handle:0x%x, app_id:%d", __func__, handle, app_id); + APPL_TRACE_API("%s handle:0x%x, app_id:%d", __func__, handle, app_id); - p_msg->hdr.event = BTA_JV_API_SET_PM_PROFILE_EVT; - p_msg->handle = handle; - p_msg->app_id = app_id; - p_msg->init_st = init_st; + p_msg->hdr.event = BTA_JV_API_SET_PM_PROFILE_EVT; + p_msg->handle = handle; + p_msg->app_id = app_id; + p_msg->init_st = init_st; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_JV_SUCCESS; + return BTA_JV_SUCCESS; } diff --git a/system/bta/jv/bta_jv_cfg.cc b/system/bta/jv/bta_jv_cfg.cc index 0acc8444d71..b43b03569ec 100644 --- a/system/bta/jv/bta_jv_cfg.cc +++ b/system/bta/jv/bta_jv_cfg.cc @@ -29,30 +29,30 @@ #include "bta_jv_api.h" #ifndef BTA_JV_SDP_DB_SIZE -#define BTA_JV_SDP_DB_SIZE 4500 +#define BTA_JV_SDP_DB_SIZE 4500 #endif #ifndef BTA_JV_SDP_RAW_DATA_SIZE -#define BTA_JV_SDP_RAW_DATA_SIZE 1800 +#define BTA_JV_SDP_RAW_DATA_SIZE 1800 #endif /* The platform may choose to use dynamic memory for these data buffers. * p_bta_jv_cfg->p_sdp_db must be allocated/stay allocated * between BTA_JvEnable and BTA_JvDisable - * p_bta_jv_cfg->p_sdp_raw_data can be allocated before calling BTA_JvStartDiscovery + * p_bta_jv_cfg->p_sdp_raw_data can be allocated before calling + * BTA_JvStartDiscovery * it can be de-allocated after the last call to access the database */ static uint8_t bta_jv_sdp_raw_data[BTA_JV_SDP_RAW_DATA_SIZE]; -static uint8_t __attribute__ ((aligned(4))) bta_jv_sdp_db_data[BTA_JV_SDP_DB_SIZE]; +static uint8_t __attribute__((aligned(4))) +bta_jv_sdp_db_data[BTA_JV_SDP_DB_SIZE]; /* JV configuration structure */ -const tBTA_JV_CFG bta_jv_cfg = -{ - BTA_JV_SDP_RAW_DATA_SIZE, /* The size of p_sdp_raw_data */ - BTA_JV_SDP_DB_SIZE, /* The size of p_sdp_db_data */ - bta_jv_sdp_raw_data, /* The data buffer to keep raw data */ - (tSDP_DISCOVERY_DB *)bta_jv_sdp_db_data /* The data buffer to keep SDP database */ +const tBTA_JV_CFG bta_jv_cfg = { + BTA_JV_SDP_RAW_DATA_SIZE, /* The size of p_sdp_raw_data */ + BTA_JV_SDP_DB_SIZE, /* The size of p_sdp_db_data */ + bta_jv_sdp_raw_data, /* The data buffer to keep raw data */ + (tSDP_DISCOVERY_DB*) + bta_jv_sdp_db_data /* The data buffer to keep SDP database */ }; -tBTA_JV_CFG *p_bta_jv_cfg = (tBTA_JV_CFG *) &bta_jv_cfg; - - +tBTA_JV_CFG* p_bta_jv_cfg = (tBTA_JV_CFG*)&bta_jv_cfg; diff --git a/system/bta/jv/bta_jv_int.h b/system/bta/jv/bta_jv_int.h index 2f25f06edd5..8c9144c59f6 100644 --- a/system/bta/jv/bta_jv_int.h +++ b/system/bta/jv/bta_jv_int.h @@ -24,411 +24,385 @@ #ifndef BTA_JV_INT_H #define BTA_JV_INT_H -#include "bta_sys.h" #include "bta_api.h" #include "bta_jv_api.h" -#include "rfcdefs.h" +#include "bta_sys.h" #include "port_api.h" +#include "rfcdefs.h" /***************************************************************************** * Constants ****************************************************************************/ -enum -{ - /* these events are handled by the state machine */ - BTA_JV_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_JV), - BTA_JV_API_DISABLE_EVT, - BTA_JV_API_GET_CHANNEL_EVT, - BTA_JV_API_FREE_SCN_EVT, - BTA_JV_API_START_DISCOVERY_EVT, - BTA_JV_API_CREATE_RECORD_EVT, - BTA_JV_API_DELETE_RECORD_EVT, - BTA_JV_API_L2CAP_CONNECT_EVT, - BTA_JV_API_L2CAP_CLOSE_EVT, - BTA_JV_API_L2CAP_START_SERVER_EVT, - BTA_JV_API_L2CAP_STOP_SERVER_EVT, - BTA_JV_API_L2CAP_READ_EVT, - BTA_JV_API_L2CAP_WRITE_EVT, - BTA_JV_API_RFCOMM_CONNECT_EVT, - BTA_JV_API_RFCOMM_CLOSE_EVT, - BTA_JV_API_RFCOMM_START_SERVER_EVT, - BTA_JV_API_RFCOMM_STOP_SERVER_EVT, - BTA_JV_API_RFCOMM_WRITE_EVT, - BTA_JV_API_SET_PM_PROFILE_EVT, - BTA_JV_API_PM_STATE_CHANGE_EVT, - BTA_JV_API_L2CAP_CONNECT_LE_EVT, - BTA_JV_API_L2CAP_START_SERVER_LE_EVT, - BTA_JV_API_L2CAP_STOP_SERVER_LE_EVT, - BTA_JV_API_L2CAP_WRITE_FIXED_EVT, - BTA_JV_API_L2CAP_CLOSE_FIXED_EVT, - BTA_JV_MAX_INT_EVT +enum { + /* these events are handled by the state machine */ + BTA_JV_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_JV), + BTA_JV_API_DISABLE_EVT, + BTA_JV_API_GET_CHANNEL_EVT, + BTA_JV_API_FREE_SCN_EVT, + BTA_JV_API_START_DISCOVERY_EVT, + BTA_JV_API_CREATE_RECORD_EVT, + BTA_JV_API_DELETE_RECORD_EVT, + BTA_JV_API_L2CAP_CONNECT_EVT, + BTA_JV_API_L2CAP_CLOSE_EVT, + BTA_JV_API_L2CAP_START_SERVER_EVT, + BTA_JV_API_L2CAP_STOP_SERVER_EVT, + BTA_JV_API_L2CAP_READ_EVT, + BTA_JV_API_L2CAP_WRITE_EVT, + BTA_JV_API_RFCOMM_CONNECT_EVT, + BTA_JV_API_RFCOMM_CLOSE_EVT, + BTA_JV_API_RFCOMM_START_SERVER_EVT, + BTA_JV_API_RFCOMM_STOP_SERVER_EVT, + BTA_JV_API_RFCOMM_WRITE_EVT, + BTA_JV_API_SET_PM_PROFILE_EVT, + BTA_JV_API_PM_STATE_CHANGE_EVT, + BTA_JV_API_L2CAP_CONNECT_LE_EVT, + BTA_JV_API_L2CAP_START_SERVER_LE_EVT, + BTA_JV_API_L2CAP_STOP_SERVER_LE_EVT, + BTA_JV_API_L2CAP_WRITE_FIXED_EVT, + BTA_JV_API_L2CAP_CLOSE_FIXED_EVT, + BTA_JV_MAX_INT_EVT }; #ifndef BTA_JV_RFC_EV_MASK -#define BTA_JV_RFC_EV_MASK (PORT_EV_RXCHAR | PORT_EV_TXEMPTY | PORT_EV_FC | PORT_EV_FCS) +#define BTA_JV_RFC_EV_MASK \ + (PORT_EV_RXCHAR | PORT_EV_TXEMPTY | PORT_EV_FC | PORT_EV_FCS) #endif /* data type for BTA_JV_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_JV_DM_CBACK *p_cback; +typedef struct { + BT_HDR hdr; + tBTA_JV_DM_CBACK* p_cback; } tBTA_JV_API_ENABLE; /* data type for BTA_JV_API_START_DISCOVERY_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - uint16_t num_uuid; - tSDP_UUID uuid_list[BTA_JV_MAX_UUIDS]; - uint16_t num_attr; - uint16_t attr_list[BTA_JV_MAX_ATTRS]; - void *user_data; /* piggyback caller's private data*/ +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + uint16_t num_uuid; + tSDP_UUID uuid_list[BTA_JV_MAX_UUIDS]; + uint16_t num_attr; + uint16_t attr_list[BTA_JV_MAX_ATTRS]; + void* user_data; /* piggyback caller's private data*/ } tBTA_JV_API_START_DISCOVERY; -enum -{ - BTA_JV_PM_FREE_ST = 0, /* empty PM slot */ - BTA_JV_PM_IDLE_ST, - BTA_JV_PM_BUSY_ST +enum { + BTA_JV_PM_FREE_ST = 0, /* empty PM slot */ + BTA_JV_PM_IDLE_ST, + BTA_JV_PM_BUSY_ST }; /* BTA JV PM control block */ -typedef struct -{ - uint32_t handle; /* The connection handle */ - uint8_t state; /* state: see above enum */ - tBTA_JV_PM_ID app_id; /* JV app specific id indicating power table to use */ - BD_ADDR peer_bd_addr; /* Peer BD address */ +typedef struct { + uint32_t handle; /* The connection handle */ + uint8_t state; /* state: see above enum */ + tBTA_JV_PM_ID app_id; /* JV app specific id indicating power table to use */ + BD_ADDR peer_bd_addr; /* Peer BD address */ } tBTA_JV_PM_CB; -enum -{ - BTA_JV_ST_NONE = 0, - BTA_JV_ST_CL_OPENING, - BTA_JV_ST_CL_OPEN, - BTA_JV_ST_CL_CLOSING, - BTA_JV_ST_SR_LISTEN, - BTA_JV_ST_SR_OPEN, - BTA_JV_ST_SR_CLOSING -} ; -typedef uint8_t tBTA_JV_STATE; -#define BTA_JV_ST_CL_MAX BTA_JV_ST_CL_CLOSING +enum { + BTA_JV_ST_NONE = 0, + BTA_JV_ST_CL_OPENING, + BTA_JV_ST_CL_OPEN, + BTA_JV_ST_CL_CLOSING, + BTA_JV_ST_SR_LISTEN, + BTA_JV_ST_SR_OPEN, + BTA_JV_ST_SR_CLOSING +}; +typedef uint8_t tBTA_JV_STATE; +#define BTA_JV_ST_CL_MAX BTA_JV_ST_CL_CLOSING /* JV L2CAP control block */ -typedef struct -{ - tBTA_JV_L2CAP_CBACK *p_cback; /* the callback function */ - uint16_t psm; /* the psm used for this server connection */ - tBTA_JV_STATE state; /* the state of this control block */ - tBTA_SERVICE_ID sec_id; /* service id */ - uint32_t handle; /* the handle reported to java app (same as gap handle) */ - bool cong; /* true, if congested */ - tBTA_JV_PM_CB *p_pm_cb; /* ptr to pm control block, NULL: unused */ - void *user_data; /* user data for callback from higher layers */ +typedef struct { + tBTA_JV_L2CAP_CBACK* p_cback; /* the callback function */ + uint16_t psm; /* the psm used for this server connection */ + tBTA_JV_STATE state; /* the state of this control block */ + tBTA_SERVICE_ID sec_id; /* service id */ + uint32_t handle; /* the handle reported to java app (same as gap handle) */ + bool cong; /* true, if congested */ + tBTA_JV_PM_CB* p_pm_cb; /* ptr to pm control block, NULL: unused */ + void* user_data; /* user data for callback from higher layers */ } tBTA_JV_L2C_CB; -#define BTA_JV_RFC_HDL_MASK 0xFF -#define BTA_JV_RFCOMM_MASK 0x80 -#define BTA_JV_ALL_APP_ID 0xFF -#define BTA_JV_RFC_HDL_TO_SIDX(r) (((r)&0xFF00) >> 8) -#define BTA_JV_RFC_H_S_TO_HDL(h, s) ((h)|((s)<<8)) +#define BTA_JV_RFC_HDL_MASK 0xFF +#define BTA_JV_RFCOMM_MASK 0x80 +#define BTA_JV_ALL_APP_ID 0xFF +#define BTA_JV_RFC_HDL_TO_SIDX(r) (((r)&0xFF00) >> 8) +#define BTA_JV_RFC_H_S_TO_HDL(h, s) ((h) | ((s) << 8)) /* port control block */ -typedef struct -{ - uint32_t handle; /* the rfcomm session handle at jv */ - uint16_t port_handle;/* port handle */ - tBTA_JV_STATE state; /* the state of this control block */ - uint8_t max_sess; /* max sessions */ - void *user_data; /* piggyback caller's private data*/ - bool cong; /* true, if congested */ - tBTA_JV_PM_CB *p_pm_cb; /* ptr to pm control block, NULL: unused */ +typedef struct { + uint32_t handle; /* the rfcomm session handle at jv */ + uint16_t port_handle; /* port handle */ + tBTA_JV_STATE state; /* the state of this control block */ + uint8_t max_sess; /* max sessions */ + void* user_data; /* piggyback caller's private data*/ + bool cong; /* true, if congested */ + tBTA_JV_PM_CB* p_pm_cb; /* ptr to pm control block, NULL: unused */ } tBTA_JV_PCB; /* JV RFCOMM control block */ -typedef struct -{ - tBTA_JV_RFCOMM_CBACK *p_cback; /* the callback function */ - uint16_t rfc_hdl[BTA_JV_MAX_RFC_SR_SESSION]; - tBTA_SERVICE_ID sec_id; /* service id */ - uint8_t handle; /* index: the handle reported to java app */ - uint8_t scn; /* the scn of the server */ - uint8_t max_sess; /* max sessions */ - int curr_sess; /* current sessions count*/ +typedef struct { + tBTA_JV_RFCOMM_CBACK* p_cback; /* the callback function */ + uint16_t rfc_hdl[BTA_JV_MAX_RFC_SR_SESSION]; + tBTA_SERVICE_ID sec_id; /* service id */ + uint8_t handle; /* index: the handle reported to java app */ + uint8_t scn; /* the scn of the server */ + uint8_t max_sess; /* max sessions */ + int curr_sess; /* current sessions count*/ } tBTA_JV_RFC_CB; -/* data type for BTA_JV_API_L2CAP_CONNECT_EVT & BTA_JV_API_L2CAP_CONNECT_LE_EVT */ -typedef struct -{ - BT_HDR hdr; - int32_t type; /* One of BTA_JV_CONN_TYPE_ */ - tBTA_SEC sec_mask; - tBTA_JV_ROLE role; - union { - uint16_t remote_psm; - uint16_t remote_chan; - }; - uint16_t rx_mtu; - BD_ADDR peer_bd_addr; - int32_t has_cfg; - tL2CAP_CFG_INFO cfg; - int32_t has_ertm_info; - tL2CAP_ERTM_INFO ertm_info; - tBTA_JV_L2CAP_CBACK *p_cback; - void *user_data; +/* data type for BTA_JV_API_L2CAP_CONNECT_EVT & BTA_JV_API_L2CAP_CONNECT_LE_EVT + */ +typedef struct { + BT_HDR hdr; + int32_t type; /* One of BTA_JV_CONN_TYPE_ */ + tBTA_SEC sec_mask; + tBTA_JV_ROLE role; + union { + uint16_t remote_psm; + uint16_t remote_chan; + }; + uint16_t rx_mtu; + BD_ADDR peer_bd_addr; + int32_t has_cfg; + tL2CAP_CFG_INFO cfg; + int32_t has_ertm_info; + tL2CAP_ERTM_INFO ertm_info; + tBTA_JV_L2CAP_CBACK* p_cback; + void* user_data; } tBTA_JV_API_L2CAP_CONNECT; /* data type for BTA_JV_API_L2CAP_SERVER_EVT */ -typedef struct -{ - BT_HDR hdr; - int32_t type; /* One of BTA_JV_CONN_TYPE_ */ - tBTA_SEC sec_mask; - tBTA_JV_ROLE role; - union { - uint16_t local_psm; - uint16_t local_chan; - }; - uint16_t rx_mtu; - int32_t has_cfg; - tL2CAP_CFG_INFO cfg; - int32_t has_ertm_info; - tL2CAP_ERTM_INFO ertm_info; - tBTA_JV_L2CAP_CBACK *p_cback; - void *user_data; +typedef struct { + BT_HDR hdr; + int32_t type; /* One of BTA_JV_CONN_TYPE_ */ + tBTA_SEC sec_mask; + tBTA_JV_ROLE role; + union { + uint16_t local_psm; + uint16_t local_chan; + }; + uint16_t rx_mtu; + int32_t has_cfg; + tL2CAP_CFG_INFO cfg; + int32_t has_ertm_info; + tL2CAP_ERTM_INFO ertm_info; + tBTA_JV_L2CAP_CBACK* p_cback; + void* user_data; } tBTA_JV_API_L2CAP_SERVER; /* data type for BTA_JV_API_L2CAP_CLOSE_EVT */ -typedef struct -{ - BT_HDR hdr; - uint32_t handle; - tBTA_JV_L2C_CB *p_cb; +typedef struct { + BT_HDR hdr; + uint32_t handle; + tBTA_JV_L2C_CB* p_cb; } tBTA_JV_API_L2CAP_CLOSE; /* data type for BTA_JV_API_L2CAP_READ_EVT */ -typedef struct -{ - BT_HDR hdr; - uint32_t handle; - uint32_t req_id; - tBTA_JV_L2CAP_CBACK *p_cback; - uint8_t* p_data; - uint16_t len; - void *user_data; +typedef struct { + BT_HDR hdr; + uint32_t handle; + uint32_t req_id; + tBTA_JV_L2CAP_CBACK* p_cback; + uint8_t* p_data; + uint16_t len; + void* user_data; } tBTA_JV_API_L2CAP_READ; /* data type for BTA_JV_API_L2CAP_WRITE_EVT */ -typedef struct -{ - BT_HDR hdr; - uint32_t handle; - uint32_t req_id; - tBTA_JV_L2C_CB *p_cb; - uint8_t *p_data; - uint16_t len; - void *user_data; +typedef struct { + BT_HDR hdr; + uint32_t handle; + uint32_t req_id; + tBTA_JV_L2C_CB* p_cb; + uint8_t* p_data; + uint16_t len; + void* user_data; } tBTA_JV_API_L2CAP_WRITE; /* data type for BTA_JV_API_L2CAP_WRITE_FIXED_EVT */ -typedef struct -{ - BT_HDR hdr; - uint16_t channel; - BD_ADDR addr; - uint32_t req_id; - tBTA_JV_L2CAP_CBACK *p_cback; - uint8_t *p_data; - uint16_t len; - void *user_data; +typedef struct { + BT_HDR hdr; + uint16_t channel; + BD_ADDR addr; + uint32_t req_id; + tBTA_JV_L2CAP_CBACK* p_cback; + uint8_t* p_data; + uint16_t len; + void* user_data; } tBTA_JV_API_L2CAP_WRITE_FIXED; /* data type for BTA_JV_API_RFCOMM_CONNECT_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_SEC sec_mask; - tBTA_JV_ROLE role; - uint8_t remote_scn; - BD_ADDR peer_bd_addr; - tBTA_JV_RFCOMM_CBACK *p_cback; - void *user_data; +typedef struct { + BT_HDR hdr; + tBTA_SEC sec_mask; + tBTA_JV_ROLE role; + uint8_t remote_scn; + BD_ADDR peer_bd_addr; + tBTA_JV_RFCOMM_CBACK* p_cback; + void* user_data; } tBTA_JV_API_RFCOMM_CONNECT; /* data type for BTA_JV_API_RFCOMM_SERVER_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_SEC sec_mask; - tBTA_JV_ROLE role; - uint8_t local_scn; - uint8_t max_session; - uint32_t handle; - tBTA_JV_RFCOMM_CBACK *p_cback; - void *user_data; +typedef struct { + BT_HDR hdr; + tBTA_SEC sec_mask; + tBTA_JV_ROLE role; + uint8_t local_scn; + uint8_t max_session; + uint32_t handle; + tBTA_JV_RFCOMM_CBACK* p_cback; + void* user_data; } tBTA_JV_API_RFCOMM_SERVER; /* data type for BTA_JV_API_SET_PM_PROFILE_EVT */ -typedef struct -{ - BT_HDR hdr; - uint32_t handle; - tBTA_JV_PM_ID app_id; - tBTA_JV_CONN_STATE init_st; +typedef struct { + BT_HDR hdr; + uint32_t handle; + tBTA_JV_PM_ID app_id; + tBTA_JV_CONN_STATE init_st; } tBTA_JV_API_SET_PM_PROFILE; /* data type for BTA_JV_API_PM_STATE_CHANGE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_JV_PM_CB *p_cb; - tBTA_JV_CONN_STATE state; +typedef struct { + BT_HDR hdr; + tBTA_JV_PM_CB* p_cb; + tBTA_JV_CONN_STATE state; } tBTA_JV_API_PM_STATE_CHANGE; /* data type for BTA_JV_API_RFCOMM_WRITE_EVT */ -typedef struct -{ - BT_HDR hdr; - uint32_t handle; - uint32_t req_id; - uint8_t *p_data; - int len; - tBTA_JV_RFC_CB *p_cb; - tBTA_JV_PCB *p_pcb; +typedef struct { + BT_HDR hdr; + uint32_t handle; + uint32_t req_id; + uint8_t* p_data; + int len; + tBTA_JV_RFC_CB* p_cb; + tBTA_JV_PCB* p_pcb; } tBTA_JV_API_RFCOMM_WRITE; /* data type for BTA_JV_API_RFCOMM_CLOSE_EVT */ -typedef struct -{ - BT_HDR hdr; - uint32_t handle; - tBTA_JV_RFC_CB *p_cb; - tBTA_JV_PCB *p_pcb; - void *user_data; +typedef struct { + BT_HDR hdr; + uint32_t handle; + tBTA_JV_RFC_CB* p_cb; + tBTA_JV_PCB* p_pcb; + void* user_data; } tBTA_JV_API_RFCOMM_CLOSE; /* data type for BTA_JV_API_CREATE_RECORD_EVT */ -typedef struct -{ - BT_HDR hdr; - void *user_data; +typedef struct { + BT_HDR hdr; + void* user_data; } tBTA_JV_API_CREATE_RECORD; /* data type for BTA_JV_API_ADD_ATTRIBUTE_EVT */ -typedef struct -{ - BT_HDR hdr; - uint32_t handle; - uint16_t attr_id; - uint8_t *p_value; - int32_t value_size; +typedef struct { + BT_HDR hdr; + uint32_t handle; + uint16_t attr_id; + uint8_t* p_value; + int32_t value_size; } tBTA_JV_API_ADD_ATTRIBUTE; /* data type for BTA_JV_API_FREE_SCN_EVT */ -typedef struct -{ - BT_HDR hdr; - int32_t type; /* One of BTA_JV_CONN_TYPE_ */ - uint16_t scn; +typedef struct { + BT_HDR hdr; + int32_t type; /* One of BTA_JV_CONN_TYPE_ */ + uint16_t scn; } tBTA_JV_API_FREE_CHANNEL; /* data type for BTA_JV_API_ALLOC_CHANNEL_EVT */ -typedef struct -{ - BT_HDR hdr; - int32_t type; /* One of BTA_JV_CONN_TYPE_ */ - int32_t channel; /* optionally request a specific channel */ - void *user_data; +typedef struct { + BT_HDR hdr; + int32_t type; /* One of BTA_JV_CONN_TYPE_ */ + int32_t channel; /* optionally request a specific channel */ + void* user_data; } tBTA_JV_API_ALLOC_CHANNEL; /* union of all data types */ -typedef union -{ - /* GKI event buffer header */ - BT_HDR hdr; - tBTA_JV_API_ENABLE enable; - tBTA_JV_API_START_DISCOVERY start_discovery; - tBTA_JV_API_ALLOC_CHANNEL alloc_channel; - tBTA_JV_API_FREE_CHANNEL free_channel; - tBTA_JV_API_CREATE_RECORD create_record; - tBTA_JV_API_ADD_ATTRIBUTE add_attr; - tBTA_JV_API_L2CAP_CONNECT l2cap_connect; - tBTA_JV_API_L2CAP_READ l2cap_read; - tBTA_JV_API_L2CAP_WRITE l2cap_write; - tBTA_JV_API_L2CAP_CLOSE l2cap_close; - tBTA_JV_API_L2CAP_SERVER l2cap_server; - tBTA_JV_API_RFCOMM_CONNECT rfcomm_connect; - tBTA_JV_API_RFCOMM_WRITE rfcomm_write; - tBTA_JV_API_SET_PM_PROFILE set_pm; - tBTA_JV_API_PM_STATE_CHANGE change_pm_state; - tBTA_JV_API_RFCOMM_CLOSE rfcomm_close; - tBTA_JV_API_RFCOMM_SERVER rfcomm_server; - tBTA_JV_API_L2CAP_WRITE_FIXED l2cap_write_fixed; +typedef union { + /* GKI event buffer header */ + BT_HDR hdr; + tBTA_JV_API_ENABLE enable; + tBTA_JV_API_START_DISCOVERY start_discovery; + tBTA_JV_API_ALLOC_CHANNEL alloc_channel; + tBTA_JV_API_FREE_CHANNEL free_channel; + tBTA_JV_API_CREATE_RECORD create_record; + tBTA_JV_API_ADD_ATTRIBUTE add_attr; + tBTA_JV_API_L2CAP_CONNECT l2cap_connect; + tBTA_JV_API_L2CAP_READ l2cap_read; + tBTA_JV_API_L2CAP_WRITE l2cap_write; + tBTA_JV_API_L2CAP_CLOSE l2cap_close; + tBTA_JV_API_L2CAP_SERVER l2cap_server; + tBTA_JV_API_RFCOMM_CONNECT rfcomm_connect; + tBTA_JV_API_RFCOMM_WRITE rfcomm_write; + tBTA_JV_API_SET_PM_PROFILE set_pm; + tBTA_JV_API_PM_STATE_CHANGE change_pm_state; + tBTA_JV_API_RFCOMM_CLOSE rfcomm_close; + tBTA_JV_API_RFCOMM_SERVER rfcomm_server; + tBTA_JV_API_L2CAP_WRITE_FIXED l2cap_write_fixed; } tBTA_JV_MSG; /* JV control block */ -typedef struct -{ - /* the SDP handle reported to JV user is the (index + 1) to sdp_handle[]. - * if sdp_handle[i]==0, it's not used. - * otherwise sdp_handle[i] is the stack SDP handle. */ - uint32_t sdp_handle[BTA_JV_MAX_SDP_REC]; /* SDP records created */ - uint8_t *p_sel_raw_data;/* the raw data of last service select */ - tBTA_JV_DM_CBACK *p_dm_cback; - tBTA_JV_L2C_CB l2c_cb[BTA_JV_MAX_L2C_CONN]; /* index is GAP handle (index) */ - tBTA_JV_RFC_CB rfc_cb[BTA_JV_MAX_RFC_CONN]; - tBTA_JV_PCB port_cb[MAX_RFC_PORTS]; /* index of this array is - the port_handle, */ - uint8_t sec_id[BTA_JV_NUM_SERVICE_ID]; /* service ID */ - bool scn[BTA_JV_MAX_SCN]; /* SCN allocated by java */ - uint16_t free_psm_list[BTA_JV_MAX_L2C_CONN]; /* PSMs freed by java - (can be reused) */ - uint8_t sdp_active; /* see BTA_JV_SDP_ACT_* */ - tSDP_UUID uuid; /* current uuid of sdp discovery*/ - tBTA_JV_PM_CB pm_cb[BTA_JV_PM_MAX_NUM]; /* PM on a per JV handle bases */ +typedef struct { + /* the SDP handle reported to JV user is the (index + 1) to sdp_handle[]. + * if sdp_handle[i]==0, it's not used. + * otherwise sdp_handle[i] is the stack SDP handle. */ + uint32_t sdp_handle[BTA_JV_MAX_SDP_REC]; /* SDP records created */ + uint8_t* p_sel_raw_data; /* the raw data of last service select */ + tBTA_JV_DM_CBACK* p_dm_cback; + tBTA_JV_L2C_CB l2c_cb[BTA_JV_MAX_L2C_CONN]; /* index is GAP handle (index) */ + tBTA_JV_RFC_CB rfc_cb[BTA_JV_MAX_RFC_CONN]; + tBTA_JV_PCB port_cb[MAX_RFC_PORTS]; /* index of this array is + the port_handle, */ + uint8_t sec_id[BTA_JV_NUM_SERVICE_ID]; /* service ID */ + bool scn[BTA_JV_MAX_SCN]; /* SCN allocated by java */ + uint16_t free_psm_list[BTA_JV_MAX_L2C_CONN]; /* PSMs freed by java + (can be reused) */ + uint8_t sdp_active; /* see BTA_JV_SDP_ACT_* */ + tSDP_UUID uuid; /* current uuid of sdp discovery*/ + tBTA_JV_PM_CB pm_cb[BTA_JV_PM_MAX_NUM]; /* PM on a per JV handle bases */ } tBTA_JV_CB; -enum -{ - BTA_JV_SDP_ACT_NONE = 0, - BTA_JV_SDP_ACT_YES, /* waiting for SDP result */ - BTA_JV_SDP_ACT_CANCEL /* waiting for cancel complete */ +enum { + BTA_JV_SDP_ACT_NONE = 0, + BTA_JV_SDP_ACT_YES, /* waiting for SDP result */ + BTA_JV_SDP_ACT_CANCEL /* waiting for cancel complete */ }; /* JV control block */ extern tBTA_JV_CB bta_jv_cb; /* config struct */ -extern tBTA_JV_CFG *p_bta_jv_cfg; - -extern bool bta_jv_sm_execute(BT_HDR *p_msg); - -extern void bta_jv_enable (tBTA_JV_MSG *p_data); -extern void bta_jv_disable (tBTA_JV_MSG *p_data); -extern void bta_jv_get_channel_id (tBTA_JV_MSG *p_data); -extern void bta_jv_free_scn (tBTA_JV_MSG *p_data); -extern void bta_jv_start_discovery (tBTA_JV_MSG *p_data); -extern void bta_jv_create_record (tBTA_JV_MSG *p_data); -extern void bta_jv_delete_record (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_connect (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_close (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_start_server (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_stop_server (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_read (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_write (tBTA_JV_MSG *p_data); -extern void bta_jv_rfcomm_connect (tBTA_JV_MSG *p_data); -extern void bta_jv_rfcomm_close (tBTA_JV_MSG *p_data); -extern void bta_jv_rfcomm_start_server (tBTA_JV_MSG *p_data); -extern void bta_jv_rfcomm_stop_server (tBTA_JV_MSG *p_data); -extern void bta_jv_rfcomm_read (tBTA_JV_MSG *p_data); -extern void bta_jv_rfcomm_write (tBTA_JV_MSG *p_data); -extern void bta_jv_set_pm_profile (tBTA_JV_MSG *p_data); -extern void bta_jv_change_pm_state(tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_connect_le (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_start_server_le (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_stop_server_le (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_write_fixed (tBTA_JV_MSG *p_data); -extern void bta_jv_l2cap_close_fixed (tBTA_JV_MSG *p_data); +extern tBTA_JV_CFG* p_bta_jv_cfg; + +extern bool bta_jv_sm_execute(BT_HDR* p_msg); + +extern void bta_jv_enable(tBTA_JV_MSG* p_data); +extern void bta_jv_disable(tBTA_JV_MSG* p_data); +extern void bta_jv_get_channel_id(tBTA_JV_MSG* p_data); +extern void bta_jv_free_scn(tBTA_JV_MSG* p_data); +extern void bta_jv_start_discovery(tBTA_JV_MSG* p_data); +extern void bta_jv_create_record(tBTA_JV_MSG* p_data); +extern void bta_jv_delete_record(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_connect(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_close(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_start_server(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_stop_server(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_read(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_write(tBTA_JV_MSG* p_data); +extern void bta_jv_rfcomm_connect(tBTA_JV_MSG* p_data); +extern void bta_jv_rfcomm_close(tBTA_JV_MSG* p_data); +extern void bta_jv_rfcomm_start_server(tBTA_JV_MSG* p_data); +extern void bta_jv_rfcomm_stop_server(tBTA_JV_MSG* p_data); +extern void bta_jv_rfcomm_read(tBTA_JV_MSG* p_data); +extern void bta_jv_rfcomm_write(tBTA_JV_MSG* p_data); +extern void bta_jv_set_pm_profile(tBTA_JV_MSG* p_data); +extern void bta_jv_change_pm_state(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_connect_le(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_start_server_le(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_stop_server_le(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_write_fixed(tBTA_JV_MSG* p_data); +extern void bta_jv_l2cap_close_fixed(tBTA_JV_MSG* p_data); #endif /* BTA_JV_INT_H */ diff --git a/system/bta/jv/bta_jv_main.cc b/system/bta/jv/bta_jv_main.cc index 2779fd6857e..fd5ce3abc9d 100644 --- a/system/bta/jv/bta_jv_main.cc +++ b/system/bta/jv/bta_jv_main.cc @@ -23,9 +23,9 @@ ******************************************************************************/ #include "bta_api.h" -#include "bta_sys.h" #include "bta_jv_api.h" #include "bta_jv_int.h" +#include "bta_sys.h" /***************************************************************************** * Constants and types @@ -34,39 +34,38 @@ tBTA_JV_CB bta_jv_cb; /* state machine action enumeration list */ -#define BTA_JV_NUM_ACTIONS (BTA_JV_MAX_INT_EVT & 0x00ff) +#define BTA_JV_NUM_ACTIONS (BTA_JV_MAX_INT_EVT & 0x00ff) /* type for action functions */ -typedef void (*tBTA_JV_ACTION)(tBTA_JV_MSG *p_data); +typedef void (*tBTA_JV_ACTION)(tBTA_JV_MSG* p_data); /* action function list */ -const tBTA_JV_ACTION bta_jv_action[] = -{ - bta_jv_enable, /* BTA_JV_API_ENABLE_EVT */ - bta_jv_disable, /* BTA_JV_API_DISABLE_EVT */ - bta_jv_get_channel_id, /* BTA_JV_API_GET_CHANNEL_EVT */ - bta_jv_free_scn, /* BTA_JV_API_FREE_SCN_EVT */ - bta_jv_start_discovery, /* BTA_JV_API_START_DISCOVERY_EVT */ - bta_jv_create_record, /* BTA_JV_API_CREATE_RECORD_EVT */ - bta_jv_delete_record, /* BTA_JV_API_DELETE_RECORD_EVT */ - bta_jv_l2cap_connect, /* BTA_JV_API_L2CAP_CONNECT_EVT */ - bta_jv_l2cap_close, /* BTA_JV_API_L2CAP_CLOSE_EVT */ - bta_jv_l2cap_start_server, /* BTA_JV_API_L2CAP_START_SERVER_EVT */ - bta_jv_l2cap_stop_server, /* BTA_JV_API_L2CAP_STOP_SERVER_EVT */ - bta_jv_l2cap_read, /* BTA_JV_API_L2CAP_READ_EVT */ - bta_jv_l2cap_write, /* BTA_JV_API_L2CAP_WRITE_EVT */ - bta_jv_rfcomm_connect, /* BTA_JV_API_RFCOMM_CONNECT_EVT */ - bta_jv_rfcomm_close, /* BTA_JV_API_RFCOMM_CLOSE_EVT */ - bta_jv_rfcomm_start_server, /* BTA_JV_API_RFCOMM_START_SERVER_EVT */ - bta_jv_rfcomm_stop_server, /* BTA_JV_API_RFCOMM_STOP_SERVER_EVT */ - bta_jv_rfcomm_write, /* BTA_JV_API_RFCOMM_WRITE_EVT */ - bta_jv_set_pm_profile, /* BTA_JV_API_SET_PM_PROFILE_EVT */ - bta_jv_change_pm_state, /* BTA_JV_API_PM_STATE_CHANGE_EVT */ - bta_jv_l2cap_connect_le, /* BTA_JV_API_L2CAP_CONNECT_LE_EVT */ - bta_jv_l2cap_start_server_le, /* BTA_JV_API_L2CAP_START_SERVER_LE_EVT */ - bta_jv_l2cap_stop_server_le, /* BTA_JV_API_L2CAP_STOP_SERVER_LE_EVT */ - bta_jv_l2cap_write_fixed, /* BTA_JV_API_L2CAP_WRITE_FIXED_EVT */ - bta_jv_l2cap_close_fixed, /* BTA_JV_API_L2CAP_CLOSE_FIXED_EVT */ +const tBTA_JV_ACTION bta_jv_action[] = { + bta_jv_enable, /* BTA_JV_API_ENABLE_EVT */ + bta_jv_disable, /* BTA_JV_API_DISABLE_EVT */ + bta_jv_get_channel_id, /* BTA_JV_API_GET_CHANNEL_EVT */ + bta_jv_free_scn, /* BTA_JV_API_FREE_SCN_EVT */ + bta_jv_start_discovery, /* BTA_JV_API_START_DISCOVERY_EVT */ + bta_jv_create_record, /* BTA_JV_API_CREATE_RECORD_EVT */ + bta_jv_delete_record, /* BTA_JV_API_DELETE_RECORD_EVT */ + bta_jv_l2cap_connect, /* BTA_JV_API_L2CAP_CONNECT_EVT */ + bta_jv_l2cap_close, /* BTA_JV_API_L2CAP_CLOSE_EVT */ + bta_jv_l2cap_start_server, /* BTA_JV_API_L2CAP_START_SERVER_EVT */ + bta_jv_l2cap_stop_server, /* BTA_JV_API_L2CAP_STOP_SERVER_EVT */ + bta_jv_l2cap_read, /* BTA_JV_API_L2CAP_READ_EVT */ + bta_jv_l2cap_write, /* BTA_JV_API_L2CAP_WRITE_EVT */ + bta_jv_rfcomm_connect, /* BTA_JV_API_RFCOMM_CONNECT_EVT */ + bta_jv_rfcomm_close, /* BTA_JV_API_RFCOMM_CLOSE_EVT */ + bta_jv_rfcomm_start_server, /* BTA_JV_API_RFCOMM_START_SERVER_EVT */ + bta_jv_rfcomm_stop_server, /* BTA_JV_API_RFCOMM_STOP_SERVER_EVT */ + bta_jv_rfcomm_write, /* BTA_JV_API_RFCOMM_WRITE_EVT */ + bta_jv_set_pm_profile, /* BTA_JV_API_SET_PM_PROFILE_EVT */ + bta_jv_change_pm_state, /* BTA_JV_API_PM_STATE_CHANGE_EVT */ + bta_jv_l2cap_connect_le, /* BTA_JV_API_L2CAP_CONNECT_LE_EVT */ + bta_jv_l2cap_start_server_le, /* BTA_JV_API_L2CAP_START_SERVER_LE_EVT */ + bta_jv_l2cap_stop_server_le, /* BTA_JV_API_L2CAP_STOP_SERVER_LE_EVT */ + bta_jv_l2cap_write_fixed, /* BTA_JV_API_L2CAP_WRITE_FIXED_EVT */ + bta_jv_l2cap_close_fixed, /* BTA_JV_API_L2CAP_CLOSE_FIXED_EVT */ }; /******************************************************************************* @@ -79,17 +78,15 @@ const tBTA_JV_ACTION bta_jv_action[] = * Returns void * ******************************************************************************/ -bool bta_jv_sm_execute(BT_HDR *p_msg) -{ - bool ret = false; - uint16_t action = (p_msg->event & 0x00ff); - /* execute action functions */ +bool bta_jv_sm_execute(BT_HDR* p_msg) { + bool ret = false; + uint16_t action = (p_msg->event & 0x00ff); + /* execute action functions */ - if(action < BTA_JV_NUM_ACTIONS) - { - (*bta_jv_action[action])((tBTA_JV_MSG*)p_msg); - ret = true; - } + if (action < BTA_JV_NUM_ACTIONS) { + (*bta_jv_action[action])((tBTA_JV_MSG*)p_msg); + ret = true; + } - return(ret); + return (ret); } diff --git a/system/bta/mce/bta_mce_act.cc b/system/bta/mce/bta_mce_act.cc index ed1317b88d2..02dc3176117 100644 --- a/system/bta/mce/bta_mce_act.cc +++ b/system/bta/mce/bta_mce_act.cc @@ -23,29 +23,27 @@ * ******************************************************************************/ -#include #include +#include -#include "bt_types.h" +#include #include "bt_common.h" -#include "utl.h" -#include "bta_sys.h" +#include "bt_types.h" #include "bta_api.h" #include "bta_mce_api.h" #include "bta_mce_int.h" +#include "bta_sys.h" #include "btm_api.h" #include "btm_int.h" #include "sdp_api.h" -#include +#include "utl.h" /***************************************************************************** * Constants ****************************************************************************/ static const tBT_UUID bta_mce_mas_uuid = { - .len = 2, - .uu.uuid16 = UUID_SERVCLASS_MESSAGE_ACCESS -}; + .len = 2, .uu.uuid16 = UUID_SERVCLASS_MESSAGE_ACCESS}; /******************************************************************************* * @@ -57,65 +55,67 @@ static const tBT_UUID bta_mce_mas_uuid = { * ******************************************************************************/ -static void bta_mce_search_cback(uint16_t result, void * user_data) -{ - tSDP_DISC_REC *p_rec = NULL; - tBTA_MCE_MAS_DISCOVERY_COMP evt_data; - int found = 0; +static void bta_mce_search_cback(uint16_t result, void* user_data) { + tSDP_DISC_REC* p_rec = NULL; + tBTA_MCE_MAS_DISCOVERY_COMP evt_data; + int found = 0; - APPL_TRACE_DEBUG("bta_mce_start_discovery_cback res: 0x%x", result); + APPL_TRACE_DEBUG("bta_mce_start_discovery_cback res: 0x%x", result); - bta_mce_cb.sdp_active = BTA_MCE_SDP_ACT_NONE; + bta_mce_cb.sdp_active = BTA_MCE_SDP_ACT_NONE; - if (bta_mce_cb.p_dm_cback == NULL) return; + if (bta_mce_cb.p_dm_cback == NULL) return; - evt_data.status = BTA_MCE_FAILURE; - bdcpy(evt_data.remote_addr, bta_mce_cb.remote_addr); - evt_data.num_mas = 0; + evt_data.status = BTA_MCE_FAILURE; + bdcpy(evt_data.remote_addr, bta_mce_cb.remote_addr); + evt_data.num_mas = 0; - if (result == SDP_SUCCESS || result == SDP_DB_FULL) - { - do - { - tSDP_DISC_ATTR *p_attr; - tSDP_PROTOCOL_ELEM pe; + if (result == SDP_SUCCESS || result == SDP_DB_FULL) { + do { + tSDP_DISC_ATTR* p_attr; + tSDP_PROTOCOL_ELEM pe; - p_rec = SDP_FindServiceUUIDInDb(p_bta_mce_cfg->p_sdp_db, (tBT_UUID*) &bta_mce_mas_uuid, p_rec); + p_rec = SDP_FindServiceUUIDInDb(p_bta_mce_cfg->p_sdp_db, + (tBT_UUID*)&bta_mce_mas_uuid, p_rec); - APPL_TRACE_DEBUG("p_rec:%p", p_rec); + APPL_TRACE_DEBUG("p_rec:%p", p_rec); - if (p_rec == NULL) - break; + if (p_rec == NULL) break; - if (!SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - continue; + if (!SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) + continue; - evt_data.mas[found].scn = pe.params[0]; + evt_data.mas[found].scn = pe.params[0]; - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) == NULL) - continue; + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) == + NULL) + continue; - evt_data.mas[found].p_srv_name = (char *) p_attr->attr_value.v.array; - evt_data.mas[found].srv_name_len= SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + evt_data.mas[found].p_srv_name = (char*)p_attr->attr_value.v.array; + evt_data.mas[found].srv_name_len = + SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_MAS_INSTANCE_ID)) == NULL) - break; + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_MAS_INSTANCE_ID)) == + NULL) + break; - evt_data.mas[found].instance_id = p_attr->attr_value.v.u8; + evt_data.mas[found].instance_id = p_attr->attr_value.v.u8; - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_MSG_TYPE)) == NULL) - break; + if ((p_attr = SDP_FindAttributeInRec(p_rec, + ATTR_ID_SUPPORTED_MSG_TYPE)) == NULL) + break; - evt_data.mas[found].msg_type = p_attr->attr_value.v.u8; + evt_data.mas[found].msg_type = p_attr->attr_value.v.u8; - found++; - } while (p_rec != NULL && found < BTA_MCE_MAX_MAS_INSTANCES); + found++; + } while (p_rec != NULL && found < BTA_MCE_MAX_MAS_INSTANCES); - evt_data.num_mas = found; - evt_data.status = BTA_MCE_SUCCESS; - } + evt_data.num_mas = found; + evt_data.status = BTA_MCE_SUCCESS; + } - bta_mce_cb.p_dm_cback(BTA_MCE_MAS_DISCOVERY_COMP_EVT, (tBTA_MCE*) &evt_data, user_data); + bta_mce_cb.p_dm_cback(BTA_MCE_MAS_DISCOVERY_COMP_EVT, (tBTA_MCE*)&evt_data, + user_data); } /******************************************************************************* @@ -127,11 +127,10 @@ static void bta_mce_search_cback(uint16_t result, void * user_data) * Returns void * ******************************************************************************/ -void bta_mce_enable(tBTA_MCE_MSG *p_data) -{ - tBTA_MCE_STATUS status = BTA_MCE_SUCCESS; - bta_mce_cb.p_dm_cback = p_data->enable.p_cback; - bta_mce_cb.p_dm_cback(BTA_MCE_ENABLE_EVT, (tBTA_MCE *)&status, NULL); +void bta_mce_enable(tBTA_MCE_MSG* p_data) { + tBTA_MCE_STATUS status = BTA_MCE_SUCCESS; + bta_mce_cb.p_dm_cback = p_data->enable.p_cback; + bta_mce_cb.p_dm_cback(BTA_MCE_ENABLE_EVT, (tBTA_MCE*)&status, NULL); } /******************************************************************************* @@ -143,43 +142,42 @@ void bta_mce_enable(tBTA_MCE_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_mce_get_remote_mas_instances(tBTA_MCE_MSG *p_data) -{ - if(p_data == NULL) - { +void bta_mce_get_remote_mas_instances(tBTA_MCE_MSG* p_data) { + if (p_data == NULL) { APPL_TRACE_DEBUG("MCE control block handle is null"); return; - } - tBTA_MCE_STATUS status = BTA_MCE_FAILURE; - - APPL_TRACE_DEBUG("%s in, sdp_active:%d", __func__, bta_mce_cb.sdp_active); - - if (bta_mce_cb.sdp_active != BTA_MCE_SDP_ACT_NONE) - { - /* SDP is still in progress */ - status = BTA_MCE_BUSY; - if(bta_mce_cb.p_dm_cback) - bta_mce_cb.p_dm_cback(BTA_MCE_MAS_DISCOVERY_COMP_EVT, (tBTA_MCE *)&status, NULL); - - return; - } - - bta_mce_cb.sdp_active = BTA_MCE_SDP_ACT_YES; - bdcpy(bta_mce_cb.remote_addr, p_data->get_rmt_mas.bd_addr); - - SDP_InitDiscoveryDb (p_bta_mce_cfg->p_sdp_db, p_bta_mce_cfg->sdp_db_size, 1, - (tBT_UUID*) &bta_mce_mas_uuid, 0, NULL); - - if (!SDP_ServiceSearchAttributeRequest2(p_data->get_rmt_mas.bd_addr, p_bta_mce_cfg->p_sdp_db, - bta_mce_search_cback, NULL)) - { - bta_mce_cb.sdp_active = BTA_MCE_SDP_ACT_NONE; - - /* failed to start SDP. report the failure right away */ - if (bta_mce_cb.p_dm_cback) - bta_mce_cb.p_dm_cback(BTA_MCE_MAS_DISCOVERY_COMP_EVT, (tBTA_MCE *)&status, NULL); - } - /* - else report the result when the cback is called - */ + } + tBTA_MCE_STATUS status = BTA_MCE_FAILURE; + + APPL_TRACE_DEBUG("%s in, sdp_active:%d", __func__, bta_mce_cb.sdp_active); + + if (bta_mce_cb.sdp_active != BTA_MCE_SDP_ACT_NONE) { + /* SDP is still in progress */ + status = BTA_MCE_BUSY; + if (bta_mce_cb.p_dm_cback) + bta_mce_cb.p_dm_cback(BTA_MCE_MAS_DISCOVERY_COMP_EVT, (tBTA_MCE*)&status, + NULL); + + return; + } + + bta_mce_cb.sdp_active = BTA_MCE_SDP_ACT_YES; + bdcpy(bta_mce_cb.remote_addr, p_data->get_rmt_mas.bd_addr); + + SDP_InitDiscoveryDb(p_bta_mce_cfg->p_sdp_db, p_bta_mce_cfg->sdp_db_size, 1, + (tBT_UUID*)&bta_mce_mas_uuid, 0, NULL); + + if (!SDP_ServiceSearchAttributeRequest2(p_data->get_rmt_mas.bd_addr, + p_bta_mce_cfg->p_sdp_db, + bta_mce_search_cback, NULL)) { + bta_mce_cb.sdp_active = BTA_MCE_SDP_ACT_NONE; + + /* failed to start SDP. report the failure right away */ + if (bta_mce_cb.p_dm_cback) + bta_mce_cb.p_dm_cback(BTA_MCE_MAS_DISCOVERY_COMP_EVT, (tBTA_MCE*)&status, + NULL); + } + /* + else report the result when the cback is called + */ } diff --git a/system/bta/mce/bta_mce_api.cc b/system/bta/mce/bta_mce_api.cc index ed4c300ad02..e9233d97e53 100644 --- a/system/bta/mce/bta_mce_api.cc +++ b/system/bta/mce/bta_mce_api.cc @@ -25,12 +25,12 @@ #include -#include "bta_api.h" +#include "bt_common.h" #include "bt_types.h" -#include "bta_sys.h" +#include "bta_api.h" #include "bta_mce_api.h" #include "bta_mce_int.h" -#include "bt_common.h" +#include "bta_sys.h" #include "port_api.h" #include "sdp_api.h" @@ -38,11 +38,7 @@ * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_mce_reg = -{ - bta_mce_sm_execute, - NULL -}; +static const tBTA_SYS_REG bta_mce_reg = {bta_mce_sm_execute, NULL}; /******************************************************************************* * @@ -58,29 +54,28 @@ static const tBTA_SYS_REG bta_mce_reg = * BTA_MCE_FAIL if internal failure. * ******************************************************************************/ -tBTA_MCE_STATUS BTA_MceEnable(tBTA_MCE_DM_CBACK *p_cback) -{ - tBTA_MCE_STATUS status = BTA_MCE_FAILURE; - - APPL_TRACE_API("%", __func__); - - if (p_cback && false == bta_sys_is_register(BTA_ID_MCE)) { - memset(&bta_mce_cb, 0, sizeof(tBTA_MCE_CB)); - - /* register with BTA system manager */ - bta_sys_register(BTA_ID_MCE, &bta_mce_reg); - - if (p_cback) { - tBTA_MCE_API_ENABLE *p_buf = - (tBTA_MCE_API_ENABLE *)osi_malloc(sizeof(tBTA_MCE_API_ENABLE)); - p_buf->hdr.event = BTA_MCE_API_ENABLE_EVT; - p_buf->p_cback = p_cback; - bta_sys_sendmsg(p_buf); - status = BTA_MCE_SUCCESS; - } +tBTA_MCE_STATUS BTA_MceEnable(tBTA_MCE_DM_CBACK* p_cback) { + tBTA_MCE_STATUS status = BTA_MCE_FAILURE; + + APPL_TRACE_API("%", __func__); + + if (p_cback && false == bta_sys_is_register(BTA_ID_MCE)) { + memset(&bta_mce_cb, 0, sizeof(tBTA_MCE_CB)); + + /* register with BTA system manager */ + bta_sys_register(BTA_ID_MCE, &bta_mce_reg); + + if (p_cback) { + tBTA_MCE_API_ENABLE* p_buf = + (tBTA_MCE_API_ENABLE*)osi_malloc(sizeof(tBTA_MCE_API_ENABLE)); + p_buf->hdr.event = BTA_MCE_API_ENABLE_EVT; + p_buf->p_cback = p_cback; + bta_sys_sendmsg(p_buf); + status = BTA_MCE_SUCCESS; } + } - return status; + return status; } /******************************************************************************* @@ -96,17 +91,17 @@ tBTA_MCE_STATUS BTA_MceEnable(tBTA_MCE_DM_CBACK *p_cback) * BTA_MCE_FAILURE, otherwise. * ******************************************************************************/ -tBTA_MCE_STATUS BTA_MceGetRemoteMasInstances(BD_ADDR bd_addr) -{ - tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES *p_msg = - (tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES *)osi_malloc(sizeof(tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES)); +tBTA_MCE_STATUS BTA_MceGetRemoteMasInstances(BD_ADDR bd_addr) { + tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES* p_msg = + (tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES*)osi_malloc( + sizeof(tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT; - bdcpy(p_msg->bd_addr, bd_addr); + p_msg->hdr.event = BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT; + bdcpy(p_msg->bd_addr, bd_addr); - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_MCE_SUCCESS; + return BTA_MCE_SUCCESS; } diff --git a/system/bta/mce/bta_mce_cfg.cc b/system/bta/mce/bta_mce_cfg.cc index 0f9761ee9d4..3beb265fbcb 100644 --- a/system/bta/mce/bta_mce_cfg.cc +++ b/system/bta/mce/bta_mce_cfg.cc @@ -24,21 +24,22 @@ ******************************************************************************/ #include "bt_common.h" -#include "bta_api.h" #include "bt_types.h" +#include "bta_api.h" #include "bta_mce_api.h" #ifndef BTA_MCE_SDP_DB_SIZE -#define BTA_MCE_SDP_DB_SIZE 4500 +#define BTA_MCE_SDP_DB_SIZE 4500 #endif -static uint8_t __attribute__ ((aligned(4))) bta_mce_sdp_db_data[BTA_MCE_SDP_DB_SIZE]; +static uint8_t __attribute__((aligned(4))) +bta_mce_sdp_db_data[BTA_MCE_SDP_DB_SIZE]; /* MCE configuration structure */ -const tBTA_MCE_CFG bta_mce_cfg = -{ +const tBTA_MCE_CFG bta_mce_cfg = { BTA_MCE_SDP_DB_SIZE, - (tSDP_DISCOVERY_DB *)bta_mce_sdp_db_data /* The data buffer to keep SDP database */ + (tSDP_DISCOVERY_DB*) + bta_mce_sdp_db_data /* The data buffer to keep SDP database */ }; -tBTA_MCE_CFG *p_bta_mce_cfg = (tBTA_MCE_CFG *) &bta_mce_cfg; +tBTA_MCE_CFG* p_bta_mce_cfg = (tBTA_MCE_CFG*)&bta_mce_cfg; diff --git a/system/bta/mce/bta_mce_int.h b/system/bta/mce/bta_mce_int.h index bb43d03d04f..e249d749496 100644 --- a/system/bta/mce/bta_mce_int.h +++ b/system/bta/mce/bta_mce_int.h @@ -25,68 +25,62 @@ #ifndef BTA_MCE_INT_H #define BTA_MCE_INT_H -#include "bta_sys.h" #include "bta_api.h" #include "bta_mce_api.h" +#include "bta_sys.h" /***************************************************************************** * Constants ****************************************************************************/ -enum -{ - /* these events are handled by the state machine */ - BTA_MCE_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_MCE), - BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT, - BTA_MCE_MAX_INT_EVT +enum { + /* these events are handled by the state machine */ + BTA_MCE_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_MCE), + BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT, + BTA_MCE_MAX_INT_EVT }; /* data type for BTA_MCE_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_MCE_DM_CBACK *p_cback; +typedef struct { + BT_HDR hdr; + tBTA_MCE_DM_CBACK* p_cback; } tBTA_MCE_API_ENABLE; /* data type for BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; } tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES; /* union of all data types */ -typedef union -{ - /* GKI event buffer header */ - BT_HDR hdr; - tBTA_MCE_API_ENABLE enable; - tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES get_rmt_mas; +typedef union { + /* GKI event buffer header */ + BT_HDR hdr; + tBTA_MCE_API_ENABLE enable; + tBTA_MCE_API_GET_REMOTE_MAS_INSTANCES get_rmt_mas; } tBTA_MCE_MSG; /* MCE control block */ -typedef struct -{ - uint8_t sdp_active; /* see BTA_MCE_SDP_ACT_* */ - BD_ADDR remote_addr; - tBTA_MCE_DM_CBACK *p_dm_cback; +typedef struct { + uint8_t sdp_active; /* see BTA_MCE_SDP_ACT_* */ + BD_ADDR remote_addr; + tBTA_MCE_DM_CBACK* p_dm_cback; } tBTA_MCE_CB; -enum -{ - BTA_MCE_SDP_ACT_NONE = 0, - BTA_MCE_SDP_ACT_YES /* waiting for SDP result */ +enum { + BTA_MCE_SDP_ACT_NONE = 0, + BTA_MCE_SDP_ACT_YES /* waiting for SDP result */ }; /* MCE control block */ extern tBTA_MCE_CB bta_mce_cb; /* config struct */ -extern tBTA_MCE_CFG *p_bta_mce_cfg; +extern tBTA_MCE_CFG* p_bta_mce_cfg; -extern bool bta_mce_sm_execute(BT_HDR *p_msg); +extern bool bta_mce_sm_execute(BT_HDR* p_msg); -extern void bta_mce_enable (tBTA_MCE_MSG *p_data); -extern void bta_mce_get_remote_mas_instances (tBTA_MCE_MSG *p_data); +extern void bta_mce_enable(tBTA_MCE_MSG* p_data); +extern void bta_mce_get_remote_mas_instances(tBTA_MCE_MSG* p_data); #endif /* BTA_MCE_INT_H */ diff --git a/system/bta/mce/bta_mce_main.cc b/system/bta/mce/bta_mce_main.cc index 6188bd7b33d..abd3e5cadb5 100644 --- a/system/bta/mce/bta_mce_main.cc +++ b/system/bta/mce/bta_mce_main.cc @@ -26,9 +26,9 @@ #include #include "bta_api.h" -#include "bta_sys.h" #include "bta_mce_api.h" #include "bta_mce_int.h" +#include "bta_sys.h" /***************************************************************************** * Constants and types @@ -37,16 +37,16 @@ tBTA_MCE_CB bta_mce_cb; /* state machine action enumeration list */ -#define BTA_MCE_NUM_ACTIONS (BTA_MCE_MAX_INT_EVT & 0x00ff) +#define BTA_MCE_NUM_ACTIONS (BTA_MCE_MAX_INT_EVT & 0x00ff) /* type for action functions */ -typedef void (*tBTA_MCE_ACTION)(tBTA_MCE_MSG *p_data); +typedef void (*tBTA_MCE_ACTION)(tBTA_MCE_MSG* p_data); /* action function list */ -const tBTA_MCE_ACTION bta_mce_action[] = -{ - bta_mce_enable, /* BTA_MCE_API_ENABLE_EVT */ - bta_mce_get_remote_mas_instances, /* BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT */ +const tBTA_MCE_ACTION bta_mce_action[] = { + bta_mce_enable, /* BTA_MCE_API_ENABLE_EVT */ + bta_mce_get_remote_mas_instances, /* BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT + */ }; /******************************************************************************* @@ -59,19 +59,17 @@ const tBTA_MCE_ACTION bta_mce_action[] = * Returns void * ******************************************************************************/ -bool bta_mce_sm_execute(BT_HDR *p_msg) -{ - if(p_msg == NULL) return false; +bool bta_mce_sm_execute(BT_HDR* p_msg) { + if (p_msg == NULL) return false; - bool ret = false; - uint16_t action = (p_msg->event & 0x00ff); + bool ret = false; + uint16_t action = (p_msg->event & 0x00ff); - /* execute action functions */ - if(action < BTA_MCE_NUM_ACTIONS) - { - (*bta_mce_action[action])((tBTA_MCE_MSG*)p_msg); - ret = true; - } + /* execute action functions */ + if (action < BTA_MCE_NUM_ACTIONS) { + (*bta_mce_action[action])((tBTA_MCE_MSG*)p_msg); + ret = true; + } - return(ret); + return (ret); } diff --git a/system/bta/pan/bta_pan_act.cc b/system/bta/pan/bta_pan_act.cc index 57921b2c411..2f1892a1d22 100644 --- a/system/bta/pan/bta_pan_act.cc +++ b/system/bta/pan/bta_pan_act.cc @@ -28,20 +28,19 @@ #include -#include "bta_api.h" -#include "bta_sys.h" #include "bt_common.h" -#include "pan_api.h" +#include "bta_api.h" #include "bta_pan_api.h" -#include "bta_pan_int.h" #include "bta_pan_co.h" +#include "bta_pan_int.h" +#include "bta_sys.h" #include "osi/include/osi.h" +#include "pan_api.h" #include "utl.h" - /* RX and TX data flow mask */ -#define BTA_PAN_RX_MASK 0x0F -#define BTA_PAN_TX_MASK 0xF0 +#define BTA_PAN_RX_MASK 0x0F +#define BTA_PAN_TX_MASK 0xF0 /******************************************************************************* * @@ -54,10 +53,9 @@ * Returns void * *******************************************************************************/ -static void bta_pan_pm_conn_busy(tBTA_PAN_SCB *p_scb) -{ - if ((p_scb != NULL) && (p_scb->state != BTA_PAN_IDLE_ST)) - bta_sys_busy(BTA_ID_PAN, p_scb->app_id, p_scb->bd_addr); +static void bta_pan_pm_conn_busy(tBTA_PAN_SCB* p_scb) { + if ((p_scb != NULL) && (p_scb->state != BTA_PAN_IDLE_ST)) + bta_sys_busy(BTA_ID_PAN, p_scb->app_id, p_scb->bd_addr); } /******************************************************************************* @@ -71,10 +69,9 @@ static void bta_pan_pm_conn_busy(tBTA_PAN_SCB *p_scb) * Returns void * *******************************************************************************/ -static void bta_pan_pm_conn_idle(tBTA_PAN_SCB *p_scb) -{ - if ((p_scb != NULL) && (p_scb->state != BTA_PAN_IDLE_ST)) - bta_sys_idle(BTA_ID_PAN, p_scb->app_id, p_scb->bd_addr); +static void bta_pan_pm_conn_idle(tBTA_PAN_SCB* p_scb) { + if ((p_scb != NULL) && (p_scb->state != BTA_PAN_IDLE_ST)) + bta_sys_idle(BTA_ID_PAN, p_scb->app_id, p_scb->bd_addr); } /******************************************************************************* @@ -87,48 +84,47 @@ static void bta_pan_pm_conn_idle(tBTA_PAN_SCB *p_scb) * Returns void * ******************************************************************************/ -static void bta_pan_conn_state_cback(uint16_t handle, BD_ADDR bd_addr, tPAN_RESULT state, - bool is_role_change, uint8_t src_role, uint8_t dst_role) -{ - tBTA_PAN_SCB *p_scb; - tBTA_PAN_CONN *p_buf = (tBTA_PAN_CONN *)osi_malloc(sizeof(tBTA_PAN_CONN)); - - if ((state == PAN_SUCCESS) && !is_role_change) { - p_buf->hdr.event = BTA_PAN_CONN_OPEN_EVT; - if ((p_scb = bta_pan_scb_by_handle(handle)) == NULL) { - /* allocate an scb */ - p_scb = bta_pan_scb_alloc(); - } - /* we have exceeded maximum number of connections */ - if (!p_scb) { - PAN_Disconnect (handle); - return; - } - - p_scb->handle = handle; - p_scb->local_role = src_role; - p_scb->peer_role = dst_role; - p_scb->pan_flow_enable = true; - bdcpy(p_scb->bd_addr, bd_addr); - p_scb->data_queue = fixed_queue_new(SIZE_MAX); - - if (src_role == PAN_ROLE_CLIENT) - p_scb->app_id = bta_pan_cb.app_id[0]; - else if (src_role == PAN_ROLE_GN_SERVER) - p_scb->app_id = bta_pan_cb.app_id[1]; - else if (src_role == PAN_ROLE_NAP_SERVER) - p_scb->app_id = bta_pan_cb.app_id[2]; +static void bta_pan_conn_state_cback(uint16_t handle, BD_ADDR bd_addr, + tPAN_RESULT state, bool is_role_change, + uint8_t src_role, uint8_t dst_role) { + tBTA_PAN_SCB* p_scb; + tBTA_PAN_CONN* p_buf = (tBTA_PAN_CONN*)osi_malloc(sizeof(tBTA_PAN_CONN)); + + if ((state == PAN_SUCCESS) && !is_role_change) { + p_buf->hdr.event = BTA_PAN_CONN_OPEN_EVT; + if ((p_scb = bta_pan_scb_by_handle(handle)) == NULL) { + /* allocate an scb */ + p_scb = bta_pan_scb_alloc(); } - else if ((state != PAN_SUCCESS) && !is_role_change) { - p_buf->hdr.event = BTA_PAN_CONN_CLOSE_EVT; - } else { - return; + /* we have exceeded maximum number of connections */ + if (!p_scb) { + PAN_Disconnect(handle); + return; } - p_buf->result = state; - p_buf->hdr.layer_specific = handle; + p_scb->handle = handle; + p_scb->local_role = src_role; + p_scb->peer_role = dst_role; + p_scb->pan_flow_enable = true; + bdcpy(p_scb->bd_addr, bd_addr); + p_scb->data_queue = fixed_queue_new(SIZE_MAX); + + if (src_role == PAN_ROLE_CLIENT) + p_scb->app_id = bta_pan_cb.app_id[0]; + else if (src_role == PAN_ROLE_GN_SERVER) + p_scb->app_id = bta_pan_cb.app_id[1]; + else if (src_role == PAN_ROLE_NAP_SERVER) + p_scb->app_id = bta_pan_cb.app_id[2]; + } else if ((state != PAN_SUCCESS) && !is_role_change) { + p_buf->hdr.event = BTA_PAN_CONN_CLOSE_EVT; + } else { + return; + } - bta_sys_sendmsg(p_buf); + p_buf->result = state; + p_buf->hdr.layer_specific = handle; + + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -141,23 +137,21 @@ static void bta_pan_conn_state_cback(uint16_t handle, BD_ADDR bd_addr, tPAN_RESU * Returns void * ******************************************************************************/ -static void bta_pan_data_flow_cb(uint16_t handle, tPAN_RESULT result) -{ - tBTA_PAN_SCB *p_scb; +static void bta_pan_data_flow_cb(uint16_t handle, tPAN_RESULT result) { + tBTA_PAN_SCB* p_scb; - if ((p_scb = bta_pan_scb_by_handle(handle)) == NULL) - return; + if ((p_scb = bta_pan_scb_by_handle(handle)) == NULL) return; - if (result == PAN_TX_FLOW_ON) { - BT_HDR *p_buf = (BT_HDR *) osi_malloc(sizeof(BT_HDR)); - p_buf->layer_specific = handle; - p_buf->event = BTA_PAN_BNEP_FLOW_ENABLE_EVT; - bta_sys_sendmsg(p_buf); - bta_pan_co_rx_flow(handle, p_scb->app_id, true); - } else if (result == PAN_TX_FLOW_OFF) { - p_scb->pan_flow_enable = false; - bta_pan_co_rx_flow(handle, p_scb->app_id, false); - } + if (result == PAN_TX_FLOW_ON) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->layer_specific = handle; + p_buf->event = BTA_PAN_BNEP_FLOW_ENABLE_EVT; + bta_sys_sendmsg(p_buf); + bta_pan_co_rx_flow(handle, p_scb->app_id, true); + } else if (result == PAN_TX_FLOW_OFF) { + p_scb->pan_flow_enable = false; + bta_pan_co_rx_flow(handle, p_scb->app_id, false); + } } /******************************************************************************* @@ -170,40 +164,40 @@ static void bta_pan_data_flow_cb(uint16_t handle, tPAN_RESULT result) * Returns void * ******************************************************************************/ -static void bta_pan_data_buf_ind_cback(uint16_t handle, BD_ADDR src, BD_ADDR dst, uint16_t protocol, BT_HDR *p_buf, - bool ext, bool forward) -{ - tBTA_PAN_SCB *p_scb; - BT_HDR *p_new_buf; - - if (sizeof(tBTA_PAN_DATA_PARAMS) > p_buf->offset) { - /* offset smaller than data structure in front of actual data */ - p_new_buf = (BT_HDR *)osi_malloc(PAN_BUF_SIZE); - memcpy((uint8_t *)(p_new_buf + 1) + sizeof(tBTA_PAN_DATA_PARAMS), - (uint8_t *)(p_buf + 1) + p_buf->offset, p_buf->len); - p_new_buf->len = p_buf->len; - p_new_buf->offset = sizeof(tBTA_PAN_DATA_PARAMS); - osi_free(p_buf); - } else { - p_new_buf = p_buf; - } - /* copy params into the space before the data */ - bdcpy(((tBTA_PAN_DATA_PARAMS *)p_new_buf)->src, src); - bdcpy(((tBTA_PAN_DATA_PARAMS *)p_new_buf)->dst, dst); - ((tBTA_PAN_DATA_PARAMS *)p_new_buf)->protocol = protocol; - ((tBTA_PAN_DATA_PARAMS *)p_new_buf)->ext = ext; - ((tBTA_PAN_DATA_PARAMS *)p_new_buf)->forward = forward; - - if ((p_scb = bta_pan_scb_by_handle(handle)) == NULL) { - osi_free(p_new_buf); - return; - } - - fixed_queue_enqueue(p_scb->data_queue, p_new_buf); - BT_HDR *p_event = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_event->layer_specific = handle; - p_event->event = BTA_PAN_RX_FROM_BNEP_READY_EVT; - bta_sys_sendmsg(p_event); +static void bta_pan_data_buf_ind_cback(uint16_t handle, BD_ADDR src, + BD_ADDR dst, uint16_t protocol, + BT_HDR* p_buf, bool ext, bool forward) { + tBTA_PAN_SCB* p_scb; + BT_HDR* p_new_buf; + + if (sizeof(tBTA_PAN_DATA_PARAMS) > p_buf->offset) { + /* offset smaller than data structure in front of actual data */ + p_new_buf = (BT_HDR*)osi_malloc(PAN_BUF_SIZE); + memcpy((uint8_t*)(p_new_buf + 1) + sizeof(tBTA_PAN_DATA_PARAMS), + (uint8_t*)(p_buf + 1) + p_buf->offset, p_buf->len); + p_new_buf->len = p_buf->len; + p_new_buf->offset = sizeof(tBTA_PAN_DATA_PARAMS); + osi_free(p_buf); + } else { + p_new_buf = p_buf; + } + /* copy params into the space before the data */ + bdcpy(((tBTA_PAN_DATA_PARAMS*)p_new_buf)->src, src); + bdcpy(((tBTA_PAN_DATA_PARAMS*)p_new_buf)->dst, dst); + ((tBTA_PAN_DATA_PARAMS*)p_new_buf)->protocol = protocol; + ((tBTA_PAN_DATA_PARAMS*)p_new_buf)->ext = ext; + ((tBTA_PAN_DATA_PARAMS*)p_new_buf)->forward = forward; + + if ((p_scb = bta_pan_scb_by_handle(handle)) == NULL) { + osi_free(p_new_buf); + return; + } + + fixed_queue_enqueue(p_scb->data_queue, p_new_buf); + BT_HDR* p_event = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_event->layer_specific = handle; + p_event->event = BTA_PAN_RX_FROM_BNEP_READY_EVT; + bta_sys_sendmsg(p_event); } /******************************************************************************* @@ -216,17 +210,16 @@ static void bta_pan_data_buf_ind_cback(uint16_t handle, BD_ADDR src, BD_ADDR dst * Returns void * ******************************************************************************/ -static void bta_pan_pfilt_ind_cback(uint16_t handle, bool indication,tBNEP_RESULT result, - uint16_t num_filters, uint8_t *p_filters) -{ - - bta_pan_co_pfilt_ind(handle, indication, (tBTA_PAN_STATUS)((result == BNEP_SUCCESS) ? BTA_PAN_SUCCESS : BTA_PAN_FAIL), - num_filters, p_filters); - - +static void bta_pan_pfilt_ind_cback(uint16_t handle, bool indication, + tBNEP_RESULT result, uint16_t num_filters, + uint8_t* p_filters) { + bta_pan_co_pfilt_ind( + handle, indication, + (tBTA_PAN_STATUS)((result == BNEP_SUCCESS) ? BTA_PAN_SUCCESS + : BTA_PAN_FAIL), + num_filters, p_filters); } - /******************************************************************************* * * Function bta_pan_mfilt_ind_cback @@ -237,16 +230,16 @@ static void bta_pan_pfilt_ind_cback(uint16_t handle, bool indication,tBNEP_RESUL * Returns void * ******************************************************************************/ -static void bta_pan_mfilt_ind_cback(uint16_t handle, bool indication,tBNEP_RESULT result, - uint16_t num_mfilters, uint8_t *p_mfilters) -{ - - bta_pan_co_mfilt_ind(handle, indication, (tBTA_PAN_STATUS)((result == BNEP_SUCCESS) ? BTA_PAN_SUCCESS : BTA_PAN_FAIL), - num_mfilters, p_mfilters); +static void bta_pan_mfilt_ind_cback(uint16_t handle, bool indication, + tBNEP_RESULT result, uint16_t num_mfilters, + uint8_t* p_mfilters) { + bta_pan_co_mfilt_ind( + handle, indication, + (tBTA_PAN_STATUS)((result == BNEP_SUCCESS) ? BTA_PAN_SUCCESS + : BTA_PAN_FAIL), + num_mfilters, p_mfilters); } - - /******************************************************************************* * * Function bta_pan_has_multiple_connections @@ -258,40 +251,35 @@ static void bta_pan_mfilt_ind_cback(uint16_t handle, bool indication,tBNEP_RESUL * Returns bool * ******************************************************************************/ -static bool bta_pan_has_multiple_connections(uint8_t app_id) -{ - tBTA_PAN_SCB *p_scb = NULL; - bool found = false; - BD_ADDR bd_addr; - - for (uint8_t index = 0; index < BTA_PAN_NUM_CONN; index++) - { - p_scb = &bta_pan_cb.scb[index]; - if (p_scb->in_use == true && app_id == p_scb->app_id) - { - /* save temp bd_addr */ - bdcpy(bd_addr, p_scb->bd_addr); - found = true; - break; - } +static bool bta_pan_has_multiple_connections(uint8_t app_id) { + tBTA_PAN_SCB* p_scb = NULL; + bool found = false; + BD_ADDR bd_addr; + + for (uint8_t index = 0; index < BTA_PAN_NUM_CONN; index++) { + p_scb = &bta_pan_cb.scb[index]; + if (p_scb->in_use == true && app_id == p_scb->app_id) { + /* save temp bd_addr */ + bdcpy(bd_addr, p_scb->bd_addr); + found = true; + break; } - - /* If cannot find a match then there is no connection at all */ - if (found == false) - return false; - - /* Find whether there is another connection with different device other than PANU. - Could be same service or different service */ - for (uint8_t index = 0; index < BTA_PAN_NUM_CONN; index++) - { - p_scb = &bta_pan_cb.scb[index]; - if (p_scb->in_use == true && p_scb->app_id != bta_pan_cb.app_id[0] && - bdcmp(bd_addr, p_scb->bd_addr)) - { - return true; - } + } + + /* If cannot find a match then there is no connection at all */ + if (found == false) return false; + + /* Find whether there is another connection with different device other than + PANU. + Could be same service or different service */ + for (uint8_t index = 0; index < BTA_PAN_NUM_CONN; index++) { + p_scb = &bta_pan_cb.scb[index]; + if (p_scb->in_use == true && p_scb->app_id != bta_pan_cb.app_id[0] && + bdcmp(bd_addr, p_scb->bd_addr)) { + return true; } - return false; + } + return false; } /******************************************************************************* @@ -305,43 +293,39 @@ static bool bta_pan_has_multiple_connections(uint8_t app_id) * Returns void * ******************************************************************************/ -void bta_pan_enable(tBTA_PAN_DATA *p_data) -{ - tPAN_REGISTER reg_data; - uint16_t initial_discoverability; - uint16_t initial_connectability; - uint16_t d_window; - uint16_t d_interval; - uint16_t c_window; - uint16_t c_interval; - - bta_pan_cb.p_cback = p_data->api_enable.p_cback; - - reg_data.pan_conn_state_cb = bta_pan_conn_state_cback; - reg_data.pan_bridge_req_cb = NULL; - reg_data.pan_data_buf_ind_cb = bta_pan_data_buf_ind_cback; - reg_data.pan_data_ind_cb = NULL; - reg_data.pan_pfilt_ind_cb = bta_pan_pfilt_ind_cback; - reg_data.pan_mfilt_ind_cb = bta_pan_mfilt_ind_cback; - reg_data.pan_tx_data_flow_cb = bta_pan_data_flow_cb; - - /* read connectability and discoverability settings. - Pan profile changes the settings. We have to change it back to - be consistent with other bta subsystems */ - initial_connectability = BTM_ReadConnectability(&c_window, &c_interval); - initial_discoverability = BTM_ReadDiscoverability(&d_window, &d_interval); - - - PAN_Register (®_data); - - - /* set it back to original value */ - BTM_SetDiscoverability(initial_discoverability, d_window, d_interval); - BTM_SetConnectability(initial_connectability, c_window, c_interval); - - bta_pan_cb.flow_mask = bta_pan_co_init(&bta_pan_cb.q_level); - bta_pan_cb.p_cback(BTA_PAN_ENABLE_EVT, NULL); - +void bta_pan_enable(tBTA_PAN_DATA* p_data) { + tPAN_REGISTER reg_data; + uint16_t initial_discoverability; + uint16_t initial_connectability; + uint16_t d_window; + uint16_t d_interval; + uint16_t c_window; + uint16_t c_interval; + + bta_pan_cb.p_cback = p_data->api_enable.p_cback; + + reg_data.pan_conn_state_cb = bta_pan_conn_state_cback; + reg_data.pan_bridge_req_cb = NULL; + reg_data.pan_data_buf_ind_cb = bta_pan_data_buf_ind_cback; + reg_data.pan_data_ind_cb = NULL; + reg_data.pan_pfilt_ind_cb = bta_pan_pfilt_ind_cback; + reg_data.pan_mfilt_ind_cb = bta_pan_mfilt_ind_cback; + reg_data.pan_tx_data_flow_cb = bta_pan_data_flow_cb; + + /* read connectability and discoverability settings. + Pan profile changes the settings. We have to change it back to + be consistent with other bta subsystems */ + initial_connectability = BTM_ReadConnectability(&c_window, &c_interval); + initial_discoverability = BTM_ReadDiscoverability(&d_window, &d_interval); + + PAN_Register(®_data); + + /* set it back to original value */ + BTM_SetDiscoverability(initial_discoverability, d_window, d_interval); + BTM_SetConnectability(initial_connectability, c_window, c_interval); + + bta_pan_cb.flow_mask = bta_pan_co_init(&bta_pan_cb.q_level); + bta_pan_cb.p_cback(BTA_PAN_ENABLE_EVT, NULL); } /******************************************************************************* @@ -353,60 +337,53 @@ void bta_pan_enable(tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_pan_set_role(tBTA_PAN_DATA *p_data) -{ - tPAN_RESULT status; - tBTA_PAN_SET_ROLE set_role; - uint8_t sec[3]; - - - bta_pan_cb.app_id[0] = p_data->api_set_role.user_app_id; - bta_pan_cb.app_id[1] = p_data->api_set_role.gn_app_id; - bta_pan_cb.app_id[2] = p_data->api_set_role.nap_app_id; - - sec[0] = p_data->api_set_role.user_sec_mask; - sec[1] = p_data->api_set_role.gn_sec_mask; - sec[2] = p_data->api_set_role.nap_sec_mask; - - /* set security correctly in api and here */ - status = PAN_SetRole(p_data->api_set_role.role, sec, - p_data->api_set_role.user_name, - p_data->api_set_role.gn_name, - p_data->api_set_role.nap_name); - - set_role.role = p_data->api_set_role.role; - if(status == PAN_SUCCESS) - { - if(p_data->api_set_role.role & PAN_ROLE_NAP_SERVER ) - bta_sys_add_uuid(UUID_SERVCLASS_NAP); - else - bta_sys_remove_uuid(UUID_SERVCLASS_NAP); - - if(p_data->api_set_role.role & PAN_ROLE_GN_SERVER ) - bta_sys_add_uuid(UUID_SERVCLASS_GN); - else - bta_sys_remove_uuid(UUID_SERVCLASS_GN); - - if(p_data->api_set_role.role & PAN_ROLE_CLIENT ) - bta_sys_add_uuid(UUID_SERVCLASS_PANU); - else - bta_sys_remove_uuid(UUID_SERVCLASS_PANU); - - set_role.status = BTA_PAN_SUCCESS; - } - /* if status is not success clear everything */ +void bta_pan_set_role(tBTA_PAN_DATA* p_data) { + tPAN_RESULT status; + tBTA_PAN_SET_ROLE set_role; + uint8_t sec[3]; + + bta_pan_cb.app_id[0] = p_data->api_set_role.user_app_id; + bta_pan_cb.app_id[1] = p_data->api_set_role.gn_app_id; + bta_pan_cb.app_id[2] = p_data->api_set_role.nap_app_id; + + sec[0] = p_data->api_set_role.user_sec_mask; + sec[1] = p_data->api_set_role.gn_sec_mask; + sec[2] = p_data->api_set_role.nap_sec_mask; + + /* set security correctly in api and here */ + status = PAN_SetRole( + p_data->api_set_role.role, sec, p_data->api_set_role.user_name, + p_data->api_set_role.gn_name, p_data->api_set_role.nap_name); + + set_role.role = p_data->api_set_role.role; + if (status == PAN_SUCCESS) { + if (p_data->api_set_role.role & PAN_ROLE_NAP_SERVER) + bta_sys_add_uuid(UUID_SERVCLASS_NAP); else - { - PAN_SetRole(0, 0, NULL, NULL, NULL); - bta_sys_remove_uuid(UUID_SERVCLASS_NAP); - bta_sys_remove_uuid(UUID_SERVCLASS_GN); - bta_sys_remove_uuid(UUID_SERVCLASS_PANU); - set_role.status = BTA_PAN_FAIL; - } - bta_pan_cb.p_cback(BTA_PAN_SET_ROLE_EVT, (tBTA_PAN *)&set_role); -} + bta_sys_remove_uuid(UUID_SERVCLASS_NAP); + + if (p_data->api_set_role.role & PAN_ROLE_GN_SERVER) + bta_sys_add_uuid(UUID_SERVCLASS_GN); + else + bta_sys_remove_uuid(UUID_SERVCLASS_GN); + if (p_data->api_set_role.role & PAN_ROLE_CLIENT) + bta_sys_add_uuid(UUID_SERVCLASS_PANU); + else + bta_sys_remove_uuid(UUID_SERVCLASS_PANU); + set_role.status = BTA_PAN_SUCCESS; + } + /* if status is not success clear everything */ + else { + PAN_SetRole(0, 0, NULL, NULL, NULL); + bta_sys_remove_uuid(UUID_SERVCLASS_NAP); + bta_sys_remove_uuid(UUID_SERVCLASS_GN); + bta_sys_remove_uuid(UUID_SERVCLASS_PANU); + set_role.status = BTA_PAN_FAIL; + } + bta_pan_cb.p_cback(BTA_PAN_SET_ROLE_EVT, (tBTA_PAN*)&set_role); +} /******************************************************************************* * @@ -419,39 +396,31 @@ void bta_pan_set_role(tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_pan_disable(void) -{ +void bta_pan_disable(void) { + BT_HDR* p_buf; + tBTA_PAN_SCB* p_scb = &bta_pan_cb.scb[0]; + uint8_t i; - BT_HDR *p_buf; - tBTA_PAN_SCB *p_scb = &bta_pan_cb.scb[0]; - uint8_t i; - - - /* close all connections */ - PAN_SetRole (0, NULL, NULL, NULL, NULL); + /* close all connections */ + PAN_SetRole(0, NULL, NULL, NULL, NULL); #if (BTA_EIR_CANNED_UUID_LIST != TRUE) - bta_sys_remove_uuid(UUID_SERVCLASS_NAP); - bta_sys_remove_uuid(UUID_SERVCLASS_GN); - bta_sys_remove_uuid(UUID_SERVCLASS_PANU); -#endif // BTA_EIR_CANNED_UUID_LIST - /* free all queued up data buffers */ - for (i = 0; i < BTA_PAN_NUM_CONN; i++, p_scb++) - { - if (p_scb->in_use) - { - while ((p_buf = (BT_HDR *)fixed_queue_try_dequeue(p_scb->data_queue)) != NULL) - osi_free(p_buf); - - bta_pan_co_close(p_scb->handle, p_scb->app_id); - - } - } - - + bta_sys_remove_uuid(UUID_SERVCLASS_NAP); + bta_sys_remove_uuid(UUID_SERVCLASS_GN); + bta_sys_remove_uuid(UUID_SERVCLASS_PANU); +#endif // BTA_EIR_CANNED_UUID_LIST + /* free all queued up data buffers */ + for (i = 0; i < BTA_PAN_NUM_CONN; i++, p_scb++) { + if (p_scb->in_use) { + while ((p_buf = (BT_HDR*)fixed_queue_try_dequeue(p_scb->data_queue)) != + NULL) + osi_free(p_buf); - PAN_Deregister(); + bta_pan_co_close(p_scb->handle, p_scb->app_id); + } + } + PAN_Deregister(); } /******************************************************************************* @@ -463,42 +432,33 @@ void bta_pan_disable(void) * Returns void * ******************************************************************************/ -void bta_pan_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) -{ - tPAN_RESULT status; - tBTA_PAN_OPEN data; - tBTA_PAN_OPENING opening; - - - status = PAN_Connect (p_data->api_open.bd_addr, p_data->api_open.local_role, p_data->api_open.peer_role, - &p_scb->handle); - APPL_TRACE_DEBUG("%s pan connect status: %d", __func__, status); - - if(status == PAN_SUCCESS) - { - - bdcpy(p_scb->bd_addr, p_data->api_open.bd_addr); - p_scb->local_role = p_data->api_open.local_role; - p_scb->peer_role = p_data->api_open.peer_role; - bdcpy(opening.bd_addr, p_data->api_open.bd_addr); - opening.handle = p_scb->handle; - bta_pan_cb.p_cback(BTA_PAN_OPENING_EVT, (tBTA_PAN *)&opening); - - - } - else - { - bta_pan_scb_dealloc(p_scb); - bdcpy(data.bd_addr, p_data->api_open.bd_addr); - data.status = BTA_PAN_FAIL; - data.local_role = p_data->api_open.local_role; - data.peer_role = p_data->api_open.peer_role; - bta_pan_cb.p_cback(BTA_PAN_OPEN_EVT, (tBTA_PAN *)&data); - } - +void bta_pan_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data) { + tPAN_RESULT status; + tBTA_PAN_OPEN data; + tBTA_PAN_OPENING opening; + + status = PAN_Connect(p_data->api_open.bd_addr, p_data->api_open.local_role, + p_data->api_open.peer_role, &p_scb->handle); + APPL_TRACE_DEBUG("%s pan connect status: %d", __func__, status); + + if (status == PAN_SUCCESS) { + bdcpy(p_scb->bd_addr, p_data->api_open.bd_addr); + p_scb->local_role = p_data->api_open.local_role; + p_scb->peer_role = p_data->api_open.peer_role; + bdcpy(opening.bd_addr, p_data->api_open.bd_addr); + opening.handle = p_scb->handle; + bta_pan_cb.p_cback(BTA_PAN_OPENING_EVT, (tBTA_PAN*)&opening); + + } else { + bta_pan_scb_dealloc(p_scb); + bdcpy(data.bd_addr, p_data->api_open.bd_addr); + data.status = BTA_PAN_FAIL; + data.local_role = p_data->api_open.local_role; + data.peer_role = p_data->api_open.peer_role; + bta_pan_cb.p_cback(BTA_PAN_OPEN_EVT, (tBTA_PAN*)&data); + } } - /******************************************************************************* * * Function bta_pan_close @@ -510,21 +470,19 @@ void bta_pan_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_pan_api_close (tBTA_PAN_SCB *p_scb, - UNUSED_ATTR tBTA_PAN_DATA *p_data) -{ - tBTA_PAN_CONN *p_buf = (tBTA_PAN_CONN *)osi_malloc(sizeof(tBTA_PAN_CONN)); +void bta_pan_api_close(tBTA_PAN_SCB* p_scb, UNUSED_ATTR tBTA_PAN_DATA* p_data) { + tBTA_PAN_CONN* p_buf = (tBTA_PAN_CONN*)osi_malloc(sizeof(tBTA_PAN_CONN)); - PAN_Disconnect(p_scb->handle); + PAN_Disconnect(p_scb->handle); - /* - * Send an event to BTA so that application will get the connection - * close event. - */ - p_buf->hdr.event = BTA_PAN_CONN_CLOSE_EVT; - p_buf->hdr.layer_specific = p_scb->handle; + /* + * Send an event to BTA so that application will get the connection + * close event. + */ + p_buf->hdr.event = BTA_PAN_CONN_CLOSE_EVT; + p_buf->hdr.layer_specific = p_scb->handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -536,46 +494,41 @@ void bta_pan_api_close (tBTA_PAN_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_pan_conn_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) -{ +void bta_pan_conn_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data) { + tBTA_PAN_OPEN data; - tBTA_PAN_OPEN data; + APPL_TRACE_DEBUG("%s pan connection result: %d", __func__, + p_data->conn.result); - APPL_TRACE_DEBUG("%s pan connection result: %d", __func__, p_data->conn.result); - - bdcpy(data.bd_addr, p_scb->bd_addr); - data.handle = p_scb->handle; - data.local_role = p_scb->local_role; - data.peer_role = p_scb->peer_role; - - if(p_data->conn.result == PAN_SUCCESS) - { - data.status = BTA_PAN_SUCCESS; - p_scb->pan_flow_enable = true; - p_scb->app_flow_enable = true; - bta_sys_conn_open(BTA_ID_PAN ,p_scb->app_id, p_scb->bd_addr); - } - else - { - bta_pan_scb_dealloc(p_scb); - data.status = BTA_PAN_FAIL; - } + bdcpy(data.bd_addr, p_scb->bd_addr); + data.handle = p_scb->handle; + data.local_role = p_scb->local_role; + data.peer_role = p_scb->peer_role; + if (p_data->conn.result == PAN_SUCCESS) { + data.status = BTA_PAN_SUCCESS; p_scb->pan_flow_enable = true; p_scb->app_flow_enable = true; - - /* If app_id is NAP/GN, check whether there are multiple connections. - If there are, provide a special app_id to dm to enforce master role only. */ - if ((p_scb->app_id == bta_pan_cb.app_id[1] || p_scb->app_id == bta_pan_cb.app_id[2]) && - bta_pan_has_multiple_connections(p_scb->app_id)) - { - p_scb->app_id = BTA_APP_ID_PAN_MULTI; - } - bta_sys_conn_open(BTA_ID_PAN, p_scb->app_id, p_scb->bd_addr); - bta_pan_cb.p_cback(BTA_PAN_OPEN_EVT, (tBTA_PAN *)&data); + } else { + bta_pan_scb_dealloc(p_scb); + data.status = BTA_PAN_FAIL; + } + p_scb->pan_flow_enable = true; + p_scb->app_flow_enable = true; + /* If app_id is NAP/GN, check whether there are multiple connections. + If there are, provide a special app_id to dm to enforce master role only. + */ + if ((p_scb->app_id == bta_pan_cb.app_id[1] || + p_scb->app_id == bta_pan_cb.app_id[2]) && + bta_pan_has_multiple_connections(p_scb->app_id)) { + p_scb->app_id = BTA_APP_ID_PAN_MULTI; + } + + bta_sys_conn_open(BTA_ID_PAN, p_scb->app_id, p_scb->bd_addr); + bta_pan_cb.p_cback(BTA_PAN_OPEN_EVT, (tBTA_PAN*)&data); } /******************************************************************************* @@ -589,29 +542,23 @@ void bta_pan_conn_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_pan_conn_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) -{ - - tBTA_PAN_CLOSE data; - BT_HDR *p_buf; - - data.handle = p_data->hdr.layer_specific; +void bta_pan_conn_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data) { + tBTA_PAN_CLOSE data; + BT_HDR* p_buf; - bta_sys_conn_close( BTA_ID_PAN ,p_scb->app_id, p_scb->bd_addr); + data.handle = p_data->hdr.layer_specific; - /* free all queued up data buffers */ - while ((p_buf = (BT_HDR *)fixed_queue_try_dequeue(p_scb->data_queue)) != NULL) - osi_free(p_buf); + bta_sys_conn_close(BTA_ID_PAN, p_scb->app_id, p_scb->bd_addr); - bta_pan_scb_dealloc(p_scb); + /* free all queued up data buffers */ + while ((p_buf = (BT_HDR*)fixed_queue_try_dequeue(p_scb->data_queue)) != NULL) + osi_free(p_buf); - bta_pan_cb.p_cback(BTA_PAN_CLOSE_EVT, (tBTA_PAN *)&data); + bta_pan_scb_dealloc(p_scb); + bta_pan_cb.p_cback(BTA_PAN_CLOSE_EVT, (tBTA_PAN*)&data); } - - - /******************************************************************************* * * Function bta_pan_rx_path @@ -623,24 +570,18 @@ void bta_pan_conn_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_pan_rx_path(tBTA_PAN_SCB *p_scb, - UNUSED_ATTR tBTA_PAN_DATA *p_data) -{ - /* if data path configured for rx pull */ - if ((bta_pan_cb.flow_mask & BTA_PAN_RX_MASK) == BTA_PAN_RX_PULL) - { - /* if we can accept data */ - if (p_scb->pan_flow_enable == true) - { - /* call application callout function for rx path */ - bta_pan_co_rx_path(p_scb->handle, p_scb->app_id); - } - } - /* else data path configured for rx push */ - else - { - +void bta_pan_rx_path(tBTA_PAN_SCB* p_scb, UNUSED_ATTR tBTA_PAN_DATA* p_data) { + /* if data path configured for rx pull */ + if ((bta_pan_cb.flow_mask & BTA_PAN_RX_MASK) == BTA_PAN_RX_PULL) { + /* if we can accept data */ + if (p_scb->pan_flow_enable == true) { + /* call application callout function for rx path */ + bta_pan_co_rx_path(p_scb->handle, p_scb->app_id); } + } + /* else data path configured for rx push */ + else { + } } /******************************************************************************* @@ -653,58 +594,49 @@ void bta_pan_rx_path(tBTA_PAN_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_pan_tx_path(tBTA_PAN_SCB *p_scb, - UNUSED_ATTR tBTA_PAN_DATA *p_data) -{ - /* if data path configured for tx pull */ - if ((bta_pan_cb.flow_mask & BTA_PAN_TX_MASK) == BTA_PAN_TX_PULL) - { - bta_pan_pm_conn_busy(p_scb); - /* call application callout function for tx path */ - bta_pan_co_tx_path(p_scb->handle, p_scb->app_id); - - /* free data that exceeds queue level */ - while (fixed_queue_length(p_scb->data_queue) > bta_pan_cb.q_level) - osi_free(fixed_queue_try_dequeue(p_scb->data_queue)); - bta_pan_pm_conn_idle(p_scb); - } - /* if configured for zero copy push */ - else if ((bta_pan_cb.flow_mask & BTA_PAN_TX_MASK) == BTA_PAN_TX_PUSH_BUF) - { - /* if app can accept data */ - if (p_scb->app_flow_enable == true) - { - BT_HDR *p_buf; - - /* read data from the queue */ - if ((p_buf = (BT_HDR *)fixed_queue_try_dequeue(p_scb->data_queue)) != NULL) - { - /* send data to application */ - bta_pan_co_tx_writebuf(p_scb->handle, - p_scb->app_id, - ((tBTA_PAN_DATA_PARAMS *)p_buf)->src, - ((tBTA_PAN_DATA_PARAMS *)p_buf)->dst, - ((tBTA_PAN_DATA_PARAMS *)p_buf)->protocol, - p_buf, - ((tBTA_PAN_DATA_PARAMS *)p_buf)->ext, - ((tBTA_PAN_DATA_PARAMS *)p_buf)->forward); - - } - /* free data that exceeds queue level */ - while (fixed_queue_length(p_scb->data_queue) > bta_pan_cb.q_level) - osi_free(fixed_queue_try_dequeue(p_scb->data_queue)); - - /* if there is more data to be passed to - upper layer */ - if (!fixed_queue_is_empty(p_scb->data_queue)) - { - p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - p_buf->layer_specific = p_scb->handle; - p_buf->event = BTA_PAN_RX_FROM_BNEP_READY_EVT; - bta_sys_sendmsg(p_buf); - } - } +void bta_pan_tx_path(tBTA_PAN_SCB* p_scb, UNUSED_ATTR tBTA_PAN_DATA* p_data) { + /* if data path configured for tx pull */ + if ((bta_pan_cb.flow_mask & BTA_PAN_TX_MASK) == BTA_PAN_TX_PULL) { + bta_pan_pm_conn_busy(p_scb); + /* call application callout function for tx path */ + bta_pan_co_tx_path(p_scb->handle, p_scb->app_id); + + /* free data that exceeds queue level */ + while (fixed_queue_length(p_scb->data_queue) > bta_pan_cb.q_level) + osi_free(fixed_queue_try_dequeue(p_scb->data_queue)); + bta_pan_pm_conn_idle(p_scb); + } + /* if configured for zero copy push */ + else if ((bta_pan_cb.flow_mask & BTA_PAN_TX_MASK) == BTA_PAN_TX_PUSH_BUF) { + /* if app can accept data */ + if (p_scb->app_flow_enable == true) { + BT_HDR* p_buf; + + /* read data from the queue */ + if ((p_buf = (BT_HDR*)fixed_queue_try_dequeue(p_scb->data_queue)) != + NULL) { + /* send data to application */ + bta_pan_co_tx_writebuf(p_scb->handle, p_scb->app_id, + ((tBTA_PAN_DATA_PARAMS*)p_buf)->src, + ((tBTA_PAN_DATA_PARAMS*)p_buf)->dst, + ((tBTA_PAN_DATA_PARAMS*)p_buf)->protocol, p_buf, + ((tBTA_PAN_DATA_PARAMS*)p_buf)->ext, + ((tBTA_PAN_DATA_PARAMS*)p_buf)->forward); + } + /* free data that exceeds queue level */ + while (fixed_queue_length(p_scb->data_queue) > bta_pan_cb.q_level) + osi_free(fixed_queue_try_dequeue(p_scb->data_queue)); + + /* if there is more data to be passed to + upper layer */ + if (!fixed_queue_is_empty(p_scb->data_queue)) { + p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + p_buf->layer_specific = p_scb->handle; + p_buf->event = BTA_PAN_RX_FROM_BNEP_READY_EVT; + bta_sys_sendmsg(p_buf); + } } + } } /******************************************************************************* @@ -717,9 +649,8 @@ void bta_pan_tx_path(tBTA_PAN_SCB *p_scb, * Returns void * ******************************************************************************/ -void bta_pan_tx_flow(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) -{ - p_scb->app_flow_enable = p_data->ci_tx_flow.enable; +void bta_pan_tx_flow(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data) { + p_scb->app_flow_enable = p_data->ci_tx_flow.enable; } /******************************************************************************* @@ -732,21 +663,16 @@ void bta_pan_tx_flow(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_pan_write_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) -{ - if ((bta_pan_cb.flow_mask & BTA_PAN_RX_MASK) == BTA_PAN_RX_PUSH_BUF) - { - bta_pan_pm_conn_busy(p_scb); - - PAN_WriteBuf (p_scb->handle, - ((tBTA_PAN_DATA_PARAMS *)p_data)->dst, - ((tBTA_PAN_DATA_PARAMS *)p_data)->src, - ((tBTA_PAN_DATA_PARAMS *)p_data)->protocol, - (BT_HDR *)p_data, - ((tBTA_PAN_DATA_PARAMS *)p_data)->ext); - bta_pan_pm_conn_idle(p_scb); - - } +void bta_pan_write_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data) { + if ((bta_pan_cb.flow_mask & BTA_PAN_RX_MASK) == BTA_PAN_RX_PUSH_BUF) { + bta_pan_pm_conn_busy(p_scb); + + PAN_WriteBuf(p_scb->handle, ((tBTA_PAN_DATA_PARAMS*)p_data)->dst, + ((tBTA_PAN_DATA_PARAMS*)p_data)->src, + ((tBTA_PAN_DATA_PARAMS*)p_data)->protocol, (BT_HDR*)p_data, + ((tBTA_PAN_DATA_PARAMS*)p_data)->ext); + bta_pan_pm_conn_idle(p_scb); + } } /******************************************************************************* @@ -759,9 +685,8 @@ void bta_pan_write_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_pan_free_buf(UNUSED_ATTR tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data) -{ - osi_free(p_data); +void bta_pan_free_buf(UNUSED_ATTR tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data) { + osi_free(p_data); } #endif /* PAN_INCLUDED */ diff --git a/system/bta/pan/bta_pan_api.cc b/system/bta/pan/bta_pan_api.cc index e5200850e13..7210018b15e 100644 --- a/system/bta/pan/bta_pan_api.cc +++ b/system/bta/pan/bta_pan_api.cc @@ -26,22 +26,18 @@ #include "bt_target.h" -#include "bta_api.h" -#include "bta_sys.h" -#include "pan_api.h" #include "bt_common.h" +#include "bt_utils.h" +#include "bta_api.h" #include "bta_pan_api.h" #include "bta_pan_int.h" -#include "bt_utils.h" +#include "bta_sys.h" #include "osi/include/osi.h" +#include "pan_api.h" #if (BTA_PAN_INCLUDED == TRUE) -static const tBTA_SYS_REG bta_pan_reg = -{ - bta_pan_hdl_event, - BTA_PanDisable -}; +static const tBTA_SYS_REG bta_pan_reg = {bta_pan_hdl_event, BTA_PanDisable}; /******************************************************************************* * @@ -55,22 +51,19 @@ static const tBTA_SYS_REG bta_pan_reg = * Returns void * ******************************************************************************/ -void BTA_PanEnable(tBTA_PAN_CBACK p_cback) -{ - tBTA_PAN_API_ENABLE *p_buf = - (tBTA_PAN_API_ENABLE *)osi_malloc(sizeof(tBTA_PAN_API_ENABLE)); +void BTA_PanEnable(tBTA_PAN_CBACK p_cback) { + tBTA_PAN_API_ENABLE* p_buf = + (tBTA_PAN_API_ENABLE*)osi_malloc(sizeof(tBTA_PAN_API_ENABLE)); - /* register with BTA system manager */ - bta_sys_register(BTA_ID_PAN, &bta_pan_reg); + /* register with BTA system manager */ + bta_sys_register(BTA_ID_PAN, &bta_pan_reg); - p_buf->hdr.event = BTA_PAN_API_ENABLE_EVT; - p_buf->p_cback = p_cback; + p_buf->hdr.event = BTA_PAN_API_ENABLE_EVT; + p_buf->p_cback = p_cback; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } - - /******************************************************************************* * * Function BTA_PanDisable @@ -81,14 +74,13 @@ void BTA_PanEnable(tBTA_PAN_CBACK p_cback) * Returns void * ******************************************************************************/ -void BTA_PanDisable(void) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_PanDisable(void) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - bta_sys_deregister(BTA_ID_PAN); - p_buf->event = BTA_PAN_API_DISABLE_EVT; + bta_sys_deregister(BTA_ID_PAN); + p_buf->event = BTA_PAN_API_DISABLE_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -96,46 +88,46 @@ void BTA_PanDisable(void) * Function BTA_PanSetRole * * Description Sets PAN roles. When the enable operation is complete - * the callback function will be called with a BTA_PAN_SET_ROLE_EVT. + * the callback function will be called with a + *BTA_PAN_SET_ROLE_EVT. * * Returns void * ******************************************************************************/ -void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO *p_user_info, tBTA_PAN_ROLE_INFO *p_gn_info, - tBTA_PAN_ROLE_INFO *p_nap_info) -{ - tBTA_PAN_API_SET_ROLE *p_buf = - (tBTA_PAN_API_SET_ROLE *)osi_calloc(sizeof(tBTA_PAN_API_SET_ROLE)); +void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO* p_user_info, + tBTA_PAN_ROLE_INFO* p_gn_info, + tBTA_PAN_ROLE_INFO* p_nap_info) { + tBTA_PAN_API_SET_ROLE* p_buf = + (tBTA_PAN_API_SET_ROLE*)osi_calloc(sizeof(tBTA_PAN_API_SET_ROLE)); - p_buf->hdr.event = BTA_PAN_API_SET_ROLE_EVT; - p_buf->role = role; + p_buf->hdr.event = BTA_PAN_API_SET_ROLE_EVT; + p_buf->role = role; - if (p_user_info && (role & BTA_PAN_ROLE_PANU)) { - if (p_user_info->p_srv_name) - strlcpy(p_buf->user_name, p_user_info->p_srv_name, BTA_SERVICE_NAME_LEN); + if (p_user_info && (role & BTA_PAN_ROLE_PANU)) { + if (p_user_info->p_srv_name) + strlcpy(p_buf->user_name, p_user_info->p_srv_name, BTA_SERVICE_NAME_LEN); - p_buf->user_app_id = p_user_info->app_id; - p_buf->user_sec_mask = p_user_info->sec_mask; - } + p_buf->user_app_id = p_user_info->app_id; + p_buf->user_sec_mask = p_user_info->sec_mask; + } - if (p_gn_info && (role & BTA_PAN_ROLE_GN)) { - if (p_gn_info->p_srv_name) - strlcpy(p_buf->gn_name, p_gn_info->p_srv_name, BTA_SERVICE_NAME_LEN); + if (p_gn_info && (role & BTA_PAN_ROLE_GN)) { + if (p_gn_info->p_srv_name) + strlcpy(p_buf->gn_name, p_gn_info->p_srv_name, BTA_SERVICE_NAME_LEN); - p_buf->gn_app_id = p_gn_info->app_id; - p_buf->gn_sec_mask = p_gn_info->sec_mask; - } + p_buf->gn_app_id = p_gn_info->app_id; + p_buf->gn_sec_mask = p_gn_info->sec_mask; + } - if (p_nap_info && (role & BTA_PAN_ROLE_NAP)) { - if (p_nap_info->p_srv_name) - strlcpy(p_buf->nap_name, p_nap_info->p_srv_name, BTA_SERVICE_NAME_LEN); + if (p_nap_info && (role & BTA_PAN_ROLE_NAP)) { + if (p_nap_info->p_srv_name) + strlcpy(p_buf->nap_name, p_nap_info->p_srv_name, BTA_SERVICE_NAME_LEN); - p_buf->nap_app_id = p_nap_info->app_id; - p_buf->nap_sec_mask = p_nap_info->sec_mask; + p_buf->nap_app_id = p_nap_info->app_id; + p_buf->nap_sec_mask = p_nap_info->sec_mask; + } - } - - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -150,17 +142,17 @@ void BTA_PanSetRole(tBTA_PAN_ROLE role, tBTA_PAN_ROLE_INFO *p_user_info, tBTA_PA * Returns void * ******************************************************************************/ -void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role, tBTA_PAN_ROLE peer_role) -{ - tBTA_PAN_API_OPEN *p_buf = - (tBTA_PAN_API_OPEN *)osi_malloc(sizeof(tBTA_PAN_API_OPEN)); +void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role, + tBTA_PAN_ROLE peer_role) { + tBTA_PAN_API_OPEN* p_buf = + (tBTA_PAN_API_OPEN*)osi_malloc(sizeof(tBTA_PAN_API_OPEN)); - p_buf->hdr.event = BTA_PAN_API_OPEN_EVT; - p_buf->local_role = local_role; - p_buf->peer_role = peer_role; - bdcpy(p_buf->bd_addr, bd_addr); + p_buf->hdr.event = BTA_PAN_API_OPEN_EVT; + p_buf->local_role = local_role; + p_buf->peer_role = peer_role; + bdcpy(p_buf->bd_addr, bd_addr); - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -173,37 +165,29 @@ void BTA_PanOpen(BD_ADDR bd_addr, tBTA_PAN_ROLE local_role, tBTA_PAN_ROLE * Returns void * ******************************************************************************/ -void BTA_PanClose(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void BTA_PanClose(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->event = BTA_PAN_API_CLOSE_EVT; - p_buf->layer_specific = handle; + p_buf->event = BTA_PAN_API_CLOSE_EVT; + p_buf->layer_specific = handle; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } #else -void BTA_PanEnable(UNUSED_ATTR tBTA_PAN_CBACK p_cback) -{ -} +void BTA_PanEnable(UNUSED_ATTR tBTA_PAN_CBACK p_cback) {} -void BTA_PanDisable(void) -{ -} +void BTA_PanDisable(void) {} -void BTA_PanSetRole(UNUSED_ATTR tBTA_PAN_ROLE role, UNUSED_ATTR tBTA_PAN_ROLE_INFO *p_user_info, UNUSED_ATTR tBTA_PAN_ROLE_INFO *p_gn_info, - UNUSED_ATTR tBTA_PAN_ROLE_INFO *p_nap_info) -{ -} +void BTA_PanSetRole(UNUSED_ATTR tBTA_PAN_ROLE role, + UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_user_info, + UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_gn_info, + UNUSED_ATTR tBTA_PAN_ROLE_INFO* p_nap_info) {} -void BTA_PanOpen(UNUSED_ATTR BD_ADDR bd_addr, UNUSED_ATTR tBTA_PAN_ROLE local_role, - UNUSED_ATTR tBTA_PAN_ROLE peer_role) -{ -} +void BTA_PanOpen(UNUSED_ATTR BD_ADDR bd_addr, + UNUSED_ATTR tBTA_PAN_ROLE local_role, + UNUSED_ATTR tBTA_PAN_ROLE peer_role) {} -void BTA_PanClose(UNUSED_ATTR uint16_t handle) -{ -} +void BTA_PanClose(UNUSED_ATTR uint16_t handle) {} #endif /* BTA_PAN_INCLUDED */ diff --git a/system/bta/pan/bta_pan_ci.cc b/system/bta/pan/bta_pan_ci.cc index 353e8e3ef6b..8f9054a8e96 100644 --- a/system/bta/pan/bta_pan_ci.cc +++ b/system/bta/pan/bta_pan_ci.cc @@ -27,13 +27,13 @@ #include #include "bt_common.h" -#include "pan_api.h" +#include "bt_utils.h" #include "bta_api.h" #include "bta_pan_api.h" #include "bta_pan_ci.h" #include "bta_pan_int.h" -#include "bt_utils.h" #include "osi/include/osi.h" +#include "pan_api.h" #if (BTA_PAN_INCLUDED == TRUE) @@ -42,7 +42,8 @@ * Function bta_pan_ci_tx_ready * * Description This function sends an event to PAN indicating the phone is - * ready for more data and PAN should call bta_pan_co_tx_path(). + * ready for more data and PAN should call + *bta_pan_co_tx_path(). * This function is used when the TX data path is configured * to use a pull interface. * @@ -50,14 +51,13 @@ * Returns void * ******************************************************************************/ -void bta_pan_ci_tx_ready(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void bta_pan_ci_tx_ready(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->layer_specific = handle; - p_buf->event = BTA_PAN_CI_TX_READY_EVT; + p_buf->layer_specific = handle; + p_buf->event = BTA_PAN_CI_TX_READY_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -73,14 +73,13 @@ void bta_pan_ci_tx_ready(uint16_t handle) * Returns void * ******************************************************************************/ -void bta_pan_ci_rx_ready(uint16_t handle) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); +void bta_pan_ci_rx_ready(uint16_t handle) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); - p_buf->layer_specific = handle; - p_buf->event = BTA_PAN_CI_RX_READY_EVT; + p_buf->layer_specific = handle; + p_buf->event = BTA_PAN_CI_RX_READY_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -98,16 +97,15 @@ void bta_pan_ci_rx_ready(uint16_t handle) * Returns void * ******************************************************************************/ -void bta_pan_ci_tx_flow(uint16_t handle, bool enable) -{ - tBTA_PAN_CI_TX_FLOW *p_buf = - (tBTA_PAN_CI_TX_FLOW *)osi_malloc(sizeof(tBTA_PAN_CI_TX_FLOW)); +void bta_pan_ci_tx_flow(uint16_t handle, bool enable) { + tBTA_PAN_CI_TX_FLOW* p_buf = + (tBTA_PAN_CI_TX_FLOW*)osi_malloc(sizeof(tBTA_PAN_CI_TX_FLOW)); - p_buf->hdr.layer_specific = handle; - p_buf->hdr.event = BTA_PAN_CI_TX_FLOW_EVT; - p_buf->enable = enable; + p_buf->hdr.layer_specific = handle; + p_buf->hdr.event = BTA_PAN_CI_TX_FLOW_EVT; + p_buf->enable = enable; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -122,27 +120,27 @@ void bta_pan_ci_tx_flow(uint16_t handle, bool enable) * Returns void * ******************************************************************************/ -void bta_pan_ci_rx_write(uint16_t handle, BD_ADDR dst, BD_ADDR src, uint16_t protocol, - uint8_t *p_data, uint16_t len, bool ext) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(PAN_BUF_SIZE); +void bta_pan_ci_rx_write(uint16_t handle, BD_ADDR dst, BD_ADDR src, + uint16_t protocol, uint8_t* p_data, uint16_t len, + bool ext) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(PAN_BUF_SIZE); - p_buf->offset = PAN_MINIMUM_OFFSET; + p_buf->offset = PAN_MINIMUM_OFFSET; - /* copy all other params before the data */ - bdcpy(((tBTA_PAN_DATA_PARAMS *)p_buf)->src, src); - bdcpy(((tBTA_PAN_DATA_PARAMS *)p_buf)->dst, dst); - ((tBTA_PAN_DATA_PARAMS *)p_buf)->protocol = protocol; - ((tBTA_PAN_DATA_PARAMS *)p_buf)->ext = ext; - p_buf->len=len; + /* copy all other params before the data */ + bdcpy(((tBTA_PAN_DATA_PARAMS*)p_buf)->src, src); + bdcpy(((tBTA_PAN_DATA_PARAMS*)p_buf)->dst, dst); + ((tBTA_PAN_DATA_PARAMS*)p_buf)->protocol = protocol; + ((tBTA_PAN_DATA_PARAMS*)p_buf)->ext = ext; + p_buf->len = len; - /* copy data */ - memcpy((uint8_t *)(p_buf + 1) + p_buf->offset, p_data, len); + /* copy data */ + memcpy((uint8_t*)(p_buf + 1) + p_buf->offset, p_data, len); - p_buf->layer_specific = handle; - p_buf->event = BTA_PAN_CI_RX_WRITEBUF_EVT; + p_buf->layer_specific = handle; + p_buf->event = BTA_PAN_CI_RX_WRITEBUF_EVT; - bta_sys_sendmsg(p_buf); + bta_sys_sendmsg(p_buf); } /******************************************************************************* @@ -159,24 +157,19 @@ void bta_pan_ci_rx_write(uint16_t handle, BD_ADDR dst, BD_ADDR src, uint16_t pro * Returns void * ******************************************************************************/ -void bta_pan_ci_rx_writebuf(uint16_t handle, BD_ADDR dst, BD_ADDR src, uint16_t protocol, - BT_HDR *p_buf, bool ext) -{ - - /* copy all other params before the data */ - bdcpy(((tBTA_PAN_DATA_PARAMS *)p_buf)->src, src); - bdcpy(((tBTA_PAN_DATA_PARAMS *)p_buf)->dst, dst); - ((tBTA_PAN_DATA_PARAMS *)p_buf)->protocol = protocol; - ((tBTA_PAN_DATA_PARAMS *)p_buf)->ext = ext; - - p_buf->layer_specific = handle; - p_buf->event = BTA_PAN_CI_RX_WRITEBUF_EVT; - bta_sys_sendmsg(p_buf); +void bta_pan_ci_rx_writebuf(uint16_t handle, BD_ADDR dst, BD_ADDR src, + uint16_t protocol, BT_HDR* p_buf, bool ext) { + /* copy all other params before the data */ + bdcpy(((tBTA_PAN_DATA_PARAMS*)p_buf)->src, src); + bdcpy(((tBTA_PAN_DATA_PARAMS*)p_buf)->dst, dst); + ((tBTA_PAN_DATA_PARAMS*)p_buf)->protocol = protocol; + ((tBTA_PAN_DATA_PARAMS*)p_buf)->ext = ext; + + p_buf->layer_specific = handle; + p_buf->event = BTA_PAN_CI_RX_WRITEBUF_EVT; + bta_sys_sendmsg(p_buf); } - - - /******************************************************************************* * * Function bta_pan_ci_readbuf @@ -187,28 +180,25 @@ void bta_pan_ci_rx_writebuf(uint16_t handle, BD_ADDR dst, BD_ADDR src, uint16_t * Returns void * ******************************************************************************/ -BT_HDR * bta_pan_ci_readbuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, uint16_t* p_protocol, - bool* p_ext, bool* p_forward) -{ - tBTA_PAN_SCB * p_scb; - BT_HDR * p_buf; - - p_scb = bta_pan_scb_by_handle(handle); - - p_buf = (BT_HDR *)fixed_queue_try_dequeue(p_scb->data_queue); - if (p_buf != NULL) - { - bdcpy(src,((tBTA_PAN_DATA_PARAMS *)p_buf)->src); - bdcpy(dst,((tBTA_PAN_DATA_PARAMS *)p_buf)->dst); - *p_protocol = ((tBTA_PAN_DATA_PARAMS *)p_buf)->protocol; - *p_ext = ((tBTA_PAN_DATA_PARAMS *)p_buf)->ext; - *p_forward = ((tBTA_PAN_DATA_PARAMS *)p_buf)->forward; - } - - return p_buf; +BT_HDR* bta_pan_ci_readbuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, + uint16_t* p_protocol, bool* p_ext, bool* p_forward) { + tBTA_PAN_SCB* p_scb; + BT_HDR* p_buf; + + p_scb = bta_pan_scb_by_handle(handle); + + p_buf = (BT_HDR*)fixed_queue_try_dequeue(p_scb->data_queue); + if (p_buf != NULL) { + bdcpy(src, ((tBTA_PAN_DATA_PARAMS*)p_buf)->src); + bdcpy(dst, ((tBTA_PAN_DATA_PARAMS*)p_buf)->dst); + *p_protocol = ((tBTA_PAN_DATA_PARAMS*)p_buf)->protocol; + *p_ext = ((tBTA_PAN_DATA_PARAMS*)p_buf)->ext; + *p_forward = ((tBTA_PAN_DATA_PARAMS*)p_buf)->forward; + } + + return p_buf; } - /******************************************************************************* * * Function bta_pan_ci_set_mfilters @@ -219,15 +209,12 @@ BT_HDR * bta_pan_ci_readbuf(uint16_t handle, BD_ADDR src, BD_ADDR dst, uint16_t* * Returns void * ******************************************************************************/ -void bta_pan_ci_set_mfilters(uint16_t handle, uint16_t num_mcast_filters, uint8_t *p_start_array, - uint8_t *p_end_array) -{ - - PAN_SetMulticastFilters(handle, num_mcast_filters, p_start_array, p_end_array); - +void bta_pan_ci_set_mfilters(uint16_t handle, uint16_t num_mcast_filters, + uint8_t* p_start_array, uint8_t* p_end_array) { + PAN_SetMulticastFilters(handle, num_mcast_filters, p_start_array, + p_end_array); } - /******************************************************************************* * * Function bta_pan_ci_set_mfilters @@ -238,47 +225,39 @@ void bta_pan_ci_set_mfilters(uint16_t handle, uint16_t num_mcast_filters, uint8_ * Returns void * ******************************************************************************/ -void bta_pan_ci_set_pfilters(uint16_t handle, uint16_t num_filters, uint16_t *p_start_array, uint16_t *p_end_array) -{ - - PAN_SetProtocolFilters(handle, num_filters, p_start_array, p_end_array ); - +void bta_pan_ci_set_pfilters(uint16_t handle, uint16_t num_filters, + uint16_t* p_start_array, uint16_t* p_end_array) { + PAN_SetProtocolFilters(handle, num_filters, p_start_array, p_end_array); } #else -void bta_pan_ci_tx_ready(UNUSED_ATTR uint16_t handle) -{ -} +void bta_pan_ci_tx_ready(UNUSED_ATTR uint16_t handle) {} -void bta_pan_ci_rx_ready(UNUSED_ATTR uint16_t handle) -{ -} +void bta_pan_ci_rx_ready(UNUSED_ATTR uint16_t handle) {} -void bta_pan_ci_tx_flow(UNUSED_ATTR uint16_t handle, - UNUSED_ATTR bool enable) -{ -} +void bta_pan_ci_tx_flow(UNUSED_ATTR uint16_t handle, UNUSED_ATTR bool enable) {} -void bta_pan_ci_rx_writebuf(UNUSED_ATTR uint16_t handle, UNUSED_ATTR BD_ADDR src, UNUSED_ATTR BD_ADDR dst, UNUSED_ATTR uint16_t protocol, UNUSED_ATTR BT_HDR *p_buf, - UNUSED_ATTR bool ext) -{ -} +void bta_pan_ci_rx_writebuf(UNUSED_ATTR uint16_t handle, + UNUSED_ATTR BD_ADDR src, UNUSED_ATTR BD_ADDR dst, + UNUSED_ATTR uint16_t protocol, + UNUSED_ATTR BT_HDR* p_buf, UNUSED_ATTR bool ext) {} -BT_HDR * bta_pan_ci_readbuf(UNUSED_ATTR uint16_t handle, UNUSED_ATTR BD_ADDR src, UNUSED_ATTR BD_ADDR dst, UNUSED_ATTR uint16_t *p_protocol, - UNUSED_ATTR bool *p_ext, - UNUSED_ATTR bool *p_forward) -{ - return NULL; +BT_HDR* bta_pan_ci_readbuf(UNUSED_ATTR uint16_t handle, UNUSED_ATTR BD_ADDR src, + UNUSED_ATTR BD_ADDR dst, + UNUSED_ATTR uint16_t* p_protocol, + UNUSED_ATTR bool* p_ext, + UNUSED_ATTR bool* p_forward) { + return NULL; } -void bta_pan_ci_set_pfilters(UNUSED_ATTR uint16_t handle, UNUSED_ATTR uint16_t num_filters, UNUSED_ATTR uint16_t *p_start_array, - UNUSED_ATTR uint16_t *p_end_array) -{ -} +void bta_pan_ci_set_pfilters(UNUSED_ATTR uint16_t handle, + UNUSED_ATTR uint16_t num_filters, + UNUSED_ATTR uint16_t* p_start_array, + UNUSED_ATTR uint16_t* p_end_array) {} -void bta_pan_ci_set_mfilters(UNUSED_ATTR uint16_t handle, UNUSED_ATTR uint16_t num_mcast_filters, UNUSED_ATTR uint8_t *p_start_array, - UNUSED_ATTR uint8_t *p_end_array) -{ -} +void bta_pan_ci_set_mfilters(UNUSED_ATTR uint16_t handle, + UNUSED_ATTR uint16_t num_mcast_filters, + UNUSED_ATTR uint8_t* p_start_array, + UNUSED_ATTR uint8_t* p_end_array) {} #endif /* BTA_PAN_API */ diff --git a/system/bta/pan/bta_pan_int.h b/system/bta/pan/bta_pan_int.h index 85ee3b82e29..71658f2fc7c 100644 --- a/system/bta/pan/bta_pan_int.h +++ b/system/bta/pan/bta_pan_int.h @@ -24,192 +24,163 @@ #ifndef BTA_PAN_INT_H #define BTA_PAN_INT_H -#include "osi/include/fixed_queue.h" -#include "bta_sys.h" #include "bta_pan_api.h" +#include "bta_sys.h" +#include "osi/include/fixed_queue.h" /***************************************************************************** * Constants ****************************************************************************/ - - - /* PAN events */ -enum -{ - /* these events are handled by the state machine */ - BTA_PAN_API_CLOSE_EVT = BTA_SYS_EVT_START(BTA_ID_PAN), - BTA_PAN_CI_TX_READY_EVT, - BTA_PAN_CI_RX_READY_EVT, - BTA_PAN_CI_TX_FLOW_EVT, - BTA_PAN_CI_RX_WRITE_EVT, - BTA_PAN_CI_RX_WRITEBUF_EVT, - BTA_PAN_CONN_OPEN_EVT, - BTA_PAN_CONN_CLOSE_EVT, - BTA_PAN_BNEP_FLOW_ENABLE_EVT, - BTA_PAN_RX_FROM_BNEP_READY_EVT, - - /* these events are handled outside of the state machine */ - BTA_PAN_API_ENABLE_EVT, - BTA_PAN_API_DISABLE_EVT, - BTA_PAN_API_SET_ROLE_EVT, - BTA_PAN_API_OPEN_EVT +enum { + /* these events are handled by the state machine */ + BTA_PAN_API_CLOSE_EVT = BTA_SYS_EVT_START(BTA_ID_PAN), + BTA_PAN_CI_TX_READY_EVT, + BTA_PAN_CI_RX_READY_EVT, + BTA_PAN_CI_TX_FLOW_EVT, + BTA_PAN_CI_RX_WRITE_EVT, + BTA_PAN_CI_RX_WRITEBUF_EVT, + BTA_PAN_CONN_OPEN_EVT, + BTA_PAN_CONN_CLOSE_EVT, + BTA_PAN_BNEP_FLOW_ENABLE_EVT, + BTA_PAN_RX_FROM_BNEP_READY_EVT, + + /* these events are handled outside of the state machine */ + BTA_PAN_API_ENABLE_EVT, + BTA_PAN_API_DISABLE_EVT, + BTA_PAN_API_SET_ROLE_EVT, + BTA_PAN_API_OPEN_EVT }; /* state machine states */ -enum -{ - BTA_PAN_IDLE_ST, - BTA_PAN_OPEN_ST, - BTA_PAN_CLOSING_ST -}; - - - +enum { BTA_PAN_IDLE_ST, BTA_PAN_OPEN_ST, BTA_PAN_CLOSING_ST }; /***************************************************************************** * Data types ****************************************************************************/ /* data type for BTA_PAN_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; /* Event header */ - tBTA_PAN_CBACK *p_cback; /* PAN callback function */ +typedef struct { + BT_HDR hdr; /* Event header */ + tBTA_PAN_CBACK* p_cback; /* PAN callback function */ } tBTA_PAN_API_ENABLE; /* data type for BTA_PAN_API_REG_ROLE_EVT */ -typedef struct -{ - BT_HDR hdr; /* Event header */ - char user_name[BTA_SERVICE_NAME_LEN+1]; /* Service name */ - char gn_name[BTA_SERVICE_NAME_LEN+1]; /* Service name */ - char nap_name[BTA_SERVICE_NAME_LEN+1]; /* Service name */ - tBTA_PAN_ROLE role; - uint8_t user_app_id; - uint8_t gn_app_id; - uint8_t nap_app_id; - tBTA_SEC user_sec_mask; /* Security mask */ - tBTA_SEC gn_sec_mask; /* Security mask */ - tBTA_SEC nap_sec_mask; /* Security mask */ - +typedef struct { + BT_HDR hdr; /* Event header */ + char user_name[BTA_SERVICE_NAME_LEN + 1]; /* Service name */ + char gn_name[BTA_SERVICE_NAME_LEN + 1]; /* Service name */ + char nap_name[BTA_SERVICE_NAME_LEN + 1]; /* Service name */ + tBTA_PAN_ROLE role; + uint8_t user_app_id; + uint8_t gn_app_id; + uint8_t nap_app_id; + tBTA_SEC user_sec_mask; /* Security mask */ + tBTA_SEC gn_sec_mask; /* Security mask */ + tBTA_SEC nap_sec_mask; /* Security mask */ } tBTA_PAN_API_SET_ROLE; /* data type for BTA_PAN_API_OPEN_EVT */ -typedef struct -{ - BT_HDR hdr; /* Event header */ - tBTA_PAN_ROLE local_role; /* local role */ - tBTA_PAN_ROLE peer_role; /* peer role */ - BD_ADDR bd_addr; /* peer bdaddr */ +typedef struct { + BT_HDR hdr; /* Event header */ + tBTA_PAN_ROLE local_role; /* local role */ + tBTA_PAN_ROLE peer_role; /* peer role */ + BD_ADDR bd_addr; /* peer bdaddr */ } tBTA_PAN_API_OPEN; /* data type for BTA_PAN_CI_TX_FLOW_EVT */ -typedef struct -{ - BT_HDR hdr; /* Event header */ - bool enable; /* Flow control setting */ +typedef struct { + BT_HDR hdr; /* Event header */ + bool enable; /* Flow control setting */ } tBTA_PAN_CI_TX_FLOW; /* data type for BTA_PAN_CONN_OPEN_EVT */ -typedef struct -{ - BT_HDR hdr; /* Event header */ - tPAN_RESULT result; +typedef struct { + BT_HDR hdr; /* Event header */ + tPAN_RESULT result; } tBTA_PAN_CONN; - - - /* union of all data types */ -typedef union -{ - BT_HDR hdr; - tBTA_PAN_API_ENABLE api_enable; - tBTA_PAN_API_SET_ROLE api_set_role; - tBTA_PAN_API_OPEN api_open; - tBTA_PAN_CI_TX_FLOW ci_tx_flow; - tBTA_PAN_CONN conn; +typedef union { + BT_HDR hdr; + tBTA_PAN_API_ENABLE api_enable; + tBTA_PAN_API_SET_ROLE api_set_role; + tBTA_PAN_API_OPEN api_open; + tBTA_PAN_CI_TX_FLOW ci_tx_flow; + tBTA_PAN_CONN conn; } tBTA_PAN_DATA; /* state machine control block */ -typedef struct -{ - BD_ADDR bd_addr; /* peer bdaddr */ - fixed_queue_t *data_queue; /* Queue of buffers waiting to be passed to application */ - uint16_t handle; /* BTA PAN/BNEP handle */ - bool in_use; /* scb in use */ - tBTA_SEC sec_mask; /* Security mask */ - bool pan_flow_enable;/* BNEP flow control state */ - bool app_flow_enable;/* Application flow control state */ - uint8_t state; /* State machine state */ - tBTA_PAN_ROLE local_role; /* local role */ - tBTA_PAN_ROLE peer_role; /* peer role */ - uint8_t app_id; /* application id for the connection */ +typedef struct { + BD_ADDR bd_addr; /* peer bdaddr */ + fixed_queue_t* + data_queue; /* Queue of buffers waiting to be passed to application */ + uint16_t handle; /* BTA PAN/BNEP handle */ + bool in_use; /* scb in use */ + tBTA_SEC sec_mask; /* Security mask */ + bool pan_flow_enable; /* BNEP flow control state */ + bool app_flow_enable; /* Application flow control state */ + uint8_t state; /* State machine state */ + tBTA_PAN_ROLE local_role; /* local role */ + tBTA_PAN_ROLE peer_role; /* peer role */ + uint8_t app_id; /* application id for the connection */ } tBTA_PAN_SCB; - - /* main control block */ -typedef struct -{ - tBTA_PAN_SCB scb[BTA_PAN_NUM_CONN]; /* state machine control blocks */ - tBTA_PAN_CBACK *p_cback; /* PAN callback function */ - uint8_t app_id[3]; /* application id for PAN roles */ - uint8_t flow_mask; /* Data flow mask */ - uint8_t q_level; /* queue level set by application for TX data */ +typedef struct { + tBTA_PAN_SCB scb[BTA_PAN_NUM_CONN]; /* state machine control blocks */ + tBTA_PAN_CBACK* p_cback; /* PAN callback function */ + uint8_t app_id[3]; /* application id for PAN roles */ + uint8_t flow_mask; /* Data flow mask */ + uint8_t q_level; /* queue level set by application for TX data */ } tBTA_PAN_CB; - /* pan data param */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR src; - BD_ADDR dst; - uint16_t protocol; - bool ext; - bool forward; +typedef struct { + BT_HDR hdr; + BD_ADDR src; + BD_ADDR dst; + uint16_t protocol; + bool ext; + bool forward; } tBTA_PAN_DATA_PARAMS; - /***************************************************************************** * Global data ****************************************************************************/ /* PAN control block */ -extern tBTA_PAN_CB bta_pan_cb; +extern tBTA_PAN_CB bta_pan_cb; /***************************************************************************** * Function prototypes ****************************************************************************/ -extern tBTA_PAN_SCB *bta_pan_scb_alloc(void); -extern void bta_pan_scb_dealloc(tBTA_PAN_SCB *p_scb); -extern uint8_t bta_pan_scb_to_idx(tBTA_PAN_SCB *p_scb); -extern tBTA_PAN_SCB *bta_pan_scb_by_handle(uint16_t handle); -extern bool bta_pan_hdl_event(BT_HDR *p_msg); +extern tBTA_PAN_SCB* bta_pan_scb_alloc(void); +extern void bta_pan_scb_dealloc(tBTA_PAN_SCB* p_scb); +extern uint8_t bta_pan_scb_to_idx(tBTA_PAN_SCB* p_scb); +extern tBTA_PAN_SCB* bta_pan_scb_by_handle(uint16_t handle); +extern bool bta_pan_hdl_event(BT_HDR* p_msg); /* action functions */ -extern void bta_pan_enable(tBTA_PAN_DATA *p_data); +extern void bta_pan_enable(tBTA_PAN_DATA* p_data); extern void bta_pan_disable(void); -extern void bta_pan_set_role(tBTA_PAN_DATA *p_data); -extern void bta_pan_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_api_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_set_shutdown(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_rx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_tx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_tx_flow(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_conn_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_conn_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_writebuf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_write_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); -extern void bta_pan_free_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); - +extern void bta_pan_set_role(tBTA_PAN_DATA* p_data); +extern void bta_pan_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_api_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_set_shutdown(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_rx_path(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_tx_path(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_tx_flow(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_conn_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_conn_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_writebuf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_write_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); +extern void bta_pan_free_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); #endif /* BTA_PAN_INT_H */ diff --git a/system/bta/pan/bta_pan_main.cc b/system/bta/pan/bta_pan_main.cc index 2bdf8c95e36..d003bcea65a 100644 --- a/system/bta/pan/bta_pan_main.cc +++ b/system/bta/pan/bta_pan_main.cc @@ -28,128 +28,101 @@ #include -#include "bta_api.h" -#include "bta_sys.h" #include "bt_common.h" -#include "pan_api.h" +#include "bta_api.h" #include "bta_pan_api.h" #include "bta_pan_int.h" +#include "bta_sys.h" #include "osi/include/osi.h" +#include "pan_api.h" #include "utl.h" /***************************************************************************** * Constants and types ****************************************************************************/ - - /* state machine action enumeration list */ -enum -{ - BTA_PAN_API_CLOSE, - BTA_PAN_TX_PATH, - BTA_PAN_RX_PATH, - BTA_PAN_TX_FLOW, - BTA_PAN_WRITE_BUF, - BTA_PAN_CONN_OPEN, - BTA_PAN_CONN_CLOSE, - BTA_PAN_FREE_BUF, - BTA_PAN_IGNORE +enum { + BTA_PAN_API_CLOSE, + BTA_PAN_TX_PATH, + BTA_PAN_RX_PATH, + BTA_PAN_TX_FLOW, + BTA_PAN_WRITE_BUF, + BTA_PAN_CONN_OPEN, + BTA_PAN_CONN_CLOSE, + BTA_PAN_FREE_BUF, + BTA_PAN_IGNORE }; - - /* type for action functions */ -typedef void (*tBTA_PAN_ACTION)(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data); - - - +typedef void (*tBTA_PAN_ACTION)(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data); /* action function list */ -const tBTA_PAN_ACTION bta_pan_action[] = -{ - bta_pan_api_close, - bta_pan_tx_path, - bta_pan_rx_path, - bta_pan_tx_flow, - bta_pan_write_buf, - bta_pan_conn_open, - bta_pan_conn_close, - bta_pan_free_buf, +const tBTA_PAN_ACTION bta_pan_action[] = { + bta_pan_api_close, bta_pan_tx_path, bta_pan_rx_path, bta_pan_tx_flow, + bta_pan_write_buf, bta_pan_conn_open, bta_pan_conn_close, bta_pan_free_buf, }; /* state table information */ -#define BTA_PAN_ACTIONS 1 /* number of actions */ -#define BTA_PAN_NEXT_STATE 1 /* position of next state */ -#define BTA_PAN_NUM_COLS 2 /* number of columns in state tables */ - - +#define BTA_PAN_ACTIONS 1 /* number of actions */ +#define BTA_PAN_NEXT_STATE 1 /* position of next state */ +#define BTA_PAN_NUM_COLS 2 /* number of columns in state tables */ /* state table for listen state */ -const uint8_t bta_pan_st_idle[][BTA_PAN_NUM_COLS] = -{ - /* API_CLOSE */ {BTA_PAN_API_CLOSE, BTA_PAN_IDLE_ST}, - /* CI_TX_READY */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, - /* CI_RX_READY */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, - /* CI_TX_FLOW */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, - /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, - /* CI_RX_WRITEBUF */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, - /* PAN_CONN_OPEN */ {BTA_PAN_CONN_OPEN, BTA_PAN_OPEN_ST}, - /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_OPEN, BTA_PAN_IDLE_ST}, - /* FLOW_ENABLE */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, - /* BNEP_DATA */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST} +const uint8_t bta_pan_st_idle[][BTA_PAN_NUM_COLS] = { + /* API_CLOSE */ {BTA_PAN_API_CLOSE, BTA_PAN_IDLE_ST}, + /* CI_TX_READY */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, + /* CI_RX_READY */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, + /* CI_TX_FLOW */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, + /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, + /* CI_RX_WRITEBUF */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, + /* PAN_CONN_OPEN */ {BTA_PAN_CONN_OPEN, BTA_PAN_OPEN_ST}, + /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_OPEN, BTA_PAN_IDLE_ST}, + /* FLOW_ENABLE */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST}, + /* BNEP_DATA */ {BTA_PAN_IGNORE, BTA_PAN_IDLE_ST} }; - - /* state table for open state */ -const uint8_t bta_pan_st_open[][BTA_PAN_NUM_COLS] = -{ - /* API_CLOSE */ {BTA_PAN_API_CLOSE, BTA_PAN_OPEN_ST}, - /* CI_TX_READY */ {BTA_PAN_TX_PATH, BTA_PAN_OPEN_ST}, - /* CI_RX_READY */ {BTA_PAN_RX_PATH, BTA_PAN_OPEN_ST}, - /* CI_TX_FLOW */ {BTA_PAN_TX_FLOW, BTA_PAN_OPEN_ST}, - /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_OPEN_ST}, - /* CI_RX_WRITEBUF */ {BTA_PAN_WRITE_BUF, BTA_PAN_OPEN_ST}, - /* PAN_CONN_OPEN */ {BTA_PAN_IGNORE, BTA_PAN_OPEN_ST}, - /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_CLOSE, BTA_PAN_IDLE_ST}, - /* FLOW_ENABLE */ {BTA_PAN_RX_PATH, BTA_PAN_OPEN_ST}, - /* BNEP_DATA */ {BTA_PAN_TX_PATH, BTA_PAN_OPEN_ST} -}; +const uint8_t bta_pan_st_open[][BTA_PAN_NUM_COLS] = { + /* API_CLOSE */ {BTA_PAN_API_CLOSE, BTA_PAN_OPEN_ST}, + /* CI_TX_READY */ {BTA_PAN_TX_PATH, BTA_PAN_OPEN_ST}, + /* CI_RX_READY */ {BTA_PAN_RX_PATH, BTA_PAN_OPEN_ST}, + /* CI_TX_FLOW */ {BTA_PAN_TX_FLOW, BTA_PAN_OPEN_ST}, + /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_OPEN_ST}, + /* CI_RX_WRITEBUF */ {BTA_PAN_WRITE_BUF, BTA_PAN_OPEN_ST}, + /* PAN_CONN_OPEN */ {BTA_PAN_IGNORE, BTA_PAN_OPEN_ST}, + /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_CLOSE, BTA_PAN_IDLE_ST}, + /* FLOW_ENABLE */ {BTA_PAN_RX_PATH, BTA_PAN_OPEN_ST}, + /* BNEP_DATA */ {BTA_PAN_TX_PATH, BTA_PAN_OPEN_ST}}; /* state table for closing state */ -const uint8_t bta_pan_st_closing[][BTA_PAN_NUM_COLS] = -{ - /* API_CLOSE */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, - /* CI_TX_READY */ {BTA_PAN_TX_PATH, BTA_PAN_CLOSING_ST}, - /* CI_RX_READY */ {BTA_PAN_RX_PATH, BTA_PAN_CLOSING_ST}, - /* CI_TX_FLOW */ {BTA_PAN_TX_FLOW, BTA_PAN_CLOSING_ST}, - /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, - /* CI_RX_WRITEBUF */ {BTA_PAN_FREE_BUF, BTA_PAN_CLOSING_ST}, - /* PAN_CONN_OPEN */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, - /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_CLOSE, BTA_PAN_IDLE_ST}, - /* FLOW_ENABLE */ {BTA_PAN_RX_PATH, BTA_PAN_CLOSING_ST}, - /* BNEP_DATA */ {BTA_PAN_TX_PATH, BTA_PAN_CLOSING_ST} -}; +const uint8_t bta_pan_st_closing[][BTA_PAN_NUM_COLS] = { + /* API_CLOSE */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, + /* CI_TX_READY */ {BTA_PAN_TX_PATH, BTA_PAN_CLOSING_ST}, + /* CI_RX_READY */ {BTA_PAN_RX_PATH, BTA_PAN_CLOSING_ST}, + /* CI_TX_FLOW */ {BTA_PAN_TX_FLOW, BTA_PAN_CLOSING_ST}, + /* CI_RX_WRITE */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, + /* CI_RX_WRITEBUF */ {BTA_PAN_FREE_BUF, BTA_PAN_CLOSING_ST}, + /* PAN_CONN_OPEN */ {BTA_PAN_IGNORE, BTA_PAN_CLOSING_ST}, + /* PAN_CONN_CLOSE */ {BTA_PAN_CONN_CLOSE, BTA_PAN_IDLE_ST}, + /* FLOW_ENABLE */ {BTA_PAN_RX_PATH, BTA_PAN_CLOSING_ST}, + /* BNEP_DATA */ {BTA_PAN_TX_PATH, BTA_PAN_CLOSING_ST}}; /* type for state table */ typedef const uint8_t (*tBTA_PAN_ST_TBL)[BTA_PAN_NUM_COLS]; /* state table */ -const tBTA_PAN_ST_TBL bta_pan_st_tbl[] = { - bta_pan_st_idle, - bta_pan_st_open, - bta_pan_st_closing -}; +const tBTA_PAN_ST_TBL bta_pan_st_tbl[] = {bta_pan_st_idle, bta_pan_st_open, + bta_pan_st_closing}; /***************************************************************************** * Global data ****************************************************************************/ /* PAN control block */ -tBTA_PAN_CB bta_pan_cb; +tBTA_PAN_CB bta_pan_cb; /******************************************************************************* * @@ -161,28 +134,24 @@ tBTA_PAN_CB bta_pan_cb; * Returns pointer to the scb, or NULL if none could be allocated. * ******************************************************************************/ -tBTA_PAN_SCB *bta_pan_scb_alloc(void) -{ - tBTA_PAN_SCB *p_scb = &bta_pan_cb.scb[0]; - int i; - - for (i = 0; i < BTA_PAN_NUM_CONN; i++, p_scb++) - { - if (!p_scb->in_use) - { - p_scb->in_use = true; - APPL_TRACE_DEBUG("bta_pan_scb_alloc %d", i); - break; - } - } - - if (i == BTA_PAN_NUM_CONN) - { - /* out of scbs */ - p_scb = NULL; - APPL_TRACE_WARNING("Out of scbs"); +tBTA_PAN_SCB* bta_pan_scb_alloc(void) { + tBTA_PAN_SCB* p_scb = &bta_pan_cb.scb[0]; + int i; + + for (i = 0; i < BTA_PAN_NUM_CONN; i++, p_scb++) { + if (!p_scb->in_use) { + p_scb->in_use = true; + APPL_TRACE_DEBUG("bta_pan_scb_alloc %d", i); + break; } - return p_scb; + } + + if (i == BTA_PAN_NUM_CONN) { + /* out of scbs */ + p_scb = NULL; + APPL_TRACE_WARNING("Out of scbs"); + } + return p_scb; } /******************************************************************************* @@ -195,34 +164,31 @@ tBTA_PAN_SCB *bta_pan_scb_alloc(void) * Returns void * ******************************************************************************/ -static void bta_pan_sm_execute(tBTA_PAN_SCB *p_scb, uint16_t event, tBTA_PAN_DATA *p_data) -{ - tBTA_PAN_ST_TBL state_table; - uint8_t action; - int i; - - APPL_TRACE_EVENT("PAN scb=%d event=0x%x state=%d", bta_pan_scb_to_idx(p_scb), event, p_scb->state); - - /* look up the state table for the current state */ - state_table = bta_pan_st_tbl[p_scb->state]; - - event &= 0x00FF; - - /* set next state */ - p_scb->state = state_table[event][BTA_PAN_NEXT_STATE]; - - /* execute action functions */ - for (i = 0; i < BTA_PAN_ACTIONS; i++) - { - if ((action = state_table[event][i]) != BTA_PAN_IGNORE) - { - (*bta_pan_action[action])(p_scb, p_data); - } - else - { - break; - } +static void bta_pan_sm_execute(tBTA_PAN_SCB* p_scb, uint16_t event, + tBTA_PAN_DATA* p_data) { + tBTA_PAN_ST_TBL state_table; + uint8_t action; + int i; + + APPL_TRACE_EVENT("PAN scb=%d event=0x%x state=%d", bta_pan_scb_to_idx(p_scb), + event, p_scb->state); + + /* look up the state table for the current state */ + state_table = bta_pan_st_tbl[p_scb->state]; + + event &= 0x00FF; + + /* set next state */ + p_scb->state = state_table[event][BTA_PAN_NEXT_STATE]; + + /* execute action functions */ + for (i = 0; i < BTA_PAN_ACTIONS; i++) { + if ((action = state_table[event][i]) != BTA_PAN_IGNORE) { + (*bta_pan_action[action])(p_scb, p_data); + } else { + break; } + } } /******************************************************************************* @@ -235,14 +201,13 @@ static void bta_pan_sm_execute(tBTA_PAN_SCB *p_scb, uint16_t event, tBTA_PAN_DAT * Returns void * ******************************************************************************/ -static void bta_pan_api_enable(tBTA_PAN_DATA *p_data) -{ - /* initialize control block */ - memset(&bta_pan_cb, 0, sizeof(bta_pan_cb)); - - /* store callback function */ - bta_pan_cb.p_cback = p_data->api_enable.p_cback; - bta_pan_enable(p_data); +static void bta_pan_api_enable(tBTA_PAN_DATA* p_data) { + /* initialize control block */ + memset(&bta_pan_cb, 0, sizeof(bta_pan_cb)); + + /* store callback function */ + bta_pan_cb.p_cback = p_data->api_enable.p_cback; + bta_pan_enable(p_data); } /******************************************************************************* @@ -255,12 +220,10 @@ static void bta_pan_api_enable(tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_pan_api_disable(UNUSED_ATTR tBTA_PAN_DATA *p_data) -{ - bta_pan_disable(); +static void bta_pan_api_disable(UNUSED_ATTR tBTA_PAN_DATA* p_data) { + bta_pan_disable(); } - /******************************************************************************* * * Function bta_pan_api_open @@ -271,23 +234,18 @@ static void bta_pan_api_disable(UNUSED_ATTR tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -static void bta_pan_api_open(tBTA_PAN_DATA *p_data) -{ - tBTA_PAN_SCB *p_scb; - tBTA_PAN_OPEN data; - - /* allocate an scb */ - if ((p_scb = bta_pan_scb_alloc()) != NULL) - { - bta_pan_open(p_scb, p_data); - } - else - { - bdcpy(data.bd_addr, p_data->api_open.bd_addr); - data.status = BTA_PAN_FAIL; - bta_pan_cb.p_cback(BTA_PAN_OPEN_EVT, (tBTA_PAN *)&data); - - } +static void bta_pan_api_open(tBTA_PAN_DATA* p_data) { + tBTA_PAN_SCB* p_scb; + tBTA_PAN_OPEN data; + + /* allocate an scb */ + if ((p_scb = bta_pan_scb_alloc()) != NULL) { + bta_pan_open(p_scb, p_data); + } else { + bdcpy(data.bd_addr, p_data->api_open.bd_addr); + data.status = BTA_PAN_FAIL; + bta_pan_cb.p_cback(BTA_PAN_OPEN_EVT, (tBTA_PAN*)&data); + } } /******************************************************************************* * @@ -299,11 +257,10 @@ static void bta_pan_api_open(tBTA_PAN_DATA *p_data) * Returns void * ******************************************************************************/ -void bta_pan_scb_dealloc(tBTA_PAN_SCB *p_scb) -{ - APPL_TRACE_DEBUG("bta_pan_scb_dealloc %d", bta_pan_scb_to_idx(p_scb)); - fixed_queue_free(p_scb->data_queue, NULL); - memset(p_scb, 0, sizeof(tBTA_PAN_SCB)); +void bta_pan_scb_dealloc(tBTA_PAN_SCB* p_scb) { + APPL_TRACE_DEBUG("bta_pan_scb_dealloc %d", bta_pan_scb_to_idx(p_scb)); + fixed_queue_free(p_scb->data_queue, NULL); + memset(p_scb, 0, sizeof(tBTA_PAN_SCB)); } /******************************************************************************* @@ -316,14 +273,10 @@ void bta_pan_scb_dealloc(tBTA_PAN_SCB *p_scb) * Returns Index of scb. * ******************************************************************************/ -uint8_t bta_pan_scb_to_idx(tBTA_PAN_SCB *p_scb) -{ - - return ((uint8_t) (p_scb - bta_pan_cb.scb)) + 1; +uint8_t bta_pan_scb_to_idx(tBTA_PAN_SCB* p_scb) { + return ((uint8_t)(p_scb - bta_pan_cb.scb)) + 1; } - - /******************************************************************************* * * Function bta_pan_scb_by_handle @@ -334,23 +287,20 @@ uint8_t bta_pan_scb_to_idx(tBTA_PAN_SCB *p_scb) * Returns Pointer to scb or NULL if not found. * ******************************************************************************/ -tBTA_PAN_SCB *bta_pan_scb_by_handle(uint16_t handle) -{ - tBTA_PAN_SCB *p_scb = &bta_pan_cb.scb[0]; - uint8_t i; - - for (i = 0; i < BTA_PAN_NUM_CONN; i++, p_scb++) - { - if (p_scb->handle == handle) - { - return p_scb;; - } +tBTA_PAN_SCB* bta_pan_scb_by_handle(uint16_t handle) { + tBTA_PAN_SCB* p_scb = &bta_pan_cb.scb[0]; + uint8_t i; + + for (i = 0; i < BTA_PAN_NUM_CONN; i++, p_scb++) { + if (p_scb->handle == handle) { + return p_scb; + ; } + } + APPL_TRACE_WARNING("No scb for handle %d", handle); - APPL_TRACE_WARNING("No scb for handle %d", handle); - - return NULL; + return NULL; } /******************************************************************************* @@ -363,52 +313,46 @@ tBTA_PAN_SCB *bta_pan_scb_by_handle(uint16_t handle) * Returns void * ******************************************************************************/ -bool bta_pan_hdl_event(BT_HDR *p_msg) -{ - tBTA_PAN_SCB *p_scb; - bool freebuf = true; - - switch (p_msg->event) - { - /* handle enable event */ - case BTA_PAN_API_ENABLE_EVT: - bta_pan_api_enable((tBTA_PAN_DATA *) p_msg); - break; - - /* handle disable event */ - case BTA_PAN_API_DISABLE_EVT: - bta_pan_api_disable((tBTA_PAN_DATA *) p_msg); - break; - - /* handle set role event */ - case BTA_PAN_API_SET_ROLE_EVT: - bta_pan_set_role((tBTA_PAN_DATA *) p_msg); - break; - - /* handle open event */ - case BTA_PAN_API_OPEN_EVT: - bta_pan_api_open((tBTA_PAN_DATA *) p_msg); - break; - - - /* events that require buffer not be released */ - case BTA_PAN_CI_RX_WRITEBUF_EVT: - freebuf = false; - if ((p_scb = bta_pan_scb_by_handle(p_msg->layer_specific)) != NULL) - { - bta_pan_sm_execute(p_scb, p_msg->event, (tBTA_PAN_DATA *) p_msg); - } - break; - - /* all other events */ - default: - if ((p_scb = bta_pan_scb_by_handle(p_msg->layer_specific)) != NULL) - { - bta_pan_sm_execute(p_scb, p_msg->event, (tBTA_PAN_DATA *) p_msg); - } - break; - - } - return freebuf; +bool bta_pan_hdl_event(BT_HDR* p_msg) { + tBTA_PAN_SCB* p_scb; + bool freebuf = true; + + switch (p_msg->event) { + /* handle enable event */ + case BTA_PAN_API_ENABLE_EVT: + bta_pan_api_enable((tBTA_PAN_DATA*)p_msg); + break; + + /* handle disable event */ + case BTA_PAN_API_DISABLE_EVT: + bta_pan_api_disable((tBTA_PAN_DATA*)p_msg); + break; + + /* handle set role event */ + case BTA_PAN_API_SET_ROLE_EVT: + bta_pan_set_role((tBTA_PAN_DATA*)p_msg); + break; + + /* handle open event */ + case BTA_PAN_API_OPEN_EVT: + bta_pan_api_open((tBTA_PAN_DATA*)p_msg); + break; + + /* events that require buffer not be released */ + case BTA_PAN_CI_RX_WRITEBUF_EVT: + freebuf = false; + if ((p_scb = bta_pan_scb_by_handle(p_msg->layer_specific)) != NULL) { + bta_pan_sm_execute(p_scb, p_msg->event, (tBTA_PAN_DATA*)p_msg); + } + break; + + /* all other events */ + default: + if ((p_scb = bta_pan_scb_by_handle(p_msg->layer_specific)) != NULL) { + bta_pan_sm_execute(p_scb, p_msg->event, (tBTA_PAN_DATA*)p_msg); + } + break; + } + return freebuf; } #endif /* BTA_PAN_INCLUDED */ diff --git a/system/bta/pb/bta_pbs_int.h b/system/bta/pb/bta_pbs_int.h index 8e520a6495a..ae21ce4f9c1 100644 --- a/system/bta/pb/bta_pbs_int.h +++ b/system/bta/pb/bta_pbs_int.h @@ -32,27 +32,28 @@ ****************************************************************************/ /* Profile supported features */ -#define BTA_PBS_SUPF_DOWNLOAD 0x0001 -#define BTA_PBS_SURF_BROWSE 0x0002 +#define BTA_PBS_SUPF_DOWNLOAD 0x0001 +#define BTA_PBS_SURF_BROWSE 0x0002 /* Profile supported repositories */ -#define BTA_PBS_REPOSIT_LOCAL 0x01 /* Local PhoneBook */ -#define BTA_PBS_REPOSIT_SIM 0x02 /* SIM card PhoneBook */ +#define BTA_PBS_REPOSIT_LOCAL 0x01 /* Local PhoneBook */ +#define BTA_PBS_REPOSIT_SIM 0x02 /* SIM card PhoneBook */ -#define BTA_PBS_TARGET_UUID "\x79\x61\x35\xf0\xf0\xc5\x11\xd8\x09\x66\x08\x00\x20\x0c\x9a\x66" -#define BTA_PBS_UUID_LENGTH 16 -#define BTA_PBS_MAX_AUTH_KEY_SIZE 16 /* Must not be greater than OBX_MAX_AUTH_KEY_SIZE */ - -#define BTA_PBS_DEFAULT_VERSION 0x0101 /* for PBAP PSE version 1.1 */ +#define BTA_PBS_TARGET_UUID \ + "\x79\x61\x35\xf0\xf0\xc5\x11\xd8\x09\x66\x08\x00\x20\x0c\x9a\x66" +#define BTA_PBS_UUID_LENGTH 16 +#define BTA_PBS_MAX_AUTH_KEY_SIZE \ + 16 /* Must not be greater than OBX_MAX_AUTH_KEY_SIZE */ +#define BTA_PBS_DEFAULT_VERSION 0x0101 /* for PBAP PSE version 1.1 */ /* Configuration structure */ -typedef struct -{ - uint8_t realm_charset; /* Server only */ - bool userid_req; /* true if user id is required during obex authentication (Server only) */ - uint8_t supported_features; /* Server supported features */ - uint8_t supported_repositories; /* Server supported repositories */ +typedef struct { + uint8_t realm_charset; /* Server only */ + bool userid_req; /* true if user id is required during obex authentication + (Server only) */ + uint8_t supported_features; /* Server supported features */ + uint8_t supported_repositories; /* Server supported repositories */ } tBTA_PBS_CFG; diff --git a/system/bta/sdp/bta_sdp.cc b/system/bta/sdp/bta_sdp.cc index ef5c8d94e23..735d0b799cb 100644 --- a/system/bta/sdp/bta_sdp.cc +++ b/system/bta/sdp/bta_sdp.cc @@ -25,9 +25,9 @@ #include #include "bta_api.h" -#include "bta_sys.h" #include "bta_sdp_api.h" #include "bta_sdp_int.h" +#include "bta_sys.h" /***************************************************************************** * Constants and types @@ -36,18 +36,17 @@ tBTA_SDP_CB bta_sdp_cb; /* state machine action enumeration list */ -#define BTA_SDP_NUM_ACTIONS (BTA_SDP_MAX_INT_EVT & 0x00ff) +#define BTA_SDP_NUM_ACTIONS (BTA_SDP_MAX_INT_EVT & 0x00ff) /* type for action functions */ -typedef void (*tBTA_SDP_ACTION)(tBTA_SDP_MSG *p_data); +typedef void (*tBTA_SDP_ACTION)(tBTA_SDP_MSG* p_data); /* action function list */ -const tBTA_SDP_ACTION bta_sdp_action[] = -{ - bta_sdp_enable, /* BTA_SDP_API_ENABLE_EVT */ - bta_sdp_search, /* BTA_SDP_API_SEARCH_EVT */ - bta_sdp_create_record, /* BTA_SDP_API_CREATE_RECORD_USER_EVT */ - bta_sdp_remove_record, /* BTA_SDP_API_REMOVE_RECORD_USER_EVT */ +const tBTA_SDP_ACTION bta_sdp_action[] = { + bta_sdp_enable, /* BTA_SDP_API_ENABLE_EVT */ + bta_sdp_search, /* BTA_SDP_API_SEARCH_EVT */ + bta_sdp_create_record, /* BTA_SDP_API_CREATE_RECORD_USER_EVT */ + bta_sdp_remove_record, /* BTA_SDP_API_REMOVE_RECORD_USER_EVT */ }; /******************************************************************************* @@ -57,19 +56,17 @@ const tBTA_SDP_ACTION bta_sdp_action[] = * * Returns void ******************************************************************************/ -bool bta_sdp_sm_execute(BT_HDR *p_msg) -{ - if(p_msg == NULL) return false; +bool bta_sdp_sm_execute(BT_HDR* p_msg) { + if (p_msg == NULL) return false; - bool ret = false; - uint16_t action = (p_msg->event & 0x00ff); + bool ret = false; + uint16_t action = (p_msg->event & 0x00ff); - /* execute action functions */ - if(action < BTA_SDP_NUM_ACTIONS) - { - (*bta_sdp_action[action])((tBTA_SDP_MSG*)p_msg); - ret = true; - } + /* execute action functions */ + if (action < BTA_SDP_NUM_ACTIONS) { + (*bta_sdp_action[action])((tBTA_SDP_MSG*)p_msg); + ret = true; + } - return(ret); + return (ret); } diff --git a/system/bta/sdp/bta_sdp_act.cc b/system/bta/sdp/bta_sdp_act.cc index cb3cc13e140..3787298a334 100644 --- a/system/bta/sdp/bta_sdp_act.cc +++ b/system/bta/sdp/bta_sdp_act.cc @@ -20,38 +20,43 @@ * This file contains action functions for SDP search. ******************************************************************************/ +#include #include #include -#include #include #include -#include "osi/include/allocator.h" -#include "bt_types.h" #include "bt_common.h" -#include "utl.h" -#include "bta_sys.h" +#include "bt_types.h" #include "bta_api.h" #include "bta_sdp_api.h" #include "bta_sdp_int.h" +#include "bta_sys.h" #include "btm_api.h" #include "btm_int.h" +#include "osi/include/allocator.h" #include "sdp_api.h" +#include "utl.h" /***************************************************************************** * Constants ****************************************************************************/ -static const uint8_t UUID_OBEX_OBJECT_PUSH[] = {0x00, 0x00, 0x11, 0x05, 0x00, 0x00, 0x10, 0x00, - 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB}; -static const uint8_t UUID_PBAP_PSE[] = {0x00, 0x00, 0x11, 0x2F, 0x00, 0x00, 0x10, 0x00, - 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB}; -static const uint8_t UUID_MAP_MAS[] = {0x00, 0x00, 0x11, 0x32, 0x00, 0x00, 0x10, 0x00, - 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB}; -static const uint8_t UUID_MAP_MNS[] = {0x00, 0x00, 0x11, 0x33, 0x00, 0x00, 0x10, 0x00, - 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB}; -static const uint8_t UUID_SAP[] = {0x00, 0x00, 0x11, 0x2D, 0x00, 0x00, 0x10, 0x00, - 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB}; +static const uint8_t UUID_OBEX_OBJECT_PUSH[] = { + 0x00, 0x00, 0x11, 0x05, 0x00, 0x00, 0x10, 0x00, + 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB}; +static const uint8_t UUID_PBAP_PSE[] = {0x00, 0x00, 0x11, 0x2F, 0x00, 0x00, + 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x5F, 0x9B, 0x34, 0xFB}; +static const uint8_t UUID_MAP_MAS[] = {0x00, 0x00, 0x11, 0x32, 0x00, 0x00, + 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x5F, 0x9B, 0x34, 0xFB}; +static const uint8_t UUID_MAP_MNS[] = {0x00, 0x00, 0x11, 0x33, 0x00, 0x00, + 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x5F, 0x9B, 0x34, 0xFB}; +static const uint8_t UUID_SAP[] = {0x00, 0x00, 0x11, 0x2D, 0x00, 0x00, + 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x5F, 0x9B, 0x34, 0xFB}; // TODO: // Both the fact that the UUIDs are declared in multiple places, plus the fact // that there is a mess of UUID comparison and shortening methods will have to @@ -59,316 +64,309 @@ static const uint8_t UUID_SAP[] = {0x00, 0x00, 0x11, 0x2D, 0x00, 0x00, 0x10, 0x // The btcore->uuid module should be used for all instances. #define UUID_MAX_LENGTH 16 -#define IS_UUID(u1,u2) !memcmp(u1,u2,UUID_MAX_LENGTH) - -static inline tBT_UUID shorten_sdp_uuid(const tBT_UUID* u) -{ - static uint8_t bt_base_uuid[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }; - - APPL_TRACE_DEBUG("%s() - uuid len:%d", __func__, u->len); - if(u->len != 16) - return *u; - - if(memcmp(&u->uu.uuid128[4], &bt_base_uuid[4], 12) != 0) - return *u; - - tBT_UUID su; - memset(&su, 0, sizeof(su)); - if(u->uu.uuid128[0] == 0 && u->uu.uuid128[1] == 0) - { - su.len = 2; - uint16_t u16; - memcpy(&u16, &u->uu.uuid128[2], sizeof(u16)); - su.uu.uuid16 = ntohs(u16); - } else { - su.len = 4; - uint32_t u32; - memcpy(&u32, &u->uu.uuid128[0], sizeof(u32)); - su.uu.uuid32 = ntohl(u32); - } - return su; +#define IS_UUID(u1, u2) !memcmp(u1, u2, UUID_MAX_LENGTH) + +static inline tBT_UUID shorten_sdp_uuid(const tBT_UUID* u) { + static uint8_t bt_base_uuid[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x5F, 0x9B, 0x34, 0xFB}; + + APPL_TRACE_DEBUG("%s() - uuid len:%d", __func__, u->len); + if (u->len != 16) return *u; + + if (memcmp(&u->uu.uuid128[4], &bt_base_uuid[4], 12) != 0) return *u; + + tBT_UUID su; + memset(&su, 0, sizeof(su)); + if (u->uu.uuid128[0] == 0 && u->uu.uuid128[1] == 0) { + su.len = 2; + uint16_t u16; + memcpy(&u16, &u->uu.uuid128[2], sizeof(u16)); + su.uu.uuid16 = ntohs(u16); + } else { + su.len = 4; + uint32_t u32; + memcpy(&u32, &u->uu.uuid128[0], sizeof(u32)); + su.uu.uuid32 = ntohl(u32); + } + return su; } -static void bta_create_mns_sdp_record(bluetooth_sdp_record *record, tSDP_DISC_REC *p_rec) -{ - tSDP_DISC_ATTR *p_attr; - tSDP_PROTOCOL_ELEM pe; - uint16_t pversion = 0; - record->mns.hdr.type = SDP_TYPE_MAP_MNS; - record->mns.hdr.service_name_length = 0; - record->mns.hdr.service_name = NULL; - record->mns.hdr.rfcomm_channel_number = 0; - record->mns.hdr.l2cap_psm = -1; - record->mns.hdr.profile_version = 0; - record->mns.supported_features = 0x0000001F; //default value if not found - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_MAP_SUPPORTED_FEATURES)) != NULL) - { - record->mns.supported_features = p_attr->attr_value.v.u32; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) - { - record->mns.hdr.service_name_length = SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - record->mns.hdr.service_name = (char *)p_attr->attr_value.v.array; - } - - if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_MAP_PROFILE, &pversion)) - { - record->mns.hdr.profile_version = pversion; - } - - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - record->mns.hdr.rfcomm_channel_number = pe.params[0]; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_GOEP_L2CAP_PSM)) != NULL) - { - record->mns.hdr.l2cap_psm = p_attr->attr_value.v.u16; - } +static void bta_create_mns_sdp_record(bluetooth_sdp_record* record, + tSDP_DISC_REC* p_rec) { + tSDP_DISC_ATTR* p_attr; + tSDP_PROTOCOL_ELEM pe; + uint16_t pversion = 0; + record->mns.hdr.type = SDP_TYPE_MAP_MNS; + record->mns.hdr.service_name_length = 0; + record->mns.hdr.service_name = NULL; + record->mns.hdr.rfcomm_channel_number = 0; + record->mns.hdr.l2cap_psm = -1; + record->mns.hdr.profile_version = 0; + record->mns.supported_features = 0x0000001F; // default value if not found + + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_MAP_SUPPORTED_FEATURES)) != NULL) { + record->mns.supported_features = p_attr->attr_value.v.u32; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) { + record->mns.hdr.service_name_length = + SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + record->mns.hdr.service_name = (char*)p_attr->attr_value.v.array; + } + + if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_MAP_PROFILE, + &pversion)) { + record->mns.hdr.profile_version = pversion; + } + + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + record->mns.hdr.rfcomm_channel_number = pe.params[0]; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_GOEP_L2CAP_PSM)) != + NULL) { + record->mns.hdr.l2cap_psm = p_attr->attr_value.v.u16; + } } -static void bta_create_mas_sdp_record(bluetooth_sdp_record *record, tSDP_DISC_REC *p_rec) -{ - tSDP_DISC_ATTR *p_attr; - tSDP_PROTOCOL_ELEM pe; - uint16_t pversion = -1; - - record->mas.hdr.type = SDP_TYPE_MAP_MAS; - record->mas.hdr.service_name_length = 0; - record->mas.hdr.service_name = NULL; - record->mas.hdr.rfcomm_channel_number = 0; - record->mas.hdr.l2cap_psm = -1; - record->mas.hdr.profile_version = 0; - record->mas.mas_instance_id = 0; - record->mas.supported_features = 0x0000001F; - record->mas.supported_message_types = 0; - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_MAS_INSTANCE_ID)) != NULL) - { - record->mas.mas_instance_id = p_attr->attr_value.v.u8; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_MSG_TYPE)) != NULL) - { - record->mas.supported_message_types = p_attr->attr_value.v.u8; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_MAP_SUPPORTED_FEATURES)) != NULL) - { - record->mas.supported_features = p_attr->attr_value.v.u32; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) - { - record->mas.hdr.service_name_length = SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - record->mas.hdr.service_name = (char *)p_attr->attr_value.v.array; - } - - if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_MAP_PROFILE, &pversion)) - { - record->mas.hdr.profile_version = pversion; - } - - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - record->mas.hdr.rfcomm_channel_number = pe.params[0]; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_GOEP_L2CAP_PSM)) != NULL) - { - record->mas.hdr.l2cap_psm = p_attr->attr_value.v.u16; - } +static void bta_create_mas_sdp_record(bluetooth_sdp_record* record, + tSDP_DISC_REC* p_rec) { + tSDP_DISC_ATTR* p_attr; + tSDP_PROTOCOL_ELEM pe; + uint16_t pversion = -1; + + record->mas.hdr.type = SDP_TYPE_MAP_MAS; + record->mas.hdr.service_name_length = 0; + record->mas.hdr.service_name = NULL; + record->mas.hdr.rfcomm_channel_number = 0; + record->mas.hdr.l2cap_psm = -1; + record->mas.hdr.profile_version = 0; + record->mas.mas_instance_id = 0; + record->mas.supported_features = 0x0000001F; + record->mas.supported_message_types = 0; + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_MAS_INSTANCE_ID)) != + NULL) { + record->mas.mas_instance_id = p_attr->attr_value.v.u8; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_MSG_TYPE)) != + NULL) { + record->mas.supported_message_types = p_attr->attr_value.v.u8; + } + + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_MAP_SUPPORTED_FEATURES)) != NULL) { + record->mas.supported_features = p_attr->attr_value.v.u32; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) { + record->mas.hdr.service_name_length = + SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + record->mas.hdr.service_name = (char*)p_attr->attr_value.v.array; + } + + if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_MAP_PROFILE, + &pversion)) { + record->mas.hdr.profile_version = pversion; + } + + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + record->mas.hdr.rfcomm_channel_number = pe.params[0]; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_GOEP_L2CAP_PSM)) != + NULL) { + record->mas.hdr.l2cap_psm = p_attr->attr_value.v.u16; + } } -static void bta_create_pse_sdp_record(bluetooth_sdp_record *record, tSDP_DISC_REC *p_rec) -{ - tSDP_DISC_ATTR *p_attr; - uint16_t pversion; - tSDP_PROTOCOL_ELEM pe; - - record->pse.hdr.type = SDP_TYPE_PBAP_PSE; - record->pse.hdr.service_name_length = 0; - record->pse.hdr.service_name = NULL; - record->pse.hdr.rfcomm_channel_number = 0; - record->pse.hdr.l2cap_psm = -1; - record->pse.hdr.profile_version = 0; - record->pse.supported_features = 0x00000003; - record->pse.supported_repositories = 0; - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_REPOSITORIES)) != NULL) - { - record->pse.supported_repositories = p_attr->attr_value.v.u8; - } - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_PBAP_SUPPORTED_FEATURES)) != NULL) - { - record->pse.supported_features = p_attr->attr_value.v.u32; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) - { - record->pse.hdr.service_name_length = SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - record->pse.hdr.service_name = (char *)p_attr->attr_value.v.array; - } - - if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_PHONE_ACCESS, &pversion)) - { - record->pse.hdr.profile_version = pversion; - } - - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - record->pse.hdr.rfcomm_channel_number = pe.params[0]; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_GOEP_L2CAP_PSM)) != NULL) - { - record->pse.hdr.l2cap_psm = p_attr->attr_value.v.u16; - } +static void bta_create_pse_sdp_record(bluetooth_sdp_record* record, + tSDP_DISC_REC* p_rec) { + tSDP_DISC_ATTR* p_attr; + uint16_t pversion; + tSDP_PROTOCOL_ELEM pe; + + record->pse.hdr.type = SDP_TYPE_PBAP_PSE; + record->pse.hdr.service_name_length = 0; + record->pse.hdr.service_name = NULL; + record->pse.hdr.rfcomm_channel_number = 0; + record->pse.hdr.l2cap_psm = -1; + record->pse.hdr.profile_version = 0; + record->pse.supported_features = 0x00000003; + record->pse.supported_repositories = 0; + + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_SUPPORTED_REPOSITORIES)) != NULL) { + record->pse.supported_repositories = p_attr->attr_value.v.u8; + } + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_PBAP_SUPPORTED_FEATURES)) != NULL) { + record->pse.supported_features = p_attr->attr_value.v.u32; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) { + record->pse.hdr.service_name_length = + SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + record->pse.hdr.service_name = (char*)p_attr->attr_value.v.array; + } + + if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_PHONE_ACCESS, + &pversion)) { + record->pse.hdr.profile_version = pversion; + } + + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + record->pse.hdr.rfcomm_channel_number = pe.params[0]; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_GOEP_L2CAP_PSM)) != + NULL) { + record->pse.hdr.l2cap_psm = p_attr->attr_value.v.u16; + } } -static void bta_create_ops_sdp_record(bluetooth_sdp_record *record, tSDP_DISC_REC *p_rec) -{ - tSDP_DISC_ATTR *p_attr, *p_sattr; - tSDP_PROTOCOL_ELEM pe; - uint16_t pversion = -1; - - record->ops.hdr.type = SDP_TYPE_OPP_SERVER; - record->ops.hdr.service_name_length = 0; - record->ops.hdr.service_name = NULL; - record->ops.hdr.rfcomm_channel_number = 0; - record->ops.hdr.l2cap_psm = -1; - record->ops.hdr.profile_version = 0; - record->ops.supported_formats_list_len = 0; - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) - { - record->ops.hdr.service_name_length = SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - record->ops.hdr.service_name = (char *)p_attr->attr_value.v.array; - } - - if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_OBEX_OBJECT_PUSH, &pversion)) - { - record->ops.hdr.profile_version = pversion; - } - - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - record->ops.hdr.rfcomm_channel_number = pe.params[0]; - } - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_GOEP_L2CAP_PSM)) != NULL) - { - record->ops.hdr.l2cap_psm = p_attr->attr_value.v.u16; - } - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FORMATS_LIST)) != NULL) - { - /* Safety check - each entry should itself be a sequence */ - if (SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != DATA_ELE_SEQ_DESC_TYPE) { - record->ops.supported_formats_list_len = 0; - APPL_TRACE_ERROR("%s() - supported_formats_list - wrong attribute length/type:" - " 0x%02x - expected 0x06", __func__, p_attr->attr_len_type); +static void bta_create_ops_sdp_record(bluetooth_sdp_record* record, + tSDP_DISC_REC* p_rec) { + tSDP_DISC_ATTR *p_attr, *p_sattr; + tSDP_PROTOCOL_ELEM pe; + uint16_t pversion = -1; + + record->ops.hdr.type = SDP_TYPE_OPP_SERVER; + record->ops.hdr.service_name_length = 0; + record->ops.hdr.service_name = NULL; + record->ops.hdr.rfcomm_channel_number = 0; + record->ops.hdr.l2cap_psm = -1; + record->ops.hdr.profile_version = 0; + record->ops.supported_formats_list_len = 0; + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) { + record->ops.hdr.service_name_length = + SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + record->ops.hdr.service_name = (char*)p_attr->attr_value.v.array; + } + + if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_OBEX_OBJECT_PUSH, + &pversion)) { + record->ops.hdr.profile_version = pversion; + } + + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + record->ops.hdr.rfcomm_channel_number = pe.params[0]; + } + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_GOEP_L2CAP_PSM)) != + NULL) { + record->ops.hdr.l2cap_psm = p_attr->attr_value.v.u16; + } + if ((p_attr = SDP_FindAttributeInRec( + p_rec, ATTR_ID_SUPPORTED_FORMATS_LIST)) != NULL) { + /* Safety check - each entry should itself be a sequence */ + if (SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != DATA_ELE_SEQ_DESC_TYPE) { + record->ops.supported_formats_list_len = 0; + APPL_TRACE_ERROR( + "%s() - supported_formats_list - wrong attribute length/type:" + " 0x%02x - expected 0x06", + __func__, p_attr->attr_len_type); + } else { + int count = 0; + /* 1 byte for type/length 1 byte for value */ + record->ops.supported_formats_list_len = + SDP_DISC_ATTR_LEN(p_attr->attr_len_type) / 2; + + /* Extract each value into */ + for (p_sattr = p_attr->attr_value.v.p_sub_attr; p_sattr != NULL; + p_sattr = p_sattr->p_next_attr) { + if ((SDP_DISC_ATTR_TYPE(p_sattr->attr_len_type) == UINT_DESC_TYPE) && + (SDP_DISC_ATTR_LEN(p_sattr->attr_len_type) == 1)) { + if (count == sizeof(record->ops.supported_formats_list)) { + APPL_TRACE_ERROR( + "%s() - supported_formats_list - count overflow - " + "too many sub attributes!!", + __func__); + /* If you hit this, new formats have been added, + * update SDP_OPP_SUPPORTED_FORMATS_MAX_LENGTH */ + break; + } + record->ops.supported_formats_list[count] = p_sattr->attr_value.v.u8; + count++; } else { - int count = 0; - /* 1 byte for type/length 1 byte for value */ - record->ops.supported_formats_list_len = SDP_DISC_ATTR_LEN(p_attr->attr_len_type)/2; - - /* Extract each value into */ - for (p_sattr = p_attr->attr_value.v.p_sub_attr; - p_sattr != NULL; p_sattr = p_sattr->p_next_attr) - { - if ((SDP_DISC_ATTR_TYPE(p_sattr->attr_len_type) == UINT_DESC_TYPE) - && (SDP_DISC_ATTR_LEN(p_sattr->attr_len_type) == 1)) - { - if (count == sizeof(record->ops.supported_formats_list)) { - APPL_TRACE_ERROR("%s() - supported_formats_list - count overflow - " - "too many sub attributes!!", __func__); - /* If you hit this, new formats have been added, - * update SDP_OPP_SUPPORTED_FORMATS_MAX_LENGTH */ - break; - } - record->ops.supported_formats_list[count] = p_sattr->attr_value.v.u8; - count++; - } else { - APPL_TRACE_ERROR("%s() - supported_formats_list - wrong sub attribute " - "length/type: 0x%02x - expected 0x80", __func__, - p_sattr->attr_len_type); - break; - } - } - if (record->ops.supported_formats_list_len != count) { - APPL_TRACE_WARNING("%s() - supported_formats_list - Length of attribute different " - "from the actual number of sub-attributes in the sequence " - "att-length: %d - number of elements: %d", __func__, - record->ops.supported_formats_list_len , count); - - } - record->ops.supported_formats_list_len = count; + APPL_TRACE_ERROR( + "%s() - supported_formats_list - wrong sub attribute " + "length/type: 0x%02x - expected 0x80", + __func__, p_sattr->attr_len_type); + break; } - } + } + if (record->ops.supported_formats_list_len != count) { + APPL_TRACE_WARNING( + "%s() - supported_formats_list - Length of attribute different " + "from the actual number of sub-attributes in the sequence " + "att-length: %d - number of elements: %d", + __func__, record->ops.supported_formats_list_len, count); + } + record->ops.supported_formats_list_len = count; + } + } } -static void bta_create_sap_sdp_record(bluetooth_sdp_record *record, tSDP_DISC_REC *p_rec) -{ - tSDP_DISC_ATTR *p_attr; - tSDP_PROTOCOL_ELEM pe; - uint16_t pversion = -1; - - record->sap.hdr.type = SDP_TYPE_MAP_MAS; - record->sap.hdr.service_name_length = 0; - record->sap.hdr.service_name = NULL; - record->sap.hdr.rfcomm_channel_number = 0; - record->sap.hdr.l2cap_psm = -1; - record->sap.hdr.profile_version = 0; - - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) - { - record->sap.hdr.service_name_length = SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - record->sap.hdr.service_name = (char *)p_attr->attr_value.v.array; - } - - if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_SAP, &pversion)) - { - record->sap.hdr.profile_version = pversion; - } - - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - record->sap.hdr.rfcomm_channel_number = pe.params[0]; - } +static void bta_create_sap_sdp_record(bluetooth_sdp_record* record, + tSDP_DISC_REC* p_rec) { + tSDP_DISC_ATTR* p_attr; + tSDP_PROTOCOL_ELEM pe; + uint16_t pversion = -1; + + record->sap.hdr.type = SDP_TYPE_MAP_MAS; + record->sap.hdr.service_name_length = 0; + record->sap.hdr.service_name = NULL; + record->sap.hdr.rfcomm_channel_number = 0; + record->sap.hdr.l2cap_psm = -1; + record->sap.hdr.profile_version = 0; + + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) { + record->sap.hdr.service_name_length = + SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + record->sap.hdr.service_name = (char*)p_attr->attr_value.v.array; + } + + if (SDP_FindProfileVersionInRec(p_rec, UUID_SERVCLASS_SAP, &pversion)) { + record->sap.hdr.profile_version = pversion; + } + + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + record->sap.hdr.rfcomm_channel_number = pe.params[0]; + } } -static void bta_create_raw_sdp_record(bluetooth_sdp_record *record, tSDP_DISC_REC *p_rec) -{ - tSDP_DISC_ATTR *p_attr; - tSDP_PROTOCOL_ELEM pe; - - record->hdr.type = SDP_TYPE_RAW; - record->hdr.service_name_length = 0; - record->hdr.service_name = NULL; - record->hdr.rfcomm_channel_number = -1; - record->hdr.l2cap_psm = -1; - record->hdr.profile_version = -1; - - /* Try to extract a service name */ - if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) - { - record->pse.hdr.service_name_length = SDP_DISC_ATTR_LEN(p_attr->attr_len_type); - record->pse.hdr.service_name = (char *)p_attr->attr_value.v.array; - } - - /* Try to extract an RFCOMM channel */ - if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) - { - record->pse.hdr.rfcomm_channel_number = pe.params[0]; - } - record->hdr.user1_ptr_len = p_bta_sdp_cfg->p_sdp_db->raw_size; - record->hdr.user1_ptr = p_bta_sdp_cfg->p_sdp_db->raw_data; +static void bta_create_raw_sdp_record(bluetooth_sdp_record* record, + tSDP_DISC_REC* p_rec) { + tSDP_DISC_ATTR* p_attr; + tSDP_PROTOCOL_ELEM pe; + + record->hdr.type = SDP_TYPE_RAW; + record->hdr.service_name_length = 0; + record->hdr.service_name = NULL; + record->hdr.rfcomm_channel_number = -1; + record->hdr.l2cap_psm = -1; + record->hdr.profile_version = -1; + + /* Try to extract a service name */ + if ((p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SERVICE_NAME)) != NULL) { + record->pse.hdr.service_name_length = + SDP_DISC_ATTR_LEN(p_attr->attr_len_type); + record->pse.hdr.service_name = (char*)p_attr->attr_value.v.array; + } + + /* Try to extract an RFCOMM channel */ + if (SDP_FindProtocolListElemInRec(p_rec, UUID_PROTOCOL_RFCOMM, &pe)) { + record->pse.hdr.rfcomm_channel_number = pe.params[0]; + } + record->hdr.user1_ptr_len = p_bta_sdp_cfg->p_sdp_db->raw_size; + record->hdr.user1_ptr = p_bta_sdp_cfg->p_sdp_db->raw_data; } - /******************************************************************************* * * Function bta_sdp_search_cback @@ -378,71 +376,74 @@ static void bta_create_raw_sdp_record(bluetooth_sdp_record *record, tSDP_DISC_RE * Returns void * ******************************************************************************/ -static void bta_sdp_search_cback(uint16_t result, void * user_data) -{ - tSDP_DISC_REC *p_rec = NULL; - tBTA_SDP_SEARCH_COMP evt_data; - tBTA_SDP_STATUS status = BTA_SDP_FAILURE; - int count = 0; - tBT_UUID su; - APPL_TRACE_DEBUG("%s() - res: 0x%x", __func__, result); - - memset(&evt_data, 0, sizeof(evt_data)); - bta_sdp_cb.sdp_active = BTA_SDP_ACTIVE_NONE; - - if (bta_sdp_cb.p_dm_cback == NULL) return; - - bdcpy(evt_data.remote_addr, bta_sdp_cb.remote_addr); - tBT_UUID *uuid = (tBT_UUID*)user_data; - memcpy(&evt_data.uuid, uuid, sizeof(tBT_UUID)); - su = shorten_sdp_uuid(uuid); - - if (result == SDP_SUCCESS || result == SDP_DB_FULL) - { - do { - p_rec = SDP_FindServiceUUIDInDb(p_bta_sdp_cfg->p_sdp_db, &su, p_rec); - /* generate the matching record data pointer */ - if(p_rec != NULL){ - status = BTA_SDP_SUCCESS; - if (IS_UUID(UUID_MAP_MAS,uuid->uu.uuid128)) { - APPL_TRACE_DEBUG("%s() - found MAP (MAS) uuid", __func__); - bta_create_mas_sdp_record(&evt_data.records[count], p_rec); - } else if (IS_UUID(UUID_MAP_MNS,uuid->uu.uuid128)) { - APPL_TRACE_DEBUG("%s() - found MAP (MNS) uuid", __func__); - bta_create_mns_sdp_record(&evt_data.records[count], p_rec); - } else if (IS_UUID(UUID_PBAP_PSE,uuid->uu.uuid128)){ - APPL_TRACE_DEBUG("%s() - found PBAP (PSE) uuid", __func__); - bta_create_pse_sdp_record(&evt_data.records[count], p_rec); - } else if (IS_UUID(UUID_OBEX_OBJECT_PUSH,uuid->uu.uuid128)){ - APPL_TRACE_DEBUG("%s() - found Object Push Server (OPS) uuid", __func__); - bta_create_ops_sdp_record(&evt_data.records[count], p_rec); - } else if (IS_UUID(UUID_SAP,uuid->uu.uuid128)) { - APPL_TRACE_DEBUG("%s() - found SAP uuid", __func__); - bta_create_sap_sdp_record(&evt_data.records[count], p_rec); - } else { - - /* we do not have specific structure for this */ - APPL_TRACE_DEBUG("%s() - profile not identified. using raw data", __func__); - bta_create_raw_sdp_record(&evt_data.records[count], p_rec); - p_rec = NULL; // Terminate loop - /* For raw, we only extract the first entry, and then return the entire - raw data chunk. - TODO: Find a way to split the raw data into record chunks, and iterate - to extract generic data for each chunk - e.g. rfcomm channel and - service name. */ - } - count++; - } else { - APPL_TRACE_DEBUG("%s() - UUID not found", __func__); - } - } while (p_rec != NULL && count < BTA_SDP_MAX_RECORDS); - - evt_data.record_count = count; - } - evt_data.status = status; - - bta_sdp_cb.p_dm_cback(BTA_SDP_SEARCH_COMP_EVT, (tBTA_SDP*) &evt_data, (void*)&uuid->uu.uuid128); - osi_free(user_data); // We no longer need the user data to track the search +static void bta_sdp_search_cback(uint16_t result, void* user_data) { + tSDP_DISC_REC* p_rec = NULL; + tBTA_SDP_SEARCH_COMP evt_data; + tBTA_SDP_STATUS status = BTA_SDP_FAILURE; + int count = 0; + tBT_UUID su; + APPL_TRACE_DEBUG("%s() - res: 0x%x", __func__, result); + + memset(&evt_data, 0, sizeof(evt_data)); + bta_sdp_cb.sdp_active = BTA_SDP_ACTIVE_NONE; + + if (bta_sdp_cb.p_dm_cback == NULL) return; + + bdcpy(evt_data.remote_addr, bta_sdp_cb.remote_addr); + tBT_UUID* uuid = (tBT_UUID*)user_data; + memcpy(&evt_data.uuid, uuid, sizeof(tBT_UUID)); + su = shorten_sdp_uuid(uuid); + + if (result == SDP_SUCCESS || result == SDP_DB_FULL) { + do { + p_rec = SDP_FindServiceUUIDInDb(p_bta_sdp_cfg->p_sdp_db, &su, p_rec); + /* generate the matching record data pointer */ + if (p_rec != NULL) { + status = BTA_SDP_SUCCESS; + if (IS_UUID(UUID_MAP_MAS, uuid->uu.uuid128)) { + APPL_TRACE_DEBUG("%s() - found MAP (MAS) uuid", __func__); + bta_create_mas_sdp_record(&evt_data.records[count], p_rec); + } else if (IS_UUID(UUID_MAP_MNS, uuid->uu.uuid128)) { + APPL_TRACE_DEBUG("%s() - found MAP (MNS) uuid", __func__); + bta_create_mns_sdp_record(&evt_data.records[count], p_rec); + } else if (IS_UUID(UUID_PBAP_PSE, uuid->uu.uuid128)) { + APPL_TRACE_DEBUG("%s() - found PBAP (PSE) uuid", __func__); + bta_create_pse_sdp_record(&evt_data.records[count], p_rec); + } else if (IS_UUID(UUID_OBEX_OBJECT_PUSH, uuid->uu.uuid128)) { + APPL_TRACE_DEBUG("%s() - found Object Push Server (OPS) uuid", + __func__); + bta_create_ops_sdp_record(&evt_data.records[count], p_rec); + } else if (IS_UUID(UUID_SAP, uuid->uu.uuid128)) { + APPL_TRACE_DEBUG("%s() - found SAP uuid", __func__); + bta_create_sap_sdp_record(&evt_data.records[count], p_rec); + } else { + /* we do not have specific structure for this */ + APPL_TRACE_DEBUG("%s() - profile not identified. using raw data", + __func__); + bta_create_raw_sdp_record(&evt_data.records[count], p_rec); + p_rec = NULL; // Terminate loop + /* For raw, we only extract the first entry, and then return the + entire + raw data chunk. + TODO: Find a way to split the raw data into record chunks, and + iterate + to extract generic data for each chunk - e.g. rfcomm channel + and + service name. */ + } + count++; + } else { + APPL_TRACE_DEBUG("%s() - UUID not found", __func__); + } + } while (p_rec != NULL && count < BTA_SDP_MAX_RECORDS); + + evt_data.record_count = count; + } + evt_data.status = status; + + bta_sdp_cb.p_dm_cback(BTA_SDP_SEARCH_COMP_EVT, (tBTA_SDP*)&evt_data, + (void*)&uuid->uu.uuid128); + osi_free(user_data); // We no longer need the user data to track the search } /******************************************************************************* @@ -454,12 +455,11 @@ static void bta_sdp_search_cback(uint16_t result, void * user_data) * Returns void * ******************************************************************************/ -void bta_sdp_enable(tBTA_SDP_MSG *p_data) -{ - APPL_TRACE_DEBUG("%s in, sdp_active:%d", __func__, bta_sdp_cb.sdp_active); - tBTA_SDP_STATUS status = BTA_SDP_SUCCESS; - bta_sdp_cb.p_dm_cback = p_data->enable.p_cback; - bta_sdp_cb.p_dm_cback(BTA_SDP_ENABLE_EVT, (tBTA_SDP *)&status, NULL); +void bta_sdp_enable(tBTA_SDP_MSG* p_data) { + APPL_TRACE_DEBUG("%s in, sdp_active:%d", __func__, bta_sdp_cb.sdp_active); + tBTA_SDP_STATUS status = BTA_SDP_SUCCESS; + bta_sdp_cb.p_dm_cback = p_data->enable.p_cback; + bta_sdp_cb.p_dm_cback(BTA_SDP_ENABLE_EVT, (tBTA_SDP*)&status, NULL); } /******************************************************************************* @@ -471,65 +471,63 @@ void bta_sdp_enable(tBTA_SDP_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_sdp_search(tBTA_SDP_MSG *p_data) -{ - if (p_data == NULL) { - APPL_TRACE_DEBUG("SDP control block handle is null"); - return; - } - tBTA_SDP_STATUS status = BTA_SDP_FAILURE; - - APPL_TRACE_DEBUG("%s in, sdp_active:%d", __func__, bta_sdp_cb.sdp_active); - - if (bta_sdp_cb.sdp_active != BTA_SDP_ACTIVE_NONE) - { - /* SDP is still in progress */ - status = BTA_SDP_BUSY; - if(bta_sdp_cb.p_dm_cback) { - tBTA_SDP_SEARCH_COMP result; - memset(&result, 0, sizeof(result)); - result.uuid = p_data->get_search.uuid; - bdcpy(result.remote_addr, p_data->get_search.bd_addr); - result.status = status; - bta_sdp_cb.p_dm_cback(BTA_SDP_SEARCH_COMP_EVT, (tBTA_SDP *)&result, NULL); - } - return; - } +void bta_sdp_search(tBTA_SDP_MSG* p_data) { + if (p_data == NULL) { + APPL_TRACE_DEBUG("SDP control block handle is null"); + return; + } + tBTA_SDP_STATUS status = BTA_SDP_FAILURE; + + APPL_TRACE_DEBUG("%s in, sdp_active:%d", __func__, bta_sdp_cb.sdp_active); + + if (bta_sdp_cb.sdp_active != BTA_SDP_ACTIVE_NONE) { + /* SDP is still in progress */ + status = BTA_SDP_BUSY; + if (bta_sdp_cb.p_dm_cback) { + tBTA_SDP_SEARCH_COMP result; + memset(&result, 0, sizeof(result)); + result.uuid = p_data->get_search.uuid; + bdcpy(result.remote_addr, p_data->get_search.bd_addr); + result.status = status; + bta_sdp_cb.p_dm_cback(BTA_SDP_SEARCH_COMP_EVT, (tBTA_SDP*)&result, NULL); + } + return; + } + + bta_sdp_cb.sdp_active = BTA_SDP_ACTIVE_YES; + bdcpy(bta_sdp_cb.remote_addr, p_data->get_search.bd_addr); + /* set the uuid used in the search */ + tBT_UUID* bta_sdp_search_uuid = + static_cast(osi_malloc(sizeof(tBT_UUID))); + memcpy(bta_sdp_search_uuid, &(p_data->get_search.uuid), sizeof(tBT_UUID)); + + /* initialize the search for the uuid */ + APPL_TRACE_DEBUG("%s init discovery with UUID(len: %d):", __func__, + bta_sdp_search_uuid->len); + for (int x = 0; x < bta_sdp_search_uuid->len; x++) { + APPL_TRACE_DEBUG("%X", bta_sdp_search_uuid->uu.uuid128[x]); + } + SDP_InitDiscoveryDb(p_bta_sdp_cfg->p_sdp_db, p_bta_sdp_cfg->sdp_db_size, 1, + bta_sdp_search_uuid, 0, NULL); + + if (!SDP_ServiceSearchAttributeRequest2( + p_data->get_search.bd_addr, p_bta_sdp_cfg->p_sdp_db, + bta_sdp_search_cback, (void*)bta_sdp_search_uuid)) { + bta_sdp_cb.sdp_active = BTA_SDP_ACTIVE_NONE; - bta_sdp_cb.sdp_active = BTA_SDP_ACTIVE_YES; - bdcpy(bta_sdp_cb.remote_addr, p_data->get_search.bd_addr); - /* set the uuid used in the search */ - tBT_UUID *bta_sdp_search_uuid = - static_cast(osi_malloc(sizeof(tBT_UUID))); - memcpy(bta_sdp_search_uuid, &(p_data->get_search.uuid),sizeof(tBT_UUID)); - - /* initialize the search for the uuid */ - APPL_TRACE_DEBUG("%s init discovery with UUID(len: %d):", - __func__, bta_sdp_search_uuid->len); - for (int x = 0; xlen;x++){ - APPL_TRACE_DEBUG("%X",bta_sdp_search_uuid->uu.uuid128[x]); - } - SDP_InitDiscoveryDb (p_bta_sdp_cfg->p_sdp_db, p_bta_sdp_cfg->sdp_db_size, 1, - bta_sdp_search_uuid, 0, NULL); - - if (!SDP_ServiceSearchAttributeRequest2(p_data->get_search.bd_addr, p_bta_sdp_cfg->p_sdp_db, - bta_sdp_search_cback, (void*)bta_sdp_search_uuid)) - { - bta_sdp_cb.sdp_active = BTA_SDP_ACTIVE_NONE; - - /* failed to start SDP. report the failure right away */ - if (bta_sdp_cb.p_dm_cback) { - tBTA_SDP_SEARCH_COMP result; - memset(&result, 0, sizeof(result)); - result.uuid = p_data->get_search.uuid; - bdcpy(result.remote_addr, p_data->get_search.bd_addr); - result.status = status; - bta_sdp_cb.p_dm_cback(BTA_SDP_SEARCH_COMP_EVT, (tBTA_SDP *)&result, NULL); - } - } - /* - else report the result when the cback is called - */ + /* failed to start SDP. report the failure right away */ + if (bta_sdp_cb.p_dm_cback) { + tBTA_SDP_SEARCH_COMP result; + memset(&result, 0, sizeof(result)); + result.uuid = p_data->get_search.uuid; + bdcpy(result.remote_addr, p_data->get_search.bd_addr); + result.status = status; + bta_sdp_cb.p_dm_cback(BTA_SDP_SEARCH_COMP_EVT, (tBTA_SDP*)&result, NULL); + } + } + /* + else report the result when the cback is called + */ } /******************************************************************************* @@ -541,11 +539,11 @@ void bta_sdp_search(tBTA_SDP_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_sdp_create_record(tBTA_SDP_MSG *p_data) -{ - APPL_TRACE_DEBUG("%s() event: %d", __func__, p_data->record.hdr.event); - if (bta_sdp_cb.p_dm_cback) - bta_sdp_cb.p_dm_cback(BTA_SDP_CREATE_RECORD_USER_EVT, NULL, p_data->record.user_data); +void bta_sdp_create_record(tBTA_SDP_MSG* p_data) { + APPL_TRACE_DEBUG("%s() event: %d", __func__, p_data->record.hdr.event); + if (bta_sdp_cb.p_dm_cback) + bta_sdp_cb.p_dm_cback(BTA_SDP_CREATE_RECORD_USER_EVT, NULL, + p_data->record.user_data); } /******************************************************************************* @@ -557,9 +555,9 @@ void bta_sdp_create_record(tBTA_SDP_MSG *p_data) * Returns void * ******************************************************************************/ -void bta_sdp_remove_record(tBTA_SDP_MSG *p_data) -{ - APPL_TRACE_DEBUG("%s() event: %d", __func__, p_data->record.hdr.event); - if (bta_sdp_cb.p_dm_cback) - bta_sdp_cb.p_dm_cback(BTA_SDP_REMOVE_RECORD_USER_EVT, NULL, p_data->record.user_data); +void bta_sdp_remove_record(tBTA_SDP_MSG* p_data) { + APPL_TRACE_DEBUG("%s() event: %d", __func__, p_data->record.hdr.event); + if (bta_sdp_cb.p_dm_cback) + bta_sdp_cb.p_dm_cback(BTA_SDP_REMOVE_RECORD_USER_EVT, NULL, + p_data->record.user_data); } diff --git a/system/bta/sdp/bta_sdp_api.cc b/system/bta/sdp/bta_sdp_api.cc index 2f242fafc45..340d3f47821 100644 --- a/system/bta/sdp/bta_sdp_api.cc +++ b/system/bta/sdp/bta_sdp_api.cc @@ -24,11 +24,11 @@ #include +#include "bt_common.h" #include "bta_api.h" -#include "bta_sys.h" #include "bta_sdp_api.h" #include "bta_sdp_int.h" -#include "bt_common.h" +#include "bta_sys.h" #include "port_api.h" #include "sdp_api.h" @@ -36,11 +36,7 @@ * Constants ****************************************************************************/ -static const tBTA_SYS_REG bta_sdp_reg = -{ - bta_sdp_sm_execute, - NULL -}; +static const tBTA_SYS_REG bta_sdp_reg = {bta_sdp_sm_execute, NULL}; /******************************************************************************* * @@ -56,35 +52,34 @@ static const tBTA_SYS_REG bta_sdp_reg = * BTA_SDP_FAIL if internal failure. * ******************************************************************************/ -tBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK *p_cback) -{ - tBTA_SDP_STATUS status = BTA_SDP_FAILURE; - - APPL_TRACE_API(__func__); - if(p_cback && false == bta_sys_is_register(BTA_ID_SDP)) - { - memset(&bta_sdp_cb, 0, sizeof(tBTA_SDP_CB)); - - /* register with BTA system manager */ - bta_sys_register(BTA_ID_SDP, &bta_sdp_reg); - - if (p_cback) { - tBTA_SDP_API_ENABLE *p_buf = - (tBTA_SDP_API_ENABLE *)osi_malloc(sizeof(tBTA_SDP_API_ENABLE)); - p_buf->hdr.event = BTA_SDP_API_ENABLE_EVT; - p_buf->p_cback = p_cback; - bta_sys_sendmsg(p_buf); - status = BTA_SDP_SUCCESS; - } +tBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK* p_cback) { + tBTA_SDP_STATUS status = BTA_SDP_FAILURE; + + APPL_TRACE_API(__func__); + if (p_cback && false == bta_sys_is_register(BTA_ID_SDP)) { + memset(&bta_sdp_cb, 0, sizeof(tBTA_SDP_CB)); + + /* register with BTA system manager */ + bta_sys_register(BTA_ID_SDP, &bta_sdp_reg); + + if (p_cback) { + tBTA_SDP_API_ENABLE* p_buf = + (tBTA_SDP_API_ENABLE*)osi_malloc(sizeof(tBTA_SDP_API_ENABLE)); + p_buf->hdr.event = BTA_SDP_API_ENABLE_EVT; + p_buf->p_cback = p_cback; + bta_sys_sendmsg(p_buf); + status = BTA_SDP_SUCCESS; } - return status; + } + return status; } /******************************************************************************* * * Function BTA_SdpSearch * - * Description This function performs service discovery for a specific service + * Description This function performs service discovery for a specific + *service * on given peer device. When the operation is completed * the tBTA_SDP_DM_CBACK callback function will be called with * a BTA_SDP_SEARCH_COMPLETE_EVT. @@ -93,21 +88,20 @@ tBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK *p_cback) * BTA_SDP_FAILURE, otherwise. * ******************************************************************************/ -tBTA_SDP_STATUS BTA_SdpSearch(BD_ADDR bd_addr, tSDP_UUID *uuid) -{ - tBTA_SDP_API_SEARCH *p_msg = - (tBTA_SDP_API_SEARCH *)osi_malloc(sizeof(tBTA_SDP_API_SEARCH)); +tBTA_SDP_STATUS BTA_SdpSearch(BD_ADDR bd_addr, tSDP_UUID* uuid) { + tBTA_SDP_API_SEARCH* p_msg = + (tBTA_SDP_API_SEARCH*)osi_malloc(sizeof(tBTA_SDP_API_SEARCH)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_SDP_API_SEARCH_EVT; - bdcpy(p_msg->bd_addr, bd_addr); - // p_msg->uuid = uuid; - memcpy(&(p_msg->uuid), uuid, sizeof(tSDP_UUID)); + p_msg->hdr.event = BTA_SDP_API_SEARCH_EVT; + bdcpy(p_msg->bd_addr, bd_addr); + // p_msg->uuid = uuid; + memcpy(&(p_msg->uuid), uuid, sizeof(tSDP_UUID)); - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_SDP_SUCCESS; + return BTA_SDP_SUCCESS; } /******************************************************************************* @@ -122,19 +116,18 @@ tBTA_SDP_STATUS BTA_SdpSearch(BD_ADDR bd_addr, tSDP_UUID *uuid) * BTA_SDP_FAILURE, otherwise. * ******************************************************************************/ -tBTA_SDP_STATUS BTA_SdpCreateRecordByUser(void* user_data) -{ - tBTA_SDP_API_RECORD_USER *p_msg = - (tBTA_SDP_API_RECORD_USER *)osi_malloc(sizeof(tBTA_SDP_API_RECORD_USER)); +tBTA_SDP_STATUS BTA_SdpCreateRecordByUser(void* user_data) { + tBTA_SDP_API_RECORD_USER* p_msg = + (tBTA_SDP_API_RECORD_USER*)osi_malloc(sizeof(tBTA_SDP_API_RECORD_USER)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_SDP_API_CREATE_RECORD_USER_EVT; - p_msg->user_data = user_data; + p_msg->hdr.event = BTA_SDP_API_CREATE_RECORD_USER_EVT; + p_msg->user_data = user_data; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_SDP_SUCCESS; + return BTA_SDP_SUCCESS; } /******************************************************************************* @@ -149,17 +142,16 @@ tBTA_SDP_STATUS BTA_SdpCreateRecordByUser(void* user_data) * BTA_SDP_FAILURE, otherwise. * ******************************************************************************/ -tBTA_SDP_STATUS BTA_SdpRemoveRecordByUser(void* user_data) -{ - tBTA_SDP_API_RECORD_USER *p_msg = - (tBTA_SDP_API_RECORD_USER *)osi_malloc(sizeof(tBTA_SDP_API_RECORD_USER)); +tBTA_SDP_STATUS BTA_SdpRemoveRecordByUser(void* user_data) { + tBTA_SDP_API_RECORD_USER* p_msg = + (tBTA_SDP_API_RECORD_USER*)osi_malloc(sizeof(tBTA_SDP_API_RECORD_USER)); - APPL_TRACE_API("%s", __func__); + APPL_TRACE_API("%s", __func__); - p_msg->hdr.event = BTA_SDP_API_REMOVE_RECORD_USER_EVT; - p_msg->user_data = user_data; + p_msg->hdr.event = BTA_SDP_API_REMOVE_RECORD_USER_EVT; + p_msg->user_data = user_data; - bta_sys_sendmsg(p_msg); + bta_sys_sendmsg(p_msg); - return BTA_SDP_SUCCESS; + return BTA_SDP_SUCCESS; } diff --git a/system/bta/sdp/bta_sdp_cfg.cc b/system/bta/sdp/bta_sdp_cfg.cc index 9bc0aa34dab..5be6755df64 100644 --- a/system/bta/sdp/bta_sdp_cfg.cc +++ b/system/bta/sdp/bta_sdp_cfg.cc @@ -25,16 +25,16 @@ #include "bta_sdp_api.h" #ifndef BTA_SDP_DB_SIZE -#define BTA_SDP_DB_SIZE 4500 +#define BTA_SDP_DB_SIZE 4500 #endif -static uint8_t __attribute__ ((aligned(4))) bta_sdp_db_data[BTA_SDP_DB_SIZE]; +static uint8_t __attribute__((aligned(4))) bta_sdp_db_data[BTA_SDP_DB_SIZE]; /* SDP configuration structure */ -const tBTA_SDP_CFG bta_sdp_cfg = -{ +const tBTA_SDP_CFG bta_sdp_cfg = { BTA_SDP_DB_SIZE, - (tSDP_DISCOVERY_DB *)bta_sdp_db_data /* The data buffer to keep SDP database */ + (tSDP_DISCOVERY_DB*) + bta_sdp_db_data /* The data buffer to keep SDP database */ }; -tBTA_SDP_CFG *p_bta_sdp_cfg = (tBTA_SDP_CFG *) &bta_sdp_cfg; +tBTA_SDP_CFG* p_bta_sdp_cfg = (tBTA_SDP_CFG*)&bta_sdp_cfg; diff --git a/system/bta/sdp/bta_sdp_int.h b/system/bta/sdp/bta_sdp_int.h index 325060b3605..21d814ba2b3 100644 --- a/system/bta/sdp/bta_sdp_int.h +++ b/system/bta/sdp/bta_sdp_int.h @@ -27,84 +27,74 @@ #ifndef BTA_SDP_INT_H #define BTA_SDP_INT_H -#include "bta_sys.h" #include "bta_api.h" #include "bta_sdp_api.h" +#include "bta_sys.h" /***************************************************************************** * Constants ****************************************************************************/ -enum -{ - /* these events are handled by the state machine */ - BTA_SDP_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_SDP), - BTA_SDP_API_SEARCH_EVT, - BTA_SDP_API_CREATE_RECORD_USER_EVT, - BTA_SDP_API_REMOVE_RECORD_USER_EVT, - BTA_SDP_MAX_INT_EVT +enum { + /* these events are handled by the state machine */ + BTA_SDP_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_SDP), + BTA_SDP_API_SEARCH_EVT, + BTA_SDP_API_CREATE_RECORD_USER_EVT, + BTA_SDP_API_REMOVE_RECORD_USER_EVT, + BTA_SDP_MAX_INT_EVT }; -enum -{ - BTA_SDP_ACTIVE_NONE = 0, - BTA_SDP_ACTIVE_YES /* waiting for SDP result */ +enum { + BTA_SDP_ACTIVE_NONE = 0, + BTA_SDP_ACTIVE_YES /* waiting for SDP result */ }; - - /* data type for BTA_SDP_API_ENABLE_EVT */ -typedef struct -{ - BT_HDR hdr; - tBTA_SDP_DM_CBACK *p_cback; +typedef struct { + BT_HDR hdr; + tBTA_SDP_DM_CBACK* p_cback; } tBTA_SDP_API_ENABLE; /* data type for BTA_SDP_API_SEARCH_EVT */ -typedef struct -{ - BT_HDR hdr; - BD_ADDR bd_addr; - tSDP_UUID uuid; +typedef struct { + BT_HDR hdr; + BD_ADDR bd_addr; + tSDP_UUID uuid; } tBTA_SDP_API_SEARCH; /* data type for BTA_SDP_API_SEARCH_EVT */ -typedef struct -{ - BT_HDR hdr; - void* user_data; +typedef struct { + BT_HDR hdr; + void* user_data; } tBTA_SDP_API_RECORD_USER; /* union of all data types */ -typedef union -{ - /* GKI event buffer header */ - BT_HDR hdr; - tBTA_SDP_API_ENABLE enable; - tBTA_SDP_API_SEARCH get_search; - tBTA_SDP_API_RECORD_USER record; +typedef union { + /* GKI event buffer header */ + BT_HDR hdr; + tBTA_SDP_API_ENABLE enable; + tBTA_SDP_API_SEARCH get_search; + tBTA_SDP_API_RECORD_USER record; } tBTA_SDP_MSG; /* SDP control block */ -typedef struct -{ - uint8_t sdp_active; /* see BTA_SDP_SDP_ACT_* */ - BD_ADDR remote_addr; - tBTA_SDP_DM_CBACK *p_dm_cback; +typedef struct { + uint8_t sdp_active; /* see BTA_SDP_SDP_ACT_* */ + BD_ADDR remote_addr; + tBTA_SDP_DM_CBACK* p_dm_cback; } tBTA_SDP_CB; - /* SDP control block */ extern tBTA_SDP_CB bta_sdp_cb; /* config struct */ -extern tBTA_SDP_CFG *p_bta_sdp_cfg; +extern tBTA_SDP_CFG* p_bta_sdp_cfg; -extern bool bta_sdp_sm_execute(BT_HDR *p_msg); +extern bool bta_sdp_sm_execute(BT_HDR* p_msg); -extern void bta_sdp_enable (tBTA_SDP_MSG *p_data); -extern void bta_sdp_search (tBTA_SDP_MSG *p_data); -extern void bta_sdp_create_record(tBTA_SDP_MSG *p_data); -extern void bta_sdp_remove_record(tBTA_SDP_MSG *p_data); +extern void bta_sdp_enable(tBTA_SDP_MSG* p_data); +extern void bta_sdp_search(tBTA_SDP_MSG* p_data); +extern void bta_sdp_create_record(tBTA_SDP_MSG* p_data); +extern void bta_sdp_remove_record(tBTA_SDP_MSG* p_data); #endif /* BTA_SDP_INT_H */ diff --git a/system/bta/sys/bta_sys.h b/system/bta/sys/bta_sys.h index 20efc35db55..c97d8f1ee83 100644 --- a/system/bta/sys/bta_sys.h +++ b/system/bta/sys/bta_sys.h @@ -24,9 +24,9 @@ #ifndef BTA_SYS_H #define BTA_SYS_H +#include "bt_common.h" #include "bt_target.h" #include "osi/include/alarm.h" -#include "bt_common.h" #ifdef __cplusplus extern "C" { @@ -37,137 +37,134 @@ extern "C" { ****************************************************************************/ /* vendor specific event handler function type */ -typedef bool (tBTA_SYS_VS_EVT_HDLR)(uint16_t evt, void *p); +typedef bool(tBTA_SYS_VS_EVT_HDLR)(uint16_t evt, void* p); /* event handler function type */ -typedef bool (tBTA_SYS_EVT_HDLR)(BT_HDR *p_msg); +typedef bool(tBTA_SYS_EVT_HDLR)(BT_HDR* p_msg); /* disable function type */ -typedef void (tBTA_SYS_DISABLE)(void); - +typedef void(tBTA_SYS_DISABLE)(void); /* HW modules */ -enum -{ - BTA_SYS_HW_BLUETOOTH, - BTA_SYS_HW_RT, +enum { + BTA_SYS_HW_BLUETOOTH, + BTA_SYS_HW_RT, - BTA_SYS_MAX_HW_MODULES + BTA_SYS_MAX_HW_MODULES }; typedef uint16_t tBTA_SYS_HW_MODULE; #ifndef BTA_DM_NUM_JV_ID -#define BTA_DM_NUM_JV_ID 2 +#define BTA_DM_NUM_JV_ID 2 #endif /* SW sub-systems */ -#define BTA_ID_SYS 0 /* system manager */ +#define BTA_ID_SYS 0 /* system manager */ /* BLUETOOTH PART - from 0 to BTA_ID_BLUETOOTH_MAX */ -#define BTA_ID_DM 1 /* device manager */ -#define BTA_ID_DM_SEARCH 2 /* device manager search */ -#define BTA_ID_DM_SEC 3 /* device manager security */ -#define BTA_ID_DG 4 /* data gateway */ -#define BTA_ID_AG 5 /* audio gateway */ -#define BTA_ID_OPC 6 /* object push client */ -#define BTA_ID_OPS 7 /* object push server */ -#define BTA_ID_FTS 8 /* file transfer server */ -#define BTA_ID_CT 9 /* cordless telephony terminal */ -#define BTA_ID_FTC 10 /* file transfer client */ -#define BTA_ID_SS 11 /* synchronization server */ -#define BTA_ID_PR 12 /* Printer client */ -#define BTA_ID_BIC 13 /* Basic Imaging Client */ -#define BTA_ID_PAN 14 /* Personal Area Networking */ -#define BTA_ID_BIS 15 /* Basic Imaging Server */ -#define BTA_ID_ACC 16 /* Advanced Camera Client */ -#define BTA_ID_SC 17 /* SIM Card Access server */ -#define BTA_ID_AV 18 /* Advanced audio/video */ -#define BTA_ID_AVK 19 /* Audio/video sink */ -#define BTA_ID_HD 20 /* HID Device */ -#define BTA_ID_CG 21 /* Cordless Gateway */ -#define BTA_ID_BP 22 /* Basic Printing Client */ -#define BTA_ID_HH 23 /* Human Interface Device Host */ -#define BTA_ID_PBS 24 /* Phone Book Access Server */ -#define BTA_ID_PBC 25 /* Phone Book Access Client */ -#define BTA_ID_JV 26 /* Java */ -#define BTA_ID_HS 27 /* Headset */ -#define BTA_ID_MSE 28 /* Message Server Equipment */ -#define BTA_ID_MCE 29 /* Message Client Equipment */ -#define BTA_ID_HL 30 /* Health Device Profile*/ -#define BTA_ID_GATTC 31 /* GATT Client */ -#define BTA_ID_GATTS 32 /* GATT Client */ -#define BTA_ID_SDP 33 /* SDP Client */ -#define BTA_ID_BLUETOOTH_MAX 34 /* last BT profile */ +#define BTA_ID_DM 1 /* device manager */ +#define BTA_ID_DM_SEARCH 2 /* device manager search */ +#define BTA_ID_DM_SEC 3 /* device manager security */ +#define BTA_ID_DG 4 /* data gateway */ +#define BTA_ID_AG 5 /* audio gateway */ +#define BTA_ID_OPC 6 /* object push client */ +#define BTA_ID_OPS 7 /* object push server */ +#define BTA_ID_FTS 8 /* file transfer server */ +#define BTA_ID_CT 9 /* cordless telephony terminal */ +#define BTA_ID_FTC 10 /* file transfer client */ +#define BTA_ID_SS 11 /* synchronization server */ +#define BTA_ID_PR 12 /* Printer client */ +#define BTA_ID_BIC 13 /* Basic Imaging Client */ +#define BTA_ID_PAN 14 /* Personal Area Networking */ +#define BTA_ID_BIS 15 /* Basic Imaging Server */ +#define BTA_ID_ACC 16 /* Advanced Camera Client */ +#define BTA_ID_SC 17 /* SIM Card Access server */ +#define BTA_ID_AV 18 /* Advanced audio/video */ +#define BTA_ID_AVK 19 /* Audio/video sink */ +#define BTA_ID_HD 20 /* HID Device */ +#define BTA_ID_CG 21 /* Cordless Gateway */ +#define BTA_ID_BP 22 /* Basic Printing Client */ +#define BTA_ID_HH 23 /* Human Interface Device Host */ +#define BTA_ID_PBS 24 /* Phone Book Access Server */ +#define BTA_ID_PBC 25 /* Phone Book Access Client */ +#define BTA_ID_JV 26 /* Java */ +#define BTA_ID_HS 27 /* Headset */ +#define BTA_ID_MSE 28 /* Message Server Equipment */ +#define BTA_ID_MCE 29 /* Message Client Equipment */ +#define BTA_ID_HL 30 /* Health Device Profile*/ +#define BTA_ID_GATTC 31 /* GATT Client */ +#define BTA_ID_GATTS 32 /* GATT Client */ +#define BTA_ID_SDP 33 /* SDP Client */ +#define BTA_ID_BLUETOOTH_MAX 34 /* last BT profile */ /* GENERIC */ -#define BTA_ID_PRM 38 -#define BTA_ID_SYSTEM 39 /* platform-specific */ -#define BTA_ID_SWRAP 40 /* Insight script wrapper */ -#define BTA_ID_MIP 41 /* Multicase Individual Polling */ -#define BTA_ID_RT 42 /* Audio Routing module: This module is always on. */ -#define BTA_ID_CLOSURE 43 /* Generic C++ closure */ +#define BTA_ID_PRM 38 +#define BTA_ID_SYSTEM 39 /* platform-specific */ +#define BTA_ID_SWRAP 40 /* Insight script wrapper */ +#define BTA_ID_MIP 41 /* Multicase Individual Polling */ +#define BTA_ID_RT 42 /* Audio Routing module: This module is always on. */ +#define BTA_ID_CLOSURE 43 /* Generic C++ closure */ /* JV */ -#define BTA_ID_JV1 44 /* JV1 */ -#define BTA_ID_JV2 45 /* JV2 */ +#define BTA_ID_JV1 44 /* JV1 */ +#define BTA_ID_JV2 45 /* JV2 */ -#define BTA_ID_MAX (44 + BTA_DM_NUM_JV_ID) +#define BTA_ID_MAX (44 + BTA_DM_NUM_JV_ID) typedef uint8_t tBTA_SYS_ID; - -#define BTA_SYS_CONN_OPEN 0x00 -#define BTA_SYS_CONN_CLOSE 0x01 -#define BTA_SYS_APP_OPEN 0x02 -#define BTA_SYS_APP_CLOSE 0x03 -#define BTA_SYS_SCO_OPEN 0x04 -#define BTA_SYS_SCO_CLOSE 0x05 -#define BTA_SYS_CONN_IDLE 0x06 -#define BTA_SYS_CONN_BUSY 0x07 +#define BTA_SYS_CONN_OPEN 0x00 +#define BTA_SYS_CONN_CLOSE 0x01 +#define BTA_SYS_APP_OPEN 0x02 +#define BTA_SYS_APP_CLOSE 0x03 +#define BTA_SYS_SCO_OPEN 0x04 +#define BTA_SYS_SCO_CLOSE 0x05 +#define BTA_SYS_CONN_IDLE 0x06 +#define BTA_SYS_CONN_BUSY 0x07 /* for link policy */ -#define BTA_SYS_PLCY_SET 0x10 /* set the link policy to the given addr */ -#define BTA_SYS_PLCY_CLR 0x11 /* clear the link policy to the given addr */ -#define BTA_SYS_PLCY_DEF_SET 0x12 /* set the default link policy */ -#define BTA_SYS_PLCY_DEF_CLR 0x13 /* clear the default link policy */ -#define BTA_SYS_ROLE_CHANGE 0x14 /* role change */ +#define BTA_SYS_PLCY_SET 0x10 /* set the link policy to the given addr */ +#define BTA_SYS_PLCY_CLR 0x11 /* clear the link policy to the given addr */ +#define BTA_SYS_PLCY_DEF_SET 0x12 /* set the default link policy */ +#define BTA_SYS_PLCY_DEF_CLR 0x13 /* clear the default link policy */ +#define BTA_SYS_ROLE_CHANGE 0x14 /* role change */ typedef uint8_t tBTA_SYS_CONN_STATUS; /* Bitmask of sys features */ -#define BTA_SYS_FEAT_PCM2 0x0001 -#define BTA_SYS_FEAT_PCM2_MASTER 0x0002 +#define BTA_SYS_FEAT_PCM2 0x0001 +#define BTA_SYS_FEAT_PCM2_MASTER 0x0002 /* tBTA_PREF_ROLES */ typedef uint8_t tBTA_SYS_PREF_ROLES; /* conn callback for role / low power manager*/ -typedef void (tBTA_SYS_CONN_CBACK)(tBTA_SYS_CONN_STATUS status,uint8_t id, uint8_t app_id, BD_ADDR peer_addr); +typedef void(tBTA_SYS_CONN_CBACK)(tBTA_SYS_CONN_STATUS status, uint8_t id, + uint8_t app_id, BD_ADDR peer_addr); /* conn callback for role / low power manager*/ -typedef void (tBTA_SYS_SSR_CFG_CBACK)(uint8_t id, uint8_t app_id, uint16_t latency, uint16_t tout); +typedef void(tBTA_SYS_SSR_CFG_CBACK)(uint8_t id, uint8_t app_id, + uint16_t latency, uint16_t tout); #if (BTA_EIR_CANNED_UUID_LIST != TRUE) /* eir callback for adding/removeing UUID */ -typedef void (tBTA_SYS_EIR_CBACK)(uint16_t uuid16, bool adding); +typedef void(tBTA_SYS_EIR_CBACK)(uint16_t uuid16, bool adding); #endif /* registration structure */ -typedef struct -{ - tBTA_SYS_EVT_HDLR *evt_hdlr; - tBTA_SYS_DISABLE *disable; +typedef struct { + tBTA_SYS_EVT_HDLR* evt_hdlr; + tBTA_SYS_DISABLE* disable; } tBTA_SYS_REG; /* data type to send events to BTA SYS HW manager */ -typedef struct -{ - BT_HDR hdr; - tBTA_SYS_HW_MODULE hw_module; +typedef struct { + BT_HDR hdr; + tBTA_SYS_HW_MODULE hw_module; } tBTA_SYS_HW_MSG; -typedef void (*tBTA_SYS_REGISTER)(uint8_t id, const tBTA_SYS_REG *p_reg); -typedef void (*tBTA_SYS_SENDMSG)(void *p_msg); +typedef void (*tBTA_SYS_REGISTER)(uint8_t id, const tBTA_SYS_REG* p_reg); +typedef void (*tBTA_SYS_SENDMSG)(void* p_msg); /***************************************************************************** * Global data @@ -181,42 +178,39 @@ extern uint8_t appl_trace_level; ****************************************************************************/ /* Calculate start of event enumeration; id is top 8 bits of event */ -#define BTA_SYS_EVT_START(id) ((id) << 8) +#define BTA_SYS_EVT_START(id) ((id) << 8) /***************************************************************************** * events for BTA SYS HW manager ****************************************************************************/ -/* events sent to SYS HW manager - must be kept synchronized with tables in bta_sys_main.cc */ -enum -{ - /* device manager local device API events */ - BTA_SYS_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_SYS), - BTA_SYS_EVT_ENABLED_EVT, - BTA_SYS_EVT_STACK_ENABLED_EVT, - BTA_SYS_API_DISABLE_EVT, - BTA_SYS_EVT_DISABLED_EVT, - BTA_SYS_ERROR_EVT, - - BTA_SYS_MAX_EVT +/* events sent to SYS HW manager - must be kept synchronized with tables in + * bta_sys_main.cc */ +enum { + /* device manager local device API events */ + BTA_SYS_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_SYS), + BTA_SYS_EVT_ENABLED_EVT, + BTA_SYS_EVT_STACK_ENABLED_EVT, + BTA_SYS_API_DISABLE_EVT, + BTA_SYS_EVT_DISABLED_EVT, + BTA_SYS_ERROR_EVT, + + BTA_SYS_MAX_EVT }; - - /* SYS HW status events - returned by SYS HW manager to other modules. */ -enum -{ - BTA_SYS_HW_OFF_EVT, - BTA_SYS_HW_ON_EVT, - BTA_SYS_HW_STARTING_EVT, - BTA_SYS_HW_STOPPING_EVT, - BTA_SYS_HW_ERROR_EVT +enum { + BTA_SYS_HW_OFF_EVT, + BTA_SYS_HW_ON_EVT, + BTA_SYS_HW_STARTING_EVT, + BTA_SYS_HW_STOPPING_EVT, + BTA_SYS_HW_ERROR_EVT }; typedef uint8_t tBTA_SYS_HW_EVT; /* HW enable callback type */ -typedef void (tBTA_SYS_HW_CBACK)(tBTA_SYS_HW_EVT status); +typedef void(tBTA_SYS_HW_CBACK)(tBTA_SYS_HW_EVT status); /***************************************************************************** * Function declarations @@ -224,27 +218,26 @@ typedef void (tBTA_SYS_HW_CBACK)(tBTA_SYS_HW_EVT status); extern void bta_sys_init(void); extern void bta_sys_free(void); -extern void bta_sys_event(BT_HDR *p_msg); +extern void bta_sys_event(BT_HDR* p_msg); extern void bta_sys_set_trace_level(uint8_t level); -extern void bta_sys_register(uint8_t id, const tBTA_SYS_REG *p_reg); +extern void bta_sys_register(uint8_t id, const tBTA_SYS_REG* p_reg); extern void bta_sys_deregister(uint8_t id); extern bool bta_sys_is_register(uint8_t id); extern uint16_t bta_sys_get_sys_features(void); -extern void bta_sys_sendmsg(void *p_msg); -extern void bta_sys_start_timer(alarm_t *alarm, period_ms_t interval, +extern void bta_sys_sendmsg(void* p_msg); +extern void bta_sys_start_timer(alarm_t* alarm, period_ms_t interval, uint16_t event, uint16_t layer_specific); extern void bta_sys_disable(tBTA_SYS_HW_MODULE module); -extern void bta_sys_hw_register( tBTA_SYS_HW_MODULE module, tBTA_SYS_HW_CBACK *cback); -extern void bta_sys_hw_unregister( tBTA_SYS_HW_MODULE module ); - - -extern void bta_sys_rm_register(tBTA_SYS_CONN_CBACK * p_cback); -extern void bta_sys_pm_register(tBTA_SYS_CONN_CBACK * p_cback); +extern void bta_sys_hw_register(tBTA_SYS_HW_MODULE module, + tBTA_SYS_HW_CBACK* cback); +extern void bta_sys_hw_unregister(tBTA_SYS_HW_MODULE module); -extern void bta_sys_policy_register(tBTA_SYS_CONN_CBACK * p_cback); -extern void bta_sys_sco_register(tBTA_SYS_CONN_CBACK * p_cback); +extern void bta_sys_rm_register(tBTA_SYS_CONN_CBACK* p_cback); +extern void bta_sys_pm_register(tBTA_SYS_CONN_CBACK* p_cback); +extern void bta_sys_policy_register(tBTA_SYS_CONN_CBACK* p_cback); +extern void bta_sys_sco_register(tBTA_SYS_CONN_CBACK* p_cback); extern void bta_sys_conn_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr); extern void bta_sys_conn_close(uint8_t id, uint8_t app_id, BD_ADDR peer_addr); @@ -258,17 +251,20 @@ extern void bta_sys_idle(uint8_t id, uint8_t app_id, BD_ADDR peer_addr); extern void bta_sys_busy(uint8_t id, uint8_t app_id, BD_ADDR peer_addr); #if (BTM_SSR_INCLUDED == TRUE) -extern void bta_sys_ssr_cfg_register(tBTA_SYS_SSR_CFG_CBACK * p_cback); -extern void bta_sys_chg_ssr_config (uint8_t id, uint8_t app_id, uint16_t max_latency, uint16_t min_tout); +extern void bta_sys_ssr_cfg_register(tBTA_SYS_SSR_CFG_CBACK* p_cback); +extern void bta_sys_chg_ssr_config(uint8_t id, uint8_t app_id, + uint16_t max_latency, uint16_t min_tout); #endif -extern void bta_sys_role_chg_register(tBTA_SYS_CONN_CBACK * p_cback); -extern void bta_sys_notify_role_chg(BD_ADDR_PTR p_bda, uint8_t new_role, uint8_t hci_status); -extern void bta_sys_collision_register(uint8_t bta_id, tBTA_SYS_CONN_CBACK *p_cback); -extern void bta_sys_notify_collision (BD_ADDR_PTR p_bda); +extern void bta_sys_role_chg_register(tBTA_SYS_CONN_CBACK* p_cback); +extern void bta_sys_notify_role_chg(BD_ADDR_PTR p_bda, uint8_t new_role, + uint8_t hci_status); +extern void bta_sys_collision_register(uint8_t bta_id, + tBTA_SYS_CONN_CBACK* p_cback); +extern void bta_sys_notify_collision(BD_ADDR_PTR p_bda); #if (BTA_EIR_CANNED_UUID_LIST != TRUE) -extern void bta_sys_eir_register(tBTA_SYS_EIR_CBACK * p_cback); +extern void bta_sys_eir_register(tBTA_SYS_EIR_CBACK* p_cback); extern void bta_sys_add_uuid(uint16_t uuid16); extern void bta_sys_remove_uuid(uint16_t uuid16); #else @@ -277,10 +273,10 @@ extern void bta_sys_remove_uuid(uint16_t uuid16); #define bta_sys_remove_uuid(ut) #endif -extern void bta_sys_set_policy (uint8_t id, uint8_t policy, BD_ADDR peer_addr); -extern void bta_sys_clear_policy (uint8_t id, uint8_t policy, BD_ADDR peer_addr); -extern void bta_sys_set_default_policy (uint8_t id, uint8_t policy); -extern void bta_sys_clear_default_policy (uint8_t id, uint8_t policy); +extern void bta_sys_set_policy(uint8_t id, uint8_t policy, BD_ADDR peer_addr); +extern void bta_sys_clear_policy(uint8_t id, uint8_t policy, BD_ADDR peer_addr); +extern void bta_sys_set_default_policy(uint8_t id, uint8_t policy); +extern void bta_sys_clear_default_policy(uint8_t id, uint8_t policy); #ifdef __cplusplus } diff --git a/system/bta/sys/bta_sys_conn.cc b/system/bta/sys/bta_sys_conn.cc index 0321fa79b5b..7f897ff34a5 100644 --- a/system/bta/sys/bta_sys_conn.cc +++ b/system/bta/sys/bta_sys_conn.cc @@ -24,10 +24,10 @@ #include +#include "bt_common.h" #include "bta_api.h" #include "bta_sys.h" #include "bta_sys_int.h" -#include "bt_common.h" #include "osi/include/osi.h" #include "utl.h" @@ -41,12 +41,10 @@ * Returns void * ******************************************************************************/ -void bta_sys_rm_register(tBTA_SYS_CONN_CBACK * p_cback) -{ - bta_sys_cb.prm_cb = p_cback; +void bta_sys_rm_register(tBTA_SYS_CONN_CBACK* p_cback) { + bta_sys_cb.prm_cb = p_cback; } - /******************************************************************************* * * Function bta_sys_policy_register @@ -57,9 +55,8 @@ void bta_sys_rm_register(tBTA_SYS_CONN_CBACK * p_cback) * Returns void * ******************************************************************************/ -void bta_sys_policy_register(tBTA_SYS_CONN_CBACK * p_cback) -{ - bta_sys_cb.p_policy_cb = p_cback; +void bta_sys_policy_register(tBTA_SYS_CONN_CBACK* p_cback) { + bta_sys_cb.p_policy_cb = p_cback; } /******************************************************************************* @@ -72,9 +69,8 @@ void bta_sys_policy_register(tBTA_SYS_CONN_CBACK * p_cback) * Returns void * ******************************************************************************/ -void bta_sys_role_chg_register(tBTA_SYS_CONN_CBACK * p_cback) -{ - bta_sys_cb.p_role_cb = p_cback; +void bta_sys_role_chg_register(tBTA_SYS_CONN_CBACK* p_cback) { + bta_sys_cb.p_role_cb = p_cback; } /******************************************************************************* * @@ -87,9 +83,8 @@ void bta_sys_role_chg_register(tBTA_SYS_CONN_CBACK * p_cback) * ******************************************************************************/ #if (BTM_SSR_INCLUDED == TRUE) -void bta_sys_ssr_cfg_register(tBTA_SYS_SSR_CFG_CBACK * p_cback) -{ - bta_sys_cb.p_ssr_cb = p_cback; +void bta_sys_ssr_cfg_register(tBTA_SYS_SSR_CFG_CBACK* p_cback) { + bta_sys_cb.p_ssr_cb = p_cback; } #endif /******************************************************************************* @@ -102,12 +97,11 @@ void bta_sys_ssr_cfg_register(tBTA_SYS_SSR_CFG_CBACK * p_cback) * Returns void * ******************************************************************************/ -void bta_sys_notify_role_chg(BD_ADDR_PTR p_bda, uint8_t new_role, uint8_t hci_status) -{ - if (bta_sys_cb.p_role_cb) - { - bta_sys_cb.p_role_cb(BTA_SYS_ROLE_CHANGE, new_role, hci_status, p_bda); - } +void bta_sys_notify_role_chg(BD_ADDR_PTR p_bda, uint8_t new_role, + uint8_t hci_status) { + if (bta_sys_cb.p_role_cb) { + bta_sys_cb.p_role_cb(BTA_SYS_ROLE_CHANGE, new_role, hci_status, p_bda); + } } /******************************************************************************* @@ -120,20 +114,17 @@ void bta_sys_notify_role_chg(BD_ADDR_PTR p_bda, uint8_t new_role, uint8_t hci_st * Returns void * ******************************************************************************/ -void bta_sys_collision_register(uint8_t bta_id, tBTA_SYS_CONN_CBACK *p_cback) -{ - uint8_t index; - - for (index = 0; index < MAX_COLLISION_REG; index++) - { - if ((bta_sys_cb.colli_reg.id[index] == bta_id) || - (bta_sys_cb.colli_reg.id[index] == 0)) - { - bta_sys_cb.colli_reg.id[index] = bta_id; - bta_sys_cb.colli_reg.p_coll_cback[index] = p_cback; - return; - } +void bta_sys_collision_register(uint8_t bta_id, tBTA_SYS_CONN_CBACK* p_cback) { + uint8_t index; + + for (index = 0; index < MAX_COLLISION_REG; index++) { + if ((bta_sys_cb.colli_reg.id[index] == bta_id) || + (bta_sys_cb.colli_reg.id[index] == 0)) { + bta_sys_cb.colli_reg.id[index] = bta_id; + bta_sys_cb.colli_reg.p_coll_cback[index] = p_cback; + return; } + } } /******************************************************************************* @@ -146,18 +137,15 @@ void bta_sys_collision_register(uint8_t bta_id, tBTA_SYS_CONN_CBACK *p_cback) * Returns void * ******************************************************************************/ -void bta_sys_notify_collision (BD_ADDR_PTR p_bda) -{ - uint8_t index; - - for (index = 0; index < MAX_COLLISION_REG; index++) - { - if ((bta_sys_cb.colli_reg.id[index] != 0) && - (bta_sys_cb.colli_reg.p_coll_cback[index] != NULL)) - { - bta_sys_cb.colli_reg.p_coll_cback[index] (0, BTA_ID_SYS, 0, p_bda); - } +void bta_sys_notify_collision(BD_ADDR_PTR p_bda) { + uint8_t index; + + for (index = 0; index < MAX_COLLISION_REG; index++) { + if ((bta_sys_cb.colli_reg.id[index] != 0) && + (bta_sys_cb.colli_reg.p_coll_cback[index] != NULL)) { + bta_sys_cb.colli_reg.p_coll_cback[index](0, BTA_ID_SYS, 0, p_bda); } + } } /******************************************************************************* @@ -170,9 +158,8 @@ void bta_sys_notify_collision (BD_ADDR_PTR p_bda) * Returns void * ******************************************************************************/ -void bta_sys_sco_register(tBTA_SYS_CONN_CBACK * p_cback) -{ - bta_sys_cb.p_sco_cb = p_cback; +void bta_sys_sco_register(tBTA_SYS_CONN_CBACK* p_cback) { + bta_sys_cb.p_sco_cb = p_cback; } /******************************************************************************* @@ -185,9 +172,8 @@ void bta_sys_sco_register(tBTA_SYS_CONN_CBACK * p_cback) * Returns void * ******************************************************************************/ -void bta_sys_pm_register(tBTA_SYS_CONN_CBACK * p_cback) -{ - bta_sys_cb.ppm_cb = p_cback; +void bta_sys_pm_register(tBTA_SYS_CONN_CBACK* p_cback) { + bta_sys_cb.ppm_cb = p_cback; } /******************************************************************************* @@ -201,25 +187,16 @@ void bta_sys_pm_register(tBTA_SYS_CONN_CBACK * p_cback) * Returns void * ******************************************************************************/ -void bta_sys_conn_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - if(bta_sys_cb.prm_cb) - { - - bta_sys_cb.prm_cb(BTA_SYS_CONN_OPEN, id, app_id, peer_addr); - - } - - if(bta_sys_cb.ppm_cb) - { - - bta_sys_cb.ppm_cb(BTA_SYS_CONN_OPEN, id, app_id, peer_addr); - - } +void bta_sys_conn_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + if (bta_sys_cb.prm_cb) { + bta_sys_cb.prm_cb(BTA_SYS_CONN_OPEN, id, app_id, peer_addr); + } + + if (bta_sys_cb.ppm_cb) { + bta_sys_cb.ppm_cb(BTA_SYS_CONN_OPEN, id, app_id, peer_addr); + } } - - /******************************************************************************* * * Function bta_sys_conn_close @@ -231,45 +208,34 @@ void bta_sys_conn_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) * Returns void * ******************************************************************************/ -void bta_sys_conn_close(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - if(bta_sys_cb.prm_cb) - { - - bta_sys_cb.prm_cb(BTA_SYS_CONN_CLOSE, id, app_id, peer_addr); - - } - - if(bta_sys_cb.ppm_cb) - { - - bta_sys_cb.ppm_cb(BTA_SYS_CONN_CLOSE, id, app_id, peer_addr); - - } +void bta_sys_conn_close(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + if (bta_sys_cb.prm_cb) { + bta_sys_cb.prm_cb(BTA_SYS_CONN_CLOSE, id, app_id, peer_addr); + } + + if (bta_sys_cb.ppm_cb) { + bta_sys_cb.ppm_cb(BTA_SYS_CONN_CLOSE, id, app_id, peer_addr); + } } - /******************************************************************************* * * Function bta_sys_app_open * - * Description Called by BTA subsystems when application initiates connection + * Description Called by BTA subsystems when application initiates + *connection * to a peer device * * * Returns void * ******************************************************************************/ -void bta_sys_app_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - if(bta_sys_cb.ppm_cb) - { - bta_sys_cb.ppm_cb(BTA_SYS_APP_OPEN, id, app_id, peer_addr); - } +void bta_sys_app_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + if (bta_sys_cb.ppm_cb) { + bta_sys_cb.ppm_cb(BTA_SYS_APP_OPEN, id, app_id, peer_addr); + } } - - /******************************************************************************* * * Function bta_sys_app_close @@ -280,64 +246,57 @@ void bta_sys_app_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) * Returns void * ******************************************************************************/ -void bta_sys_app_close(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - if(bta_sys_cb.ppm_cb) - { - bta_sys_cb.ppm_cb(BTA_SYS_APP_CLOSE, id, app_id, peer_addr); - } +void bta_sys_app_close(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + if (bta_sys_cb.ppm_cb) { + bta_sys_cb.ppm_cb(BTA_SYS_APP_CLOSE, id, app_id, peer_addr); + } } - /******************************************************************************* * * Function bta_sys_sco_open * - * Description Called by BTA subsystems when sco connection for that service + * Description Called by BTA subsystems when sco connection for that + *service * is open * * Returns void * ******************************************************************************/ -void bta_sys_sco_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - /* AG triggers p_sco_cb by bta_sys_sco_use. */ - if((id != BTA_ID_AG) && (bta_sys_cb.p_sco_cb)) - { - /* without querying BTM_GetNumScoLinks() */ - bta_sys_cb.p_sco_cb(BTA_SYS_SCO_OPEN, 1, app_id, peer_addr); - } - - if(bta_sys_cb.ppm_cb) - { - bta_sys_cb.ppm_cb(BTA_SYS_SCO_OPEN, id, app_id, peer_addr); - } +void bta_sys_sco_open(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + /* AG triggers p_sco_cb by bta_sys_sco_use. */ + if ((id != BTA_ID_AG) && (bta_sys_cb.p_sco_cb)) { + /* without querying BTM_GetNumScoLinks() */ + bta_sys_cb.p_sco_cb(BTA_SYS_SCO_OPEN, 1, app_id, peer_addr); + } + + if (bta_sys_cb.ppm_cb) { + bta_sys_cb.ppm_cb(BTA_SYS_SCO_OPEN, id, app_id, peer_addr); + } } /******************************************************************************* * * Function bta_sys_sco_close * - * Description Called by BTA subsystems when sco connection for that service + * Description Called by BTA subsystems when sco connection for that + *service * is closed * * Returns void * ******************************************************************************/ -void bta_sys_sco_close(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - uint8_t num_sco_links; - - if((id != BTA_ID_AG) && (bta_sys_cb.p_sco_cb)) - { - num_sco_links = BTM_GetNumScoLinks(); - bta_sys_cb.p_sco_cb(BTA_SYS_SCO_CLOSE, num_sco_links, app_id, peer_addr); - } +void bta_sys_sco_close(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + uint8_t num_sco_links; - if(bta_sys_cb.ppm_cb) - { - bta_sys_cb.ppm_cb(BTA_SYS_SCO_CLOSE, id, app_id, peer_addr); - } + if ((id != BTA_ID_AG) && (bta_sys_cb.p_sco_cb)) { + num_sco_links = BTM_GetNumScoLinks(); + bta_sys_cb.p_sco_cb(BTA_SYS_SCO_CLOSE, num_sco_links, app_id, peer_addr); + } + + if (bta_sys_cb.ppm_cb) { + bta_sys_cb.ppm_cb(BTA_SYS_SCO_CLOSE, id, app_id, peer_addr); + } } /******************************************************************************* @@ -351,54 +310,51 @@ void bta_sys_sco_close(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) * ******************************************************************************/ void bta_sys_sco_use(UNUSED_ATTR uint8_t id, uint8_t app_id, - BD_ADDR peer_addr) -{ - /* AV streaming need to be suspended before SCO is connected. */ - if(bta_sys_cb.p_sco_cb) - { - /* without querying BTM_GetNumScoLinks() */ - bta_sys_cb.p_sco_cb(BTA_SYS_SCO_OPEN, 1, app_id, peer_addr); - } + BD_ADDR peer_addr) { + /* AV streaming need to be suspended before SCO is connected. */ + if (bta_sys_cb.p_sco_cb) { + /* without querying BTM_GetNumScoLinks() */ + bta_sys_cb.p_sco_cb(BTA_SYS_SCO_OPEN, 1, app_id, peer_addr); + } } /******************************************************************************* * * Function bta_sys_sco_unuse * - * Description Called by BTA subsystems when sco connection for that service + * Description Called by BTA subsystems when sco connection for that + *service * is no longer needed. * * Returns void * ******************************************************************************/ void bta_sys_sco_unuse(UNUSED_ATTR uint8_t id, uint8_t app_id, - BD_ADDR peer_addr) -{ - uint8_t num_sco_links; - - if((bta_sys_cb.p_sco_cb)) - { - num_sco_links = BTM_GetNumScoLinks(); - bta_sys_cb.p_sco_cb(BTA_SYS_SCO_CLOSE, num_sco_links, app_id, peer_addr); - } + BD_ADDR peer_addr) { + uint8_t num_sco_links; + + if ((bta_sys_cb.p_sco_cb)) { + num_sco_links = BTM_GetNumScoLinks(); + bta_sys_cb.p_sco_cb(BTA_SYS_SCO_CLOSE, num_sco_links, app_id, peer_addr); + } } /******************************************************************************* * * Function bta_sys_chg_ssr_config * - * Description Called by BTA subsystems to indicate that the given app SSR setting + * Description Called by BTA subsystems to indicate that the given app SSR + *setting * need to be changed. * * Returns void * ******************************************************************************/ #if (BTM_SSR_INCLUDED == TRUE) -void bta_sys_chg_ssr_config (uint8_t id, uint8_t app_id, uint16_t max_latency, uint16_t min_tout) -{ - if(bta_sys_cb.p_ssr_cb) - { - bta_sys_cb.p_ssr_cb(id, app_id, max_latency, min_tout); - } +void bta_sys_chg_ssr_config(uint8_t id, uint8_t app_id, uint16_t max_latency, + uint16_t min_tout) { + if (bta_sys_cb.p_ssr_cb) { + bta_sys_cb.p_ssr_cb(id, app_id, max_latency, min_tout); + } } #endif /******************************************************************************* @@ -411,12 +367,10 @@ void bta_sys_chg_ssr_config (uint8_t id, uint8_t app_id, uint16_t max_latency, u * Returns void * ******************************************************************************/ -void bta_sys_set_policy (uint8_t id, uint8_t policy, BD_ADDR peer_addr) -{ - if(bta_sys_cb.p_policy_cb) - { - bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_SET, id, policy, peer_addr); - } +void bta_sys_set_policy(uint8_t id, uint8_t policy, BD_ADDR peer_addr) { + if (bta_sys_cb.p_policy_cb) { + bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_SET, id, policy, peer_addr); + } } /******************************************************************************* @@ -429,12 +383,10 @@ void bta_sys_set_policy (uint8_t id, uint8_t policy, BD_ADDR peer_addr) * Returns void * ******************************************************************************/ -void bta_sys_clear_policy (uint8_t id, uint8_t policy, BD_ADDR peer_addr) -{ - if(bta_sys_cb.p_policy_cb) - { - bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_CLR, id, policy, peer_addr); - } +void bta_sys_clear_policy(uint8_t id, uint8_t policy, BD_ADDR peer_addr) { + if (bta_sys_cb.p_policy_cb) { + bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_CLR, id, policy, peer_addr); + } } /******************************************************************************* @@ -447,12 +399,10 @@ void bta_sys_clear_policy (uint8_t id, uint8_t policy, BD_ADDR peer_addr) * Returns void * ******************************************************************************/ -void bta_sys_set_default_policy (uint8_t id, uint8_t policy) -{ - if(bta_sys_cb.p_policy_cb) - { - bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_DEF_SET, id, policy, NULL); - } +void bta_sys_set_default_policy(uint8_t id, uint8_t policy) { + if (bta_sys_cb.p_policy_cb) { + bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_DEF_SET, id, policy, NULL); + } } /******************************************************************************* @@ -465,12 +415,10 @@ void bta_sys_set_default_policy (uint8_t id, uint8_t policy) * Returns void * ******************************************************************************/ -void bta_sys_clear_default_policy (uint8_t id, uint8_t policy) -{ - if(bta_sys_cb.p_policy_cb) - { - bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_DEF_CLR, id, policy, NULL); - } +void bta_sys_clear_default_policy(uint8_t id, uint8_t policy) { + if (bta_sys_cb.p_policy_cb) { + bta_sys_cb.p_policy_cb(BTA_SYS_PLCY_DEF_CLR, id, policy, NULL); + } } /******************************************************************************* @@ -483,21 +431,14 @@ void bta_sys_clear_default_policy (uint8_t id, uint8_t policy) * Returns void * ******************************************************************************/ -void bta_sys_idle(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - - if(bta_sys_cb.prm_cb) - { - - bta_sys_cb.prm_cb(BTA_SYS_CONN_IDLE, id, app_id, peer_addr); - - } - - if(bta_sys_cb.ppm_cb) - { - - bta_sys_cb.ppm_cb(BTA_SYS_CONN_IDLE, id, app_id, peer_addr); - } +void bta_sys_idle(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + if (bta_sys_cb.prm_cb) { + bta_sys_cb.prm_cb(BTA_SYS_CONN_IDLE, id, app_id, peer_addr); + } + + if (bta_sys_cb.ppm_cb) { + bta_sys_cb.ppm_cb(BTA_SYS_CONN_IDLE, id, app_id, peer_addr); + } } /******************************************************************************* @@ -510,21 +451,14 @@ void bta_sys_idle(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) * Returns void * ******************************************************************************/ -void bta_sys_busy(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) -{ - if(bta_sys_cb.prm_cb) - { - - bta_sys_cb.prm_cb(BTA_SYS_CONN_BUSY, id, app_id, peer_addr); - - } - - if(bta_sys_cb.ppm_cb) - { - - bta_sys_cb.ppm_cb(BTA_SYS_CONN_BUSY, id, app_id, peer_addr); - - } +void bta_sys_busy(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) { + if (bta_sys_cb.prm_cb) { + bta_sys_cb.prm_cb(BTA_SYS_CONN_BUSY, id, app_id, peer_addr); + } + + if (bta_sys_cb.ppm_cb) { + bta_sys_cb.ppm_cb(BTA_SYS_CONN_BUSY, id, app_id, peer_addr); + } } #if (BTA_EIR_CANNED_UUID_LIST != TRUE) @@ -532,15 +466,15 @@ void bta_sys_busy(uint8_t id, uint8_t app_id, BD_ADDR peer_addr) * * Function bta_sys_eir_register * - * Description Called by BTA DM to register EIR utility function that can be + * Description Called by BTA DM to register EIR utility function that can + *be * used by the other BTA modules to add/remove UUID. * * Returns void * ******************************************************************************/ -void bta_sys_eir_register(tBTA_SYS_EIR_CBACK * p_cback) -{ - bta_sys_cb.eir_cb = p_cback; +void bta_sys_eir_register(tBTA_SYS_EIR_CBACK* p_cback) { + bta_sys_cb.eir_cb = p_cback; } /******************************************************************************* @@ -553,12 +487,10 @@ void bta_sys_eir_register(tBTA_SYS_EIR_CBACK * p_cback) * Returns void * ******************************************************************************/ -void bta_sys_add_uuid(uint16_t uuid16) -{ - if(bta_sys_cb.eir_cb) - { - bta_sys_cb.eir_cb(uuid16, true ); - } +void bta_sys_add_uuid(uint16_t uuid16) { + if (bta_sys_cb.eir_cb) { + bta_sys_cb.eir_cb(uuid16, true); + } } /******************************************************************************* @@ -571,11 +503,9 @@ void bta_sys_add_uuid(uint16_t uuid16) * Returns void * ******************************************************************************/ -void bta_sys_remove_uuid(uint16_t uuid16) -{ - if(bta_sys_cb.eir_cb) - { - bta_sys_cb.eir_cb(uuid16, false); - } +void bta_sys_remove_uuid(uint16_t uuid16) { + if (bta_sys_cb.eir_cb) { + bta_sys_cb.eir_cb(uuid16, false); + } } #endif diff --git a/system/bta/sys/bta_sys_int.h b/system/bta/sys/bta_sys_int.h index 3657693e1c7..dc88e4598d8 100644 --- a/system/bta/sys/bta_sys_int.h +++ b/system/bta/sys/bta_sys_int.h @@ -33,48 +33,50 @@ ****************************************************************************/ /* SYS HW state */ -enum -{ - BTA_SYS_HW_OFF, - BTA_SYS_HW_STARTING, - BTA_SYS_HW_ON, - BTA_SYS_HW_STOPPING +enum { + BTA_SYS_HW_OFF, + BTA_SYS_HW_STARTING, + BTA_SYS_HW_ON, + BTA_SYS_HW_STOPPING }; typedef uint8_t tBTA_SYS_HW_STATE; /* Collision callback */ -#define MAX_COLLISION_REG 5 +#define MAX_COLLISION_REG 5 -typedef struct -{ - uint8_t id[MAX_COLLISION_REG]; - tBTA_SYS_CONN_CBACK *p_coll_cback[MAX_COLLISION_REG]; +typedef struct { + uint8_t id[MAX_COLLISION_REG]; + tBTA_SYS_CONN_CBACK* p_coll_cback[MAX_COLLISION_REG]; } tBTA_SYS_COLLISION; /* system manager control block */ -typedef struct -{ - tBTA_SYS_REG *reg[BTA_ID_MAX]; /* registration structures */ - bool is_reg[BTA_ID_MAX]; /* registration structures */ - tBTA_SYS_HW_STATE state; - tBTA_SYS_HW_CBACK *sys_hw_cback[BTA_SYS_MAX_HW_MODULES]; /* enable callback for each HW modules */ - uint32_t sys_hw_module_active; /* bitmask of all active modules */ - uint16_t sys_features; /* Bitmask of sys features */ +typedef struct { + tBTA_SYS_REG* reg[BTA_ID_MAX]; /* registration structures */ + bool is_reg[BTA_ID_MAX]; /* registration structures */ + tBTA_SYS_HW_STATE state; + tBTA_SYS_HW_CBACK* sys_hw_cback[BTA_SYS_MAX_HW_MODULES]; /* enable callback + for each HW + modules */ + uint32_t sys_hw_module_active; /* bitmask of all active modules */ + uint16_t sys_features; /* Bitmask of sys features */ - tBTA_SYS_CONN_CBACK *prm_cb; /* role management callback registered by DM */ - tBTA_SYS_CONN_CBACK *ppm_cb; /* low power management callback registered by DM */ - tBTA_SYS_CONN_CBACK *p_policy_cb; /* link policy change callback registered by DM */ - tBTA_SYS_CONN_CBACK *p_sco_cb; /* SCO connection change callback registered by AV */ - tBTA_SYS_CONN_CBACK *p_role_cb; /* role change callback registered by AV */ - tBTA_SYS_COLLISION colli_reg; /* collision handling module */ + tBTA_SYS_CONN_CBACK* prm_cb; /* role management callback registered by DM */ + tBTA_SYS_CONN_CBACK* + ppm_cb; /* low power management callback registered by DM */ + tBTA_SYS_CONN_CBACK* + p_policy_cb; /* link policy change callback registered by DM */ + tBTA_SYS_CONN_CBACK* + p_sco_cb; /* SCO connection change callback registered by AV */ + tBTA_SYS_CONN_CBACK* p_role_cb; /* role change callback registered by AV */ + tBTA_SYS_COLLISION colli_reg; /* collision handling module */ #if (BTA_EIR_CANNED_UUID_LIST != TRUE) - tBTA_SYS_EIR_CBACK *eir_cb; /* add/remove UUID into EIR */ + tBTA_SYS_EIR_CBACK* eir_cb; /* add/remove UUID into EIR */ #endif #if (BTM_SSR_INCLUDED == TRUE) - tBTA_SYS_SSR_CFG_CBACK *p_ssr_cb; + tBTA_SYS_SSR_CFG_CBACK* p_ssr_cb; #endif - /* VS event handler */ - tBTA_SYS_VS_EVT_HDLR *p_vs_evt_hdlr; + /* VS event handler */ + tBTA_SYS_VS_EVT_HDLR* p_vs_evt_hdlr; } tBTA_SYS_CB; @@ -86,14 +88,14 @@ typedef struct extern tBTA_SYS_CB bta_sys_cb; /* functions used for BTA SYS HW state machine */ -void bta_sys_hw_btm_cback( tBTM_DEV_STATUS status ); -void bta_sys_hw_error(tBTA_SYS_HW_MSG *p_sys_hw_msg); -void bta_sys_hw_api_enable( tBTA_SYS_HW_MSG *p_sys_hw_msg ); -void bta_sys_hw_api_disable(tBTA_SYS_HW_MSG *p_sys_hw_msg); -void bta_sys_hw_evt_enabled(tBTA_SYS_HW_MSG *p_sys_hw_msg); -void bta_sys_hw_evt_disabled(tBTA_SYS_HW_MSG *p_sys_hw_msg); -void bta_sys_hw_evt_stack_enabled(tBTA_SYS_HW_MSG *p_sys_hw_msg); +void bta_sys_hw_btm_cback(tBTM_DEV_STATUS status); +void bta_sys_hw_error(tBTA_SYS_HW_MSG* p_sys_hw_msg); +void bta_sys_hw_api_enable(tBTA_SYS_HW_MSG* p_sys_hw_msg); +void bta_sys_hw_api_disable(tBTA_SYS_HW_MSG* p_sys_hw_msg); +void bta_sys_hw_evt_enabled(tBTA_SYS_HW_MSG* p_sys_hw_msg); +void bta_sys_hw_evt_disabled(tBTA_SYS_HW_MSG* p_sys_hw_msg); +void bta_sys_hw_evt_stack_enabled(tBTA_SYS_HW_MSG* p_sys_hw_msg); -bool bta_sys_sm_execute(BT_HDR *p_msg); +bool bta_sys_sm_execute(BT_HDR* p_msg); #endif /* BTA_SYS_INT_H */ diff --git a/system/bta/sys/bta_sys_main.cc b/system/bta/sys/bta_sys_main.cc index b97b61e97bf..689ba5d468c 100644 --- a/system/bta/sys/bta_sys_main.cc +++ b/system/bta/sys/bta_sys_main.cc @@ -41,121 +41,128 @@ #include "osi/include/thread.h" #include "utl.h" -#if( defined BTA_AR_INCLUDED ) && (BTA_AR_INCLUDED == true) +#if (defined BTA_AR_INCLUDED) && (BTA_AR_INCLUDED == true) #include "bta_ar_api.h" #endif /* system manager control block definition */ tBTA_SYS_CB bta_sys_cb; -fixed_queue_t *btu_bta_alarm_queue; -extern thread_t *bt_workqueue_thread; +fixed_queue_t* btu_bta_alarm_queue; +extern thread_t* bt_workqueue_thread; /* trace level */ /* TODO Hard-coded trace levels - Needs to be configurable */ -uint8_t appl_trace_level = BT_TRACE_LEVEL_WARNING; //APPL_INITIAL_TRACE_LEVEL; +uint8_t appl_trace_level = BT_TRACE_LEVEL_WARNING; // APPL_INITIAL_TRACE_LEVEL; uint8_t btif_trace_level = BT_TRACE_LEVEL_WARNING; // Communication queue between btu_task and bta. -extern fixed_queue_t *btu_bta_msg_queue; - -static const tBTA_SYS_REG bta_sys_hw_reg = -{ - bta_sys_sm_execute, - NULL -}; +extern fixed_queue_t* btu_bta_msg_queue; +static const tBTA_SYS_REG bta_sys_hw_reg = {bta_sys_sm_execute, NULL}; /* type for action functions */ -typedef void (*tBTA_SYS_ACTION)(tBTA_SYS_HW_MSG *p_data); +typedef void (*tBTA_SYS_ACTION)(tBTA_SYS_HW_MSG* p_data); /* action function list */ -const tBTA_SYS_ACTION bta_sys_action[] = -{ +const tBTA_SYS_ACTION bta_sys_action[] = { /* device manager local device API events - cf bta_sys.h for events */ - bta_sys_hw_api_enable, /* 0 BTA_SYS_HW_API_ENABLE_EVT */ - bta_sys_hw_evt_enabled, /* 1 BTA_SYS_HW_EVT_ENABLED_EVT */ - bta_sys_hw_evt_stack_enabled, /* 2 BTA_SYS_HW_EVT_STACK_ENABLED_EVT */ - bta_sys_hw_api_disable, /* 3 BTA_SYS_HW_API_DISABLE_EVT */ - bta_sys_hw_evt_disabled, /* 4 BTA_SYS_HW_EVT_DISABLED_EVT */ - bta_sys_hw_error /* 5 BTA_SYS_HW_ERROR_EVT */ + bta_sys_hw_api_enable, /* 0 BTA_SYS_HW_API_ENABLE_EVT */ + bta_sys_hw_evt_enabled, /* 1 BTA_SYS_HW_EVT_ENABLED_EVT */ + bta_sys_hw_evt_stack_enabled, /* 2 BTA_SYS_HW_EVT_STACK_ENABLED_EVT */ + bta_sys_hw_api_disable, /* 3 BTA_SYS_HW_API_DISABLE_EVT */ + bta_sys_hw_evt_disabled, /* 4 BTA_SYS_HW_EVT_DISABLED_EVT */ + bta_sys_hw_error /* 5 BTA_SYS_HW_ERROR_EVT */ }; /* state machine action enumeration list */ -enum -{ - /* device manager local device API events */ - BTA_SYS_HW_API_ENABLE, - BTA_SYS_HW_EVT_ENABLED, - BTA_SYS_HW_EVT_STACK_ENABLED, - BTA_SYS_HW_API_DISABLE, - BTA_SYS_HW_EVT_DISABLED, - BTA_SYS_HW_ERROR +enum { + /* device manager local device API events */ + BTA_SYS_HW_API_ENABLE, + BTA_SYS_HW_EVT_ENABLED, + BTA_SYS_HW_EVT_STACK_ENABLED, + BTA_SYS_HW_API_DISABLE, + BTA_SYS_HW_EVT_DISABLED, + BTA_SYS_HW_ERROR }; -#define BTA_SYS_NUM_ACTIONS (BTA_SYS_MAX_EVT & 0x00ff) -#define BTA_SYS_IGNORE BTA_SYS_NUM_ACTIONS +#define BTA_SYS_NUM_ACTIONS (BTA_SYS_MAX_EVT & 0x00ff) +#define BTA_SYS_IGNORE BTA_SYS_NUM_ACTIONS /* state table information */ -#define BTA_SYS_ACTIONS 2 /* number of actions */ -#define BTA_SYS_NEXT_STATE 2 /* position of next state */ -#define BTA_SYS_NUM_COLS 3 /* number of columns in state tables */ - +#define BTA_SYS_ACTIONS 2 /* number of actions */ +#define BTA_SYS_NEXT_STATE 2 /* position of next state */ +#define BTA_SYS_NUM_COLS 3 /* number of columns in state tables */ /* state table for OFF state */ -const uint8_t bta_sys_hw_off[][BTA_SYS_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next State */ -/* API_ENABLE */ {BTA_SYS_HW_API_ENABLE, BTA_SYS_IGNORE, BTA_SYS_HW_STARTING}, -/* EVT_ENABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_STARTING}, -/* STACK_ENABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, -/* API_DISABLE */ {BTA_SYS_HW_EVT_DISABLED, BTA_SYS_IGNORE, BTA_SYS_HW_OFF}, -/* EVT_DISABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_OFF}, -/* EVT_ERROR */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_OFF} -}; - -const uint8_t bta_sys_hw_starting[][BTA_SYS_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next State */ -/* API_ENABLE */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_STARTING}, /* wait for completion event */ -/* EVT_ENABLED */ {BTA_SYS_HW_EVT_ENABLED, BTA_SYS_IGNORE, BTA_SYS_HW_STARTING}, -/* STACK_ENABLED */ {BTA_SYS_HW_EVT_STACK_ENABLED, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, -/* API_DISABLE */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_STOPPING}, /* successive disable/enable: change state wait for completion to disable */ -/* EVT_DISABLED */ {BTA_SYS_HW_EVT_DISABLED, BTA_SYS_HW_API_ENABLE, BTA_SYS_HW_STARTING}, /* successive enable/disable: notify, then restart HW */ -/* EVT_ERROR */ {BTA_SYS_HW_ERROR, BTA_SYS_IGNORE, BTA_SYS_HW_ON} -}; - -const uint8_t bta_sys_hw_on[][BTA_SYS_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next State */ -/* API_ENABLE */ {BTA_SYS_HW_API_ENABLE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, -/* EVT_ENABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, -/* STACK_ENABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, -/* API_DISABLE */ {BTA_SYS_HW_API_DISABLE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, /* don't change the state here, as some other modules might be active */ -/* EVT_DISABLED */ {BTA_SYS_HW_ERROR, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, -/* EVT_ERROR */ {BTA_SYS_HW_ERROR, BTA_SYS_IGNORE, BTA_SYS_HW_ON} -}; - -const uint8_t bta_sys_hw_stopping[][BTA_SYS_NUM_COLS] = -{ -/* Event Action 1 Action 2 Next State */ -/* API_ENABLE */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_STARTING}, /* change state, and wait for completion event to enable */ -/* EVT_ENABLED */ {BTA_SYS_HW_EVT_ENABLED, BTA_SYS_IGNORE, BTA_SYS_HW_STOPPING}, /* successive enable/disable: finish the enable before disabling */ -/* STACK_ENABLED */ {BTA_SYS_HW_EVT_STACK_ENABLED, BTA_SYS_HW_API_DISABLE, BTA_SYS_HW_STOPPING}, /* successive enable/disable: notify, then stop */ -/* API_DISABLE */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_STOPPING}, /* wait for completion event */ -/* EVT_DISABLED */ {BTA_SYS_HW_EVT_DISABLED, BTA_SYS_IGNORE, BTA_SYS_HW_OFF}, -/* EVT_ERROR */ {BTA_SYS_HW_API_DISABLE, BTA_SYS_IGNORE, BTA_SYS_HW_STOPPING} -}; +const uint8_t bta_sys_hw_off[][BTA_SYS_NUM_COLS] = { + /* Event Action 1 Action 2 + Next State */ + /* API_ENABLE */ {BTA_SYS_HW_API_ENABLE, BTA_SYS_IGNORE, + BTA_SYS_HW_STARTING}, + /* EVT_ENABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_STARTING}, + /* STACK_ENABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, + /* API_DISABLE */ {BTA_SYS_HW_EVT_DISABLED, BTA_SYS_IGNORE, + BTA_SYS_HW_OFF}, + /* EVT_DISABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_OFF}, + /* EVT_ERROR */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_OFF}}; + +const uint8_t bta_sys_hw_starting[][BTA_SYS_NUM_COLS] = { + /* Event Action 1 Action 2 + Next State */ + /* API_ENABLE */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, + BTA_SYS_HW_STARTING}, /* wait for completion event */ + /* EVT_ENABLED */ {BTA_SYS_HW_EVT_ENABLED, BTA_SYS_IGNORE, + BTA_SYS_HW_STARTING}, + /* STACK_ENABLED */ {BTA_SYS_HW_EVT_STACK_ENABLED, BTA_SYS_IGNORE, + BTA_SYS_HW_ON}, + /* API_DISABLE */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, + BTA_SYS_HW_STOPPING}, /* successive disable/enable: + change state wait for + completion to disable */ + /* EVT_DISABLED */ {BTA_SYS_HW_EVT_DISABLED, BTA_SYS_HW_API_ENABLE, + BTA_SYS_HW_STARTING}, /* successive enable/disable: + notify, then restart HW */ + /* EVT_ERROR */ {BTA_SYS_HW_ERROR, BTA_SYS_IGNORE, BTA_SYS_HW_ON}}; + +const uint8_t bta_sys_hw_on[][BTA_SYS_NUM_COLS] = { + /* Event Action 1 Action 2 + Next State */ + /* API_ENABLE */ {BTA_SYS_HW_API_ENABLE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, + /* EVT_ENABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, + /* STACK_ENABLED */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, + /* API_DISABLE */ + {BTA_SYS_HW_API_DISABLE, BTA_SYS_IGNORE, + BTA_SYS_HW_ON}, /* don't change the state here, as some + other modules might be active */ + /* EVT_DISABLED */ {BTA_SYS_HW_ERROR, BTA_SYS_IGNORE, BTA_SYS_HW_ON}, + /* EVT_ERROR */ {BTA_SYS_HW_ERROR, BTA_SYS_IGNORE, BTA_SYS_HW_ON}}; + +const uint8_t bta_sys_hw_stopping[][BTA_SYS_NUM_COLS] = { + /* Event Action 1 Action 2 + Next State */ + /* API_ENABLE */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, + BTA_SYS_HW_STARTING}, /* change state, and wait for + completion event to enable */ + /* EVT_ENABLED */ {BTA_SYS_HW_EVT_ENABLED, BTA_SYS_IGNORE, + BTA_SYS_HW_STOPPING}, /* successive enable/disable: + finish the enable before + disabling */ + /* STACK_ENABLED */ {BTA_SYS_HW_EVT_STACK_ENABLED, BTA_SYS_HW_API_DISABLE, + BTA_SYS_HW_STOPPING}, /* successive enable/disable: + notify, then stop */ + /* API_DISABLE */ {BTA_SYS_IGNORE, BTA_SYS_IGNORE, + BTA_SYS_HW_STOPPING}, /* wait for completion event */ + /* EVT_DISABLED */ {BTA_SYS_HW_EVT_DISABLED, BTA_SYS_IGNORE, + BTA_SYS_HW_OFF}, + /* EVT_ERROR */ {BTA_SYS_HW_API_DISABLE, BTA_SYS_IGNORE, + BTA_SYS_HW_STOPPING}}; typedef const uint8_t (*tBTA_SYS_ST_TBL)[BTA_SYS_NUM_COLS]; /* state table */ -const tBTA_SYS_ST_TBL bta_sys_st_tbl[] = { - bta_sys_hw_off, - bta_sys_hw_starting, - bta_sys_hw_on, - bta_sys_hw_stopping -}; +const tBTA_SYS_ST_TBL bta_sys_st_tbl[] = {bta_sys_hw_off, bta_sys_hw_starting, + bta_sys_hw_on, bta_sys_hw_stopping}; /******************************************************************************* * @@ -167,33 +174,32 @@ const tBTA_SYS_ST_TBL bta_sys_st_tbl[] = { * Returns void * ******************************************************************************/ -void bta_sys_init(void) -{ - memset(&bta_sys_cb, 0, sizeof(tBTA_SYS_CB)); +void bta_sys_init(void) { + memset(&bta_sys_cb, 0, sizeof(tBTA_SYS_CB)); - btu_bta_alarm_queue = fixed_queue_new(SIZE_MAX); + btu_bta_alarm_queue = fixed_queue_new(SIZE_MAX); - alarm_register_processing_queue(btu_bta_alarm_queue, bt_workqueue_thread); + alarm_register_processing_queue(btu_bta_alarm_queue, bt_workqueue_thread); - appl_trace_level = APPL_INITIAL_TRACE_LEVEL; + appl_trace_level = APPL_INITIAL_TRACE_LEVEL; - /* register BTA SYS message handler */ - bta_sys_register( BTA_ID_SYS, &bta_sys_hw_reg); + /* register BTA SYS message handler */ + bta_sys_register(BTA_ID_SYS, &bta_sys_hw_reg); - /* register for BTM notifications */ - BTM_RegisterForDeviceStatusNotif ((tBTM_DEV_STATUS_CB*)&bta_sys_hw_btm_cback ); + /* register for BTM notifications */ + BTM_RegisterForDeviceStatusNotif((tBTM_DEV_STATUS_CB*)&bta_sys_hw_btm_cback); -#if( defined BTA_AR_INCLUDED ) && (BTA_AR_INCLUDED == true) - bta_ar_init(); +#if (defined BTA_AR_INCLUDED) && (BTA_AR_INCLUDED == true) + bta_ar_init(); #endif - bta_closure_init(bta_sys_register, bta_sys_sendmsg); + bta_closure_init(bta_sys_register, bta_sys_sendmsg); } void bta_sys_free(void) { - alarm_unregister_processing_queue(btu_bta_alarm_queue); - fixed_queue_free(btu_bta_alarm_queue, NULL); - btu_bta_alarm_queue = NULL; + alarm_unregister_processing_queue(btu_bta_alarm_queue); + fixed_queue_free(btu_bta_alarm_queue, NULL); + btu_bta_alarm_queue = NULL; } /******************************************************************************* @@ -206,198 +212,178 @@ void bta_sys_free(void) { * Returns void * ******************************************************************************/ -bool bta_sys_sm_execute(BT_HDR *p_msg) -{ - bool freebuf = true; - tBTA_SYS_ST_TBL state_table; - uint8_t action; - int i; - - APPL_TRACE_EVENT("bta_sys_sm_execute state:%d, event:0x%x", bta_sys_cb.state, p_msg->event); - - /* look up the state table for the current state */ - state_table = bta_sys_st_tbl[bta_sys_cb.state]; - /* update state */ - bta_sys_cb.state = state_table[p_msg->event & 0x00ff][BTA_SYS_NEXT_STATE]; - - /* execute action functions */ - for (i = 0; i < BTA_SYS_ACTIONS; i++) - { - if ((action = state_table[p_msg->event & 0x00ff][i]) != BTA_SYS_IGNORE) - { - (*bta_sys_action[action])( (tBTA_SYS_HW_MSG*) p_msg); - } - else - { - break; - } +bool bta_sys_sm_execute(BT_HDR* p_msg) { + bool freebuf = true; + tBTA_SYS_ST_TBL state_table; + uint8_t action; + int i; + + APPL_TRACE_EVENT("bta_sys_sm_execute state:%d, event:0x%x", bta_sys_cb.state, + p_msg->event); + + /* look up the state table for the current state */ + state_table = bta_sys_st_tbl[bta_sys_cb.state]; + /* update state */ + bta_sys_cb.state = state_table[p_msg->event & 0x00ff][BTA_SYS_NEXT_STATE]; + + /* execute action functions */ + for (i = 0; i < BTA_SYS_ACTIONS; i++) { + if ((action = state_table[p_msg->event & 0x00ff][i]) != BTA_SYS_IGNORE) { + (*bta_sys_action[action])((tBTA_SYS_HW_MSG*)p_msg); + } else { + break; } - return freebuf; - + } + return freebuf; } - -void bta_sys_hw_register( tBTA_SYS_HW_MODULE module, tBTA_SYS_HW_CBACK *cback) -{ - bta_sys_cb.sys_hw_cback[module]=cback; +void bta_sys_hw_register(tBTA_SYS_HW_MODULE module, tBTA_SYS_HW_CBACK* cback) { + bta_sys_cb.sys_hw_cback[module] = cback; } - -void bta_sys_hw_unregister( tBTA_SYS_HW_MODULE module ) -{ - bta_sys_cb.sys_hw_cback[module]=NULL; +void bta_sys_hw_unregister(tBTA_SYS_HW_MODULE module) { + bta_sys_cb.sys_hw_cback[module] = NULL; } /******************************************************************************* * * Function bta_sys_hw_btm_cback * - * Description This function is registered by BTA SYS to BTM in order to get status notifications + * Description This function is registered by BTA SYS to BTM in order to get + *status notifications * * * Returns * ******************************************************************************/ -void bta_sys_hw_btm_cback( tBTM_DEV_STATUS status ) -{ - - tBTA_SYS_HW_MSG *sys_event = - (tBTA_SYS_HW_MSG *)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); - - APPL_TRACE_DEBUG("%s was called with parameter: %i", __func__, status); - - /* send a message to BTA SYS */ - if (status == BTM_DEV_STATUS_UP) { - sys_event->hdr.event = BTA_SYS_EVT_STACK_ENABLED_EVT; - } else if (status == BTM_DEV_STATUS_DOWN) { - sys_event->hdr.event = BTA_SYS_ERROR_EVT; - } else { - /* BTM_DEV_STATUS_CMD_TOUT is ignored for now. */ - osi_free_and_reset((void **)&sys_event); - } - - if (sys_event) - bta_sys_sendmsg(sys_event); +void bta_sys_hw_btm_cback(tBTM_DEV_STATUS status) { + tBTA_SYS_HW_MSG* sys_event = + (tBTA_SYS_HW_MSG*)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); + + APPL_TRACE_DEBUG("%s was called with parameter: %i", __func__, status); + + /* send a message to BTA SYS */ + if (status == BTM_DEV_STATUS_UP) { + sys_event->hdr.event = BTA_SYS_EVT_STACK_ENABLED_EVT; + } else if (status == BTM_DEV_STATUS_DOWN) { + sys_event->hdr.event = BTA_SYS_ERROR_EVT; + } else { + /* BTM_DEV_STATUS_CMD_TOUT is ignored for now. */ + osi_free_and_reset((void**)&sys_event); + } + + if (sys_event) bta_sys_sendmsg(sys_event); } /******************************************************************************* * * Function bta_sys_hw_error * - * Description In case the HW device stops answering... Try to turn it off, then re-enable all + * Description In case the HW device stops answering... Try to turn it off, + *then re-enable all * previously active SW modules. * * Returns success or failure * ******************************************************************************/ -void bta_sys_hw_error(UNUSED_ATTR tBTA_SYS_HW_MSG *p_sys_hw_msg) -{ - uint8_t module_index; - - APPL_TRACE_DEBUG("%s", __func__); - - for (module_index = 0; module_index < BTA_SYS_MAX_HW_MODULES; module_index++) - { - if( bta_sys_cb.sys_hw_module_active & ((uint32_t)1 << module_index )) { - switch( module_index) - { - case BTA_SYS_HW_BLUETOOTH: - /* Send BTA_SYS_HW_ERROR_EVT to DM */ - if (bta_sys_cb.sys_hw_cback[module_index] != NULL) - bta_sys_cb.sys_hw_cback[module_index] (BTA_SYS_HW_ERROR_EVT); - break; - default: - /* not yet supported */ - break; - } - } - } -} +void bta_sys_hw_error(UNUSED_ATTR tBTA_SYS_HW_MSG* p_sys_hw_msg) { + uint8_t module_index; + APPL_TRACE_DEBUG("%s", __func__); + for (module_index = 0; module_index < BTA_SYS_MAX_HW_MODULES; + module_index++) { + if (bta_sys_cb.sys_hw_module_active & ((uint32_t)1 << module_index)) { + switch (module_index) { + case BTA_SYS_HW_BLUETOOTH: + /* Send BTA_SYS_HW_ERROR_EVT to DM */ + if (bta_sys_cb.sys_hw_cback[module_index] != NULL) + bta_sys_cb.sys_hw_cback[module_index](BTA_SYS_HW_ERROR_EVT); + break; + default: + /* not yet supported */ + break; + } + } + } +} /******************************************************************************* * * Function bta_sys_hw_enable * - * Description this function is called after API enable and HW has been turned on + * Description this function is called after API enable and HW has been + *turned on * * * Returns success or failure * ******************************************************************************/ -void bta_sys_hw_api_enable( tBTA_SYS_HW_MSG *p_sys_hw_msg ) -{ - if ((!bta_sys_cb.sys_hw_module_active) && (bta_sys_cb.state != BTA_SYS_HW_ON)) - { - /* register which HW module was turned on */ - bta_sys_cb.sys_hw_module_active |= ((uint32_t)1 << p_sys_hw_msg->hw_module ); - - tBTA_SYS_HW_MSG *p_msg = - (tBTA_SYS_HW_MSG *)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); - p_msg->hdr.event = BTA_SYS_EVT_ENABLED_EVT; - p_msg->hw_module = p_sys_hw_msg->hw_module; - - bta_sys_sendmsg(p_msg); - } - else - { - /* register which HW module was turned on */ - bta_sys_cb.sys_hw_module_active |= ((uint32_t)1 << p_sys_hw_msg->hw_module ); - - /* HW already in use, so directly notify the caller */ - if (bta_sys_cb.sys_hw_cback[p_sys_hw_msg->hw_module ]!= NULL ) - bta_sys_cb.sys_hw_cback[p_sys_hw_msg->hw_module ]( BTA_SYS_HW_ON_EVT ); - } - - APPL_TRACE_EVENT ("bta_sys_hw_api_enable for %d, active modules 0x%04X", - p_sys_hw_msg->hw_module, bta_sys_cb.sys_hw_module_active); - +void bta_sys_hw_api_enable(tBTA_SYS_HW_MSG* p_sys_hw_msg) { + if ((!bta_sys_cb.sys_hw_module_active) && + (bta_sys_cb.state != BTA_SYS_HW_ON)) { + /* register which HW module was turned on */ + bta_sys_cb.sys_hw_module_active |= ((uint32_t)1 << p_sys_hw_msg->hw_module); + + tBTA_SYS_HW_MSG* p_msg = + (tBTA_SYS_HW_MSG*)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); + p_msg->hdr.event = BTA_SYS_EVT_ENABLED_EVT; + p_msg->hw_module = p_sys_hw_msg->hw_module; + + bta_sys_sendmsg(p_msg); + } else { + /* register which HW module was turned on */ + bta_sys_cb.sys_hw_module_active |= ((uint32_t)1 << p_sys_hw_msg->hw_module); + + /* HW already in use, so directly notify the caller */ + if (bta_sys_cb.sys_hw_cback[p_sys_hw_msg->hw_module] != NULL) + bta_sys_cb.sys_hw_cback[p_sys_hw_msg->hw_module](BTA_SYS_HW_ON_EVT); + } + + APPL_TRACE_EVENT("bta_sys_hw_api_enable for %d, active modules 0x%04X", + p_sys_hw_msg->hw_module, bta_sys_cb.sys_hw_module_active); } /******************************************************************************* * * Function bta_sys_hw_disable * - * Description if no other module is using the HW, this function will call ( if defined ) a user-macro to turn off the HW + * Description if no other module is using the HW, this function will call ( + *if defined ) a user-macro to turn off the HW * * * Returns success or failure * ******************************************************************************/ -void bta_sys_hw_api_disable(tBTA_SYS_HW_MSG *p_sys_hw_msg) -{ - APPL_TRACE_DEBUG("bta_sys_hw_api_disable for %d, active modules: 0x%04X", - p_sys_hw_msg->hw_module, bta_sys_cb.sys_hw_module_active ); - - /* make sure the related SW blocks were stopped */ - bta_sys_disable( p_sys_hw_msg->hw_module ); - - - /* register which module we turn off */ - bta_sys_cb.sys_hw_module_active &= ~((uint32_t)1 << p_sys_hw_msg->hw_module ); - - - /* if there are still some SW modules using the HW, just provide an answer to the calling */ - if( bta_sys_cb.sys_hw_module_active != 0 ) - { - /* if there are still some SW modules using the HW, directly notify the caller */ - if( bta_sys_cb.sys_hw_cback[p_sys_hw_msg->hw_module ]!= NULL ) - bta_sys_cb.sys_hw_cback[p_sys_hw_msg->hw_module ]( BTA_SYS_HW_OFF_EVT ); - } - else - { - /* manually update the state of our system */ - bta_sys_cb.state = BTA_SYS_HW_STOPPING; - - tBTA_SYS_HW_MSG *p_msg = - (tBTA_SYS_HW_MSG *)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); - p_msg->hdr.event = BTA_SYS_EVT_DISABLED_EVT; - p_msg->hw_module = p_sys_hw_msg->hw_module; - - bta_sys_sendmsg(p_msg); - } +void bta_sys_hw_api_disable(tBTA_SYS_HW_MSG* p_sys_hw_msg) { + APPL_TRACE_DEBUG("bta_sys_hw_api_disable for %d, active modules: 0x%04X", + p_sys_hw_msg->hw_module, bta_sys_cb.sys_hw_module_active); + + /* make sure the related SW blocks were stopped */ + bta_sys_disable(p_sys_hw_msg->hw_module); + + /* register which module we turn off */ + bta_sys_cb.sys_hw_module_active &= ~((uint32_t)1 << p_sys_hw_msg->hw_module); + + /* if there are still some SW modules using the HW, just provide an answer to + * the calling */ + if (bta_sys_cb.sys_hw_module_active != 0) { + /* if there are still some SW modules using the HW, directly notify the + * caller */ + if (bta_sys_cb.sys_hw_cback[p_sys_hw_msg->hw_module] != NULL) + bta_sys_cb.sys_hw_cback[p_sys_hw_msg->hw_module](BTA_SYS_HW_OFF_EVT); + } else { + /* manually update the state of our system */ + bta_sys_cb.state = BTA_SYS_HW_STOPPING; + + tBTA_SYS_HW_MSG* p_msg = + (tBTA_SYS_HW_MSG*)osi_malloc(sizeof(tBTA_SYS_HW_MSG)); + p_msg->hdr.event = BTA_SYS_EVT_DISABLED_EVT; + p_msg->hw_module = p_sys_hw_msg->hw_module; + + bta_sys_sendmsg(p_msg); + } } /******************************************************************************* @@ -410,13 +396,11 @@ void bta_sys_hw_api_disable(tBTA_SYS_HW_MSG *p_sys_hw_msg) * Returns success or failure * ******************************************************************************/ -void bta_sys_hw_evt_enabled(tBTA_SYS_HW_MSG *p_sys_hw_msg) -{ - APPL_TRACE_EVENT("bta_sys_hw_evt_enabled for %i", p_sys_hw_msg->hw_module); - BTM_DeviceReset( NULL ); +void bta_sys_hw_evt_enabled(tBTA_SYS_HW_MSG* p_sys_hw_msg) { + APPL_TRACE_EVENT("bta_sys_hw_evt_enabled for %i", p_sys_hw_msg->hw_module); + BTM_DeviceReset(NULL); } - /******************************************************************************* * * Function bta_sys_hw_event_disabled @@ -427,45 +411,43 @@ void bta_sys_hw_evt_enabled(tBTA_SYS_HW_MSG *p_sys_hw_msg) * Returns success or failure * ******************************************************************************/ -void bta_sys_hw_evt_disabled(tBTA_SYS_HW_MSG *p_sys_hw_msg) -{ - uint8_t hw_module_index; +void bta_sys_hw_evt_disabled(tBTA_SYS_HW_MSG* p_sys_hw_msg) { + uint8_t hw_module_index; - APPL_TRACE_DEBUG("bta_sys_hw_evt_disabled - module 0x%X", p_sys_hw_msg->hw_module); + APPL_TRACE_DEBUG("bta_sys_hw_evt_disabled - module 0x%X", + p_sys_hw_msg->hw_module); - for (hw_module_index = 0; hw_module_index < BTA_SYS_MAX_HW_MODULES; hw_module_index++) - { - if (bta_sys_cb.sys_hw_cback[hw_module_index] != NULL) - bta_sys_cb.sys_hw_cback[hw_module_index] (BTA_SYS_HW_OFF_EVT); - } + for (hw_module_index = 0; hw_module_index < BTA_SYS_MAX_HW_MODULES; + hw_module_index++) { + if (bta_sys_cb.sys_hw_cback[hw_module_index] != NULL) + bta_sys_cb.sys_hw_cback[hw_module_index](BTA_SYS_HW_OFF_EVT); + } } /******************************************************************************* * * Function bta_sys_hw_event_stack_enabled * - * Description we receive this event once the SW side is ready ( stack, FW download,... ), - * i.e. we can really start using the device. So notify the app. + * Description we receive this event once the SW side is ready ( stack, FW + *download,... ), + * i.e. we can really start using the device. So notify + *the app. * * Returns success or failure * ******************************************************************************/ -void bta_sys_hw_evt_stack_enabled(UNUSED_ATTR tBTA_SYS_HW_MSG *p_sys_hw_msg) -{ - uint8_t hw_module_index; +void bta_sys_hw_evt_stack_enabled(UNUSED_ATTR tBTA_SYS_HW_MSG* p_sys_hw_msg) { + uint8_t hw_module_index; - APPL_TRACE_DEBUG(" bta_sys_hw_evt_stack_enabled!notify the callers"); + APPL_TRACE_DEBUG(" bta_sys_hw_evt_stack_enabled!notify the callers"); - for (hw_module_index = 0; hw_module_index < BTA_SYS_MAX_HW_MODULES; hw_module_index++ ) - { - if (bta_sys_cb.sys_hw_cback[hw_module_index] != NULL) - bta_sys_cb.sys_hw_cback[hw_module_index] (BTA_SYS_HW_ON_EVT); - } + for (hw_module_index = 0; hw_module_index < BTA_SYS_MAX_HW_MODULES; + hw_module_index++) { + if (bta_sys_cb.sys_hw_cback[hw_module_index] != NULL) + bta_sys_cb.sys_hw_cback[hw_module_index](BTA_SYS_HW_ON_EVT); + } } - - - /******************************************************************************* * * Function bta_sys_event @@ -476,31 +458,25 @@ void bta_sys_hw_evt_stack_enabled(UNUSED_ATTR tBTA_SYS_HW_MSG *p_sys_hw_msg) * Returns void * ******************************************************************************/ -void bta_sys_event(BT_HDR *p_msg) -{ - uint8_t id; - bool freebuf = true; - - APPL_TRACE_EVENT("BTA got event 0x%x", p_msg->event); +void bta_sys_event(BT_HDR* p_msg) { + uint8_t id; + bool freebuf = true; - /* get subsystem id from event */ - id = (uint8_t) (p_msg->event >> 8); + APPL_TRACE_EVENT("BTA got event 0x%x", p_msg->event); - /* verify id and call subsystem event handler */ - if ((id < BTA_ID_MAX) && (bta_sys_cb.reg[id] != NULL)) - { - freebuf = (*bta_sys_cb.reg[id]->evt_hdlr)(p_msg); - } - else - { - APPL_TRACE_WARNING("BTA got unregistered event id %d", id); - } + /* get subsystem id from event */ + id = (uint8_t)(p_msg->event >> 8); - if (freebuf) - { - osi_free(p_msg); - } + /* verify id and call subsystem event handler */ + if ((id < BTA_ID_MAX) && (bta_sys_cb.reg[id] != NULL)) { + freebuf = (*bta_sys_cb.reg[id]->evt_hdlr)(p_msg); + } else { + APPL_TRACE_WARNING("BTA got unregistered event id %d", id); + } + if (freebuf) { + osi_free(p_msg); + } } /******************************************************************************* @@ -514,10 +490,9 @@ void bta_sys_event(BT_HDR *p_msg) * Returns void * ******************************************************************************/ -void bta_sys_register(uint8_t id, const tBTA_SYS_REG *p_reg) -{ - bta_sys_cb.reg[id] = (tBTA_SYS_REG *) p_reg; - bta_sys_cb.is_reg[id] = true; +void bta_sys_register(uint8_t id, const tBTA_SYS_REG* p_reg) { + bta_sys_cb.reg[id] = (tBTA_SYS_REG*)p_reg; + bta_sys_cb.is_reg[id] = true; } /******************************************************************************* @@ -531,10 +506,7 @@ void bta_sys_register(uint8_t id, const tBTA_SYS_REG *p_reg) * Returns void * ******************************************************************************/ -void bta_sys_deregister(uint8_t id) -{ - bta_sys_cb.is_reg[id] = false; -} +void bta_sys_deregister(uint8_t id) { bta_sys_cb.is_reg[id] = false; } /******************************************************************************* * @@ -547,10 +519,7 @@ void bta_sys_deregister(uint8_t id) * Returns void * ******************************************************************************/ -bool bta_sys_is_register(uint8_t id) -{ - return bta_sys_cb.is_reg[id]; -} +bool bta_sys_is_register(uint8_t id) { return bta_sys_cb.is_reg[id]; } /******************************************************************************* * @@ -564,14 +533,12 @@ bool bta_sys_is_register(uint8_t id) * Returns void * ******************************************************************************/ -void bta_sys_sendmsg(void *p_msg) -{ - // There is a race condition that occurs if the stack is shut down while - // there is a procedure in progress that can schedule a task via this - // message queue. This causes |btu_bta_msg_queue| to get cleaned up before - // it gets used here; hence we check for NULL before using it. - if (btu_bta_msg_queue) - fixed_queue_enqueue(btu_bta_msg_queue, p_msg); +void bta_sys_sendmsg(void* p_msg) { + // There is a race condition that occurs if the stack is shut down while + // there is a procedure in progress that can schedule a task via this + // message queue. This causes |btu_bta_msg_queue| to get cleaned up before + // it gets used here; hence we check for NULL before using it. + if (btu_bta_msg_queue) fixed_queue_enqueue(btu_bta_msg_queue, p_msg); } /******************************************************************************* @@ -584,15 +551,14 @@ void bta_sys_sendmsg(void *p_msg) * Returns void * ******************************************************************************/ -void bta_sys_start_timer(alarm_t *alarm, period_ms_t interval, uint16_t event, - uint16_t layer_specific) -{ - BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); - - p_buf->event = event; - p_buf->layer_specific = layer_specific; - alarm_set_on_queue(alarm, interval, bta_sys_sendmsg, p_buf, - btu_bta_alarm_queue); +void bta_sys_start_timer(alarm_t* alarm, period_ms_t interval, uint16_t event, + uint16_t layer_specific) { + BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); + + p_buf->event = event; + p_buf->layer_specific = layer_specific; + alarm_set_on_queue(alarm, interval, bta_sys_sendmsg, p_buf, + btu_bta_alarm_queue); } /******************************************************************************* @@ -604,34 +570,30 @@ void bta_sys_start_timer(alarm_t *alarm, period_ms_t interval, uint16_t event, * Returns void * ******************************************************************************/ -void bta_sys_disable(tBTA_SYS_HW_MODULE module) -{ - int bta_id = 0; - int bta_id_max = 0; - - APPL_TRACE_DEBUG("bta_sys_disable: module %i", module); - - switch( module ) - { - case BTA_SYS_HW_BLUETOOTH: - bta_id = BTA_ID_DM; - bta_id_max = BTA_ID_BLUETOOTH_MAX; - break; - default: - APPL_TRACE_WARNING("bta_sys_disable: unkown module"); - return; - } - - for ( ; bta_id <= bta_id_max; bta_id++) - { - if (bta_sys_cb.reg[bta_id] != NULL) - { - if (bta_sys_cb.is_reg[bta_id] == true && bta_sys_cb.reg[bta_id]->disable != NULL) - { - (*bta_sys_cb.reg[bta_id]->disable)(); - } - } +void bta_sys_disable(tBTA_SYS_HW_MODULE module) { + int bta_id = 0; + int bta_id_max = 0; + + APPL_TRACE_DEBUG("bta_sys_disable: module %i", module); + + switch (module) { + case BTA_SYS_HW_BLUETOOTH: + bta_id = BTA_ID_DM; + bta_id_max = BTA_ID_BLUETOOTH_MAX; + break; + default: + APPL_TRACE_WARNING("bta_sys_disable: unkown module"); + return; + } + + for (; bta_id <= bta_id_max; bta_id++) { + if (bta_sys_cb.reg[bta_id] != NULL) { + if (bta_sys_cb.is_reg[bta_id] == true && + bta_sys_cb.reg[bta_id]->disable != NULL) { + (*bta_sys_cb.reg[bta_id]->disable)(); + } } + } } /******************************************************************************* @@ -643,10 +605,7 @@ void bta_sys_disable(tBTA_SYS_HW_MODULE module) * Returns void * ******************************************************************************/ -void bta_sys_set_trace_level(uint8_t level) -{ - appl_trace_level = level; -} +void bta_sys_set_trace_level(uint8_t level) { appl_trace_level = level; } /******************************************************************************* * @@ -657,7 +616,4 @@ void bta_sys_set_trace_level(uint8_t level) * Returns sys_features * ******************************************************************************/ -uint16_t bta_sys_get_sys_features (void) -{ - return bta_sys_cb.sys_features; -} +uint16_t bta_sys_get_sys_features(void) { return bta_sys_cb.sys_features; } diff --git a/system/bta/sys/utl.cc b/system/bta/sys/utl.cc index 1c5528cad96..fc1a12aa9c3 100644 --- a/system/bta/sys/utl.cc +++ b/system/bta/sys/utl.cc @@ -23,9 +23,9 @@ ******************************************************************************/ #include -#include "utl.h" #include "bt_common.h" #include "btm_api.h" +#include "utl.h" /******************************************************************************* * @@ -40,31 +40,27 @@ * Returns Integer value or -1 on error. * ******************************************************************************/ -int16_t utl_str2int(const char *p_s) -{ - int32_t val = 0; +int16_t utl_str2int(const char* p_s) { + int32_t val = 0; - for (;*p_s == ' ' && *p_s != 0; p_s++); + for (; *p_s == ' ' && *p_s != 0; p_s++) + ; - if (*p_s == 0) return -1; + if (*p_s == 0) return -1; - for (;;) - { - if ((*p_s < '0') || (*p_s > '9')) return -1; + for (;;) { + if ((*p_s < '0') || (*p_s > '9')) return -1; - val += (int32_t) (*p_s++ - '0'); + val += (int32_t)(*p_s++ - '0'); - if (val > 32767) return -1; + if (val > 32767) return -1; - if (*p_s == 0) - { - return (int16_t) val; - } - else - { - val *= 10; - } + if (*p_s == 0) { + return (int16_t)val; + } else { + val *= 10; } + } } /******************************************************************************* @@ -80,32 +76,26 @@ int16_t utl_str2int(const char *p_s) * Returns 0 if strings match, nonzero otherwise. * ******************************************************************************/ -int utl_strucmp(const char *p_s, const char *p_t) -{ - char c; +int utl_strucmp(const char* p_s, const char* p_t) { + char c; - while (*p_s && *p_t) - { - c = *p_t++; - if (c >= 'a' && c <= 'z') - { - c -= 0x20; - } - if (*p_s++ != c) - { - return -1; - } - } - /* if p_t hit null first, no match */ - if (*p_t == 0 && *p_s != 0) - { - return 1; + while (*p_s && *p_t) { + c = *p_t++; + if (c >= 'a' && c <= 'z') { + c -= 0x20; } - /* else p_s hit null first, count as match */ - else - { - return 0; + if (*p_s++ != c) { + return -1; } + } + /* if p_t hit null first, no match */ + if (*p_t == 0 && *p_s != 0) { + return 1; + } + /* else p_s hit null first, count as match */ + else { + return 0; + } } /******************************************************************************* @@ -120,32 +110,26 @@ int utl_strucmp(const char *p_s, const char *p_t) * Returns Length of string. * ******************************************************************************/ -uint8_t utl_itoa(uint16_t i, char *p_s) -{ - uint16_t j, k; - char *p = p_s; - bool fill = false; +uint8_t utl_itoa(uint16_t i, char* p_s) { + uint16_t j, k; + char* p = p_s; + bool fill = false; - if (i == 0) - { - /* take care of zero case */ - *p++ = '0'; + if (i == 0) { + /* take care of zero case */ + *p++ = '0'; + } else { + for (j = 10000; j > 0; j /= 10) { + k = i / j; + i %= j; + if (k > 0 || fill) { + *p++ = k + '0'; + fill = true; + } } - else - { - for(j = 10000; j > 0; j /= 10) - { - k = i / j; - i %= j; - if (k > 0 || fill) - { - *p++ = k + '0'; - fill = true; - } - } - } - *p = 0; - return (uint8_t) (p - p_s); + } + *p = 0; + return (uint8_t)(p - p_s); } /******************************************************************************* @@ -158,69 +142,71 @@ uint8_t utl_itoa(uint16_t i, char *p_s) * p_cod - Pointer to the device class to set to * * cmd - the fields of the device class to update. - * BTA_UTL_SET_COD_MAJOR_MINOR, - overwrite major, minor class - * BTA_UTL_SET_COD_SERVICE_CLASS - set the bits in the input - * BTA_UTL_CLR_COD_SERVICE_CLASS - clear the bits in the input - * BTA_UTL_SET_COD_ALL - overwrite major, minor, set the bits in service class - * BTA_UTL_INIT_COD - overwrite major, minor, and service class + * BTA_UTL_SET_COD_MAJOR_MINOR, - overwrite major, + *minor class + * BTA_UTL_SET_COD_SERVICE_CLASS - set the bits in + *the input + * BTA_UTL_CLR_COD_SERVICE_CLASS - clear the bits in + *the input + * BTA_UTL_SET_COD_ALL - overwrite major, minor, set + *the bits in service class + * BTA_UTL_INIT_COD - overwrite major, minor, and + *service class * * Returns true if successful, Otherwise false * ******************************************************************************/ -bool utl_set_device_class(tBTA_UTL_COD *p_cod, uint8_t cmd) -{ - uint8_t *dev; - uint16_t service; - uint8_t minor, major; - DEV_CLASS dev_class; +bool utl_set_device_class(tBTA_UTL_COD* p_cod, uint8_t cmd) { + uint8_t* dev; + uint16_t service; + uint8_t minor, major; + DEV_CLASS dev_class; - dev = BTM_ReadDeviceClass(); - BTM_COD_SERVICE_CLASS( service, dev ); - BTM_COD_MINOR_CLASS(minor, dev ); - BTM_COD_MAJOR_CLASS(major, dev ); + dev = BTM_ReadDeviceClass(); + BTM_COD_SERVICE_CLASS(service, dev); + BTM_COD_MINOR_CLASS(minor, dev); + BTM_COD_MAJOR_CLASS(major, dev); - switch(cmd) - { + switch (cmd) { case BTA_UTL_SET_COD_MAJOR_MINOR: - minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK; - major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK; - break; + minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK; + major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK; + break; case BTA_UTL_SET_COD_SERVICE_CLASS: - /* clear out the bits that is not SERVICE_CLASS bits */ - p_cod->service &= BTM_COD_SERVICE_CLASS_MASK; - service = service | p_cod->service; - break; + /* clear out the bits that is not SERVICE_CLASS bits */ + p_cod->service &= BTM_COD_SERVICE_CLASS_MASK; + service = service | p_cod->service; + break; case BTA_UTL_CLR_COD_SERVICE_CLASS: - p_cod->service &= BTM_COD_SERVICE_CLASS_MASK; - service = service & (~p_cod->service); - break; + p_cod->service &= BTM_COD_SERVICE_CLASS_MASK; + service = service & (~p_cod->service); + break; case BTA_UTL_SET_COD_ALL: - minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK; - major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK; - p_cod->service &= BTM_COD_SERVICE_CLASS_MASK; - service = service | p_cod->service; - break; + minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK; + major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK; + p_cod->service &= BTM_COD_SERVICE_CLASS_MASK; + service = service | p_cod->service; + break; case BTA_UTL_INIT_COD: - minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK; - major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK; - service = p_cod->service & BTM_COD_SERVICE_CLASS_MASK; - break; + minor = p_cod->minor & BTM_COD_MINOR_CLASS_MASK; + major = p_cod->major & BTM_COD_MAJOR_CLASS_MASK; + service = p_cod->service & BTM_COD_SERVICE_CLASS_MASK; + break; default: - return false; - } + return false; + } - /* convert the fields into the device class type */ - FIELDS_TO_COD(dev_class, minor, major, service); + /* convert the fields into the device class type */ + FIELDS_TO_COD(dev_class, minor, major, service); - if (BTM_SetDeviceClass(dev_class) == BTM_SUCCESS) - return true; + if (BTM_SetDeviceClass(dev_class) == BTM_SUCCESS) return true; - return false; + return false; } /******************************************************************************* @@ -234,17 +220,14 @@ bool utl_set_device_class(tBTA_UTL_COD *p_cod, uint8_t cmd) * Returns true if successful, Otherwise false * ******************************************************************************/ -bool utl_isintstr(const char *p_s) -{ - uint16_t i = 0; +bool utl_isintstr(const char* p_s) { + uint16_t i = 0; - for(i=0; p_s[i] != 0; i++) - { - if(((p_s[i] < '0') || (p_s[i] > '9')) && (p_s[i] != ';')) - return false; - } + for (i = 0; p_s[i] != 0; i++) { + if (((p_s[i] < '0') || (p_s[i] > '9')) && (p_s[i] != ';')) return false; + } - return true; + return true; } /******************************************************************************* @@ -257,13 +240,10 @@ bool utl_isintstr(const char *p_s) * Returns true if successful, Otherwise false * ******************************************************************************/ -bool utl_isdialchar(const char d) -{ - return (((d >= '0') && (d <= '9')) - || (d == '*') || (d == '+') || (d == '#') || (d == ';') - || ((d >= 'A') && (d <= 'C')) - || ((d == 'p') || (d == 'P') - || (d == 'w') || (d == 'W'))); +bool utl_isdialchar(const char d) { + return (((d >= '0') && (d <= '9')) || (d == '*') || (d == '+') || + (d == '#') || (d == ';') || ((d >= 'A') && (d <= 'C')) || + ((d == 'p') || (d == 'P') || (d == 'w') || (d == 'W'))); } /******************************************************************************* @@ -277,15 +257,10 @@ bool utl_isdialchar(const char d) * Returns true if successful, Otherwise false * ******************************************************************************/ -bool utl_isdialstr(const char *p_s) -{ - for (uint16_t i = 0; p_s[i] != 0; i++) { - // include chars not in spec that work sent by some headsets. - if(!(utl_isdialchar(p_s[i]) - || (p_s[i] == '-'))) - return false; - } - return true; +bool utl_isdialstr(const char* p_s) { + for (uint16_t i = 0; p_s[i] != 0; i++) { + // include chars not in spec that work sent by some headsets. + if (!(utl_isdialchar(p_s[i]) || (p_s[i] == '-'))) return false; + } + return true; } - - diff --git a/system/bta/test/bta_closure_test.cc b/system/bta/test/bta_closure_test.cc index dbdc5e7575d..75473c847b5 100644 --- a/system/bta/test/bta_closure_test.cc +++ b/system/bta/test/bta_closure_test.cc @@ -30,29 +30,29 @@ namespace { int test_counter = 0; int msg_send_counter = 0; -tBTA_SYS_EVT_HDLR *closure_handler = NULL; -void *msg = NULL; +tBTA_SYS_EVT_HDLR* closure_handler = NULL; +void* msg = NULL; void test_plus_one_task() { test_counter++; } void test_plus_two_task() { test_counter += 2; } -void fake_bta_sys_sendmsg(void *p_msg) { +void fake_bta_sys_sendmsg(void* p_msg) { msg_send_counter++; msg = p_msg; } -void fake_bta_sys_register(uint8_t id, const tBTA_SYS_REG *p_reg) { +void fake_bta_sys_register(uint8_t id, const tBTA_SYS_REG* p_reg) { closure_handler = p_reg->evt_hdlr; } -bool fake_bta_sys_sendmsg_execute() { return closure_handler((BT_HDR *)msg); } +bool fake_bta_sys_sendmsg_execute() { return closure_handler((BT_HDR*)msg); } } // namespace // TODO(jpawlowski): there is some weird dependency issue in tests, and the // tests here fail to compile without this definition. -extern "C" void LogMsg(uint32_t trace_set_mask, const char *fmt_str, ...) {} +extern "C" void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {} TEST(ClosureTest, test_post_task) { msg_send_counter = 0; -- GitLab