Refactor command supporting list

This commit is contained in:
Josh Wu
2024-02-05 02:21:16 +08:00
parent f4aeaa6eb3
commit 0e6d69cd7b
2 changed files with 336 additions and 557 deletions

View File

@@ -790,538 +790,317 @@ HCI_RANDOM_DEVICE_ADDRESS_TYPE = 0x01
HCI_PUBLIC_IDENTITY_ADDRESS_TYPE = 0x02 HCI_PUBLIC_IDENTITY_ADDRESS_TYPE = 0x02
HCI_RANDOM_IDENTITY_ADDRESS_TYPE = 0x03 HCI_RANDOM_IDENTITY_ADDRESS_TYPE = 0x03
# Supported Commands Flags # Supported Commands Masks
# See Bluetooth spec @ 6.27 SUPPORTED COMMANDS # See Bluetooth spec @ 6.27 SUPPORTED COMMANDS
HCI_SUPPORTED_COMMANDS_FLAGS = ( HCI_SUPPORTED_COMMANDS_MASKS = {
# Octet 0 HCI_INQUIRY_COMMAND : 1 << (0*8+0),
( HCI_INQUIRY_CANCEL_COMMAND : 1 << (0*8+1),
HCI_INQUIRY_COMMAND, HCI_PERIODIC_INQUIRY_MODE_COMMAND : 1 << (0*8+2),
HCI_INQUIRY_CANCEL_COMMAND, HCI_EXIT_PERIODIC_INQUIRY_MODE_COMMAND : 1 << (0*8+3),
HCI_PERIODIC_INQUIRY_MODE_COMMAND, HCI_CREATE_CONNECTION_COMMAND : 1 << (0*8+4),
HCI_EXIT_PERIODIC_INQUIRY_MODE_COMMAND, HCI_DISCONNECT_COMMAND : 1 << (0*8+5),
HCI_CREATE_CONNECTION_COMMAND, HCI_CREATE_CONNECTION_CANCEL_COMMAND : 1 << (0*8+7),
HCI_DISCONNECT_COMMAND, HCI_ACCEPT_CONNECTION_REQUEST_COMMAND : 1 << (1*8+0),
None, HCI_REJECT_CONNECTION_REQUEST_COMMAND : 1 << (1*8+1),
HCI_CREATE_CONNECTION_CANCEL_COMMAND HCI_LINK_KEY_REQUEST_REPLY_COMMAND : 1 << (1*8+2),
), HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (1*8+3),
# Octet 1 HCI_PIN_CODE_REQUEST_REPLY_COMMAND : 1 << (1*8+4),
( HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (1*8+5),
HCI_ACCEPT_CONNECTION_REQUEST_COMMAND, HCI_CHANGE_CONNECTION_PACKET_TYPE_COMMAND : 1 << (1*8+6),
HCI_REJECT_CONNECTION_REQUEST_COMMAND, HCI_AUTHENTICATION_REQUESTED_COMMAND : 1 << (1*8+7),
HCI_LINK_KEY_REQUEST_REPLY_COMMAND, HCI_SET_CONNECTION_ENCRYPTION_COMMAND : 1 << (2*8+0),
HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY_COMMAND, HCI_CHANGE_CONNECTION_LINK_KEY_COMMAND : 1 << (2*8+1),
HCI_PIN_CODE_REQUEST_REPLY_COMMAND, HCI_LINK_KEY_SELECTION_COMMAND : 1 << (2*8+2),
HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY_COMMAND, HCI_REMOTE_NAME_REQUEST_COMMAND : 1 << (2*8+3),
HCI_CHANGE_CONNECTION_PACKET_TYPE_COMMAND, HCI_REMOTE_NAME_REQUEST_CANCEL_COMMAND : 1 << (2*8+4),
HCI_AUTHENTICATION_REQUESTED_COMMAND HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND : 1 << (2*8+5),
), HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND : 1 << (2*8+6),
# Octet 2 HCI_READ_REMOTE_VERSION_INFORMATION_COMMAND : 1 << (2*8+7),
( HCI_READ_CLOCK_OFFSET_COMMAND : 1 << (3*8+0),
HCI_SET_CONNECTION_ENCRYPTION_COMMAND, HCI_READ_LMP_HANDLE_COMMAND : 1 << (3*8+1),
HCI_CHANGE_CONNECTION_LINK_KEY_COMMAND, HCI_HOLD_MODE_COMMAND : 1 << (4*8+1),
HCI_LINK_KEY_SELECTION_COMMAND, HCI_SNIFF_MODE_COMMAND : 1 << (4*8+2),
HCI_REMOTE_NAME_REQUEST_COMMAND, HCI_EXIT_SNIFF_MODE_COMMAND : 1 << (4*8+3),
HCI_REMOTE_NAME_REQUEST_CANCEL_COMMAND, HCI_QOS_SETUP_COMMAND : 1 << (4*8+6),
HCI_READ_REMOTE_SUPPORTED_FEATURES_COMMAND, HCI_ROLE_DISCOVERY_COMMAND : 1 << (4*8+7),
HCI_READ_REMOTE_EXTENDED_FEATURES_COMMAND, HCI_SWITCH_ROLE_COMMAND : 1 << (5*8+0),
HCI_READ_REMOTE_VERSION_INFORMATION_COMMAND HCI_READ_LINK_POLICY_SETTINGS_COMMAND : 1 << (5*8+1),
), HCI_WRITE_LINK_POLICY_SETTINGS_COMMAND : 1 << (5*8+2),
# Octet 3 HCI_READ_DEFAULT_LINK_POLICY_SETTINGS_COMMAND : 1 << (5*8+3),
( HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS_COMMAND : 1 << (5*8+4),
HCI_READ_CLOCK_OFFSET_COMMAND, HCI_FLOW_SPECIFICATION_COMMAND : 1 << (5*8+5),
HCI_READ_LMP_HANDLE_COMMAND, HCI_SET_EVENT_MASK_COMMAND : 1 << (5*8+6),
None, HCI_RESET_COMMAND : 1 << (5*8+7),
None, HCI_SET_EVENT_FILTER_COMMAND : 1 << (6*8+0),
None, HCI_FLUSH_COMMAND : 1 << (6*8+1),
None, HCI_READ_PIN_TYPE_COMMAND : 1 << (6*8+2),
None, HCI_WRITE_PIN_TYPE_COMMAND : 1 << (6*8+3),
None HCI_READ_STORED_LINK_KEY_COMMAND : 1 << (6*8+5),
), HCI_WRITE_STORED_LINK_KEY_COMMAND : 1 << (6*8+6),
# Octet 4 HCI_DELETE_STORED_LINK_KEY_COMMAND : 1 << (6*8+7),
( HCI_WRITE_LOCAL_NAME_COMMAND : 1 << (7*8+0),
None, HCI_READ_LOCAL_NAME_COMMAND : 1 << (7*8+1),
HCI_HOLD_MODE_COMMAND, HCI_READ_CONNECTION_ACCEPT_TIMEOUT_COMMAND : 1 << (7*8+2),
HCI_SNIFF_MODE_COMMAND, HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT_COMMAND : 1 << (7*8+3),
HCI_EXIT_SNIFF_MODE_COMMAND, HCI_READ_PAGE_TIMEOUT_COMMAND : 1 << (7*8+4),
None, HCI_WRITE_PAGE_TIMEOUT_COMMAND : 1 << (7*8+5),
None, HCI_READ_SCAN_ENABLE_COMMAND : 1 << (7*8+6),
HCI_QOS_SETUP_COMMAND, HCI_WRITE_SCAN_ENABLE_COMMAND : 1 << (7*8+7),
HCI_ROLE_DISCOVERY_COMMAND HCI_READ_PAGE_SCAN_ACTIVITY_COMMAND : 1 << (8*8+0),
), HCI_WRITE_PAGE_SCAN_ACTIVITY_COMMAND : 1 << (8*8+1),
# Octet 5 HCI_READ_INQUIRY_SCAN_ACTIVITY_COMMAND : 1 << (8*8+2),
( HCI_WRITE_INQUIRY_SCAN_ACTIVITY_COMMAND : 1 << (8*8+3),
HCI_SWITCH_ROLE_COMMAND, HCI_READ_AUTHENTICATION_ENABLE_COMMAND : 1 << (8*8+4),
HCI_READ_LINK_POLICY_SETTINGS_COMMAND, HCI_WRITE_AUTHENTICATION_ENABLE_COMMAND : 1 << (8*8+5),
HCI_WRITE_LINK_POLICY_SETTINGS_COMMAND, HCI_READ_CLASS_OF_DEVICE_COMMAND : 1 << (9*8+0),
HCI_READ_DEFAULT_LINK_POLICY_SETTINGS_COMMAND, HCI_WRITE_CLASS_OF_DEVICE_COMMAND : 1 << (9*8+1),
HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS_COMMAND, HCI_READ_VOICE_SETTING_COMMAND : 1 << (9*8+2),
HCI_FLOW_SPECIFICATION_COMMAND, HCI_WRITE_VOICE_SETTING_COMMAND : 1 << (9*8+3),
HCI_SET_EVENT_MASK_COMMAND, HCI_READ_AUTOMATIC_FLUSH_TIMEOUT_COMMAND : 1 << (9*8+4),
HCI_RESET_COMMAND HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT_COMMAND : 1 << (9*8+5),
), HCI_READ_NUM_BROADCAST_RETRANSMISSIONS_COMMAND : 1 << (9*8+6),
# Octet 6 HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS_COMMAND : 1 << (9*8+7),
( HCI_READ_HOLD_MODE_ACTIVITY_COMMAND : 1 << (10*8+0),
HCI_SET_EVENT_FILTER_COMMAND, HCI_WRITE_HOLD_MODE_ACTIVITY_COMMAND : 1 << (10*8+1),
HCI_FLUSH_COMMAND, HCI_READ_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (10*8+2),
HCI_READ_PIN_TYPE_COMMAND, HCI_READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE_COMMAND : 1 << (10*8+3),
HCI_WRITE_PIN_TYPE_COMMAND, HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE_COMMAND : 1 << (10*8+4),
None, HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL_COMMAND : 1 << (10*8+5),
HCI_READ_STORED_LINK_KEY_COMMAND, HCI_HOST_BUFFER_SIZE_COMMAND : 1 << (10*8+6),
HCI_WRITE_STORED_LINK_KEY_COMMAND, HCI_HOST_NUMBER_OF_COMPLETED_PACKETS_COMMAND : 1 << (10*8+7),
HCI_DELETE_STORED_LINK_KEY_COMMAND HCI_READ_LINK_SUPERVISION_TIMEOUT_COMMAND : 1 << (11*8+0),
), HCI_WRITE_LINK_SUPERVISION_TIMEOUT_COMMAND : 1 << (11*8+1),
# Octet 7 HCI_READ_NUMBER_OF_SUPPORTED_IAC_COMMAND : 1 << (11*8+2),
( HCI_READ_CURRENT_IAC_LAP_COMMAND : 1 << (11*8+3),
HCI_WRITE_LOCAL_NAME_COMMAND, HCI_WRITE_CURRENT_IAC_LAP_COMMAND : 1 << (11*8+4),
HCI_READ_LOCAL_NAME_COMMAND, HCI_SET_AFH_HOST_CHANNEL_CLASSIFICATION_COMMAND : 1 << (12*8+1),
HCI_READ_CONNECTION_ACCEPT_TIMEOUT_COMMAND, HCI_READ_INQUIRY_SCAN_TYPE_COMMAND : 1 << (12*8+4),
HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT_COMMAND, HCI_WRITE_INQUIRY_SCAN_TYPE_COMMAND : 1 << (12*8+5),
HCI_READ_PAGE_TIMEOUT_COMMAND, HCI_READ_INQUIRY_MODE_COMMAND : 1 << (12*8+6),
HCI_WRITE_PAGE_TIMEOUT_COMMAND, HCI_WRITE_INQUIRY_MODE_COMMAND : 1 << (12*8+7),
HCI_READ_SCAN_ENABLE_COMMAND, HCI_READ_PAGE_SCAN_TYPE_COMMAND : 1 << (13*8+0),
HCI_WRITE_SCAN_ENABLE_COMMAND HCI_WRITE_PAGE_SCAN_TYPE_COMMAND : 1 << (13*8+1),
), HCI_READ_AFH_CHANNEL_ASSESSMENT_MODE_COMMAND : 1 << (13*8+2),
# Octet 8 HCI_WRITE_AFH_CHANNEL_ASSESSMENT_MODE_COMMAND : 1 << (13*8+3),
( HCI_READ_LOCAL_VERSION_INFORMATION_COMMAND : 1 << (14*8+3),
HCI_READ_PAGE_SCAN_ACTIVITY_COMMAND, HCI_READ_LOCAL_SUPPORTED_FEATURES_COMMAND : 1 << (14*8+5),
HCI_WRITE_PAGE_SCAN_ACTIVITY_COMMAND, HCI_READ_LOCAL_EXTENDED_FEATURES_COMMAND : 1 << (14*8+6),
HCI_READ_INQUIRY_SCAN_ACTIVITY_COMMAND, HCI_READ_BUFFER_SIZE_COMMAND : 1 << (14*8+7),
HCI_WRITE_INQUIRY_SCAN_ACTIVITY_COMMAND, HCI_READ_BD_ADDR_COMMAND : 1 << (15*8+1),
HCI_READ_AUTHENTICATION_ENABLE_COMMAND, HCI_READ_FAILED_CONTACT_COUNTER_COMMAND : 1 << (15*8+2),
HCI_WRITE_AUTHENTICATION_ENABLE_COMMAND, HCI_RESET_FAILED_CONTACT_COUNTER_COMMAND : 1 << (15*8+3),
None, HCI_READ_LINK_QUALITY_COMMAND : 1 << (15*8+4),
None HCI_READ_RSSI_COMMAND : 1 << (15*8+5),
), HCI_READ_AFH_CHANNEL_MAP_COMMAND : 1 << (15*8+6),
# Octet 9 HCI_READ_CLOCK_COMMAND : 1 << (15*8+7),
( HCI_READ_LOOPBACK_MODE_COMMAND : 1 << (16*8+0),
HCI_READ_CLASS_OF_DEVICE_COMMAND, HCI_WRITE_LOOPBACK_MODE_COMMAND : 1 << (16*8+1),
HCI_WRITE_CLASS_OF_DEVICE_COMMAND, HCI_ENABLE_DEVICE_UNDER_TEST_MODE_COMMAND : 1 << (16*8+2),
HCI_READ_VOICE_SETTING_COMMAND, HCI_SETUP_SYNCHRONOUS_CONNECTION_COMMAND : 1 << (16*8+3),
HCI_WRITE_VOICE_SETTING_COMMAND, HCI_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND : 1 << (16*8+4),
HCI_READ_AUTOMATIC_FLUSH_TIMEOUT_COMMAND, HCI_REJECT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND : 1 << (16*8+5),
HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT_COMMAND, HCI_READ_EXTENDED_INQUIRY_RESPONSE_COMMAND : 1 << (17*8+0),
HCI_READ_NUM_BROADCAST_RETRANSMISSIONS_COMMAND, HCI_WRITE_EXTENDED_INQUIRY_RESPONSE_COMMAND : 1 << (17*8+1),
HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS_COMMAND HCI_REFRESH_ENCRYPTION_KEY_COMMAND : 1 << (17*8+2),
), HCI_SNIFF_SUBRATING_COMMAND : 1 << (17*8+4),
# Octet 10 HCI_READ_SIMPLE_PAIRING_MODE_COMMAND : 1 << (17*8+5),
( HCI_WRITE_SIMPLE_PAIRING_MODE_COMMAND : 1 << (17*8+6),
HCI_READ_HOLD_MODE_ACTIVITY_COMMAND, HCI_READ_LOCAL_OOB_DATA_COMMAND : 1 << (17*8+7),
HCI_WRITE_HOLD_MODE_ACTIVITY_COMMAND, HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (18*8+0),
HCI_READ_TRANSMIT_POWER_LEVEL_COMMAND, HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (18*8+1),
HCI_READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE_COMMAND, HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_COMMAND : 1 << (18*8+2),
HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE_COMMAND, HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_COMMAND : 1 << (18*8+3),
HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL_COMMAND, HCI_IO_CAPABILITY_REQUEST_REPLY_COMMAND : 1 << (18*8+7),
HCI_HOST_BUFFER_SIZE_COMMAND, HCI_USER_CONFIRMATION_REQUEST_REPLY_COMMAND : 1 << (19*8+0),
HCI_HOST_NUMBER_OF_COMPLETED_PACKETS_COMMAND HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (19*8+1),
), HCI_USER_PASSKEY_REQUEST_REPLY_COMMAND : 1 << (19*8+2),
# Octet 11 HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (19*8+3),
( HCI_REMOTE_OOB_DATA_REQUEST_REPLY_COMMAND : 1 << (19*8+4),
HCI_READ_LINK_SUPERVISION_TIMEOUT_COMMAND, HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE_COMMAND : 1 << (19*8+5),
HCI_WRITE_LINK_SUPERVISION_TIMEOUT_COMMAND, HCI_ENHANCED_FLUSH_COMMAND : 1 << (19*8+6),
HCI_READ_NUMBER_OF_SUPPORTED_IAC_COMMAND, HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (19*8+7),
HCI_READ_CURRENT_IAC_LAP_COMMAND, HCI_SEND_KEYPRESS_NOTIFICATION_COMMAND : 1 << (20*8+2),
HCI_WRITE_CURRENT_IAC_LAP_COMMAND, HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (20*8+3),
None, HCI_READ_ENCRYPTION_KEY_SIZE_COMMAND : 1 << (20*8+4),
None, HCI_SET_EVENT_MASK_PAGE_2_COMMAND : 1 << (22*8+2),
None HCI_READ_FLOW_CONTROL_MODE_COMMAND : 1 << (23*8+0),
), HCI_WRITE_FLOW_CONTROL_MODE_COMMAND : 1 << (23*8+1),
# Octet 12 HCI_READ_DATA_BLOCK_SIZE_COMMAND : 1 << (23*8+2),
( HCI_READ_ENHANCED_TRANSMIT_POWER_LEVEL_COMMAND : 1 << (24*8+0),
None, HCI_READ_LE_HOST_SUPPORT_COMMAND : 1 << (24*8+5),
HCI_SET_AFH_HOST_CHANNEL_CLASSIFICATION_COMMAND, HCI_WRITE_LE_HOST_SUPPORT_COMMAND : 1 << (24*8+6),
None, HCI_LE_SET_EVENT_MASK_COMMAND : 1 << (25*8+0),
None, HCI_LE_READ_BUFFER_SIZE_COMMAND : 1 << (25*8+1),
HCI_READ_INQUIRY_SCAN_TYPE_COMMAND, HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_COMMAND : 1 << (25*8+2),
HCI_WRITE_INQUIRY_SCAN_TYPE_COMMAND, HCI_LE_SET_RANDOM_ADDRESS_COMMAND : 1 << (25*8+4),
HCI_READ_INQUIRY_MODE_COMMAND, HCI_LE_SET_ADVERTISING_PARAMETERS_COMMAND : 1 << (25*8+5),
HCI_WRITE_INQUIRY_MODE_COMMAND HCI_LE_READ_ADVERTISING_PHYSICAL_CHANNEL_TX_POWER_COMMAND : 1 << (25*8+6),
), HCI_LE_SET_ADVERTISING_DATA_COMMAND : 1 << (25*8+7),
# Octet 13 HCI_LE_SET_SCAN_RESPONSE_DATA_COMMAND : 1 << (26*8+0),
( HCI_LE_SET_ADVERTISING_ENABLE_COMMAND : 1 << (26*8+1),
HCI_READ_PAGE_SCAN_TYPE_COMMAND, HCI_LE_SET_SCAN_PARAMETERS_COMMAND : 1 << (26*8+2),
HCI_WRITE_PAGE_SCAN_TYPE_COMMAND, HCI_LE_SET_SCAN_ENABLE_COMMAND : 1 << (26*8+3),
HCI_READ_AFH_CHANNEL_ASSESSMENT_MODE_COMMAND, HCI_LE_CREATE_CONNECTION_COMMAND : 1 << (26*8+4),
HCI_WRITE_AFH_CHANNEL_ASSESSMENT_MODE_COMMAND, HCI_LE_CREATE_CONNECTION_CANCEL_COMMAND : 1 << (26*8+5),
None, HCI_LE_READ_FILTER_ACCEPT_LIST_SIZE_COMMAND : 1 << (26*8+6),
None, HCI_LE_CLEAR_FILTER_ACCEPT_LIST_COMMAND : 1 << (26*8+7),
None, HCI_LE_ADD_DEVICE_TO_FILTER_ACCEPT_LIST_COMMAND : 1 << (27*8+0),
None, HCI_LE_REMOVE_DEVICE_FROM_FILTER_ACCEPT_LIST_COMMAND : 1 << (27*8+1),
), HCI_LE_CONNECTION_UPDATE_COMMAND : 1 << (27*8+2),
# Octet 14 HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION_COMMAND : 1 << (27*8+3),
( HCI_LE_READ_CHANNEL_MAP_COMMAND : 1 << (27*8+4),
None, HCI_LE_READ_REMOTE_FEATURES_COMMAND : 1 << (27*8+5),
None, HCI_LE_ENCRYPT_COMMAND : 1 << (27*8+6),
None, HCI_LE_RAND_COMMAND : 1 << (27*8+7),
HCI_READ_LOCAL_VERSION_INFORMATION_COMMAND, HCI_LE_ENABLE_ENCRYPTION_COMMAND : 1 << (28*8+0),
None, HCI_LE_LONG_TERM_KEY_REQUEST_REPLY_COMMAND : 1 << (28*8+1),
HCI_READ_LOCAL_SUPPORTED_FEATURES_COMMAND, HCI_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (28*8+2),
HCI_READ_LOCAL_EXTENDED_FEATURES_COMMAND, HCI_LE_READ_SUPPORTED_STATES_COMMAND : 1 << (28*8+3),
HCI_READ_BUFFER_SIZE_COMMAND HCI_LE_RECEIVER_TEST_COMMAND : 1 << (28*8+4),
), HCI_LE_TRANSMITTER_TEST_COMMAND : 1 << (28*8+5),
# Octet 15 HCI_LE_TEST_END_COMMAND : 1 << (28*8+6),
( HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION_COMMAND : 1 << (29*8+3),
None, HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND : 1 << (29*8+4),
HCI_READ_BD_ADDR_COMMAND, HCI_READ_LOCAL_SUPPORTED_CODECS_COMMAND : 1 << (29*8+5),
HCI_READ_FAILED_CONTACT_COUNTER_COMMAND, HCI_SET_MWS_CHANNEL_PARAMETERS_COMMAND : 1 << (29*8+6),
HCI_RESET_FAILED_CONTACT_COUNTER_COMMAND, HCI_SET_EXTERNAL_FRAME_CONFIGURATION_COMMAND : 1 << (29*8+7),
HCI_READ_LINK_QUALITY_COMMAND, HCI_SET_MWS_SIGNALING_COMMAND : 1 << (30*8+0),
HCI_READ_RSSI_COMMAND, HCI_SET_MWS_TRANSPORT_LAYER_COMMAND : 1 << (30*8+1),
HCI_READ_AFH_CHANNEL_MAP_COMMAND, HCI_SET_MWS_SCAN_FREQUENCY_TABLE_COMMAND : 1 << (30*8+2),
HCI_READ_CLOCK_COMMAND HCI_GET_MWS_TRANSPORT_LAYER_CONFIGURATION_COMMAND : 1 << (30*8+3),
), HCI_SET_MWS_PATTERN_CONFIGURATION_COMMAND : 1 << (30*8+4),
# Octet 16 HCI_SET_TRIGGERED_CLOCK_CAPTURE_COMMAND : 1 << (30*8+5),
( HCI_TRUNCATED_PAGE_COMMAND : 1 << (30*8+6),
HCI_READ_LOOPBACK_MODE_COMMAND, HCI_TRUNCATED_PAGE_CANCEL_COMMAND : 1 << (30*8+7),
HCI_WRITE_LOOPBACK_MODE_COMMAND, HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_COMMAND : 1 << (31*8+0),
HCI_ENABLE_DEVICE_UNDER_TEST_MODE_COMMAND, HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_RECEIVE_COMMAND : 1 << (31*8+1),
HCI_SETUP_SYNCHRONOUS_CONNECTION_COMMAND, HCI_START_SYNCHRONIZATION_TRAIN_COMMAND : 1 << (31*8+2),
HCI_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND, HCI_RECEIVE_SYNCHRONIZATION_TRAIN_COMMAND : 1 << (31*8+3),
HCI_REJECT_SYNCHRONOUS_CONNECTION_REQUEST_COMMAND, HCI_SET_RESERVED_LT_ADDR_COMMAND : 1 << (31*8+4),
None, HCI_DELETE_RESERVED_LT_ADDR_COMMAND : 1 << (31*8+5),
None, HCI_SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_DATA_COMMAND : 1 << (31*8+6),
), HCI_READ_SYNCHRONIZATION_TRAIN_PARAMETERS_COMMAND : 1 << (31*8+7),
# Octet 17 HCI_WRITE_SYNCHRONIZATION_TRAIN_PARAMETERS_COMMAND : 1 << (32*8+0),
( HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY_COMMAND : 1 << (32*8+1),
HCI_READ_EXTENDED_INQUIRY_RESPONSE_COMMAND, HCI_READ_SECURE_CONNECTIONS_HOST_SUPPORT_COMMAND : 1 << (32*8+2),
HCI_WRITE_EXTENDED_INQUIRY_RESPONSE_COMMAND, HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT_COMMAND : 1 << (32*8+3),
HCI_REFRESH_ENCRYPTION_KEY_COMMAND, HCI_READ_AUTHENTICATED_PAYLOAD_TIMEOUT_COMMAND : 1 << (32*8+4),
None, HCI_WRITE_AUTHENTICATED_PAYLOAD_TIMEOUT_COMMAND : 1 << (32*8+5),
HCI_SNIFF_SUBRATING_COMMAND, HCI_READ_LOCAL_OOB_EXTENDED_DATA_COMMAND : 1 << (32*8+6),
HCI_READ_SIMPLE_PAIRING_MODE_COMMAND, HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE_COMMAND : 1 << (32*8+7),
HCI_WRITE_SIMPLE_PAIRING_MODE_COMMAND, HCI_READ_EXTENDED_PAGE_TIMEOUT_COMMAND : 1 << (33*8+0),
HCI_READ_LOCAL_OOB_DATA_COMMAND HCI_WRITE_EXTENDED_PAGE_TIMEOUT_COMMAND : 1 << (33*8+1),
), HCI_READ_EXTENDED_INQUIRY_LENGTH_COMMAND : 1 << (33*8+2),
# Octet 18 HCI_WRITE_EXTENDED_INQUIRY_LENGTH_COMMAND : 1 << (33*8+3),
( HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY_COMMAND : 1 << (33*8+4),
HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL_COMMAND, HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY_COMMAND : 1 << (33*8+5),
HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_COMMAND, HCI_LE_SET_DATA_LENGTH_COMMAND : 1 << (33*8+6),
HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_COMMAND, HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH_COMMAND : 1 << (33*8+7),
HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_COMMAND, HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH_COMMAND : 1 << (34*8+0),
None, HCI_LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND : 1 << (34*8+1),
None, HCI_LE_GENERATE_DHKEY_COMMAND : 1 << (34*8+2),
None, HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST_COMMAND : 1 << (34*8+3),
HCI_IO_CAPABILITY_REQUEST_REPLY_COMMAND HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST_COMMAND : 1 << (34*8+4),
), HCI_LE_CLEAR_RESOLVING_LIST_COMMAND : 1 << (34*8+5),
# Octet 19 HCI_LE_READ_RESOLVING_LIST_SIZE_COMMAND : 1 << (34*8+6),
( HCI_LE_READ_PEER_RESOLVABLE_ADDRESS_COMMAND : 1 << (34*8+7),
HCI_USER_CONFIRMATION_REQUEST_REPLY_COMMAND, HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS_COMMAND : 1 << (35*8+0),
HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY_COMMAND, HCI_LE_SET_ADDRESS_RESOLUTION_ENABLE_COMMAND : 1 << (35*8+1),
HCI_USER_PASSKEY_REQUEST_REPLY_COMMAND, HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT_COMMAND : 1 << (35*8+2),
HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY_COMMAND, HCI_LE_READ_MAXIMUM_DATA_LENGTH_COMMAND : 1 << (35*8+3),
HCI_REMOTE_OOB_DATA_REQUEST_REPLY_COMMAND, HCI_LE_READ_PHY_COMMAND : 1 << (35*8+4),
HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE_COMMAND, HCI_LE_SET_DEFAULT_PHY_COMMAND : 1 << (35*8+5),
HCI_ENHANCED_FLUSH_COMMAND, HCI_LE_SET_PHY_COMMAND : 1 << (35*8+6),
HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY_COMMAND HCI_LE_RECEIVER_TEST_V2_COMMAND : 1 << (35*8+7),
), HCI_LE_TRANSMITTER_TEST_V2_COMMAND : 1 << (36*8+0),
# Octet 20 HCI_LE_SET_ADVERTISING_SET_RANDOM_ADDRESS_COMMAND : 1 << (36*8+1),
( HCI_LE_SET_EXTENDED_ADVERTISING_PARAMETERS_COMMAND : 1 << (36*8+2),
None, HCI_LE_SET_EXTENDED_ADVERTISING_DATA_COMMAND : 1 << (36*8+3),
None, HCI_LE_SET_EXTENDED_SCAN_RESPONSE_DATA_COMMAND : 1 << (36*8+4),
HCI_SEND_KEYPRESS_NOTIFICATION_COMMAND, HCI_LE_SET_EXTENDED_ADVERTISING_ENABLE_COMMAND : 1 << (36*8+5),
HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY_COMMAND, HCI_LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH_COMMAND : 1 << (36*8+6),
HCI_READ_ENCRYPTION_KEY_SIZE_COMMAND, HCI_LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS_COMMAND : 1 << (36*8+7),
None, HCI_LE_REMOVE_ADVERTISING_SET_COMMAND : 1 << (37*8+0),
None, HCI_LE_CLEAR_ADVERTISING_SETS_COMMAND : 1 << (37*8+1),
None, HCI_LE_SET_PERIODIC_ADVERTISING_PARAMETERS_COMMAND : 1 << (37*8+2),
), HCI_LE_SET_PERIODIC_ADVERTISING_DATA_COMMAND : 1 << (37*8+3),
# Octet 21 HCI_LE_SET_PERIODIC_ADVERTISING_ENABLE_COMMAND : 1 << (37*8+4),
( HCI_LE_SET_EXTENDED_SCAN_PARAMETERS_COMMAND : 1 << (37*8+5),
None, HCI_LE_SET_EXTENDED_SCAN_ENABLE_COMMAND : 1 << (37*8+6),
None, HCI_LE_EXTENDED_CREATE_CONNECTION_COMMAND : 1 << (37*8+7),
None, HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC_COMMAND : 1 << (38*8+0),
None, HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL_COMMAND : 1 << (38*8+1),
None, HCI_LE_PERIODIC_ADVERTISING_TERMINATE_SYNC_COMMAND : 1 << (38*8+2),
None, HCI_LE_ADD_DEVICE_TO_PERIODIC_ADVERTISER_LIST_COMMAND : 1 << (38*8+3),
None, HCI_LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISER_LIST_COMMAND : 1 << (38*8+4),
None, HCI_LE_CLEAR_PERIODIC_ADVERTISER_LIST_COMMAND : 1 << (38*8+5),
), HCI_LE_READ_PERIODIC_ADVERTISER_LIST_SIZE_COMMAND : 1 << (38*8+6),
# Octet 22 HCI_LE_READ_TRANSMIT_POWER_COMMAND : 1 << (38*8+7),
( HCI_LE_READ_RF_PATH_COMPENSATION_COMMAND : 1 << (39*8+0),
None, HCI_LE_WRITE_RF_PATH_COMPENSATION_COMMAND : 1 << (39*8+1),
None, HCI_LE_SET_PRIVACY_MODE_COMMAND : 1 << (39*8+2),
HCI_SET_EVENT_MASK_PAGE_2_COMMAND, HCI_LE_RECEIVER_TEST_V3_COMMAND : 1 << (39*8+3),
None, HCI_LE_TRANSMITTER_TEST_V3_COMMAND : 1 << (39*8+4),
None, HCI_LE_SET_CONNECTIONLESS_CTE_TRANSMIT_PARAMETERS_COMMAND : 1 << (39*8+5),
None, HCI_LE_SET_CONNECTIONLESS_CTE_TRANSMIT_ENABLE_COMMAND : 1 << (39*8+6),
None, HCI_LE_SET_CONNECTIONLESS_IQ_SAMPLING_ENABLE_COMMAND : 1 << (39*8+7),
None, HCI_LE_SET_CONNECTION_CTE_RECEIVE_PARAMETERS_COMMAND : 1 << (40*8+0),
), HCI_LE_SET_CONNECTION_CTE_TRANSMIT_PARAMETERS_COMMAND : 1 << (40*8+1),
# Octet 23 HCI_LE_CONNECTION_CTE_REQUEST_ENABLE_COMMAND : 1 << (40*8+2),
( HCI_LE_CONNECTION_CTE_RESPONSE_ENABLE_COMMAND : 1 << (40*8+3),
HCI_READ_FLOW_CONTROL_MODE_COMMAND, HCI_LE_READ_ANTENNA_INFORMATION_COMMAND : 1 << (40*8+4),
HCI_WRITE_FLOW_CONTROL_MODE_COMMAND, HCI_LE_SET_PERIODIC_ADVERTISING_RECEIVE_ENABLE_COMMAND : 1 << (40*8+5),
HCI_READ_DATA_BLOCK_SIZE_COMMAND, HCI_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_COMMAND : 1 << (40*8+6),
None, HCI_LE_PERIODIC_ADVERTISING_SET_INFO_TRANSFER_COMMAND : 1 << (40*8+7),
None, HCI_LE_SET_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS_COMMAND : 1 << (41*8+0),
None, HCI_LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS_COMMAND : 1 << (41*8+1),
None, HCI_LE_GENERATE_DHKEY_V2_COMMAND : 1 << (41*8+2),
None, HCI_READ_LOCAL_SIMPLE_PAIRING_OPTIONS_COMMAND : 1 << (41*8+3),
), HCI_LE_MODIFY_SLEEP_CLOCK_ACCURACY_COMMAND : 1 << (41*8+4),
# Octet 24 HCI_LE_READ_BUFFER_SIZE_V2_COMMAND : 1 << (41*8+5),
( HCI_LE_READ_ISO_TX_SYNC_COMMAND : 1 << (41*8+6),
HCI_READ_ENHANCED_TRANSMIT_POWER_LEVEL_COMMAND, HCI_LE_SET_CIG_PARAMETERS_COMMAND : 1 << (41*8+7),
None, HCI_LE_SET_CIG_PARAMETERS_TEST_COMMAND : 1 << (42*8+0),
None, HCI_LE_CREATE_CIS_COMMAND : 1 << (42*8+1),
None, HCI_LE_REMOVE_CIG_COMMAND : 1 << (42*8+2),
None, HCI_LE_ACCEPT_CIS_REQUEST_COMMAND : 1 << (42*8+3),
HCI_READ_LE_HOST_SUPPORT_COMMAND, HCI_LE_REJECT_CIS_REQUEST_COMMAND : 1 << (42*8+4),
HCI_WRITE_LE_HOST_SUPPORT_COMMAND, HCI_LE_CREATE_BIG_COMMAND : 1 << (42*8+5),
None, HCI_LE_CREATE_BIG_TEST_COMMAND : 1 << (42*8+6),
), HCI_LE_TERMINATE_BIG_COMMAND : 1 << (42*8+7),
# Octet 25 HCI_LE_BIG_CREATE_SYNC_COMMAND : 1 << (43*8+0),
( HCI_LE_BIG_TERMINATE_SYNC_COMMAND : 1 << (43*8+1),
HCI_LE_SET_EVENT_MASK_COMMAND, HCI_LE_REQUEST_PEER_SCA_COMMAND : 1 << (43*8+2),
HCI_LE_READ_BUFFER_SIZE_COMMAND, HCI_LE_SETUP_ISO_DATA_PATH_COMMAND : 1 << (43*8+3),
HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_COMMAND, HCI_LE_REMOVE_ISO_DATA_PATH_COMMAND : 1 << (43*8+4),
None, HCI_LE_ISO_TRANSMIT_TEST_COMMAND : 1 << (43*8+5),
HCI_LE_SET_RANDOM_ADDRESS_COMMAND, HCI_LE_ISO_RECEIVE_TEST_COMMAND : 1 << (43*8+6),
HCI_LE_SET_ADVERTISING_PARAMETERS_COMMAND, HCI_LE_ISO_READ_TEST_COUNTERS_COMMAND : 1 << (43*8+7),
HCI_LE_READ_ADVERTISING_PHYSICAL_CHANNEL_TX_POWER_COMMAND, HCI_LE_ISO_TEST_END_COMMAND : 1 << (44*8+0),
HCI_LE_SET_ADVERTISING_DATA_COMMAND, HCI_LE_SET_HOST_FEATURE_COMMAND : 1 << (44*8+1),
), HCI_LE_READ_ISO_LINK_QUALITY_COMMAND : 1 << (44*8+2),
# Octet 26 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_SCAN_RESPONSE_DATA_COMMAND, HCI_LE_SET_PATH_LOSS_REPORTING_PARAMETERS_COMMAND : 1 << (44*8+5),
HCI_LE_SET_ADVERTISING_ENABLE_COMMAND, HCI_LE_SET_PATH_LOSS_REPORTING_ENABLE_COMMAND : 1 << (44*8+6),
HCI_LE_SET_SCAN_PARAMETERS_COMMAND, HCI_LE_SET_TRANSMIT_POWER_REPORTING_ENABLE_COMMAND : 1 << (44*8+7),
HCI_LE_SET_SCAN_ENABLE_COMMAND, HCI_LE_TRANSMITTER_TEST_V4_COMMAND : 1 << (45*8+0),
HCI_LE_CREATE_CONNECTION_COMMAND, HCI_SET_ECOSYSTEM_BASE_INTERVAL_COMMAND : 1 << (45*8+1),
HCI_LE_CREATE_CONNECTION_CANCEL_COMMAND, HCI_READ_LOCAL_SUPPORTED_CODECS_V2_COMMAND : 1 << (45*8+2),
HCI_LE_READ_FILTER_ACCEPT_LIST_SIZE_COMMAND, HCI_READ_LOCAL_SUPPORTED_CODEC_CAPABILITIES_COMMAND : 1 << (45*8+3),
HCI_LE_CLEAR_FILTER_ACCEPT_LIST_COMMAND HCI_READ_LOCAL_SUPPORTED_CONTROLLER_DELAY_COMMAND : 1 << (45*8+4),
), HCI_CONFIGURE_DATA_PATH_COMMAND : 1 << (45*8+5),
# Octet 27 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_ADD_DEVICE_TO_FILTER_ACCEPT_LIST_COMMAND, HCI_LE_SET_DEFAULT_SUBRATE_COMMAND : 1 << (46*8+0),
HCI_LE_REMOVE_DEVICE_FROM_FILTER_ACCEPT_LIST_COMMAND, HCI_LE_SUBRATE_REQUEST_COMMAND : 1 << (46*8+1),
HCI_LE_CONNECTION_UPDATE_COMMAND, HCI_LE_SET_EXTENDED_ADVERTISING_PARAMETERS_V2_COMMAND : 1 << (46*8+2),
HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION_COMMAND, HCI_LE_SET_PERIODIC_ADVERTISING_SUBEVENT_DATA_COMMAND : 1 << (46*8+5),
HCI_LE_READ_CHANNEL_MAP_COMMAND, HCI_LE_SET_PERIODIC_ADVERTISING_RESPONSE_DATA_COMMAND : 1 << (46*8+6),
HCI_LE_READ_REMOTE_FEATURES_COMMAND, HCI_LE_SET_PERIODIC_SYNC_SUBEVENT_COMMAND : 1 << (46*8+7),
HCI_LE_ENCRYPT_COMMAND, HCI_LE_EXTENDED_CREATE_CONNECTION_V2_COMMAND : 1 << (47*8+0),
HCI_LE_RAND_COMMAND HCI_LE_SET_PERIODIC_ADVERTISING_PARAMETERS_V2_COMMAND : 1 << (47*8+1),
), }
# 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,
)
)
# LE Supported Features # LE Supported Features
# See Bluetooth spec @ Vol 6, Part B, 4.6 FEATURE SUPPORT # See Bluetooth spec @ Vol 6, Part B, 4.6 FEATURE SUPPORT

