From: Jiang Jiang Jian Date: Wed, 21 Nov 2018 03:31:13 +0000 (+0800) Subject: Merge branch 'feature/btdm_add_set_long_adv_data_api' into 'master' X-Git-Tag: v3.3-beta1~84 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0d7f2d77c2eee51dce3fa7c8430a641c65cd9719;p=esp-idf Merge branch 'feature/btdm_add_set_long_adv_data_api' into 'master' Component/bt: add set long adv data api See merge request idf/esp-idf!3722 --- 0d7f2d77c2eee51dce3fa7c8430a641c65cd9719 diff --cc components/bt/bluedroid/stack/btm/btm_ble_gap.c index 54b5a38dea,235366089b..95959b4db9 --- a/components/bt/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/bluedroid/stack/btm/btm_ble_gap.c @@@ -1735,15 -1685,44 +1735,46 @@@ tBTM_STATUS BTM_BleWriteAdvData(tBTM_BL if (btsnd_hcic_ble_set_adv_data((UINT8)(p_cb_data->p_pad - p_cb_data->ad_data), p_cb_data->ad_data)) { - return BTM_SUCCESS; + osi_sem_take(&adv_data_sem, OSI_SEM_MAX_TIMEOUT); + ret = adv_data_status; } else { - return BTM_NO_RESOURCES; + ret = BTM_NO_RESOURCES; } - + osi_mutex_unlock(&adv_data_lock); + return ret; } + /******************************************************************************* + ** + ** Function BTM_BleWriteLongAdvData + ** + ** Description This function is called to write long advertising data. + ** + ** Parameters: adv_data: long advertising data + ** adv_data_len: the length of long advertising data + ** + ** Returns void + ** + *******************************************************************************/ + tBTM_STATUS BTM_BleWriteLongAdvData(uint8_t *adv_data, uint8_t adv_data_len) + { + tBTM_STATUS status = BTM_NO_RESOURCES; + if (!controller_get_interface()->supports_ble()) { + return BTM_ILLEGAL_VALUE; + } + if(!adv_data || adv_data_len <= 0 || adv_data_len > BTM_BLE_LONG_ADV_MAX_LEN) { + return BTM_ILLEGAL_VALUE; + } + uint8_t long_adv[BTM_BLE_LONG_ADV_MAX_LEN + 1] = {0}; + long_adv[0] = adv_data_len; + memcpy(&long_adv[1], adv_data, adv_data_len); + status = BTM_VendorSpecificCommand(HCI_VENDOR_BLE_LONG_ADV_DATA, BTM_BLE_LONG_ADV_MAX_LEN + 1, long_adv, NULL); + if(status == BTM_CMD_STARTED) { + status = BTM_SUCCESS; + } + + return status; + } /******************************************************************************* **