/* * Proyecto CCIDroid. Driver para utilizacion de tarjetas CCID en el sistema operativo * Android. * * El proyecto CCIDroid es un conector para la comunicacion entre sistemas Android y * lectores de SmartCard USB segun el estandar CCID. Diseno inicial desarrollado para * su integracion con el Controlador Java de la Secretaria de Estado de Administraciones * Publicas para el DNI electronico. * * Copyright (C) 2012 Instituto Nacional de las Tecnologias de la Comunicacion (INTECO) * * Este programa es software libre y utiliza un licenciamiento dual (LGPL 2.1+ * o EUPL 1.1+), lo cual significa que los usuarios podran elegir bajo cual de las * licencias desean utilizar el codigo fuente. Su eleccion debera reflejarse * en las aplicaciones que integren o distribuyan el Controlador, ya que determinara * su compatibilidad con otros componentes. * * El Controlador puede ser redistribuido y/o modificado bajo los terminos de la * Lesser GNU General Public License publicada por la Free Software Foundation, * tanto en la version 2.1 de la Licencia, o en una version posterior. * * El Controlador puede ser redistribuido y/o modificado bajo los terminos de la * European Union Public License publicada por la Comision Europea, * tanto en la version 1.1 de la Licencia, o en una version posterior. * * Deberia recibir una copia de la GNU Lesser General Public License, si aplica, junto * con este programa. Si no, consultelo en <http://www.gnu.org/licenses/>. * * Deberia recibir una copia de la European Union Public License, si aplica, junto * con este programa. Si no, consultelo en <http://joinup.ec.europa.eu/software/page/eupl>. * * Este programa es distribuido con la esperanza de que sea util, pero * SIN NINGUNA GARANTIA; incluso sin la garantia implicita de comercializacion * o idoneidad para un proposito particular. */ package es.inteco.labs.android.usb.device; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbInterface; import android.hardware.usb.UsbManager; import es.inteco.labs.android.usb.device.exception.UsbDeviceException; /** Dispositivo USB conectado. * @author Jose Luis Escanciano Garcia */ class AnyUSBDevice { private final UsbManager usbManager; private final UsbDevice usbDevice; private UsbDeviceConnection usbDeviceConnection; private UsbInterface usbInterface; /** Constructor. * @param usbDev Dispositivo USB * @param UsbManager Gestor de dispositivos USB de Android * @throws UsbDeviceException */ protected AnyUSBDevice(final UsbManager usbMan, final UsbDevice usbDev) throws UsbDeviceException { super(); this.usbManager = usbMan; this.usbDevice = usbDev; this.openDevice(); if(this.usbDeviceConnection == null){ throw new UsbDeviceException("usbDeviceConnection no puede ser NULL"); //$NON-NLS-1$ } if(this.usbDevice.getInterfaceCount() > 0){ this.usbInterface = this.usbDevice.getInterface(0); } } /** Indica si la conexión con el dispositivo está abierta * @return <code>true</code> si el dispositivo está abierto, <code>false</code> en caso contrario */ protected boolean isOpenedDevice(){ if(this.usbDeviceConnection == null){ return false; } return true; } /** Abre la conexión con el dispositivo USB. */ protected void openDevice() { if(this.usbDeviceConnection == null){ this.usbDeviceConnection = this.usbManager.openDevice(this.usbDevice); } } /** Cierra la conexión con el dispositivo USB. */ protected void closeDevice() { if(this.usbDeviceConnection != null){ this.usbDeviceConnection.close(); this.usbDeviceConnection = null; } } protected UsbDevice getUsbDevice(){ return this.usbDevice; } protected UsbDeviceConnection getUsbDeviceConnection(){ return this.usbDeviceConnection; } protected UsbInterface getUsbInterface(){ return this.usbInterface; } /** Retorna el nombre del dispositivo. * @return Nombre del dispositivo */ public String getDeviceName(){ return this.usbDevice.getDeviceName(); } }