Loading system/gd/hci/controller.cc +0 −3 Original line number Diff line number Diff line Loading @@ -777,8 +777,6 @@ struct Controller::impl { return vendor_capabilities_.total_scan_results_storage_ != 0x00; case OpCode::LE_ADV_FILTER: return vendor_capabilities_.filtering_support_ == 0x01; case OpCode::LE_TRACK_ADV: return vendor_capabilities_.total_num_of_advt_tracked_ > 0; case OpCode::LE_ENERGY_INFO: return vendor_capabilities_.activity_energy_info_support_ == 0x01; case OpCode::LE_EXTENDED_SCAN_PARAMS: Loading @@ -790,7 +788,6 @@ struct Controller::impl { case OpCode::CONTROLLER_BQR: return vendor_capabilities_.bluetooth_quality_report_support_ == 0x01; // undefined in local_supported_commands_ case OpCode::CREATE_NEW_UNIT_KEY: case OpCode::READ_LOCAL_SUPPORTED_COMMANDS: return true; case OpCode::NONE: Loading system/gd/hci/controller_test.cc +0 −4 Original line number Diff line number Diff line Loading @@ -394,7 +394,6 @@ TEST_F(ControllerTest, is_supported_test) { TEST_F(ControllerTest, feature_spec_version_055_test) { EXPECT_EQ(controller_->GetVendorCapabilities().version_supported_, 55); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_MULTI_ADVT)); EXPECT_FALSE(controller_->IsSupported(OpCode::LE_TRACK_ADV)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_DEBUG_INFO)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_A2DP_OPCODE)); feature_spec_version = 95; Loading @@ -403,7 +402,6 @@ TEST_F(ControllerTest, feature_spec_version_055_test) { TEST_F(ControllerTest, feature_spec_version_095_test) { EXPECT_EQ(controller_->GetVendorCapabilities().version_supported_, 95); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_MULTI_ADVT)); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_TRACK_ADV)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_DEBUG_INFO)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_A2DP_OPCODE)); feature_spec_version = 96; Loading @@ -412,7 +410,6 @@ TEST_F(ControllerTest, feature_spec_version_095_test) { TEST_F(ControllerTest, feature_spec_version_096_test) { EXPECT_EQ(controller_->GetVendorCapabilities().version_supported_, 96); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_MULTI_ADVT)); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_TRACK_ADV)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_DEBUG_INFO)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_A2DP_OPCODE)); feature_spec_version = 98; Loading @@ -421,7 +418,6 @@ TEST_F(ControllerTest, feature_spec_version_096_test) { TEST_F(ControllerTest, feature_spec_version_098_test) { EXPECT_EQ(controller_->GetVendorCapabilities().version_supported_, 98); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_MULTI_ADVT)); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_TRACK_ADV)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_DEBUG_INFO)); EXPECT_TRUE(controller_->IsSupported(OpCode::CONTROLLER_A2DP_OPCODE)); } Loading system/gd/hci/hci_packets.pdl +340 −43 Original line number Diff line number Diff line Loading @@ -140,7 +140,6 @@ enum OpCode : 16 { FLUSH = 0x0C08, READ_PIN_TYPE = 0x0C09, WRITE_PIN_TYPE = 0x0C0A, CREATE_NEW_UNIT_KEY = 0x0C0B, READ_STORED_LINK_KEY = 0x0C0D, WRITE_STORED_LINK_KEY = 0x0C11, DELETE_STORED_LINK_KEY = 0x0C12, Loading Loading @@ -350,7 +349,6 @@ enum OpCode : 16 { LE_MULTI_ADVT = 0xFD54, LE_BATCH_SCAN = 0xFD56, LE_ADV_FILTER = 0xFD57, LE_TRACK_ADV = 0xFD58, LE_ENERGY_INFO = 0xFD59, LE_EXTENDED_SCAN_PARAMS = 0xFD5A, CONTROLLER_DEBUG_INFO = 0xFD5B, Loading Loading @@ -1089,16 +1087,38 @@ packet ReadLmpHandleComplete : CommandComplete (command_op_code = READ_LMP_HANDL } packet SetupSynchronousConnection : ScoConnectionCommand (op_code = SETUP_SYNCHRONOUS_CONNECTION) { _payload_, // placeholder (unimplemented) connection_handle : 12, _reserved_ : 4, transmit_bandwidth : 32, receive_bandwidth : 32, max_latency : 16, // 0-3 reserved, 0xFFFF = don't care voice_setting : 10, _reserved_ : 6, retransmission_effort : 8, packet_type : 16, } packet SetupSynchronousConnectionStatus : CommandStatus (command_op_code = SETUP_SYNCHRONOUS_CONNECTION) { } packet AcceptSynchronousConnection : ScoConnectionCommand (op_code = ACCEPT_SYNCHRONOUS_CONNECTION) { _payload_, // placeholder (unimplemented) bd_addr : Address, _reserved_ : 4, transmit_bandwidth : 32, receive_bandwidth : 32, max_latency : 16, // 0-3 reserved, 0xFFFF = don't care voice_setting : 10, _reserved_ : 6, retransmission_effort : 8, packet_type : 16, } packet AcceptSynchronousConnectionStatus : CommandStatus (command_op_code = ACCEPT_SYNCHRONOUS_CONNECTION) { } packet RejectSynchronousConnection : ScoConnectionCommand (op_code = REJECT_SYNCHRONOUS_CONNECTION) { bd_addr : Address, reason : ErrorCode, reason : RejectConnectionReason, } packet RejectSynchronousConnectionStatus : CommandStatus (command_op_code = REJECT_SYNCHRONOUS_CONNECTION) { Loading Loading @@ -1655,10 +1675,6 @@ packet WritePinTypeComplete : CommandComplete (command_op_code = WRITE_PIN_TYPE) status : ErrorCode, } packet CreateNewUnitKey : Command (op_code = CREATE_NEW_UNIT_KEY) { _payload_, // placeholder (unimplemented) } enum ReadStoredLinkKeyReadAllFlag : 8 { SPECIFIED_BD_ADDR = 0x00, ALL = 0x01, Loading Loading @@ -1850,11 +1866,17 @@ packet WriteClassOfDeviceComplete : CommandComplete (command_op_code = WRITE_CLA } packet ReadVoiceSetting : Command (op_code = READ_VOICE_SETTING) { _payload_, // placeholder (unimplemented) } packet ReadVoiceSettingComplete : CommandComplete (command_op_code = READ_VOICE_SETTING) { status : ErrorCode, voice_setting : 10, _reserved_ : 6, } packet WriteVoiceSetting : Command (op_code = WRITE_VOICE_SETTING) { _payload_, // placeholder (unimplemented) voice_setting : 10, _reserved_ : 6, } packet WriteVoiceSettingComplete : CommandComplete (command_op_code = WRITE_VOICE_SETTING) { Loading Loading @@ -1886,21 +1908,43 @@ packet WriteAutomaticFlushTimeoutComplete : CommandComplete (command_op_code = W } packet ReadNumBroadcastRetransmits : Command (op_code = READ_NUM_BROADCAST_RETRANSMITS) { _payload_, // placeholder (unimplemented) } packet ReadNumBroadcastRetransmitsComplete : CommandComplete (command_op_code = READ_NUM_BROADCAST_RETRANSMITS) { status : ErrorCode, num_broadcast_retransmissions : 8, } packet WriteNumBroadcastRetransmits : Command (op_code = WRITE_NUM_BROADCAST_RETRANSMITS) { _payload_, // placeholder (unimplemented) num_broadcast_retransmissions : 8, } packet WriteNumBroadcastRetransmitsComplete : CommandComplete (command_op_code = WRITE_NUM_BROADCAST_RETRANSMITS) { status : ErrorCode, } enum HoldModeActivity : 8 { MAINTAIN_CURRENT_POWER_STATE = 0x00, SUSPEND_PAGE_SCAN = 0x01, SUSPEND_INQUIRY_SCAN = 0x02, SUSPEND_PERIODIC_INQUIRY = 0x03, } packet ReadHoldModeActivity : Command (op_code = READ_HOLD_MODE_ACTIVITY) { _payload_, // placeholder (unimplemented) } packet ReadHoldModeActivityComplete : CommandComplete (command_op_code = READ_HOLD_MODE_ACTIVITY) { status : ErrorCode, hold_mode_activity : HoldModeActivity, } packet WriteHoldModeActivity : Command (op_code = WRITE_HOLD_MODE_ACTIVITY) { _payload_, // placeholder (unimplemented) hold_mode_activity : HoldModeActivity, } packet WriteHoldModeActivityComplete : CommandComplete (command_op_code = WRITE_HOLD_MODE_ACTIVITY) { status : ErrorCode, } enum TransmitPowerLevelType : 8 { CURRENT = 0x00, Loading Loading @@ -2096,11 +2140,19 @@ packet WritePageScanTypeComplete : CommandComplete (command_op_code = WRITE_PAGE } packet ReadAfhChannelAssessmentMode : Command (op_code = READ_AFH_CHANNEL_ASSESSMENT_MODE) { _payload_, // placeholder (unimplemented) } packet ReadAfhChannelAssessmentModeComplete : CommandComplete (command_op_code = READ_AFH_CHANNEL_ASSESSMENT_MODE) { status : ErrorCode, controller_channel_assessment : Enable, } packet WriteAfhChannelAssessmentMode : Command (op_code = WRITE_AFH_CHANNEL_ASSESSMENT_MODE) { _payload_, // placeholder (unimplemented) controller_channel_assessment : Enable, } packet WriteAfhChannelAssessmentModeComplete : CommandComplete (command_op_code = WRITE_AFH_CHANNEL_ASSESSMENT_MODE) { status : ErrorCode, } enum FecRequired : 8 { Loading Loading @@ -2358,6 +2410,13 @@ packet ReadBdAddrComplete : CommandComplete (command_op_code = READ_BD_ADDR) { packet ReadDataBlockSize : Command (op_code = READ_DATA_BLOCK_SIZE) { } packet ReadDataBlockSizeComplete : CommandComplete (command_op_code = READ_DATA_BLOCK_SIZE) { status : ErrorCode, max_acl_data_packet_length : 16, data_block_length : 16, total_num_data_blocks : 16, } packet ReadLocalSupportedCodecsV1 : Command (op_code = READ_LOCAL_SUPPORTED_CODECS_V1) { } Loading Loading @@ -2834,7 +2893,7 @@ packet LeSetHostChannelClassificationComplete : CommandComplete (command_op_code packet LeReadChannelMap : LeConnectionManagementCommand (op_code = LE_READ_CHANNEL_MAP) { } packet LeReadChannelMapComplete : CommandComplete (command_op_code = LE_SET_HOST_CHANNEL_CLASSIFICATION) { packet LeReadChannelMapComplete : CommandComplete (command_op_code = LE_READ_CHANNEL_MAP) { status : ErrorCode, connection_handle : 12, _reserved_ : 4, Loading Loading @@ -2908,15 +2967,39 @@ packet LeReadSupportedStatesComplete : CommandComplete (command_op_code = LE_REA } packet LeReceiverTest : Command (op_code = LE_RECEIVER_TEST) { _payload_, // placeholder (unimplemented) rx_channel : 8, } packet LeReceiverTestComplete : CommandComplete (command_op_code = LE_RECEIVER_TEST) { status : ErrorCode, } enum LeTestPayload : 8 { PRBS9 = 0x00, REPEATED_F0 = 0x01, REPEATED_AA = 0x02, PRBS15 = 0x03, REPEATED_FF = 0x04, REPEATED_00 = 0x05, REPEATED_0F = 0x06, REPEATED_55 = 0x07, } packet LeTransmitterTest : Command (op_code = LE_TRANSMITTER_TEST) { _payload_, // placeholder (unimplemented) tx_channel : 8, test_data_length : 8, packet_payload : LeTestPayload, } packet LeTransmitterTestComplete : CommandComplete (command_op_code = LE_TRANSMITTER_TEST) { status : ErrorCode, } packet LeTestEnd : Command (op_code = LE_TEST_END) { _payload_, // placeholder (unimplemented) } packet LeTestEndComplete : CommandComplete (command_op_code = LE_TEST_END) { status : ErrorCode, } packet LeRemoteConnectionParameterRequestReply : LeConnectionManagementCommand (op_code = LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY) { Loading Loading @@ -2982,6 +3065,9 @@ packet LeWriteSuggestedDefaultDataLengthComplete : CommandComplete (command_op_c packet LeReadLocalP256PublicKeyCommand : LeSecurityCommand (op_code = LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND) { } packet LeReadLocalP256PublicKeyCommandStatus : CommandStatus (command_op_code = LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND) { } packet LeGenerateDhkeyV1Command : LeSecurityCommand (op_code = LE_GENERATE_DHKEY_COMMAND_V1) { remote_p_256_public_key : 8[64], } Loading Loading @@ -3076,23 +3162,84 @@ packet LeReadMaximumDataLengthComplete : CommandComplete (command_op_code = LE_R } packet LeReadPhy : LeConnectionManagementCommand (op_code = LE_READ_PHY) { _payload_, // placeholder (unimplemented) connection_handle : 12, _reserved_ : 4, } enum PhyType : 8 { LE_1M = 0x01, LE_2M = 0x02, LE_CODED = 0x03, } packet LeReadPhyComplete : CommandComplete (command_op_code = LE_READ_PHY) { status : ErrorCode, connection_handle : 12, _reserved_ : 4, tx_phy : PhyType, rx_phy : PhyType, } packet LeSetDefaultPhy : LeConnectionManagementCommand (op_code = LE_SET_DEFAULT_PHY) { _payload_, // placeholder (unimplemented) all_phys_no_transmit_preference : 1, all_phys_no_receive_preference : 1, _reserved_ : 6, tx_phys_bitmask : 3, _reserved_ : 5, rx_phys_bitmask : 3, _reserved_ : 5, } packet LeSetDefaultPhyComplete : CommandComplete (command_op_code = LE_SET_DEFAULT_PHY) { status : ErrorCode, } enum PhyOptions : 8 { NO_PREFERENCE = 0x00, S_2 = 0x01, S_8 = 0x02, } packet LeSetPhy : LeConnectionManagementCommand (op_code = LE_SET_PHY) { _payload_, // placeholder (unimplemented) connection_handle : 12, _reserved_ : 4, all_phys_no_transmit_preference : 1, all_phys_no_receive_preference : 1, _reserved_ : 6, tx_phys_bitmask : 3, _reserved_ : 5, rx_phys_bitmask : 3, _reserved_ : 5, phy_options : PhyOptions, } packet LeSetPhyStatus : CommandStatus (command_op_code = LE_SET_PHY) { } enum ModulationIndex : 8 { STANDARD = 0x00, STABLE = 0x01, } packet LeEnhancedReceiverTest : Command (op_code = LE_ENHANCED_RECEIVER_TEST) { _payload_, // placeholder (unimplemented) rx_channel : 8, phy : PhyType, modulation_index : ModulationIndex, } packet LeEnhancedReceiverTestComplete : CommandComplete (command_op_code = LE_ENHANCED_RECEIVER_TEST) { status : ErrorCode, } packet LeEnhancedTransmitterTest : Command (op_code = LE_ENHANCED_TRANSMITTER_TEST) { _payload_, // placeholder (unimplemented) tx_channel : 8, test_data_length : 8, packet_payload : LeTestPayload, phy : PhyType, } packet LeEnhancedTransmitterTestComplete : CommandComplete (command_op_code = LE_ENHANCED_TRANSMITTER_TEST) { status : ErrorCode, } packet LeSetExtendedAdvertisingRandomAddress : LeAdvertisingCommand (op_code = LE_SET_EXTENDED_ADVERTISING_RANDOM_ADDRESS) { Loading Loading @@ -3395,25 +3542,56 @@ packet LePeriodicAdvertisingCreateSync : LeAdvertisingCommand (op_code = LE_PERI _payload_, // placeholder (unimplemented) } packet LePeriodicAdvertisingCreateSyncStatus : CommandStatus (command_op_code = LE_PERIODIC_ADVERTISING_CREATE_SYNC) { } packet LePeriodicAdvertisingCreateSyncCancel : LeAdvertisingCommand (op_code = LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL) { _payload_, // placeholder (unimplemented) } packet LePeriodicAdvertisingCreateSyncCancelComplete : CommandComplete (command_op_code = LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL) { status : ErrorCode, } packet LePeriodicAdvertisingTerminateSync : LeAdvertisingCommand (op_code = LE_PERIODIC_ADVERTISING_TERMINATE_SYNC) { _payload_, // placeholder (unimplemented) } packet LePeriodicAdvertisingTerminateSyncComplete : CommandComplete (command_op_code = LE_PERIODIC_ADVERTISING_TERMINATE_SYNC) { status : ErrorCode, } enum AdvertisingAddressType : 8 { PUBLIC_ADDRESS = 0x00, RANDOM_ADDRESS = 0x01, } packet LeAddDeviceToPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_ADD_DEVICE_TO_PERIODIC_ADVERTISING_LIST) { _payload_, // placeholder (unimplemented) advertising_address_type : AdvertisingAddressType, advertiser_address : Address, advertising_sid : 4, _reserved_ : 4, } packet LeAddDeviceToPeriodicAdvertisingListComplete : CommandComplete (command_op_code = LE_ADD_DEVICE_TO_PERIODIC_ADVERTISING_LIST) { status : ErrorCode, } packet LeRemoveDeviceFromPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISING_LIST) { _payload_, // placeholder (unimplemented) } packet LeRemoveDeviceFromPeriodicAdvertisingListComplete : CommandComplete (command_op_code = LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISING_LIST) { status : ErrorCode, } packet LeClearPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_CLEAR_PERIODIC_ADVERTISING_LIST) { } packet LeClearPeriodicAdvertisingListComplete : CommandComplete (command_op_code = LE_CLEAR_PERIODIC_ADVERTISING_LIST) { status : ErrorCode, } packet LeReadPeriodicAdvertiserListSize : Command (op_code = LE_READ_PERIODIC_ADVERTISING_LIST_SIZE) { } Loading @@ -3423,15 +3601,30 @@ packet LeReadPeriodicAdvertiserListSizeComplete : CommandComplete (command_op_co } packet LeReadTransmitPower : LeAdvertisingCommand (op_code = LE_READ_TRANSMIT_POWER) { _payload_, // placeholder (unimplemented) } packet LeReadTransmitPowerComplete : CommandComplete (command_op_code = LE_READ_TRANSMIT_POWER) { status : ErrorCode, min_tx_power_dbm : 8, max_tx_power_dbm : 8, } packet LeReadRfPathCompensationPower : LeAdvertisingCommand (op_code = LE_READ_RF_PATH_COMPENSATION_POWER) { _payload_, // placeholder (unimplemented) } packet LeReadRfPathCompensationPowerComplete : CommandComplete (command_op_code = LE_READ_RF_PATH_COMPENSATION_POWER) { status : ErrorCode, rf_tx_path_compensation_tenths_db : 16, rf_rx_path_compensation_tenths_db : 16, } packet LeWriteRfPathCompensationPower : LeAdvertisingCommand (op_code = LE_WRITE_RF_PATH_COMPENSATION_POWER) { _payload_, // placeholder (unimplemented) rf_tx_path_compensation_tenths_db : 16, rf_rx_path_compensation_tenths_db : 16, } packet LeWriteRfPathCompensationPowerComplete : CommandComplete (command_op_code = LE_WRITE_RF_PATH_COMPENSATION_POWER) { status : ErrorCode, } enum PrivacyMode : 8 { Loading Loading @@ -3514,6 +3707,9 @@ packet LeSetDefaultPeriodicAdvertisingSyncTransferParameters : Command (op_code cte_type : 8, } packet LeSetDefaultPeriodicAdvertisingSyncTransferParametersComplete : CommandComplete (command_op_code = LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS) { } enum UseDebugKey : 8 { USE_GENERATED_KEY = 0, USE_DEBUG_KEY = 1, Loading Loading @@ -3975,8 +4171,96 @@ packet LeMultiAdvtSetEnable : LeMultiAdvt (sub_cmd = SET_ENABLE) { packet LeMultiAdvtSetEnableComplete : LeMultiAdvtComplete (sub_cmd = SET_ENABLE) { } enum BatchScanOpcode : 8 { ENABLE = 0x01, SET_STORAGE_PARAMETERS = 0x02, SET_SCAN_PARAMETERS = 0x03, READ_RESULT_PARAMETERS = 0x04, } packet LeBatchScan : VendorCommand (op_code = LE_BATCH_SCAN) { _payload_, // placeholder (unimplemented) batch_scan_opcode : BatchScanOpcode, _body_, } packet LeBatchScanComplete : CommandComplete (command_op_code = LE_BATCH_SCAN) { status : ErrorCode, batch_scan_opcode : BatchScanOpcode, _body_, } packet LeBatchScanEnable : LeBatchScan (batch_scan_opcode = ENABLE) { enable : Enable, } packet LeBatchScanEnableComplete : LeBatchScanComplete (batch_scan_opcode = ENABLE) { } packet LeBatchScanSetStorageParameters : LeBatchScan (batch_scan_opcode = SET_STORAGE_PARAMETERS) { batch_scan_full_max_percentage : 8, batch_scan_truncated_max_percentage : 8, batch_scan_notify_threshold_percentage : 8, } packet LeBatchScanSetStorageParametersComplete : LeBatchScanComplete (batch_scan_opcode = SET_STORAGE_PARAMETERS) { } enum BatchScanDiscardRule : 8 { OLDEST = 0x00, WEAKEST_RSSI = 0x01, } packet LeBatchScanSetScanParameters : LeBatchScan (batch_scan_opcode = SET_SCAN_PARAMETERS) { truncated_mode_enabled : 1, full_mode_enabled : 1, _reserved_ : 6, duty_cycle_scan_window_slots : 32, duty_cycle_scan_interval_slots : 32, own_address_type : AdvertisingAddressType, batch_scan_discard_rule : BatchScanDiscardRule, } packet LeBatchScanSetScanParametersComplete : LeBatchScanComplete (batch_scan_opcode = SET_SCAN_PARAMETERS) { } packet LeBatchScanReadTruncatedResultParameters : LeBatchScan (batch_scan_opcode = READ_RESULT_PARAMETERS) { _fixed_ = 0x01 : 8, } struct TruncatedResult { bd_addr : Address, address_type : AddressType, tx_power : 8, rssi : 8, timestamp : 16, } packet LeBatchScanReadTruncatedResultParametersComplete : LeBatchScanComplete (batch_scan_opcode = READ_RESULT_PARAMETERS) { _fixed_ = 0x01 : 8, } packet LeBatchScanReadFullResultParameters : LeBatchScan (batch_scan_opcode = READ_RESULT_PARAMETERS) { _fixed_ = 0x02 : 8, _count_(results) : 8, results : TruncatedResult[], } struct FullResult { bd_addr : Address, address_type : AddressType, tx_power : 8, rssi : 8, timestamp : 16, _size_(adv_packet) : 8, adv_packet : 8[], _size_(scan_response) : 8, scan_response : 8[], } packet LeBatchScanReadFullResultParametersComplete : LeBatchScanComplete (batch_scan_opcode = READ_RESULT_PARAMETERS) { _fixed_ = 0x02 : 8, _count_(results) : 8, results : FullResult[], } enum ApcfOpcode : 8 { Loading Loading @@ -4143,13 +4427,15 @@ packet LeAdvFilterServiceDataComplete : LeAdvFilterComplete (apcf_opcode = SERVI apcf_available_spaces : 8, } packet LeTrackAdv : VendorCommand (op_code = LE_TRACK_ADV) { _payload_, // placeholder (unimplemented) packet LeEnergyInfo : VendorCommand (op_code = LE_ENERGY_INFO) { } packet LeEnergyInfo : VendorCommand (op_code = LE_ENERGY_INFO) { _payload_, // placeholder (unimplemented) packet LeEnergyInfoComplete : CommandComplete (command_op_code = LE_ENERGY_INFO) { status : ErrorCode, total_tx_time_ms : 32, total_rx_time_ms : 32, total_idle_time_ms : 32, total_energy_used_ma_v_ms : 32, } packet LeExtendedScanParams : LeScanningCommand (op_code = LE_EXTENDED_SCAN_PARAMS) { Loading @@ -4168,10 +4454,18 @@ packet ControllerDebugInfo : VendorCommand (op_code = CONTROLLER_DEBUG_INFO) { _payload_, // placeholder (unimplemented) } packet ControllerDebugInfoComplete : CommandComplete (command_op_code = CONTROLLER_DEBUG_INFO) { _payload_, // placeholder (unimplemented) } packet ControllerA2DPOpcode : VendorCommand (op_code = CONTROLLER_A2DP_OPCODE) { _payload_, // placeholder (unimplemented) } packet ControllerA2DPOpcodeComplete : CommandComplete (command_op_code = CONTROLLER_A2DP_OPCODE) { _payload_, // placeholder (unimplemented) } enum BqrReportAction : 8 { ADD = 0x00, DELETE = 0x01, Loading Loading @@ -4410,11 +4704,13 @@ packet ConnectionPacketTypeChanged : Event (event_code = CONNECTION_PACKET_TYPE_ } packet QosViolation : Event (event_code = QOS_VIOLATION){ _payload_, // placeholder (unimplemented) connection_handle : 12, _reserved_ : 4, } packet PageScanRepetitionModeChange : Event (event_code = PAGE_SCAN_REPETITION_MODE_CHANGE){ _payload_, // placeholder (unimplemented) bd_addr : Address, page_scan_repetition_mode : PageScanRepetitionMode, } packet FlowSpecificationComplete : Event (event_code = FLOW_SPECIFICATION_COMPLETE){ Loading Loading @@ -4606,6 +4902,7 @@ packet LeMetaEvent : Event (event_code = LE_META_EVENT) { } packet NumberOfCompletedDataBlocks : Event (event_code = NUMBER_OF_COMPLETED_DATA_BLOCKS) { total_num_data_blocks : 16, _payload_, // placeholder (unimplemented) } Loading Loading @@ -4813,15 +5110,15 @@ packet LeScanRequestReceived : LeMetaEvent (subevent_code = SCAN_REQUEST_RECEIVE scanner_address : Address, } enum ChannelSelectionAlGorithm : 8 { ALGORITHM1 = 0, ALGORITHM2 = 1, enum ChannelSelectionAlgorithm : 8 { ALGORITHM_1 = 0, ALGORITHM_2 = 1, } packet LeChannelSelectionAlgorithm : LeMetaEvent (subevent_code = CHANNEL_SELECTION_ALGORITHM) { connection_handle : 12, _reserved_ : 4, channel_selection_algorithm : ChannelSelectionAlGorithm, channel_selection_algorithm : ChannelSelectionAlgorithm, } packet LeConnectionlessIqReport : LeMetaEvent (subevent_code = CONNECTIONLESS_IQ_REPORT) { Loading system/gd/packet/parser/gen_cpp.cc +24 −6 Original line number Diff line number Diff line Loading @@ -209,15 +209,33 @@ using ::bluetooth::packet::parser::ChecksumTypeChecker; if (input_filename == "hci_packets") { out_file << "class Checker { public: static bool IsCommandStatusOpcode(OpCode op_code) {"; out_file << "switch (op_code) {"; std::set<std::string> op_codes; for (const auto& packet_def : decls.packet_defs_queue_) { auto packet = packet_def.second; auto op_constraint = packet->parent_constraints_.find("op_code"); if (op_constraint == packet->parent_constraints_.end()) { auto constraint = packet->parent_constraints_.find("command_op_code"); if (constraint == packet->parent_constraints_.end()) { continue; } if (packet->HasAncestorNamed("CommandStatus")) { out_file << "case " << std::get<std::string>(constraint->second) << ":"; op_codes.erase(std::get<std::string>(constraint->second)); } if (packet->HasAncestorNamed("CommandComplete")) { op_codes.erase(std::get<std::string>(constraint->second)); } } else { op_codes.insert(std::get<std::string>(op_constraint->second)); } } bool unhandled_opcode = false; for (const auto& opcode : op_codes) { unhandled_opcode = true; std::cerr << "Opcode with no Status or Complete " << opcode << std::endl; } if (unhandled_opcode) { ERROR() << "At least one unhandled opcode"; } out_file << "return true; default: return false; }}};"; } Loading system/gd/rust/hci/src/controller.rs +1 −1 Original line number Diff line number Diff line Loading @@ -219,7 +219,7 @@ impl SupportedCommands { /// Check whether a given opcode is supported by the controller pub fn is_supported(&self, opcode: OpCode) -> bool { match opcode { OpCode::ReadLocalSupportedCommands | OpCode::CreateNewUnitKey => true, OpCode::ReadLocalSupportedCommands => true, _ => { let converted = OpCodeIndex::try_from(opcode); if converted.is_err() { Loading Loading
system/gd/hci/controller.cc +0 −3 Original line number Diff line number Diff line Loading @@ -777,8 +777,6 @@ struct Controller::impl { return vendor_capabilities_.total_scan_results_storage_ != 0x00; case OpCode::LE_ADV_FILTER: return vendor_capabilities_.filtering_support_ == 0x01; case OpCode::LE_TRACK_ADV: return vendor_capabilities_.total_num_of_advt_tracked_ > 0; case OpCode::LE_ENERGY_INFO: return vendor_capabilities_.activity_energy_info_support_ == 0x01; case OpCode::LE_EXTENDED_SCAN_PARAMS: Loading @@ -790,7 +788,6 @@ struct Controller::impl { case OpCode::CONTROLLER_BQR: return vendor_capabilities_.bluetooth_quality_report_support_ == 0x01; // undefined in local_supported_commands_ case OpCode::CREATE_NEW_UNIT_KEY: case OpCode::READ_LOCAL_SUPPORTED_COMMANDS: return true; case OpCode::NONE: Loading
system/gd/hci/controller_test.cc +0 −4 Original line number Diff line number Diff line Loading @@ -394,7 +394,6 @@ TEST_F(ControllerTest, is_supported_test) { TEST_F(ControllerTest, feature_spec_version_055_test) { EXPECT_EQ(controller_->GetVendorCapabilities().version_supported_, 55); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_MULTI_ADVT)); EXPECT_FALSE(controller_->IsSupported(OpCode::LE_TRACK_ADV)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_DEBUG_INFO)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_A2DP_OPCODE)); feature_spec_version = 95; Loading @@ -403,7 +402,6 @@ TEST_F(ControllerTest, feature_spec_version_055_test) { TEST_F(ControllerTest, feature_spec_version_095_test) { EXPECT_EQ(controller_->GetVendorCapabilities().version_supported_, 95); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_MULTI_ADVT)); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_TRACK_ADV)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_DEBUG_INFO)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_A2DP_OPCODE)); feature_spec_version = 96; Loading @@ -412,7 +410,6 @@ TEST_F(ControllerTest, feature_spec_version_095_test) { TEST_F(ControllerTest, feature_spec_version_096_test) { EXPECT_EQ(controller_->GetVendorCapabilities().version_supported_, 96); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_MULTI_ADVT)); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_TRACK_ADV)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_DEBUG_INFO)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_A2DP_OPCODE)); feature_spec_version = 98; Loading @@ -421,7 +418,6 @@ TEST_F(ControllerTest, feature_spec_version_096_test) { TEST_F(ControllerTest, feature_spec_version_098_test) { EXPECT_EQ(controller_->GetVendorCapabilities().version_supported_, 98); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_MULTI_ADVT)); EXPECT_TRUE(controller_->IsSupported(OpCode::LE_TRACK_ADV)); EXPECT_FALSE(controller_->IsSupported(OpCode::CONTROLLER_DEBUG_INFO)); EXPECT_TRUE(controller_->IsSupported(OpCode::CONTROLLER_A2DP_OPCODE)); } Loading
system/gd/hci/hci_packets.pdl +340 −43 Original line number Diff line number Diff line Loading @@ -140,7 +140,6 @@ enum OpCode : 16 { FLUSH = 0x0C08, READ_PIN_TYPE = 0x0C09, WRITE_PIN_TYPE = 0x0C0A, CREATE_NEW_UNIT_KEY = 0x0C0B, READ_STORED_LINK_KEY = 0x0C0D, WRITE_STORED_LINK_KEY = 0x0C11, DELETE_STORED_LINK_KEY = 0x0C12, Loading Loading @@ -350,7 +349,6 @@ enum OpCode : 16 { LE_MULTI_ADVT = 0xFD54, LE_BATCH_SCAN = 0xFD56, LE_ADV_FILTER = 0xFD57, LE_TRACK_ADV = 0xFD58, LE_ENERGY_INFO = 0xFD59, LE_EXTENDED_SCAN_PARAMS = 0xFD5A, CONTROLLER_DEBUG_INFO = 0xFD5B, Loading Loading @@ -1089,16 +1087,38 @@ packet ReadLmpHandleComplete : CommandComplete (command_op_code = READ_LMP_HANDL } packet SetupSynchronousConnection : ScoConnectionCommand (op_code = SETUP_SYNCHRONOUS_CONNECTION) { _payload_, // placeholder (unimplemented) connection_handle : 12, _reserved_ : 4, transmit_bandwidth : 32, receive_bandwidth : 32, max_latency : 16, // 0-3 reserved, 0xFFFF = don't care voice_setting : 10, _reserved_ : 6, retransmission_effort : 8, packet_type : 16, } packet SetupSynchronousConnectionStatus : CommandStatus (command_op_code = SETUP_SYNCHRONOUS_CONNECTION) { } packet AcceptSynchronousConnection : ScoConnectionCommand (op_code = ACCEPT_SYNCHRONOUS_CONNECTION) { _payload_, // placeholder (unimplemented) bd_addr : Address, _reserved_ : 4, transmit_bandwidth : 32, receive_bandwidth : 32, max_latency : 16, // 0-3 reserved, 0xFFFF = don't care voice_setting : 10, _reserved_ : 6, retransmission_effort : 8, packet_type : 16, } packet AcceptSynchronousConnectionStatus : CommandStatus (command_op_code = ACCEPT_SYNCHRONOUS_CONNECTION) { } packet RejectSynchronousConnection : ScoConnectionCommand (op_code = REJECT_SYNCHRONOUS_CONNECTION) { bd_addr : Address, reason : ErrorCode, reason : RejectConnectionReason, } packet RejectSynchronousConnectionStatus : CommandStatus (command_op_code = REJECT_SYNCHRONOUS_CONNECTION) { Loading Loading @@ -1655,10 +1675,6 @@ packet WritePinTypeComplete : CommandComplete (command_op_code = WRITE_PIN_TYPE) status : ErrorCode, } packet CreateNewUnitKey : Command (op_code = CREATE_NEW_UNIT_KEY) { _payload_, // placeholder (unimplemented) } enum ReadStoredLinkKeyReadAllFlag : 8 { SPECIFIED_BD_ADDR = 0x00, ALL = 0x01, Loading Loading @@ -1850,11 +1866,17 @@ packet WriteClassOfDeviceComplete : CommandComplete (command_op_code = WRITE_CLA } packet ReadVoiceSetting : Command (op_code = READ_VOICE_SETTING) { _payload_, // placeholder (unimplemented) } packet ReadVoiceSettingComplete : CommandComplete (command_op_code = READ_VOICE_SETTING) { status : ErrorCode, voice_setting : 10, _reserved_ : 6, } packet WriteVoiceSetting : Command (op_code = WRITE_VOICE_SETTING) { _payload_, // placeholder (unimplemented) voice_setting : 10, _reserved_ : 6, } packet WriteVoiceSettingComplete : CommandComplete (command_op_code = WRITE_VOICE_SETTING) { Loading Loading @@ -1886,21 +1908,43 @@ packet WriteAutomaticFlushTimeoutComplete : CommandComplete (command_op_code = W } packet ReadNumBroadcastRetransmits : Command (op_code = READ_NUM_BROADCAST_RETRANSMITS) { _payload_, // placeholder (unimplemented) } packet ReadNumBroadcastRetransmitsComplete : CommandComplete (command_op_code = READ_NUM_BROADCAST_RETRANSMITS) { status : ErrorCode, num_broadcast_retransmissions : 8, } packet WriteNumBroadcastRetransmits : Command (op_code = WRITE_NUM_BROADCAST_RETRANSMITS) { _payload_, // placeholder (unimplemented) num_broadcast_retransmissions : 8, } packet WriteNumBroadcastRetransmitsComplete : CommandComplete (command_op_code = WRITE_NUM_BROADCAST_RETRANSMITS) { status : ErrorCode, } enum HoldModeActivity : 8 { MAINTAIN_CURRENT_POWER_STATE = 0x00, SUSPEND_PAGE_SCAN = 0x01, SUSPEND_INQUIRY_SCAN = 0x02, SUSPEND_PERIODIC_INQUIRY = 0x03, } packet ReadHoldModeActivity : Command (op_code = READ_HOLD_MODE_ACTIVITY) { _payload_, // placeholder (unimplemented) } packet ReadHoldModeActivityComplete : CommandComplete (command_op_code = READ_HOLD_MODE_ACTIVITY) { status : ErrorCode, hold_mode_activity : HoldModeActivity, } packet WriteHoldModeActivity : Command (op_code = WRITE_HOLD_MODE_ACTIVITY) { _payload_, // placeholder (unimplemented) hold_mode_activity : HoldModeActivity, } packet WriteHoldModeActivityComplete : CommandComplete (command_op_code = WRITE_HOLD_MODE_ACTIVITY) { status : ErrorCode, } enum TransmitPowerLevelType : 8 { CURRENT = 0x00, Loading Loading @@ -2096,11 +2140,19 @@ packet WritePageScanTypeComplete : CommandComplete (command_op_code = WRITE_PAGE } packet ReadAfhChannelAssessmentMode : Command (op_code = READ_AFH_CHANNEL_ASSESSMENT_MODE) { _payload_, // placeholder (unimplemented) } packet ReadAfhChannelAssessmentModeComplete : CommandComplete (command_op_code = READ_AFH_CHANNEL_ASSESSMENT_MODE) { status : ErrorCode, controller_channel_assessment : Enable, } packet WriteAfhChannelAssessmentMode : Command (op_code = WRITE_AFH_CHANNEL_ASSESSMENT_MODE) { _payload_, // placeholder (unimplemented) controller_channel_assessment : Enable, } packet WriteAfhChannelAssessmentModeComplete : CommandComplete (command_op_code = WRITE_AFH_CHANNEL_ASSESSMENT_MODE) { status : ErrorCode, } enum FecRequired : 8 { Loading Loading @@ -2358,6 +2410,13 @@ packet ReadBdAddrComplete : CommandComplete (command_op_code = READ_BD_ADDR) { packet ReadDataBlockSize : Command (op_code = READ_DATA_BLOCK_SIZE) { } packet ReadDataBlockSizeComplete : CommandComplete (command_op_code = READ_DATA_BLOCK_SIZE) { status : ErrorCode, max_acl_data_packet_length : 16, data_block_length : 16, total_num_data_blocks : 16, } packet ReadLocalSupportedCodecsV1 : Command (op_code = READ_LOCAL_SUPPORTED_CODECS_V1) { } Loading Loading @@ -2834,7 +2893,7 @@ packet LeSetHostChannelClassificationComplete : CommandComplete (command_op_code packet LeReadChannelMap : LeConnectionManagementCommand (op_code = LE_READ_CHANNEL_MAP) { } packet LeReadChannelMapComplete : CommandComplete (command_op_code = LE_SET_HOST_CHANNEL_CLASSIFICATION) { packet LeReadChannelMapComplete : CommandComplete (command_op_code = LE_READ_CHANNEL_MAP) { status : ErrorCode, connection_handle : 12, _reserved_ : 4, Loading Loading @@ -2908,15 +2967,39 @@ packet LeReadSupportedStatesComplete : CommandComplete (command_op_code = LE_REA } packet LeReceiverTest : Command (op_code = LE_RECEIVER_TEST) { _payload_, // placeholder (unimplemented) rx_channel : 8, } packet LeReceiverTestComplete : CommandComplete (command_op_code = LE_RECEIVER_TEST) { status : ErrorCode, } enum LeTestPayload : 8 { PRBS9 = 0x00, REPEATED_F0 = 0x01, REPEATED_AA = 0x02, PRBS15 = 0x03, REPEATED_FF = 0x04, REPEATED_00 = 0x05, REPEATED_0F = 0x06, REPEATED_55 = 0x07, } packet LeTransmitterTest : Command (op_code = LE_TRANSMITTER_TEST) { _payload_, // placeholder (unimplemented) tx_channel : 8, test_data_length : 8, packet_payload : LeTestPayload, } packet LeTransmitterTestComplete : CommandComplete (command_op_code = LE_TRANSMITTER_TEST) { status : ErrorCode, } packet LeTestEnd : Command (op_code = LE_TEST_END) { _payload_, // placeholder (unimplemented) } packet LeTestEndComplete : CommandComplete (command_op_code = LE_TEST_END) { status : ErrorCode, } packet LeRemoteConnectionParameterRequestReply : LeConnectionManagementCommand (op_code = LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY) { Loading Loading @@ -2982,6 +3065,9 @@ packet LeWriteSuggestedDefaultDataLengthComplete : CommandComplete (command_op_c packet LeReadLocalP256PublicKeyCommand : LeSecurityCommand (op_code = LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND) { } packet LeReadLocalP256PublicKeyCommandStatus : CommandStatus (command_op_code = LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND) { } packet LeGenerateDhkeyV1Command : LeSecurityCommand (op_code = LE_GENERATE_DHKEY_COMMAND_V1) { remote_p_256_public_key : 8[64], } Loading Loading @@ -3076,23 +3162,84 @@ packet LeReadMaximumDataLengthComplete : CommandComplete (command_op_code = LE_R } packet LeReadPhy : LeConnectionManagementCommand (op_code = LE_READ_PHY) { _payload_, // placeholder (unimplemented) connection_handle : 12, _reserved_ : 4, } enum PhyType : 8 { LE_1M = 0x01, LE_2M = 0x02, LE_CODED = 0x03, } packet LeReadPhyComplete : CommandComplete (command_op_code = LE_READ_PHY) { status : ErrorCode, connection_handle : 12, _reserved_ : 4, tx_phy : PhyType, rx_phy : PhyType, } packet LeSetDefaultPhy : LeConnectionManagementCommand (op_code = LE_SET_DEFAULT_PHY) { _payload_, // placeholder (unimplemented) all_phys_no_transmit_preference : 1, all_phys_no_receive_preference : 1, _reserved_ : 6, tx_phys_bitmask : 3, _reserved_ : 5, rx_phys_bitmask : 3, _reserved_ : 5, } packet LeSetDefaultPhyComplete : CommandComplete (command_op_code = LE_SET_DEFAULT_PHY) { status : ErrorCode, } enum PhyOptions : 8 { NO_PREFERENCE = 0x00, S_2 = 0x01, S_8 = 0x02, } packet LeSetPhy : LeConnectionManagementCommand (op_code = LE_SET_PHY) { _payload_, // placeholder (unimplemented) connection_handle : 12, _reserved_ : 4, all_phys_no_transmit_preference : 1, all_phys_no_receive_preference : 1, _reserved_ : 6, tx_phys_bitmask : 3, _reserved_ : 5, rx_phys_bitmask : 3, _reserved_ : 5, phy_options : PhyOptions, } packet LeSetPhyStatus : CommandStatus (command_op_code = LE_SET_PHY) { } enum ModulationIndex : 8 { STANDARD = 0x00, STABLE = 0x01, } packet LeEnhancedReceiverTest : Command (op_code = LE_ENHANCED_RECEIVER_TEST) { _payload_, // placeholder (unimplemented) rx_channel : 8, phy : PhyType, modulation_index : ModulationIndex, } packet LeEnhancedReceiverTestComplete : CommandComplete (command_op_code = LE_ENHANCED_RECEIVER_TEST) { status : ErrorCode, } packet LeEnhancedTransmitterTest : Command (op_code = LE_ENHANCED_TRANSMITTER_TEST) { _payload_, // placeholder (unimplemented) tx_channel : 8, test_data_length : 8, packet_payload : LeTestPayload, phy : PhyType, } packet LeEnhancedTransmitterTestComplete : CommandComplete (command_op_code = LE_ENHANCED_TRANSMITTER_TEST) { status : ErrorCode, } packet LeSetExtendedAdvertisingRandomAddress : LeAdvertisingCommand (op_code = LE_SET_EXTENDED_ADVERTISING_RANDOM_ADDRESS) { Loading Loading @@ -3395,25 +3542,56 @@ packet LePeriodicAdvertisingCreateSync : LeAdvertisingCommand (op_code = LE_PERI _payload_, // placeholder (unimplemented) } packet LePeriodicAdvertisingCreateSyncStatus : CommandStatus (command_op_code = LE_PERIODIC_ADVERTISING_CREATE_SYNC) { } packet LePeriodicAdvertisingCreateSyncCancel : LeAdvertisingCommand (op_code = LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL) { _payload_, // placeholder (unimplemented) } packet LePeriodicAdvertisingCreateSyncCancelComplete : CommandComplete (command_op_code = LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL) { status : ErrorCode, } packet LePeriodicAdvertisingTerminateSync : LeAdvertisingCommand (op_code = LE_PERIODIC_ADVERTISING_TERMINATE_SYNC) { _payload_, // placeholder (unimplemented) } packet LePeriodicAdvertisingTerminateSyncComplete : CommandComplete (command_op_code = LE_PERIODIC_ADVERTISING_TERMINATE_SYNC) { status : ErrorCode, } enum AdvertisingAddressType : 8 { PUBLIC_ADDRESS = 0x00, RANDOM_ADDRESS = 0x01, } packet LeAddDeviceToPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_ADD_DEVICE_TO_PERIODIC_ADVERTISING_LIST) { _payload_, // placeholder (unimplemented) advertising_address_type : AdvertisingAddressType, advertiser_address : Address, advertising_sid : 4, _reserved_ : 4, } packet LeAddDeviceToPeriodicAdvertisingListComplete : CommandComplete (command_op_code = LE_ADD_DEVICE_TO_PERIODIC_ADVERTISING_LIST) { status : ErrorCode, } packet LeRemoveDeviceFromPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISING_LIST) { _payload_, // placeholder (unimplemented) } packet LeRemoveDeviceFromPeriodicAdvertisingListComplete : CommandComplete (command_op_code = LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISING_LIST) { status : ErrorCode, } packet LeClearPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_CLEAR_PERIODIC_ADVERTISING_LIST) { } packet LeClearPeriodicAdvertisingListComplete : CommandComplete (command_op_code = LE_CLEAR_PERIODIC_ADVERTISING_LIST) { status : ErrorCode, } packet LeReadPeriodicAdvertiserListSize : Command (op_code = LE_READ_PERIODIC_ADVERTISING_LIST_SIZE) { } Loading @@ -3423,15 +3601,30 @@ packet LeReadPeriodicAdvertiserListSizeComplete : CommandComplete (command_op_co } packet LeReadTransmitPower : LeAdvertisingCommand (op_code = LE_READ_TRANSMIT_POWER) { _payload_, // placeholder (unimplemented) } packet LeReadTransmitPowerComplete : CommandComplete (command_op_code = LE_READ_TRANSMIT_POWER) { status : ErrorCode, min_tx_power_dbm : 8, max_tx_power_dbm : 8, } packet LeReadRfPathCompensationPower : LeAdvertisingCommand (op_code = LE_READ_RF_PATH_COMPENSATION_POWER) { _payload_, // placeholder (unimplemented) } packet LeReadRfPathCompensationPowerComplete : CommandComplete (command_op_code = LE_READ_RF_PATH_COMPENSATION_POWER) { status : ErrorCode, rf_tx_path_compensation_tenths_db : 16, rf_rx_path_compensation_tenths_db : 16, } packet LeWriteRfPathCompensationPower : LeAdvertisingCommand (op_code = LE_WRITE_RF_PATH_COMPENSATION_POWER) { _payload_, // placeholder (unimplemented) rf_tx_path_compensation_tenths_db : 16, rf_rx_path_compensation_tenths_db : 16, } packet LeWriteRfPathCompensationPowerComplete : CommandComplete (command_op_code = LE_WRITE_RF_PATH_COMPENSATION_POWER) { status : ErrorCode, } enum PrivacyMode : 8 { Loading Loading @@ -3514,6 +3707,9 @@ packet LeSetDefaultPeriodicAdvertisingSyncTransferParameters : Command (op_code cte_type : 8, } packet LeSetDefaultPeriodicAdvertisingSyncTransferParametersComplete : CommandComplete (command_op_code = LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS) { } enum UseDebugKey : 8 { USE_GENERATED_KEY = 0, USE_DEBUG_KEY = 1, Loading Loading @@ -3975,8 +4171,96 @@ packet LeMultiAdvtSetEnable : LeMultiAdvt (sub_cmd = SET_ENABLE) { packet LeMultiAdvtSetEnableComplete : LeMultiAdvtComplete (sub_cmd = SET_ENABLE) { } enum BatchScanOpcode : 8 { ENABLE = 0x01, SET_STORAGE_PARAMETERS = 0x02, SET_SCAN_PARAMETERS = 0x03, READ_RESULT_PARAMETERS = 0x04, } packet LeBatchScan : VendorCommand (op_code = LE_BATCH_SCAN) { _payload_, // placeholder (unimplemented) batch_scan_opcode : BatchScanOpcode, _body_, } packet LeBatchScanComplete : CommandComplete (command_op_code = LE_BATCH_SCAN) { status : ErrorCode, batch_scan_opcode : BatchScanOpcode, _body_, } packet LeBatchScanEnable : LeBatchScan (batch_scan_opcode = ENABLE) { enable : Enable, } packet LeBatchScanEnableComplete : LeBatchScanComplete (batch_scan_opcode = ENABLE) { } packet LeBatchScanSetStorageParameters : LeBatchScan (batch_scan_opcode = SET_STORAGE_PARAMETERS) { batch_scan_full_max_percentage : 8, batch_scan_truncated_max_percentage : 8, batch_scan_notify_threshold_percentage : 8, } packet LeBatchScanSetStorageParametersComplete : LeBatchScanComplete (batch_scan_opcode = SET_STORAGE_PARAMETERS) { } enum BatchScanDiscardRule : 8 { OLDEST = 0x00, WEAKEST_RSSI = 0x01, } packet LeBatchScanSetScanParameters : LeBatchScan (batch_scan_opcode = SET_SCAN_PARAMETERS) { truncated_mode_enabled : 1, full_mode_enabled : 1, _reserved_ : 6, duty_cycle_scan_window_slots : 32, duty_cycle_scan_interval_slots : 32, own_address_type : AdvertisingAddressType, batch_scan_discard_rule : BatchScanDiscardRule, } packet LeBatchScanSetScanParametersComplete : LeBatchScanComplete (batch_scan_opcode = SET_SCAN_PARAMETERS) { } packet LeBatchScanReadTruncatedResultParameters : LeBatchScan (batch_scan_opcode = READ_RESULT_PARAMETERS) { _fixed_ = 0x01 : 8, } struct TruncatedResult { bd_addr : Address, address_type : AddressType, tx_power : 8, rssi : 8, timestamp : 16, } packet LeBatchScanReadTruncatedResultParametersComplete : LeBatchScanComplete (batch_scan_opcode = READ_RESULT_PARAMETERS) { _fixed_ = 0x01 : 8, } packet LeBatchScanReadFullResultParameters : LeBatchScan (batch_scan_opcode = READ_RESULT_PARAMETERS) { _fixed_ = 0x02 : 8, _count_(results) : 8, results : TruncatedResult[], } struct FullResult { bd_addr : Address, address_type : AddressType, tx_power : 8, rssi : 8, timestamp : 16, _size_(adv_packet) : 8, adv_packet : 8[], _size_(scan_response) : 8, scan_response : 8[], } packet LeBatchScanReadFullResultParametersComplete : LeBatchScanComplete (batch_scan_opcode = READ_RESULT_PARAMETERS) { _fixed_ = 0x02 : 8, _count_(results) : 8, results : FullResult[], } enum ApcfOpcode : 8 { Loading Loading @@ -4143,13 +4427,15 @@ packet LeAdvFilterServiceDataComplete : LeAdvFilterComplete (apcf_opcode = SERVI apcf_available_spaces : 8, } packet LeTrackAdv : VendorCommand (op_code = LE_TRACK_ADV) { _payload_, // placeholder (unimplemented) packet LeEnergyInfo : VendorCommand (op_code = LE_ENERGY_INFO) { } packet LeEnergyInfo : VendorCommand (op_code = LE_ENERGY_INFO) { _payload_, // placeholder (unimplemented) packet LeEnergyInfoComplete : CommandComplete (command_op_code = LE_ENERGY_INFO) { status : ErrorCode, total_tx_time_ms : 32, total_rx_time_ms : 32, total_idle_time_ms : 32, total_energy_used_ma_v_ms : 32, } packet LeExtendedScanParams : LeScanningCommand (op_code = LE_EXTENDED_SCAN_PARAMS) { Loading @@ -4168,10 +4454,18 @@ packet ControllerDebugInfo : VendorCommand (op_code = CONTROLLER_DEBUG_INFO) { _payload_, // placeholder (unimplemented) } packet ControllerDebugInfoComplete : CommandComplete (command_op_code = CONTROLLER_DEBUG_INFO) { _payload_, // placeholder (unimplemented) } packet ControllerA2DPOpcode : VendorCommand (op_code = CONTROLLER_A2DP_OPCODE) { _payload_, // placeholder (unimplemented) } packet ControllerA2DPOpcodeComplete : CommandComplete (command_op_code = CONTROLLER_A2DP_OPCODE) { _payload_, // placeholder (unimplemented) } enum BqrReportAction : 8 { ADD = 0x00, DELETE = 0x01, Loading Loading @@ -4410,11 +4704,13 @@ packet ConnectionPacketTypeChanged : Event (event_code = CONNECTION_PACKET_TYPE_ } packet QosViolation : Event (event_code = QOS_VIOLATION){ _payload_, // placeholder (unimplemented) connection_handle : 12, _reserved_ : 4, } packet PageScanRepetitionModeChange : Event (event_code = PAGE_SCAN_REPETITION_MODE_CHANGE){ _payload_, // placeholder (unimplemented) bd_addr : Address, page_scan_repetition_mode : PageScanRepetitionMode, } packet FlowSpecificationComplete : Event (event_code = FLOW_SPECIFICATION_COMPLETE){ Loading Loading @@ -4606,6 +4902,7 @@ packet LeMetaEvent : Event (event_code = LE_META_EVENT) { } packet NumberOfCompletedDataBlocks : Event (event_code = NUMBER_OF_COMPLETED_DATA_BLOCKS) { total_num_data_blocks : 16, _payload_, // placeholder (unimplemented) } Loading Loading @@ -4813,15 +5110,15 @@ packet LeScanRequestReceived : LeMetaEvent (subevent_code = SCAN_REQUEST_RECEIVE scanner_address : Address, } enum ChannelSelectionAlGorithm : 8 { ALGORITHM1 = 0, ALGORITHM2 = 1, enum ChannelSelectionAlgorithm : 8 { ALGORITHM_1 = 0, ALGORITHM_2 = 1, } packet LeChannelSelectionAlgorithm : LeMetaEvent (subevent_code = CHANNEL_SELECTION_ALGORITHM) { connection_handle : 12, _reserved_ : 4, channel_selection_algorithm : ChannelSelectionAlGorithm, channel_selection_algorithm : ChannelSelectionAlgorithm, } packet LeConnectionlessIqReport : LeMetaEvent (subevent_code = CONNECTIONLESS_IQ_REPORT) { Loading
system/gd/packet/parser/gen_cpp.cc +24 −6 Original line number Diff line number Diff line Loading @@ -209,15 +209,33 @@ using ::bluetooth::packet::parser::ChecksumTypeChecker; if (input_filename == "hci_packets") { out_file << "class Checker { public: static bool IsCommandStatusOpcode(OpCode op_code) {"; out_file << "switch (op_code) {"; std::set<std::string> op_codes; for (const auto& packet_def : decls.packet_defs_queue_) { auto packet = packet_def.second; auto op_constraint = packet->parent_constraints_.find("op_code"); if (op_constraint == packet->parent_constraints_.end()) { auto constraint = packet->parent_constraints_.find("command_op_code"); if (constraint == packet->parent_constraints_.end()) { continue; } if (packet->HasAncestorNamed("CommandStatus")) { out_file << "case " << std::get<std::string>(constraint->second) << ":"; op_codes.erase(std::get<std::string>(constraint->second)); } if (packet->HasAncestorNamed("CommandComplete")) { op_codes.erase(std::get<std::string>(constraint->second)); } } else { op_codes.insert(std::get<std::string>(op_constraint->second)); } } bool unhandled_opcode = false; for (const auto& opcode : op_codes) { unhandled_opcode = true; std::cerr << "Opcode with no Status or Complete " << opcode << std::endl; } if (unhandled_opcode) { ERROR() << "At least one unhandled opcode"; } out_file << "return true; default: return false; }}};"; } Loading
system/gd/rust/hci/src/controller.rs +1 −1 Original line number Diff line number Diff line Loading @@ -219,7 +219,7 @@ impl SupportedCommands { /// Check whether a given opcode is supported by the controller pub fn is_supported(&self, opcode: OpCode) -> bool { match opcode { OpCode::ReadLocalSupportedCommands | OpCode::CreateNewUnitKey => true, OpCode::ReadLocalSupportedCommands => true, _ => { let converted = OpCodeIndex::try_from(opcode); if converted.is_err() { Loading