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

Commit e6166f09 authored by Henri Chataing's avatar Henri Chataing Committed by Automerger Merge Worker
Browse files

Merge "RootCanal: Pass RSSI information in device Receive / Send methods" am:...

Merge "RootCanal: Pass RSSI information in device Receive / Send methods" am: 02a3e1f2 am: 783cd988

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/2371572



Change-Id: Id35aaa11dc9d995c3843813990765bb5d648cc03
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 363ca977 783cd988
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -42,8 +42,8 @@ std::string DualModeController::GetTypeString() const {
}

void DualModeController::IncomingPacket(
    model::packets::LinkLayerPacketView incoming) {
  link_layer_controller_.IncomingPacket(incoming);
    model::packets::LinkLayerPacketView incoming, int8_t rssi) {
  link_layer_controller_.IncomingPacket(incoming, rssi);
}

void DualModeController::TimerTick() { link_layer_controller_.TimerTick(); }
@@ -83,8 +83,8 @@ DualModeController::DualModeController(const std::string& properties_filename,

  link_layer_controller_.RegisterRemoteChannel(
      [this](std::shared_ptr<model::packets::LinkLayerPacketBuilder> packet,
             Phy::Type phy_type) {
        this->SendLinkLayerPacket(packet, phy_type);
             Phy::Type phy_type, int8_t tx_power) {
        this->SendLinkLayerPacket(packet, phy_type, tx_power);
      });

  std::array<uint8_t, 64> supported_commands{0};
+2 −2
Original line number Diff line number Diff line
@@ -66,8 +66,8 @@ class DualModeController
  // Device methods.
  virtual std::string GetTypeString() const override;

  virtual void IncomingPacket(
      model::packets::LinkLayerPacketView incoming) override;
  virtual void IncomingPacket(model::packets::LinkLayerPacketView incoming,
                              int8_t rssi) override;

  virtual void TimerTick() override;
  virtual void Close() override;
+4 −5
Original line number Diff line number Diff line
@@ -77,8 +77,7 @@ class BaseController : public DualModeController {

  virtual void SendLinkLayerPacket(
      std::shared_ptr<model::packets::LinkLayerPacketBuilder> packet,
      Phy::Type phy_type_) override {
    (void)phy_type_;
      Phy::Type /*phy_type*/, int8_t /*tx_power*/) override {
    auto bytes = std::make_shared<std::vector<uint8_t>>();
    bluetooth::packet::BitInserter inserter(*bytes);
    bytes->reserve(packet->size());
@@ -212,11 +211,11 @@ PYBIND11_MODULE(lib_rootcanal_python3, m) {
        }
      });

  // Implement method BaseController.receive_hci which
  // Implement method BaseController.send_ll which
  // injects LL packets into the controller as if sent over the air.
  basic_controller.def(
      "send_ll", [](std::shared_ptr<rootcanal::BaseController> controller,
                    py::bytes data) {
                    py::bytes data, int rssi) {
        std::string data_str = data;
        std::shared_ptr<std::vector<uint8_t>> bytes =
            std::make_shared<std::vector<uint8_t>>(data_str.begin(),
@@ -230,7 +229,7 @@ PYBIND11_MODULE(lib_rootcanal_python3, m) {
          std::cerr << "Dropping malformed LL packet" << std::endl;
          return;
        }
        controller->IncomingPacket(std::move(packet));
        controller->IncomingPacket(std::move(packet), rssi);
      });
}

+9 −15
Original line number Diff line number Diff line
@@ -1357,10 +1357,7 @@ void LinkLayerController::LeAdvertising() {
        break;
    }

    SendLeLinkLayerPacketWithRssi(
        legacy_advertiser_.advertising_address.GetAddress(),
        legacy_advertiser_.target_address.GetAddress(),
        properties_.le_advertising_physical_channel_tx_power,
    SendLeLinkLayerPacket(
        model::packets::LeLegacyAdvertisingPduBuilder::Create(
            legacy_advertiser_.advertising_address.GetAddress(),
            legacy_advertiser_.target_address.GetAddress(),
@@ -1370,7 +1367,8 @@ void LinkLayerController::LeAdvertising() {
                legacy_advertiser_.target_address.GetAddressType()),
            type,
            attach_advertising_data ? legacy_advertiser_.advertising_data
                                    : std::vector<uint8_t>{}));
                                    : std::vector<uint8_t>{}),
        properties_.le_advertising_physical_channel_tx_power);
  }

  for (auto& [_, advertiser] : extended_advertisers_) {
@@ -1472,10 +1470,7 @@ void LinkLayerController::LeAdvertising() {
            break;
        }

        SendLeLinkLayerPacketWithRssi(
            advertiser.advertising_address.GetAddress(),
            advertiser.target_address.GetAddress(),
            advertiser.advertising_tx_power,
        SendLeLinkLayerPacket(
            model::packets::LeLegacyAdvertisingPduBuilder::Create(
                advertiser.advertising_address.GetAddress(),
                advertiser.target_address.GetAddress(),
@@ -1483,12 +1478,10 @@ void LinkLayerController::LeAdvertising() {
                    advertiser.advertising_address.GetAddressType()),
                static_cast<model::packets::AddressType>(
                    advertiser.target_address.GetAddressType()),
                type, advertiser.advertising_data));
                type, advertiser.advertising_data),
            advertiser.advertising_tx_power);
      } else {
        SendLeLinkLayerPacketWithRssi(
            advertiser.advertising_address.GetAddress(),
            advertiser.target_address.GetAddress(),
            advertiser.advertising_tx_power,
        SendLeLinkLayerPacket(
            model::packets::LeExtendedAdvertisingPduBuilder::Create(
                advertiser.advertising_address.GetAddress(),
                advertiser.target_address.GetAddress(),
@@ -1504,7 +1497,8 @@ void LinkLayerController::LeAdvertising() {
                    advertiser.primary_advertising_phy),
                static_cast<model::packets::SecondaryPhyType>(
                    advertiser.secondary_advertising_phy),
                advertiser.advertising_data));
                advertiser.advertising_data),
            advertiser.advertising_tx_power);
      }
    }
  }
