jPicUSB: Clase Java para comunicación USB con PICs usando API

Anuncio
jPicUSB: Clase Java para comunicación
USB con PICs usando API de Microchip
Oñativia, Gerónimo Isidro
Universidad Nacional de Tucumán – Facultad de Ciencias Exactas – Ingeniería en Computación
geronimox@gmail.com - desarrollos@divideandconquer.com.ar - www.divideandconquer.com.ar
La mayoría de los fabricantes de computadoras portátiles, y de escritorio, poco a poco están
jubilando al antiguo puerto serie; de la misma manera en que se dejó en el olvido al antiguo puerto
paralelo.
De este echo surgió la necesidad, y casi obligación, de migrar nuestros desarrollos a las nuevas
tecnologías.
El puerto USB trae consigo muchas ventajas respecto a los antiguos puertos serie y paralelo, las
más notables son:
 Alta tasa de transferencia (mínimo 100 veces mayor al puerto serie)
 Hasta 127 dispositivos conectados en un mismo bus
 Es capaz de alimentar un periférico con 500mA/5V
 Es Plug And Play y Hot Swapable
Tambien no se debe dejar de lado que se ha convertido en un Standard en la Industria de
Computadoras, por lo que es prácticamente imposible encontrar una PC sin un puerto USB a
nuestra disposición.
Esta ponencia no abordará el software del lado de un PIC, sino del lado de la PC, y
específicamente desde una aplicación Java, utilizando la clase jPicUSB para lograr la
comunicación PIC-PC.
¿Que es jPicUSB?
JPicUSB es una clase java, que utilizando interfaces nativas (JNI) [7], permite a una aplicación
Java hacer llamados a una librería dinámica, en este caso (jpicusb.dll).
JPicUSB.dll es una librería que implementa todas las funciones de la API USB de Microchip [4]
(mpusbapi.dll), con la diferencia de que está especialmente recompilada para permitir a la clase
jPicUSB que haga llamados a sus funciones.
¿Porque jPicUSB?
El desarrollo rápido de aplicaciones e interfaces gráficas es una de las cualidades más notables
de Java, pero este lenguaje, no nos proporciona un mátodo fácil para acceder a librerías
dinámicas (.dll). Aquí es donde jPicUSB facilita el camino, como si se tratase de cualquier
lenguaje.
Métodos disponibles en JPicUSB
Ficheros que componen al paquete jPicUSB
jpicusb.jar
jpicusb.dll
–
–
javadoc
–
Interfaz java con la librería dinámica jpicusb.dll
Librería dinámica que contiene todas las funciones de la API USB de
Microchip [4]
Carpeta con la documentación de la clase. (Descripción de todos los
métodos)
Distintos tipos de Métodos disponibles en jpicusb.jar
En la clase iface del Paquete jPicUSB podemos distinguir 3 tipos diferentes de métodos.
- Métodos de inicialización varios
Cargan la librería dinámica y establecen valores por defecto.
- Métodos generales
Lectura y Escritura de datos a un dispositivo USB, apertura de una conexión, etc.
- Métodos rápidos
Imitan a los métodos generales, pero con menos código para agilizar el desarrollo.
Cada uno de estos 3 tipos de métodos están descriptos a continuación.
Métodos de inicialización varios
 static void load( )
Carga la librería dinámica jpicusb.dll. Este método debe ser llamado solo una vez, antes de
cualquier llamada a otro método.
 static void set_vidpid(java.lang.String s)
Establece el VID&PID utilizado por defecto en toda llamada a un método rápido.
 static void set_instance(int i)
Establece la instancia utilizada por defecto en toda llamada a un método rápido.
Descripción de los Métodos “rapidos” en la clase jpicusb.jar
Además de las funciones proporcionadas por la API de Microchip [4], jPicUSB dispone de varios
métodos que agilizan el desarrollo.
Estos métodos “rápidos” se identifican gracias a que a su nombre le antecede el carácter Q
(“Quick”).
Antes de utilizar estos métodos, es necesaria una simple configuración de la librería utilizando los
métodos de inicialización varios, descriptos en la lista anterior (set_vidpid y set_instance).
Los métodos “rápidos” disponibles son:
 static byte[ ] QRead (int dwLen, long dwMilliseconds)
Establece una conexión al VID&PID por defecto, lee dwLen bytes, con un timeout de
dwMilliseconds milisegundos y luego cierra la conexión.
Retorna los bytes leídos en un arreglo de bytes.
 static long QWrite (byte[ ] pData, int dwLen, long dwMilliseconds)
Establece una conexión al VID&PID por defecto, escribe dwLen bytes del arreglo pData,
con un timeout de dwMilliseconds milisegundos y luego cierra la conexión.
Retorna la cantidad de bytes que se escribieron con éxito.
 static byte[ ] QWriteRead(byte[] pData, int dwLenWrite, int dwLenRead, long dwMilliseconds)
