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

Commit 09051ad9 authored by Myles Watson's avatar Myles Watson
Browse files

RootCanal: ReadDefaultLinkPolicySettings

Bug: 145832107
Test: ./cert/run --host && bluetooth_test_gd
Change-Id: I3c04cd9cb40f8b95ea1fdbb90ce8768e2d7c869c
parent 1898c2dc
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -147,6 +147,8 @@ DualModeController::DualModeController(const std::string& properties_filename, u
  SET_HANDLER(OpCode::SNIFF_MODE, SniffMode);
  SET_HANDLER(OpCode::EXIT_SNIFF_MODE, ExitSniffMode);
  SET_HANDLER(OpCode::QOS_SETUP, QosSetup);
  SET_HANDLER(OpCode::READ_DEFAULT_LINK_POLICY_SETTINGS,
              ReadDefaultLinkPolicySettings);
  SET_HANDLER(OpCode::WRITE_DEFAULT_LINK_POLICY_SETTINGS,
              WriteDefaultLinkPolicySettings);
  SET_HANDLER(OpCode::FLOW_SPECIFICATION, FlowSpecification);
@@ -1010,14 +1012,28 @@ void DualModeController::QosSetup(CommandPacketView command) {
  send_event_(std::move(packet));
}

void DualModeController::ReadDefaultLinkPolicySettings(
    CommandPacketView command) {
  auto command_view = gd_hci::ReadDefaultLinkPolicySettingsView::Create(
      gd_hci::ConnectionManagementCommandView::Create(command));
  ASSERT(command_view.IsValid());
  uint16_t settings = link_layer_controller_.ReadDefaultLinkPolicySettings();
  auto packet =
      bluetooth::hci::ReadDefaultLinkPolicySettingsCompleteBuilder::Create(
          kNumCommandPackets, ErrorCode::SUCCESS, settings);
  send_event_(std::move(packet));
}

void DualModeController::WriteDefaultLinkPolicySettings(
    CommandPacketView command) {
  auto command_view = gd_hci::WriteDefaultLinkPolicySettingsView::Create(
      gd_hci::ConnectionManagementCommandView::Create(command));
  ASSERT(command_view.IsValid());
  ErrorCode status = link_layer_controller_.WriteDefaultLinkPolicySettings(
      command_view.GetDefaultLinkPolicySettings());
  auto packet =
      bluetooth::hci::WriteDefaultLinkPolicySettingsCompleteBuilder::Create(
          kNumCommandPackets, ErrorCode::SUCCESS);
          kNumCommandPackets, status);
  send_event_(std::move(packet));
}

+3 −0
Original line number Diff line number Diff line
@@ -205,6 +205,9 @@ class DualModeController : public Device {
  // 7.2.10
  void WriteLinkPolicySettings(CommandPacketView args);

  // 7.2.11
  void ReadDefaultLinkPolicySettings(CommandPacketView args);

  // 7.2.12
  void WriteDefaultLinkPolicySettings(CommandPacketView args);

+13 −1
Original line number Diff line number Diff line
@@ -904,7 +904,6 @@ void LinkLayerController::IncomingLeConnectCompletePacket(

void LinkLayerController::IncomingLeScanPacket(
    model::packets::LinkLayerPacketView incoming) {

  auto to_send = model::packets::LeScanResponseBuilder::Create(
      properties_.GetLeAddress(), incoming.GetSourceAddress(),
      static_cast<model::packets::AddressType>(properties_.GetLeAddressType()),
@@ -1616,6 +1615,19 @@ ErrorCode LinkLayerController::WriteLinkPolicySettings(uint16_t handle,
  return ErrorCode::SUCCESS;
}

ErrorCode LinkLayerController::WriteDefaultLinkPolicySettings(
    uint16_t settings) {
  if (settings > 7 /* Sniff + Hold + Role switch */) {
    return ErrorCode::INVALID_HCI_COMMAND_PARAMETERS;
  }
  default_link_policy_settings_ = settings;
  return ErrorCode::SUCCESS;
}

uint16_t LinkLayerController::ReadDefaultLinkPolicySettings() {
  return default_link_policy_settings_;
}

ErrorCode LinkLayerController::FlowSpecification(
    uint16_t handle, uint8_t flow_direction, uint8_t service_type,
    uint32_t /* token_rate */, uint32_t /* token_bucket_size */,
+3 −0
Original line number Diff line number Diff line
@@ -243,6 +243,8 @@ class LinkLayerController {
                              uint32_t token_bucket_size,
                              uint32_t peak_bandwidth, uint32_t access_latency);
  ErrorCode WriteLinkSupervisionTimeout(uint16_t handle, uint16_t timeout);
  ErrorCode WriteDefaultLinkPolicySettings(uint16_t settings);
  uint16_t ReadDefaultLinkPolicySettings();

 protected:
  void SendLeLinkLayerPacket(
@@ -369,6 +371,7 @@ class LinkLayerController {
  AsyncTaskId inquiry_timer_task_id_ = kInvalidTaskId;
  uint64_t inquiry_lap_{};
  uint8_t inquiry_max_responses_{};
  uint16_t default_link_policy_settings_ = 0;

  bool page_scans_enabled_{false};
  bool inquiry_scans_enabled_{false};