1/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17syntax = "proto2";
18package android.service.usb;
19
20option java_multiple_files = true;
21option java_outer_classname = "UsbServiceProto";
22
23import "frameworks/base/core/proto/android/content/component_name.proto";
24import "frameworks/base/core/proto/android/service/enums.proto";
25import "frameworks/base/core/proto/android/privacy.proto";
26
27message UsbServiceDumpProto {
28    option (android.msg_privacy).dest = DEST_AUTOMATIC;
29
30    optional UsbDeviceManagerProto device_manager = 1;
31    optional UsbHostManagerProto host_manager = 2;
32    optional UsbPortManagerProto port_manager = 3;
33    optional UsbAlsaManagerProto alsa_manager = 4;
34    optional UsbSettingsManagerProto settings_manager = 5;
35}
36
37message UsbDeviceManagerProto {
38    option (android.msg_privacy).dest = DEST_AUTOMATIC;
39
40    optional UsbHandlerProto handler = 1;
41    optional UsbDebuggingManagerProto debugging_manager = 2;
42}
43
44message UsbHandlerProto {
45    option (android.msg_privacy).dest = DEST_AUTOMATIC;
46
47    /* Same as android.hardware.usb.gadget.V1_0.GadgetFunction.* */
48    enum Function {
49        FUNCTION_ADB = 1;
50        FUNCTION_ACCESSORY = 2;
51        FUNCTION_MTP = 4;
52        FUNCTION_MIDI = 8;
53        FUNCTION_PTP = 16;
54        FUNCTION_RNDIS = 32;
55        FUNCTION_AUDIO_SOURCE = 64;
56    }
57
58    repeated Function current_functions = 1;
59    optional bool current_functions_applied = 2;
60    repeated Function screen_unlocked_functions = 3;
61    optional bool screen_locked = 4;
62    optional bool connected = 5;
63    optional bool configured = 6;
64    optional UsbAccessoryProto current_accessory = 7;
65    optional bool host_connected = 8;
66    optional bool source_power = 9;
67    optional bool sink_power = 10;
68    optional bool usb_charging = 11;
69    optional bool hide_usb_notification = 12;
70    optional bool audio_accessory_connected = 13;
71    optional bool adb_enabled = 14;
72    optional string kernel_state = 15;
73    optional string kernel_function_list = 16;
74}
75
76message UsbAccessoryProto {
77    option (android.msg_privacy).dest = DEST_AUTOMATIC;
78
79    optional string manufacturer = 1;
80    optional string model = 2;
81    // For "classical" USB-accessories the manufacturer bakes this into the
82    // firmware of the device. If an Android phone is configured as accessory, the
83    // app that sets up the accessory side of the connection set this. Either way,
84    // these are part of the detection protocol, and so they cannot be user set or
85    // unique.
86    optional string description = 3;
87    optional string version = 4;
88    optional string uri = 5 [ (android.privacy).dest = DEST_EXPLICIT ];
89    // Non-resettable hardware ID.
90    optional string serial = 6 [ (android.privacy).dest = DEST_LOCAL ];
91}
92
93message UsbDebuggingManagerProto {
94    option (android.msg_privacy).dest = DEST_AUTOMATIC;
95
96    optional bool connected_to_adb = 1;
97    // A workstation that connects to the phone for debugging is identified by
98    // this key.
99    optional string last_key_received = 2 [ (android.privacy).dest = DEST_EXPLICIT ];
100    optional string user_keys = 3 [ (android.privacy).dest = DEST_LOCAL ];
101    optional string system_keys = 4 [ (android.privacy).dest = DEST_LOCAL ];
102}
103
104message UsbHostManagerProto {
105    option (android.msg_privacy).dest = DEST_AUTOMATIC;
106
107    optional android.content.ComponentNameProto default_usb_host_connection_handler = 1;
108    repeated UsbDeviceProto devices = 2;
109    optional int32 num_connects = 3;
110    repeated UsbConnectionRecordProto connections = 4;
111}
112
113message UsbDeviceProto {
114    option (android.msg_privacy).dest = DEST_AUTOMATIC;
115
116    // Generic USB name, not user-provided.
117    optional string name = 1;
118    // ID specific to the vendor, not the device.
119    optional int32 vendor_id = 2;
120    // ID of this product type: Each vendor gives each product a unique ID. E.g.
121    // all mice of the same model would have the same ID.
122    optional int32 product_id = 3;
123    optional int32 class = 4;
124    optional int32 subclass = 5;
125    optional int32 protocol = 6;
126    optional string manufacturer_name = 7;
127    optional string product_name = 8;
128    optional string version = 9;
129    // Non-resettable hardware ID.
130    optional string serial_number = 10 [ (android.privacy).dest = DEST_LOCAL ];
131    repeated UsbConfigurationProto configurations = 11;
132}
133
134message UsbConfigurationProto {
135    option (android.msg_privacy).dest = DEST_AUTOMATIC;
136
137    // A single USB device can have several configurations and the app accessing
138    // the USB device can switch between them. At any time only one can be active.
139    // Each configuration can present completely different interfaces end
140    // endpoints, i.e. a completely different behavior.
141    optional int32 id = 1;
142    // Hardware-defined name, not set by the user.
143    optional string name = 2;
144    optional uint32 attributes = 3;
145    optional int32 max_power = 4;
146    repeated UsbInterfaceProto interfaces = 5;
147}
148
149message UsbInterfaceProto {
150    option (android.msg_privacy).dest = DEST_AUTOMATIC;
151
152    // Hardware defined. This is the id used by the app to identify the interface.
153    optional int32 id = 1;
154    optional int32 alternate_settings = 2;
155    optional string name = 3;
156    optional int32 class = 4;
157    optional int32 subclass = 5;
158    optional int32 protocol = 6;
159    repeated UsbEndPointProto endpoints = 7;
160}
161
162message UsbEndPointProto {
163    option (android.msg_privacy).dest = DEST_AUTOMATIC;
164
165    optional int32 endpoint_number = 1;
166    optional android.service.UsbEndPointDirection direction = 2;
167      // The address of the endpoint. Needed to read and write to the endpoint.
168    optional int32 address = 3;
169    optional android.service.UsbEndPointType type = 4;
170    optional uint32 attributes = 5;
171    optional int32 max_packet_size = 6;
172    optional int32 interval = 7;
173}
174
175message UsbConnectionRecordProto {
176    option (android.msg_privacy).dest = DEST_AUTOMATIC;
177
178    // usb device's address, e.g. 001/002, nothing about the phone
179    optional string device_address = 1;
180    optional android.service.UsbConnectionRecordMode mode = 2;
181    optional int64 timestamp = 3;
182    optional int32 manufacturer = 4;
183    optional int32 product = 5;
184    optional UsbIsHeadsetProto is_headset = 6;
185}
186
187message UsbIsHeadsetProto {
188    option (android.msg_privacy).dest = DEST_AUTOMATIC;
189
190    optional bool in = 1;
191    optional bool out = 2;
192}
193
194message UsbPortManagerProto {
195    option (android.msg_privacy).dest = DEST_AUTOMATIC;
196
197    optional bool is_simulation_active = 1;
198    repeated UsbPortInfoProto usb_ports = 2;
199}
200
201message UsbPortInfoProto {
202    option (android.msg_privacy).dest = DEST_AUTOMATIC;
203
204    optional UsbPortProto port = 1;
205    optional UsbPortStatusProto status = 2;
206    optional bool can_change_mode = 3;
207    optional bool can_change_power_role = 4;
208    optional bool can_change_data_role = 5;
209    optional int64 connected_at_millis = 6;
210    optional int64 last_connect_duration_millis = 7;
211}
212
213message UsbPortProto {
214    option (android.msg_privacy).dest = DEST_AUTOMATIC;
215
216    /* Same as android.hardware.usb.V1_1.Constants.PortMode_1_1 */
217    enum Mode {
218        MODE_NONE = 0;
219        MODE_UFP = 1;
220        MODE_DFP = 2;
221        MODE_DRP = 3;
222        MODE_AUDIO_ACCESSORY = 4;
223        MODE_DEBUG_ACCESSORY = 8;
224    }
225
226    // ID of the port. A device (eg: Chromebooks) might have multiple ports.
227    optional string id = 1;
228    repeated Mode supported_modes = 2;
229}
230
231/* Same as android.hardware.usb.V1_2.Constants.ContaminantPresenceStatus */
232enum ContaminantPresenceStatus {
233    CONTAMINANT_STATUS_UNKNOWN = 0;
234    CONTAMINANT_STATUS_NOT_SUPPORTED = 1;
235    CONTAMINANT_STATUS_DISABLED = 2;
236    CONTAMINANT_STATUS_NOT_DETECTED = 3;
237    CONTAMINANT_STATUS_DETECTED = 4;
238}
239
240message UsbPortStatusProto {
241    option (android.msg_privacy).dest = DEST_AUTOMATIC;
242
243    /* Same as android.hardware.usb.V1_0.Constants.PortPowerRole */
244    enum PowerRole {
245        POWER_ROLE_NONE = 0;
246        POWER_ROLE_SOURCE = 1;
247        POWER_ROLE_SINK = 2;
248    }
249
250    /* Same as android.hardware.usb.V1_0.Constants.PortDataRole */
251    enum DataRole {
252        DATA_ROLE_NONE = 0;
253        DATA_ROLE_HOST = 1;
254        DATA_ROLE_DEVICE = 2;
255    }
256
257    optional bool connected = 1;
258    optional UsbPortProto.Mode current_mode = 2;
259    optional PowerRole power_role = 3;
260    optional DataRole data_role = 4;
261    repeated UsbPortStatusRoleCombinationProto role_combinations = 5;
262    optional ContaminantPresenceStatus contaminant_presence_status = 6;
263}
264
265message UsbPortStatusRoleCombinationProto {
266    option (android.msg_privacy).dest = DEST_AUTOMATIC;
267
268    optional UsbPortStatusProto.PowerRole power_role = 1;
269    optional UsbPortStatusProto.DataRole data_role = 2;
270}
271
272message UsbAlsaManagerProto {
273    option (android.msg_privacy).dest = DEST_AUTOMATIC;
274
275    optional int32 cards_parser = 1;
276    repeated UsbAlsaDeviceProto alsa_devices = 2;
277    repeated UsbMidiDeviceProto midi_devices = 3;
278}
279
280message UsbAlsaDeviceProto {
281    option (android.msg_privacy).dest = DEST_AUTOMATIC;
282
283    optional int32 card = 1;
284    optional int32 device = 2;
285    optional string name = 3;
286    optional bool has_playback = 4;
287    optional bool has_capture = 5;
288    // usb device's address, e.g. 001/002, nothing about the phone
289    optional string address = 6;
290}
291
292message UsbMidiDeviceProto {
293    option (android.msg_privacy).dest = DEST_AUTOMATIC;
294
295    optional int32 card = 1;
296    optional int32 device = 2;
297    // usb device's address, e.g. 001/002, nothing about the phone
298    optional string device_address = 3;
299}
300
301message UsbSettingsManagerProto {
302    option (android.msg_privacy).dest = DEST_AUTOMATIC;
303
304    repeated UsbUserSettingsManagerProto user_settings = 1;
305    repeated UsbProfileGroupSettingsManagerProto profile_group_settings = 2;
306}
307
308message UsbUserSettingsManagerProto {
309    option (android.msg_privacy).dest = DEST_AUTOMATIC;
310
311    optional int32 user_id = 1;
312    repeated UsbSettingsDevicePermissionProto device_permissions = 2;
313    repeated UsbSettingsAccessoryPermissionProto accessory_permissions = 3;
314    repeated UsbDeviceAttachedActivities device_attached_activities = 4;
315    repeated UsbAccessoryAttachedActivities accessory_attached_activities = 5;
316}
317
318message UsbSettingsDevicePermissionProto {
319    option (android.msg_privacy).dest = DEST_AUTOMATIC;
320
321    optional string device_name = 1;
322    repeated int32 uids = 2;
323}
324
325message UsbSettingsAccessoryPermissionProto {
326    option (android.msg_privacy).dest = DEST_AUTOMATIC;
327
328    optional string accessory_description = 1;
329    repeated int32 uids = 2;
330}
331
332message UsbProfileGroupSettingsManagerProto {
333    option (android.msg_privacy).dest = DEST_AUTOMATIC;
334
335    // The user id of the personal profile if the device has a work profile.
336    optional int32 parent_user_id = 1;
337    repeated UsbSettingsDevicePreferenceProto device_preferences = 2;
338    repeated UsbSettingsAccessoryPreferenceProto accessory_preferences = 3;
339}
340
341message UsbSettingsDevicePreferenceProto {
342    option (android.msg_privacy).dest = DEST_AUTOMATIC;
343
344    optional UsbDeviceFilterProto filter = 1;
345    optional UserPackageProto user_package = 2;
346}
347
348message UsbDeviceFilterProto {
349    option (android.msg_privacy).dest = DEST_AUTOMATIC;
350
351    // Mirrors the vendor_id of UsbDeviceProto.
352    optional int32 vendor_id = 1;
353    optional int32 product_id = 2;
354    optional int32 class = 3;
355    optional int32 subclass = 4;
356    optional int32 protocol = 5;
357    optional string manufacturer_name = 6;
358    optional string product_name = 7;
359    optional string serial_number = 8 [ (android.privacy).dest = DEST_EXPLICIT ];
360}
361
362message UserPackageProto {
363    option (android.msg_privacy).dest = DEST_AUTOMATIC;
364
365    optional int32 user_id = 1;
366    optional string package_name =2;
367}
368
369message UsbSettingsAccessoryPreferenceProto {
370    option (android.msg_privacy).dest = DEST_AUTOMATIC;
371
372    optional UsbAccessoryFilterProto filter = 1;
373    optional UserPackageProto user_package = 2;
374}
375
376message UsbAccessoryFilterProto {
377    option (android.msg_privacy).dest = DEST_AUTOMATIC;
378
379    optional string manufacturer = 1;
380    optional string model = 2;
381    optional string version = 3;
382}
383
384message UsbDeviceAttachedActivities {
385    option (android.msg_privacy).dest = DEST_AUTOMATIC;
386
387    optional android.content.ComponentNameProto activity = 1;
388    repeated UsbDeviceFilterProto filters = 2;
389}
390
391message UsbAccessoryAttachedActivities {
392    option (android.msg_privacy).dest = DEST_AUTOMATIC;
393
394    optional android.content.ComponentNameProto activity = 1;
395    repeated UsbAccessoryFilterProto filters = 2;
396}
397