Loading system/stack/btm/btm_ble_gap.c +37 −13 Original line number Diff line number Diff line Loading @@ -1446,12 +1446,47 @@ void btm_ble_select_adv_interval(tBTM_BLE_INQ_CB *p_cb, UINT8 evt_type, UINT16 * } return; } /******************************************************************************* ** ** Function btm_ble_update_dmt_flag_bits ** ** Description Obtain updated adv flag value based on connect and discoverability mode. ** Also, setup DMT support value in the flag based on whether the controller ** supports both LE and BR/EDR. ** ** Parameters: flag_value (Input / Output) - flag value ** connect_mode (Input) - Connect mode value ** disc_mode (Input) - discoverability mode ** ** Returns void ** *******************************************************************************/ void btm_ble_update_dmt_flag_bits(UINT8 *adv_flag_value, const UINT16 connect_mode, const UINT16 disc_mode) { /* BR/EDR non-discoverable , non-connectable */ if ((disc_mode & BTM_DISCOVERABLE_MASK) == 0 && (connect_mode & BTM_CONNECTABLE_MASK) == 0) *adv_flag_value |= BTM_BLE_BREDR_NOT_SPT; else *adv_flag_value &= ~BTM_BLE_BREDR_NOT_SPT; /* if local controller support, mark both controller and host support in flag */ if (controller_get_interface()->supports_simultaneous_le_bredr()) *adv_flag_value |= (BTM_BLE_DMT_CONTROLLER_SPT|BTM_BLE_DMT_HOST_SPT); else *adv_flag_value &= ~(BTM_BLE_DMT_CONTROLLER_SPT|BTM_BLE_DMT_HOST_SPT); } /******************************************************************************* ** ** Function btm_ble_set_adv_flag ** ** Description Set adv flag in adv data. ** ** Parameters: connect_mode (Input)- Connect mode value ** disc_mode (Input) - discoverability mode ** ** Returns void ** *******************************************************************************/ Loading @@ -1463,18 +1498,7 @@ void btm_ble_set_adv_flag(UINT16 connect_mode, UINT16 disc_mode) if (p_adv_data->p_flags != NULL) flag = old_flag = *(p_adv_data->p_flags); /* BR/EDR non-discoverable , non-connectable */ if ((disc_mode & BTM_DISCOVERABLE_MASK) == 0 && (connect_mode & BTM_CONNECTABLE_MASK) == 0) flag |= BTM_BLE_BREDR_NOT_SPT; else flag &= ~BTM_BLE_BREDR_NOT_SPT; /* if local controller support, mark both controller and host support in flag */ if (controller_get_interface()->supports_simultaneous_le_bredr()) flag |= (BTM_BLE_DMT_CONTROLLER_SPT|BTM_BLE_DMT_HOST_SPT); else flag &= ~(BTM_BLE_DMT_CONTROLLER_SPT|BTM_BLE_DMT_HOST_SPT); btm_ble_update_dmt_flag_bits (&flag, connect_mode, disc_mode); LOG_DEBUG("disc_mode %04x", disc_mode); /* update discoverable flag */ Loading system/stack/btm/btm_ble_multi_adv.c +17 −3 Original line number Diff line number Diff line Loading @@ -30,17 +30,29 @@ #include "hcidefs.h" #include "btm_ble_api.h" /************************************************************************************ ** Constants & Macros ************************************************************************************/ /* length of each multi adv sub command */ #define BTM_BLE_MULTI_ADV_ENB_LEN 3 #define BTM_BLE_MULTI_ADV_SET_PARAM_LEN 24 #define BTM_BLE_MULTI_ADV_WRITE_DATA_LEN (BTM_BLE_AD_DATA_LEN + 3) #define BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR_LEN 8 #define BTM_BLE_MULTI_ADV_CB_EVT_MASK 0xF0 #define BTM_BLE_MULTI_ADV_SUBCODE_MASK 0x0F /************************************************************************************ ** Static variables ************************************************************************************/ tBTM_BLE_MULTI_ADV_CB btm_multi_adv_cb; tBTM_BLE_MULTI_ADV_INST_IDX_Q btm_multi_adv_idx_q; #define BTM_BLE_MULTI_ADV_CB_EVT_MASK 0xF0 #define BTM_BLE_MULTI_ADV_SUBCODE_MASK 0x0F /************************************************************************************ ** Externs ************************************************************************************/ extern void btm_ble_update_dmt_flag_bits(UINT8 *flag_value, const UINT16 connect_mode, const UINT16 disc_mode); /******************************************************************************* ** Loading Loading @@ -643,7 +655,7 @@ tBTM_STATUS BTM_BleUpdateAdvInstParam (UINT8 inst_id, tBTM_BLE_ADV_PARAMS *p_par ** adv data or scan response data. ** ** Parameters inst_id: adv instance ID ** is_scan_rsp: is this scacn response, if no set as adv data. ** is_scan_rsp: is this scan response. if no, set as adv data. ** data_mask: adv data mask. ** p_data: pointer to the adv data structure. ** Loading @@ -669,6 +681,8 @@ tBTM_STATUS BTM_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp, return BTM_ERR_PROCESSING; } btm_ble_update_dmt_flag_bits(&p_data->flag, btm_cb.btm_inq_vars.connectable_mode, btm_cb.btm_inq_vars.discoverable_mode); BTM_TRACE_EVENT("BTM_BleCfgAdvInstData called with inst_id:%d", inst_id); if (inst_id > BTM_BLE_MULTI_ADV_MAX || inst_id == BTM_BLE_MULTI_ADV_DEFAULT_STD) Loading Loading
system/stack/btm/btm_ble_gap.c +37 −13 Original line number Diff line number Diff line Loading @@ -1446,12 +1446,47 @@ void btm_ble_select_adv_interval(tBTM_BLE_INQ_CB *p_cb, UINT8 evt_type, UINT16 * } return; } /******************************************************************************* ** ** Function btm_ble_update_dmt_flag_bits ** ** Description Obtain updated adv flag value based on connect and discoverability mode. ** Also, setup DMT support value in the flag based on whether the controller ** supports both LE and BR/EDR. ** ** Parameters: flag_value (Input / Output) - flag value ** connect_mode (Input) - Connect mode value ** disc_mode (Input) - discoverability mode ** ** Returns void ** *******************************************************************************/ void btm_ble_update_dmt_flag_bits(UINT8 *adv_flag_value, const UINT16 connect_mode, const UINT16 disc_mode) { /* BR/EDR non-discoverable , non-connectable */ if ((disc_mode & BTM_DISCOVERABLE_MASK) == 0 && (connect_mode & BTM_CONNECTABLE_MASK) == 0) *adv_flag_value |= BTM_BLE_BREDR_NOT_SPT; else *adv_flag_value &= ~BTM_BLE_BREDR_NOT_SPT; /* if local controller support, mark both controller and host support in flag */ if (controller_get_interface()->supports_simultaneous_le_bredr()) *adv_flag_value |= (BTM_BLE_DMT_CONTROLLER_SPT|BTM_BLE_DMT_HOST_SPT); else *adv_flag_value &= ~(BTM_BLE_DMT_CONTROLLER_SPT|BTM_BLE_DMT_HOST_SPT); } /******************************************************************************* ** ** Function btm_ble_set_adv_flag ** ** Description Set adv flag in adv data. ** ** Parameters: connect_mode (Input)- Connect mode value ** disc_mode (Input) - discoverability mode ** ** Returns void ** *******************************************************************************/ Loading @@ -1463,18 +1498,7 @@ void btm_ble_set_adv_flag(UINT16 connect_mode, UINT16 disc_mode) if (p_adv_data->p_flags != NULL) flag = old_flag = *(p_adv_data->p_flags); /* BR/EDR non-discoverable , non-connectable */ if ((disc_mode & BTM_DISCOVERABLE_MASK) == 0 && (connect_mode & BTM_CONNECTABLE_MASK) == 0) flag |= BTM_BLE_BREDR_NOT_SPT; else flag &= ~BTM_BLE_BREDR_NOT_SPT; /* if local controller support, mark both controller and host support in flag */ if (controller_get_interface()->supports_simultaneous_le_bredr()) flag |= (BTM_BLE_DMT_CONTROLLER_SPT|BTM_BLE_DMT_HOST_SPT); else flag &= ~(BTM_BLE_DMT_CONTROLLER_SPT|BTM_BLE_DMT_HOST_SPT); btm_ble_update_dmt_flag_bits (&flag, connect_mode, disc_mode); LOG_DEBUG("disc_mode %04x", disc_mode); /* update discoverable flag */ Loading
system/stack/btm/btm_ble_multi_adv.c +17 −3 Original line number Diff line number Diff line Loading @@ -30,17 +30,29 @@ #include "hcidefs.h" #include "btm_ble_api.h" /************************************************************************************ ** Constants & Macros ************************************************************************************/ /* length of each multi adv sub command */ #define BTM_BLE_MULTI_ADV_ENB_LEN 3 #define BTM_BLE_MULTI_ADV_SET_PARAM_LEN 24 #define BTM_BLE_MULTI_ADV_WRITE_DATA_LEN (BTM_BLE_AD_DATA_LEN + 3) #define BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR_LEN 8 #define BTM_BLE_MULTI_ADV_CB_EVT_MASK 0xF0 #define BTM_BLE_MULTI_ADV_SUBCODE_MASK 0x0F /************************************************************************************ ** Static variables ************************************************************************************/ tBTM_BLE_MULTI_ADV_CB btm_multi_adv_cb; tBTM_BLE_MULTI_ADV_INST_IDX_Q btm_multi_adv_idx_q; #define BTM_BLE_MULTI_ADV_CB_EVT_MASK 0xF0 #define BTM_BLE_MULTI_ADV_SUBCODE_MASK 0x0F /************************************************************************************ ** Externs ************************************************************************************/ extern void btm_ble_update_dmt_flag_bits(UINT8 *flag_value, const UINT16 connect_mode, const UINT16 disc_mode); /******************************************************************************* ** Loading Loading @@ -643,7 +655,7 @@ tBTM_STATUS BTM_BleUpdateAdvInstParam (UINT8 inst_id, tBTM_BLE_ADV_PARAMS *p_par ** adv data or scan response data. ** ** Parameters inst_id: adv instance ID ** is_scan_rsp: is this scacn response, if no set as adv data. ** is_scan_rsp: is this scan response. if no, set as adv data. ** data_mask: adv data mask. ** p_data: pointer to the adv data structure. ** Loading @@ -669,6 +681,8 @@ tBTM_STATUS BTM_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp, return BTM_ERR_PROCESSING; } btm_ble_update_dmt_flag_bits(&p_data->flag, btm_cb.btm_inq_vars.connectable_mode, btm_cb.btm_inq_vars.discoverable_mode); BTM_TRACE_EVENT("BTM_BleCfgAdvInstData called with inst_id:%d", inst_id); if (inst_id > BTM_BLE_MULTI_ADV_MAX || inst_id == BTM_BLE_MULTI_ADV_DEFAULT_STD) Loading