diff options
author | Josh Wu <joshwu@google.com> | 2024-02-05 02:21:16 +0800 |
---|---|---|
committer | Josh Wu <joshwu@google.com> | 2024-02-06 12:06:00 +0800 |
commit | 0e6d69cd7b33cdaa144ab220e7dec2aa7bc1994e (patch) | |
tree | ae3909a80e7d5fb27a7821bdc8640886102a7b41 | |
parent | f4aeaa6eb3f66b516e702c9e78006a5685abdcf7 (diff) | |
download | bumble-0e6d69cd7b33cdaa144ab220e7dec2aa7bc1994e.tar.gz |
Refactor command supporting list
-rw-r--r-- | bumble/hci.py | 841 | ||||
-rw-r--r-- | bumble/host.py | 52 |
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 |