Loading tools/rootcanal/model/controller/dual_mode_controller.cc +4 −4 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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}; Loading tools/rootcanal/model/controller/dual_mode_controller.h +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading tools/rootcanal/model/controller/dual_mode_controller_python3.cc +4 −5 Original line number Diff line number Diff line Loading @@ -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()); Loading Loading @@ -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(), Loading @@ -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); }); } Loading tools/rootcanal/model/controller/le_advertiser.cc +9 −15 Original line number Diff line number Diff line Loading @@ -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(), Loading @@ -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_) { Loading Loading @@ -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(), Loading @@ -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(), Loading @@ -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); } } } Loading tools/rootcanal/model/controller/link_layer_controller.cc +18 −53 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); }); } Loading Loading @@ -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(); Loading Loading @@ -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( Loading Loading @@ -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( Loading Loading @@ -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 Loading
tools/rootcanal/model/controller/dual_mode_controller.cc +4 −4 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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}; Loading
tools/rootcanal/model/controller/dual_mode_controller.h +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading
tools/rootcanal/model/controller/dual_mode_controller_python3.cc +4 −5 Original line number Diff line number Diff line Loading @@ -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()); Loading Loading @@ -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(), Loading @@ -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); }); } Loading
tools/rootcanal/model/controller/le_advertiser.cc +9 −15 Original line number Diff line number Diff line Loading @@ -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(), Loading @@ -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_) { Loading Loading @@ -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(), Loading @@ -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(), Loading @@ -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); } } } Loading
tools/rootcanal/model/controller/link_layer_controller.cc +18 −53 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); }); } Loading Loading @@ -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(); Loading Loading @@ -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( Loading Loading @@ -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( Loading Loading @@ -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