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

Commit 1b49d4a3 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I0d082b14,I868d5eb4,I32c5931e

* changes:
  PyLeAclManager: Implement connection cancel
  RootCanal: Send ConnectionComplete after Cancel
  RootCanal: Disallow configuring ongoing scans
parents 61e5292a ce15d190
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ class PyLeAclManager(Closable):
    def close(self):
        safeClose(self.incoming_connection_event_stream)
        for v in self.outgoing_connection_event_streams.values():
            safeClose(v)
            safeClose(v[0])
        for connection in self.active_connections:
            safeClose(connection)

@@ -98,10 +98,16 @@ class PyLeAclManager(Closable):
        self.listen_for_incoming_connections()
        return self.complete_incoming_connection()

    def cancel_connection(self, token):
        assertThat(token in self.outgoing_connection_event_streams).isTrue()
        pair = self.outgoing_connection_event_streams.pop(token)
        safeClose(pair[0])
        self.le_acl_manager.CancelConnection(pair[1])

    def initiate_connection(self, remote_addr):
        assertThat(self.next_token in self.outgoing_connection_event_streams).isFalse()
        self.outgoing_connection_event_streams[self.next_token] = EventStream(
            self.le_acl_manager.CreateConnection(remote_addr))
            self.le_acl_manager.CreateConnection(remote_addr)), remote_addr
        token = self.next_token
        self.next_token += 1
        return token
@@ -128,5 +134,5 @@ class PyLeAclManager(Closable):

    def complete_outgoing_connection(self, token):
        assertThat(self.outgoing_connection_event_streams[token]).isNotNone()
        event_stream = self.outgoing_connection_event_streams.pop(token)
        event_stream = self.outgoing_connection_event_streams.pop(token)[0]
        return self.complete_connection(event_stream)
+22 −10
Original line number Diff line number Diff line
@@ -1792,6 +1792,14 @@ void DualModeController::LeConnectionCancel(CommandView command) {
  ErrorCode status = link_layer_controller_.SetLeConnect(false);
  send_event_(bluetooth::hci::LeCreateConnectionCancelCompleteBuilder::Create(
      kNumCommandPackets, status));

  send_event_(bluetooth::hci::LeConnectionCompleteBuilder::Create(
      ErrorCode::UNKNOWN_CONNECTION, kReservedHandle,
      bluetooth::hci::Role::CENTRAL,
      bluetooth::hci::AddressType::PUBLIC_DEVICE_ADDRESS,
      bluetooth::hci::Address(), 1 /* connection_interval */,
      2 /* connection_latency */, 3 /* supervision_timeout*/,
      static_cast<bluetooth::hci::ClockAccuracy>(0x00)));
}

void DualModeController::LeReadConnectListSize(CommandView command) {
@@ -1933,6 +1941,8 @@ void DualModeController::LeSetExtendedScanParameters(CommandView command) {
  ASSERT(command_view.GetScanningPhys() == 1);
  ASSERT(parameters.size() == 1);

  auto status = ErrorCode::SUCCESS;
  if (link_layer_controller_.GetLeScanEnable() == OpCode::NONE) {
    link_layer_controller_.SetLeScanType(
        static_cast<uint8_t>(parameters[0].le_scan_type_));
    link_layer_controller_.SetLeScanInterval(parameters[0].le_scan_interval_);
@@ -1940,10 +1950,12 @@ void DualModeController::LeSetExtendedScanParameters(CommandView command) {
    link_layer_controller_.SetLeAddressType(command_view.GetOwnAddressType());
    link_layer_controller_.SetLeScanFilterPolicy(
        static_cast<uint8_t>(command_view.GetScanningFilterPolicy()));
  auto packet =
  } else {
    status = ErrorCode::COMMAND_DISALLOWED;
  }
  send_event_(
      bluetooth::hci::LeSetExtendedScanParametersCompleteBuilder::Create(
          kNumCommandPackets, ErrorCode::SUCCESS);
  send_event_(std::move(packet));
          kNumCommandPackets, status));
}

void DualModeController::LeSetExtendedScanEnable(CommandView command) {
+2 −0
Original line number Diff line number Diff line
@@ -237,6 +237,8 @@ class LinkLayerController {
      bluetooth::hci::Enable enable,
      const std::vector<bluetooth::hci::EnabledSet>& enabled_sets);

  bluetooth::hci::OpCode GetLeScanEnable() { return le_scan_enable_; }

  void SetLeScanEnable(bluetooth::hci::OpCode enabling_opcode) {
    le_scan_enable_ = enabling_opcode;
  }