diff --git a/tools/rootcanal/model/controller/le_advertiser.cc b/tools/rootcanal/model/controller/le_advertiser.cc index 732d1c2abfa19bbf5a716bcf64f8c86e3d3ffec0..22548eccb9730a9536e0b0d047182520aeb86e04 100644 --- a/tools/rootcanal/model/controller/le_advertiser.cc +++ b/tools/rootcanal/model/controller/le_advertiser.cc @@ -1343,16 +1343,20 @@ void LinkLayerController::LeAdvertising() { break; } - SendLeLinkLayerPacket(model::packets::LeLegacyAdvertisingPduBuilder::Create( + SendLeLinkLayerPacketWithRssi( legacy_advertiser_.advertising_address.GetAddress(), legacy_advertiser_.target_address.GetAddress(), - static_cast<model::packets::AddressType>( - legacy_advertiser_.advertising_address.GetAddressType()), - static_cast<model::packets::AddressType>( - legacy_advertiser_.target_address.GetAddressType()), - type, - attach_advertising_data ? legacy_advertiser_.advertising_data - : std::vector<uint8_t>{})); + 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>( + legacy_advertiser_.advertising_address.GetAddressType()), + static_cast<model::packets::AddressType>( + legacy_advertiser_.target_address.GetAddressType()), + type, + attach_advertising_data ? legacy_advertiser_.advertising_data + : std::vector<uint8_t>{})); } for (auto& [_, advertiser] : extended_advertisers_) { @@ -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(), diff --git a/tools/rootcanal/model/controller/link_layer_controller.cc b/tools/rootcanal/model/controller/link_layer_controller.cc index 7c87b5a941987881e76af80efbc4113db6d0d316..29ba90cab7a0e337478d7bc5e04a3e3f069ded9e 100644 --- a/tools/rootcanal/model/controller/link_layer_controller.cc +++ b/tools/rootcanal/model/controller/link_layer_controller.cc @@ -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,11 +4268,14 @@ 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(), - static_cast<model::packets::AddressType>( - advertising_address.GetAddressType()), - legacy_advertiser_.scan_response_data)); + 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()), + legacy_advertiser_.scan_response_data)); } void LinkLayerController::ProcessIncomingExtendedScanRequest( @@ -4350,11 +4353,14 @@ 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(), - static_cast<model::packets::AddressType>( - advertising_address.GetAddressType()), - advertiser.scan_response_data)); + advertiser.advertising_tx_power, + model::packets::LeScanResponseBuilder::Create( + advertising_address.GetAddress(), scanning_address.GetAddress(), + static_cast<model::packets::AddressType>( + advertising_address.GetAddressType()), + advertiser.scan_response_data)); } void LinkLayerController::IncomingLeScanPacket( diff --git a/tools/rootcanal/model/controller/link_layer_controller.h b/tools/rootcanal/model/controller/link_layer_controller.h index a21bcb8eead1e71e0cf40a4f7074fcc2aa6070b5..c9cfdf73d0e94e4c8c9d57d95e05b291f4518637 100644 --- a/tools/rootcanal/model/controller/link_layer_controller.h +++ b/tools/rootcanal/model/controller/link_layer_controller.h @@ -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);