Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 24df42ac authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by android-build-merger
Browse files

Report back TX Power value

am: 8fdaf49b

Change-Id: If05533867f2f78762b42e8e68fdecc1eed3cb22f
parents ad18e94b 8fdaf49b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface {
             base::Unretained(BleAdvertisingManager::Get()), advertiser_id));
  }

  void SetParametersCb(StatusCallback cb, uint8_t status) {
  void SetParametersCb(StatusCallback cb, uint8_t status, int8_t tx_power) {
    LOG(INFO) << __func__ << " status: " << +status;
    do_in_jni_thread(Bind(cb, status));
  }
+33 −11
Original line number Diff line number Diff line
@@ -72,6 +72,23 @@ void btm_ble_multi_adv_vsc_cmpl_cback(uint8_t expected_opcode,
  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 @@ class BleAdvertiserVscHciInterfaceImpl : public BleAdvertiserHciInterface {
                     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 @@ class BleAdvertiserVscHciInterfaceImpl : public BleAdvertiserHciInterface {
    } 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 @@ class BleAdvertiserVscHciInterfaceImpl : public BleAdvertiserHciInterface {
    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,
@@ -297,7 +315,7 @@ class BleAdvertiserLegacyHciInterfaceImpl : public BleAdvertiserHciInterface {
                     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];
@@ -315,7 +333,7 @@ class BleAdvertiserLegacyHciInterfaceImpl : public BleAdvertiserHciInterface {
    } 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;
    }

@@ -325,8 +343,10 @@ class BleAdvertiserLegacyHciInterfaceImpl : public BleAdvertiserHciInterface {
    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,
@@ -441,7 +461,7 @@ class BleAdvertiserHciExtendedImpl : public BleAdvertiserHciInterface {
                     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];
@@ -464,8 +484,10 @@ class BleAdvertiserHciExtendedImpl : public BleAdvertiserHciInterface {
    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,
+3 −1
Original line number Diff line number Diff line
@@ -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 @@ class BleAdvertiserHciInterface {
                             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,
+7 −6
Original line number Diff line number Diff line
@@ -271,13 +271,15 @@ class BleAdvertisingManagerImpl
    // 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) {
@@ -346,7 +348,7 @@ class BleAdvertisingManagerImpl
        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;
@@ -354,8 +356,7 @@ class BleAdvertisingManagerImpl
              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(
@@ -513,7 +514,7 @@ class BleAdvertisingManagerImpl
  }

  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 +524,7 @@ class BleAdvertisingManagerImpl
    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;
    }

+3 −1
Original line number Diff line number Diff line
@@ -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,
@@ -116,7 +118,7 @@ class BleAdvertisingManager {
  /* 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.*/
Loading