| /* |
| * Copyright 2021 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "btaa/cmd_evt_classification.h" |
| |
| namespace bluetooth { |
| namespace activity_attribution { |
| |
| CmdEvtActivityClassification lookup_cmd(hci::OpCode opcode) { |
| CmdEvtActivityClassification classification = {}; |
| switch (opcode) { |
| case hci::OpCode::INQUIRY: |
| case hci::OpCode::INQUIRY_CANCEL: |
| case hci::OpCode::PERIODIC_INQUIRY_MODE: |
| case hci::OpCode::EXIT_PERIODIC_INQUIRY_MODE: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| |
| case hci::OpCode::CREATE_CONNECTION: |
| case hci::OpCode::CREATE_CONNECTION_CANCEL: |
| case hci::OpCode::ACCEPT_CONNECTION_REQUEST: |
| case hci::OpCode::LINK_KEY_REQUEST_REPLY: |
| case hci::OpCode::LINK_KEY_REQUEST_NEGATIVE_REPLY: |
| case hci::OpCode::PIN_CODE_REQUEST_REPLY: |
| case hci::OpCode::PIN_CODE_REQUEST_NEGATIVE_REPLY: |
| case hci::OpCode::REJECT_CONNECTION_REQUEST: |
| case hci::OpCode::REMOTE_NAME_REQUEST: |
| case hci::OpCode::REMOTE_NAME_REQUEST_CANCEL: |
| case hci::OpCode::ACCEPT_SYNCHRONOUS_CONNECTION: |
| case hci::OpCode::REJECT_SYNCHRONOUS_CONNECTION: |
| case hci::OpCode::IO_CAPABILITY_REQUEST_REPLY: |
| case hci::OpCode::USER_CONFIRMATION_REQUEST_REPLY: |
| case hci::OpCode::USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY: |
| case hci::OpCode::USER_PASSKEY_REQUEST_REPLY: |
| case hci::OpCode::USER_PASSKEY_REQUEST_NEGATIVE_REPLY: |
| case hci::OpCode::REMOTE_OOB_DATA_REQUEST_REPLY: |
| case hci::OpCode::REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY: |
| case hci::OpCode::IO_CAPABILITY_REQUEST_NEGATIVE_REPLY: |
| case hci::OpCode::ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION: |
| case hci::OpCode::REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY: |
| case hci::OpCode::SWITCH_ROLE: |
| case hci::OpCode::READ_STORED_LINK_KEY: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 0, .address_pos = 3}; |
| break; |
| |
| case hci::OpCode::CENTRAL_LINK_KEY: |
| case hci::OpCode::READ_DEFAULT_LINK_POLICY_SETTINGS: |
| case hci::OpCode::WRITE_DEFAULT_LINK_POLICY_SETTINGS: |
| case hci::OpCode::WRITE_SCAN_ENABLE: |
| case hci::OpCode::READ_PAGE_SCAN_ACTIVITY: |
| case hci::OpCode::WRITE_PAGE_SCAN_ACTIVITY: |
| case hci::OpCode::READ_PAGE_SCAN_TYPE: |
| case hci::OpCode::WRITE_PAGE_SCAN_TYPE: |
| case hci::OpCode::READ_SIMPLE_PAIRING_MODE: |
| case hci::OpCode::WRITE_SIMPLE_PAIRING_MODE: |
| case hci::OpCode::READ_SCAN_ENABLE: |
| case hci::OpCode::LE_CREATE_CONNECTION_CANCEL: |
| case hci::OpCode::LE_READ_CONNECT_LIST_SIZE: |
| case hci::OpCode::LE_CLEAR_CONNECT_LIST: |
| case hci::OpCode::SEND_KEYPRESS_NOTIFICATION: |
| case hci::OpCode::LE_CLEAR_RESOLVING_LIST: |
| case hci::OpCode::LE_READ_RESOLVING_LIST_SIZE: |
| case hci::OpCode::LE_SET_HOST_CHANNEL_CLASSIFICATION: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| |
| case hci::OpCode::DISCONNECT: |
| case hci::OpCode::CHANGE_CONNECTION_PACKET_TYPE: |
| case hci::OpCode::AUTHENTICATION_REQUESTED: |
| case hci::OpCode::SET_CONNECTION_ENCRYPTION: |
| case hci::OpCode::CHANGE_CONNECTION_LINK_KEY: |
| case hci::OpCode::READ_REMOTE_SUPPORTED_FEATURES: |
| case hci::OpCode::READ_REMOTE_EXTENDED_FEATURES: |
| case hci::OpCode::READ_REMOTE_VERSION_INFORMATION: |
| case hci::OpCode::READ_CLOCK_OFFSET: |
| case hci::OpCode::READ_LMP_HANDLE: |
| case hci::OpCode::SETUP_SYNCHRONOUS_CONNECTION: |
| case hci::OpCode::ENHANCED_SETUP_SYNCHRONOUS_CONNECTION: |
| case hci::OpCode::HOLD_MODE: |
| case hci::OpCode::SNIFF_MODE: |
| case hci::OpCode::EXIT_SNIFF_MODE: |
| case hci::OpCode::QOS_SETUP: |
| case hci::OpCode::ROLE_DISCOVERY: |
| case hci::OpCode::READ_LINK_POLICY_SETTINGS: |
| case hci::OpCode::WRITE_LINK_POLICY_SETTINGS: |
| case hci::OpCode::FLOW_SPECIFICATION: |
| case hci::OpCode::SNIFF_SUBRATING: |
| case hci::OpCode::FLUSH: |
| case hci::OpCode::READ_AUTOMATIC_FLUSH_TIMEOUT: |
| case hci::OpCode::WRITE_AUTOMATIC_FLUSH_TIMEOUT: |
| case hci::OpCode::READ_LINK_SUPERVISION_TIMEOUT: |
| case hci::OpCode::WRITE_LINK_SUPERVISION_TIMEOUT: |
| case hci::OpCode::REFRESH_ENCRYPTION_KEY: |
| case hci::OpCode::READ_FAILED_CONTACT_COUNTER: |
| case hci::OpCode::RESET_FAILED_CONTACT_COUNTER: |
| case hci::OpCode::READ_LINK_QUALITY: |
| case hci::OpCode::READ_RSSI: |
| case hci::OpCode::READ_AFH_CHANNEL_MAP: |
| case hci::OpCode::READ_CLOCK: |
| case hci::OpCode::READ_ENCRYPTION_KEY_SIZE: |
| // READ_LOOPBACK_MODE = 0x1801, |
| // WRITE_LOOPBACK_MODE = 0x1802, |
| // ENABLE_DEVICE_UNDER_TEST_MODE = 0x1803, |
| // WRITE_SIMPLE_PAIRING_DEBUG_MODE = 0x1804, |
| // WRITE_SECURE_CONNECTIONS_TEST_MODE = 0x180a, |
| case hci::OpCode::ENHANCED_FLUSH: |
| case hci::OpCode::LE_CONNECTION_UPDATE: |
| case hci::OpCode::LE_START_ENCRYPTION: |
| case hci::OpCode::LE_LONG_TERM_KEY_REQUEST_REPLY: |
| case hci::OpCode::LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY: |
| case hci::OpCode::LE_READ_PHY: |
| case hci::OpCode::LE_SET_PHY: |
| case hci::OpCode::LE_READ_REMOTE_FEATURES: |
| case hci::OpCode::LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY: |
| case hci::OpCode::LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY: |
| case hci::OpCode::LE_SET_DATA_LENGTH: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 3, .address_pos = 0}; |
| break; |
| |
| case hci::OpCode::SET_EVENT_MASK: |
| case hci::OpCode::RESET: |
| case hci::OpCode::SET_EVENT_FILTER: |
| case hci::OpCode::READ_PIN_TYPE: |
| case hci::OpCode::WRITE_PIN_TYPE: |
| case hci::OpCode::WRITE_LOCAL_NAME: |
| case hci::OpCode::READ_LOCAL_NAME: |
| case hci::OpCode::READ_CONNECTION_ACCEPT_TIMEOUT: |
| case hci::OpCode::WRITE_CONNECTION_ACCEPT_TIMEOUT: |
| case hci::OpCode::READ_PAGE_TIMEOUT: |
| case hci::OpCode::WRITE_PAGE_TIMEOUT: |
| case hci::OpCode::READ_AUTHENTICATION_ENABLE: |
| case hci::OpCode::WRITE_AUTHENTICATION_ENABLE: |
| case hci::OpCode::READ_CLASS_OF_DEVICE: |
| case hci::OpCode::WRITE_CLASS_OF_DEVICE: |
| case hci::OpCode::READ_VOICE_SETTING: |
| case hci::OpCode::WRITE_VOICE_SETTING: |
| case hci::OpCode::READ_NUM_BROADCAST_RETRANSMITS: |
| case hci::OpCode::WRITE_NUM_BROADCAST_RETRANSMITS: |
| case hci::OpCode::READ_HOLD_MODE_ACTIVITY: |
| case hci::OpCode::WRITE_HOLD_MODE_ACTIVITY: |
| case hci::OpCode::READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE: |
| case hci::OpCode::WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE: |
| case hci::OpCode::SET_CONTROLLER_TO_HOST_FLOW_CONTROL: |
| case hci::OpCode::HOST_BUFFER_SIZE: |
| case hci::OpCode::HOST_NUM_COMPLETED_PACKETS: |
| case hci::OpCode::READ_NUMBER_OF_SUPPORTED_IAC: |
| case hci::OpCode::READ_CURRENT_IAC_LAP: |
| case hci::OpCode::WRITE_CURRENT_IAC_LAP: |
| case hci::OpCode::SET_AFH_HOST_CHANNEL_CLASSIFICATION: |
| case hci::OpCode::READ_AFH_CHANNEL_ASSESSMENT_MODE: |
| case hci::OpCode::WRITE_AFH_CHANNEL_ASSESSMENT_MODE: |
| case hci::OpCode::READ_LE_HOST_SUPPORT: |
| case hci::OpCode::WRITE_LE_HOST_SUPPORT: |
| case hci::OpCode::READ_SECURE_CONNECTIONS_HOST_SUPPORT: |
| case hci::OpCode::WRITE_SECURE_CONNECTIONS_HOST_SUPPORT: |
| case hci::OpCode::READ_LOCAL_OOB_EXTENDED_DATA: |
| case hci::OpCode::SET_ECOSYSTEM_BASE_INTERVAL: |
| case hci::OpCode::CONFIGURE_DATA_PATH: |
| case hci::OpCode::READ_LOCAL_VERSION_INFORMATION: |
| case hci::OpCode::READ_LOCAL_SUPPORTED_COMMANDS: |
| case hci::OpCode::READ_LOCAL_SUPPORTED_FEATURES: |
| case hci::OpCode::READ_LOCAL_EXTENDED_FEATURES: |
| case hci::OpCode::READ_BUFFER_SIZE: |
| case hci::OpCode::READ_BD_ADDR: |
| case hci::OpCode::READ_DATA_BLOCK_SIZE: |
| case hci::OpCode::READ_LOCAL_SUPPORTED_CODECS_V1: |
| case hci::OpCode::READ_LOCAL_SUPPORTED_CODECS_V2: |
| case hci::OpCode::READ_LOCAL_SUPPORTED_CODEC_CAPABILITIES: |
| case hci::OpCode::READ_LOCAL_SUPPORTED_CONTROLLER_DELAY: |
| case hci::OpCode::READ_LOCAL_OOB_DATA: |
| case hci::OpCode::LE_GENERATE_DHKEY_COMMAND: |
| case hci::OpCode::LE_MODIFY_SLEEP_CLOCK_ACCURACY: |
| case hci::OpCode::LE_READ_BUFFER_SIZE_V2: |
| case hci::OpCode::LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH: |
| case hci::OpCode::LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH: |
| case hci::OpCode::LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND: |
| case hci::OpCode::LE_GENERATE_DHKEY_COMMAND_V1: |
| case hci::OpCode::LE_SET_EVENT_MASK: |
| case hci::OpCode::LE_READ_BUFFER_SIZE_V1: |
| case hci::OpCode::LE_READ_LOCAL_SUPPORTED_FEATURES: |
| case hci::OpCode::LE_SET_RANDOM_ADDRESS: |
| case hci::OpCode::LE_READ_TRANSMIT_POWER: |
| case hci::OpCode::LE_READ_RF_PATH_COMPENSATION_POWER: |
| case hci::OpCode::LE_WRITE_RF_PATH_COMPENSATION_POWER: |
| case hci::OpCode::LE_SET_DEFAULT_PHY: |
| case hci::OpCode::LE_ENCRYPT: |
| case hci::OpCode::LE_RAND: |
| case hci::OpCode::LE_SET_ADDRESS_RESOLUTION_ENABLE: |
| case hci::OpCode::LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT: |
| case hci::OpCode::LE_READ_MAXIMUM_DATA_LENGTH: |
| case hci::OpCode::LE_READ_SUPPORTED_STATES: |
| classification = {.activity = Activity::CONTROL, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| |
| case hci::OpCode::DELETE_STORED_LINK_KEY: |
| classification = {.activity = Activity::CONTROL, .connection_handle_pos = 0, .address_pos = 3}; |
| break; |
| case hci::OpCode::READ_TRANSMIT_POWER_LEVEL: |
| classification = {.activity = Activity::CONTROL, .connection_handle_pos = 3, .address_pos = 0}; |
| break; |
| |
| case hci::OpCode::READ_INQUIRY_SCAN_ACTIVITY: |
| case hci::OpCode::WRITE_INQUIRY_SCAN_ACTIVITY: |
| case hci::OpCode::READ_INQUIRY_SCAN_TYPE: |
| case hci::OpCode::WRITE_INQUIRY_SCAN_TYPE: |
| case hci::OpCode::READ_INQUIRY_MODE: |
| case hci::OpCode::WRITE_INQUIRY_MODE: |
| case hci::OpCode::READ_EXTENDED_INQUIRY_RESPONSE: |
| case hci::OpCode::WRITE_EXTENDED_INQUIRY_RESPONSE: |
| case hci::OpCode::LE_SET_CIG_PARAMETERS: |
| case hci::OpCode::LE_CREATE_CIS: |
| case hci::OpCode::LE_REMOVE_CIG: |
| case hci::OpCode::LE_ACCEPT_CIS_REQUEST: |
| case hci::OpCode::LE_REJECT_CIS_REQUEST: |
| case hci::OpCode::LE_CREATE_BIG: |
| case hci::OpCode::LE_TERMINATE_BIG: |
| case hci::OpCode::LE_BIG_CREATE_SYNC: |
| case hci::OpCode::LE_BIG_TERMINATE_SYNC: |
| case hci::OpCode::LE_REQUEST_PEER_SCA: |
| case hci::OpCode::LE_SETUP_ISO_DATA_PATH: |
| case hci::OpCode::LE_REMOVE_ISO_DATA_PATH: |
| case hci::OpCode::LE_SET_HOST_FEATURE: |
| case hci::OpCode::LE_READ_ISO_LINK_QUALITY: |
| case hci::OpCode::LE_ENHANCED_READ_TRANSMIT_POWER_LEVEL: |
| case hci::OpCode::LE_READ_REMOTE_TRANSMIT_POWER_LEVEL: |
| case hci::OpCode::LE_SET_PATH_LOSS_REPORTING_PARAMETERS: |
| case hci::OpCode::LE_SET_PATH_LOSS_REPORTING_ENABLE: |
| case hci::OpCode::LE_SET_TRANSMIT_POWER_REPORTING_ENABLE: |
| case hci::OpCode::LE_GET_VENDOR_CAPABILITIES: |
| case hci::OpCode::LE_MULTI_ADVT: |
| case hci::OpCode::LE_BATCH_SCAN: |
| case hci::OpCode::LE_ADV_FILTER: |
| case hci::OpCode::LE_ENERGY_INFO: |
| case hci::OpCode::LE_EXTENDED_SCAN_PARAMS: |
| case hci::OpCode::CONTROLLER_DEBUG_INFO: |
| case hci::OpCode::CONTROLLER_A2DP_OPCODE: |
| case hci::OpCode::CONTROLLER_BQR: |
| case hci::OpCode::READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL: |
| case hci::OpCode::WRITE_INQUIRY_TRANSMIT_POWER_LEVEL: |
| case hci::OpCode::LE_SET_EXTENDED_SCAN_PARAMETERS: |
| case hci::OpCode::LE_SET_EXTENDED_SCAN_ENABLE: |
| case hci::OpCode::LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL: |
| case hci::OpCode::LE_SET_SCAN_PARAMETERS: |
| case hci::OpCode::LE_SET_SCAN_ENABLE: |
| case hci::OpCode::LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS: |
| case hci::OpCode::LE_SET_PERIODIC_ADVERTISING_RECEIVE_ENABLE: |
| case hci::OpCode::LE_CLEAR_PERIODIC_ADVERTISING_LIST: |
| case hci::OpCode::LE_READ_PERIODIC_ADVERTISING_LIST_SIZE: |
| case hci::OpCode::LE_PERIODIC_ADVERTISING_TERMINATE_SYNC: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| |
| case hci::OpCode::LE_READ_ADVERTISING_PHYSICAL_CHANNEL_TX_POWER: |
| case hci::OpCode::LE_SET_ADVERTISING_DATA: |
| case hci::OpCode::LE_SET_SCAN_RESPONSE_DATA: |
| case hci::OpCode::LE_SET_ADVERTISING_ENABLE: |
| case hci::OpCode::LE_SET_EXTENDED_ADVERTISING_DATA: |
| case hci::OpCode::LE_SET_EXTENDED_ADVERTISING_SCAN_RESPONSE: |
| case hci::OpCode::LE_SET_EXTENDED_ADVERTISING_ENABLE: |
| case hci::OpCode::LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH: |
| case hci::OpCode::LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS: |
| case hci::OpCode::LE_REMOVE_ADVERTISING_SET: |
| case hci::OpCode::LE_CLEAR_ADVERTISING_SETS: |
| case hci::OpCode::LE_SET_PERIODIC_ADVERTISING_PARAM: |
| case hci::OpCode::LE_SET_PERIODIC_ADVERTISING_DATA: |
| case hci::OpCode::LE_SET_PERIODIC_ADVERTISING_ENABLE: |
| case hci::OpCode::LE_SET_EXTENDED_ADVERTISING_RANDOM_ADDRESS: |
| classification = {.activity = Activity::ADVERTISE, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| |
| case hci::OpCode::LE_SET_ADVERTISING_PARAMETERS: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 10}; |
| break; |
| case hci::OpCode::LE_CREATE_CONNECTION: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 0, .address_pos = 9}; |
| break; |
| case hci::OpCode::LE_ADD_DEVICE_TO_CONNECT_LIST: |
| case hci::OpCode::LE_READ_CHANNEL_MAP: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 4, .address_pos = 0}; |
| break; |
| |
| case hci::OpCode::LE_REMOVE_DEVICE_FROM_CONNECT_LIST: |
| case hci::OpCode::LE_ADD_DEVICE_TO_RESOLVING_LIST: |
| case hci::OpCode::LE_REMOVE_DEVICE_FROM_RESOLVING_LIST: |
| case hci::OpCode::LE_READ_PEER_RESOLVABLE_ADDRESS: |
| case hci::OpCode::LE_READ_LOCAL_RESOLVABLE_ADDRESS: |
| case hci::OpCode::LE_SET_PRIVACY_MODE: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 0, .address_pos = 4}; |
| break; |
| |
| case hci::OpCode::LE_SET_EXTENDED_ADVERTISING_PARAMETERS: |
| classification = {.activity = Activity::ADVERTISE, .connection_handle_pos = 0, .address_pos = 15}; |
| break; |
| case hci::OpCode::LE_EXTENDED_CREATE_CONNECTION: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 0, .address_pos = 6}; |
| break; |
| case hci::OpCode::LE_PERIODIC_ADVERTISING_CREATE_SYNC: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 6}; |
| break; |
| case hci::OpCode::LE_ADD_DEVICE_TO_PERIODIC_ADVERTISING_LIST: |
| case hci::OpCode::LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISING_LIST: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 4}; |
| break; |
| case hci::OpCode::LE_PERIODIC_ADVERTISING_SYNC_TRANSFER: |
| case hci::OpCode::LE_PERIODIC_ADVERTISING_SET_INFO_TRANSFER: |
| case hci::OpCode::LE_SET_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAMETERS: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 3, .address_pos = 0}; |
| break; |
| |
| default: |
| classification = {.activity = Activity::UNKNOWN, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| } |
| return classification; |
| } |
| |
| CmdEvtActivityClassification lookup_event(hci::EventCode event_code) { |
| CmdEvtActivityClassification classification = {}; |
| switch (event_code) { |
| case hci::EventCode::INQUIRY_COMPLETE: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| case hci::EventCode::CONNECTION_COMPLETE: |
| case hci::EventCode::SYNCHRONOUS_CONNECTION_COMPLETE: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 3, .address_pos = 5}; |
| break; |
| |
| case hci::EventCode::CONNECTION_REQUEST: |
| case hci::EventCode::PIN_CODE_REQUEST: |
| case hci::EventCode::LINK_KEY_REQUEST: |
| case hci::EventCode::LINK_KEY_NOTIFICATION: |
| case hci::EventCode::USER_PASSKEY_NOTIFICATION: |
| case hci::EventCode::KEYPRESS_NOTIFICATION: |
| case hci::EventCode::REMOTE_HOST_SUPPORTED_FEATURES_NOTIFICATION: |
| case hci::EventCode::IO_CAPABILITY_REQUEST: |
| case hci::EventCode::IO_CAPABILITY_RESPONSE: |
| case hci::EventCode::USER_CONFIRMATION_REQUEST: |
| case hci::EventCode::USER_PASSKEY_REQUEST: |
| case hci::EventCode::REMOTE_OOB_DATA_REQUEST: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 0, .address_pos = 2}; |
| break; |
| |
| case hci::EventCode::DISCONNECTION_COMPLETE: |
| case hci::EventCode::AUTHENTICATION_COMPLETE: |
| case hci::EventCode::ENCRYPTION_CHANGE: |
| case hci::EventCode::ENCRYPTION_KEY_REFRESH_COMPLETE: |
| case hci::EventCode::LINK_SUPERVISION_TIMEOUT_CHANGED: |
| case hci::EventCode::CHANGE_CONNECTION_LINK_KEY_COMPLETE: |
| case hci::EventCode::CENTRAL_LINK_KEY_COMPLETE: |
| case hci::EventCode::READ_REMOTE_SUPPORTED_FEATURES_COMPLETE: |
| case hci::EventCode::READ_REMOTE_VERSION_INFORMATION_COMPLETE: |
| case hci::EventCode::QOS_SETUP_COMPLETE: |
| case hci::EventCode::MODE_CHANGE: |
| case hci::EventCode::READ_CLOCK_OFFSET_COMPLETE: |
| case hci::EventCode::CONNECTION_PACKET_TYPE_CHANGED: |
| case hci::EventCode::FLOW_SPECIFICATION_COMPLETE: |
| case hci::EventCode::READ_REMOTE_EXTENDED_FEATURES_COMPLETE: |
| case hci::EventCode::SYNCHRONOUS_CONNECTION_CHANGED: |
| case hci::EventCode::SNIFF_SUBRATING: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 3, .address_pos = 0}; |
| break; |
| |
| case hci::EventCode::REMOTE_NAME_REQUEST_COMPLETE: |
| case hci::EventCode::EXTENDED_INQUIRY_RESULT: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 3}; |
| break; |
| case hci::EventCode::FLUSH_OCCURRED: |
| case hci::EventCode::MAX_SLOTS_CHANGE: |
| case hci::EventCode::QOS_VIOLATION: |
| case hci::EventCode::ENHANCED_FLUSH_COMPLETE: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 2, .address_pos = 0}; |
| break; |
| case hci::EventCode::ROLE_CHANGE: |
| case hci::EventCode::SIMPLE_PAIRING_COMPLETE: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 0, .address_pos = 3}; |
| break; |
| case hci::EventCode::PAGE_SCAN_REPETITION_MODE_CHANGE: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 2}; |
| break; |
| |
| default: |
| classification = {.activity = Activity::UNKNOWN, .connection_handle_pos = 0, .address_pos = 0}; |
| } |
| return classification; |
| } |
| |
| CmdEvtActivityClassification lookup_le_event(hci::SubeventCode subevent_code) { |
| CmdEvtActivityClassification classification = {}; |
| switch (subevent_code) { |
| case hci::SubeventCode::CONNECTION_COMPLETE: |
| case hci::SubeventCode::ENHANCED_CONNECTION_COMPLETE: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 4, .address_pos = 7}; |
| break; |
| |
| case hci::SubeventCode::CONNECTION_UPDATE_COMPLETE: |
| case hci::SubeventCode::READ_REMOTE_FEATURES_COMPLETE: |
| case hci::SubeventCode::PHY_UPDATE_COMPLETE: |
| case hci::SubeventCode::CTE_REQUEST_FAILED: |
| case hci::SubeventCode::TRANSMIT_POWER_REPORTING: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 4, .address_pos = 0}; |
| break; |
| |
| case hci::SubeventCode::LONG_TERM_KEY_REQUEST: |
| case hci::SubeventCode::REMOTE_CONNECTION_PARAMETER_REQUEST: |
| case hci::SubeventCode::DATA_LENGTH_CHANGE: |
| case hci::SubeventCode::CHANNEL_SELECTION_ALGORITHM: |
| case hci::SubeventCode::CONNECTION_IQ_REPORT: |
| case hci::SubeventCode::PATH_LOSS_THRESHOLD: |
| classification = {.activity = Activity::CONNECT, .connection_handle_pos = 3, .address_pos = 0}; |
| break; |
| |
| case hci::SubeventCode::READ_LOCAL_P256_PUBLIC_KEY_COMPLETE: |
| case hci::SubeventCode::GENERATE_DHKEY_COMPLETE: |
| classification = {.activity = Activity::CONTROL, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| |
| case hci::SubeventCode::PERIODIC_ADVERTISING_SYNC_ESTABLISHED: |
| case hci::SubeventCode::PERIODIC_ADVERTISING_REPORT: |
| case hci::SubeventCode::PERIODIC_ADVERTISING_SYNC_LOST: |
| case hci::SubeventCode::ADVERTISING_SET_TERMINATED: |
| classification = {.activity = Activity::ADVERTISE, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| |
| case hci::SubeventCode::SCAN_TIMEOUT: |
| case hci::SubeventCode::BIG_INFO_ADVERTISING_REPORT: |
| case hci::SubeventCode::CONNECTIONLESS_IQ_REPORT: |
| case hci::SubeventCode::CREATE_BIG_COMPLETE: |
| case hci::SubeventCode::TERMINATE_BIG_COMPLETE: |
| case hci::SubeventCode::BIG_SYNC_ESTABLISHED: |
| case hci::SubeventCode::BIG_SYNC_LOST: |
| case hci::SubeventCode::REQUEST_PEER_SCA_COMPLETE: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 0, .address_pos = 0}; |
| break; |
| |
| case hci::SubeventCode::SCAN_REQUEST_RECEIVED: |
| classification = {.activity = Activity::ADVERTISE, .connection_handle_pos = 0, .address_pos = 5}; |
| break; |
| |
| case hci::SubeventCode::PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED: |
| case hci::SubeventCode::CIS_ESTABLISHED: |
| case hci::SubeventCode::CIS_REQUEST: |
| classification = {.activity = Activity::SCAN, .connection_handle_pos = 4, .address_pos = 0}; |
| break; |
| |
| default: |
| classification = {.activity = Activity::UNKNOWN, .connection_handle_pos = 0, .address_pos = 0}; |
| } |
| return classification; |
| } |
| |
| } // namespace activity_attribution |
| } // namespace bluetooth |