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/privacy.proto"; 25import "frameworks/proto_logging/stats/enums/service/enums.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 optional UsbPermissionsManagerProto permissions_manager = 6; 36} 37 38message UsbDeviceManagerProto { 39 option (android.msg_privacy).dest = DEST_AUTOMATIC; 40 41 optional UsbHandlerProto handler = 1; 42 optional UsbDebuggingManagerProto debugging_manager = 2; 43} 44 45message UsbHandlerProto { 46 option (android.msg_privacy).dest = DEST_AUTOMATIC; 47 48 /* Same as android.hardware.usb.gadget.V1_0.GadgetFunction.* */ 49 enum Function { 50 FUNCTION_ADB = 1; 51 FUNCTION_ACCESSORY = 2; 52 FUNCTION_MTP = 4; 53 FUNCTION_MIDI = 8; 54 FUNCTION_PTP = 16; 55 FUNCTION_RNDIS = 32; 56 FUNCTION_AUDIO_SOURCE = 64; 57 } 58 59 repeated Function current_functions = 1; 60 optional bool current_functions_applied = 2; 61 repeated Function screen_unlocked_functions = 3; 62 optional bool screen_locked = 4; 63 optional bool connected = 5; 64 optional bool configured = 6; 65 optional UsbAccessoryProto current_accessory = 7; 66 optional bool host_connected = 8; 67 optional bool source_power = 9; 68 optional bool sink_power = 10; 69 optional bool usb_charging = 11; 70 optional bool hide_usb_notification = 12; 71 optional bool audio_accessory_connected = 13; 72 optional bool adb_enabled = 14; 73 optional string kernel_state = 15; 74 optional string kernel_function_list = 16; 75 optional string uevent = 17; 76} 77 78message UsbAccessoryProto { 79 option (android.msg_privacy).dest = DEST_AUTOMATIC; 80 81 optional string manufacturer = 1; 82 optional string model = 2; 83 // For "classical" USB-accessories the manufacturer bakes this into the 84 // firmware of the device. If an Android phone is configured as accessory, the 85 // app that sets up the accessory side of the connection set this. Either way, 86 // these are part of the detection protocol, and so they cannot be user set or 87 // unique. 88 optional string description = 3; 89 optional string version = 4; 90 optional string uri = 5 [ (android.privacy).dest = DEST_EXPLICIT ]; 91 // Non-resettable hardware ID. 92 optional string serial = 6 [ (android.privacy).dest = DEST_LOCAL ]; 93} 94 95message UsbDebuggingManagerProto { 96 option (android.msg_privacy).dest = DEST_AUTOMATIC; 97 98 optional bool connected_to_adb = 1; 99 // A workstation that connects to the phone for debugging is identified by 100 // this key. 101 optional string last_key_received = 2 [ (android.privacy).dest = DEST_EXPLICIT ]; 102 optional string user_keys = 3 [ (android.privacy).dest = DEST_LOCAL ]; 103 optional string system_keys = 4 [ (android.privacy).dest = DEST_LOCAL ]; 104} 105 106message UsbHostManagerProto { 107 option (android.msg_privacy).dest = DEST_AUTOMATIC; 108 109 optional android.content.ComponentNameProto default_usb_host_connection_handler = 1; 110 repeated UsbDeviceProto devices = 2; 111 optional int32 num_connects = 3; 112 repeated UsbConnectionRecordProto connections = 4; 113 repeated UsbDirectMidiDeviceProto midi_devices = 5; 114} 115 116message UsbDeviceProto { 117 option (android.msg_privacy).dest = DEST_AUTOMATIC; 118 119 // Generic USB name, not user-provided. 120 optional string name = 1; 121 // ID specific to the vendor, not the device. 122 optional int32 vendor_id = 2; 123 // ID of this product type: Each vendor gives each product a unique ID. E.g. 124 // all mice of the same model would have the same ID. 125 optional int32 product_id = 3; 126 optional int32 class = 4; 127 optional int32 subclass = 5; 128 optional int32 protocol = 6; 129 optional string manufacturer_name = 7; 130 optional string product_name = 8; 131 optional string version = 9; 132 // Non-resettable hardware ID. 133 optional string serial_number = 10 [ (android.privacy).dest = DEST_LOCAL ]; 134 repeated UsbConfigurationProto configurations = 11; 135} 136 137message UsbConfigurationProto { 138 option (android.msg_privacy).dest = DEST_AUTOMATIC; 139 140 // A single USB device can have several configurations and the app accessing 141 // the USB device can switch between them. At any time only one can be active. 142 // Each configuration can present completely different interfaces end 143 // endpoints, i.e. a completely different behavior. 144 optional int32 id = 1; 145 // Hardware-defined name, not set by the user. 146 optional string name = 2; 147 optional uint32 attributes = 3; 148 optional int32 max_power = 4; 149 repeated UsbInterfaceProto interfaces = 5; 150} 151 152message UsbInterfaceProto { 153 option (android.msg_privacy).dest = DEST_AUTOMATIC; 154 155 // Hardware defined. This is the id used by the app to identify the interface. 156 optional int32 id = 1; 157 optional int32 alternate_settings = 2; 158 optional string name = 3; 159 optional int32 class = 4; 160 optional int32 subclass = 5; 161 optional int32 protocol = 6; 162 repeated UsbEndPointProto endpoints = 7; 163} 164 165message UsbEndPointProto { 166 option (android.msg_privacy).dest = DEST_AUTOMATIC; 167 168 optional int32 endpoint_number = 1; 169 optional android.service.UsbEndPointDirection direction = 2; 170 // The address of the endpoint. Needed to read and write to the endpoint. 171 optional int32 address = 3; 172 optional android.service.UsbEndPointType type = 4; 173 optional uint32 attributes = 5; 174 optional int32 max_packet_size = 6; 175 optional int32 interval = 7; 176} 177 178message UsbConnectionRecordProto { 179 option (android.msg_privacy).dest = DEST_AUTOMATIC; 180 181 // usb device's address, e.g. 001/002, nothing about the phone 182 optional string device_address = 1; 183 optional android.service.UsbConnectionRecordMode mode = 2; 184 optional int64 timestamp = 3; 185 optional int32 manufacturer = 4; 186 optional int32 product = 5; 187 optional UsbIsHeadsetProto is_headset = 6; 188} 189 190message UsbIsHeadsetProto { 191 option (android.msg_privacy).dest = DEST_AUTOMATIC; 192 193 optional bool in = 1; 194 optional bool out = 2; 195} 196 197message UsbPortManagerProto { 198 option (android.msg_privacy).dest = DEST_AUTOMATIC; 199 200 enum HalVersion { 201 V_UNKNOWN = 0; 202 V1_0 = 10; 203 V1_1 = 11; 204 V1_2 = 12; 205 V1_3 = 13; 206 V2 = 20; 207 } 208 209 optional bool is_simulation_active = 1; 210 repeated UsbPortInfoProto usb_ports = 2; 211 optional bool enable_usb_data_signaling = 3; 212 optional HalVersion hal_version = 4; 213} 214 215message UsbPortInfoProto { 216 option (android.msg_privacy).dest = DEST_AUTOMATIC; 217 218 optional UsbPortProto port = 1; 219 optional UsbPortStatusProto status = 2; 220 optional bool can_change_mode = 3; 221 optional bool can_change_power_role = 4; 222 optional bool can_change_data_role = 5; 223 optional int64 connected_at_millis = 6; 224 optional int64 last_connect_duration_millis = 7; 225} 226 227message UsbPortProto { 228 option (android.msg_privacy).dest = DEST_AUTOMATIC; 229 230 /* Same as android.hardware.usb.V1_1.Constants.PortMode_1_1 */ 231 enum Mode { 232 MODE_NONE = 0; 233 MODE_UFP = 1; 234 MODE_DFP = 2; 235 MODE_DRP = 3; 236 MODE_AUDIO_ACCESSORY = 4; 237 MODE_DEBUG_ACCESSORY = 8; 238 } 239 240 // ID of the port. A device (eg: Chromebooks) might have multiple ports. 241 optional string id = 1; 242 repeated Mode supported_modes = 2; 243} 244 245message UsbPortStatusProto { 246 option (android.msg_privacy).dest = DEST_AUTOMATIC; 247 248 /* Same as android.hardware.usb.V1_0.Constants.PortPowerRole */ 249 enum PowerRole { 250 POWER_ROLE_NONE = 0; 251 POWER_ROLE_SOURCE = 1; 252 POWER_ROLE_SINK = 2; 253 } 254 255 /* Same as android.hardware.usb.V1_0.Constants.PortDataRole */ 256 enum DataRole { 257 DATA_ROLE_NONE = 0; 258 DATA_ROLE_HOST = 1; 259 DATA_ROLE_DEVICE = 2; 260 } 261 262 optional bool connected = 1; 263 optional UsbPortProto.Mode current_mode = 2; 264 optional PowerRole power_role = 3; 265 optional DataRole data_role = 4; 266 repeated UsbPortStatusRoleCombinationProto role_combinations = 5; 267 optional android.service.ContaminantPresenceStatus contaminant_presence_status = 6; 268 optional string usb_data_status = 7; 269 optional bool is_power_transfer_limited = 8; 270 optional string usb_power_brick_status = 9; 271} 272 273message UsbPortStatusRoleCombinationProto { 274 option (android.msg_privacy).dest = DEST_AUTOMATIC; 275 276 optional UsbPortStatusProto.PowerRole power_role = 1; 277 optional UsbPortStatusProto.DataRole data_role = 2; 278} 279 280message UsbAlsaManagerProto { 281 option (android.msg_privacy).dest = DEST_AUTOMATIC; 282 283 optional int32 cards_parser = 1; 284 repeated UsbAlsaDeviceProto alsa_devices = 2; 285 repeated UsbMidiDeviceProto midi_devices = 3; 286} 287 288message UsbAlsaDeviceProto { 289 option (android.msg_privacy).dest = DEST_AUTOMATIC; 290 291 optional int32 card = 1; 292 optional int32 device = 2; 293 optional string name = 3; 294 optional bool has_playback = 4; 295 optional bool has_capture = 5; 296 // usb device's address, e.g. 001/002, nothing about the phone 297 optional string address = 6; 298} 299 300message UsbMidiDeviceProto { 301 option (android.msg_privacy).dest = DEST_AUTOMATIC; 302 303 optional int32 card = 1; 304 optional int32 device = 2; 305 // usb device's address, e.g. 001/002, nothing about the phone 306 optional string device_address = 3; 307} 308 309message UsbDirectMidiDeviceProto { 310 option (android.msg_privacy).dest = DEST_AUTOMATIC; 311 312 optional int32 num_inputs = 1; 313 optional int32 num_outputs = 2; 314 optional bool is_universal = 3; 315 optional string name = 4; 316 optional UsbMidiBlockParserProto block_parser = 5; 317} 318 319message UsbMidiBlockParserProto { 320 option (android.msg_privacy).dest = DEST_AUTOMATIC; 321 322 optional int32 length = 1; 323 optional int32 descriptor_type = 2; 324 optional int32 descriptor_subtype = 3; 325 optional int32 total_length = 4; 326 repeated UsbGroupTerminalBlockProto block = 5; 327} 328 329message UsbGroupTerminalBlockProto { 330 option (android.msg_privacy).dest = DEST_AUTOMATIC; 331 332 optional int32 length = 1; 333 optional int32 descriptor_type = 2; 334 optional int32 descriptor_subtype = 3; 335 optional int32 group_block_id = 4; 336 optional int32 group_terminal_block_type = 5; 337 optional int32 group_terminal = 6; 338 optional int32 num_group_terminals = 7; 339 optional int32 block_item = 8; 340 optional int32 midi_protocol = 9; 341 optional int32 max_input_bandwidth = 10; 342 optional int32 max_output_bandwidth = 11; 343} 344 345message UsbSettingsManagerProto { 346 option (android.msg_privacy).dest = DEST_AUTOMATIC; 347 348 repeated UsbUserSettingsManagerProto user_settings = 1; 349 repeated UsbProfileGroupSettingsManagerProto profile_group_settings = 2; 350} 351 352message UsbUserSettingsManagerProto { 353 option (android.msg_privacy).dest = DEST_AUTOMATIC; 354 355 optional int32 user_id = 1; 356 reserved 2; // previously device_permissions, now unused 357 reserved 3; // previously accessory_permissions, now unused 358 repeated UsbDeviceAttachedActivities device_attached_activities = 4; 359 repeated UsbAccessoryAttachedActivities accessory_attached_activities = 5; 360} 361 362message UsbProfileGroupSettingsManagerProto { 363 option (android.msg_privacy).dest = DEST_AUTOMATIC; 364 365 // The user id of the personal profile if the device has a work profile. 366 optional int32 parent_user_id = 1; 367 repeated UsbSettingsDevicePreferenceProto device_preferences = 2; 368 repeated UsbSettingsAccessoryPreferenceProto accessory_preferences = 3; 369 optional string intent = 4; 370} 371 372message UsbSettingsDevicePreferenceProto { 373 option (android.msg_privacy).dest = DEST_AUTOMATIC; 374 375 optional UsbDeviceFilterProto filter = 1; 376 optional UserPackageProto user_package = 2; 377} 378 379message UsbPermissionsManagerProto { 380 option (android.msg_privacy).dest = DEST_AUTOMATIC; 381 382 repeated UsbUserPermissionsManagerProto user_permissions = 1; 383} 384 385message UsbUserPermissionsManagerProto { 386 option (android.msg_privacy).dest = DEST_AUTOMATIC; 387 388 optional int32 user_id = 1; 389 390 repeated UsbDevicePermissionProto device_permissions = 2; 391 repeated UsbAccessoryPermissionProto accessory_permissions = 3; 392 393 repeated UsbDevicePersistentPermissionProto device_persistent_permissions = 4; 394 repeated UsbAccessoryPersistentPermissionProto accessory_persistent_permissions = 5; 395} 396 397message UsbDevicePermissionProto { 398 option (android.msg_privacy).dest = DEST_AUTOMATIC; 399 400 // Name of device set by manufacturer 401 // All devices of the same model have the same name 402 optional string device_name = 1; 403 repeated int32 uids = 2; 404} 405 406message UsbAccessoryPermissionProto { 407 option (android.msg_privacy).dest = DEST_AUTOMATIC; 408 409 // Description of accessory set by manufacturer 410 // All accessories of the same model have the same description 411 optional string accessory_description = 1; 412 repeated int32 uids = 2; 413} 414 415message UsbDevicePersistentPermissionProto { 416 option (android.msg_privacy).dest = DEST_AUTOMATIC; 417 418 optional UsbDeviceFilterProto device_filter = 1; 419 repeated UsbUidPermissionProto permission_values = 2; 420} 421 422message UsbAccessoryPersistentPermissionProto { 423 option (android.msg_privacy).dest = DEST_AUTOMATIC; 424 425 optional UsbAccessoryFilterProto accessory_filter = 1; 426 repeated UsbUidPermissionProto permission_values = 2; 427} 428 429message UsbUidPermissionProto { 430 option (android.msg_privacy).dest = DEST_AUTOMATIC; 431 432 optional int32 uid = 1; 433 optional bool is_granted = 2; 434} 435 436message UsbDeviceFilterProto { 437 option (android.msg_privacy).dest = DEST_AUTOMATIC; 438 439 // Mirrors the vendor_id of UsbDeviceProto. 440 optional int32 vendor_id = 1; 441 optional int32 product_id = 2; 442 optional int32 class = 3; 443 optional int32 subclass = 4; 444 optional int32 protocol = 5; 445 optional string manufacturer_name = 6; 446 optional string product_name = 7; 447 optional string serial_number = 8 [ (android.privacy).dest = DEST_EXPLICIT ]; 448} 449 450message UserPackageProto { 451 option (android.msg_privacy).dest = DEST_AUTOMATIC; 452 453 optional int32 user_id = 1; 454 optional string package_name =2; 455} 456 457message UsbSettingsAccessoryPreferenceProto { 458 option (android.msg_privacy).dest = DEST_AUTOMATIC; 459 460 optional UsbAccessoryFilterProto filter = 1; 461 optional UserPackageProto user_package = 2; 462} 463 464message UsbAccessoryFilterProto { 465 option (android.msg_privacy).dest = DEST_AUTOMATIC; 466 467 optional string manufacturer = 1; 468 optional string model = 2; 469 optional string version = 3; 470} 471 472message UsbDeviceAttachedActivities { 473 option (android.msg_privacy).dest = DEST_AUTOMATIC; 474 475 optional android.content.ComponentNameProto activity = 1; 476 repeated UsbDeviceFilterProto filters = 2; 477} 478 479message UsbAccessoryAttachedActivities { 480 option (android.msg_privacy).dest = DEST_AUTOMATIC; 481 482 optional android.content.ComponentNameProto activity = 1; 483 repeated UsbAccessoryFilterProto filters = 2; 484} 485