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

Commit 3c5b7e46 authored by Henri Chataing's avatar Henri Chataing
Browse files

RootCanal: Send advertising PDUs wrapped with RSSI information

Bug: 258075808
Test: m root-canal
Change-Id: I9603e5c6cfde7a041cf1f2f52dcdc05aa40c41f9
parent a8f8b39d
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -1343,7 +1343,11 @@ void LinkLayerController::LeAdvertising() {
        break;
    }

    SendLeLinkLayerPacket(model::packets::LeLegacyAdvertisingPduBuilder::Create(
    SendLeLinkLayerPacketWithRssi(
        legacy_advertiser_.advertising_address.GetAddress(),
        legacy_advertiser_.target_address.GetAddress(),
        properties_.le_advertising_physical_channel_tx_power,
        model::packets::LeLegacyAdvertisingPduBuilder::Create(
            legacy_advertiser_.advertising_address.GetAddress(),
            legacy_advertiser_.target_address.GetAddress(),
            static_cast<model::packets::AddressType>(
@@ -1454,7 +1458,10 @@ void LinkLayerController::LeAdvertising() {
            break;
        }

        SendLeLinkLayerPacket(
        SendLeLinkLayerPacketWithRssi(
            advertiser.advertising_address.GetAddress(),
            advertiser.target_address.GetAddress(),
            advertiser.advertising_tx_power,
            model::packets::LeLegacyAdvertisingPduBuilder::Create(
                advertiser.advertising_address.GetAddress(),
                advertiser.target_address.GetAddress(),
@@ -1464,7 +1471,10 @@ void LinkLayerController::LeAdvertising() {
                    advertiser.target_address.GetAddressType()),
                type, advertiser.advertising_data));
      } else {
        SendLeLinkLayerPacket(
        SendLeLinkLayerPacketWithRssi(
            advertiser.advertising_address.GetAddress(),
            advertiser.target_address.GetAddress(),
            advertiser.advertising_tx_power,
            model::packets::LeExtendedAdvertisingPduBuilder::Create(
                advertiser.advertising_address.GetAddress(),
                advertiser.target_address.GetAddress(),
+25 −19
Original line number Diff line number Diff line
@@ -1349,17 +1349,6 @@ void LinkLayerController::SetExtendedInquiryResponse(
            extended_inquiry_response_.begin());
}

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

#ifdef ROOTCANAL_LMP
LinkLayerController::LinkLayerController(const Address& address,
                                         const ControllerProperties& properties)
@@ -1445,6 +1434,17 @@ void LinkLayerController::SendLinkLayerPacket(
  });
}

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);
  });
}

ErrorCode LinkLayerController::SendLeCommandToRemoteByAddress(
    OpCode opcode, const Address& own_address, const Address& peer_address) {
  switch (opcode) {
@@ -4268,7 +4268,10 @@ 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.
  SendLeLinkLayerPacket(model::packets::LeScanResponseBuilder::Create(
  SendLeLinkLayerPacketWithRssi(
      advertising_address.GetAddress(), scanning_address.GetAddress(),
      properties_.le_advertising_physical_channel_tx_power,
      model::packets::LeScanResponseBuilder::Create(
          advertising_address.GetAddress(), scanning_address.GetAddress(),
          static_cast<model::packets::AddressType>(
              advertising_address.GetAddressType()),
@@ -4350,7 +4353,10 @@ 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.
  SendLeLinkLayerPacket(model::packets::LeScanResponseBuilder::Create(
  SendLeLinkLayerPacketWithRssi(
      advertising_address.GetAddress(), scanning_address.GetAddress(),
      advertiser.advertising_tx_power,
      model::packets::LeScanResponseBuilder::Create(
          advertising_address.GetAddress(), scanning_address.GetAddress(),
          static_cast<model::packets::AddressType>(
              advertising_address.GetAddressType()),
+3 −3
Original line number Diff line number Diff line
@@ -525,12 +525,12 @@ class LinkLayerController {
          initiating_phy_parameters);

 protected:
  void SendLeLinkLayerPacketWithRssi(
      Address source, Address dest, uint8_t rssi,
  void SendLinkLayerPacket(
      std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet);
  void SendLeLinkLayerPacket(
      std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet);
  void SendLinkLayerPacket(
  void SendLeLinkLayerPacketWithRssi(
      Address source_address, Address destination_address, uint8_t rssi,
      std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet);

  void IncomingAclPacket(model::packets::LinkLayerPacketView packet);