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

Commit 89f48ed3 authored by Hsin-chen Chuang's avatar Hsin-chen Chuang
Browse files

floss: topshim: gatt: Remove unnecessary type convert

For some trivial types we can reuse the bindgen-ed definition in Rust
and pass them directly to LibBluetooth.

Bug: 343675216
Tag: #floss
Test: mmm packages/modules/Bluetooth
Test: bluetooth_AdapterQuickHealth.AVL.all_floss
Test: NearbyShare / PhoneHub / SmartLock / FastPair
Flag: EXEMPT, Floss-only changes
Change-Id: Ic4c909a2ce04a6125d693a6fc625184af9557db3
parent 29c984a4
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -6,8 +6,8 @@ use bt_topshim::btif::{
    BluetoothInterface, BtStatus, BtTransport, DisplayAddress, RawAddress, Uuid,
};
use bt_topshim::profiles::gatt::{
    ffi::RustAdvertisingTrackInfo, AdvertisingStatus, BtGattDbElement, BtGattNotifyParams,
    BtGattReadParams, BtGattResponse, BtGattValue, Gatt, GattAdvCallbacksDispatcher,
    AdvertisingStatus, AdvertisingTrackInfo, BtGattDbElement, BtGattNotifyParams, BtGattReadParams,
    BtGattResponse, BtGattValue, Gatt, GattAdvCallbacksDispatcher,
    GattAdvInbandCallbacksDispatcher, GattClientCallbacks, GattClientCallbacksDispatcher,
    GattScannerCallbacks, GattScannerCallbacksDispatcher, GattScannerInbandCallbacks,
    GattScannerInbandCallbacksDispatcher, GattServerCallbacks, GattServerCallbacksDispatcher,
@@ -3742,7 +3742,7 @@ pub(crate) trait BtifGattScannerCallbacks {
    );

    #[btif_callback(OnTrackAdvFoundLost)]
    fn on_track_adv_found_lost(&mut self, adv_track_info: RustAdvertisingTrackInfo);
    fn on_track_adv_found_lost(&mut self, adv_track_info: AdvertisingTrackInfo);
}