+18 −53
Original line number Diff line number Diff line
@@ -48,16 +48,6 @@ constexpr uint16_t kNumCommandPackets = 0x01;

constexpr milliseconds kNoDelayMs(0);

// TODO: Model Rssi?
static uint8_t GetRssi() {
  static uint8_t rssi = 0;
  rssi += 5;
  if (rssi > 128) {
    rssi = rssi % 7;
  }
  return -(rssi);
}

const Address& LinkLayerController::GetAddress() const { return address_; }

AddressWithType PeerDeviceAddress(Address address,
@@ -1428,31 +1418,22 @@ LinkLayerController::~LinkLayerController() {
}

void LinkLayerController::SendLeLinkLayerPacket(
    std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet) {
    std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet,
    int8_t tx_power) {
  std::shared_ptr<model::packets::LinkLayerPacketBuilder> shared_packet =
      std::move(packet);
  ScheduleTask(kNoDelayMs, [this, shared_packet]() {
    send_to_remote_(shared_packet, Phy::Type::LOW_ENERGY);
  ScheduleTask(kNoDelayMs, [this, shared_packet, tx_power]() {
    send_to_remote_(shared_packet, Phy::Type::LOW_ENERGY, tx_power);
  });
}

void LinkLayerController::SendLinkLayerPacket(
    std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet) {
    std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet,
    int8_t tx_power) {
  std::shared_ptr<model::packets::LinkLayerPacketBuilder> shared_packet =
      std::move(packet);
  ScheduleTask(kNoDelayMs, [this, shared_packet]() {
    send_to_remote_(shared_packet, Phy::Type::BR_EDR);
  });
}

void LinkLayerController::SendLeLinkLayerPacketWithRssi(
    Address source_address, Address destination_address, uint8_t rssi,
    std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet) {
  std::shared_ptr<model::packets::RssiWrapperBuilder> shared_packet =
      model::packets::RssiWrapperBuilder::Create(
          source_address, destination_address, rssi, std::move(packet));
  ScheduleTask(kNoDelayMs, [this, shared_packet]() {
    send_to_remote_(shared_packet, Phy::Type::LOW_ENERGY);
  ScheduleTask(kNoDelayMs, [this, shared_packet, tx_power]() {
    send_to_remote_(shared_packet, Phy::Type::BR_EDR, tx_power);
  });
}

@@ -1602,21 +1583,7 @@ ErrorCode LinkLayerController::SendScoToRemote(
}

void LinkLayerController::IncomingPacket(
    model::packets::LinkLayerPacketView incoming) {
  ASSERT(incoming.IsValid());
  if (incoming.GetType() == PacketType::RSSI_WRAPPER) {
    auto rssi_wrapper = model::packets::RssiWrapperView::Create(incoming);
    ASSERT(rssi_wrapper.IsValid());
    auto wrapped =
        model::packets::LinkLayerPacketView::Create(rssi_wrapper.GetPayload());
    IncomingPacketWithRssi(wrapped, rssi_wrapper.GetRssi());
  } else {
    IncomingPacketWithRssi(incoming, GetRssi());
  }
}

void LinkLayerController::IncomingPacketWithRssi(
    model::packets::LinkLayerPacketView incoming, uint8_t rssi) {
    model::packets::LinkLayerPacketView incoming, int8_t rssi) {
  ASSERT(incoming.IsValid());
  auto destination_address = incoming.GetDestinationAddress();

@@ -4284,14 +4251,13 @@ void LinkLayerController::ProcessIncomingLegacyScanRequest(
  // device address (AdvA field) in the SCAN_RSP PDU shall be the same as
  // the advertiser’s device address (AdvA field) in the SCAN_REQ PDU to
  // which it is responding.
  SendLeLinkLayerPacketWithRssi(
      advertising_address.GetAddress(), scanning_address.GetAddress(),
      properties_.le_advertising_physical_channel_tx_power,
  SendLeLinkLayerPacket(
      model::packets::LeScanResponseBuilder::Create(
          advertising_address.GetAddress(), scanning_address.GetAddress(),
          static_cast<model::packets::AddressType>(
              advertising_address.GetAddressType()),
          legacy_advertiser_.scan_response_data));
          legacy_advertiser_.scan_response_data),
      properties_.le_advertising_physical_channel_tx_power);
}

void LinkLayerController::ProcessIncomingExtendedScanRequest(
@@ -4369,14 +4335,13 @@ void LinkLayerController::ProcessIncomingExtendedScanRequest(
  // device address (AdvA field) in the SCAN_RSP PDU shall be the same as
  // the advertiser’s device address (AdvA field) in the SCAN_REQ PDU to
  // which it is responding.
  SendLeLinkLayerPacketWithRssi(
      advertising_address.GetAddress(), scanning_address.GetAddress(),
      advertiser.advertising_tx_power,
  SendLeLinkLayerPacket(
      model::packets::LeScanResponseBuilder::Create(
          advertising_address.GetAddress(), scanning_address.GetAddress(),
          static_cast<model::packets::AddressType>(
              advertising_address.GetAddressType()),
          advertiser.scan_response_data));
          advertiser.scan_response_data),
      advertiser.advertising_tx_power);
}

void LinkLayerController::IncomingLeScanPacket(
@@ -4813,9 +4778,9 @@ void LinkLayerController::RegisterIsoChannel(
}

void LinkLayerController::RegisterRemoteChannel(
    const std::function<void(
        std::shared_ptr<model::packets::LinkLayerPacketBuilder>, Phy::Type)>&
        send_to_remote) {
    const std::function<
        void(std::shared_ptr<model::packets::LinkLayerPacketBuilder>, Phy::Type,
             int8_t)>& send_to_remote) {
  send_to_remote_ = send_to_remote;
}

Loading