Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1da6e05f authored by Henri Chataing's avatar Henri Chataing
Browse files

RootCanal: Correct the Supported Command mask

Enable or disable commands as mandated by the specification.
Privacy related commands will be reenabled separately with
the LL Privacy bit set.

Exceptions are made for commands used by PTS-bot:
- OpCodeIndex::READ_DEFAULT_ERRONEOUS_DATA_REPORTING,
- OpCodeIndex::WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING
- OpCodeIndex::LE_READ_TRANSMIT_POWER

And for commands used by the Android Stack:
- OpCodeIndex::REMOTE_NAME_REQUEST_CANCEL
- OpCodeIndex::DELETE_STORED_LINK_KEY

Test: m root-canal
Bug: 266087760
Change-Id: Ic1aaccc5327a92ea4ec309032c449cb132f4ba84
parent bcf51872
Loading
Loading
Loading
Loading
+56 −57
Original line number Diff line number Diff line
@@ -145,8 +145,7 @@ static std::array<uint8_t, 64> SupportedCommands() {
      OpCodeIndex::READ_REMOTE_SUPPORTED_FEATURES,
      OpCodeIndex::READ_REMOTE_EXTENDED_FEATURES,
      OpCodeIndex::READ_REMOTE_VERSION_INFORMATION,
      OpCodeIndex::READ_CLOCK_OFFSET,
      // OpCodeIndex::READ_LMP_HANDLE,
      OpCodeIndex::READ_CLOCK_OFFSET, OpCodeIndex::READ_LMP_HANDLE,
      OpCodeIndex::SETUP_SYNCHRONOUS_CONNECTION,
      OpCodeIndex::ACCEPT_SYNCHRONOUS_CONNECTION,
      OpCodeIndex::REJECT_SYNCHRONOUS_CONNECTION,
@@ -180,8 +179,7 @@ static std::array<uint8_t, 64> SupportedCommands() {

      // CONTROLLER_AND_BASEBAND
      OpCodeIndex::SET_EVENT_MASK, OpCodeIndex::RESET,
      OpCodeIndex::SET_EVENT_FILTER,
      // OpCodeIndex::FLUSH,
      OpCodeIndex::SET_EVENT_FILTER, OpCodeIndex::FLUSH,
      // OpCodeIndex::READ_PIN_TYPE,
      // OpCodeIndex::WRITE_PIN_TYPE,
      // OpCodeIndex::READ_STORED_LINK_KEY,
@@ -199,44 +197,43 @@ static std::array<uint8_t, 64> SupportedCommands() {
      OpCodeIndex::WRITE_AUTHENTICATION_ENABLE,
      OpCodeIndex::READ_CLASS_OF_DEVICE, OpCodeIndex::WRITE_CLASS_OF_DEVICE,
      OpCodeIndex::READ_VOICE_SETTING, OpCodeIndex::WRITE_VOICE_SETTING,
      // OpCodeIndex::READ_AUTOMATIC_FLUSH_TIMEOUT,
      // OpCodeIndex::WRITE_AUTOMATIC_FLUSH_TIMEOUT,
      OpCodeIndex::READ_AUTOMATIC_FLUSH_TIMEOUT,
      OpCodeIndex::WRITE_AUTOMATIC_FLUSH_TIMEOUT,
      // OpCodeIndex::READ_NUM_BROADCAST_RETRANSMITS,
      // OpCodeIndex::WRITE_NUM_BROADCAST_RETRANSMITS,
      // OpCodeIndex::READ_HOLD_MODE_ACTIVITY,
      // OpCodeIndex::WRITE_HOLD_MODE_ACTIVITY,
      // OpCodeIndex::READ_TRANSMIT_POWER_LEVEL,
      OpCodeIndex::READ_HOLD_MODE_ACTIVITY,
      OpCodeIndex::WRITE_HOLD_MODE_ACTIVITY,
      OpCodeIndex::READ_TRANSMIT_POWER_LEVEL,
      OpCodeIndex::READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE,
      OpCodeIndex::WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE,
      // OpCodeIndex::SET_CONTROLLER_TO_HOST_FLOW_CONTROL,
      OpCodeIndex::SET_CONTROLLER_TO_HOST_FLOW_CONTROL,
      OpCodeIndex::HOST_BUFFER_SIZE,
      // OpCodeIndex::HOST_NUMBER_OF_COMPLETED_PACKETS,
      // OpCodeIndex::READ_LINK_SUPERVISION_TIMEOUT,
      OpCodeIndex::HOST_NUMBER_OF_COMPLETED_PACKETS,
      OpCodeIndex::READ_LINK_SUPERVISION_TIMEOUT,
      OpCodeIndex::WRITE_LINK_SUPERVISION_TIMEOUT,
      OpCodeIndex::READ_NUMBER_OF_SUPPORTED_IAC,
      OpCodeIndex::READ_CURRENT_IAC_LAP, OpCodeIndex::WRITE_CURRENT_IAC_LAP,
      // OpCodeIndex::SET_AFH_HOST_CHANNEL_CLASSIFICATION,
      OpCodeIndex::SET_AFH_HOST_CHANNEL_CLASSIFICATION,
      OpCodeIndex::READ_INQUIRY_SCAN_TYPE, OpCodeIndex::WRITE_INQUIRY_SCAN_TYPE,
      OpCodeIndex::READ_INQUIRY_MODE, OpCodeIndex::WRITE_INQUIRY_MODE,
      OpCodeIndex::READ_PAGE_SCAN_TYPE, OpCodeIndex::WRITE_PAGE_SCAN_TYPE,
      // OpCodeIndex::READ_AFH_CHANNEL_ASSESSMENT_MODE,
      // OpCodeIndex::WRITE_AFH_CHANNEL_ASSESSMENT_MODE,
      // OpCodeIndex::READ_EXTENDED_INQUIRY_RESPONSE,
      OpCodeIndex::READ_AFH_CHANNEL_ASSESSMENT_MODE,
      OpCodeIndex::WRITE_AFH_CHANNEL_ASSESSMENT_MODE,
      OpCodeIndex::READ_EXTENDED_INQUIRY_RESPONSE,
      OpCodeIndex::WRITE_EXTENDED_INQUIRY_RESPONSE,
      OpCodeIndex::REFRESH_ENCRYPTION_KEY,
      // OpCodeIndex::READ_SIMPLE_PAIRING_MODE,
      OpCodeIndex::READ_SIMPLE_PAIRING_MODE,
      OpCodeIndex::WRITE_SIMPLE_PAIRING_MODE, OpCodeIndex::READ_LOCAL_OOB_DATA,
      OpCodeIndex::READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL,
      // OpCodeIndex::WRITE_INQUIRY_TRANSMIT_POWER_LEVEL,
      OpCodeIndex::WRITE_INQUIRY_TRANSMIT_POWER_LEVEL,
      // OpCodeIndex::READ_DEFAULT_ERRONEOUS_DATA_REPORTING,
      // OpCodeIndex::WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING,
      OpCodeIndex::ENHANCED_FLUSH, OpCodeIndex::SEND_KEYPRESS_NOTIFICATION,
      OpCodeIndex::SET_EVENT_MASK_PAGE_2,
      // OpCodeIndex::READ_FLOW_CONTROL_MODE,
      // OpCodeIndex::WRITE_FLOW_CONTROL_MODE,
      // OpCodeIndex::READ_ENHANCED_TRANSMIT_POWER_LEVEL,
      // OpCodeIndex::READ_LE_HOST_SUPPORT,
      OpCodeIndex::WRITE_LE_HOST_SUPPORT,
      OpCodeIndex::READ_ENHANCED_TRANSMIT_POWER_LEVEL,
      OpCodeIndex::READ_LE_HOST_SUPPORT, OpCodeIndex::WRITE_LE_HOST_SUPPORT,
      // OpCodeIndex::SET_MWS_CHANNEL_PARAMETERS,
      // OpCodeIndex::SET_EXTERNAL_FRAME_CONFIGURATION,
      // OpCodeIndex::SET_MWS_SIGNALING,
@@ -248,10 +245,10 @@ static std::array<uint8_t, 64> SupportedCommands() {
      // OpCodeIndex::SET_CONNECTIONLESS_PERIPHERAL_BROADCAST_DATA,
      // OpCodeIndex::READ_SYNCHRONIZATION_TRAIN_PARAMETERS,
      // OpCodeIndex::WRITE_SYNCHRONIZATION_TRAIN_PARAMETERS,
      // OpCodeIndex::READ_SECURE_CONNECTIONS_HOST_SUPPORT,
      OpCodeIndex::READ_SECURE_CONNECTIONS_HOST_SUPPORT,
      OpCodeIndex::WRITE_SECURE_CONNECTIONS_HOST_SUPPORT,
      // OpCodeIndex::READ_AUTHENTICATED_PAYLOAD_TIMEOUT,
      // OpCodeIndex::WRITE_AUTHENTICATED_PAYLOAD_TIMEOUT,
      OpCodeIndex::READ_AUTHENTICATED_PAYLOAD_TIMEOUT,
      OpCodeIndex::WRITE_AUTHENTICATED_PAYLOAD_TIMEOUT,
      OpCodeIndex::READ_LOCAL_OOB_EXTENDED_DATA,
      // OpCodeIndex::READ_EXTENDED_PAGE_TIMEOUT,
      // OpCodeIndex::WRITE_EXTENDED_PAGE_TIMEOUT,
@@ -274,11 +271,10 @@ static std::array<uint8_t, 64> SupportedCommands() {
      // OpCodeIndex::READ_LOCAL_SUPPORTED_CONTROLLER_DELAY,

      // STATUS_PARAMETERS
      // OpCodeIndex::READ_FAILED_CONTACT_COUNTER,
      // OpCodeIndex::RESET_FAILED_CONTACT_COUNTER,
      OpCodeIndex::READ_FAILED_CONTACT_COUNTER,
      OpCodeIndex::RESET_FAILED_CONTACT_COUNTER,
      // OpCodeIndex::READ_LINK_QUALITY,
      // OpCodeIndex::READ_RSSI,
      // OpCodeIndex::READ_AFH_CHANNEL_MAP,
      OpCodeIndex::READ_RSSI, OpCodeIndex::READ_AFH_CHANNEL_MAP,
      // OpCodeIndex::READ_CLOCK,
      OpCodeIndex::READ_ENCRYPTION_KEY_SIZE,
      // OpCodeIndex::GET_MWS_TRANSPORT_LAYER_CONFIGURATION,
@@ -286,9 +282,9 @@ static std::array<uint8_t, 64> SupportedCommands() {

      // TESTING
      OpCodeIndex::READ_LOOPBACK_MODE, OpCodeIndex::WRITE_LOOPBACK_MODE,
      // OpCodeIndex::ENABLE_DEVICE_UNDER_TEST_MODE,
      // OpCodeIndex::WRITE_SIMPLE_PAIRING_DEBUG_MODE,
      // OpCodeIndex::WRITE_SECURE_CONNECTIONS_TEST_MODE,
      OpCodeIndex::ENABLE_DEVICE_UNDER_TEST_MODE,
      OpCodeIndex::WRITE_SIMPLE_PAIRING_DEBUG_MODE,
      OpCodeIndex::WRITE_SECURE_CONNECTIONS_TEST_MODE,

      // LE_CONTROLLER
      OpCodeIndex::LE_SET_EVENT_MASK, OpCodeIndex::LE_READ_BUFFER_SIZE_V1,
@@ -307,16 +303,14 @@ static std::array<uint8_t, 64> SupportedCommands() {
      OpCodeIndex::LE_ADD_DEVICE_TO_FILTER_ACCEPT_LIST,
      OpCodeIndex::LE_REMOVE_DEVICE_FROM_FILTER_ACCEPT_LIST,
      OpCodeIndex::LE_CONNECTION_UPDATE,
      // OpCodeIndex::LE_SET_HOST_CHANNEL_CLASSIFICATION,
      // OpCodeIndex::LE_READ_CHANNEL_MAP,
      OpCodeIndex::LE_READ_REMOTE_FEATURES, OpCodeIndex::LE_ENCRYPT,
      OpCodeIndex::LE_RAND, OpCodeIndex::LE_START_ENCRYPTION,
      OpCodeIndex::LE_SET_HOST_CHANNEL_CLASSIFICATION,
      OpCodeIndex::LE_READ_CHANNEL_MAP, OpCodeIndex::LE_READ_REMOTE_FEATURES,
      OpCodeIndex::LE_ENCRYPT, OpCodeIndex::LE_RAND,
      OpCodeIndex::LE_START_ENCRYPTION,
      OpCodeIndex::LE_LONG_TERM_KEY_REQUEST_REPLY,
      OpCodeIndex::LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY,
      OpCodeIndex::LE_READ_SUPPORTED_STATES,
      // OpCodeIndex::LE_RECEIVER_TEST_V1,
      // OpCodeIndex::LE_TRANSMITTER_TEST_V1,
      // OpCodeIndex::LE_TEST_END,
      OpCodeIndex::LE_READ_SUPPORTED_STATES, OpCodeIndex::LE_RECEIVER_TEST_V1,
      OpCodeIndex::LE_TRANSMITTER_TEST_V1, OpCodeIndex::LE_TEST_END,
      OpCodeIndex::LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY,
      OpCodeIndex::LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY,
      // OpCodeIndex::LE_SET_DATA_LENGTH,
@@ -324,14 +318,14 @@ static std::array<uint8_t, 64> SupportedCommands() {
      OpCodeIndex::LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH,
      // OpCodeIndex::LE_READ_LOCAL_P_256_PUBLIC_KEY,
      // OpCodeIndex::LE_GENERATE_DHKEY_V1,
      OpCodeIndex::LE_ADD_DEVICE_TO_RESOLVING_LIST,
      OpCodeIndex::LE_REMOVE_DEVICE_FROM_RESOLVING_LIST,
      OpCodeIndex::LE_CLEAR_RESOLVING_LIST,
      OpCodeIndex::LE_READ_RESOLVING_LIST_SIZE,
      // OpCodeIndex::LE_ADD_DEVICE_TO_RESOLVING_LIST,
      // OpCodeIndex::LE_REMOVE_DEVICE_FROM_RESOLVING_LIST,
      // OpCodeIndex::LE_CLEAR_RESOLVING_LIST,
      // OpCodeIndex::LE_READ_RESOLVING_LIST_SIZE,
      // OpCodeIndex::LE_READ_PEER_RESOLVABLE_ADDRESS,
      // OpCodeIndex::LE_READ_LOCAL_RESOLVABLE_ADDRESS,
      OpCodeIndex::LE_SET_ADDRESS_RESOLUTION_ENABLE,
      OpCodeIndex::LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT,
      // OpCodeIndex::LE_SET_ADDRESS_RESOLUTION_ENABLE,
      // OpCodeIndex::LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT,
      OpCodeIndex::LE_READ_MAXIMUM_DATA_LENGTH,
      // OpCodeIndex::LE_READ_PHY,
      // OpCodeIndex::LE_SET_DEFAULT_PHY,
@@ -361,9 +355,9 @@ static std::array<uint8_t, 64> SupportedCommands() {
      // OpCodeIndex::LE_CLEAR_PERIODIC_ADVERTISING_LIST,
      // OpCodeIndex::LE_READ_PERIODIC_ADVERTISING_LIST_SIZE,
      // OpCodeIndex::LE_READ_TRANSMIT_POWER,
      // OpCodeIndex::LE_READ_RF_PATH_COMPENSATION_POWER,
      // OpCodeIndex::LE_WRITE_RF_PATH_COMPENSATION_POWER,
      OpCodeIndex::LE_SET_PRIVACY_MODE,
      OpCodeIndex::LE_READ_RF_PATH_COMPENSATION_POWER,
      OpCodeIndex::LE_WRITE_RF_PATH_COMPENSATION_POWER,
      // OpCodeIndex::LE_SET_PRIVACY_MODE,
      // OpCodeIndex::LE_RECEIVER_TEST_V3,
      // OpCodeIndex::LE_TRANSMITTER_TEST_V3,
      // OpCodeIndex::LE_SET_CONNECTIONLESS_CTE_TRANSMIT_PARAMETERS,
@@ -381,16 +375,22 @@ static std::array<uint8_t, 64> SupportedCommands() {
      // OpCodeIndex::LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS,
      // OpCodeIndex::LE_GENERATE_DHKEY_V2,
      // OpCodeIndex::LE_MODIFY_SLEEP_CLOCK_ACCURACY,
      OpCodeIndex::LE_READ_BUFFER_SIZE_V2, OpCodeIndex::LE_READ_ISO_TX_SYNC,
      OpCodeIndex::LE_SET_CIG_PARAMETERS,
      OpCodeIndex::LE_READ_BUFFER_SIZE_V2,
      // OpCodeIndex::LE_READ_ISO_TX_SYNC,
      // OpCodeIndex::LE_SET_CIG_PARAMETERS,
      // OpCodeIndex::LE_SET_CIG_PARAMETERS_TEST,
      OpCodeIndex::LE_CREATE_CIS, OpCodeIndex::LE_REMOVE_CIG,
      OpCodeIndex::LE_ACCEPT_CIS_REQUEST, OpCodeIndex::LE_REJECT_CIS_REQUEST,
      OpCodeIndex::LE_CREATE_BIG,
      // OpCodeIndex::LE_CREATE_CIS,
      // OpCodeIndex::LE_REMOVE_CIG,
      // OpCodeIndex::LE_ACCEPT_CIS_REQUEST,
      // OpCodeIndex::LE_REJECT_CIS_REQUEST,
      // OpCodeIndex::LE_CREATE_BIG,
      // OpCodeIndex::LE_CREATE_BIG_TEST,
      OpCodeIndex::LE_TERMINATE_BIG, OpCodeIndex::LE_BIG_CREATE_SYNC,
      OpCodeIndex::LE_BIG_TERMINATE_SYNC, OpCodeIndex::LE_REQUEST_PEER_SCA,
      OpCodeIndex::LE_SETUP_ISO_DATA_PATH, OpCodeIndex::LE_REMOVE_ISO_DATA_PATH,
      // OpCodeIndex::LE_TERMINATE_BIG,
      // OpCodeIndex::LE_BIG_CREATE_SYNC,
      // OpCodeIndex::LE_BIG_TERMINATE_SYNC,
      // OpCodeIndex::LE_REQUEST_PEER_SCA,
      // OpCodeIndex::LE_SETUP_ISO_DATA_PATH,
      // OpCodeIndex::LE_REMOVE_ISO_DATA_PATH,
      // OpCodeIndex::LE_ISO_TRANSMIT_TEST,
      // OpCodeIndex::LE_ISO_RECEIVE_TEST,
      // OpCodeIndex::LE_ISO_READ_TEST_COUNTERS,
@@ -1332,7 +1332,6 @@ bool ControllerProperties::CheckSupportedCommands() const {
  // C64: Optional if the Controller supports
  // transmitting packets, otherwise excluded.
  auto c64 = optional;

  // C94: Mandatory if the LE Create Connection or LE Extended Create Connection
  // command is supported, otherwise excluded.
  auto c94 = mandatory_or_excluded(