#[btif_callbacks_dispatcher(dispatch_le_scanner_inband_callbacks, GattScannerInbandCallbacks)]
@@ -4019,7 +4019,7 @@ impl BtifGattScannerCallbacks for BluetoothGatt {
        });
    }

    fn on_track_adv_found_lost(&mut self, track_adv_info: RustAdvertisingTrackInfo) {
    fn on_track_adv_found_lost(&mut self, track_adv_info: AdvertisingTrackInfo) {
        let addr = track_adv_info.advertiser_address;
        let display_addr = DisplayAddress(&addr);
        let mut binding = self.scanners.lock().unwrap();
+2 −2
Original line number Diff line number Diff line
@@ -124,10 +124,10 @@ impl GattServiceImpl {
            filt_logic_type: 0,
            rssi_high_thres: 0,
            rssi_low_thres: 0,
            delay_mode: 0,
            dely_mode: 0,
            found_timeout: 0,
            lost_timeout: 0,
            found_timeout_count: 0,
            found_timeout_cnt: 0,
            num_of_tracking_entries: 0,
        }
    }
+15 −45
Original line number Diff line number Diff line
@@ -37,35 +37,6 @@ namespace rust {

namespace rusty = ::bluetooth::topshim::rust;

namespace internal {
AdvertiseParameters ConvertRustAdvParams(const RustAdvertiseParameters& params) {
  AdvertiseParameters converted = {
      .advertising_event_properties = params.advertising_event_properties,
      .min_interval = params.min_interval,
      .max_interval = params.max_interval,
      .channel_map = params.channel_map,
      .tx_power = params.tx_power,
      .primary_advertising_phy = params.primary_advertising_phy,
      .secondary_advertising_phy = params.secondary_advertising_phy,
      .scan_request_notification_enable = params.scan_request_notification_enable,
      .own_address_type = params.own_address_type,
  };

  return converted;
}
PeriodicAdvertisingParameters ConvertRustPeriodicAdvParams(const RustPeriodicAdvertisingParameters& params) {
  PeriodicAdvertisingParameters converted = {
      .enable = params.enable,
      .include_adi = params.include_adi,
      .min_interval = params.min_interval,
      .max_interval = params.max_interval,
      .periodic_advertising_properties = params.periodic_advertising_properties,
  };

  return converted;
}
}  // namespace internal

// AdvertisingCallbacks implementations

void BleAdvertiserIntf::OnAdvertisingSetStarted(int reg_id, uint8_t advertiser_id, int8_t tx_power, uint8_t status) {
@@ -111,10 +82,11 @@ void BleAdvertiserIntf::GetOwnAddress(uint8_t adv_id) {
      adv_id, base::Bind(&BleAdvertiserIntf::OnGetAddressCallback, base::Unretained(this), adv_id));
}

void BleAdvertiserIntf::SetParameters(uint8_t adv_id, RustAdvertiseParameters params) {
  AdvertiseParameters converted = internal::ConvertRustAdvParams(params);
void BleAdvertiserIntf::SetParameters(uint8_t adv_id, AdvertiseParameters params) {
  adv_intf_->SetParameters(
      adv_id, converted, base::Bind(&BleAdvertiserIntf::OnParametersCallback, base::Unretained(this), adv_id));
      adv_id,
      params,
      base::Bind(&BleAdvertiserIntf::OnParametersCallback, base::Unretained(this), adv_id));
}

void BleAdvertiserIntf::SetData(uint8_t adv_id, bool set_scan_rsp, ::rust::Vec<uint8_t> data) {
@@ -140,11 +112,10 @@ void BleAdvertiserIntf::Enable(uint8_t adv_id, bool enable, uint16_t duration, u

void BleAdvertiserIntf::StartAdvertising(
    uint8_t adv_id,
    RustAdvertiseParameters params,
    AdvertiseParameters params,
    ::rust::Vec<uint8_t> advertise_data,
    ::rust::Vec<uint8_t> scan_response_data,
    int32_t timeout_in_sec) {
  AdvertiseParameters converted_params = internal::ConvertRustAdvParams(params);
  std::vector<uint8_t> converted_adv_data, converted_scan_rsp_data;
  std::copy(advertise_data.begin(), advertise_data.end(), std::back_inserter(converted_adv_data));
  std::copy(scan_response_data.begin(), scan_response_data.end(), std::back_inserter(converted_scan_rsp_data));
@@ -152,7 +123,7 @@ void BleAdvertiserIntf::StartAdvertising(
  adv_intf_->StartAdvertising(
      adv_id,
      base::Bind(&BleAdvertiserIntf::OnIdStatusCallback, base::Unretained(this), adv_id),
      converted_params,
      params,
      converted_adv_data,
      converted_scan_rsp_data,
      timeout_in_sec,
@@ -161,15 +132,13 @@ void BleAdvertiserIntf::StartAdvertising(

void BleAdvertiserIntf::StartAdvertisingSet(
    int32_t reg_id,
    RustAdvertiseParameters params,
    AdvertiseParameters params,
    ::rust::Vec<uint8_t> advertise_data,
    ::rust::Vec<uint8_t> scan_response_data,
    RustPeriodicAdvertisingParameters periodic_params,
    PeriodicAdvertisingParameters periodic_params,
    ::rust::Vec<uint8_t> periodic_data,
    uint16_t duration,
    uint8_t max_ext_adv_events) {
  AdvertiseParameters converted_params = internal::ConvertRustAdvParams(params);
  PeriodicAdvertisingParameters converted_periodic_params = internal::ConvertRustPeriodicAdvParams(periodic_params);
  std::vector<uint8_t> converted_adv_data, converted_scan_rsp_data, converted_periodic_data;
  std::copy(advertise_data.begin(), advertise_data.end(), std::back_inserter(converted_adv_data));
  std::copy(scan_response_data.begin(), scan_response_data.end(), std::back_inserter(converted_scan_rsp_data));
@@ -179,21 +148,22 @@ void BleAdvertiserIntf::StartAdvertisingSet(
      kAdvertiserClientIdJni,
      reg_id,
      base::Bind(&BleAdvertiserIntf::OnIdTxPowerStatusCallback, base::Unretained(this)),
      converted_params,
      params,
      converted_adv_data,
      converted_scan_rsp_data,
      converted_periodic_params,
      periodic_params,
      converted_periodic_data,
      duration,
      max_ext_adv_events,
      base::Bind(&BleAdvertiserIntf::OnIdStatusCallback, base::Unretained(this)));
}

void BleAdvertiserIntf::SetPeriodicAdvertisingParameters(uint8_t adv_id, RustPeriodicAdvertisingParameters params) {
  PeriodicAdvertisingParameters converted = internal::ConvertRustPeriodicAdvParams(params);

void BleAdvertiserIntf::SetPeriodicAdvertisingParameters(
    uint8_t adv_id, PeriodicAdvertisingParameters params) {
  adv_intf_->SetPeriodicAdvertisingParameters(
      adv_id, converted, base::Bind(&BleAdvertiserIntf::OnIdStatusCallback, base::Unretained(this), adv_id));
      adv_id,
      params,
      base::Bind(&BleAdvertiserIntf::OnIdStatusCallback, base::Unretained(this), adv_id));
}

void BleAdvertiserIntf::SetPeriodicAdvertisingData(uint8_t adv_id, ::rust::Vec<uint8_t> data) {
+5 −10
Original line number Diff line number Diff line
@@ -19,17 +19,12 @@
#include <memory>

#include "include/hardware/ble_advertiser.h"
#include "include/hardware/bt_gatt.h"
#include "rust/cxx.h"

namespace bluetooth {
namespace topshim {
namespace rust {

struct RustAdvertiseParameters;
struct RustPeriodicAdvertisingParameters;
struct RustUuid;

// See include/hardware/ble_advertiser.h for more documentation.
//
// This shim implementation just calls the underlying interface and binds the
@@ -56,25 +51,25 @@ class BleAdvertiserIntf : public AdvertisingCallbacks {
  void Unregister(uint8_t adv_id);

  void GetOwnAddress(uint8_t adv_id);
  void SetParameters(uint8_t adv_id, RustAdvertiseParameters params);
  void SetParameters(uint8_t adv_id, AdvertiseParameters params);
  void SetData(uint8_t adv_id, bool set_scan_rsp, ::rust::Vec<uint8_t> data);
  void Enable(uint8_t adv_id, bool enable, uint16_t duration, uint8_t max_ext_adv_events);
  void StartAdvertising(
      uint8_t adv_id,
      RustAdvertiseParameters params,
      AdvertiseParameters params,
      ::rust::Vec<uint8_t> advertise_data,
      ::rust::Vec<uint8_t> scan_response_data,
      int32_t timeout_in_sec);
  void StartAdvertisingSet(
      int32_t reg_id,
      RustAdvertiseParameters params,
      AdvertiseParameters params,
      ::rust::Vec<uint8_t> advertise_data,
      ::rust::Vec<uint8_t> scan_response_data,
      RustPeriodicAdvertisingParameters periodic_params,
      PeriodicAdvertisingParameters periodic_params,
      ::rust::Vec<uint8_t> periodic_data,
      uint16_t duration,
      uint8_t max_ext_adv_events);
  void SetPeriodicAdvertisingParameters(uint8_t adv_id, RustPeriodicAdvertisingParameters params);
  void SetPeriodicAdvertisingParameters(uint8_t adv_id, PeriodicAdvertisingParameters params);
  void SetPeriodicAdvertisingData(uint8_t adv_id, ::rust::Vec<uint8_t> data);
  void SetPeriodicAdvertisingEnable(uint8_t adv_id, bool enable, bool include_adi);

+10 −27
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@
#include <memory>
#include <vector>

#include "bind_helpers.h"
#include "include/hardware/bt_common_types.h"
#include "rust/cxx.h"
#include "src/profiles/gatt.rs.h"
@@ -52,8 +51,8 @@ ApcfCommand ConvertApcfFromRust(const RustApcfCommand& command) {
      .type = command.type_,
      .address = command.address,
      .addr_type = command.addr_type,
      .uuid = bluetooth::Uuid::From128BitBE(command.uuid.uu),
      .uuid_mask = bluetooth::Uuid::From128BitBE(command.uuid_mask.uu),
      .uuid = command.uuid,
      .uuid_mask = command.uuid_mask,
      .name = name,
      .company = command.company,
      .company_mask = command.company_mask,
@@ -128,23 +127,6 @@ MsftAdvMonitor ConvertAdvMonitor(const RustMsftAdvMonitor& monitor) {
  };
  return converted;
}

::btgatt_filt_param_setup_t ConvertRustFilterParam(const RustGattFilterParam& param) {
  ::btgatt_filt_param_setup_t converted = {
      .feat_seln = param.feat_seln,
      .list_logic_type = param.list_logic_type,
      .filt_logic_type = param.filt_logic_type,
      .rssi_high_thres = param.rssi_high_thres,
      .rssi_low_thres = param.rssi_low_thres,
      .dely_mode = param.delay_mode,
      .found_timeout = param.found_timeout,
      .lost_timeout = param.lost_timeout,
      .found_timeout_cnt = param.found_timeout_count,
      .num_of_tracking_entries = param.num_of_tracking_entries,
  };

  return converted;
}
}  // namespace internal

// ScanningCallbacks implementations
@@ -217,10 +199,9 @@ void BleScannerIntf::OnBatchScanThresholdCrossed(int client_if) {

// BleScannerInterface implementations

void BleScannerIntf::RegisterScanner(RustUuid uuid) {
  bluetooth::Uuid converted = bluetooth::Uuid::From128BitBE(uuid.uu);
void BleScannerIntf::RegisterScanner(Uuid uuid) {
  scanner_intf_->RegisterScanner(
      converted, base::Bind(&BleScannerIntf::OnRegisterCallback, base::Unretained(this), uuid));
      uuid, base::Bind(&BleScannerIntf::OnRegisterCallback, base::Unretained(this), uuid));
}

void BleScannerIntf::Unregister(uint8_t scanner_id) {
@@ -232,9 +213,11 @@ void BleScannerIntf::Scan(bool start) {
}

void BleScannerIntf::ScanFilterParamSetup(
    uint8_t scanner_id, uint8_t action, uint8_t filter_index, RustGattFilterParam filter_param) {
  std::unique_ptr<::btgatt_filt_param_setup_t> converted =
      std::make_unique<::btgatt_filt_param_setup_t>(std::move(internal::ConvertRustFilterParam(filter_param)));
    uint8_t scanner_id,
    uint8_t action,
    uint8_t filter_index,
    btgatt_filt_param_setup_t filter_param) {
  auto converted = std::make_unique<::btgatt_filt_param_setup_t>(std::move(filter_param));

  scanner_intf_->ScanFilterParamSetup(
      scanner_id,
@@ -365,7 +348,7 @@ void BleScannerIntf::SyncTxParameters(RawAddress addr, uint8_t mode, uint16_t sk
  scanner_intf_->SyncTxParameters(addr, mode, skip, timeout, 0 /* place holder */);
}

void BleScannerIntf::OnRegisterCallback(RustUuid uuid, uint8_t scanner_id, uint8_t btm_status) {
void BleScannerIntf::OnRegisterCallback(Uuid uuid, uint8_t scanner_id, uint8_t btm_status) {
  rusty::gdscan_register_callback(uuid, scanner_id, btm_status);
}

Loading