View File

@@ -22,7 +22,17 @@ import dataclasses
import logging import logging
import struct 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.colors import color
from bumble.l2cap import L2CAP_PDU from bumble.l2cap import L2CAP_PDU
@@ -165,7 +175,7 @@ class Host(AbortableEventEmitter):
self.number_of_supported_advertising_sets = 0 self.number_of_supported_advertising_sets = 0
self.maximum_advertising_data_length = 31 self.maximum_advertising_data_length = 31
self.local_version = None self.local_version = None
self.local_supported_commands = bytes(64) self.local_supported_commands = 0
self.local_le_features = 0 self.local_le_features = 0
self.local_lmp_features = hci.LmpFeatureMask(0) # Classic LMP features self.local_lmp_features = hci.LmpFeatureMask(0) # Classic LMP features
self.suggested_max_tx_octets = 251 # Max allowed self.suggested_max_tx_octets = 251 # Max allowed
@@ -232,7 +242,9 @@ class Host(AbortableEventEmitter):
response = await self.send_command( response = await self.send_command(
hci.HCI_Read_Local_Supported_Commands_Command(), check_result=True 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): if self.supports_command(hci.HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_COMMAND):
response = await self.send_command( response = await self.send_command(
@@ -583,31 +595,19 @@ class Host(AbortableEventEmitter):
offset += data_total_length offset += data_total_length
bytes_remaining -= data_total_length bytes_remaining -= data_total_length
def supports_command(self, command): def supports_command(self, op_code: int) -> bool:
# Find the support flag position for this command return (
for octet, flags in enumerate(hci.HCI_SUPPORTED_COMMANDS_FLAGS): self.local_supported_commands
for flag_position, value in enumerate(flags): & hci.HCI_SUPPORTED_COMMANDS_MASKS.get(op_code, 0)
if value == command: ) != 0
# 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
@property @property
def supported_commands(self): def supported_commands(self) -> Set[int]:
commands = [] return set(
for octet, flags in enumerate(self.local_supported_commands): op_code
if octet < len(hci.HCI_SUPPORTED_COMMANDS_FLAGS): for op_code, mask in hci.HCI_SUPPORTED_COMMANDS_MASKS.items()
for flag in range(8): if self.local_supported_commands & mask
if flags & (1 << flag) != 0: )
command = hci.HCI_SUPPORTED_COMMANDS_FLAGS[octet][flag]
if command is not None:
commands.append(command)
return commands
def supports_le_features(self, feature: hci.LeFeatureMask) -> bool: def supports_le_features(self, feature: hci.LeFeatureMask) -> bool:
return (self.local_le_features & feature) == feature return (self.local_le_features & feature) == feature