Acceso a Los Dispositivos USB de Aplicaciones Java

24
Acceso a los dispositivos USB de aplicaciones Java Una introducción a USB, JUSB, y JSR 80 Qingye Jiang ( [email protected] ), Investigador Científico, HappyFox Soluciones de Ingeniería Qingye Jiang es un científico de investigación en HappyFox Soluciones de Ingeniería. Recibió su B. Eng. de la Universidad de Tsinghua en 1999 y su maestría en la Universidad de Illinois en Urbana-Champaign en 2000. Sus intereses de investigación incluyen J2ME, la computación distribuida, computación móvil, sistemas integrados, y la comunicación inalámbrica. Póngase en contacto con Qingye en [email protected] . Resumen: La plataforma Java tiene tradicionalmente se enorgullece de su independencia de la plataforma. Mientras que la independencia tiene muchos beneficios, hace que el proceso de escribir aplicaciones Java que interactúan con el hardware bastante complicado. En este artículo, la investigación científica Qingye Jiang analiza dos proyectos que están haciendo el proceso más fácil, proporcionando API a través del cual las aplicaciones Java pueden hacer uso de dispositivos USB. Si bien ambos proyectos aún están en embrión, son prometedores y ya que actúa como los cimientos de algunas aplicaciones del mundo real. La primera versión de la Universal Serial Bus (USB) especificación fue lanzado en enero de 1996. Debido a su bajo costo, alta tasa de transferencia de datos, facilidad de uso, y flexibilidad, USB se ha ganado una amplia aceptación en la industria informática. Hoy en día, muchos periféricos y dispositivos se conectan a los ordenadores a través de interfaces USB. En la actualidad, la mayoría de los sistemas operativos de propósito general ofrecer soporte para dispositivos USB, y es relativamente fácil de desarrollar aplicaciones en C o C + + que los periféricos dicho acceso. Sin embargo, el lenguaje de programación Java diseño proporciona muy poco apoyo para el acceso al hardware, por lo que la escritura de aplicaciones Java que

Transcript of Acceso a Los Dispositivos USB de Aplicaciones Java

Page 1: Acceso a Los Dispositivos USB de Aplicaciones Java

Acceso a los dispositivos USB de aplicaciones Java Una introducción a USB, JUSB, y JSR 80

Qingye Jiang ( [email protected] ), Investigador Científico, HappyFox Soluciones de Ingeniería Qingye Jiang es un científico de investigación en HappyFox Soluciones de Ingeniería. Recibió su B. Eng. de la Universidad de Tsinghua en 1999 y su maestría en la Universidad de Illinois en Urbana-Champaign en 2000. Sus intereses de investigación incluyen J2ME, la computación distribuida, computación móvil, sistemas integrados, y la comunicación inalámbrica. Póngase en contacto con Qingye en [email protected] .

Resumen: La plataforma Java tiene tradicionalmente se enorgullece de su independencia de la plataforma. Mientras que la independencia tiene muchos beneficios, hace que el proceso de escribir aplicaciones Java que interactúan con el hardware bastante complicado. En este artículo, la investigación científica Qingye Jiang analiza dos proyectos que están haciendo el proceso más fácil, proporcionando API a través del cual las aplicaciones Java pueden hacer uso de dispositivos USB. Si bien ambos proyectos aún están en embrión, son prometedores y ya que actúa como los cimientos de algunas aplicaciones del mundo real.

La primera versión de la Universal Serial Bus (USB) especificación fue lanzado en enero de 1996. Debido a su bajo costo, alta tasa de transferencia de datos, facilidad de uso, y flexibilidad, USB se ha ganado una amplia aceptación en la industria informática. Hoy en día, muchos periféricos y dispositivos se conectan a los ordenadores a través de interfaces USB. En la actualidad, la mayoría de los sistemas operativos de propósito general ofrecer soporte para dispositivos USB, y es relativamente fácil de desarrollar aplicaciones en C o C + + que los periféricos dicho acceso. Sin embargo, el lenguaje de programación Java diseño proporciona muy poco apoyo para el acceso al hardware, por lo que la escritura de aplicaciones Java que interactúan con los dispositivos USB ha resultado bastante difícil.

Los esfuerzos para facilitar el acceso a los dispositivos USB en el lenguaje Java se iniciaron en 1999 por Dan Streetman en IBM. En 2001, su proyecto fue aceptado como candidato extendido estándar del lenguaje Java a través de la Solicitud de Java Specification (JSR) proceso. El proyecto que ahora se llama JSR-80 y ha sido oficialmente designado para el paquete de Java javax.usb . Mientras tanto, en junio de 2000, Mojo Jojo y Brownell David inició el proyecto JUSB en SourceForge. Ambos proyectos han producido desde los paquetes de útiles para los desarrolladores de Linux, aunque no es casi perfecto. Ambos proyectos también han comenzado los intentos de facilitar el acceso a los dispositivos USB para aplicaciones Java en otros sistemas operativos, aunque los paquetes de útiles no han salido a la luz de cualquiera. (Vea Recursos para las referencias a estos y otros proyectos mencionados en este artículo.)

En este artículo, obtendrá una breve introducción a la JUSB y JSR-80 proyectos: en primer lugar, sin embargo, vamos a echar un vistazo a las tuercas y los pernos del protocolo USB, de modo que usted pueda comprender como estos dos proyectos

Page 2: Acceso a Los Dispositivos USB de Aplicaciones Java

interactuar con los dispositivos USB. También le ofrecemos fragmentos de código para mostrar cómo se haría uso de las API de los dos proyectos para acceder a dispositivos USB.

Una introducción a USB

En 1994, una alianza de cuatro socios industriales (Compaq, Intel, Microsoft y NEC) empezó a especificar el protocolo USB. El objetivo original del protocolo para conectar el PC al teléfono y me ofrecen interfaces de entrada-salida que eran fáciles de ampliar y reconfigurar. En enero de 1996, la primera versión de la especificación USB fue puesto en libertad, y una revisión posterior (versión 1.1) fue lanzado en septiembre de 1998. La especificación permite 127 dispositivos que se conectan entre sí al mismo tiempo, con el ancho de banda de comunicación total limitado a 12 Mbps. Más tarde, otros tres miembros (Hewlett-Packard, Lucent, y Philips) se unió a la alianza. En abril de 2000, la versión 2.0 de la especificación USB, que admite velocidades de transferencia hasta 480 Mbps, fue puesto en libertad. Hoy en día, USB desempeña un papel clave en la alta velocidad (de vídeo, almacenamiento de imágenes), y de alta velocidad (audio, la banda ancha, entrada de micrófono) las solicitudes de transferencia de datos. También se puede conectar una variedad de dispositivos de baja velocidad (teclados, ratones, periféricos de juego, los periféricos de realidad virtual) a la PC.

