1e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood/*
2e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Copyright (C) 2010 The Android Open Source Project
3e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood *
4e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * you may not use this file except in compliance with the License.
6e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * You may obtain a copy of the License at
7e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood *
8e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood *
10e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Unless required by applicable law or agreed to in writing, software
11e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * See the License for the specific language governing permissions and
14e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * limitations under the License.
15e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */
16e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
17c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodpackage android.hardware.usb;
18e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
193a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwoodimport android.app.PendingIntent;
20c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodimport android.hardware.usb.UsbAccessory;
21c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodimport android.hardware.usb.UsbDevice;
22e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodimport android.os.Bundle;
23e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodimport android.os.ParcelFileDescriptor;
24e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
25e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood/** @hide */
26e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodinterface IUsbManager
27e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood{
28e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /* Returns a list of all currently attached USB devices */
29e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    void getDeviceList(out Bundle devices);
3002eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
3102eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    /* Returns a file descriptor for communicating with the USB device.
3202eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood     * The native fd can be passed to usb_device_new() in libusbhost.
3302eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood     */
34e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    ParcelFileDescriptor openDevice(String deviceName);
3502eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
3602eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    /* Returns the currently attached USB accessory */
379182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    UsbAccessory getCurrentAccessory();
3802eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
3902eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    /* Returns a file descriptor for communicating with the USB accessory.
4002eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood     * This file descriptor can be used with standard Java file operations.
4102eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood     */
4202eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    ParcelFileDescriptor openAccessory(in UsbAccessory accessory);
4302eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
4402eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    /* Sets the default package for a USB device
4502eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood     * (or clears it if the package name is null)
4602eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood     */
47fc3f24b4b60c10e0d3f41f70df37e11ea311cc2cJeff Sharkey    void setDevicePackage(in UsbDevice device, String packageName, int userId);
4802eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
4962cfeeb821afb2f3d3b78ad93caa13408cd26eacMike Lockwood    /* Sets the default package for a USB accessory
5002eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood     * (or clears it if the package name is null)
5102eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood     */
52fc3f24b4b60c10e0d3f41f70df37e11ea311cc2cJeff Sharkey    void setAccessoryPackage(in UsbAccessory accessory, String packageName, int userId);
5302eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
543a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood    /* Returns true if the caller has permission to access the device. */
553a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood    boolean hasDevicePermission(in UsbDevice device);
563a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood
573a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood    /* Returns true if the caller has permission to access the accessory. */
583a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood    boolean hasAccessoryPermission(in UsbAccessory accessory);
593a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood
603a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood    /* Requests permission for the given package to access the device.
613a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood     * Will display a system dialog to query the user if permission
623a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood     * had not already been given.
633a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood     */
643a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood    void requestDevicePermission(in UsbDevice device, String packageName, in PendingIntent pi);
653a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood
663a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood    /* Requests permission for the given package to access the accessory.
673a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood     * Will display a system dialog to query the user if permission
683a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood     * had not already been given. Result is returned via pi.
693a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood     */
703a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood    void requestAccessoryPermission(in UsbAccessory accessory, String packageName,
713a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood            in PendingIntent pi);
723a68b8338b431eb15d28e92f06452efbbda9493eMike Lockwood
7302eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    /* Grants permission for the given UID to access the device */
7402eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    void grantDevicePermission(in UsbDevice device, int uid);
7502eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
7602eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    /* Grants permission for the given UID to access the accessory */
7702eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    void grantAccessoryPermission(in UsbAccessory accessory, int uid);
7802eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
7902eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    /* Returns true if the USB manager has default preferences or permissions for the package */
80fc3f24b4b60c10e0d3f41f70df37e11ea311cc2cJeff Sharkey    boolean hasDefaults(String packageName, int userId);
8102eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
8202eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    /* Clears default preferences and permissions for the package */
83fc3f24b4b60c10e0d3f41f70df37e11ea311cc2cJeff Sharkey    void clearDefaults(String packageName, int userId);
8402e4569b5f126ca916a7473117ddd17d4f2ccbbbMike Lockwood
85f59717ddb5ef324ee3fdb12b83e7d1b709793d28Mike Lockwood    /* Sets the current USB function. */
86f59717ddb5ef324ee3fdb12b83e7d1b709793d28Mike Lockwood    void setCurrentFunction(String function, boolean makeDefault);
8702e4569b5f126ca916a7473117ddd17d4f2ccbbbMike Lockwood
8802e4569b5f126ca916a7473117ddd17d4f2ccbbbMike Lockwood    /* Sets the file path for USB mass storage backing file. */
8902e4569b5f126ca916a7473117ddd17d4f2ccbbbMike Lockwood    void setMassStorageBackingFile(String path);
904e68bd420b6cfdbeadb5e69aa6448665b2da762bBenoit Goby
914e68bd420b6cfdbeadb5e69aa6448665b2da762bBenoit Goby    /* Allow USB debugging from the attached host. If alwaysAllow is true, add the
924e68bd420b6cfdbeadb5e69aa6448665b2da762bBenoit Goby     * the public key to list of host keys that the user has approved.
934e68bd420b6cfdbeadb5e69aa6448665b2da762bBenoit Goby     */
944e68bd420b6cfdbeadb5e69aa6448665b2da762bBenoit Goby    void allowUsbDebugging(boolean alwaysAllow, String publicKey);
954e68bd420b6cfdbeadb5e69aa6448665b2da762bBenoit Goby
964e68bd420b6cfdbeadb5e69aa6448665b2da762bBenoit Goby    /* Deny USB debugging from the attached host */
974e68bd420b6cfdbeadb5e69aa6448665b2da762bBenoit Goby    void denyUsbDebugging();
98e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood}
99