blob: b1e28c3b2f2dcf79116010ae386dac10387ce321 [file] [log] [blame]
/*
* Copyright (C) 2018 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.
*/
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
// C++ namespace: bluetooth::metrics::BluetoothMetricsProto
package bluetooth.metrics.BluetoothMetricsProto;
option java_package = "com.android.bluetooth";
option java_outer_classname = "BluetoothMetricsProto";
message BluetoothLog {
// Session information that gets logged for every BT connection.
repeated BluetoothSession session = 1;
// Session information that gets logged for every Pair event.
repeated PairEvent pair_event = 2;
// Information for Wake locks.
repeated WakeEvent wake_event = 3;
// Scan event information.
repeated ScanEvent scan_event = 4;
// Number of bonded devices.
optional int32 num_bonded_devices = 5;
// Number of BluetoothSession including discarded ones beyond capacity
optional int64 num_bluetooth_session = 6;
// Number of PairEvent including discarded ones beyond capacity
optional int64 num_pair_event = 7;
// Number of WakeEvent including discarded ones beyond capacity
optional int64 num_wake_event = 8;
// Number of ScanEvent including discarded ones beyond capacity
optional int64 num_scan_event = 9;
// Statistics about Bluetooth profile connections
repeated ProfileConnectionStats profile_connection_stats = 10;
// Statistics about Headset profile connections
repeated HeadsetProfileConnectionStats headset_profile_connection_stats = 11;
}
// The information about the device.
message DeviceInfo {
// Device type.
enum DeviceType {
// Type is unknown.
DEVICE_TYPE_UNKNOWN = 0;
DEVICE_TYPE_BREDR = 1;
DEVICE_TYPE_LE = 2;
DEVICE_TYPE_DUMO = 3;
}
// Device class
// https://cs.corp.google.com/#android/system/bt/stack/include/btm_api.h&q=major_computer.
optional int32 device_class = 1;
// Device type.
optional DeviceType device_type = 2;
}
// Information that gets logged for every Bluetooth connection.
message BluetoothSession {
// Type of technology used in the connection.
enum ConnectionTechnologyType {
CONNECTION_TECHNOLOGY_TYPE_UNKNOWN = 0;
CONNECTION_TECHNOLOGY_TYPE_LE = 1;
CONNECTION_TECHNOLOGY_TYPE_BREDR = 2;
}
enum DisconnectReasonType {
UNKNOWN = 0;
// A metrics dump takes a snapshot of current Bluetooth session and thus
// is not a real disconnect, but a discontinuation in metrics logging.
// This enum indicates this situation.
METRICS_DUMP = 1;
NEXT_START_WITHOUT_END_PREVIOUS = 2;
}
// Duration of the session.
optional int64 session_duration_sec = 2;
// Technology type.
optional ConnectionTechnologyType connection_technology_type = 3;
// Reason for disconnecting.
optional string disconnect_reason = 4 [deprecated = true];
// The information about the device which it is connected to.
optional DeviceInfo device_connected_to = 5;
// The information about the RFComm session.
optional RFCommSession rfcomm_session = 6;
// The information about the A2DP audio session.
optional A2DPSession a2dp_session = 7;
// Numeric reason for disconnecting as defined in metrics.h
optional DisconnectReasonType disconnect_reason_type = 8;
}
message RFCommSession {
// bytes transmitted.
optional int32 rx_bytes = 1;
// bytes transmitted.
optional int32 tx_bytes = 2;
}
enum A2dpSourceCodec {
A2DP_SOURCE_CODEC_UNKNOWN = 0;
A2DP_SOURCE_CODEC_SBC = 1;
A2DP_SOURCE_CODEC_AAC = 2;
A2DP_SOURCE_CODEC_APTX = 3;
A2DP_SOURCE_CODEC_APTX_HD = 4;
A2DP_SOURCE_CODEC_LDAC = 5;
}
// Session information that gets logged for A2DP session.
message A2DPSession {
// Media timer in milliseconds.
optional int32 media_timer_min_millis = 1;
// Media timer in milliseconds.
optional int32 media_timer_max_millis = 2;
// Media timer in milliseconds.
optional int32 media_timer_avg_millis = 3;
// Buffer overruns count.
optional int32 buffer_overruns_max_count = 4;
// Buffer overruns total.
optional int32 buffer_overruns_total = 5;
// Buffer underruns average.
optional float buffer_underruns_average = 6;
// Buffer underruns count.
optional int32 buffer_underruns_count = 7;
// Total audio time in this A2DP session
optional int64 audio_duration_millis = 8;
// Audio codec used in this A2DP session in A2DP source role
optional A2dpSourceCodec source_codec = 9;
// Whether A2DP offload is enabled in this A2DP session
optional bool is_a2dp_offload = 10;
}
message PairEvent {
// The reason for disconnecting
// See: system/bt/stack/include/hcidefs.h, HCI_ERR_CONN_FAILED_ESTABLISHMENT
optional int32 disconnect_reason = 1;
// Pair event time
optional int64 event_time_millis =
2; // [(datapol.semantic_type) = ST_TIMESTAMP];
// The information about the device which it is paired to.
optional DeviceInfo device_paired_with = 3;
}
message WakeEvent {
// Information about the wake event type.
enum WakeEventType {
UNKNOWN = 0;
// WakeLock was acquired.
ACQUIRED = 1;
// WakeLock was released.
RELEASED = 2;
}
// Information about the wake event type.
optional WakeEventType wake_event_type = 1;
// Initiator of the scan. Only the first three names will be stored.
// e.g. com.company.app
optional string requestor = 2;
// Name of the wakelock (e.g. bluedroid_timer).
optional string name = 3;
// Time of the event.
optional int64 event_time_millis =
4; // [(datapol.semantic_type) = ST_TIMESTAMP];
}
message ScanEvent {
// Scan type.
enum ScanTechnologyType {
SCAN_TYPE_UNKNOWN = 0;
SCAN_TECH_TYPE_LE = 1;
SCAN_TECH_TYPE_BREDR = 2;
SCAN_TECH_TYPE_BOTH = 3;
}
// Scan event type.
enum ScanEventType {
// Scan started.
SCAN_EVENT_START = 0;
// Scan stopped.
SCAN_EVENT_STOP = 1;
}
// Scan event type.
optional ScanEventType scan_event_type = 1;
// Initiator of the scan. Only the first three names will be stored.
// e.g. com.company.app
optional string initiator = 2;
// Technology used for scanning.
optional ScanTechnologyType scan_technology_type = 3;
// Number of results returned.
optional int32 number_results = 4;
// Time of the event.
optional int64 event_time_millis =
5; // [(datapol.semantic_type) = ST_TIMESTAMP];
}
// Profile IDs defined in BluetoothProfile API class
// Values must match API class values
enum ProfileId {
PROFILE_UNKNOWN = 0;
HEADSET = 1;
A2DP = 2;
HEALTH = 3;
HID_HOST = 4;
PAN = 5;
PBAP = 6;
GATT = 7;
GATT_SERVER = 8;
MAP = 9;
SAP = 10;
A2DP_SINK = 11;
AVRCP_CONTROLLER = 12;
AVRCP = 13;
HEADSET_CLIENT = 16;
PBAP_CLIENT = 17;
MAP_CLIENT = 18;
HID_DEVICE = 19;
OPP = 20;
HEARING_AID = 21;
}
// Statistics about Bluetooth profile connections
message ProfileConnectionStats {
// Profile id defined in BluetoothProfile.java
optional ProfileId profile_id = 1;
// Number of times that this profile is connected since last metrics dump
optional int32 num_times_connected = 2;
}
enum HeadsetProfileType {
HEADSET_PROFILE_UNKNOWN = 0;
HSP = 1;
HFP = 2;
}
// Statistics about headset profile connections
message HeadsetProfileConnectionStats {
// Type of headset profile connected
optional HeadsetProfileType headset_profile_type = 1;
// Number of times this type of headset profile is connected
optional int32 num_times_connected = 2;
}