Loading system/gd/hci/hci_packets.pdl +98 −0 Original line number Diff line number Diff line Loading @@ -2583,6 +2583,104 @@ test ReadLocalExtendedFeatures { "\x04\x10\x01\x02", } enum LMPFeaturesPage0Bits: 64 { // Byte 0 LMP_3_SLOT_PACKETS = 0x01, LMP_5_SLOT_PACKETS = 0x02, ENCRYPTION = 0x04, SLOT_OFFSET = 0x08, TIMING_ACCURACY = 0x10, ROLE_SWITCH = 0x20, HOLD_MODE = 0x40, SNIFF_MODE = 0x80, // Byte 1 POWER_CONTROL_REQUESTS = 0x0200, CHANNEL_QUALITY_DRIVEN_DATA_RATE = 0x0400, SCO_LINK = 0x0800, HV2_PACKETS = 0x1000, HV3_PACKETS = 0x2000, M_LAW_LOG_SYNCHRONOUS_DATA = 0x4000, A_LAW_LOG_SYNCHRONOUS_DATA = 0x8000, // Byte 2 CVSD_SYNCHRONOUS_DATA = 0x010000, PAGING_PARAMETER_NEGOTIATION = 0x020000, POWER_CONTROL = 0x040000, TRANSPARENT_SYNCHRONOUS_DATA = 0x080000, FLOW_CONTROL_LAG_LEAST_SIGNIFICANT_BIT = 0x100000, FLOW_CONTROL_LAG_MIDDLE_BIT = 0x200000, FLOW_CONTROL_LAG_MOST_SIGNIFICANT_BIT = 0x400000, BROADCAST_ENCRYPTION = 0x800000, // Byte 3 ENHANCED_DATA_RATE_ACL_2_MB_S_MODE = 0x02000000, ENHANCED_DATA_RATE_ACL_3_MB_S_MODE = 0x04000000, ENHANCED_INQUIRY_SCAN = 0x08000000, INTERLACED_INQUIRY_SCAN = 0x10000000, INTERLACED_PAGE_SCAN = 0x20000000, RSSI_WITH_INQUIRY_RESULTS = 0x40000000, EXTENDED_SCO_LINK = 0x80000000, // Byte 4 EV4_PACKETS = 0x0100000000, EV5_PACKETS = 0x0200000000, AFH_CAPABLE_PERIPHERAL = 0x0800000000, AFH_CLASSIFICATION_PERIPHERAL = 0x1000000000, BR_EDR_NOT_SUPPORTED = 0x2000000000, LE_SUPPORTED_CONTROLLER = 0x4000000000, LMP_3_SLOT_ENHANCED_DATA_RATE_ACL_PACKETS = 0x8000000000, // Byte 5 LMP_5_SLOT_ENHANCED_DATA_RATE_ACL_PACKETS = 0x010000000000, SNIFF_SUBRATING = 0x020000000000, PAUSE_ENCRYPTION = 0x040000000000, AFH_CAPABLE_CENTRAL = 0x080000000000, AFH_CLASSIFICATION_CENTRAL = 0x100000000000, ENHANCED_DATA_RATE_ESCO_2_MB_S_MODE = 0x200000000000, ENHANCED_DATA_RATE_ESCO_3_MB_S_MODE = 0x400000000000, LMP_3_SLOT_ENHANCED_DATA_RATE_ESCO_PACKETS = 0x800000000000, // Byte 6 EXTENDED_INQUIRY_RESPONSE = 0x01000000000000, SIMULTANEOUS_LE_AND_BR_CONTROLLER = 0x02000000000000, SECURE_SIMPLE_PAIRING_CONTROLLER = 0x08000000000000, ENCAPSULATED_PDU = 0x10000000000000, ERRONEOUS_DATA_REPORTING = 0x20000000000000, NON_FLUSHABLE_PACKET_BOUNDARY_FLAG = 0x40000000000000, // Byte 7 HCI_LINK_SUPERVISION_TIMEOUT_CHANGED_EVENT = 0x0100000000000000, VARIABLE_INQUIRY_TX_POWER_LEVEL = 0x0200000000000000, ENHANCED_POWER_CONTROL = 0x0400000000000000, EXTENDED_FEATURES = 0x8000000000000000, } enum LMPFeaturesPage1Bits: 64 { // Byte 0 SECURE_SIMPLE_PAIRING_HOST_SUPPORT = 0x01, LE_SUPPORTED_HOST = 0x02, SIMULTANEOUS_LE_AND_BR_HOST = 0x04, SECURE_CONNECTIONS_HOST_SUPPORT = 0x08, } enum LMPFeaturesPage2Bits: 64 { // Byte 0 CONNECTIONLESS_PERIPHERAL_BROADCAST_TRANSMITTER_OPERATION = 0x01, CONNECTIONLESS_PERIPHERAL_BROADCAST_RECEIVER_OPERATION = 0x02, SYNCHRONIZATION_TRAIN = 0x04, SYNCHRONIZATION_SCAN = 0x08, HCI_INQUIRY_RESPONSE_NOTIFICATION_EVENT = 0x10, GENERALIZED_INTERLACED_SCAN = 0x20, COARSE_CLOCK_ADJUSTMENT = 0x40, // Byte 1 SECURE_CONNECTIONS_CONTROLLER_SUPPORT = 0x0100, PING = 0x0200, SLOT_AVAILABILITY_MASK = 0x0400, TRAIN_NUDGING = 0x0800, } packet ReadLocalExtendedFeaturesComplete : CommandComplete (command_op_code = READ_LOCAL_EXTENDED_FEATURES) { status : ErrorCode, page_number : 8, Loading system/vendor_libs/test_vendor_lib/model/devices/device_properties.h +79 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,83 @@ namespace test_vendor_lib { using ::bluetooth::hci::Address; using ::bluetooth::hci::ClassOfDevice; using ::bluetooth::hci::EventCode; using ::bluetooth::hci::LMPFeaturesPage0Bits; using ::bluetooth::hci::LMPFeaturesPage1Bits; static constexpr uint64_t Page0LmpFeatures() { LMPFeaturesPage0Bits features[] = { LMPFeaturesPage0Bits::LMP_3_SLOT_PACKETS, LMPFeaturesPage0Bits::LMP_5_SLOT_PACKETS, LMPFeaturesPage0Bits::ENCRYPTION, LMPFeaturesPage0Bits::SLOT_OFFSET, LMPFeaturesPage0Bits::TIMING_ACCURACY, LMPFeaturesPage0Bits::ROLE_SWITCH, LMPFeaturesPage0Bits::HOLD_MODE, LMPFeaturesPage0Bits::SNIFF_MODE, LMPFeaturesPage0Bits::POWER_CONTROL_REQUESTS, LMPFeaturesPage0Bits::CHANNEL_QUALITY_DRIVEN_DATA_RATE, LMPFeaturesPage0Bits::SCO_LINK, LMPFeaturesPage0Bits::HV2_PACKETS, LMPFeaturesPage0Bits::HV3_PACKETS, LMPFeaturesPage0Bits::M_LAW_LOG_SYNCHRONOUS_DATA, LMPFeaturesPage0Bits::A_LAW_LOG_SYNCHRONOUS_DATA, LMPFeaturesPage0Bits::CVSD_SYNCHRONOUS_DATA, LMPFeaturesPage0Bits::PAGING_PARAMETER_NEGOTIATION, LMPFeaturesPage0Bits::POWER_CONTROL, LMPFeaturesPage0Bits::TRANSPARENT_SYNCHRONOUS_DATA, LMPFeaturesPage0Bits::BROADCAST_ENCRYPTION, LMPFeaturesPage0Bits::ENHANCED_DATA_RATE_ACL_2_MB_S_MODE, LMPFeaturesPage0Bits::ENHANCED_DATA_RATE_ACL_3_MB_S_MODE, LMPFeaturesPage0Bits::ENHANCED_INQUIRY_SCAN, LMPFeaturesPage0Bits::INTERLACED_INQUIRY_SCAN, LMPFeaturesPage0Bits::INTERLACED_PAGE_SCAN, LMPFeaturesPage0Bits::RSSI_WITH_INQUIRY_RESULTS, LMPFeaturesPage0Bits::EXTENDED_SCO_LINK, LMPFeaturesPage0Bits::EV4_PACKETS, LMPFeaturesPage0Bits::EV5_PACKETS, LMPFeaturesPage0Bits::AFH_CAPABLE_PERIPHERAL, LMPFeaturesPage0Bits::AFH_CLASSIFICATION_PERIPHERAL, LMPFeaturesPage0Bits::LE_SUPPORTED_CONTROLLER, LMPFeaturesPage0Bits::LMP_3_SLOT_ENHANCED_DATA_RATE_ACL_PACKETS, LMPFeaturesPage0Bits::LMP_5_SLOT_ENHANCED_DATA_RATE_ACL_PACKETS, LMPFeaturesPage0Bits::SNIFF_SUBRATING, LMPFeaturesPage0Bits::PAUSE_ENCRYPTION, LMPFeaturesPage0Bits::AFH_CAPABLE_CENTRAL, LMPFeaturesPage0Bits::AFH_CLASSIFICATION_CENTRAL, LMPFeaturesPage0Bits::ENHANCED_DATA_RATE_ESCO_2_MB_S_MODE, LMPFeaturesPage0Bits::ENHANCED_DATA_RATE_ESCO_3_MB_S_MODE, LMPFeaturesPage0Bits::LMP_3_SLOT_ENHANCED_DATA_RATE_ESCO_PACKETS, LMPFeaturesPage0Bits::EXTENDED_INQUIRY_RESPONSE, LMPFeaturesPage0Bits::SIMULTANEOUS_LE_AND_BR_CONTROLLER, LMPFeaturesPage0Bits::SECURE_SIMPLE_PAIRING_CONTROLLER, LMPFeaturesPage0Bits::ENCAPSULATED_PDU, LMPFeaturesPage0Bits::NON_FLUSHABLE_PACKET_BOUNDARY_FLAG, LMPFeaturesPage0Bits::HCI_LINK_SUPERVISION_TIMEOUT_CHANGED_EVENT, LMPFeaturesPage0Bits::VARIABLE_INQUIRY_TX_POWER_LEVEL, LMPFeaturesPage0Bits::ENHANCED_POWER_CONTROL, LMPFeaturesPage0Bits::EXTENDED_FEATURES}; uint64_t value = 0; for (unsigned i = 0; i < sizeof(features) / sizeof(*features); i++) value |= static_cast<uint64_t>(features[i]); return value; } static_assert(Page0LmpFeatures() == 0x875bffdbfe8ffeff, "Invalid page 0 features"); static constexpr uint64_t Page1LmpFeatures() { LMPFeaturesPage1Bits features[] = { LMPFeaturesPage1Bits::SIMULTANEOUS_LE_AND_BR_HOST, }; uint64_t value = 0; for (unsigned i = 0; i < sizeof(features) / sizeof(*features); i++) value |= static_cast<uint64_t>(features[i]); return value; } static_assert(Page1LmpFeatures() == 0x04, "Invalid page 1 features"); class DeviceProperties { public: Loading Loading @@ -410,7 +487,8 @@ class DeviceProperties { std::vector<uint8_t> supported_codecs_; std::vector<uint32_t> vendor_specific_codecs_; std::array<uint8_t, 64> supported_commands_; std::vector<uint64_t> extended_features_{{0x875bffdbfe8ffeff, 0x04}}; std::array<uint64_t, 2> extended_features_{ {Page0LmpFeatures(), Page1LmpFeatures()}}; ClassOfDevice class_of_device_{{0, 0, 0}}; std::vector<uint8_t> extended_inquiry_data_; std::array<uint8_t, 248> name_{}; Loading Loading
system/gd/hci/hci_packets.pdl +98 −0 Original line number Diff line number Diff line Loading @@ -2583,6 +2583,104 @@ test ReadLocalExtendedFeatures { "\x04\x10\x01\x02", } enum LMPFeaturesPage0Bits: 64 { // Byte 0 LMP_3_SLOT_PACKETS = 0x01, LMP_5_SLOT_PACKETS = 0x02, ENCRYPTION = 0x04, SLOT_OFFSET = 0x08, TIMING_ACCURACY = 0x10, ROLE_SWITCH = 0x20, HOLD_MODE = 0x40, SNIFF_MODE = 0x80, // Byte 1 POWER_CONTROL_REQUESTS = 0x0200, CHANNEL_QUALITY_DRIVEN_DATA_RATE = 0x0400, SCO_LINK = 0x0800, HV2_PACKETS = 0x1000, HV3_PACKETS = 0x2000, M_LAW_LOG_SYNCHRONOUS_DATA = 0x4000, A_LAW_LOG_SYNCHRONOUS_DATA = 0x8000, // Byte 2 CVSD_SYNCHRONOUS_DATA = 0x010000, PAGING_PARAMETER_NEGOTIATION = 0x020000, POWER_CONTROL = 0x040000, TRANSPARENT_SYNCHRONOUS_DATA = 0x080000, FLOW_CONTROL_LAG_LEAST_SIGNIFICANT_BIT = 0x100000, FLOW_CONTROL_LAG_MIDDLE_BIT = 0x200000, FLOW_CONTROL_LAG_MOST_SIGNIFICANT_BIT = 0x400000, BROADCAST_ENCRYPTION = 0x800000, // Byte 3 ENHANCED_DATA_RATE_ACL_2_MB_S_MODE = 0x02000000, ENHANCED_DATA_RATE_ACL_3_MB_S_MODE = 0x04000000, ENHANCED_INQUIRY_SCAN = 0x08000000, INTERLACED_INQUIRY_SCAN = 0x10000000, INTERLACED_PAGE_SCAN = 0x20000000, RSSI_WITH_INQUIRY_RESULTS = 0x40000000, EXTENDED_SCO_LINK = 0x80000000, // Byte 4 EV4_PACKETS = 0x0100000000, EV5_PACKETS = 0x0200000000, AFH_CAPABLE_PERIPHERAL = 0x0800000000, AFH_CLASSIFICATION_PERIPHERAL = 0x1000000000, BR_EDR_NOT_SUPPORTED = 0x2000000000, LE_SUPPORTED_CONTROLLER = 0x4000000000, LMP_3_SLOT_ENHANCED_DATA_RATE_ACL_PACKETS = 0x8000000000, // Byte 5 LMP_5_SLOT_ENHANCED_DATA_RATE_ACL_PACKETS = 0x010000000000, SNIFF_SUBRATING = 0x020000000000, PAUSE_ENCRYPTION = 0x040000000000, AFH_CAPABLE_CENTRAL = 0x080000000000, AFH_CLASSIFICATION_CENTRAL = 0x100000000000, ENHANCED_DATA_RATE_ESCO_2_MB_S_MODE = 0x200000000000, ENHANCED_DATA_RATE_ESCO_3_MB_S_MODE = 0x400000000000, LMP_3_SLOT_ENHANCED_DATA_RATE_ESCO_PACKETS = 0x800000000000, // Byte 6 EXTENDED_INQUIRY_RESPONSE = 0x01000000000000, SIMULTANEOUS_LE_AND_BR_CONTROLLER = 0x02000000000000, SECURE_SIMPLE_PAIRING_CONTROLLER = 0x08000000000000, ENCAPSULATED_PDU = 0x10000000000000, ERRONEOUS_DATA_REPORTING = 0x20000000000000, NON_FLUSHABLE_PACKET_BOUNDARY_FLAG = 0x40000000000000, // Byte 7 HCI_LINK_SUPERVISION_TIMEOUT_CHANGED_EVENT = 0x0100000000000000, VARIABLE_INQUIRY_TX_POWER_LEVEL = 0x0200000000000000, ENHANCED_POWER_CONTROL = 0x0400000000000000, EXTENDED_FEATURES = 0x8000000000000000, } enum LMPFeaturesPage1Bits: 64 { // Byte 0 SECURE_SIMPLE_PAIRING_HOST_SUPPORT = 0x01, LE_SUPPORTED_HOST = 0x02, SIMULTANEOUS_LE_AND_BR_HOST = 0x04, SECURE_CONNECTIONS_HOST_SUPPORT = 0x08, } enum LMPFeaturesPage2Bits: 64 { // Byte 0 CONNECTIONLESS_PERIPHERAL_BROADCAST_TRANSMITTER_OPERATION = 0x01, CONNECTIONLESS_PERIPHERAL_BROADCAST_RECEIVER_OPERATION = 0x02, SYNCHRONIZATION_TRAIN = 0x04, SYNCHRONIZATION_SCAN = 0x08, HCI_INQUIRY_RESPONSE_NOTIFICATION_EVENT = 0x10, GENERALIZED_INTERLACED_SCAN = 0x20, COARSE_CLOCK_ADJUSTMENT = 0x40, // Byte 1 SECURE_CONNECTIONS_CONTROLLER_SUPPORT = 0x0100, PING = 0x0200, SLOT_AVAILABILITY_MASK = 0x0400, TRAIN_NUDGING = 0x0800, } packet ReadLocalExtendedFeaturesComplete : CommandComplete (command_op_code = READ_LOCAL_EXTENDED_FEATURES) { status : ErrorCode, page_number : 8, Loading
system/vendor_libs/test_vendor_lib/model/devices/device_properties.h +79 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,83 @@ namespace test_vendor_lib { using ::bluetooth::hci::Address; using ::bluetooth::hci::ClassOfDevice; using ::bluetooth::hci::EventCode; using ::bluetooth::hci::LMPFeaturesPage0Bits; using ::bluetooth::hci::LMPFeaturesPage1Bits; static constexpr uint64_t Page0LmpFeatures() { LMPFeaturesPage0Bits features[] = { LMPFeaturesPage0Bits::LMP_3_SLOT_PACKETS, LMPFeaturesPage0Bits::LMP_5_SLOT_PACKETS, LMPFeaturesPage0Bits::ENCRYPTION, LMPFeaturesPage0Bits::SLOT_OFFSET, LMPFeaturesPage0Bits::TIMING_ACCURACY, LMPFeaturesPage0Bits::ROLE_SWITCH, LMPFeaturesPage0Bits::HOLD_MODE, LMPFeaturesPage0Bits::SNIFF_MODE, LMPFeaturesPage0Bits::POWER_CONTROL_REQUESTS, LMPFeaturesPage0Bits::CHANNEL_QUALITY_DRIVEN_DATA_RATE, LMPFeaturesPage0Bits::SCO_LINK, LMPFeaturesPage0Bits::HV2_PACKETS, LMPFeaturesPage0Bits::HV3_PACKETS, LMPFeaturesPage0Bits::M_LAW_LOG_SYNCHRONOUS_DATA, LMPFeaturesPage0Bits::A_LAW_LOG_SYNCHRONOUS_DATA, LMPFeaturesPage0Bits::CVSD_SYNCHRONOUS_DATA, LMPFeaturesPage0Bits::PAGING_PARAMETER_NEGOTIATION, LMPFeaturesPage0Bits::POWER_CONTROL, LMPFeaturesPage0Bits::TRANSPARENT_SYNCHRONOUS_DATA, LMPFeaturesPage0Bits::BROADCAST_ENCRYPTION, LMPFeaturesPage0Bits::ENHANCED_DATA_RATE_ACL_2_MB_S_MODE, LMPFeaturesPage0Bits::ENHANCED_DATA_RATE_ACL_3_MB_S_MODE, LMPFeaturesPage0Bits::ENHANCED_INQUIRY_SCAN, LMPFeaturesPage0Bits::INTERLACED_INQUIRY_SCAN, LMPFeaturesPage0Bits::INTERLACED_PAGE_SCAN, LMPFeaturesPage0Bits::RSSI_WITH_INQUIRY_RESULTS, LMPFeaturesPage0Bits::EXTENDED_SCO_LINK, LMPFeaturesPage0Bits::EV4_PACKETS, LMPFeaturesPage0Bits::EV5_PACKETS, LMPFeaturesPage0Bits::AFH_CAPABLE_PERIPHERAL, LMPFeaturesPage0Bits::AFH_CLASSIFICATION_PERIPHERAL, LMPFeaturesPage0Bits::LE_SUPPORTED_CONTROLLER, LMPFeaturesPage0Bits::LMP_3_SLOT_ENHANCED_DATA_RATE_ACL_PACKETS, LMPFeaturesPage0Bits::LMP_5_SLOT_ENHANCED_DATA_RATE_ACL_PACKETS, LMPFeaturesPage0Bits::SNIFF_SUBRATING, LMPFeaturesPage0Bits::PAUSE_ENCRYPTION, LMPFeaturesPage0Bits::AFH_CAPABLE_CENTRAL, LMPFeaturesPage0Bits::AFH_CLASSIFICATION_CENTRAL, LMPFeaturesPage0Bits::ENHANCED_DATA_RATE_ESCO_2_MB_S_MODE, LMPFeaturesPage0Bits::ENHANCED_DATA_RATE_ESCO_3_MB_S_MODE, LMPFeaturesPage0Bits::LMP_3_SLOT_ENHANCED_DATA_RATE_ESCO_PACKETS, LMPFeaturesPage0Bits::EXTENDED_INQUIRY_RESPONSE, LMPFeaturesPage0Bits::SIMULTANEOUS_LE_AND_BR_CONTROLLER, LMPFeaturesPage0Bits::SECURE_SIMPLE_PAIRING_CONTROLLER, LMPFeaturesPage0Bits::ENCAPSULATED_PDU, LMPFeaturesPage0Bits::NON_FLUSHABLE_PACKET_BOUNDARY_FLAG, LMPFeaturesPage0Bits::HCI_LINK_SUPERVISION_TIMEOUT_CHANGED_EVENT, LMPFeaturesPage0Bits::VARIABLE_INQUIRY_TX_POWER_LEVEL, LMPFeaturesPage0Bits::ENHANCED_POWER_CONTROL, LMPFeaturesPage0Bits::EXTENDED_FEATURES}; uint64_t value = 0; for (unsigned i = 0; i < sizeof(features) / sizeof(*features); i++) value |= static_cast<uint64_t>(features[i]); return value; } static_assert(Page0LmpFeatures() == 0x875bffdbfe8ffeff, "Invalid page 0 features"); static constexpr uint64_t Page1LmpFeatures() { LMPFeaturesPage1Bits features[] = { LMPFeaturesPage1Bits::SIMULTANEOUS_LE_AND_BR_HOST, }; uint64_t value = 0; for (unsigned i = 0; i < sizeof(features) / sizeof(*features); i++) value |= static_cast<uint64_t>(features[i]); return value; } static_assert(Page1LmpFeatures() == 0x04, "Invalid page 1 features"); class DeviceProperties { public: Loading Loading @@ -410,7 +487,8 @@ class DeviceProperties { std::vector<uint8_t> supported_codecs_; std::vector<uint32_t> vendor_specific_codecs_; std::array<uint8_t, 64> supported_commands_; std::vector<uint64_t> extended_features_{{0x875bffdbfe8ffeff, 0x04}}; std::array<uint64_t, 2> extended_features_{ {Page0LmpFeatures(), Page1LmpFeatures()}}; ClassOfDevice class_of_device_{{0, 0, 0}}; std::vector<uint8_t> extended_inquiry_data_; std::array<uint8_t, 248> name_{}; Loading