Proyecto de Programación de Sistemas

21
Proyecto de Programación de Sistemas Uso de Java Native Interface para envío y recepción de datos por puerto paraleloNombre: Ignacio Zamora R. Profesor: Agustín González V. Valparaíso, 19 de Noviembre. 2004

description

Proyecto de Programación de Sistemas. “Uso de Java Native Interface para envío y recepción de datos por puerto paralelo”. Nombre: Ignacio Zamora R. Profesor: Agustín González V. Valparaíso, 19 de Noviembre. 2004. INTRODUCCIÓN. - PowerPoint PPT Presentation

Transcript of Proyecto de Programación de Sistemas

Page 1: Proyecto de Programación de Sistemas

 

Proyecto de Programación de Sistemas

“Uso de Java Native Interface para envío y recepción de datos por

puerto paralelo” Nombre: Ignacio Zamora R.

Profesor: Agustín González V.

Valparaíso, 19 de Noviembre. 2004

Page 2: Proyecto de Programación de Sistemas

  INTRODUCCIÓN

Aunque las API’s de Java son poderosas para todo tipo de aplicaciones, se necesita utilizar la potencia específica de una plataforma en concreto.  Java desde un principio incluyo una forma de hacer llamadas nativas desde la maquina virtual, pero tenia 2 problemas: 

Page 3: Proyecto de Programación de Sistemas

  1. Las llamada a código nativo desde Java accedían a estructuras C, pero no estaba definida la posición exacta que debían ocupar estos campos en memoria con lo que una llamada nativa en una maquina virtual no coincidían con las llamadas en otra maquina virtual. 2. Las llamada nativas en versiones anteriores a JSDK 1.1 se basaban en el uso de un recolector de basura conservativo, este recolector recogía el puntero nativo que apuntaba a un objeto Java, por lo tanto cuando se apuntaba a un objeto Java desde el método nativo éste no se liberaba nunca más. 

Page 4: Proyecto de Programación de Sistemas

 Debido a los problemas que se presentaron al invocar métodos nativos se implemento una nueva forma de acceder a estos métodos nativos a la que se llamo JNI. JNI es un entorno el cual nos permite ejecutar código nativo de la maquina en la cual se esta corriendo desde Java y viceversa. Código Nativo son funciones escritas en algún leguaje de programación como C o C++, donde se ejecuta la maquina virtual. 

Page 5: Proyecto de Programación de Sistemas

 

  

  

Interacción desde un programa C a un programa en Java

Page 6: Proyecto de Programación de Sistemas

  Interacción desde un programa Java a un programa C

Page 7: Proyecto de Programación de Sistemas

 

Page 8: Proyecto de Programación de Sistemas

 IMPLEMENTACIÓN DE JNI 

Para implementar JNI se debe seguir los siguientes pasos:  • Escribir el código en java• Compilar el Código Java• Crear el fichero.• Escribir la implementación del Método Nativo.• Crear una librería Compartida.• Ejecutar el programa.  

Page 9: Proyecto de Programación de Sistemas

 ESCRIBIR EL CÓDIGO EN JAVA 

Se deben definir dentro de una clase Java todos los métodos Java, como los métodos nativos. Para la implementación de un método en un lenguaje de programación distinto de Java, se debe incluir la palabra clave native.

Page 10: Proyecto de Programación de Sistemas

 

package parport;  public class ParallelPort { public ParallelPort (int portBase) { this.portBase = portBase; } public int read () { return ParallelPort.readOneByte (this.portBase+1); } public void write (int oneByte) { ParallelPort.writeOneByte(this.portBase, oneByte); }

public static native int readOneByte (int address); public static native void writeOneByte(int address, int oneByte);  static { System.loadLibrary("parport"); }

Page 11: Proyecto de Programación de Sistemas

  Para llamar a métodos nativos se hace de la misma forma que la llamada a un método normal.

 ParallelPort lpt1 = new ParallelPort(0x378);lpt1.write(bit);lpt1.read();

Page 12: Proyecto de Programación de Sistemas

  COMPILAR EL CÓDIGO JAVA 

Ahora se debe a compilar la clase Java anterior creada de la forma convencional.  javac ParallelPort.java  

Page 13: Proyecto de Programación de Sistemas

 CREAR EL FICHERO .H 

La creación del fichero .h es para proporcionar un prototipo de función para la implementación de los métodos nativos write() y read() definidos en la clase ParallelPort(). Para crear este fichero se ejecuta el comando: javah ParallelPort

Page 14: Proyecto de Programación de Sistemas

  Si miramos dentro del fichero .h creado nos encontramos con lo siguiente:

 JNIEXPORT jint JNICALL Java_parport_ParallelPort_readOneByte (JNIEnv *, jclass , jint);

JNIEXPORT void JNICALL Java_parport_ParallelPort_writeOneByte (JNIEnv *, jclass , jint, jint); 

Page 15: Proyecto de Programación de Sistemas

 

ESCRIBIR LA IMPLEMENTACIÓN DEL MÉTODO NATIVO. 

Se debe escribir ahora la implementación del método nativo en C. En el proyecto se incluyen los siguientes ficheros de cabecera:

 #include <jni.h>#include <conio.h>#include "parport_ParalellPort.h" 

Page 16: Proyecto de Programación de Sistemas

 

Dentro del programa C se deben escribir las funciones con las mismas firmas de las funciones que se generaron en el fichero .h Esta función lee en el puerto paralelo y retorna el valor leído (status) a la acción que lo invoco en Java.

 JNIEXPORT jint JNICALL Java_parport_ParallelPort_readOneByte (JNIEnv * algo, jclass otro, jint portStatus){ unsigned short status; status = (unsigned short)portStatus; return _inp(status);} 

Page 17: Proyecto de Programación de Sistemas

  Por otro lado esta función envía un Byte al puerto paralelo que fue enviado por una acción en el programa Java que lo invoca. 

JNIEXPORT void JNICALL Java_parport_ParallelPort_writeOneByte (JNIEnv * algo, jclass otro, jint portData, jint oneByte){ unsigned short data; int aByte; data = (unsigned short)portData; aByte = (int)oneByte; _outp(data,aByte);}

Page 18: Proyecto de Programación de Sistemas

 

CREAR UNA LIBRERÍA COMPARTIDA

Las librerías son ficheros que almacenan las funciones, clases y variables globales y sirve para enlazar los lenguajes. Se pueden crear librerías de enlace estático o enlace dinámico.  Para el proyecto esta librería será parport.dll donde es ligada en la clase ParallelPort. System.loadLibrary("parport") Hay varias formas de crear una librería, cada compilador y sistema operativo tienen formas distintas de llevar a cabo esta acción.

Page 19: Proyecto de Programación de Sistemas

  EJECUTAR EL PROGRAMA

Ahora queda solo ejecutar el programa Proyecto.java, pero antes hay que guardar en la carpeta classes del compilador java la carpeta con nombre parport con los archivos: parport.dll y la clase ParallelPort .java. 

Page 20: Proyecto de Programación de Sistemas

  Al momento de ejecutar el programa de envío muestra inmediatamente un panel con cuatro botones los cuales controlan independientemente cada led.

Page 21: Proyecto de Programación de Sistemas

 

Al ejecutar el programa de recepción de datos se mostrara una ventana que cambiara el fondo de esta al accionar el botón que se encuentra conectado al Puerto Paralelo.

El fondo será azul cuando no hay pulsación del botón y rojo cuando se pulsa.