El protocolo USB es estrictamente jerárquica. En cualquier sistema USB sólo hay un único host, y la interfaz USB a la computadora host se conoce como el controlador de host. Hay dos normas para los controladores de host - el Open Host Controller Interface (OHCI, por Compaq) y la Declaración Universal Host Controller Interface (UHCI, por parte de Intel). Ambos estándares ofrecen las mismas capacidades y trabajar con todos los dispositivos USB, la aplicación de hardware de un UHCI es más simple, pero requiere un controlador de dispositivo más complejo (y por tanto pone más carga en la CPU).

La interconexión física USB es una topología en estrella con gradas, con hasta siete niveles. Un hub es el centro de cada estrella, y el anfitrión USB está considerado como el concentrador raíz. Cada segmento de cable es una conexión punto a punto entre un centro y el dispositivo USB, éste puede ser otro hub que proporciona puntos adicionales apego al sistema, o un dispositivo de algún tipo que proporciona las capacidades funcionales. El host utiliza un protocolo maestro / subordinado a comunicarse con los dispositivos USB. Este enfoque resuelve el problema de la colisión de paquetes, pero también evita que los dispositivos conectados de establecer una comunicación directa entre sí.

Todas las transferencias de datos son iniciadas por el controlador de host. Datos dirigido desde el host a un dispositivo que se llama intermedio o de transferencia de datos desde un dispositivo dirigido al host que se llama aguas arriba o en la transferencia. La transferencia de datos se produce entre el host y un efecto determinado en el dispositivo USB, y el enlace de datos entre el host y el punto final se llama un tubo. Un determinado dispositivo USB puede tener muchas variables, y el número de tubos de datos entre el host y el dispositivo es el mismo que el número de puntos finales en el dispositivo. Un tubo puede ser unidireccional o bidireccional, y el flujo de datos en una tubería es independiente del flujo de datos en cualquier otras tuberías.

Page 3: Acceso a Los Dispositivos USB de Aplicaciones Java

Comunicación en la red USB se puede utilizar cualquiera de los cuatro tipos diferentes de transferencia de datos:

transferencias de control: Se trata de paquetes de datos a corto para el control y configuración de dispositivos, en particular a fijar el tiempo.

Transferencias a granel: Se trata de paquetes de datos en grandes cantidades relativamente. Los dispositivos como escáneres o adaptadores SCSI utilizan este tipo de transferencia.

transferencias de interrupción: Estos son los paquetes de datos que son consultados periódicamente. El controlador de host de forma automática después de una interrupción en un intervalo especificado.

transferencias isocrónica: Estas son las secuencias de datos en tiempo real con mayores requisitos de ancho de banda que por su fiabilidad. Los dispositivos de audio y vídeo en general, utilizar este tipo de transferencia.

Al igual que un puerto serie, cada puerto USB de la computadora se le asigna un número único de identificación (ID de puerto) por el controlador USB. Cuando un dispositivo USB está conectado a un puerto USB, este identificador de puerto único es asignado al dispositivo y el descriptor de dispositivo es leído por el controlador USB El descriptor de dispositivo incluye información que se aplica a nivel mundial para el dispositivo, así como información sobre la configuración de el dispositivo. Una configuración define la funcionalidad y comportamiento de I / O de un dispositivo USB. Un dispositivo USB puede tener uno o más configuraciones, que son descritos por sus descriptores de configuración correspondiente. Cada configuración tiene una o más interfaces, que puede ser considerado como un canal de comunicación física, cada interfaz tiene cero o más extremos, que pueden ser los proveedores de datos o los consumidores de datos, o ambos. Las interfaces son descritas por los descriptores de interfaz, y los puntos finales son descritos por los descriptores de punto final. Además, un dispositivo USB que se han descriptores de cadena para proporcionar información adicional como nombre del fabricante, nombre del dispositivo, o números de serie.

Como puede ver, un protocolo como el USB ofrece retos para los desarrolladores que utilizan el lenguaje Java, que se esfuerza por la plataforma y el hardware de la independencia. Echemos un vistazo a dos proyectos que han tratado de llenar el vacío.

Volver al principio

La API JUSB

El proyecto JUSB fue creado por Mojo Jojo y David Brownell en junio de 2000. Su objetivo era proporcionar un conjunto de software libre de Java API para acceder a los dispositivos USB en las plataformas Linux. La API se distribuye bajo la GPL (LGPL), lo que significa que puede utilizarse en las especialidades, así como proyectos de software libre. El API proporciona acceso a múltiples multiproceso física dispositivos USB, y soporta tanto dispositivos nativos y remotos. Los dispositivos con múltiples interfaces se puede acceder por varias aplicaciones (o controladores de dispositivos) al mismo tiempo, con cada aplicación (o controlador de dispositivo), alegando una interfaz diferente. El API es compatible con el control de las transferencias, las transferencias a

Page 4: Acceso a Los Dispositivos USB de Aplicaciones Java

granel, y las transferencias de interrupción, las transferencias isócronas no son compatibles debido a que estos se utilizan para los datos de los medios de comunicación (tales como audio y video) que ya están bien soportados por la API de JMF (ver Recursos ) frente a otros controladores de dispositivos estándar . Actualmente, la API funciona en GNU / Linux, ya sea con el núcleo Linux 2.4 o un puerto nuevo en el kernel 2.2.18. Por lo tanto, las distribuciones más recientes son compatibles, por ejemplo, la API trabaja en Red Hat 7.2 y 9.0 sin los parches o actualizaciones de otros.

La API JUSB incluye los siguientes paquetes:

usb.core : Este paquete es la parte central de la API JUSB. Se permite que las aplicaciones Java para acceder a los dispositivos USB de host USB.

usb.linux : Este paquete contiene una implementación de Linux de un usb.core.Host objeto, programa previo de apoyo, y otras clases de aprovechamiento de Linux soporte para USB. Esta aplicación tiene acceso a los dispositivos USB a través del dispositivo USB del sistema de archivos virtual ( usbdevfs ).

usb.windows : Este paquete tiene una aplicación de Windows de una usb.core.Host objeto, programa previo de apoyo, y otras clases de aprovechamiento de Windows compatible con USB. Esta aplicación está todavía en sus primeras etapas.

usb.remote : Este paquete es una versión remota de la usb.core API. Se incluye un proxy de RMI y una aplicación de demonio, que permiten a las aplicaciones Java para acceder a los dispositivos USB en un equipo remoto.

