1// Copyright 2014 Google Inc. All Rights Reserved.
2// Author: pkanwar@google.com (Pankaj Kanwar)
3// Protos for uploading bluetooth metrics.
4
5syntax = "proto2";
6option optimize_for = LITE_RUNTIME;
7
8package clearcut.connectivity;
9
10option java_package = "com.google.wireless.android.play.playlog.connectivity";
11// option (datapol.file_vetting_status) = "latest";
12
13// import "storage/datapol/annotations/proto/semantic_annotations.proto";
14
15message BluetoothLog {
16  // Session information that gets logged for every BT connection.
17  repeated BluetoothSession session = 1;
18
19  // Session information that gets logged for every Pair event.
20  repeated PairEvent pair_event = 2;
21
22  // Information for Wake locks.
23  repeated WakeEvent wake_event = 3;
24
25  // Scan event information.
26  repeated ScanEvent scan_event = 4;
27
28  // Number of bonded devices.
29  optional int32 num_bonded_devices = 5;
30
31  // Number of BluetoothSession including discarded ones beyond capacity
32  optional int64 num_bluetooth_session = 6;
33
34  // Number of PairEvent including discarded ones beyond capacity
35  optional int64 num_pair_event = 7;
36
37  // Number of WakeEvent including discarded ones beyond capacity
38  optional int64 num_wake_event = 8;
39
40  // Number of ScanEvent including discarded ones beyond capacity
41  optional int64 num_scan_event = 9;
42}
43
44// The information about the device.
45message DeviceInfo {
46  // Device type.
47  enum DeviceType {
48    // Type is unknown.
49    DEVICE_TYPE_UNKNOWN = 0;
50
51    DEVICE_TYPE_BREDR = 1;
52
53    DEVICE_TYPE_LE = 2;
54
55    DEVICE_TYPE_DUMO = 3;
56  }
57
58  // Device class
59  // https://cs.corp.google.com/#android/system/bt/stack/include/btm_api.h&q=major_computer.
60  optional int32 device_class = 1;
61
62  // Device type.
63  optional DeviceType device_type = 2;
64}
65
66// Information that gets logged for every Bluetooth connection.
67message BluetoothSession {
68  // Type of technology used in the connection.
69  enum ConnectionTechnologyType {
70    CONNECTION_TECHNOLOGY_TYPE_UNKNOWN = 0;
71
72    CONNECTION_TECHNOLOGY_TYPE_LE = 1;
73
74    CONNECTION_TECHNOLOGY_TYPE_BREDR = 2;
75  }
76
77  enum DisconnectReasonType {
78    UNKNOWN = 0;
79
80    // A metrics dump takes a snapshot of current Bluetooth session and thus
81    // is not a real disconnect, but a discontinuation in metrics logging.
82    // This enum indicates this situation.
83    METRICS_DUMP = 1;
84
85    NEXT_START_WITHOUT_END_PREVIOUS = 2;
86  }
87
88  // Duration of the session.
89  optional int64 session_duration_sec = 2;
90
91  // Technology type.
92  optional ConnectionTechnologyType connection_technology_type = 3;
93
94  // Reason for disconnecting.
95  optional string disconnect_reason = 4 [deprecated = true];
96
97  // The information about the device which it is connected to.
98  optional DeviceInfo device_connected_to = 5;
99
100  // The information about the RFComm session.
101  optional RFCommSession rfcomm_session = 6;
102
103  // The information about the A2DP audio session.
104  optional A2DPSession a2dp_session = 7;
105
106  // Numeric reason for disconnecting as defined in metrics.h
107  optional DisconnectReasonType disconnect_reason_type = 8;
108}
109
110message RFCommSession {
111  // bytes transmitted.
112  optional int32 rx_bytes = 1;
113
114  // bytes transmitted.
115  optional int32 tx_bytes = 2;
116}
117
118// Session information that gets logged for A2DP session.
119message A2DPSession {
120  // Media timer in milliseconds.
121  optional int32 media_timer_min_millis = 1;
122
123  // Media timer in milliseconds.
124  optional int32 media_timer_max_millis = 2;
125
126  // Media timer in milliseconds.
127  optional int32 media_timer_avg_millis = 3;
128
129  // Buffer overruns count.
130  optional int32 buffer_overruns_max_count = 4;
131
132  // Buffer overruns total.
133  optional int32 buffer_overruns_total = 5;
134
135  // Buffer underruns average.
136  optional float buffer_underruns_average = 6;
137
138  // Buffer underruns count.
139  optional int32 buffer_underruns_count = 7;
140
141  // Total audio time in this A2DP session
142  optional int64 audio_duration_millis = 8;
143}
144
145message PairEvent {
146  // The reason for disconnecting
147  // https://cs.corp.google.com/#android/system/bt/stack/include/hcidefs.h&q=failed_establish.
148  optional int32 disconnect_reason = 1;
149
150  // Pair event time
151  optional int64 event_time_millis =
152      2;  // [(datapol.semantic_type) = ST_TIMESTAMP];
153
154  // The information about the device which it is paired to.
155  optional DeviceInfo device_paired_with = 3;
156}
157
158message WakeEvent {
159  // Information about the wake event type.
160  enum WakeEventType {
161    // Type is unknown.
162    UNKNOWN = 0;
163
164    // WakeLock was acquired.
165    ACQUIRED = 1;
166
167    // WakeLock was released.
168    RELEASED = 2;
169  }
170
171  // Information about the wake event type.
172  optional WakeEventType wake_event_type = 1;
173
174  // Initiator of the scan. Only the first three names will be stored.
175  // e.g. com.google.gms.
176  optional string requestor = 2;
177
178  // Name of the wakelock (e.g. bluedroid_timer).
179  optional string name = 3;
180
181  // Time of the event.
182  optional int64 event_time_millis =
183      4;  // [(datapol.semantic_type) = ST_TIMESTAMP];
184}
185
186message ScanEvent {
187  // Scan type.
188  enum ScanTechnologyType {
189    // Scan Type is unknown.
190    SCAN_TYPE_UNKNOWN = 0;
191
192    SCAN_TECH_TYPE_LE = 1;
193
194    SCAN_TECH_TYPE_BREDR = 2;
195
196    SCAN_TECH_TYPE_BOTH = 3;
197  }
198
199  // Scan event type.
200  enum ScanEventType {
201    // Scan started.
202    SCAN_EVENT_START = 0;
203
204    // Scan stopped.
205    SCAN_EVENT_STOP = 1;
206  }
207
208  // Scan event type.
209  optional ScanEventType scan_event_type = 1;
210
211  // Initiator of the scan. Only the first three names will be stored.
212  // e.g. com.google.gms.
213  optional string initiator = 2;
214
215  // Technology used for scanning.
216  optional ScanTechnologyType scan_technology_type = 3;
217
218  // Number of results returned.
219  optional int32 number_results = 4;
220
221  // Time of the event.
222  optional int64 event_time_millis =
223      5;  // [(datapol.semantic_type) = ST_TIMESTAMP];
224}
225