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

Commit 8f6341a5 authored by Myles Watson's avatar Myles Watson
Browse files

Controller functions

Bug: 197011305
Test: cert/run ControllerTest
Tag: #feature
BYPASS_LONG_LINES_REASON: Bluetooth likes 120 lines

Change-Id: I3329f7fc77ead53f8d8f6d6538cfa5c0dc0e8f79
parent 6411ea06
Loading
Loading
Loading
Loading
+27 −6
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ struct Controller::impl {
      le_resolving_list_size_ = 0;
    }

    if (is_supported(OpCode::LE_READ_MAXIMUM_DATA_LENGTH) && module_.SupportsBlePacketExtension()) {
    if (is_supported(OpCode::LE_READ_MAXIMUM_DATA_LENGTH) && module_.SupportsBleDataPacketLengthExtension()) {
      hci_->EnqueueCommand(LeReadMaximumDataLengthBuilder::Create(),
                           handler->BindOnceOn(this, &Controller::impl::le_read_maximum_data_length_handler));
    } else {
@@ -112,7 +112,7 @@ struct Controller::impl {
            handler->BindOnceOn(this, &Controller::impl::write_secure_connections_host_support_complete_handler));
      }
    }
    if (is_supported(OpCode::LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH) && module_.SupportsBlePacketExtension()) {
    if (is_supported(OpCode::LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH) && module_.SupportsBleDataPacketLengthExtension()) {
      hci_->EnqueueCommand(
          LeReadSuggestedDefaultDataLengthBuilder::Create(),
          handler->BindOnceOn(this, &Controller::impl::le_read_suggested_default_data_length_handler));
@@ -946,21 +946,42 @@ LOCAL_FEATURE_ACCESSOR(SupportsBle, 0, 38)
    return GetLocalLeFeatures() & BIT(bit);  \
  }

LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectionParameterRequest, 1)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectionParametersRequest, 2)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePeripheralInitiatedFeatureExchange, 3)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePacketExtension, 5)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleEncryption, 0)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectionParametersRequest, 1)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleExtendedReject, 2)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePeripheralInitiatedFeaturesExchange, 3)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePing, 4)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleDataPacketLengthExtension, 5)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePrivacy, 6)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleExtendedScannerFilterPolicies, 7)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBle2mPhy, 8)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleStableModulationIndexTx, 9)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleStableModulationIndexRx, 10)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleCodedPhy, 11)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleExtendedAdvertising, 12)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePeriodicAdvertising, 13)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleChannelSelectionAlgorithm2, 14)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePowerClass1, 15)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleMinimumUsedChannels, 16)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectionCteRequest, 17)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectionCteResponse, 18)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectionlessCteTransmitter, 19)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectionlessCteReceiver, 20)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleAntennaSwitchingDuringCteTx, 21)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleAntennaSwitchingDuringCteRx, 22)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleReceivingConstantToneExtensions, 23)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePeriodicAdvertisingSyncTransferSender, 24)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePeriodicAdvertisingSyncTransferRecipient, 25)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleSleepClockAccuracyUpdates, 26)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleRemotePublicKeyValidation, 27)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectedIsochronousStreamCentral, 28)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleConnectedIsochronousStreamPeripheral, 29)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleIsochronousBroadcaster, 30)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleSynchronizedReceiver, 31)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBleIsochronousChannelsHostSupport, 32)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePowerControlRequest, 33)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePowerChangeIndication, 34)
LOCAL_LE_FEATURE_ACCESSOR(SupportsBlePathLossMonitoring, 35)