usb.util : Este paquete contiene algunas utilidades para descargar firmware para dispositivos USB, volcar el contenido del sistema de USB en XML, y convertir un dispositivo USB con la mayor parte sólo de E / S en una toma.

usb.devices : Este paquete opcional recoge el código de Java para acceder a una variedad de dispositivos USB con la API de JUSB, incluyendo cámaras digitales Kodak y Rio 500 reproductores de MP3. Estas API fueron escritos especialmente para simplificar el proceso de acceso a la designada dispositivos USB y no puede ser utilizado para acceder a otros dispositivos. El API se basa en la usb.core API, y funciona en cualquier sistema operativo donde JUSB es compatible.

usb.view : Este paquete opcional proporciona un sencillo árbol de explorador USB basados en Swing. Es un programa muy buen ejemplo que ilustra el uso de la API JUSB.

Aunque la aplicación de la usb.core.Host objeto varía de sistema operativo para el sistema operativo, un programador de Java debe entender sólo la usb.core paquete para iniciar el desarrollo de aplicaciones con las API JUSB. La Tabla 1 muestra las interfaces y las clases de usb.core con la que un programador de Java debe estar familiarizado:

Page 5: Acceso a Los Dispositivos USB de Aplicaciones Java

Tabla 1. Interfaces y clases en JUSB

Interfaz Descripción

Bus Se conecta un conjunto de dispositivos USB a un Host

Host Representa un controlador USB con una o más Bus es

Clase Descripción

Configuration Proporciona acceso a una configuración de USB compatible con un dispositivo y las interfaces asociadas a esa configuración

Descriptor Clase base para las entidades con los descriptores USB tipo

Device Proporciona acceso a un dispositivo USB

DeviceDescriptor Proporciona acceso a un descriptor de dispositivo USB

EndPoint Proporciona acceso a un descriptor de USB de punto final, la estructuración de dispositivo de entrada o salida de datos en una configuración de dispositivo dado

HostFactory Contiene métodos bootstrap

Hub Proporciona acceso a un descriptor de un hub USB y un centro de operaciones

Interface Describe los conjuntos de puntos finales, y se asocia con una configuración de dispositivo en particular

PortIdentifier Proporciona los identificadores de cadena estable para los dispositivos USB, apropiado para uso en operaciones y resolución de problemas

El procedimiento normal para acceder a un dispositivo USB con la API de JUSB es la siguiente:

1. Manos a la Obra por conseguir el USB Host de la HostFactory .

2. Acceda a la USB Bus de la Host , el acceso al concentrador raíz USB (que es un puerto USB Device ) desde el Bus .

3. Obtener el número de puertos USB disponibles en el centro, y recorrer a través de todos los puertos para encontrar el adecuado Device .

4. Acceda a la USB Device que se conecta a un puerto en particular. Un Device se puede acceder directamente desde el Host con su PortIdentifier , o se encuentra atravesando el USB Bus desde el centro de la raíz.

5. Interactuar con el Device directamente con ControlMessage , o solicitar un Interface de la actual Configuration de los Device y realizar I / O con el Endpoint disponible en la Interface .

Listado 1 muestra cómo obtener el contenido de un sistema de USB con la API de JUSB. El programa tal como está escrito, simplemente se ve en el concentrador raíz de

Page 6: Acceso a Los Dispositivos USB de Aplicaciones Java

dispositivos USB disponibles, pero sería fácil mejorarlo para recorrer todo el árbol de USB. La lógica aquí corresponde a los pasos 1 a 4 anteriores.

