}
}
+/*******************************************************************************
+**
+** Function bta_dm_ble_set_long_adv
+**
+** Description This function set the long ADV data
+**
+** Parameters:
+**
+*******************************************************************************/
+void bta_dm_ble_set_long_adv (tBTA_DM_MSG *p_data)
+{
+ tBTA_STATUS status = BTA_FAILURE;
+
+ if (BTM_BleWriteLongAdvData(p_data->ble_set_long_adv_data.adv_data,
+ p_data->ble_set_long_adv_data.adv_data_len) == BTM_SUCCESS) {
+ status = BTA_SUCCESS;
+ }
+
+ if (p_data->ble_set_adv_data.p_adv_data_cback) {
+ (*p_data->ble_set_adv_data.p_adv_data_cback)(status);
+ }
+}
+
/*******************************************************************************
**
** Function bta_dm_ble_set_adv_config_raw
}
}
+/*******************************************************************************
+**
+** Function BTA_DmBleSetLongAdv
+**
+** Description This function is called to set long Advertising data
+**
+** Parameters adv_data : long advertising data.
+** adv_data_len : long advertising data length.
+** p_adv_data_cback : set long adv data complete callback.
+**
+** Returns None
+**
+*******************************************************************************/
+void BTA_DmBleSetLongAdv (UINT8 *adv_data, UINT32 adv_data_len,
+ tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
+{
+ tBTA_DM_API_SET_LONG_ADV *p_msg;
+
+ if ((p_msg = (tBTA_DM_API_SET_LONG_ADV *)
+ osi_malloc(sizeof(tBTA_DM_API_SET_LONG_ADV))) != NULL) {
+ p_msg->hdr.event = BTA_DM_API_BLE_SET_LONG_ADV_EVT;
+ p_msg->p_adv_data_cback = p_adv_data_cback;
+ p_msg->adv_data = adv_data;
+ p_msg->adv_data_len = adv_data_len;
+
+ bta_sys_sendmsg(p_msg);
+ }
+}
+
/*******************************************************************************
**
** Function BTA_DmBleSetScanRsp
bta_dm_ble_set_scan_rsp_raw, /* BTA_DM_API_BLE_SET_SCAN_RSP_RAW_EVT */
bta_dm_ble_broadcast, /* BTA_DM_API_BLE_BROADCAST_EVT */
bta_dm_ble_set_data_length, /* BTA_DM_API_SET_DATA_LENGTH_EVT */
+ bta_dm_ble_set_long_adv, /* BTA_DM_API_BLE_SET_LONG_ADV_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 */
BTA_DM_API_BLE_SET_SCAN_RSP_RAW_EVT,
BTA_DM_API_BLE_BROADCAST_EVT,
BTA_DM_API_SET_DATA_LENGTH_EVT,
-
+ BTA_DM_API_BLE_SET_LONG_ADV_EVT,
#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
BTA_DM_API_CFG_FILTER_COND_EVT,
BTA_DM_API_SCAN_FILTER_SETUP_EVT,
tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback;
} tBTA_DM_API_SET_ADV_CONFIG_RAW;
+typedef struct {
+ BT_HDR hdr;
+ UINT8 *adv_data;
+ UINT8 adv_data_len;
+ tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback;
+} tBTA_DM_API_SET_LONG_ADV;
+
typedef struct {
BT_HDR hdr;
UINT8 batch_scan_full_max;
tBTA_DM_API_BLE_ADV_PARAMS_ALL ble_set_adv_params_all;
tBTA_DM_API_SET_ADV_CONFIG ble_set_adv_data;
tBTA_DM_API_SET_ADV_CONFIG_RAW ble_set_adv_data_raw;
+ tBTA_DM_API_SET_LONG_ADV ble_set_long_adv_data;
#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;
extern void bta_dm_ble_set_adv_params (tBTA_DM_MSG *p_data);
extern void bta_dm_ble_set_adv_params_all(tBTA_DM_MSG *p_data);
extern void bta_dm_ble_set_adv_config (tBTA_DM_MSG *p_data);
+extern void bta_dm_ble_set_long_adv (tBTA_DM_MSG *p_data);
extern void bta_dm_ble_set_adv_config_raw (tBTA_DM_MSG *p_data);
extern void bta_dm_ble_set_scan_rsp (tBTA_DM_MSG *p_data);
extern void bta_dm_ble_set_scan_rsp_raw (tBTA_DM_MSG *p_data);
extern void BTA_DmBleSetAdvConfigRaw (UINT8 *p_raw_adv, UINT32 raw_adv_len,
tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback);
+/*******************************************************************************
+**
+** Function BTA_DmBleSetLongAdv
+**
+** Description This function is called to set long Advertising data
+**
+** Parameters adv_data : long advertising data.
+** adv_data_len : long advertising data length.
+** p_adv_data_cback : set long adv data complete callback.
+**
+** Returns None
+**
+*******************************************************************************/
+void BTA_DmBleSetLongAdv (UINT8 *adv_data, UINT32 adv_data_len,
+ tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback);
+
/*******************************************************************************
**
** Function BTA_DmBleSetScanRsp
}
+/*******************************************************************************
+**
+** 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;
+}
/*******************************************************************************
**
void btm_vsc_complete (UINT8 *p, UINT16 opcode, UINT16 evt_len,
tBTM_CMPL_CB *p_vsc_cplt_cback)
{
+ switch(opcode) {
+ case HCI_VENDOR_BLE_LONG_ADV_DATA:
+ BTM_TRACE_EVENT("Set long adv data complete\n");
+ break;
+ default:
+ break;
+ }
tBTM_VSC_CMPL vcs_cplt_params;
/* If there was a callback address for vcs complete, call it */
#define BTM_BLE_AD_TYPE_MANU HCI_EIR_MANUFACTURER_SPECIFIC_TYPE /* 0xff */
typedef UINT8 tBTM_BLE_AD_TYPE;
+#define BTM_BLE_LONG_ADV_MAX_LEN 249
+
/* Security settings used with L2CAP LE COC */
#define BTM_SEC_LE_LINK_ENCRYPTED 0x01
#define BTM_SEC_LE_LINK_PAIRED_WITHOUT_MITM 0x02
tBTM_STATUS BTM_BleWriteAdvData(tBTM_BLE_AD_MASK data_mask,
tBTM_BLE_ADV_DATA *p_data);
+/*******************************************************************************
+**
+** 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);
+
/*******************************************************************************
**
** Function BTM_BleWriteAdvDataRaw
#define HCI_SUBCODE_BLE_TRACK_ADV 0x04
#define HCI_SUBCODE_BLE_ENERGY_INFO 0x05
#define HCI_SUBCODE_BLE_EXTENDED_SCAN_PARAMS 0x06
-#define HCI_SUBCODE_BLE_MAX 0x7F
+#define HCI_SUBCODE_BLE_LONG_ADV 0x07
+#define HCI_SUBCODE_BLE_MAX 0x7F
//ESP BT subcode define
#define HCI_SUBCODE_BT_INIT 0x00
//ESP BLE HCI CMD
/* Multi adv OCF */
-#define HCI_BLE_MULTI_ADV_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_COMMON, HCI_SUBCODE_BLE_MULTI_ADV)
+#define HCI_BLE_MULTI_ADV_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_MULTI_ADV)
/* Batch scan OCF */
-#define HCI_BLE_BATCH_SCAN_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_COMMON, HCI_SUBCODE_BLE_BATCH_SCAN)
+#define HCI_BLE_BATCH_SCAN_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_BATCH_SCAN)
/* ADV filter OCF */
-#define HCI_BLE_ADV_FILTER_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_COMMON, HCI_SUBCODE_BLE_ADV_FILTER)
+#define HCI_BLE_ADV_FILTER_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_ADV_FILTER)
/* Tracking OCF */
-#define HCI_BLE_TRACK_ADV_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_COMMON, HCI_SUBCODE_BLE_TRACK_ADV)
+#define HCI_BLE_TRACK_ADV_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_TRACK_ADV)
/* Energy info OCF */
-#define HCI_BLE_ENERGY_INFO_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_COMMON, HCI_SUBCODE_BLE_ENERGY_INFO)
+#define HCI_BLE_ENERGY_INFO_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_ENERGY_INFO)
/* Extended BLE Scan parameters OCF */
-#define HCI_BLE_EXTENDED_SCAN_PARAMS_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_COMMON, HCI_SUBCODE_BLE_EXTENDED_SCAN_PARAMS)
+#define HCI_BLE_EXTENDED_SCAN_PARAMS_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_EXTENDED_SCAN_PARAMS)
+/* Long BLE Adv data OCF */
+#define HCI_VENDOR_BLE_LONG_ADV_DATA HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_LONG_ADV)
//ESP BT HCI CMD
-Subproject commit cd196645e29d0d7b050c1aadec850d285fbb1da6
+Subproject commit 93c0b8303a9ab46d1248d28896b7a45fab559c5c