aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Wu <joshwu@google.com>2024-02-05 02:21:16 +0800
committerJosh Wu <joshwu@google.com>2024-02-06 12:06:00 +0800
commit0e6d69cd7b33cdaa144ab220e7dec2aa7bc1994e (patch)
treeae3909a80e7d5fb27a7821bdc8640886102a7b41
parentf4aeaa6eb3f66b516e702c9e78006a5685abdcf7 (diff)
downloadbumble-0e6d69cd7b33cdaa144ab220e7dec2aa7bc1994e.tar.gz
Refactor command supporting list
-rw-r--r--bumble/hci.py841
-rw-r--r--bumble/host.py52
2 files changed, 336 insertions, 557 deletions
diff --git a/bumble/hci.py b/bumble/hci.py
index c190a3a..013a2d3 100644
--- a/bumble/hci.py
+++ b/bumble/hci.py
@@ -790,538 +790,317 @@ HCI_RANDOM_DEVICE_ADDRESS_TYPE = 0x01
HCI_PUBLIC_IDENTITY_ADDRESS_TYPE = 0x02
HCI_RANDOM_IDENTITY_ADDRESS_TYPE = 0x03
-# Supported Commands Flags
+# Supported Commands Masks
# See Bluetooth spec @ 6.27 SUPPORTED COMMANDS
-HCI_SUPPORTED_COMMANDS_FLAGS = (
- # Octet 0
- (
- HCI_INQUIRY_COMMAND,
- HCI_INQUIRY_CANCEL_COMMAND,
- HCI_PERIODIC_INQUIRY_MODE_COMMAND,
- HCI_EXIT_PERIODIC_INQUIRY_MODE_COMMAND,
- HCI_CREATE_CONNECTION_COMMAND,
- HCI_DISCONNECT_COMMAND,
- None,
- HCI_CREATE_CONNECTION_CANCEL_COMMAND
- ),
- # Octet 1
- (
- HCI_ACCEPT_CONNECTION_REQUEST_COMMAND,
- HCI_REJECT_CONNECTION_REQUEST_COMMAND,
- HCI_LINK_KEY_REQUEST_REPLY_COMMAND,
- HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY_COMMAND,
- HCI_PIN_CODE_REQUEST_REPLY_COMMAND,
- HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY_COMMAND,
- HCI_CHANGE_CONNECTION_PACKET_TYPE_COMMAND,
- HCI_AUTHENTICATION_REQUESTED_COMMAND
- ),
- # Octet 2
- (
- HCI_SET_CONNECTION_ENCRYPTION_COMMAND,
- HCI_CHANGE_CONNECTION_LINK_KEY_COMMAND,
- HCI_LINK_KEY_SELECTION_COMMAND,
- HCI_REMOTE_NAME_REQUEST_COMMAND,
- HCI_REMOTE_NAME_REQUEST_CANCEL_COMMAND,
- HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND,
- HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND,
- HCI_READ_REMOTE_VERSION_INFORMATION_COMMAND
- ),
- # Octet 3
- (
- HCI_READ_CLOCK_OFFSET_COMMAND,
- HCI_READ_LMP_HANDLE_COMMAND,
- None,
- None,
- None,
- None,
- None,
- None
- ),
- # Octet 4
- (
- None,
- HCI_HOLD_MODE_COMMAND,
- HCI_SNIFF_MODE_COMMAND,
- HCI_EXIT_SNIFF_MODE_COMMAND,
- None,
- None,
- HCI_QOS_SETUP_COMMAND,
- HCI_ROLE_DISCOVERY_COMMAND
- ),
- # Octet 5
- (
- HCI_SWITCH_ROLE_COMMAND,
- HCI_READ_LINK_POLICY_SETTINGS_COMMAND,
- HCI_WRITE_LINK_POLICY_SETTINGS_COMMAND,
- HCI_READ_DEFAULT_LINK_POLICY_SETTINGS_COMMAND,
- HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS_COMMAND,
- HCI_FLOW_SPECIFICATION_COMMAND,
- HCI_SET_EVENT_MASK_COMMAND,
- HCI_RESET_COMMAND
- ),
- # Octet 6
- (
- HCI_SET_EVENT_FILTER_COMMAND,
- HCI_FLUSH_COMMAND,
- HCI_READ_PIN_TYPE_COMMAND,
- HCI_WRITE_PIN_TYPE_COMMAND,
- None,
- HCI_READ_STORED_LINK_KEY_COMMAND,
- HCI_WRITE_STORED_LINK_KEY_COMMAND,
- HCI_DELETE_STORED_LINK_KEY_COMMAND
- ),
- # Octet 7
- (
- HCI_WRITE_LOCAL_NAME_COMMAND,
- HCI_READ_LOCAL_NAME_COMMAND,
- HCI_READ_CONNECTION_ACCEPT_TIMEOUT_COMMAND,
- HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT_COMMAND,
- HCI_READ_PAGE_TIMEOUT_COMMAND,
- HCI_WRITE_PAGE_TIMEOUT_COMMAND,
- HCI_READ_SCAN_ENABLE_COMMAND,
- HCI_WRITE_SCAN_ENABLE_COMMAND
- ),
- # Octet 8
- (
- HCI_READ_PAGE_SCAN_ACTIVITY_COMMAND,
- HCI_WRITE_PAGE_SCAN_ACTIVITY_COMMAND,
- HCI_READ_INQUIRY_SCAN_ACTIVITY_COMMAND,
- HCI_WRITE_INQUIRY_SCAN_ACTIVITY_COMMAND,
- HCI_READ_AUTHENTICATION_ENABLE_COMMAND,
- HCI_WRITE_AUTHENTICATION_ENABLE_COMMAND,
- None,
- None
- ),
- # Octet 9
- (
- HCI_READ_CLASS_OF_DEVICE_COMMAND,
- HCI_WRITE_CLASS_OF_DEVICE_COMMAND,
- HCI_READ_VOICE_SETTING_COMMAND,
- HCI_WRITE_VOICE_SETTING_COMMAND,
- HCI_READ_AUTOMATIC_FLUSH_TIMEOUT_COMMAND,
- HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT_COMMAND,
- HCI_READ_NUM_BROADCAST_RETRANSMISSIONS_COMMAND,
- HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS_COMMAND
- ),
- # Octet 10
- (
- HCI_READ_HOLD_MODE_ACTIVITY_COMMAND,
- HCI_WRITE_HOLD_MODE_ACTIVITY_COMMAND,
- HCI_READ_TRANSMIT_POWER_LEVEL_COMMAND,
- HCI_READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE_COMMAND,
- HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE_COMMAND,
- HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL_COMMAND,
- HCI_HOST_BUFFER_SIZE_COMMAND,
- HCI_HOST_NUMBER_OF_COMPLETED_PACKETS_COMMAND
- ),
- # Octet 11
- (
- HCI_READ_LINK_SUPERVISION_TIMEOUT_COMMAND,
- HCI_WRITE_LINK_SUPERVISION_TIMEOUT_COMMAND,
- HCI_READ_NUMBER_OF_SUPPORTED_IAC_COMMAND,
- HCI_READ_CURRENT_IAC_LAP_COMMAND,
- HCI_WRITE_CURRENT_IAC_LAP_COMMAND,
- None,
- None,
- None
- ),
- # Octet 12
- (
- None,
- HCI_SET_AFH_HOST_CHANNEL_CLASSIFICATION_COMMAND,
- None,
- None,
- HCI_READ_INQUIRY_SCAN_TYPE_COMMAND,
- HCI_WRITE_INQUIRY_SCAN_TYPE_COMMAND,
- HCI_READ_INQUIRY_MODE_COMMAND,
- HCI_WRITE_INQUIRY_MODE_COMMAND
- ),
- # Octet 13
- (
- HCI_READ_PAGE_SCAN_TYPE_COMMAND,
- HCI_WRITE_PAGE_SCAN_TYPE_COMMAND,
- HCI_READ_AFH_CHANNEL_ASSESSMENT_MODE_COMMAND,
- HCI_WRITE_AFH_CHANNEL_ASSESSMENT_MODE_COMMAND,
- None,
- None,
- None,
- None,
- ),
- # Octet 14
- (
- None,
- None,
- None,
- HCI_READ_LOCAL_VERSION_INFORMATION_COMMAND,
- None,
- HCI_READ_LOCAL_SUPPORTED_FEATURES_COMMAND,
- HCI_READ_LOCAL_EXTENDED_FEATURES_COMMAND,
- HCI_READ_BUFFER_SIZE_COMMAND
- ),
- # Octet 15
- (
- None,
- HCI_READ_BD_ADDR_COMMAND,
- HCI_READ_FAILED_CONTACT_COUNTER_COMMAND,
- HCI_RESET_FAILED_CONTACT_COUNTER_COMMAND,
- HCI_READ_LINK_QUALITY_COMMAND,
- HCI_READ_RSSI_COMMAND,
- HCI_READ_AFH_CHANNEL_MAP_COMMAND,
- HCI_READ_CLOCK_COMMAND
- ),
- # Octet 16
- (
- HCI_READ_LOOPBACK_MODE_COMMAND,
- HCI_WRITE_LOOPBACK_MODE_COMMAND,
- HCI_ENABLE_DEVICE_UNDER_TEST_MODE_COMMAND,
- HCI_SETUP_SYNCHRONOUS_CONNECTION_COMMAND,
- HCI_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND,
- HCI_REJECT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND,
- None,
- None,
- ),
- # Octet 17
- (
- HCI_READ_EXTENDED_INQUIRY_RESPONSE_COMMAND,
- HCI_WRITE_EXTENDED_INQUIRY_RESPONSE_COMMAND,
- HCI_REFRESH_ENCRYPTION_KEY_COMMAND,
- None,
- HCI_SNIFF_SUBRATING_COMMAND,
- HCI_READ_SIMPLE_PAIRING_MODE_COMMAND,
- HCI_WRITE_SIMPLE_PAIRING_MODE_COMMAND,
- HCI_READ_LOCAL_OOB_DATA_COMMAND
- ),
- # Octet 18
- (
- HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL_COMMAND,
- HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_COMMAND,
- HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_COMMAND,
- HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_COMMAND,
- None,
- None,
- None,
- HCI_IO_CAPABILITY_REQUEST_REPLY_COMMAND
- ),
- # Octet 19
- (
- HCI_USER_CONFIRMATION_REQUEST_REPLY_COMMAND,
- HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY_COMMAND,
- HCI_USER_PASSKEY_REQUEST_REPLY_COMMAND,
- HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY_COMMAND,
- HCI_REMOTE_OOB_DATA_REQUEST_REPLY_COMMAND,
- HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE_COMMAND,
- HCI_ENHANCED_FLUSH_COMMAND,
- HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY_COMMAND
- ),
- # Octet 20
- (
- None,
- None,
- HCI_SEND_KEYPRESS_NOTIFICATION_COMMAND,
- HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY_COMMAND,
- HCI_READ_ENCRYPTION_KEY_SIZE_COMMAND,
- None,
- None,
- None,
- ),
- # Octet 21
- (
- None,
- None,
- None,
- None,
- None,
- None,
- None,
- None,
- ),
- # Octet 22
- (
- None,
- None,
- HCI_SET_EVENT_MASK_PAGE_2_COMMAND,
- None,
- None,
- None,
- None,
- None,
- ),
- # Octet 23
- (
- HCI_READ_FLOW_CONTROL_MODE_COMMAND,
- HCI_WRITE_FLOW_CONTROL_MODE_COMMAND,
- HCI_READ_DATA_BLOCK_SIZE_COMMAND,
- None,
- None,
- None,
- None,
- None,
- ),
- # Octet 24
- (
- HCI_READ_ENHANCED_TRANSMIT_POWER_LEVEL_COMMAND,
- None,
- None,
- None,
- None,
- HCI_READ_LE_HOST_SUPPORT_COMMAND,
- HCI_WRITE_LE_HOST_SUPPORT_COMMAND,
- None,
- ),
- # Octet 25
- (
- HCI_LE_SET_EVENT_MASK_COMMAND,
- HCI_LE_READ_BUFFER_SIZE_COMMAND,
- HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_COMMAND,
- None,
- HCI_LE_SET_RANDOM_ADDRESS_COMMAND,
- HCI_LE_SET_ADVERTISING_PARAMETERS_COMMAND,
- HCI_LE_READ_ADVERTISING_PHYSICAL_CHANNEL_TX_POWER_COMMAND,
- HCI_LE_SET_ADVERTISING_DATA_COMMAND,
- ),
- # Octet 26
- (
- HCI_LE_SET_SCAN_RESPONSE_DATA_COMMAND,
- HCI_LE_SET_ADVERTISING_ENABLE_COMMAND,
- HCI_LE_SET_SCAN_PARAMETERS_COMMAND,
- HCI_LE_SET_SCAN_ENABLE_COMMAND,
- HCI_LE_CREATE_CONNECTION_COMMAND,
- HCI_LE_CREATE_CONNECTION_CANCEL_COMMAND,
- HCI_LE_READ_FILTER_ACCEPT_LIST_SIZE_COMMAND,
- HCI_LE_CLEAR_FILTER_ACCEPT_LIST_COMMAND
- ),
- # Octet 27
- (
- HCI_LE_ADD_DEVICE_TO_FILTER_ACCEPT_LIST_COMMAND,
- HCI_LE_REMOVE_DEVICE_FROM_FILTER_ACCEPT_LIST_COMMAND,
- HCI_LE_CONNECTION_UPDATE_COMMAND,
- HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION_COMMAND,
- HCI_LE_READ_CHANNEL_MAP_COMMAND,
- HCI_LE_READ_REMOTE_FEATURES_COMMAND,
- HCI_LE_ENCRYPT_COMMAND,
- HCI_LE_RAND_COMMAND
- ),
- # Octet 28
- (
- HCI_LE_ENABLE_ENCRYPTION_COMMAND,
- HCI_LE_LONG_TERM_KEY_REQUEST_REPLY_COMMAND,
- HCI_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY_COMMAND,
- HCI_LE_READ_SUPPORTED_STATES_COMMAND,
- HCI_LE_RECEIVER_TEST_COMMAND,
- HCI_LE_TRANSMITTER_TEST_COMMAND,
- HCI_LE_TEST_END_COMMAND,
- None,
- ),
- # Octet 29
- (
- None,
- None,
- None,
- HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION_COMMAND,
- HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND,
- HCI_READ_LOCAL_SUPPORTED_CODECS_COMMAND,
- HCI_SET_MWS_CHANNEL_PARAMETERS_COMMAND,
- HCI_SET_EXTERNAL_FRAME_CONFIGURATION_COMMAND
- ),
- # Octet 30
- (
- HCI_SET_MWS_SIGNALING_COMMAND,
- HCI_SET_MWS_TRANSPORT_LAYER_COMMAND,
- HCI_SET_MWS_SCAN_FREQUENCY_TABLE_COMMAND,
- HCI_GET_MWS_TRANSPORT_LAYER_CONFIGURATION_COMMAND,
- HCI_SET_MWS_PATTERN_CONFIGURATION_COMMAND,
- HCI_SET_TRIGGERED_CLOCK_CAPTURE_COMMAND,
- HCI_TRUNCATED_PAGE_COMMAND,
- HCI_TRUNCATED_PAGE_CANCEL_COMMAND
- ),
- # Octet 31
- (
- HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_COMMAND,
- HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_RECEIVE_COMMAND,
- HCI_START_SYNCHRONIZATION_TRAIN_COMMAND,
- HCI_RECEIVE_SYNCHRONIZATION_TRAIN_COMMAND,
- HCI_SET_RESERVED_LT_ADDR_COMMAND,
- HCI_DELETE_RESERVED_LT_ADDR_COMMAND,
- HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_DATA_COMMAND,
- HCI_READ_SYNCHRONIZATION_TRAIN_PARAMETERS_COMMAND
- ),
- # Octet 32
- (
- HCI_WRITE_SYNCHRONIZATION_TRAIN_PARAMETERS_COMMAND,
- HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_COMMAND,
- HCI_READ_SECURE_CONNECTIONS_HOST_SUPPORT_COMMAND,
- HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT_COMMAND,
- HCI_READ_AUTHENTICATED_PAYLOAD_TIMEOUT_COMMAND,
- HCI_WRITE_AUTHENTICATED_PAYLOAD_TIMEOUT_COMMAND,
- HCI_READ_LOCAL_OOB_EXTENDED_DATA_COMMAND,
- HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE_COMMAND
- ),
- # Octet 33
- (
- HCI_READ_EXTENDED_PAGE_TIMEOUT_COMMAND,
- HCI_WRITE_EXTENDED_PAGE_TIMEOUT_COMMAND,
- HCI_READ_EXTENDED_INQUIRY_LENGTH_COMMAND,
- HCI_WRITE_EXTENDED_INQUIRY_LENGTH_COMMAND,
- HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY_COMMAND,
- HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY_COMMAND,
- HCI_LE_SET_DATA_LENGTH_COMMAND,
- HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH_COMMAND
- ),
- # Octet 34
- (
- HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH_COMMAND,
- HCI_LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND,
- HCI_LE_GENERATE_DHKEY_COMMAND,
- HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST_COMMAND,
- HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST_COMMAND,
- HCI_LE_CLEAR_RESOLVING_LIST_COMMAND,
- HCI_LE_READ_RESOLVING_LIST_SIZE_COMMAND,
- HCI_LE_READ_PEER_RESOLVABLE_ADDRESS_COMMAND
- ),
- # Octet 35
- (
- HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS_COMMAND,
- HCI_LE_SET_ADDRESS_RESOLUTION_ENABLE_COMMAND,
- HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT_COMMAND,
- HCI_LE_READ_MAXIMUM_DATA_LENGTH_COMMAND,
- HCI_LE_READ_PHY_COMMAND,
- HCI_LE_SET_DEFAULT_PHY_COMMAND,
- HCI_LE_SET_PHY_COMMAND,
- HCI_LE_RECEIVER_TEST_V2_COMMAND
- ),
- # Octet 36
- (
- HCI_LE_TRANSMITTER_TEST_V2_COMMAND,
- HCI_LE_SET_ADVERTISING_SET_RANDOM_ADDRESS_COMMAND,
- HCI_LE_SET_EXTENDED_ADVERTISING_PARAMETERS_COMMAND,
- HCI_LE_SET_EXTENDED_ADVERTISING_DATA_COMMAND,
- HCI_LE_SET_EXTENDED_SCAN_RESPONSE_DATA_COMMAND,
- HCI_LE_SET_EXTENDED_ADVERTISING_ENABLE_COMMAND,
- HCI_LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH_COMMAND,
- HCI_LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS_COMMAND,
- ),
- # Octet 37
- (
- HCI_LE_REMOVE_ADVERTISING_SET_COMMAND,
- HCI_LE_CLEAR_ADVERTISING_SETS_COMMAND,
- HCI_LE_SET_PERIODIC_ADVERTISING_PARAMETERS_COMMAND,
- HCI_LE_SET_PERIODIC_ADVERTISING_DATA_COMMAND,
- HCI_LE_SET_PERIODIC_ADVERTISING_ENABLE_COMMAND,
- HCI_LE_SET_EXTENDED_SCAN_PARAMETERS_COMMAND,
- HCI_LE_SET_EXTENDED_SCAN_ENABLE_COMMAND,
- HCI_LE_EXTENDED_CREATE_CONNECTION_COMMAND
- ),
- # Octet 38
- (
- HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC_COMMAND,
- HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL_COMMAND,
- HCI_LE_PERIODIC_ADVERTISING_TERMINATE_SYNC_COMMAND,
- HCI_LE_ADD_DEVICE_TO_PERIODIC_ADVERTISER_LIST_COMMAND,
- HCI_LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISER_LIST_COMMAND,
- HCI_LE_CLEAR_PERIODIC_ADVERTISER_LIST_COMMAND,
- HCI_LE_READ_PERIODIC_ADVERTISER_LIST_SIZE_COMMAND,
- HCI_LE_READ_TRANSMIT_POWER_COMMAND
- ),
- # Octet 39
- (
- HCI_LE_READ_RF_PATH_COMPENSATION_COMMAND,
- HCI_LE_WRITE_RF_PATH_COMPENSATION_COMMAND,
- HCI_LE_SET_PRIVACY_MODE_COMMAND,
- HCI_LE_RECEIVER_TEST_V3_COMMAND,
- HCI_LE_TRANSMITTER_TEST_V3_COMMAND,
- HCI_LE_SET_CONNECTIONLESS_CTE_TRANSMIT_PARAMETERS_COMMAND,
- HCI_LE_SET_CONNECTIONLESS_CTE_TRANSMIT_ENABLE_COMMAND,
- HCI_LE_SET_CONNECTIONLESS_IQ_SAMPLING_ENABLE_COMMAND,
- ),
- # Octet 40
- (
- HCI_LE_SET_CONNECTION_CTE_RECEIVE_PARAMETERS_COMMAND,
- HCI_LE_SET_CONNECTION_CTE_TRANSMIT_PARAMETERS_COMMAND,
- HCI_LE_CONNECTION_CTE_REQUEST_ENABLE_COMMAND,
- HCI_LE_CONNECTION_CTE_RESPONSE_ENABLE_COMMAND,
- HCI_LE_READ_ANTENNA_INFORMATION_COMMAND,
- HCI_LE_SET_PERIODIC_ADVERTISING_RECEIVE_ENABLE_COMMAND,
- HCI_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_COMMAND,
- HCI_LE_PERIODIC_ADVERTISING_SET_INFO_TRANSFER_COMMAND
- ),
- # Octet 41
- (
- HCI_LE_SET_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS_COMMAND,
- HCI_LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS_COMMAND,
- HCI_LE_GENERATE_DHKEY_V2_COMMAND,
- HCI_READ_LOCAL_SIMPLE_PAIRING_OPTIONS_COMMAND,
- HCI_LE_MODIFY_SLEEP_CLOCK_ACCURACY_COMMAND,
- HCI_LE_READ_BUFFER_SIZE_V2_COMMAND,
- HCI_LE_READ_ISO_TX_SYNC_COMMAND,
- HCI_LE_SET_CIG_PARAMETERS_COMMAND
- ),
- # Octet 42
- (
- HCI_LE_SET_CIG_PARAMETERS_TEST_COMMAND,
- HCI_LE_CREATE_CIS_COMMAND,
- HCI_LE_REMOVE_CIG_COMMAND,
- HCI_LE_ACCEPT_CIS_REQUEST_COMMAND,
- HCI_LE_REJECT_CIS_REQUEST_COMMAND,
- HCI_LE_CREATE_BIG_COMMAND,
- HCI_LE_CREATE_BIG_TEST_COMMAND,
- HCI_LE_TERMINATE_BIG_COMMAND,
- ),
- # Octet 43
- (
- HCI_LE_BIG_CREATE_SYNC_COMMAND,
- HCI_LE_BIG_TERMINATE_SYNC_COMMAND,
- HCI_LE_REQUEST_PEER_SCA_COMMAND,
- HCI_LE_SETUP_ISO_DATA_PATH_COMMAND,
- HCI_LE_REMOVE_ISO_DATA_PATH_COMMAND,
- HCI_LE_ISO_TRANSMIT_TEST_COMMAND,
- HCI_LE_ISO_RECEIVE_TEST_COMMAND,
- HCI_LE_ISO_READ_TEST_COUNTERS_COMMAND
- ),
- # Octet 44
- (
- HCI_LE_ISO_TEST_END_COMMAND,
- HCI_LE_SET_HOST_FEATURE_COMMAND,
- HCI_LE_READ_ISO_LINK_QUALITY_COMMAND,
- HCI_LE_ENHANCED_READ_TRANSMIT_POWER_LEVEL_COMMAND,
- HCI_LE_READ_REMOTE_TRANSMIT_POWER_LEVEL_COMMAND,
- HCI_LE_SET_PATH_LOSS_REPORTING_PARAMETERS_COMMAND,
- HCI_LE_SET_PATH_LOSS_REPORTING_ENABLE_COMMAND,
- HCI_LE_SET_TRANSMIT_POWER_REPORTING_ENABLE_COMMAND
- ),
- # Octet 45
- (
- HCI_LE_TRANSMITTER_TEST_V4_COMMAND,
- HCI_SET_ECOSYSTEM_BASE_INTERVAL_COMMAND,
- HCI_READ_LOCAL_SUPPORTED_CODECS_V2_COMMAND,
- HCI_READ_LOCAL_SUPPORTED_CODEC_CAPABILITIES_COMMAND,
- HCI_READ_LOCAL_SUPPORTED_CONTROLLER_DELAY_COMMAND,
- HCI_CONFIGURE_DATA_PATH_COMMAND,
- HCI_LE_SET_DATA_RELATED_ADDRESS_CHANGES_COMMAND,
- HCI_SET_MIN_ENCRYPTION_KEY_SIZE_COMMAND
- ),
- # Octet 46
- (
- HCI_LE_SET_DEFAULT_SUBRATE_COMMAND,
- HCI_LE_SUBRATE_REQUEST_COMMAND,
- HCI_LE_SET_EXTENDED_ADVERTISING_PARAMETERS_V2_COMMAND,
- None,
- None,
- HCI_LE_SET_PERIODIC_ADVERTISING_SUBEVENT_DATA_COMMAND,
- HCI_LE_SET_PERIODIC_ADVERTISING_RESPONSE_DATA_COMMAND,
- HCI_LE_SET_PERIODIC_SYNC_SUBEVENT_COMMAND
- ),
- # Octet 47
- (
- HCI_LE_EXTENDED_CREATE_CONNECTION_V2_COMMAND,
- HCI_LE_SET_PERIODIC_ADVERTISING_PARAMETERS_V2_COMMAND,
- None,
- None,
- None,
- None,
- None,
- None,
- )
-)
+HCI_SUPPORTED_COMMANDS_MASKS = {
+ HCI_INQUIRY_COMMAND : 1 << (0*8+0),
+ HCI_INQUIRY_CANCEL_COMMAND : 1 << (0*8+1),
+ HCI_PERIODIC_INQUIRY_MODE_COMMAND : 1 << (0*8+2),
+ HCI_EXIT_PERIODIC_INQUIRY_MODE_COMMAND : 1 << (0*8+3),
+ HCI_CREATE_CONNECTION_COMMAND : 1 << (0*8+4),
+ HCI_DISCONNECT_COMMAND : 1 << (0*8+5),
+ HCI_CREATE_CONNECTION_CANCEL_COMMAND : 1 << (0*8+7),
+ HCI_ACCEPT_CONNECTION_REQUEST_COMMAND : 1 << (1*8+0),
+ HCI_REJECT_CONNECTION_REQUEST_COMMAND : 1 << (1*8+1),
+ HCI_LINK_KEY_REQUEST_REPLY_COMMAND : 1 << (1*8+2),
+ HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (1*8+3),
+ HCI_PIN_CODE_REQUEST_REPLY_COMMAND : 1 << (1*8+4),
+ HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (1*8+5),
+ HCI_CHANGE_CONNECTION_PACKET_TYPE_COMMAND : 1 << (1*8+6),
+ HCI_AUTHENTICATION_REQUESTED_COMMAND : 1 << (1*8+7),
+ HCI_SET_CONNECTION_ENCRYPTION_COMMAND : 1 << (2*8+0),
+ HCI_CHANGE_CONNECTION_LINK_KEY_COMMAND : 1 << (2*8+1),
+ HCI_LINK_KEY_SELECTION_COMMAND : 1 << (2*8+2),
+ HCI_REMOTE_NAME_REQUEST_COMMAND : 1 << (2*8+3),
+ HCI_REMOTE_NAME_REQUEST_CANCEL_COMMAND : 1 << (2*8+4),
+ HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND : 1 << (2*8+5),
+ HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND : 1 << (2*8+6),
+ HCI_READ_REMOTE_VERSION_INFORMATION_COMMAND : 1 << (2*8+7),
+ HCI_READ_CLOCK_OFFSET_COMMAND : 1 << (3*8+0),
+ HCI_READ_LMP_HANDLE_COMMAND : 1 << (3*8+1),
+ HCI_HOLD_MODE_COMMAND : 1 << (4*8+1),
+ HCI_SNIFF_MODE_COMMAND : 1 << (4*8+2),
+ HCI_EXIT_SNIFF_MODE_COMMAND : 1 << (4*8+3),
+ HCI_QOS_SETUP_COMMAND : 1 << (4*8+6),
+ HCI_ROLE_DISCOVERY_COMMAND : 1 << (4*8+7),
+ HCI_SWITCH_ROLE_COMMAND : 1 << (5*8+0),
+ HCI_READ_LINK_POLICY_SETTINGS_COMMAND : 1 << (5*8+1),
+ HCI_WRITE_LINK_POLICY_SETTINGS_COMMAND : 1 << (5*8+2),
+ HCI_READ_DEFAULT_LINK_POLICY_SETTINGS_COMMAND : 1 << (5*8+3),
+ HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS_COMMAND : 1 << (5*8+4),
+ HCI_FLOW_SPECIFICATION_COMMAND : 1 << (5*8+5),
+ HCI_SET_EVENT_MASK_COMMAND : 1 << (5*8+6),
+ HCI_RESET_COMMAND : 1 << (5*8+7),
+ HCI_SET_EVENT_FILTER_COMMAND : 1 << (6*8+0),
+ HCI_FLUSH_COMMAND : 1 << (6*8+1),
+ HCI_READ_PIN_TYPE_COMMAND : 1 << (6*8+2),
+ HCI_WRITE_PIN_TYPE_COMMAND : 1 << (6*8+3),
+ HCI_READ_STORED_LINK_KEY_COMMAND : 1 << (6*8+5),
+ HCI_WRITE_STORED_LINK_KEY_COMMAND : 1 << (6*8+6),
+ HCI_DELETE_STORED_LINK_KEY_COMMAND : 1 << (6*8+7),
+ HCI_WRITE_LOCAL_NAME_COMMAND : 1 << (7*8+0),
+ HCI_READ_LOCAL_NAME_COMMAND : 1 << (7*8+1),
+ HCI_READ_CONNECTION_ACCEPT_TIMEOUT_COMMAND : 1 << (7*8+2),
+ HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT_COMMAND : 1 << (7*8+3),
+ HCI_READ_PAGE_TIMEOUT_COMMAND : 1 << (7*8+4),
+ HCI_WRITE_PAGE_TIMEOUT_COMMAND : 1 << (7*8+5),
+ HCI_READ_SCAN_ENABLE_COMMAND : 1 << (7*8+6),
+ HCI_WRITE_SCAN_ENABLE_COMMAND : 1 << (7*8+7),
+ HCI_READ_PAGE_SCAN_ACTIVITY_COMMAND : 1 << (8*8+0),
+ HCI_WRITE_PAGE_SCAN_ACTIVITY_COMMAND : 1 << (8*8+1),
+ HCI_READ_INQUIRY_SCAN_ACTIVITY_COMMAND : 1 << (8*8+2),
+ HCI_WRITE_INQUIRY_SCAN_ACTIVITY_COMMAND : 1 << (8*8+3),
+ HCI_READ_AUTHENTICATION_ENABLE_COMMAND : 1 << (8*8+4),
+ HCI_WRITE_AUTHENTICATION_ENABLE_COMMAND : 1 << (8*8+5),
+ HCI_READ_CLASS_OF_DEVICE_COMMAND : 1 << (9*8+0),
+ HCI_WRITE_CLASS_OF_DEVICE_COMMAND : 1 << (9*8+1),
+ HCI_READ_VOICE_SETTING_COMMAND : 1 << (9*8+2),
+ HCI_WRITE_VOICE_SETTING_COMMAND : 1 << (9*8+3),
+ HCI_READ_AUTOMATIC_FLUSH_TIMEOUT_COMMAND : 1 << (9*8+4),
+ HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT_COMMAND : 1 << (9*8+5),
+ HCI_READ_NUM_BROADCAST_RETRANSMISSIONS_COMMAND : 1 << (9*8+6),
+ HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS_COMMAND : 1 << (9*8+7),
+ HCI_READ_HOLD_MODE_ACTIVITY_COMMAND : 1 << (10*8+0),
+ HCI_WRITE_HOLD_MODE_ACTIVITY_COMMAND : 1 << (10*8+1),
+ HCI_READ_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (10*8+2),
+ HCI_READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE_COMMAND : 1 << (10*8+3),
+ HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE_COMMAND : 1 << (10*8+4),
+ HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL_COMMAND : 1 << (10*8+5),
+ HCI_HOST_BUFFER_SIZE_COMMAND : 1 << (10*8+6),
+ HCI_HOST_NUMBER_OF_COMPLETED_PACKETS_COMMAND : 1 << (10*8+7),
+ HCI_READ_LINK_SUPERVISION_TIMEOUT_COMMAND : 1 << (11*8+0),
+ HCI_WRITE_LINK_SUPERVISION_TIMEOUT_COMMAND : 1 << (11*8+1),
+ HCI_READ_NUMBER_OF_SUPPORTED_IAC_COMMAND : 1 << (11*8+2),
+ HCI_READ_CURRENT_IAC_LAP_COMMAND : 1 << (11*8+3),
+ HCI_WRITE_CURRENT_IAC_LAP_COMMAND : 1 << (11*8+4),
+ HCI_SET_AFH_HOST_CHANNEL_CLASSIFICATION_COMMAND : 1 << (12*8+1),
+ HCI_READ_INQUIRY_SCAN_TYPE_COMMAND : 1 << (12*8+4),
+ HCI_WRITE_INQUIRY_SCAN_TYPE_COMMAND : 1 << (12*8+5),
+ HCI_READ_INQUIRY_MODE_COMMAND : 1 << (12*8+6),
+ HCI_WRITE_INQUIRY_MODE_COMMAND : 1 << (12*8+7),
+ HCI_READ_PAGE_SCAN_TYPE_COMMAND : 1 << (13*8+0),
+ HCI_WRITE_PAGE_SCAN_TYPE_COMMAND : 1 << (13*8+1),
+ HCI_READ_AFH_CHANNEL_ASSESSMENT_MODE_COMMAND : 1 << (13*8+2),
+ HCI_WRITE_AFH_CHANNEL_ASSESSMENT_MODE_COMMAND : 1 << (13*8+3),
+ HCI_READ_LOCAL_VERSION_INFORMATION_COMMAND : 1 << (14*8+3),
+ HCI_READ_LOCAL_SUPPORTED_FEATURES_COMMAND : 1 << (14*8+5),
+ HCI_READ_LOCAL_EXTENDED_FEATURES_COMMAND : 1 << (14*8+6),
+ HCI_READ_BUFFER_SIZE_COMMAND : 1 << (14*8+7),
+ HCI_READ_BD_ADDR_COMMAND : 1 << (15*8+1),
+ HCI_READ_FAILED_CONTACT_COUNTER_COMMAND : 1 << (15*8+2),
+ HCI_RESET_FAILED_CONTACT_COUNTER_COMMAND : 1 << (15*8+3),
+ HCI_READ_LINK_QUALITY_COMMAND : 1 << (15*8+4),
+ HCI_READ_RSSI_COMMAND : 1 << (15*8+5),
+ HCI_READ_AFH_CHANNEL_MAP_COMMAND : 1 << (15*8+6),
+ HCI_READ_CLOCK_COMMAND : 1 << (15*8+7),
+ HCI_READ_LOOPBACK_MODE_COMMAND : 1 << (16*8+0),
+ HCI_WRITE_LOOPBACK_MODE_COMMAND : 1 << (16*8+1),
+ HCI_ENABLE_DEVICE_UNDER_TEST_MODE_COMMAND : 1 << (16*8+2),
+ HCI_SETUP_SYNCHRONOUS_CONNECTION_COMMAND : 1 << (16*8+3),
+ HCI_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND : 1 << (16*8+4),
+ HCI_REJECT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND : 1 << (16*8+5),
+ HCI_READ_EXTENDED_INQUIRY_RESPONSE_COMMAND : 1 << (17*8+0),
+ HCI_WRITE_EXTENDED_INQUIRY_RESPONSE_COMMAND : 1 << (17*8+1),
+ HCI_REFRESH_ENCRYPTION_KEY_COMMAND : 1 << (17*8+2),
+ HCI_SNIFF_SUBRATING_COMMAND : 1 << (17*8+4),
+ HCI_READ_SIMPLE_PAIRING_MODE_COMMAND : 1 << (17*8+5),
+ HCI_WRITE_SIMPLE_PAIRING_MODE_COMMAND : 1 << (17*8+6),
+ HCI_READ_LOCAL_OOB_DATA_COMMAND : 1 << (17*8+7),
+ HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (18*8+0),
+ HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (18*8+1),
+ HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_COMMAND : 1 << (18*8+2),
+ HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_COMMAND : 1 << (18*8+3),
+ HCI_IO_CAPABILITY_REQUEST_REPLY_COMMAND : 1 << (18*8+7),
+ HCI_USER_CONFIRMATION_REQUEST_REPLY_COMMAND : 1 << (19*8+0),
+ HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (19*8+1),
+ HCI_USER_PASSKEY_REQUEST_REPLY_COMMAND : 1 << (19*8+2),
+ HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (19*8+3),
+ HCI_REMOTE_OOB_DATA_REQUEST_REPLY_COMMAND : 1 << (19*8+4),
+ HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE_COMMAND : 1 << (19*8+5),
+ HCI_ENHANCED_FLUSH_COMMAND : 1 << (19*8+6),
+ HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (19*8+7),
+ HCI_SEND_KEYPRESS_NOTIFICATION_COMMAND : 1 << (20*8+2),
+ HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (20*8+3),
+ HCI_READ_ENCRYPTION_KEY_SIZE_COMMAND : 1 << (20*8+4),
+ HCI_SET_EVENT_MASK_PAGE_2_COMMAND : 1 << (22*8+2),
+ HCI_READ_FLOW_CONTROL_MODE_COMMAND : 1 << (23*8+0),
+ HCI_WRITE_FLOW_CONTROL_MODE_COMMAND : 1 << (23*8+1),
+ HCI_READ_DATA_BLOCK_SIZE_COMMAND : 1 << (23*8+2),
+ HCI_READ_ENHANCED_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (24*8+0),
+ HCI_READ_LE_HOST_SUPPORT_COMMAND : 1 << (24*8+5),
+ HCI_WRITE_LE_HOST_SUPPORT_COMMAND : 1 << (24*8+6),
+ HCI_LE_SET_EVENT_MASK_COMMAND : 1 << (25*8+0),
+ HCI_LE_READ_BUFFER_SIZE_COMMAND : 1 << (25*8+1),
+ HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_COMMAND : 1 << (25*8+2),
+ HCI_LE_SET_RANDOM_ADDRESS_COMMAND : 1 << (25*8+4),
+ HCI_LE_SET_ADVERTISING_PARAMETERS_COMMAND : 1 << (25*8+5),
+ HCI_LE_READ_ADVERTISING_PHYSICAL_CHANNEL_TX_POWER_COMMAND : 1 << (25*8+6),
+ HCI_LE_SET_ADVERTISING_DATA_COMMAND : 1 << (25*8+7),
+ HCI_LE_SET_SCAN_RESPONSE_DATA_COMMAND : 1 << (26*8+0),
+ HCI_LE_SET_ADVERTISING_ENABLE_COMMAND : 1 << (26*8+1),
+ HCI_LE_SET_SCAN_PARAMETERS_COMMAND : 1 << (26*8+2),
+ HCI_LE_SET_SCAN_ENABLE_COMMAND : 1 << (26*8+3),
+ HCI_LE_CREATE_CONNECTION_COMMAND : 1 << (26*8+4),
+ HCI_LE_CREATE_CONNECTION_CANCEL_COMMAND : 1 << (26*8+5),
+ HCI_LE_READ_FILTER_ACCEPT_LIST_SIZE_COMMAND : 1 << (26*8+6),
+ HCI_LE_CLEAR_FILTER_ACCEPT_LIST_COMMAND : 1 << (26*8+7),
+ HCI_LE_ADD_DEVICE_TO_FILTER_ACCEPT_LIST_COMMAND : 1 << (27*8+0),
+ HCI_LE_REMOVE_DEVICE_FROM_FILTER_ACCEPT_LIST_COMMAND : 1 << (27*8+1),
+ HCI_LE_CONNECTION_UPDATE_COMMAND : 1 << (27*8+2),
+ HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION_COMMAND : 1 << (27*8+3),
+ HCI_LE_READ_CHANNEL_MAP_COMMAND : 1 << (27*8+4),
+ HCI_LE_READ_REMOTE_FEATURES_COMMAND : 1 << (27*8+5),
+ HCI_LE_ENCRYPT_COMMAND : 1 << (27*8+6),
+ HCI_LE_RAND_COMMAND : 1 << (27*8+7),
+ HCI_LE_ENABLE_ENCRYPTION_COMMAND : 1 << (28*8+0),
+ HCI_LE_LONG_TERM_KEY_REQUEST_REPLY_COMMAND : 1 << (28*8+1),
+ HCI_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (28*8+2),
+ HCI_LE_READ_SUPPORTED_STATES_COMMAND : 1 << (28*8+3),
+ HCI_LE_RECEIVER_TEST_COMMAND : 1 << (28*8+4),
+ HCI_LE_TRANSMITTER_TEST_COMMAND : 1 << (28*8+5),
+ HCI_LE_TEST_END_COMMAND : 1 << (28*8+6),
+ HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION_COMMAND : 1 << (29*8+3),
+ HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND : 1 << (29*8+4),
+ HCI_READ_LOCAL_SUPPORTED_CODECS_COMMAND : 1 << (29*8+5),
+ HCI_SET_MWS_CHANNEL_PARAMETERS_COMMAND : 1 << (29*8+6),
+ HCI_SET_EXTERNAL_FRAME_CONFIGURATION_COMMAND : 1 << (29*8+7),
+ HCI_SET_MWS_SIGNALING_COMMAND : 1 << (30*8+0),
+ HCI_SET_MWS_TRANSPORT_LAYER_COMMAND : 1 << (30*8+1),
+ HCI_SET_MWS_SCAN_FREQUENCY_TABLE_COMMAND : 1 << (30*8+2),
+ HCI_GET_MWS_TRANSPORT_LAYER_CONFIGURATION_COMMAND : 1 << (30*8+3),
+ HCI_SET_MWS_PATTERN_CONFIGURATION_COMMAND : 1 << (30*8+4),
+ HCI_SET_TRIGGERED_CLOCK_CAPTURE_COMMAND : 1 << (30*8+5),
+ HCI_TRUNCATED_PAGE_COMMAND : 1 << (30*8+6),
+ HCI_TRUNCATED_PAGE_CANCEL_COMMAND : 1 << (30*8+7),
+ HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_COMMAND : 1 << (31*8+0),
+ HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_RECEIVE_COMMAND : 1 << (31*8+1),
+ HCI_START_SYNCHRONIZATION_TRAIN_COMMAND : 1 << (31*8+2),
+ HCI_RECEIVE_SYNCHRONIZATION_TRAIN_COMMAND : 1 << (31*8+3),
+ HCI_SET_RESERVED_LT_ADDR_COMMAND : 1 << (31*8+4),
+ HCI_DELETE_RESERVED_LT_ADDR_COMMAND : 1 << (31*8+5),
+ HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_DATA_COMMAND : 1 << (31*8+6),
+ HCI_READ_SYNCHRONIZATION_TRAIN_PARAMETERS_COMMAND : 1 << (31*8+7),
+ HCI_WRITE_SYNCHRONIZATION_TRAIN_PARAMETERS_COMMAND : 1 << (32*8+0),
+ HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_COMMAND : 1 << (32*8+1),
+ HCI_READ_SECURE_CONNECTIONS_HOST_SUPPORT_COMMAND : 1 << (32*8+2),
+ HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT_COMMAND : 1 << (32*8+3),
+ HCI_READ_AUTHENTICATED_PAYLOAD_TIMEOUT_COMMAND : 1 << (32*8+4),
+ HCI_WRITE_AUTHENTICATED_PAYLOAD_TIMEOUT_COMMAND : 1 << (32*8+5),
+ HCI_READ_LOCAL_OOB_EXTENDED_DATA_COMMAND : 1 << (32*8+6),
+ HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE_COMMAND : 1 << (32*8+7),
+ HCI_READ_EXTENDED_PAGE_TIMEOUT_COMMAND : 1 << (33*8+0),
+ HCI_WRITE_EXTENDED_PAGE_TIMEOUT_COMMAND : 1 << (33*8+1),
+ HCI_READ_EXTENDED_INQUIRY_LENGTH_COMMAND : 1 << (33*8+2),
+ HCI_WRITE_EXTENDED_INQUIRY_LENGTH_COMMAND : 1 << (33*8+3),
+ HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY_COMMAND : 1 << (33*8+4),
+ HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (33*8+5),
+ HCI_LE_SET_DATA_LENGTH_COMMAND : 1 << (33*8+6),
+ HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH_COMMAND : 1 << (33*8+7),
+ HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH_COMMAND : 1 << (34*8+0),
+ HCI_LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND : 1 << (34*8+1),
+ HCI_LE_GENERATE_DHKEY_COMMAND : 1 << (34*8+2),
+ HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST_COMMAND : 1 << (34*8+3),
+ HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST_COMMAND : 1 << (34*8+4),
+ HCI_LE_CLEAR_RESOLVING_LIST_COMMAND : 1 << (34*8+5),
+ HCI_LE_READ_RESOLVING_LIST_SIZE_COMMAND : 1 << (34*8+6),
+ HCI_LE_READ_PEER_RESOLVABLE_ADDRESS_COMMAND : 1 << (34*8+7),
+ HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS_COMMAND : 1 << (35*8+0),
+ HCI_LE_SET_ADDRESS_RESOLUTION_ENABLE_COMMAND : 1 << (35*8+1),
+ HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT_COMMAND : 1 << (35*8+2),
+ HCI_LE_READ_MAXIMUM_DATA_LENGTH_COMMAND : 1 << (35*8+3),
+ HCI_LE_READ_PHY_COMMAND : 1 << (35*8+4),
+ HCI_LE_SET_DEFAULT_PHY_COMMAND : 1 << (35*8+5),
+ HCI_LE_SET_PHY_COMMAND : 1 << (35*8+6),
+ HCI_LE_RECEIVER_TEST_V2_COMMAND : 1 << (35*8+7),
+ HCI_LE_TRANSMITTER_TEST_V2_COMMAND : 1 << (36*8+0),
+ HCI_LE_SET_ADVERTISING_SET_RANDOM_ADDRESS_COMMAND : 1 << (36*8+1),
+ HCI_LE_SET_EXTENDED_ADVERTISING_PARAMETERS_COMMAND : 1 << (36*8+2),
+ HCI_LE_SET_EXTENDED_ADVERTISING_DATA_COMMAND : 1 << (36*8+3),
+ HCI_LE_SET_EXTENDED_SCAN_RESPONSE_DATA_COMMAND : 1 << (36*8+4),
+ HCI_LE_SET_EXTENDED_ADVERTISING_ENABLE_COMMAND : 1 << (36*8+5),
+ HCI_LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH_COMMAND : 1 << (36*8+6),
+ HCI_LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS_COMMAND : 1 << (36*8+7),
+ HCI_LE_REMOVE_ADVERTISING_SET_COMMAND : 1 << (37*8+0),
+ HCI_LE_CLEAR_ADVERTISING_SETS_COMMAND : 1 << (37*8+1),
+ HCI_LE_SET_PERIODIC_ADVERTISING_PARAMETERS_COMMAND : 1 << (37*8+2),
+ HCI_LE_SET_PERIODIC_ADVERTISING_DATA_COMMAND : 1 << (37*8+3),
+ HCI_LE_SET_PERIODIC_ADVERTISING_ENABLE_COMMAND : 1 << (37*8+4),
+ HCI_LE_SET_EXTENDED_SCAN_PARAMETERS_COMMAND : 1 << (37*8+5),
+ HCI_LE_SET_EXTENDED_SCAN_ENABLE_COMMAND : 1 << (37*8+6),
+ HCI_LE_EXTENDED_CREATE_CONNECTION_COMMAND : 1 << (37*8+7),
+ HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC_COMMAND : 1 << (38*8+0),
+ HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL_COMMAND : 1 << (38*8+1),
+ HCI_LE_PERIODIC_ADVERTISING_TERMINATE_SYNC_COMMAND : 1 << (38*8+2),
+ HCI_LE_ADD_DEVICE_TO_PERIODIC_ADVERTISER_LIST_COMMAND : 1 << (38*8+3),
+ HCI_LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISER_LIST_COMMAND : 1 << (38*8+4),
+ HCI_LE_CLEAR_PERIODIC_ADVERTISER_LIST_COMMAND : 1 << (38*8+5),
+ HCI_LE_READ_PERIODIC_ADVERTISER_LIST_SIZE_COMMAND : 1 << (38*8+6),
+ HCI_LE_READ_TRANSMIT_POWER_COMMAND : 1 << (38*8+7),
+ HCI_LE_READ_RF_PATH_COMPENSATION_COMMAND : 1 << (39*8+0),
+ HCI_LE_WRITE_RF_PATH_COMPENSATION_COMMAND : 1 << (39*8+1),
+ HCI_LE_SET_PRIVACY_MODE_COMMAND : 1 << (39*8+2),
+ HCI_LE_RECEIVER_TEST_V3_COMMAND : 1 << (39*8+3),
+ HCI_LE_TRANSMITTER_TEST_V3_COMMAND : 1 << (39*8+4),
+ HCI_LE_SET_CONNECTIONLESS_CTE_TRANSMIT_PARAMETERS_COMMAND : 1 << (39*8+5),
+ HCI_LE_SET_CONNECTIONLESS_CTE_TRANSMIT_ENABLE_COMMAND : 1 << (39*8+6),
+ HCI_LE_SET_CONNECTIONLESS_IQ_SAMPLING_ENABLE_COMMAND : 1 << (39*8+7),
+ HCI_LE_SET_CONNECTION_CTE_RECEIVE_PARAMETERS_COMMAND : 1 << (40*8+0),
+ HCI_LE_SET_CONNECTION_CTE_TRANSMIT_PARAMETERS_COMMAND : 1 << (40*8+1),
+ HCI_LE_CONNECTION_CTE_REQUEST_ENABLE_COMMAND : 1 << (40*8+2),
+ HCI_LE_CONNECTION_CTE_RESPONSE_ENABLE_COMMAND : 1 << (40*8+3),
+ HCI_LE_READ_ANTENNA_INFORMATION_COMMAND : 1 << (40*8+4),
+ HCI_LE_SET_PERIODIC_ADVERTISING_RECEIVE_ENABLE_COMMAND : 1 << (40*8+5),
+ HCI_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_COMMAND : 1 << (40*8+6),
+ HCI_LE_PERIODIC_ADVERTISING_SET_INFO_TRANSFER_COMMAND : 1 << (40*8+7),
+ HCI_LE_SET_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS_COMMAND : 1 << (41*8+0),
+ HCI_LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS_COMMAND : 1 << (41*8+1),
+ HCI_LE_GENERATE_DHKEY_V2_COMMAND : 1 << (41*8+2),
+ HCI_READ_LOCAL_SIMPLE_PAIRING_OPTIONS_COMMAND : 1 << (41*8+3),
+ HCI_LE_MODIFY_SLEEP_CLOCK_ACCURACY_COMMAND : 1 << (41*8+4),
+ HCI_LE_READ_BUFFER_SIZE_V2_COMMAND : 1 << (41*8+5),
+ HCI_LE_READ_ISO_TX_SYNC_COMMAND : 1 << (41*8+6),
+ HCI_LE_SET_CIG_PARAMETERS_COMMAND : 1 << (41*8+7),
+ HCI_LE_SET_CIG_PARAMETERS_TEST_COMMAND : 1 << (42*8+0),
+ HCI_LE_CREATE_CIS_COMMAND : 1 << (42*8+1),
+ HCI_LE_REMOVE_CIG_COMMAND : 1 << (42*8+2),
+ HCI_LE_ACCEPT_CIS_REQUEST_COMMAND : 1 << (42*8+3),
+ HCI_LE_REJECT_CIS_REQUEST_COMMAND : 1 << (42*8+4),
+ HCI_LE_CREATE_BIG_COMMAND : 1 << (42*8+5),
+ HCI_LE_CREATE_BIG_TEST_COMMAND : 1 << (42*8+6),
+ HCI_LE_TERMINATE_BIG_COMMAND : 1 << (42*8+7),
+ HCI_LE_BIG_CREATE_SYNC_COMMAND : 1 << (43*8+0),
+ HCI_LE_BIG_TERMINATE_SYNC_COMMAND : 1 << (43*8+1),
+ HCI_LE_REQUEST_PEER_SCA_COMMAND : 1 << (43*8+2),
+ HCI_LE_SETUP_ISO_DATA_PATH_COMMAND : 1 << (43*8+3),
+ HCI_LE_REMOVE_ISO_DATA_PATH_COMMAND : 1 << (43*8+4),
+ HCI_LE_ISO_TRANSMIT_TEST_COMMAND : 1 << (43*8+5),
+ HCI_LE_ISO_RECEIVE_TEST_COMMAND : 1 << (43*8+6),
+ HCI_LE_ISO_READ_TEST_COUNTERS_COMMAND : 1 << (43*8+7),
+ HCI_LE_ISO_TEST_END_COMMAND : 1 << (44*8+0),
+ HCI_LE_SET_HOST_FEATURE_COMMAND : 1 << (44*8+1),
+ HCI_LE_READ_ISO_LINK_QUALITY_COMMAND : 1 << (44*8+2),
+ HCI_LE_ENHANCED_READ_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (44*8+3),
+ HCI_LE_READ_REMOTE_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (44*8+4),
+ HCI_LE_SET_PATH_LOSS_REPORTING_PARAMETERS_COMMAND : 1 << (44*8+5),
+ HCI_LE_SET_PATH_LOSS_REPORTING_ENABLE_COMMAND : 1 << (44*8+6),
+ HCI_LE_SET_TRANSMIT_POWER_REPORTING_ENABLE_COMMAND : 1 << (44*8+7),
+ HCI_LE_TRANSMITTER_TEST_V4_COMMAND : 1 << (45*8+0),
+ HCI_SET_ECOSYSTEM_BASE_INTERVAL_COMMAND : 1 << (45*8+1),
+ HCI_READ_LOCAL_SUPPORTED_CODECS_V2_COMMAND : 1 << (45*8+2),
+ HCI_READ_LOCAL_SUPPORTED_CODEC_CAPABILITIES_COMMAND : 1 << (45*8+3),
+ HCI_READ_LOCAL_SUPPORTED_CONTROLLER_DELAY_COMMAND : 1 << (45*8+4),
+ HCI_CONFIGURE_DATA_PATH_COMMAND : 1 << (45*8+5),
+ HCI_LE_SET_DATA_RELATED_ADDRESS_CHANGES_COMMAND : 1 << (45*8+6),
+ HCI_SET_MIN_ENCRYPTION_KEY_SIZE_COMMAND : 1 << (45*8+7),
+ HCI_LE_SET_DEFAULT_SUBRATE_COMMAND : 1 << (46*8+0),
+ HCI_LE_SUBRATE_REQUEST_COMMAND : 1 << (46*8+1),
+ HCI_LE_SET_EXTENDED_ADVERTISING_PARAMETERS_V2_COMMAND : 1 << (46*8+2),
+ HCI_LE_SET_PERIODIC_ADVERTISING_SUBEVENT_DATA_COMMAND : 1 << (46*8+5),
+ HCI_LE_SET_PERIODIC_ADVERTISING_RESPONSE_DATA_COMMAND : 1 << (46*8+6),
+ HCI_LE_SET_PERIODIC_SYNC_SUBEVENT_COMMAND : 1 << (46*8+7),
+ HCI_LE_EXTENDED_CREATE_CONNECTION_V2_COMMAND : 1 << (47*8+0),
+ HCI_LE_SET_PERIODIC_ADVERTISING_PARAMETERS_V2_COMMAND : 1 << (47*8+1),
+}
# LE Supported Features
# See Bluetooth spec @ Vol 6, Part B, 4.6 FEATURE SUPPORT
diff --git a/bumble/host.py b/bumble/host.py
index e65d465..ab0df66 100644
--- a/bumble/host.py
+++ b/bumble/host.py
@@ -22,7 +22,17 @@ import dataclasses
import logging
import struct
-from typing import Any, Awaitable, Callable, Deque, Dict, Optional, cast, TYPE_CHECKING
+from typing import (
+ Any,
+ Awaitable,
+ Callable,
+ Deque,
+ Dict,
+ Optional,
+ Set,
+ cast,
+ TYPE_CHECKING,
+)
from bumble.colors import color
from bumble.l2cap import L2CAP_PDU
@@ -165,7 +175,7 @@ class Host(AbortableEventEmitter):
self.number_of_supported_advertising_sets = 0
self.maximum_advertising_data_length = 31
self.local_version = None
- self.local_supported_commands = bytes(64)
+ self.local_supported_commands = 0
self.local_le_features = 0
self.local_lmp_features = hci.LmpFeatureMask(0) # Classic LMP features
self.suggested_max_tx_octets = 251 # Max allowed
@@ -232,7 +242,9 @@ class Host(AbortableEventEmitter):
response = await self.send_command(
hci.HCI_Read_Local_Supported_Commands_Command(), check_result=True
)
- self.local_supported_commands = response.return_parameters.supported_commands
+ self.local_supported_commands = int.from_bytes(
+ response.return_parameters.supported_commands, 'little'
+ )
if self.supports_command(hci.HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_COMMAND):
response = await self.send_command(
@@ -583,31 +595,19 @@ class Host(AbortableEventEmitter):
offset += data_total_length
bytes_remaining -= data_total_length
- def supports_command(self, command):
- # Find the support flag position for this command
- for octet, flags in enumerate(hci.HCI_SUPPORTED_COMMANDS_FLAGS):
- for flag_position, value in enumerate(flags):
- if value == command:
- # Check if the flag is set
- if octet < len(self.local_supported_commands) and flag_position < 8:
- return (
- self.local_supported_commands[octet] & (1 << flag_position)
- ) != 0
-
- return False
+ def supports_command(self, op_code: int) -> bool:
+ return (
+ self.local_supported_commands
+ & hci.HCI_SUPPORTED_COMMANDS_MASKS.get(op_code, 0)
+ ) != 0
@property
- def supported_commands(self):
- commands = []
- for octet, flags in enumerate(self.local_supported_commands):
- if octet < len(hci.HCI_SUPPORTED_COMMANDS_FLAGS):
- for flag in range(8):
- if flags & (1 << flag) != 0:
- command = hci.HCI_SUPPORTED_COMMANDS_FLAGS[octet][flag]
- if command is not None:
- commands.append(command)
-
- return commands
+ def supported_commands(self) -> Set[int]:
+ return set(
+ op_code
+ for op_code, mask in hci.HCI_SUPPORTED_COMMANDS_MASKS.items()
+ if self.local_supported_commands & mask
+ )
def supports_le_features(self, feature: hci.LeFeatureMask) -> bool:
return (self.local_le_features & feature) == feature