Você está na página 1de 5

jPicUSB: Clase Java para comunicacin

USB con PICs usando API de Microchip


Oativia, Gernimo Isidro
Universidad Nacional de Tucumn Facultad de Ciencias Exactas Ingeniera en Computacin
geronimox@gmail.com - desarrollos@divideandconquer.com.ar - www.divideandconquer.com.ar

La mayora de los fabricantes de computadoras porttiles, y de escritorio, poco a poco estn


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 obligacin, de migrar nuestros desarrollos a las nuevas
tecnologas.

El puerto USB trae consigo muchas ventajas respecto a los antiguos puertos serie y paralelo, las
ms notables son:
Alta tasa de transferencia (mnimo 100 veces mayor al puerto serie)
Hasta 127 dispositivos conectados en un mismo bus
Es capaz de alimentar un perifrico 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 prcticamente imposible encontrar una PC sin un puerto USB a
nuestra disposicin.

Esta ponencia no abordar el software del lado de un PIC, sino del lado de la PC, y
especficamente desde una aplicacin Java, utilizando la clase jPicUSB para lograr la
comunicacin PIC-PC.
Que es jPicUSB?
JPicUSB es una clase java, que utilizando interfaces nativas (JNI) [7], permite a una aplicacin
Java hacer llamados a una librera dinmica, en este caso (jpicusb.dll).
JPicUSB.dll es una librera 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 rpido de aplicaciones e interfaces grficas es una de las cualidades ms notables
de Java, pero este lenguaje, no nos proporciona un mtodo fcil para acceder a libreras
dinmicas (.dll). Aqu es donde jPicUSB facilita el camino, como si se tratase de cualquier
lenguaje.

Mtodos disponibles en JPicUSB


Ficheros que componen al paquete jPicUSB
jpicusb.jar
jpicusb.dll

javadoc

Interfaz java con la librera dinmica jpicusb.dll


Librera dinmica que contiene todas las funciones de la API USB de
Microchip [4]
Carpeta con la documentacin de la clase. (Descripcin de todos los
mtodos)

Distintos tipos de Mtodos disponibles en jpicusb.jar


En la clase iface del Paquete jPicUSB podemos distinguir 3 tipos diferentes de mtodos.
- Mtodos de inicializacin varios
Cargan la librera dinmica y establecen valores por defecto.
- Mtodos generales
Lectura y Escritura de datos a un dispositivo USB, apertura de una conexin, etc.
- Mtodos rpidos
Imitan a los mtodos generales, pero con menos cdigo para agilizar el desarrollo.
Cada uno de estos 3 tipos de mtodos estn descriptos a continuacin.
Mtodos de inicializacin varios
static void load( )
Carga la librera dinmica jpicusb.dll. Este mtodo debe ser llamado solo una vez, antes de
cualquier llamada a otro mtodo.
static void set_vidpid(java.lang.String s)
Establece el VID&PID utilizado por defecto en toda llamada a un mtodo rpido.
static void set_instance(int i)
Establece la instancia utilizada por defecto en toda llamada a un mtodo rpido.
Descripcin de los Mtodos rapidos en la clase jpicusb.jar
Adems de las funciones proporcionadas por la API de Microchip [4], jPicUSB dispone de varios
mtodos que agilizan el desarrollo.
Estos mtodos rpidos se identifican gracias a que a su nombre le antecede el carcter Q
(Quick).
Antes de utilizar estos mtodos, es necesaria una simple configuracin de la librera utilizando los
mtodos de inicializacin varios, descriptos en la lista anterior (set_vidpid y set_instance).
Los mtodos rpidos disponibles son:
static byte[ ] QRead (int dwLen, long dwMilliseconds)
Establece una conexin al VID&PID por defecto, lee dwLen bytes, con un timeout de
dwMilliseconds milisegundos y luego cierra la conexin.
Retorna los bytes ledos en un arreglo de bytes.
static long QWrite (byte[ ] pData, int dwLen, long dwMilliseconds)
Establece una conexin al VID&PID por defecto, escribe dwLen bytes del arreglo pData,
con un timeout de dwMilliseconds milisegundos y luego cierra la conexin.
Retorna la cantidad de bytes que se escribieron con xito.
static byte[ ] QWriteRead(byte[] pData, int dwLenWrite, int dwLenRead, long dwMilliseconds)
Establece una conexin 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 conexin.
Retorna los bytes ledos en un arreglo de bytes.

Descripcion de los Mtodos generales en la clase jpicusb.jar


Los mtodos 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 librera 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 conexin con el dispositivo cuyo VID&PID coincide con pVID_PID.
Retorna una handle que identifica a la conexin para ser usada con los dems mtodos
generales que requieren una conexin previamente establecida.
static boolean Close(long handle)
Cierra la conexin proporcionada.
static byte[ ] Read(long handle, int dwLen, long dwMilliseconds)
Lee dwLen bytes de la conexin proporcionada via el parmetro handle.
Retorna un arreglo de bytes con los datos ledos.
static long Write(long handle, byte[] pData, int dwLen, long dwMilliseconds)
Escribe dwLen bytes de pData en la conexin proporcionada va el parmetro 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 conexin con el dispositivo cuyo VID&PID coincide con pVID_PID.
Lee dwLen bytes de la conexin y luego cierra la conexin abierta.
Retorna un arreglo de bytes con los datos ledos.
static long Write(java.lang.String pVID_PID, int instance, byte[] pData, int dwLen, long
dwMilliseconds)
Abre una conexin con el dispositivo cuyo VID&PID coincide con pVID_PID.
Escribe dwLen bytes de pData a la conexin y luego cierra la conexin 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 conexin.
Retorna un arreglo de bytes con los datos ledos.
Nota:
Varios usuarios reportaron problemas al ejecutar el mtodo load. El problema se resolvi
instalando los Runtimes de Visual C++ [6]

Usando jPicUSB en cuatro pasos


Pasos bsicos para la utilizacin de jPicUSB en un Proyecto Java de Netbeans [5]

Para
utilizar
jPicUSB
en
nuestras
aplicaciones, es necesario aadir el paquete
jpicusb.jar al proyecto.

Importar todos los paquetes


contenidos en jPicUSB.

Inicializar la librera
en el cdigo antes
de usarla.

Y antes de ejecutar la aplicacin, copiar la librera


jpicusb.dll al contexto en el cual se ejecuta nuestra
aplicacin.

Anexos que acompaan esta ponencia:


1. jpicusb_1.1.1.rar
Librera jPicUSB y su documentacin.
2. jPicUsb_1.1.1_Led_Show_Demo.rar
Demostracin de jPicUSB en un proyecto en NetBeans, con simulacin de hardware
utilizando PIC18F4550 en Proteus.

Vnculos 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 aplicacin 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 demostracin de la librera
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

Você também pode gostar