Listado 1. Obtener el contenido de un sistema USB con la API de JUSB importación usb.core .*; public class ListUSB { public static void Main (string [] args) { pruebas { / / Manos a la Obra por conseguir el host USB de la HostFactory. Host host = HostFactory.getHost (); / / Obtener una lista de los buses USB disponible en el host. Bus [] = autobús host.getBusses (); total_bus int = bus.length; / / Recorrer a través de todos los buses USB. for (int i = 0; i <total_bus; i + +) { / / Acceder al centro de la raíz en el bus USB y obtener la / / Número de puertos USB disponibles en el concentrador raíz. la raíz del dispositivo = autobús [i] getRootHub ().; total_port int = root.getNumPorts (); / / Recorrer a través de todos los puertos USB disponibles en / / Root hub. Cabe mencionar que la numeración / / Comienza a partir del 1, no 0. for (int j = 1; j <= total_port; j + +) { / / Obtener el dispositivo conectado al puerto. dispositivo Device = root.getChild (j); si (el dispositivo! = null) { / / Dispositivo USB disponible, hacer algo aquí. } } } } Catch (Exception e) { System.out.println (e.getMessage ()); } }

Listado 2 muestra cómo se realiza a granel I / O con Interface y EndPoint , suponiendo que la aplicación ha logrado situado el Device . Este fragmento de código también puede ser modificado para realizar el control o la interrupción de I / O. Se corresponde con el paso 5.

Page 7: Acceso a Los Dispositivos USB de Aplicaciones Java

Listado 2. Realizar a granel de E / S con la API de JUSB si (el dispositivo! = null) { / / Obtener la configuración actual del dispositivo y el número de / / Interfaces disponibles en la configuración actual. De configuración config = device.getConfiguration (); total_interface int = config.getNumInterfaces (); / / Recorrer a través de las Interfaces for (int k = 0; total_interface <k, k + +) { / / Accede a la interfaz de la actualidad y obtener el número de / / Parámetros disponibles en la interfaz. ITF = Interfaz config.getInterface (k, 0); int total_ep = itf.getNumEndpoints (); / / Recorrer a través de todos los extremos. for (int l = 0; total_ep l <; l + +) { / / Acceder al punto final, y obtener su tipo I / O. ep = punto final itf.getEndpoint (l); String io_type = ep.getType (); entrada booleana = ep.isInput (); / / Si la variable es una variable de entrada, obtener su / / InputStream y leer en los datos. if (entrada) { InputStream en; en ep.getInputStream = (); / / Leer en los datos aquí in.close (); } / / Si el punto final es y punto final de salida, obtener su / / OutputStream y escribir datos. más { OutputStream a cabo; fuera = ep.getOutputStream (); / / Escribir los datos aquí. out.close (); } } } }

El proyecto JUSB fue muy activa entre junio de 2000 febrero de 2001. La versión más reciente de la versión de la API, 0.4.4, se puso a disposición el 14 de febrero de 2001. Sólo algunos avances menores se ha reportado desde ese tiempo, probablemente debido al éxito del grupo IBM en convertirse en un candidato extendido estándar del lenguaje Java. Sin embargo, varias aplicaciones de terceros se han desarrollado sobre la base de JUSB, incluido el proyecto JPhoto (una aplicación que utiliza JUSB para conectarse a

Page 8: Acceso a Los Dispositivos USB de Aplicaciones Java

cámaras digitales) y el proyecto jSyncManager (una aplicación que utiliza JUSB para sincronizar con una Palm OS basado en PDA).

Volver al principio

La JSR-80 API (javax.usb)

Como se señaló anteriormente, el JSR-80 proyecto fue creado por Dan Streetman en IBM en 1999. En 2001, el proyecto fue aceptado como candidato extendido estándar del lenguaje Java a través de la Solicitud de Java Specification (JSR) proceso. El proyecto que ahora se llama JSR-80 y ha sido oficialmente designado para el paquete de Java javax.usb . El proyecto está bajo la licencia Common Public License y se desarrolla utilizando la Java Community Process. El objetivo de este proyecto es desarrollar una interfaz USB para la plataforma Java que permitirá el acceso pleno al sistema USB para cualquier aplicación Java o un componente de middleware. El API JSR-80 es totalmente compatible con los cuatro tipos de cesión definida por la especificación USB. En la actualidad, la implementación de Linux de la API funciona en la mayoría recientes distribuciones de GNU / Linux con soporte del kernel 2.4, como Red Hat 7.2 y 9.0.

La JSR-80 del proyecto incluye tres paquetes: javax-usb (el javax.usb API), javax-usb-ri (la parte común de la aplicación independiente de referencia-OS), y javax-usb-ri-linux (la implementación de referencia para la plataforma Linux, que conecta la implementación de referencia común a la pila USB de Linux). Las tres partes son necesarias para formar un completo funcionamiento java.usb API en la plataforma Linux. Independiente de los esfuerzos destinados a portar la API para otros sistemas operativos (Microsoft Windows principalmente) han sido reportados en el proyecto de lista de correo electrónico, pero no hay paquetes de funcionamiento se han liberado todavía.

Aunque el sistema operativo dependiente de la implementación de la API JSR-80 varía de sistema operativo para el sistema operativo, un programador de Java debe entender sólo la javax.usb paquete para iniciar el desarrollo de aplicaciones. La Tabla 2 muestra las interfaces y las clases en javax.usb con la que un programador de Java debe estar familiarizado:

Tabla 2. Interfaces y las clases en la API JSR-80

Interfaz Descripción

UsbConfiguration Representa una configuración de un dispositivo USB

UsbConfigurationDescriptor Interfaz para un descriptor de configuración USB

UsbDevice Interfaz de un dispositivo USB

UsbDeviceDescriptor Interfaz para un descriptor de dispositivo USB

UsbEndpoint Interfaz para un extremo USB

UsbEndpointDescriptor Interfaz para un descriptor de punto final USB

Page 9: Acceso a Los Dispositivos USB de Aplicaciones Java

UsbHub Interfaz de un hub USB

UsbInterface Interfaz para una interfaz USB

UsbInterfaceDescriptor Interfaz para un descriptor de interfaz USB

UsbPipe Interfaz USB para una tubería

UsbPort Interfaz de un puerto USB

UsbServices Interfaz de javax.usb aplicación

Clase Descripción

UsbHostManager Puerta de entrada a javax.usb

El procedimiento normal para acceder a un dispositivo USB con el API JSR-80 es el siguiente:

1. Manos a la Obra por conseguir la adecuada UsbServices de la UsbHostManager .

2. Acceda al concentrador de raíz a través de la UsbServices . El concentrador de raíz se considera como un UsbHub en la solicitud.

3. Obtenga una lista de los UsbDevice s que están conectados al hub principal. Recorrer a través de todos los centros de nivel inferior para encontrar el adecuado UsbDevice .

4. Interactuar con el UsbDevice directamente con un mensaje de control ( UsbControlIrp ), o reclamar un UsbInterface de la adecuada UsbConfiguration del UsbDevice y realizar I / O con la UsbEndpoint disponibles en UsbInterface .

5. Si un UsbEndpoint se utiliza para realizar I / O, abra el UsbPipe asociados a ella. Tanto los datos aguas arriba (desde el dispositivo USB al ordenador principal) y de datos de bajada (desde el ordenador al dispositivo USB) puede presentarse de forma sincrónica o asincrónica a través de la UsbPipe .

6. Cierre la UsbPipe y suelte el caso UsbInterface cuando la aplicación ya no necesita tener acceso a la UsbDevice .

En el listado 3, se obtiene el contenido del sistema de USB con el JSR-80 API. El programa recorre recursivamente por todos los concentradores USB en el sistema USB y localiza todos los dispositivos USB conectados al ordenador principal. El código se corresponde con los pasos 1 a 3 anteriores.

Listado 3. Obtener el contenido del sistema de USB con la API JSR-80 importación javax.usb .*; importación java.util.List; public class TraverseUSB { public static void main (String argv [])

Page 10: Acceso a Los Dispositivos USB de Aplicaciones Java

{ pruebas { / / Acceso a los servicios del sistema USB, y el acceso a la raíz / / Cubo. A continuación, recorrer a través del cubo de la raíz. UsbServices servicios UsbHostManager.getUsbServices = (); rootHub USBHUB = services.getRootUsbHub (); transversal (rootHub); } Catch (Exception e) {} } atraviesan public static void (dispositivo UsbDevice) { if (device.isUsbHub ()) { / / Se trata de un hub USB, transversal a través del cubo. attachedDevices Lista = . ((USBHUB) del dispositivo) getAttachedUsbDevices (); for (int i = 0; i <attachedDevices.size (); i + +) { transversal ((UsbDevice) attachedDevices.get (i)); } } más { / / Esta es una función USB, no un cubo. / / Hacer algo. } } }

Listado 4 muestra cómo se llevo a cabo E / S con Interface y EndPoint , suponiendo que la aplicación ha logrado situado a Device . Este fragmento de código también puede ser modificado para realizar la E / S de los cuatro tipos de transferencia de datos. Corresponde a los pasos 4 a 6 anteriores.

Listado 4. Realización de I / O con la API JSR-80 testIO public static void (dispositivo UsbDevice) { pruebas { / / El acceso a la configuración activa del dispositivo USB, obtener / / Todas las interfaces disponibles en esa configuración. UsbConfiguration config = device.getActiveUsbConfiguration (); totalInterfaces Lista = config.getUsbInterfaces (); / / Recorrer a través de todas las interfaces, y el acceso a los puntos finales / / A disposición de la interfaz de E / S. for (int i = 0; i <totalInterfaces.size (); i + +) {

Page 11: Acceso a Los Dispositivos USB de Aplicaciones Java

UsbInterface interf = (UsbInterface) totalInterfaces.get (i); interf.claim (); totalEndpoints Lista = interf.getUsbEndpoints (); for (int j = 0; <totalEndpoints.size j (); j + +) { / / Acceder al extremo específico, determinar la dirección / / De su flujo de datos, y el tipo de transferencia de datos, y abre la / / Datos de la tubería para E / S. UsbEndpoint ep = (UsbEndpoint) totalEndpoints.get (i); dirección int = ep.getDirection (); tipo int = ep.getType (); UsbPipe tubo = ep.getUsbPipe (); pipe.open (); / / Realizar E / S a través de la tubería USB aquí. pipe.close (); } interf.release (); } } Catch (Exception e) {} }

La JSR-80 del proyecto ha sido muy activa desde el principio. La versión 0.10.0 de la javax.usb API, Rhode Island, RI y para Linux fueron puestos en libertad en febrero de 2003. Es probable que esta versión se presentará a la JSR-80 Comité para su aprobación final. Se espera que las implementaciones para otros sistemas operativos pronto estará disponible después de JSR-80 se convierte formalmente en una norma extendida del lenguaje Java. La comunidad de desarrolladores Linux parece mostrar más interés en el JSR-80 del proyecto que el proyecto JUSB, y ha habido un creciente número de proyectos iniciados con el javax.usb API en la plataforma Linux.

Volver al principio

Conclusión

Tanto la API JUSB y la API JSR-80 ofrecen aplicaciones Java con la capacidad de acceder a los dispositivos USB de un equipo que ejecuta el sistema operativo Linux. La JSR-80 API proporciona más funcionalidad que la API JUSB, y tiene el potencial de convertirse en una norma extendida del lenguaje Java. Actualmente, sólo los desarrolladores de Linux pueden aprovechar las JUSB y API JSR-80. Sin embargo, los esfuerzos activos al puerto tanto API para otros sistemas operativos han sido reportados. los desarrolladores de Java debe ser capaz de acceder a los dispositivos USB en otros sistemas operativos en un futuro próximo. Si se familiariza con estas API, ahora, puede estar listo para añadir la funcionalidad de USB a sus aplicaciones cuando estos proyectos están listos para el prime time en múltiples plataformas.

Page 12: Acceso a Los Dispositivos USB de Aplicaciones Java

Recursos

Para obtener más información sobre la especificación USB, visite USB.org .

Visite la página principal del proyecto JUSB en SourceForge.

Para obtener más información sobre el JSR-80 del proyecto, visite su página de inicio o de su página en la Community Process Java .

Obtenga más información sobre el proyecto jPhoto .

Más información sobre la jSyncManager proyecto.

Para más información sobre el proyecto de JMF, ver Eric Olson integral " Java Media Framework básico "tutorial (developerWorks, mayo de 2002).

Encontrarás cientos de artículos sobre todos los aspectos de programación Java en la zona de la tecnología Java de developerWorks .

http://translate.google.com.pe/translate?hl=es&sl=en&u=http://www.steelbrothers.ch/jusb/&ei=MEcFTbjHNIHGlQez44HrCQ&sa=X&oi=translate&ct=result&resnum=1&ved=0CB8Q7gEwAA&prev=/search%3Fq%3Djava%2BUSB%2BAPI%26hl%3Des%26biw%3D1020%26bih%3D567%26prmd%3Div

Introducción:

The last few years saw a huge boom in the software market with the computer reaching the doorstep of general public. En los últimos años vieron un enorme auge en el mercado de software con el equipo de llegar a la puerta del público en general. With that, rose the demand for components and programs that would cater to this general segment of the market. Con ello, aumentó la demanda de componentes y programas que atienden a este segmento del mercado en general. The most important addition to the computer in the last few years is the USB port which can been seen on most of the recent computers. La adición más importante para el equipo en los últimos años es el puerto USB que se puede ver en la mayoría de los equipos recientes. This facility greatly simplifies how third party devices or common devices like printers, scanners, digital cameras, and USB storage devices can interact with personal computers. Este servicio simplifica en gran medida la cantidad de dispositivos de terceros o dispositivos comunes como impresoras, escáneres, cámaras digitales y dispositivos de almacenamiento USB puede interactuar con los ordenadores personales. Computers always had serial ports and parallel ports, which could be used to connect to third party devices but these, were limited in their capabilities as the ports were not dynamic and expandable. Computadoras siempre había puertos serie y puertos paralelos, lo que podría ser utilizado para conectarse a dispositivos de terceros, pero estos, fueron limitados en sus capacidades como los puertos no se dinámico y ampliable. Most of the time any device connected to these ports required some installation or driver configuration and or a restart of the computer. La mayor parte del tiempo cualquier dispositivo conectado a estos puertos requiere una configuración de instalación o el conductor y / o que se reinicie el equipo. Moreover these devices were not scalable, expandable or robust. Además, estos dispositivos no fueron escalable, extensible y robusto. Devices connected to USB devices are scalable, expandable, tree based, plug and play and, added to that most devices connected to the USB port do not need any installation and will start working just by plugging into the USB port. Los dispositivos conectados a los dispositivos USB son escalables y ampliables, basados en los árboles, plug and play y, sumado a que la mayoría de los dispositivos conectados al puerto USB no necesita ninguna instalación y comenzará a trabajar con sólo conectarlo al puerto USB. This makes it easier for manufacturers to create user friendly products and saves the customers the nightmares of installation. Esto hace que sea más fácil para los fabricantes a crear productos fáciles de usar y ahorra a los clientes las pesadillas de la instalación.

Sun had seen a growth in the external device market and had proposed a Java communication API. Sol se había visto un crecimiento en el mercado de dispositivos externos, y había propuesto una comunicación de la API de Java. The Java communication API provides access to RS232 serial ports and parallel ports from Java applications. La Comunicación de la API de Java permite el acceso a puertos serie RS232 y puerto paralelo de las aplicaciones Java. The Java communication API though comprehensive enough to cover all communications to the computer was too generic for USB based devices. La Comunicación de la API de Java, aunque lo suficientemente amplio como para cubrir todas las comunicaciones en el equipo era demasiado genérico para dispositivos basados en USB. Moreover, since the USB specification is quite different from any serial port or parallel port specifications, a common specification

Page 13: Acceso a Los Dispositivos USB de Aplicaciones Java

for all these devices does not do justice to USB and USB based devices. Por otra parte, dado que la especificación USB es muy diferente de cualquier puerto serial o puerto paralelo especificaciones, una especificación común para todos estos dispositivos no hace justicia a USB y dispositivos USB basados en. For that reason IBM proposed a new JSR (JSR 80) using the Java Community Process for a new Java USB API. Por esta razón IBM propone un nuevo JSR (JSR 80) usando el Java Community Process para una nueva API de Java USB. The intent of this article will be to educate readers on the important parts of the API and how it would be useful to programmers and vendors who make USB based products. La intención de este artículo será el de educar a los lectores en las partes importantes de la API y la forma en que sería útil para los programadores y vendedores que hacen los productos basados en USB.

Architecture: Arquitectura:

The following subsystems constitute the core of the Java USB Architecture. Los siguientes subsistemas constituyen el núcleo de la arquitectura Java USB.

1. OS Services This section defines the services required from the underlying operating system needed for implementing the USB specification OS Servicios de esta sección se definen los servicios requeridos por el sistema operativo subyacente necesaria para la aplicación de la especificación USB

2. Device Model This section defines the main interface provided to the users of the USB Specification. Modelo de equipo En esta sección se define la interfaz principal que ofrece a los usuarios de la especificación USB.

3. Events Model The USB events model defines a event model for USB pipes and devices. Eventos Modelo El modelo de eventos USB define un modelo de eventos para las tuberías y dispositivos USB.

4. USB Pipes Model These are logical pipes that help in communication between USB devices and their components. USB Tubos modelo, que son tubos de lógica que ayudan en la comunicación entre dispositivos USB y sus componentes.

5. USB Operations This section defines the kind of requests users can send to USB devices. USB Operaciones En esta sección se define el tipo de usuarios pueden enviar peticiones a dispositivos USB.

The core of the system is a USB driver. El núcleo del sistema es un controlador USB. The USB driver uses the Device model to interact with the Operating system services. El controlador USB se utiliza el modelo de dispositivo para interactuar con los servicios del sistema operativo. The USB driver also listens to the Events subsystem to listen for any events that are fires to the Device model or the USB pipes. El controlador USB también escucha los eventos del subsistema para escuchar los eventos que son los incendios en el modelo de dispositivos USB o las tuberías. The driver uses the USB pipes subsystem to propagate commands or requests to the USB operations subsystem. El controlador utiliza las tuberías subsistema USB para propagar los comandos y solicitudes al subsistema USB operaciones.

The Components: Los componentes: 1. OS Services : . Servicios de un SO: The heart of the OS Services subsystem is the UsbHostManager class. El corazón del subsistema OS Services es la clase UsbHostManager. This class has the responsibility of being an interface to all the devices and hubs attached to the host system. Esta clase tiene la responsabilidad de ser una interfaz para todos los concentradores y los dispositivos conectados al sistema host. The UsbHostManager uses the UsbServicesUtility class to load the properties from a jusb.properties file and creates an object of type UsbServices. El UsbHostManager utiliza la clase UsbServicesUtility para cargar las propiedades de un archivo jusb.properties y crea un objeto de tipo UsbServices. The class that is created implements the UsbServices interface but in actuality it is the current implementation class for the UsbServices interface. La clase que se crea implementa la interfaz UsbServices pero en realidad es la clase de implementación actual de la interfaz UsbServices.

The UsbHostManager class is a singleton class that allows only one instance of itself per JVM. La clase UsbHostManager es una clase singleton que permite sólo una instancia de sí mismo por la JVM. The UsbHostManager class is instantiated when the first client makes a request to it. La clase UsbHostManager se crea una instancia cuando el primer cliente realiza una solicitud a la misma. Once the client gets an instance of the UsbHostManager class it registers for events through the UsbHostManager.getInstance().getUsbServices() .addUsbServicesListerner(listener) method. Una vez que el cliente obtiene una instancia de la clase UsbHostManager se registra para los eventos a través de la UsbHostManager.getInstance (). GetUsbServices (). AddUsbServicesListerner (oyente) método. This notifies the client if any devices are attached to the system or when current devices are removed from the system. Este notifica al cliente si hay algún dispositivo conectado al sistema o cuando los dispositivos actuales son eliminados del sistema. The UsbHostManager also provides access to the root USB hub which can be used to query about devices already connected to the hub. El UsbHostManager también proporciona acceso a el concentrador raíz USB que puede utilizar para consultar acerca de los dispositivos ya están conectados al hub. There could be multiple USB controllers attached to a host, the UsbHostManager provides information about the multiple USB controllers and provides for mechanisms to find devices attached to any of them. Podría haber varios controladores USB conectado a un host, el UsbHostManager proporciona información acerca de las múltiples controladores USB y dispone de mecanismos para encontrar los dispositivos conectados a cualquiera de ellos. The client can iteratively search for devices on any controller using the UsbServices object. El cliente de forma iterativa puede buscar en cualquier controlador de dispositivos utilizando el UsbServices objeto.

. Modelo de equipo: According to the USB specification every USB device is a class that implements the UsbDevice interface and it is

Page 14: Acceso a Los Dispositivos USB de Aplicaciones Java

exposed as a UsbDevice object. De acuerdo con la especificación USB todos los dispositivos USB es una clase que implementa la interfaz UsbDevice y se expone como un objeto UsbDevice. Even USB hubs are treated as UsbDevice objects. Incluso concentradores USB son tratados como objetos UsbDevice. The USB hubs is represented as a class that implements the UsbHub interface which in turn is extended from the UsbDevice interface. El hub USB se representa como una clase que implementa la interfaz USBHUB que a su vez se extiende desde la interfaz de UsbDevice. Every USB device may have multiple configurations associated with it and these configurations are represented by their respective UsbConfig interfaces. Todos los dispositivos USB pueden tener varias configuraciones de la misma y configuraciones de estos están representados por sus interfaces UsbConfig respectiva. Each combination of USB device and UsbConfig interface exposes different functionality which is driven by the configuration parameters in the UsbConfig. Cada combinación de dispositivo USB e interfaz UsbConfig expone una funcionalidad diferente que es conducido por los parámetros de configuración en el UsbConfig. Each individual combination has different end points associated with them, which can act as a source or synch of data for that USB device. Cada combinación individuo tiene diferentes puntos finales asociados con ellos, que puede actuar como una fuente o sincronización de datos para que el dispositivo USB.

Typically clients use a combination of UsbDevice objects and UsbConfig objects to get access to a device. Por lo general los clientes utilizan una combinación de objetos y objetos UsbDevice UsbConfig para tener acceso a un dispositivo. They then use the UsbConfig interface to get the corresponding UsbInterface for the device. Luego utilizan la interfaz UsbConfig Para obtener el correspondiente UsbInterface para el dispositivo. The UsbInterface provides access to end points which are used for sending or receiving data. El UsbInterface proporciona acceso a los puntos finales que se utilizan para enviar o recibir datos.

3 Event Model: 3 Modelo de eventos: The Event model of the USB specification is based on the JavaBeans event model. El modelo de eventos de la especificación USB se basa en el modelo de eventos de JavaBeans. Since devices can be removed or attached dynamically, the model needs to have a mechanism to send and receive events. Dado que los dispositivos se pueden quitar o unido de forma dinámica, el modelo debe tener un mecanismo para enviar y recibir eventos. Each USB device has a set of UsbDeviceListeners that register themselves to receive notifications about any events. Cada dispositivo USB tiene un conjunto de UsbDeviceListeners dicho registro se para recibir notificaciones sobre los eventos. The device uses the UsbHostManager and UsbServices objects to add listeners to the host system. El dispositivo utiliza la UsbHostManager y objetos UsbServices añadir oyentes al sistema host. The USB events are delivered asynchronously to the device. Los acontecimientos USB se entregan de forma asincrónica en el dispositivo.

4 USB Pipes Model: 4 Tubos USB Modelo: Pipes are the only means of communications between the host and USB devices. Las tuberías son el único medio de comunicación entre el host y los dispositivos USB. USB devices communicate through device end points, which in turn communicate through pipes. dispositivos USB comunicarse a través de los extremos del dispositivo, que a su vez comunican a través de tuberías. These pipes are not physical pipes for data transfer but are modeled as logical pipes. Estos tubos no son tubos física para la transferencia de datos, sino que se modelan como tuberías lógico. These logical pipes are objects that belong to a specific end point and exist as long as the device model exists. Estos tubos de lógica son objetos que pertenecen a un punto final específico y existe siempre y cuando el modelo de dispositivo existe.

For a pipe to be accessible the pipe must be active, pipes belonging to end points on an active interface are active while those on inactive interface settings are inactive. Por un tubo que ser accesibles de la tubería debe estar activa, las tuberías pertenecientes a los puntos finales en una interfaz activa se activa mientras que los valores de la interfaz inactivas están inactivas. Apart from being active the Pipes need to be opened before they are used. Además de ser activo de la tubería deben estar abiertos antes de que se utilizan. To prepare a UsbPipe for communication, the UsbInterface that owns the UsbPipe needs to be claimed using the claim() method. Para preparar un UsbPipe para la comunicación, la UsbInterface que posee el UsbPipe tiene que ser reclamado con la demanda () método. If the UsbInterface is already in use by another client, an exception is thrown. Si el UsbInterface ya está en uso por otro cliente, se produce una excepción. The UsbPipe object can now be obtained using the getUsbPipe() method. El objeto UsbPipe ahora se puede obtener utilizando el getUsbPipe () método. Now the UsbPipe object can be used to open a pipe by calling the open() method. Ahora el objeto UsbPipe puede ser utilizada para abrir una tubería mediante una llamada al método open (). The pipe is now ready for any data transmission. La tubería ya está listo para cualquier transmisión de datos. A UspPipeException is thrown if the call fails. Un UspPipeException se produce si la llamada falla.

The simplest way to transmit data through the pipes is using a byte array. La forma más sencilla de transmitir datos a través de los tubos está utilizando una matriz de bytes. The data that needs to be transmitted should be filled into the byte array if the direction of communication is out (From the host to the device) and vice versa if the communication is in. There are two types of communications possible, synchronous and asynchronous, which are defined in the UsbInterface. Los datos que necesita ser transmitida debe ser llenado en la matriz de bytes, si la dirección de comunicación está fuera (desde el host al dispositivo) y viceversa, si la comunicación es pulg Hay dos tipos de comunicaciones posibles, sincrónica y asincrónica, que se definen en el UsbInterface. For synchronous communication the syncSubmit(byte []) method is used, while the asyncSubmit(byte []) method is used for asynchronous communication. Para la comunicación síncrona la syncSubmit (byte []) se utiliza, mientras que el asyncSubmit (byte []) se utiliza para la comunicación asíncrona. The synchSubmit() method will block the control till the transmission is complete and return the number of bytes transferred or an exception in case of any problem. El synchSubmit () de bloquear el control de la transmisión hasta que se complete y devuelva el número de bytes transferidos o una excepción en caso de cualquier problema. After the submission is complete all the UspPipe's listeners will receive a data or error event depending upon the completion status of the operation. Después de la presentación se haya completado todos los UspPipe los oyentes recibirán un dato o evento de error en función del estado de finalización de la operación. The asynchronous operation returns a SubmitResult object immediately after the subsystem accepts the

Page 15: Acceso a Los Dispositivos USB de Aplicaciones Java

submission. La operación vuelve asincrónica SubmitResult un objeto inmediatamente después del subsistema acepta la petición. It does not wait till the transmission is completed but allows the client to use the SubmitResult object to track the submission. No espere hasta que la transmisión haya finalizado, sino que permite que el cliente utilice el objeto SubmitResult para seguir la presentación. The asynchronous process has a method called waitUntilCompleted() which can be used to block control till the submission is completed. El proceso asincrónico tiene un método llamado waitUntilCompleted () que puede ser usado para bloquear el control hasta que la presentación se ha completado.

The UspPipe's endpoint's direction determines if the pipe is being used for input or output. La dirección del punto final de UspPipe determina si la tubería se utiliza para la entrada o salida. Output is when data is transferred from the host to the device and input is the reverse process. La salida es cuando se transfieren datos desde el ordenador al dispositivo y de entrada es el proceso inverso. For input the data buffer is filled with data received from the device while for output the data is passed to the device. Para la entrada del buffer de datos está lleno de datos recibidos desde el dispositivo, mientras que para la salida se pasa los datos al dispositivo. The specification does not have any maximum or minimum limitations on the size of the data. El pliego de condiciones no tiene ningún máximo o mínimo de limitaciones en el tamaño de los datos. But the data size is limited to the UspPipe's maximum packet size. Pero el tamaño de los datos está limitado al tamaño máximo de paquete de la UspPipe. However if the data exceeds the packet size it will be sent in segments. Sin embargo, si los datos supera el tamaño del paquete será enviado en los segmentos.

5 Request and Standard Operations: 5 Solicitud y operaciones estándar: The Request and USB operations provide a mechanism of performing standard operations and vendor specific operations on the USB devices. La solicitud y las operaciones de USB proporciona un mecanismo de realizar operaciones estándar y las operaciones específicas del proveedor de los dispositivos USB. The USB specification defines a few standard operations that all devices need to do, which is defined in the StandardOperations interface. La especificación USB define un estándar de operaciones de unos pocos que todos los dispositivos que hacer, que se define en la interfaz de StandardOperations. The request results are available from the Request objects through get methods(). Los resultados de solicitud están disponibles en la Solicitud de objetos a través de métodos get (). To cater to different request and the different data encoding mechanisms a RequestFactory Class is provided to create Requests. Para atender a la solicitud y los diferentes mecanismos de codificación de datos diferentes, se proporciona una clase RequestFactory para crear solicitudes.

USB Tipos de tuberías

Control pipes are the simplest form of pipes used for communication. tubos de control son la forma más simple de los tubos utilizados para la comunicación. They are further divided into normal control pipes and default control pipes. Ellos se dividen en tubos normales de control y las tuberías por defecto de control. Default control pipes are not directly accessible to the client but take requests from a client. tubos de control por defecto no son accesibles directamente al cliente pero aceptamos peticiones de un cliente. Normal control pipes can be directly accessed by the client but require a specific data format where the first eight bytes of the data buffer is the setup packet. tuberías normales de control se puede acceder directamente por el cliente, sino que requieren un formato de datos específicos en los ocho primeros bytes del búfer de datos es el paquete de instalación. The first byte of the setup byte determines the direction and the rest of the seven bytes are used for the properties of the request. El primer byte del byte de configuración determina la dirección y el resto de los siete bytes se utilizan para las propiedades de la solicitud.

Isochronous pipes are more complicated. tubos isócrono son más complicadas. The direction of data transfer in the pipe is determined by the end point. La dirección de la transferencia de datos en la tubería está determinada por el punto final. Isochronous transfers are time sensitive. transferencias isócrono son sensibles al tiempo. When the host receives an isochronous transfer it identifies the frame number for the first frame. Cuando el huésped recibe una transferencia isócrona se identifica el número del marco para el primer fotograma. The specification does not provide the application the flexibility to specify the first frame, so the application needs to schedule its packets for the earliest possible frame, so each submission is treated as a single independent packet. La especificación no proporciona la aplicación de la flexibilidad para especificar el primer fotograma, por lo que la aplicación necesita para programar sus paquetes para el primer cuadro de lo posible, por lo que cada presentación es tratado como un paquete independiente sola. Frame synchronization becomes the responsibility of the application, so it needs to provide enough packets to ensure frame synchronization. sincronización se convierte en el marco de la responsabilidad de la aplicación, por lo que tiene que proporcionar suficientes paquetes para garantizar la sincronización del marco.

USB Pipe State Model Pipe USB Modelo del Estado

A pipe exists in a two states: active or inactive. Una tubería existe en dos estados: activo o inactivo. A pipe needs to be in the active state for any communication to happen. Una tubería tiene que estar en el estado activo para cualquier comunicación al pasar. Within the Active state a pipe can be in three substates: idle, busy and error. En el estado activo de un tubo puede estar en tres subestados: inactiva, ocupada y error. When the pipe is opened it is in the idle state, once data starts to communicate it changes to the busy state and will remain there till completion of the transmission or till an error occurs. Cuando el tubo se abre es en el estado de reposo, una vez que comienza a comunicar los datos que los cambios en el estado de ocupado y permanecerá allí hasta la finalización de la transmisión o hasta que se produce un error. Once transmission is completed it gets back to the idle state and waits for further communication requests. Una vez que se complete la transmisión se pone de nuevo al estado inactivo y en espera para las solicitudes de nueva comunicación. The pipe cannot be closed during the busy state, but can be closed in the error state and busy state. La tubería no se pueden cerrar durante el estado ocupado, pero se puede cerrar en el estado de error y el estado ocupado.

Page 16: Acceso a Los Dispositivos USB de Aplicaciones Java

I/O Request Packets (IRP) I / O Solicitud de paquetes (IRP) For simple communication a data buffer (byte []) can be used, but for complex communications I/O request packets are required. Por la simple comunicación un búfer de datos (byte []) se puede utilizar, pero para las comunicaciones del complejo I / O paquetes de petición son obligatorios. An IRP consists of a data buffer, communication policy information, and other meta data all packaged into a single object. Un PIR consiste en un búfer de datos, la información política de comunicación, y otros metadatos todos empaquetados en un único objeto. IRPs give more control to the application on how the data is submitted; they can be programmed to resubmit themselves on completion. IRP dar más control a la aplicación de cómo se envían los datos, ya que pueden ser programados para ellos volver a presentar en la terminación. For more complicated submissions another type of IRP called the composite UsbIrp (UsbCompositeIrp) is used. Para más presentaciones complicadas otro tipo de IRP llamado compuesto UsbIrp (UsbCompositeIrp) se utiliza. They behave like normal UsbIrps but can encapsulate multiple IRPs which can be submitted uninterrupted. Se comportan como UsbIrps normal, pero puede encapsular IRP múltiples que se pueden presentar interrupciones. They also provide better optimization techniques to handle UsbIrps more efficiently. También ofrecen mejores técnicas de optimización para manejar UsbIrps de manera más eficiente.

Conclusion Conclusión The Java USB API is still in the public draft stage of the Java Community Process, so many aspects of the API are not very clear. El Java API USB se encuentra todavía en fase de proyecto público de la Java Community Process, muchos aspectos de la API no son muy claras. The intent of the Java USB API is to provide a unified specification API that would allow developers and vendors to create drivers for their own application. La intención de la API de Java USB es proporcionar una especificación API unificada que permite a los desarrolladores y vendedores para crear controladores para su propia aplicación. This specification strives to provide a standard library for all platforms and is targeted for the J2ME and J2SE platforms. Esta especificación se esfuerza por ofrecer una biblioteca estándar para todas las plataformas y se dirige a las plataformas J2ME y J2SE. However we can hope that by the end of the JCP the specification team will provide a good API for USB access. Sin embargo, podemos esperar que al final de la JCP del equipo especificación proporcionará una buena API de acceso USB. It could throw open a wide range of devices and services into the market. Se podría lanzar abrir una amplia gama de dispositivos y servicios en el mercado.

As of now has an open source implementation of a Java USB specification called jUsb. A partir de ahora

www.SourceForge.net tiene una implementación de código abierto de la especificación USB Java llamada JUSB. The jUsb is an implementation specific to Linux and has no support for Windows based systems. El JUSB es una implementación específica de Linux y no tiene soporte para sistemas basados en Windows. jUsb also has a parallel windows version of the API being made but only a mention of it is provided on the website. JUSB también tiene una versión de Windows en paralelo de la API están realizando, pero sólo una mención de que se proporciona en el sitio web.

Page 17: Acceso a Los Dispositivos USB de Aplicaciones Java