UsbManager.java revision 40bbf9295d5245d3917629ce15f7b37670aef1ac
140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood/* 240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Copyright (C) 2011 The Android Open Source Project 340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * you may not use this file except in compliance with the License. 640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * You may obtain a copy of the License at 740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 1040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Unless required by applicable law or agreed to in writing, software 1140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 1240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * See the License for the specific language governing permissions and 1440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * limitations under the License. 1540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */ 1640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 1740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 1840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodpackage com.google.android.usb; 1940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 2040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodimport android.content.Context; 2140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodimport android.content.Intent; 2240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodimport android.hardware.usb.IUsbManager; 2340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodimport android.os.IBinder; 2440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodimport android.os.ParcelFileDescriptor; 2540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodimport android.os.RemoteException; 2640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodimport android.os.ServiceManager; 2740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodimport android.util.Log; 2840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 2940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood/** 3040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * This class allows you to access the state of USB, both in host and device mode. 3140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 3240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * <p>You can obtain an instance of this class by calling {@link #getInstance} 3340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 3440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */ 3540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwoodpublic class UsbManager { 3640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood private static final String TAG = "UsbManager"; 3740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 3840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood /** 3940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Broadcast Action: A broadcast for USB accessory attached event. 4040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 4140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * This intent is sent when a USB accessory is attached. 4240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Call {@link #getAccessory(android.content.Intent)} to retrieve the 4340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * {@link com.google.android.usb.UsbAccessory} for the attached accessory. 4440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */ 4540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood public static final String ACTION_USB_ACCESSORY_ATTACHED = 4640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood "android.hardware.usb.action.USB_ACCESSORY_ATTACHED"; 4740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 4840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood /** 4940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Broadcast Action: A broadcast for USB accessory detached event. 5040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 5140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * This intent is sent when a USB accessory is detached. 5240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Call {@link #getAccessory(android.content.Intent)} to retrieve the 5340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * {@link com.google.android.usb.UsbAccessory} for the attached accessory that was detached. 5440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */ 5540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood public static final String ACTION_USB_ACCESSORY_DETACHED = 5640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood "android.hardware.usb.action.USB_ACCESSORY_DETACHED"; 5740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 5840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood private final IUsbManager mService; 5940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 6040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood private UsbManager(IUsbManager service) { 6140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood mService = service; 6240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 6340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 6440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood /** 6540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Returns a new instance of this class. 6640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 6740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * @return UsbManager instance. 6840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */ 6940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood public static UsbManager getInstance() { 7040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood IBinder b = ServiceManager.getService(Context.USB_SERVICE); 7140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood return new UsbManager(IUsbManager.Stub.asInterface(b)); 7240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 7340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 7440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood /** 7540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Returns the {@link com.google.android.usb.UsbAccessory} for 7640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * a {@link #ACTION_USB_ACCESSORY_ATTACHED} or {@link #ACTION_USB_ACCESSORY_ATTACHED} 7740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * broadcast Intent 7840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 7940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * @return UsbAccessory for the broadcast. 8040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */ 8140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood public static UsbAccessory getAccessory(Intent intent) { 8240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood android.hardware.usb.UsbAccessory accessory = 8340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood intent.getParcelableExtra(android.hardware.usb.UsbManager.EXTRA_ACCESSORY); 8440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood if (accessory == null) { 8540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood return null; 8640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } else { 8740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood return new UsbAccessory(accessory); 8840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 8940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 9040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 9140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood /** 9240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Returns a list of currently attached USB accessories. 9340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * (in the current implementation there can be at most one) 9440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 9540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * @return list of USB accessories, or null if none are attached. 9640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */ 9740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood public UsbAccessory[] getAccessoryList() { 9840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood try { 9940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood android.hardware.usb.UsbAccessory accessory = mService.getCurrentAccessory(); 10040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood if (accessory == null) { 10140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood return null; 10240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } else { 10340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood return new UsbAccessory[] { new UsbAccessory(accessory) }; 10440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 10540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } catch (RemoteException e) { 10640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood Log.e(TAG, "RemoteException in getAccessoryList" , e); 10740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood return null; 10840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 10940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 11040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood 11140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood /** 11240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Opens a file descriptor for reading and writing data to the USB accessory. 11340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * 11440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * @param accessory the USB accessory to open 11540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * @return file descriptor, or null if the accessor could not be opened. 11640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */ 11740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood public ParcelFileDescriptor openAccessory(UsbAccessory accessory) { 11840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood try { 11940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood return mService.openAccessory(new android.hardware.usb.UsbAccessory( 12040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood accessory.getManufacturer(),accessory.getModel(), 12140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood accessory.getType(), accessory.getVersion())); 12240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } catch (RemoteException e) { 12340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood Log.e(TAG, "RemoteException in openAccessory" , e); 12440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood return null; 12540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 12640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood } 12740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood} 128