]> granicus.if.org Git - esp-idf/commitdiff
Merge branch 'feature/btdm_add_set_long_adv_data_api' into 'master'
authorJiang Jiang Jian <jack@espressif.com>
Wed, 21 Nov 2018 03:31:13 +0000 (11:31 +0800)
committerJiang Jiang Jian <jack@espressif.com>
Wed, 21 Nov 2018 03:31:13 +0000 (11:31 +0800)
Component/bt: add set long adv data api

See merge request idf/esp-idf!3722

1  2 
components/bt/bluedroid/bta/dm/bta_dm_act.c
components/bt/bluedroid/stack/btm/btm_ble_gap.c
components/bt/bluedroid/stack/include/stack/btm_ble_api.h

index 54b5a38dea8544ca7febc4b157cdc7537389a03d,235366089bdd38ca795294ce99c6ff80c035714a..95959b4db9e504d4593a75a4ec5b6e127b33b483
@@@ -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;
+ }
  
  /*******************************************************************************
  **