uint64_t Controller::GetLocalFeatures(uint8_t page_number) const {
  if (page_number <= impl_->maximum_page_number_) {
+26 −5
Original line number Diff line number Diff line
@@ -72,23 +72,44 @@ class Controller : public Module {
  virtual bool SupportsNonFlushablePb() const;
  virtual bool SupportsSniffSubrating() const;
  virtual bool SupportsEncryptionPause() const;

  virtual bool SupportsBle() const;
  virtual bool SupportsBlePrivacy() const;
  virtual bool SupportsBlePacketExtension() const;

  virtual bool SupportsBleEncryption() const;
  virtual bool SupportsBleConnectionParametersRequest() const;
  virtual bool SupportsBleExtendedReject() const;
  virtual bool SupportsBlePeripheralInitiatedFeaturesExchange() const;
  virtual bool SupportsBlePing() const;
  virtual bool SupportsBleDataPacketLengthExtension() const;
  virtual bool SupportsBlePrivacy() const;
  virtual bool SupportsBleExtendedScannerFilterPolicies() const;
  virtual bool SupportsBle2mPhy() const;
  virtual bool SupportsBleStableModulationIndexTx() const;
  virtual bool SupportsBleStableModulationIndexRx() const;
  virtual bool SupportsBleCodedPhy() const;
  virtual bool SupportsBleExtendedAdvertising() const;
  virtual bool SupportsBlePeriodicAdvertising() const;
  virtual bool SupportsBlePeripheralInitiatedFeatureExchange() const;
  virtual bool SupportsBleConnectionParameterRequest() const;
  virtual bool SupportsBleChannelSelectionAlgorithm2() const;
  virtual bool SupportsBlePowerClass1() const;
  virtual bool SupportsBleMinimumUsedChannels() const;
  virtual bool SupportsBleConnectionCteRequest() const;
  virtual bool SupportsBleConnectionCteResponse() const;
  virtual bool SupportsBleConnectionlessCteTransmitter() const;
  virtual bool SupportsBleConnectionlessCteReceiver() const;
  virtual bool SupportsBleAntennaSwitchingDuringCteTx() const;
  virtual bool SupportsBleAntennaSwitchingDuringCteRx() const;
  virtual bool SupportsBleReceivingConstantToneExtensions() const;
  virtual bool SupportsBlePeriodicAdvertisingSyncTransferSender() const;
  virtual bool SupportsBlePeriodicAdvertisingSyncTransferRecipient() const;
  virtual bool SupportsBleSleepClockAccuracyUpdates() const;
  virtual bool SupportsBleRemotePublicKeyValidation() const;
  virtual bool SupportsBleConnectedIsochronousStreamCentral() const;
  virtual bool SupportsBleConnectedIsochronousStreamPeripheral() const;
  virtual bool SupportsBleIsochronousBroadcaster() const;
  virtual bool SupportsBleSynchronizedReceiver() const;
  virtual bool SupportsBleIsochronousChannelsHostSupport() const;
  virtual bool SupportsBlePowerControlRequest() const;
  virtual bool SupportsBlePowerChangeIndication() const;
  virtual bool SupportsBlePathLossMonitoring() const;

  virtual uint16_t GetAclPacketLength() const;

+87 −0
Original line number Diff line number Diff line
@@ -60,6 +60,93 @@ class ControllerFacadeService : public ControllerFacade::Service {
    return ::grpc::Status::OK;
  }

  ::grpc::Status IsSupportedCommand(
      ::grpc::ServerContext* context, const OpCodeMsg* request, SupportedMsg* response) override {
    bool ret = controller_->IsSupported(static_cast<OpCode>(request->op_code()));
    response->set_supported(ret);
    return ::grpc::Status::OK;
  }

#define SUPPORTED_API(name)                                                                                        \
  ::grpc::Status name(                                                                                             \
      ::grpc::ServerContext* context, const ::google::protobuf::Empty* request, SupportedMsg* response) override { \
    response->set_supported(controller_->name());                                                                  \
    return ::grpc::Status::OK;                                                                                     \
  }

  SUPPORTED_API(SupportsSimplePairing)
  SUPPORTED_API(SupportsSecureConnections)
  SUPPORTED_API(SupportsSimultaneousLeBrEdr)
  SUPPORTED_API(SupportsInterlacedInquiryScan)
  SUPPORTED_API(SupportsRssiWithInquiryResults)
  SUPPORTED_API(SupportsExtendedInquiryResponse)
  SUPPORTED_API(SupportsRoleSwitch)
  SUPPORTED_API(Supports3SlotPackets)
  SUPPORTED_API(Supports5SlotPackets)
  SUPPORTED_API(SupportsClassic2mPhy)
  SUPPORTED_API(SupportsClassic3mPhy)
  SUPPORTED_API(Supports3SlotEdrPackets)
  SUPPORTED_API(Supports5SlotEdrPackets)
  SUPPORTED_API(SupportsSco)
  SUPPORTED_API(SupportsHv2Packets)
  SUPPORTED_API(SupportsHv3Packets)
  SUPPORTED_API(SupportsEv3Packets)
  SUPPORTED_API(SupportsEv4Packets)
  SUPPORTED_API(SupportsEv5Packets)
  SUPPORTED_API(SupportsEsco2mPhy)
  SUPPORTED_API(SupportsEsco3mPhy)
  SUPPORTED_API(Supports3SlotEscoEdrPackets)
  SUPPORTED_API(SupportsHoldMode)
  SUPPORTED_API(SupportsSniffMode)
  SUPPORTED_API(SupportsParkMode)
  SUPPORTED_API(SupportsNonFlushablePb)
  SUPPORTED_API(SupportsSniffSubrating)
  SUPPORTED_API(SupportsEncryptionPause)
  SUPPORTED_API(SupportsBle)
  SUPPORTED_API(SupportsBleEncryption)
  SUPPORTED_API(SupportsBleConnectionParametersRequest)
  SUPPORTED_API(SupportsBleExtendedReject)
  SUPPORTED_API(SupportsBlePeripheralInitiatedFeaturesExchange)
  SUPPORTED_API(SupportsBlePing)
  SUPPORTED_API(SupportsBleDataPacketLengthExtension)
  SUPPORTED_API(SupportsBlePrivacy)
  SUPPORTED_API(SupportsBleExtendedScannerFilterPolicies)
  SUPPORTED_API(SupportsBle2mPhy)
  SUPPORTED_API(SupportsBleStableModulationIndexTx)
  SUPPORTED_API(SupportsBleStableModulationIndexRx)
  SUPPORTED_API(SupportsBleCodedPhy)
  SUPPORTED_API(SupportsBleExtendedAdvertising)
  SUPPORTED_API(SupportsBlePeriodicAdvertising)
  SUPPORTED_API(SupportsBleChannelSelectionAlgorithm2)
  SUPPORTED_API(SupportsBlePowerClass1)
  SUPPORTED_API(SupportsBleMinimumUsedChannels)
  SUPPORTED_API(SupportsBleConnectionCteRequest)
  SUPPORTED_API(SupportsBleConnectionCteResponse)
  SUPPORTED_API(SupportsBleConnectionlessCteTransmitter)
  SUPPORTED_API(SupportsBleConnectionlessCteReceiver)
  SUPPORTED_API(SupportsBleAntennaSwitchingDuringCteTx)
  SUPPORTED_API(SupportsBleAntennaSwitchingDuringCteRx)
  SUPPORTED_API(SupportsBleReceivingConstantToneExtensions)
  SUPPORTED_API(SupportsBlePeriodicAdvertisingSyncTransferSender)
  SUPPORTED_API(SupportsBlePeriodicAdvertisingSyncTransferRecipient)
  SUPPORTED_API(SupportsBleSleepClockAccuracyUpdates)
  SUPPORTED_API(SupportsBleRemotePublicKeyValidation)
  SUPPORTED_API(SupportsBleConnectedIsochronousStreamCentral)
  SUPPORTED_API(SupportsBleConnectedIsochronousStreamPeripheral)
  SUPPORTED_API(SupportsBleIsochronousBroadcaster)
  SUPPORTED_API(SupportsBleSynchronizedReceiver)
  SUPPORTED_API(SupportsBleIsochronousChannelsHostSupport)
  SUPPORTED_API(SupportsBlePowerControlRequest)
  SUPPORTED_API(SupportsBlePowerChangeIndication)
  SUPPORTED_API(SupportsBlePathLossMonitoring)

  ::grpc::Status GetLeNumberOfSupportedAdvertisingSets(
      ::grpc::ServerContext* context, const ::google::protobuf::Empty* request, SingleValueMsg* response) override {
    uint8_t ret = controller_->GetLeNumberOfSupportedAdverisingSets();
    response->set_value(ret);
    return ::grpc::Status::OK;
  }

 private:
  Controller* controller_;
};
+79 −0
Original line number Diff line number Diff line
@@ -8,6 +8,73 @@ service ControllerFacade {
  rpc GetMacAddress(google.protobuf.Empty) returns (AddressMsg) {}
  rpc WriteLocalName(NameMsg) returns (google.protobuf.Empty) {}
  rpc GetLocalName(google.protobuf.Empty) returns (NameMsg) {}
  rpc IsSupportedCommand(OpCodeMsg) returns (SupportedMsg) {}
  rpc GetLeNumberOfSupportedAdvertisingSets(google.protobuf.Empty) returns (SingleValueMsg) {}
  rpc SupportsSimplePairing(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsSecureConnections(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsSimultaneousLeBrEdr(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsInterlacedInquiryScan(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsRssiWithInquiryResults(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsExtendedInquiryResponse(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsRoleSwitch(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc Supports3SlotPackets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc Supports5SlotPackets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsClassic2mPhy(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsClassic3mPhy(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc Supports3SlotEdrPackets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc Supports5SlotEdrPackets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsSco(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsHv2Packets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsHv3Packets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsEv3Packets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsEv4Packets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsEv5Packets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsEsco2mPhy(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsEsco3mPhy(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc Supports3SlotEscoEdrPackets(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsHoldMode(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsSniffMode(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsParkMode(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsNonFlushablePb(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsSniffSubrating(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsEncryptionPause(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBle(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleEncryption(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleConnectionParametersRequest(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleExtendedReject(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePeripheralInitiatedFeaturesExchange(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePing(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleDataPacketLengthExtension(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePrivacy(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleExtendedScannerFilterPolicies(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBle2mPhy(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleStableModulationIndexTx(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleStableModulationIndexRx(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleCodedPhy(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleExtendedAdvertising(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePeriodicAdvertising(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleChannelSelectionAlgorithm2(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePowerClass1(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleMinimumUsedChannels(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleConnectionCteRequest(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleConnectionCteResponse(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleConnectionlessCteTransmitter(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleConnectionlessCteReceiver(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleAntennaSwitchingDuringCteTx(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleAntennaSwitchingDuringCteRx(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleReceivingConstantToneExtensions(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePeriodicAdvertisingSyncTransferSender(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePeriodicAdvertisingSyncTransferRecipient(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleSleepClockAccuracyUpdates(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleRemotePublicKeyValidation(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleConnectedIsochronousStreamCentral(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleConnectedIsochronousStreamPeripheral(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleIsochronousBroadcaster(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleSynchronizedReceiver(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBleIsochronousChannelsHostSupport(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePowerControlRequest(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePowerChangeIndication(google.protobuf.Empty) returns (SupportedMsg) {}
  rpc SupportsBlePathLossMonitoring(google.protobuf.Empty) returns (SupportedMsg) {}
}

message AddressMsg {
@@ -17,3 +84,15 @@ message AddressMsg {
message NameMsg {
  bytes name = 1;
}

message OpCodeMsg {
  uint32 op_code = 1;
}

message SupportedMsg {
  bool supported = 1;
}

message SingleValueMsg {
  uint64 value = 1;
}
 No newline at end of file
+3 −3
Original line number Diff line number Diff line
@@ -178,7 +178,7 @@ MAP_TO_GD(supports_encryption_pause, SupportsEncryptionPause)

MAP_TO_GD(supports_ble, SupportsBle)
MAP_TO_GD(supports_privacy, SupportsBlePrivacy)
MAP_TO_GD(supports_packet_extension, SupportsBlePacketExtension)
MAP_TO_GD(supports_packet_extension, SupportsBleDataPacketLengthExtension)
MAP_TO_GD(supports_connection_parameters_request,
          SupportsBleConnectionParametersRequest)
MAP_TO_GD(supports_ble_2m_phy, SupportsBle2mPhy)
@@ -186,9 +186,9 @@ MAP_TO_GD(supports_ble_coded_phy, SupportsBleCodedPhy)
MAP_TO_GD(supports_extended_advertising, SupportsBleExtendedAdvertising)
MAP_TO_GD(supports_periodic_advertising, SupportsBlePeriodicAdvertising)
MAP_TO_GD(supports_peripheral_initiated_feature_exchange,
          SupportsBlePeripheralInitiatedFeatureExchange)
          SupportsBlePeripheralInitiatedFeaturesExchange)
MAP_TO_GD(supports_connection_parameter_request,
          SupportsBleConnectionParameterRequest)
          SupportsBleConnectionParametersRequest)

MAP_TO_GD(supports_periodic_advertising_sync_transfer_sender,
          SupportsBlePeriodicAdvertisingSyncTransferSender)