Loading system/bta/hl/bta_hl_act.c +5 −2 Original line number Diff line number Diff line Loading @@ -1508,6 +1508,7 @@ void bta_hl_dch_mca_create_ind(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx, 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 Loading Loading @@ -1783,6 +1784,7 @@ static void bta_hl_sdp_cback(UINT8 sdp_oper, UINT8 app_idx, UINT8 mcl_idx, if (bta_hl_fill_sup_feature_list (p_attr, &sup_feature)) { p_hdp_rec->num_mdeps = (UINT8) sup_feature.num_elems; APPL_TRACE_WARNING1("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; Loading Loading @@ -2261,6 +2263,7 @@ void bta_hl_cch_sdp_init(UINT8 app_idx, UINT8 mcl_idx, tBTA_HL_DATA *p_data) #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) Loading Loading @@ -2383,7 +2386,7 @@ void bta_hl_cch_close_cmpl(UINT8 app_idx, UINT8 mcl_idx, tBTA_HL_DATA *p_data) switch (p_mcb->cch_oper) { case BTA_HL_CCH_OP_LOCAL_OPEN: bta_hl_build_cch_open_cfm(&evt_data, p_acb->app_handle, 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); Loading Loading @@ -2531,7 +2534,7 @@ void bta_hl_cch_mca_connect(UINT8 app_idx, UINT8 mcl_idx, tBTA_HL_DATA *p_data) switch (p_mcb->cch_oper) { case BTA_HL_CCH_OP_LOCAL_OPEN: bta_hl_build_cch_open_cfm(&evt_data, p_acb->app_handle, 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); Loading system/bta/hl/bta_hl_api.c +80 −3 Original line number Diff line number Diff line Loading @@ -96,6 +96,80 @@ void BTA_HlDisable(void) } } /******************************************************************************* ** ** Function BTA_HlUpdate ** ** Description Register an HDP application ** ** Parameters app_id - Application ID ** p_reg_param - non-platform related parameters for the ** HDP application ** p_cback - HL event callback fucntion ** ** Returns void ** *******************************************************************************/ void BTA_HlUpdate(UINT8 app_id, tBTA_HL_REG_PARAM *p_reg_param, BOOLEAN is_register, tBTA_HL_CBACK *p_cback) { tBTA_HL_API_UPDATE *p_buf; APPL_TRACE_DEBUG0("BTA_HlUpdate"); if (is_register) { if ((p_buf = (tBTA_HL_API_UPDATE *)GKI_getbuf((UINT16)sizeof(tBTA_HL_API_UPDATE))) != NULL) { p_buf->hdr.event = BTA_HL_API_UPDATE_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; p_buf->is_register = is_register; if (p_reg_param->p_srv_name) { BCM_STRNCPY_S(p_buf->srv_name, sizeof(p_buf->srv_name), p_reg_param->p_srv_name, BTA_SERVICE_NAME_LEN); p_buf->srv_name[BTA_SERVICE_NAME_LEN] = '\0'; } else p_buf->srv_name[0]= '\0'; if (p_reg_param->p_srv_desp) { BCM_STRNCPY_S(p_buf->srv_desp, sizeof(p_buf->srv_desp), p_reg_param->p_srv_desp, BTA_SERVICE_DESP_LEN); p_buf->srv_desp[BTA_SERVICE_DESP_LEN]= '\0'; } else p_buf->srv_desp[0]= '\0'; if (p_reg_param->p_provider_name) { BCM_STRNCPY_S(p_buf->provider_name, sizeof(p_buf->provider_name), p_reg_param->p_provider_name, BTA_PROVIDER_NAME_LEN); p_buf->provider_name[BTA_PROVIDER_NAME_LEN]= '\0'; } else p_buf->provider_name[0]= '\0'; bta_sys_sendmsg(p_buf); } } else { if ((p_buf = (tBTA_HL_API_UPDATE *)GKI_getbuf((UINT16)sizeof(tBTA_HL_API_UPDATE))) != NULL) { p_buf->hdr.event = BTA_HL_API_UPDATE_EVT; p_buf->app_id = app_id; p_buf->is_register = is_register; bta_sys_sendmsg(p_buf); } } } /******************************************************************************* ** ** Function BTA_HlRegister Loading Loading @@ -164,13 +238,14 @@ void BTA_HlRegister(UINT8 app_id, ** Returns void ** *******************************************************************************/ void BTA_HlDeregister(tBTA_HL_APP_HANDLE app_handle) void BTA_HlDeregister(UINT8 app_id,tBTA_HL_APP_HANDLE app_handle) { tBTA_HL_API_DEREGISTER *p_buf; if ((p_buf = (tBTA_HL_API_DEREGISTER *)GKI_getbuf((UINT16)(sizeof(tBTA_HL_API_DEREGISTER)))) != NULL) { 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); } Loading @@ -191,7 +266,7 @@ void BTA_HlDeregister(tBTA_HL_APP_HANDLE app_handle) ** 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(tBTA_HL_APP_HANDLE app_handle, void BTA_HlCchOpen(UINT8 app_id, tBTA_HL_APP_HANDLE app_handle, tBTA_HL_CCH_OPEN_PARAM *p_open_param) { tBTA_HL_API_CCH_OPEN *p_buf; Loading @@ -199,6 +274,7 @@ void BTA_HlCchOpen(tBTA_HL_APP_HANDLE app_handle, if ((p_buf = (tBTA_HL_API_CCH_OPEN *)GKI_getbuf((UINT16)(sizeof(tBTA_HL_API_CCH_OPEN)))) != NULL) { 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); Loading Loading @@ -434,7 +510,7 @@ void BTA_HlDchEchoTest( tBTA_HL_MCL_HANDLE mcl_handle, ** Returns void ** *******************************************************************************/ void BTA_HlSdpQuery(tBTA_HL_APP_HANDLE app_handle, void BTA_HlSdpQuery(UINT8 app_id,tBTA_HL_APP_HANDLE app_handle, BD_ADDR bd_addr) { tBTA_HL_API_SDP_QUERY *p_buf; Loading @@ -442,6 +518,7 @@ void BTA_HlSdpQuery(tBTA_HL_APP_HANDLE app_handle, if ((p_buf = (tBTA_HL_API_SDP_QUERY *)GKI_getbuf((UINT16)(sizeof(tBTA_HL_API_SDP_QUERY)))) != NULL) { 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); Loading system/bta/hl/bta_hl_int.h +26 −2 Original line number Diff line number Diff line Loading @@ -188,6 +188,7 @@ enum /* 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, Loading Loading @@ -237,6 +238,20 @@ typedef struct tBTA_HL_CTRL_CBACK *p_cback; /* pointer to control callback function */ } tBTA_HL_API_ENABLE; typedef struct { BT_HDR hdr; UINT8 app_id; BOOLEAN 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; Loading @@ -252,12 +267,15 @@ typedef struct typedef struct { BT_HDR hdr; UINT8 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 app_id; tBTA_HL_APP_HANDLE app_handle; UINT16 ctrl_psm; BD_ADDR bd_addr; /* Address of peer device */ Loading Loading @@ -372,6 +390,7 @@ typedef struct { BT_HDR hdr; tBTA_HL_APP_HANDLE app_handle; UINT8 app_id; BD_ADDR bd_addr; /* Address of peer device */ } tBTA_HL_API_SDP_QUERY; Loading Loading @@ -404,6 +423,7 @@ 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; Loading Loading @@ -492,6 +512,7 @@ typedef struct BOOLEAN echo_test; UINT8 echo_mdl_idx; UINT8 cch_close_dch_oper; UINT8 app_id; }tBTA_HL_MCL_CB; typedef struct Loading Loading @@ -589,7 +610,7 @@ extern "C" /* sdp */ extern BOOLEAN 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 app_id); extern tBTA_HL_STATUS bta_hl_sdp_register (UINT8 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); Loading Loading @@ -739,7 +760,7 @@ extern "C" tBTA_HL_MDL_ID mdl_id, UINT8 *p_mdl_cfg_idx); extern BOOLEAN bta_hl_get_cur_time(UINT8 app_idx, UINT8 *p_cur_time); extern void bta_hl_sort_cfg_time_idx(UINT8 app_idx, UINT8 *a, UINT8 n); extern void bta_hl_compact_mdl_cfg_time(UINT8 app_idx); extern void bta_hl_compact_mdl_cfg_time(UINT8 app_idx, UINT8 mdep_id); extern BOOLEAN bta_hl_is_mdl_exsit_in_mcl(UINT8 app_idx, BD_ADDR bd_addr, tBTA_HL_MDL_ID mdl_id); extern BOOLEAN bta_hl_delete_mdl_cfg(UINT8 app_idx, BD_ADDR bd_addr, Loading @@ -766,6 +787,7 @@ extern "C" UINT8 *p_mdl_idx); extern BOOLEAN bta_hl_is_a_duplicate_id(UINT8 app_id); extern BOOLEAN bta_hl_find_avail_app_idx(UINT8 *p_idx); extern tBTA_HL_STATUS bta_hl_app_update(UINT8 app_id, BOOLEAN is_register); extern tBTA_HL_STATUS bta_hl_app_registration(UINT8 app_idx); extern void bta_hl_discard_data(UINT16 event, tBTA_HL_DATA *p_data); extern void bta_hl_save_mdl_cfg(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx ); Loading Loading @@ -805,6 +827,7 @@ extern "C" 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 app_id, tBTA_HL_APP_HANDLE app_handle, tBTA_HL_MCL_HANDLE mcl_handle, BD_ADDR bd_addr, Loading Loading @@ -843,6 +866,7 @@ extern "C" tBTA_HL_MCL_HANDLE mcl_handle, tBTA_HL_STATUS status ); extern void bta_hl_build_sdp_query_cfm(tBTA_HL *p_evt_data, UINT8 app_id, tBTA_HL_APP_HANDLE app_handle, BD_ADDR bd_addr, tBTA_HL_SDP *p_sdp, Loading system/bta/hl/bta_hl_main.c +109 −3 Original line number Diff line number Diff line Loading @@ -590,6 +590,85 @@ static void bta_hl_api_disable(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) } /******************************************************************************* ** ** Function bta_hl_api_update ** ** 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_DEBUG0("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_DEBUG0("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_DEBUG1("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); } } } /******************************************************************************* ** ** Function bta_hl_api_register Loading Loading @@ -746,7 +825,24 @@ static void bta_hl_api_cch_open(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) else { /* Only one MCL per BD_ADDR */ status = BTA_HL_STATUS_FAIL; status = BTA_HL_STATUS_DUPLICATE_CCH_OPEN; APPL_TRACE_DEBUG1("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_ERROR0("bta_hl_api_cch_open Null Callback"); } return; } } else Loading @@ -770,7 +866,8 @@ static void bta_hl_api_cch_open(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) 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_handle, 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); Loading Loading @@ -874,6 +971,7 @@ static void bta_hl_api_dch_open(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); APPL_TRACE_DEBUG4("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)) Loading Loading @@ -1370,6 +1468,8 @@ static void bta_hl_api_sdp_query(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) 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_DEBUG3("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 Loading @@ -1380,6 +1480,7 @@ static void bta_hl_api_sdp_query(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) 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; Loading Loading @@ -1419,6 +1520,7 @@ static void bta_hl_api_sdp_query(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) 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, Loading Loading @@ -1490,7 +1592,8 @@ static void bta_hl_sdp_query_results(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) } #endif bta_hl_build_sdp_query_cfm(&evt_data,p_acb->app_handle, APPL_TRACE_DEBUG3("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 ); Loading Loading @@ -1861,6 +1964,9 @@ BOOLEAN bta_hl_hdl_event(BT_HDR *p_msg) 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; Loading Loading
system/bta/hl/bta_hl_act.c +5 −2 Original line number Diff line number Diff line Loading @@ -1508,6 +1508,7 @@ void bta_hl_dch_mca_create_ind(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx, 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 Loading Loading @@ -1783,6 +1784,7 @@ static void bta_hl_sdp_cback(UINT8 sdp_oper, UINT8 app_idx, UINT8 mcl_idx, if (bta_hl_fill_sup_feature_list (p_attr, &sup_feature)) { p_hdp_rec->num_mdeps = (UINT8) sup_feature.num_elems; APPL_TRACE_WARNING1("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; Loading Loading @@ -2261,6 +2263,7 @@ void bta_hl_cch_sdp_init(UINT8 app_idx, UINT8 mcl_idx, tBTA_HL_DATA *p_data) #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) Loading Loading @@ -2383,7 +2386,7 @@ void bta_hl_cch_close_cmpl(UINT8 app_idx, UINT8 mcl_idx, tBTA_HL_DATA *p_data) switch (p_mcb->cch_oper) { case BTA_HL_CCH_OP_LOCAL_OPEN: bta_hl_build_cch_open_cfm(&evt_data, p_acb->app_handle, 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); Loading Loading @@ -2531,7 +2534,7 @@ void bta_hl_cch_mca_connect(UINT8 app_idx, UINT8 mcl_idx, tBTA_HL_DATA *p_data) switch (p_mcb->cch_oper) { case BTA_HL_CCH_OP_LOCAL_OPEN: bta_hl_build_cch_open_cfm(&evt_data, p_acb->app_handle, 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); Loading
system/bta/hl/bta_hl_api.c +80 −3 Original line number Diff line number Diff line Loading @@ -96,6 +96,80 @@ void BTA_HlDisable(void) } } /******************************************************************************* ** ** Function BTA_HlUpdate ** ** Description Register an HDP application ** ** Parameters app_id - Application ID ** p_reg_param - non-platform related parameters for the ** HDP application ** p_cback - HL event callback fucntion ** ** Returns void ** *******************************************************************************/ void BTA_HlUpdate(UINT8 app_id, tBTA_HL_REG_PARAM *p_reg_param, BOOLEAN is_register, tBTA_HL_CBACK *p_cback) { tBTA_HL_API_UPDATE *p_buf; APPL_TRACE_DEBUG0("BTA_HlUpdate"); if (is_register) { if ((p_buf = (tBTA_HL_API_UPDATE *)GKI_getbuf((UINT16)sizeof(tBTA_HL_API_UPDATE))) != NULL) { p_buf->hdr.event = BTA_HL_API_UPDATE_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; p_buf->is_register = is_register; if (p_reg_param->p_srv_name) { BCM_STRNCPY_S(p_buf->srv_name, sizeof(p_buf->srv_name), p_reg_param->p_srv_name, BTA_SERVICE_NAME_LEN); p_buf->srv_name[BTA_SERVICE_NAME_LEN] = '\0'; } else p_buf->srv_name[0]= '\0'; if (p_reg_param->p_srv_desp) { BCM_STRNCPY_S(p_buf->srv_desp, sizeof(p_buf->srv_desp), p_reg_param->p_srv_desp, BTA_SERVICE_DESP_LEN); p_buf->srv_desp[BTA_SERVICE_DESP_LEN]= '\0'; } else p_buf->srv_desp[0]= '\0'; if (p_reg_param->p_provider_name) { BCM_STRNCPY_S(p_buf->provider_name, sizeof(p_buf->provider_name), p_reg_param->p_provider_name, BTA_PROVIDER_NAME_LEN); p_buf->provider_name[BTA_PROVIDER_NAME_LEN]= '\0'; } else p_buf->provider_name[0]= '\0'; bta_sys_sendmsg(p_buf); } } else { if ((p_buf = (tBTA_HL_API_UPDATE *)GKI_getbuf((UINT16)sizeof(tBTA_HL_API_UPDATE))) != NULL) { p_buf->hdr.event = BTA_HL_API_UPDATE_EVT; p_buf->app_id = app_id; p_buf->is_register = is_register; bta_sys_sendmsg(p_buf); } } } /******************************************************************************* ** ** Function BTA_HlRegister Loading Loading @@ -164,13 +238,14 @@ void BTA_HlRegister(UINT8 app_id, ** Returns void ** *******************************************************************************/ void BTA_HlDeregister(tBTA_HL_APP_HANDLE app_handle) void BTA_HlDeregister(UINT8 app_id,tBTA_HL_APP_HANDLE app_handle) { tBTA_HL_API_DEREGISTER *p_buf; if ((p_buf = (tBTA_HL_API_DEREGISTER *)GKI_getbuf((UINT16)(sizeof(tBTA_HL_API_DEREGISTER)))) != NULL) { 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); } Loading @@ -191,7 +266,7 @@ void BTA_HlDeregister(tBTA_HL_APP_HANDLE app_handle) ** 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(tBTA_HL_APP_HANDLE app_handle, void BTA_HlCchOpen(UINT8 app_id, tBTA_HL_APP_HANDLE app_handle, tBTA_HL_CCH_OPEN_PARAM *p_open_param) { tBTA_HL_API_CCH_OPEN *p_buf; Loading @@ -199,6 +274,7 @@ void BTA_HlCchOpen(tBTA_HL_APP_HANDLE app_handle, if ((p_buf = (tBTA_HL_API_CCH_OPEN *)GKI_getbuf((UINT16)(sizeof(tBTA_HL_API_CCH_OPEN)))) != NULL) { 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); Loading Loading @@ -434,7 +510,7 @@ void BTA_HlDchEchoTest( tBTA_HL_MCL_HANDLE mcl_handle, ** Returns void ** *******************************************************************************/ void BTA_HlSdpQuery(tBTA_HL_APP_HANDLE app_handle, void BTA_HlSdpQuery(UINT8 app_id,tBTA_HL_APP_HANDLE app_handle, BD_ADDR bd_addr) { tBTA_HL_API_SDP_QUERY *p_buf; Loading @@ -442,6 +518,7 @@ void BTA_HlSdpQuery(tBTA_HL_APP_HANDLE app_handle, if ((p_buf = (tBTA_HL_API_SDP_QUERY *)GKI_getbuf((UINT16)(sizeof(tBTA_HL_API_SDP_QUERY)))) != NULL) { 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); Loading
system/bta/hl/bta_hl_int.h +26 −2 Original line number Diff line number Diff line Loading @@ -188,6 +188,7 @@ enum /* 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, Loading Loading @@ -237,6 +238,20 @@ typedef struct tBTA_HL_CTRL_CBACK *p_cback; /* pointer to control callback function */ } tBTA_HL_API_ENABLE; typedef struct { BT_HDR hdr; UINT8 app_id; BOOLEAN 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; Loading @@ -252,12 +267,15 @@ typedef struct typedef struct { BT_HDR hdr; UINT8 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 app_id; tBTA_HL_APP_HANDLE app_handle; UINT16 ctrl_psm; BD_ADDR bd_addr; /* Address of peer device */ Loading Loading @@ -372,6 +390,7 @@ typedef struct { BT_HDR hdr; tBTA_HL_APP_HANDLE app_handle; UINT8 app_id; BD_ADDR bd_addr; /* Address of peer device */ } tBTA_HL_API_SDP_QUERY; Loading Loading @@ -404,6 +423,7 @@ 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; Loading Loading @@ -492,6 +512,7 @@ typedef struct BOOLEAN echo_test; UINT8 echo_mdl_idx; UINT8 cch_close_dch_oper; UINT8 app_id; }tBTA_HL_MCL_CB; typedef struct Loading Loading @@ -589,7 +610,7 @@ extern "C" /* sdp */ extern BOOLEAN 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 app_id); extern tBTA_HL_STATUS bta_hl_sdp_register (UINT8 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); Loading Loading @@ -739,7 +760,7 @@ extern "C" tBTA_HL_MDL_ID mdl_id, UINT8 *p_mdl_cfg_idx); extern BOOLEAN bta_hl_get_cur_time(UINT8 app_idx, UINT8 *p_cur_time); extern void bta_hl_sort_cfg_time_idx(UINT8 app_idx, UINT8 *a, UINT8 n); extern void bta_hl_compact_mdl_cfg_time(UINT8 app_idx); extern void bta_hl_compact_mdl_cfg_time(UINT8 app_idx, UINT8 mdep_id); extern BOOLEAN bta_hl_is_mdl_exsit_in_mcl(UINT8 app_idx, BD_ADDR bd_addr, tBTA_HL_MDL_ID mdl_id); extern BOOLEAN bta_hl_delete_mdl_cfg(UINT8 app_idx, BD_ADDR bd_addr, Loading @@ -766,6 +787,7 @@ extern "C" UINT8 *p_mdl_idx); extern BOOLEAN bta_hl_is_a_duplicate_id(UINT8 app_id); extern BOOLEAN bta_hl_find_avail_app_idx(UINT8 *p_idx); extern tBTA_HL_STATUS bta_hl_app_update(UINT8 app_id, BOOLEAN is_register); extern tBTA_HL_STATUS bta_hl_app_registration(UINT8 app_idx); extern void bta_hl_discard_data(UINT16 event, tBTA_HL_DATA *p_data); extern void bta_hl_save_mdl_cfg(UINT8 app_idx, UINT8 mcl_idx, UINT8 mdl_idx ); Loading Loading @@ -805,6 +827,7 @@ extern "C" 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 app_id, tBTA_HL_APP_HANDLE app_handle, tBTA_HL_MCL_HANDLE mcl_handle, BD_ADDR bd_addr, Loading Loading @@ -843,6 +866,7 @@ extern "C" tBTA_HL_MCL_HANDLE mcl_handle, tBTA_HL_STATUS status ); extern void bta_hl_build_sdp_query_cfm(tBTA_HL *p_evt_data, UINT8 app_id, tBTA_HL_APP_HANDLE app_handle, BD_ADDR bd_addr, tBTA_HL_SDP *p_sdp, Loading
system/bta/hl/bta_hl_main.c +109 −3 Original line number Diff line number Diff line Loading @@ -590,6 +590,85 @@ static void bta_hl_api_disable(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) } /******************************************************************************* ** ** Function bta_hl_api_update ** ** 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_DEBUG0("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_DEBUG0("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_DEBUG1("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); } } } /******************************************************************************* ** ** Function bta_hl_api_register Loading Loading @@ -746,7 +825,24 @@ static void bta_hl_api_cch_open(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) else { /* Only one MCL per BD_ADDR */ status = BTA_HL_STATUS_FAIL; status = BTA_HL_STATUS_DUPLICATE_CCH_OPEN; APPL_TRACE_DEBUG1("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_ERROR0("bta_hl_api_cch_open Null Callback"); } return; } } else Loading @@ -770,7 +866,8 @@ static void bta_hl_api_cch_open(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) 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_handle, 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); Loading Loading @@ -874,6 +971,7 @@ static void bta_hl_api_dch_open(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) p_acb = BTA_HL_GET_APP_CB_PTR(app_idx); p_mcb = BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx); APPL_TRACE_DEBUG4("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)) Loading Loading @@ -1370,6 +1468,8 @@ static void bta_hl_api_sdp_query(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) 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_DEBUG3("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 Loading @@ -1380,6 +1480,7 @@ static void bta_hl_api_sdp_query(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) 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; Loading Loading @@ -1419,6 +1520,7 @@ static void bta_hl_api_sdp_query(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) 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, Loading Loading @@ -1490,7 +1592,8 @@ static void bta_hl_sdp_query_results(tBTA_HL_CB *p_cb, tBTA_HL_DATA *p_data) } #endif bta_hl_build_sdp_query_cfm(&evt_data,p_acb->app_handle, APPL_TRACE_DEBUG3("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 ); Loading Loading @@ -1861,6 +1964,9 @@ BOOLEAN bta_hl_hdl_event(BT_HDR *p_msg) 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; Loading