Establece una conexión al VID&PID por defecto, escribe dwLenWrite bytes del arreglo
pData, luego lee dwLenRead bytes, con un timeout de dwMilliseconds milisegundos y luego
cierra la conexión.
Retorna los bytes leídos en un arreglo de bytes.
Descripcion de los Métodos generales en la clase jpicusb.jar
Los métodos generales, son aquellos que se comportan igual a las funciones proporcionadas por
la API USB de Microchip [4], ya que se tratan de las mismas funciones, recompiladas de tal forma,
que puedan ser accedidas desde la librería jPicUSB en Java.
 static int GetDeviceCount(java.lang.String pVID_PID)
Retorna la cantidad de dispositivos que coinciden con pVID_PID.
 static long Open(int instance, java.lang.String pVID_PID, java.lang.String pEP, int dwDir, int
dwReserved)
Abre una conexión con el dispositivo cuyo VID&PID coincide con pVID_PID.
Retorna una handle que identifica a la conexión para ser usada con los demás métodos
generales que requieren una conexión previamente establecida.
 static boolean Close(long handle)
Cierra la conexión proporcionada.
 static byte[ ] Read(long handle, int dwLen, long dwMilliseconds)
Lee dwLen bytes de la conexión proporcionada via el parámetro handle.
Retorna un arreglo de bytes con los datos leídos.
 static long Write(long handle, byte[] pData, int dwLen, long dwMilliseconds)
Escribe dwLen bytes de pData en la conexión proporcionada vía el parámetro handle.
Retorna un entero representando la cantidad de bytes escritos con éxito.
 static byte[ ] Read(java.lang.String pVID_PID, int instance, int dwLen, long dwMilliseconds)
Abre una conexión con el dispositivo cuyo VID&PID coincide con pVID_PID.
Lee dwLen bytes de la conexión y luego cierra la conexión abierta.
Retorna un arreglo de bytes con los datos leídos.
 static long Write(java.lang.String pVID_PID, int instance, byte[] pData, int dwLen, long
dwMilliseconds)
Abre una conexión con el dispositivo cuyo VID&PID coincide con pVID_PID.
Escribe dwLen bytes de pData a la conexión y luego cierra la conexión abierta.
Retorna un entero representando la cantidad de bytes escritos con éxito.
 static byte[ ] WriteRead(java.lang.String pVID_PID, int instance, byte[] pData, int dwLenWrite,
int dwLenRead, long dwMilliseconds)
Abre dos pipes (uno de lectura y otro de escritura) con el dispositivo cuyo VID&PID
coincide con pVID_PID.
Envia dwLenWrite bytes de pData al dispositivo y luego lee dwLenRead bytes del mismo.
Luego cierra la conexión.
Retorna un arreglo de bytes con los datos leídos.
Nota:
Varios usuarios reportaron problemas al ejecutar el método load. El problema se resolvió
instalando los Runtimes de Visual C++ [6]
Usando jPicUSB en cuatro pasos
Pasos básicos para la utilización de jPicUSB en un Proyecto Java de Netbeans [5]
Para
utilizar
jPicUSB
en
nuestras
aplicaciones, es necesario añadir el paquete
jpicusb.jar al proyecto.
Importar todos los paquetes
contenidos en jPicUSB.
Inicializar la librería
en el código antes
de usarla.
Y antes de ejecutar la aplicación, copiar la librería
jpicusb.dll al contexto en el cual se ejecuta nuestra
aplicación.
Anexos que acompañan esta ponencia:
1. jpicusb_1.1.1.rar
Librería jPicUSB y su documentación.
2. jPicUsb_1.1.1_Led_Show_Demo.rar
Demostración de jPicUSB en un proyecto en NetBeans, con simulación de hardware
utilizando PIC18F4550 en Proteus.
Vínculos de Interes:
1. Web del Proyecto:
http://divideandconquer.com.ar/dyq/2009/01/jpicusb-comunicacion-pic-usb-usando-java/
2. Tutorial de desarrollo de una aplicación paso a paso con NetBeans y uso de jPicUSB
http://www.ucontrol.com.ar/forosmf/programacion-en-java/tutorial-java-pic-usb-(primerospasos)/
3. Video del proyecto de demostración de la librería
http://tinypic.com/player.php?v=2eb4awn&s=5
4. Microchip Aplication Libraries
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDoc
Name=en540668
5. NetBeans IDE
http://www.netbeans.org/
6. Microsoft Visual C++ SP1 Redistributable Package
http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D3802B2AF5FC2&displaylang=en
7. Java Native Interface
http://es.wikipedia.org/wiki/Java_Native_Interface
http://java.sun.com/j2se/1.5.0/docs/guide/jni/index.html
Descargar