Merge "Add liblog dependency to libbt-vendor."
diff --git a/bta/av/bta_av_main.cc b/bta/av/bta_av_main.cc
index c8adbe9..ac5ccab 100644
--- a/bta/av/bta_av_main.cc
+++ b/bta/av/bta_av_main.cc
@@ -456,14 +456,14 @@
BTA_ID_AV);
#endif
- /* Both Audio Source and Audio Sink support AVRCP 1.6 for the
- * major roles (i.e. Audio Source -> TG 1.6 and vice versa). For
+ /* Both Audio Source and Audio Sink support AVRCP 1.4 for the
+ * major roles (i.e. Audio Source -> TG 1.4 and vice versa). For
* Audio Sink role we support additional TG 1.3 to support
* absolute volume. Here we only do TG registration.
*/
uint16_t profile_version = AVRC_REV_1_0;
if (profile_initialized == UUID_SERVCLASS_AUDIO_SOURCE) {
- profile_version = AVRC_REV_1_6;
+ profile_version = AVRC_REV_1_4;
} else if (profile_initialized == UUID_SERVCLASS_AUDIO_SINK) {
// Initialize AVRCP1.4 to provide Absolute Volume control.
profile_version = AVRC_REV_1_4;
diff --git a/btif/src/btif_ble_advertiser.cc b/btif/src/btif_ble_advertiser.cc
index f274de2..395bc1d 100644
--- a/btif/src/btif_ble_advertiser.cc
+++ b/btif/src/btif_ble_advertiser.cc
@@ -59,6 +59,29 @@
return OwnedArrayWrapper<T>(o);
}
+void parseParams(tBTM_BLE_ADV_PARAMS* p_params,
+ const AdvertiseParameters& params) {
+ p_params->advertising_event_properties = params.advertising_event_properties;
+ p_params->adv_int_min = params.min_interval;
+ p_params->adv_int_max = params.max_interval;
+ p_params->channel_map = params.channel_map;
+ p_params->adv_filter_policy = 0;
+ p_params->tx_power = params.tx_power;
+ p_params->primary_advertising_phy = params.primary_advertising_phy;
+ p_params->secondary_advertising_phy = params.secondary_advertising_phy;
+ p_params->scan_request_notification_enable =
+ params.scan_request_notification_enable;
+}
+
+void parsePeriodicParams(tBLE_PERIODIC_ADV_PARAMS* p_periodic_params,
+ PeriodicAdvertisingParameters periodic_params) {
+ p_periodic_params->enable = periodic_params.enable;
+ p_periodic_params->min_interval = periodic_params.min_interval;
+ p_periodic_params->max_interval = periodic_params.max_interval;
+ p_periodic_params->periodic_advertising_properties =
+ periodic_params.periodic_advertising_properties;
+}
+
class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface {
~BleAdvertiserInterfaceImpl(){};
@@ -84,36 +107,18 @@
base::Unretained(BleAdvertisingManager::Get()), advertiser_id));
}
- void SetParametersCb(StatusCallback cb, uint8_t status) {
- LOG(INFO) << __func__ << " status: " << +status;
- do_in_jni_thread(Bind(cb, status));
- }
+ void SetParameters(uint8_t advertiser_id, AdvertiseParameters params,
+ ParametersCallback cb) override {
+ VLOG(1) << __func__;
- void SetParameters(uint8_t advertiser_id,
- uint16_t advertising_event_properties,
- uint32_t min_interval, uint32_t max_interval, int chnl_map,
- int tx_power, uint8_t primary_advertising_phy,
- uint8_t secondary_advertising_phy,
- uint8_t scan_request_notification_enable,
- StatusCallback cb) {
- tBTM_BLE_ADV_PARAMS* params = new tBTM_BLE_ADV_PARAMS;
+ tBTM_BLE_ADV_PARAMS* p_params = new tBTM_BLE_ADV_PARAMS;
+ parseParams(p_params, params);
- params->advertising_event_properties = advertising_event_properties;
- params->adv_int_min = min_interval;
- params->adv_int_max = max_interval;
- params->channel_map = chnl_map;
- params->adv_filter_policy = 0;
- params->tx_power = tx_power;
- params->primary_advertising_phy = primary_advertising_phy;
- params->secondary_advertising_phy = secondary_advertising_phy;
- params->scan_request_notification_enable = scan_request_notification_enable;
-
- do_in_bta_thread(FROM_HERE,
- Bind(&BleAdvertisingManager::SetParameters,
- base::Unretained(BleAdvertisingManager::Get()),
- advertiser_id, base::Owned(params),
- Bind(&BleAdvertiserInterfaceImpl::SetParametersCb,
- base::Unretained(this), cb)));
+ do_in_bta_thread(
+ FROM_HERE,
+ Bind(&BleAdvertisingManager::SetParameters,
+ base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
+ base::Owned(p_params), jni_thread_wrapper(FROM_HERE, cb)));
}
void SetData(int advertiser_id, bool set_scan_rsp, vector<uint8_t> data,
@@ -146,17 +151,7 @@
VLOG(1) << __func__;
tBTM_BLE_ADV_PARAMS* p_params = new tBTM_BLE_ADV_PARAMS;
- p_params->advertising_event_properties =
- params.advertising_event_properties;
- p_params->adv_int_min = params.min_interval;
- p_params->adv_int_max = params.max_interval;
- p_params->channel_map = params.channel_map;
- p_params->adv_filter_policy = 0;
- p_params->tx_power = params.tx_power;
- p_params->primary_advertising_phy = params.primary_advertising_phy;
- p_params->secondary_advertising_phy = params.secondary_advertising_phy;
- p_params->scan_request_notification_enable =
- params.scan_request_notification_enable;
+ parseParams(p_params, params);
do_in_bta_thread(
FROM_HERE,
@@ -167,33 +162,20 @@
timeout_s, jni_thread_wrapper(FROM_HERE, timeout_cb)));
}
- void StartAdvertisingSet(IdStatusCallback cb, AdvertiseParameters params,
+ void StartAdvertisingSet(IdTxPowerStatusCallback cb,
+ AdvertiseParameters params,
std::vector<uint8_t> advertise_data,
std::vector<uint8_t> scan_response_data,
PeriodicAdvertisingParameters periodic_params,
std::vector<uint8_t> periodic_data, int timeout_s,
- IdStatusCallback timeout_cb) {
+ IdStatusCallback timeout_cb) override {
VLOG(1) << __func__;
tBTM_BLE_ADV_PARAMS* p_params = new tBTM_BLE_ADV_PARAMS;
- p_params->advertising_event_properties =
- params.advertising_event_properties;
- p_params->adv_int_min = params.min_interval;
- p_params->adv_int_max = params.max_interval;
- p_params->channel_map = params.channel_map;
- p_params->adv_filter_policy = 0;
- p_params->tx_power = params.tx_power;
- p_params->primary_advertising_phy = params.primary_advertising_phy;
- p_params->secondary_advertising_phy = params.secondary_advertising_phy;
- p_params->scan_request_notification_enable =
- params.scan_request_notification_enable;
+ parseParams(p_params, params);
tBLE_PERIODIC_ADV_PARAMS* p_periodic_params = new tBLE_PERIODIC_ADV_PARAMS;
- p_periodic_params->enable = periodic_params.enable;
- p_periodic_params->min_interval = periodic_params.min_interval;
- p_periodic_params->max_interval = periodic_params.max_interval;
- p_periodic_params->periodic_advertising_properties =
- periodic_params.periodic_advertising_properties;
+ parsePeriodicParams(p_periodic_params, periodic_params);
do_in_bta_thread(
FROM_HERE,
@@ -203,7 +185,46 @@
std::move(advertise_data), std::move(scan_response_data),
base::Owned(p_periodic_params), std::move(periodic_data),
timeout_s, jni_thread_wrapper(FROM_HERE, timeout_cb)));
- };
+ }
+
+ void SetPeriodicAdvertisingParameters(
+ int advertiser_id, PeriodicAdvertisingParameters periodic_params,
+ StatusCallback cb) override {
+ VLOG(1) << __func__ << " advertiser_id: " << +advertiser_id;
+
+ tBLE_PERIODIC_ADV_PARAMS* p_periodic_params = new tBLE_PERIODIC_ADV_PARAMS;
+ parsePeriodicParams(p_periodic_params, periodic_params);
+
+ do_in_bta_thread(
+ FROM_HERE,
+ Bind(&BleAdvertisingManager::SetPeriodicAdvertisingParameters,
+ base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
+ base::Owned(p_periodic_params),
+ jni_thread_wrapper(FROM_HERE, cb)));
+ }
+
+ void SetPeriodicAdvertisingData(int advertiser_id, std::vector<uint8_t> data,
+ StatusCallback cb) override {
+ VLOG(1) << __func__ << " advertiser_id: " << +advertiser_id;
+
+ do_in_bta_thread(
+ FROM_HERE,
+ Bind(&BleAdvertisingManager::SetPeriodicAdvertisingData,
+ base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
+ std::move(data), jni_thread_wrapper(FROM_HERE, cb)));
+ }
+
+ void SetPeriodicAdvertisingEnable(int advertiser_id, bool enable,
+ StatusCallback cb) override {
+ VLOG(1) << __func__ << " advertiser_id: " << +advertiser_id
+ << " ,enable: " << enable;
+
+ do_in_bta_thread(
+ FROM_HERE,
+ Bind(&BleAdvertisingManager::SetPeriodicAdvertisingEnable,
+ base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
+ enable, jni_thread_wrapper(FROM_HERE, cb)));
+ }
};
BleAdvertiserInterface* btLeAdvertiserInstance = nullptr;
diff --git a/service/test/low_energy_advertiser_unittest.cc b/service/test/low_energy_advertiser_unittest.cc
index eb2211c..d7b0632 100644
--- a/service/test/low_energy_advertiser_unittest.cc
+++ b/service/test/low_energy_advertiser_unittest.cc
@@ -47,31 +47,27 @@
MOCK_METHOD1(RegisterAdvertiser, void(IdStatusCallback));
MOCK_METHOD1(Unregister, void(uint8_t));
- MOCK_METHOD10(SetParameters,
- void(uint8_t advertiser_id,
- uint16_t advertising_event_properties,
- uint32_t min_interval, uint32_t max_interval, int chnl_map,
- int tx_power, uint8_t primary_advertising_phy,
- uint8_t secondary_advertising_phy,
- uint8_t scan_request_notification_enable,
- StatusCallback cb));
- MOCK_METHOD4(SetData, void(int advertiser_id, bool set_scan_rsp,
- std::vector<uint8_t> data, StatusCallback cb));
+ MOCK_METHOD3(SetParameters,
+ void(uint8_t, AdvertiseParameters, ParametersCallback));
+ MOCK_METHOD4(SetData, void(int, bool, std::vector<uint8_t>, StatusCallback));
MOCK_METHOD5(Enable,
- void(uint8_t advertiser_id, bool enable, StatusCallback cb,
- int timeout_s, StatusCallback timeout_cb));
+ void(uint8_t, bool, StatusCallback, int, StatusCallback));
MOCK_METHOD7(StartAdvertising,
void(uint8_t advertiser_id, StatusCallback cb,
AdvertiseParameters, std::vector<uint8_t>,
std::vector<uint8_t>, int, StatusCallback));
-
MOCK_METHOD8(StartAdvertisingSet,
- void(IdStatusCallback cb, AdvertiseParameters params,
+ void(IdTxPowerStatusCallback cb, AdvertiseParameters params,
std::vector<uint8_t> advertise_data,
std::vector<uint8_t> scan_response_data,
PeriodicAdvertisingParameters periodic_params,
std::vector<uint8_t> periodic_data, int timeout_s,
IdStatusCallback timeout_cb));
+ MOCK_METHOD3(SetPeriodicAdvertisingParameters,
+ void(int, PeriodicAdvertisingParameters, StatusCallback));
+ MOCK_METHOD3(SetPeriodicAdvertisingData,
+ void(int, std::vector<uint8_t>, StatusCallback));
+ MOCK_METHOD3(SetPeriodicAdvertisingEnable, void(int, bool, StatusCallback));
private:
DISALLOW_COPY_AND_ASSIGN(MockAdvertiserHandler);
diff --git a/stack/btm/ble_advertiser_hci_interface.cc b/stack/btm/ble_advertiser_hci_interface.cc
index c527278..886770e 100644
--- a/stack/btm/ble_advertiser_hci_interface.cc
+++ b/stack/btm/ble_advertiser_hci_interface.cc
@@ -72,6 +72,23 @@
command_complete.Run(status);
}
+void parameters_response_parser(BleAdvertiserHciInterface::parameters_cb cb,
+ uint8_t* ret_params, uint16_t ret_params_len) {
+ uint8_t status;
+ int8_t tx_power;
+
+ uint8_t* pp = ret_params;
+ STREAM_TO_UINT8(status, pp);
+ STREAM_TO_INT8(tx_power, pp);
+
+ cb.Run(status, tx_power);
+}
+
+void known_tx_pwr(BleAdvertiserHciInterface::parameters_cb cb, int8_t tx_power,
+ uint8_t status) {
+ cb.Run(status, tx_power);
+}
+
class BleAdvertiserVscHciInterfaceImpl : public BleAdvertiserHciInterface {
void SendAdvCmd(const tracked_objects::Location& posted_from,
uint8_t param_len, uint8_t* param_buf,
@@ -100,7 +117,7 @@
uint8_t primary_phy, uint8_t secondary_max_skip,
uint8_t secondary_phy, uint8_t advertising_sid,
uint8_t scan_request_notify_enable,
- status_cb command_complete) override {
+ parameters_cb command_complete) override {
VLOG(1) << __func__;
uint8_t param[BTM_BLE_MULTI_ADV_SET_PARAM_LEN];
memset(param, 0, BTM_BLE_MULTI_ADV_SET_PARAM_LEN);
@@ -119,7 +136,7 @@
} else {
LOG(ERROR) << "Unsupported advertisement type selected:" << std::hex
<< properties;
- command_complete.Run(HCI_ERR_ILLEGAL_PARAMETER_FMT);
+ command_complete.Run(HCI_ERR_ILLEGAL_PARAMETER_FMT, 0);
return;
}
@@ -132,8 +149,9 @@
UINT8_TO_STREAM(pp, handle);
INT8_TO_STREAM(pp, tx_power);
- SendAdvCmd(FROM_HERE, BTM_BLE_MULTI_ADV_SET_PARAM_LEN, param,
- command_complete);
+ SendAdvCmd(
+ FROM_HERE, BTM_BLE_MULTI_ADV_SET_PARAM_LEN, param,
+ base::Bind(&known_tx_pwr, std::move(command_complete), tx_power));
}
void SetAdvertisingData(uint8_t handle, uint8_t operation,
@@ -224,14 +242,9 @@
bool QuirkAdvertiserZeroHandle() override {
// Android BT HCI Requirements version 0.96 and below specify that handle 0
// is equal to standard HCI interface, and should be accessed using non-VSC
- // commands. Broadcom controllers are strict about this requirement, so
- // don't use 0 handle.
- if (BTM_IS_BRCM_CONTROLLER()) {
- LOG(INFO) << "QuirkAdvertiserZeroHandle in use";
- return true;
- }
-
- return false;
+ // commands.
+ LOG(INFO) << "QuirkAdvertiserZeroHandle in use";
+ return true;
}
void RemoveAdvertisingSet(uint8_t handle,
@@ -302,7 +315,7 @@
uint8_t primary_phy, uint8_t secondary_max_skip,
uint8_t secondary_phy, uint8_t advertising_sid,
uint8_t scan_request_notify_enable,
- status_cb command_complete) override {
+ parameters_cb command_complete) override {
VLOG(1) << __func__;
uint8_t param[HCIC_PARAM_SIZE_BLE_WRITE_ADV_PARAMS];
@@ -320,7 +333,7 @@
} else {
LOG(ERROR) << "Unsupported advertisement type selected:" << std::hex
<< properties;
- command_complete.Run(HCI_ERR_ILLEGAL_PARAMETER_FMT);
+ command_complete.Run(HCI_ERR_ILLEGAL_PARAMETER_FMT, 0);
return;
}
@@ -330,8 +343,10 @@
UINT8_TO_STREAM(pp, channel_map);
UINT8_TO_STREAM(pp, filter_policy);
- SendAdvCmd(FROM_HERE, HCI_BLE_WRITE_ADV_PARAMS, param,
- HCIC_PARAM_SIZE_BLE_WRITE_ADV_PARAMS, command_complete);
+ SendAdvCmd(
+ FROM_HERE, HCI_BLE_WRITE_ADV_PARAMS, param,
+ HCIC_PARAM_SIZE_BLE_WRITE_ADV_PARAMS,
+ base::Bind(&known_tx_pwr, std::move(command_complete), (int8_t)0));
}
void SetAdvertisingData(uint8_t handle, uint8_t operation,
@@ -446,7 +461,7 @@
uint8_t primary_phy, uint8_t secondary_max_skip,
uint8_t secondary_phy, uint8_t advertising_sid,
uint8_t scan_request_notify_enable,
- status_cb command_complete) override {
+ parameters_cb command_complete) override {
VLOG(1) << __func__;
const uint16_t HCI_LE_SET_EXT_ADVERTISING_PARAM_LEN = 25;
uint8_t param[HCI_LE_SET_EXT_ADVERTISING_PARAM_LEN];
@@ -469,8 +484,10 @@
UINT8_TO_STREAM(pp, advertising_sid);
UINT8_TO_STREAM(pp, scan_request_notify_enable);
- SendAdvCmd(FROM_HERE, HCI_LE_SET_EXT_ADVERTISING_PARAM, param,
- HCI_LE_SET_EXT_ADVERTISING_PARAM_LEN, command_complete);
+ btu_hcif_send_cmd_with_cb(
+ FROM_HERE, HCI_LE_SET_EXT_ADVERTISING_PARAM, param,
+ HCI_LE_SET_EXT_ADVERTISING_PARAM_LEN,
+ base::Bind(parameters_response_parser, std::move(command_complete)));
}
void SetAdvertisingData(uint8_t handle, uint8_t operation,
diff --git a/stack/btm/ble_advertiser_hci_interface.h b/stack/btm/ble_advertiser_hci_interface.h
index 5a9fd4f..7797ce8 100644
--- a/stack/btm/ble_advertiser_hci_interface.h
+++ b/stack/btm/ble_advertiser_hci_interface.h
@@ -29,6 +29,8 @@
class BleAdvertiserHciInterface {
public:
using status_cb = base::Callback<void(uint8_t /* status */)>;
+ using parameters_cb =
+ base::Callback<void(uint8_t /* status */, int8_t /* tx_power */)>;
static void Initialize();
static BleAdvertiserHciInterface* Get();
@@ -57,7 +59,7 @@
uint8_t secondary_max_skip, uint8_t secondary_phy,
uint8_t advertising_sid,
uint8_t scan_request_notify_enable,
- status_cb command_complete) = 0;
+ parameters_cb command_complete) = 0;
virtual void SetAdvertisingData(uint8_t handle, uint8_t operation,
uint8_t fragment_preference,
uint8_t data_length, uint8_t* data,
diff --git a/stack/btm/btm_ble_multi_adv.cc b/stack/btm/btm_ble_multi_adv.cc
index a733861..f659025 100644
--- a/stack/btm/btm_ble_multi_adv.cc
+++ b/stack/btm/btm_ble_multi_adv.cc
@@ -34,6 +34,8 @@
using base::Bind;
using RegisterCb =
base::Callback<void(uint8_t /* inst_id */, uint8_t /* status */)>;
+using IdTxPowerStatusCb = base::Callback<void(
+ uint8_t /* inst_id */, int8_t /* tx_power */, uint8_t /* status */)>;
extern void btm_gen_resolvable_private_addr(
base::Callback<void(uint8_t[8])> cb);
extern fixed_queue_t* btu_general_alarm_queue;
@@ -113,7 +115,7 @@
struct CreatorParams {
uint8_t inst_id;
BleAdvertisingManagerImpl* self;
- RegisterCb cb;
+ IdTxPowerStatusCb cb;
tBTM_BLE_ADV_PARAMS params;
std::vector<uint8_t> advertise_data;
std::vector<uint8_t> scan_response_data;
@@ -271,13 +273,15 @@
// asynchronous flow
// clang-format off
c->self->SetParameters(c->inst_id, &c->params, Bind(
- [](c_type c, uint8_t status) {
+ [](c_type c, uint8_t status, int8_t tx_power) {
if (status != 0) {
LOG(ERROR) << "setting parameters failed, status: " << +status;
c->cb.Run(status);
return;
}
+ c->self->adv_inst[c->inst_id].tx_power = tx_power;
+
BD_ADDR *rpa = &c->self->adv_inst[c->inst_id].own_address;
c->self->GetHciInterface()->SetRandomAddress(c->inst_id, *rpa, Bind(
[](c_type c, uint8_t status) {
@@ -312,7 +316,7 @@
// clang-format on
}
- void StartAdvertisingSet(RegisterCb cb, tBTM_BLE_ADV_PARAMS* params,
+ void StartAdvertisingSet(IdTxPowerStatusCb cb, tBTM_BLE_ADV_PARAMS* params,
std::vector<uint8_t> advertise_data,
std::vector<uint8_t> scan_response_data,
tBLE_PERIODIC_ADV_PARAMS* periodic_params,
@@ -339,23 +343,22 @@
[](c_type c, uint8_t advertiser_id, uint8_t status) {
if (status != 0) {
LOG(ERROR) << "registering advertiser failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
c->inst_id = advertiser_id;
c->self->SetParameters(c->inst_id, &c->params, Bind(
- [](c_type c, uint8_t status) {
+ [](c_type c, uint8_t status, int8_t tx_power) {
if (status != 0) {
c->self->Unregister(c->inst_id);
LOG(ERROR) << "setting parameters failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
- //TODO(jpawlowski): obtain real tx_power from set parameters
- // response, to put into adv data
+ c->self->adv_inst[c->inst_id].tx_power = tx_power;
BD_ADDR *rpa = &c->self->adv_inst[c->inst_id].own_address;
c->self->GetHciInterface()->SetRandomAddress(c->inst_id, *rpa, Bind(
@@ -363,7 +366,7 @@
if (status != 0) {
c->self->Unregister(c->inst_id);
LOG(ERROR) << "setting random address failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
@@ -372,7 +375,7 @@
if (status != 0) {
c->self->Unregister(c->inst_id);
LOG(ERROR) << "setting advertise data failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
@@ -381,7 +384,7 @@
if (status != 0) {
c->self->Unregister(c->inst_id);
LOG(ERROR) << "setting scan response data failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
@@ -407,7 +410,7 @@
if (status != 0) {
c->self->Unregister(c->inst_id);
LOG(ERROR) << "setting periodic parameters failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
@@ -416,7 +419,7 @@
if (status != 0) {
c->self->Unregister(c->inst_id);
LOG(ERROR) << "setting periodic parameters failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
@@ -425,7 +428,7 @@
if (status != 0) {
c->self->Unregister(c->inst_id);
LOG(ERROR) << "enabling periodic advertising failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
@@ -447,10 +450,11 @@
if (status != 0) {
c->self->Unregister(c->inst_id);
LOG(ERROR) << "enabling advertiser failed, status: " << +status;
- c->cb.Run(0, status);
+ c->cb.Run(0, 0, status);
return;
}
- c->cb.Run(c->inst_id, status);
+ int8_t tx_power = c->self->adv_inst[c->inst_id].tx_power;
+ c->cb.Run(c->inst_id, tx_power, status);
},
base::Passed(&c));
@@ -460,6 +464,7 @@
void EnableWithTimerCb(uint8_t inst_id, MultiAdvCb enable_cb, int timeout_s,
MultiAdvCb timeout_cb, uint8_t status) {
+ VLOG(1) << __func__ << " inst_id: " << +inst_id;
AdvertisingInstance* p_inst = &adv_inst[inst_id];
// Run the regular enable callback
@@ -487,7 +492,7 @@
}
AdvertisingInstance* p_inst = &adv_inst[inst_id];
- VLOG(1) << __func__ << "enable: " << enable;
+ VLOG(1) << __func__ << " enable: " << enable << ", timeout: " << +timeout_s;
if (!p_inst->in_use) {
LOG(ERROR) << "Invalid or no active instance";
cb.Run(BTM_BLE_MULTI_ADV_FAILURE);
@@ -513,7 +518,7 @@
}
void SetParameters(uint8_t inst_id, tBTM_BLE_ADV_PARAMS* p_params,
- MultiAdvCb cb) override {
+ ParametersCb cb) override {
VLOG(1) << __func__ << " inst_id: " << +inst_id;
if (inst_id >= inst_count) {
LOG(ERROR) << "bad instance id " << +inst_id;
@@ -523,7 +528,7 @@
AdvertisingInstance* p_inst = &adv_inst[inst_id];
if (!p_inst->in_use) {
LOG(ERROR) << "adv instance not in use" << +inst_id;
- cb.Run(BTM_BLE_MULTI_ADV_FAILURE);
+ cb.Run(BTM_BLE_MULTI_ADV_FAILURE, 0);
return;
}
diff --git a/stack/include/ble_advertiser.h b/stack/include/ble_advertiser.h
index 3cfae45..30fe6e6 100644
--- a/stack/include/ble_advertiser.h
+++ b/stack/include/ble_advertiser.h
@@ -28,6 +28,8 @@
#define ADVERTISE_FAILED_TOO_MANY_ADVERTISERS 0x02
using MultiAdvCb = base::Callback<void(uint8_t /* status */)>;
+using ParametersCb =
+ base::Callback<void(uint8_t /* status */, int8_t /* tx_power */)>;
// methods we must have defined
void btm_ble_update_dmt_flag_bits(uint8_t* flag_value,
@@ -93,7 +95,9 @@
* enabled.
*/
virtual void StartAdvertisingSet(
- base::Callback<void(uint8_t /* inst_id */, uint8_t /* status */)> cb,
+ base::Callback<void(uint8_t /* inst_id */, int8_t /* tx_power */,
+ uint8_t /* status */)>
+ cb,
tBTM_BLE_ADV_PARAMS* params, std::vector<uint8_t> advertise_data,
std::vector<uint8_t> scan_response_data,
tBLE_PERIODIC_ADV_PARAMS* periodic_params,
@@ -116,7 +120,7 @@
/* This function update a Multi-ADV instance with the specififed adv
* parameters. */
virtual void SetParameters(uint8_t inst_id, tBTM_BLE_ADV_PARAMS* p_params,
- MultiAdvCb cb) = 0;
+ ParametersCb cb) = 0;
/* This function configure a Multi-ADV instance with the specified adv data or
* scan response data.*/
diff --git a/stack/test/ble_advertiser_test.cc b/stack/test/ble_advertiser_test.cc
index 4977704..8a6a3a7 100644
--- a/stack/test/ble_advertiser_test.cc
+++ b/stack/test/ble_advertiser_test.cc
@@ -30,6 +30,7 @@
using ::testing::IsEmpty;
using ::testing::SaveArg;
using status_cb = BleAdvertiserHciInterface::status_cb;
+using parameters_cb = BleAdvertiserHciInterface::parameters_cb;
const int num_adv_instances = 16;
@@ -97,7 +98,7 @@
void(uint8_t, uint16_t, uint32_t, uint32_t, uint8_t, uint8_t,
BD_ADDR, uint8_t, BD_ADDR));
MOCK_METHOD8(SetParameters2, void(uint8_t, int8_t, uint8_t, uint8_t, uint8_t,
- uint8_t, uint8_t, status_cb));
+ uint8_t, uint8_t, parameters_cb));
void SetParameters(uint8_t handle, uint16_t properties, uint32_t adv_int_min,
uint32_t adv_int_max, uint8_t channel_map,
@@ -107,7 +108,7 @@
uint8_t primary_phy, uint8_t secondary_max_skip,
uint8_t secondary_phy, uint8_t advertising_sid,
uint8_t scan_request_notify_enable,
- status_cb cmd_complete) override {
+ parameters_cb cmd_complete) override {
SetParameters1(handle, properties, adv_int_min, adv_int_max, channel_map,
own_address_type, own_address, peer_address_type,
peer_address);
@@ -160,7 +161,9 @@
reg_status = status;
}
- void SetParametersCb(uint8_t status) { set_params_status = status; }
+ void SetParametersCb(uint8_t status, int8_t tx_power) {
+ set_params_status = status;
+ }
void SetDataCb(uint8_t status) { set_data_status = status; }
void EnableCb(uint8_t status) { enable_status = status; }
void StartAdvertisingCb(uint8_t status) { start_advertising_status = status; }
@@ -199,7 +202,7 @@
EXPECT_EQ(BTM_BLE_MULTI_ADV_SUCCESS, reg_status);
int advertiser_id = reg_inst_id;
- status_cb set_params_cb;
+ parameters_cb set_params_cb;
tBTM_BLE_ADV_PARAMS params;
EXPECT_CALL(*hci_mock, SetParameters1(advertiser_id, _, _, _, _, _, _, _, _))
.Times(1);
@@ -213,7 +216,7 @@
::testing::Mock::VerifyAndClearExpectations(hci_mock.get());
// we are a truly gracious fake controller, let the command succeed!
- set_params_cb.Run(0);
+ set_params_cb.Run(0, 0);
EXPECT_EQ(BTM_BLE_MULTI_ADV_SUCCESS, set_params_status);
status_cb set_data_cb;
@@ -261,7 +264,7 @@
EXPECT_EQ(BTM_BLE_MULTI_ADV_SUCCESS, reg_status);
int advertiser_id = reg_inst_id;
- status_cb set_params_cb;
+ parameters_cb set_params_cb;
tBTM_BLE_ADV_PARAMS params;
params.advertising_event_properties =
BleAdvertisingManager::advertising_prop_legacy_connectable;
@@ -278,7 +281,7 @@
::testing::Mock::VerifyAndClearExpectations(hci_mock.get());
// let the set parameters command succeed!
- set_params_cb.Run(0);
+ set_params_cb.Run(0, 0);
EXPECT_EQ(BTM_BLE_MULTI_ADV_SUCCESS, set_params_status);
status_cb set_data_cb;
@@ -311,7 +314,7 @@
EXPECT_EQ(BTM_BLE_MULTI_ADV_SUCCESS, reg_status);
int advertiser_id = reg_inst_id;
- status_cb set_params_cb;
+ parameters_cb set_params_cb;
tBTM_BLE_ADV_PARAMS params;
params.advertising_event_properties =
BleAdvertisingManager::advertising_prop_legacy_non_connectable;
@@ -329,7 +332,7 @@
::testing::Mock::VerifyAndClearExpectations(hci_mock.get());
// let the set parameters command succeed!
- set_params_cb.Run(0);
+ set_params_cb.Run(0, -15);
EXPECT_EQ(BTM_BLE_MULTI_ADV_SUCCESS, set_params_status);
status_cb set_data_cb;
@@ -391,7 +394,7 @@
std::vector<uint8_t> scan_resp;
tBTM_BLE_ADV_PARAMS params;
- status_cb set_params_cb;
+ parameters_cb set_params_cb;
status_cb set_address_cb;
status_cb set_data_cb;
status_cb set_scan_resp_data_cb;
@@ -420,7 +423,7 @@
¶ms, adv_data, scan_resp, 0, base::Callback<void(uint8_t)>());
// we are a truly gracious fake controller, let the commands succeed!
- set_params_cb.Run(0);
+ set_params_cb.Run(0, 0);
set_address_cb.Run(0);
set_data_cb.Run(0);
set_scan_resp_data_cb.Run(0);
@@ -451,7 +454,7 @@
std::vector<uint8_t> scan_resp;
tBTM_BLE_ADV_PARAMS params;
- status_cb set_params_cb;
+ parameters_cb set_params_cb;
EXPECT_CALL(*hci_mock, SetParameters1(advertiser_id, _, _, _, _, _, _, _, _))
.Times(1);
EXPECT_CALL(*hci_mock, SetParameters2(_, _, _, _, _, _, _, _))
@@ -468,7 +471,7 @@
::testing::Mock::VerifyAndClearExpectations(hci_mock.get());
// set params failed
- set_params_cb.Run(0x01);
+ set_params_cb.Run(0x01, 0);
// Expect the whole flow to fail right away
EXPECT_EQ(BTM_BLE_MULTI_ADV_FAILURE, start_advertising_status);