Posts Tagged “java”

Posiblemente en alguna ocasión tengas que hacer un programita en Java para un módem Cinterion TC65 o XT65 en el que tengas que capturar datos (entradas digitales, analógicas, posiciones GPS, capturas realizadas por el puerto serie …) y almacenarlas en un fichero interno de la flash para su posterior envío a un servidor central.

Hoy os cuelgo un pequeño ejemplo en Java para hacer la segunda parte, el envío de los datos por FTP a un servidor central.

Hace ya mucho tiempo puse unos posts con muchos ejemplos java, entre ellos ( http://www.blogelectronica.com/ejemplos-java-j2me-modem-gprs-siemens/ ó http://www.blogelectronica.com/j2me-ftp-cinterion-tc65-xt65-mtx65-tc65t/ ).

En este último también había un ejemplo de FTP. Este de hoy es más elaborado, pues permite subir directamente un archivo almacenado en la memoria flash de nuestro módem a un servidor vía FTP. El proyecto y código fuente del ejemplo lo puedes descargar de aquí­.
 

FTP J2ME

 
Para probarlo sin complicaciones haz lo siguiente paso a paso. Crea un fichero de nombre “datos.txt” con los datos que quieras en su interior y grábalo en la memoria FLASH de tu módem TC65 / XT65 (en el directorio raí­z). Después importa el proyecto de ejemplo desde Eclipse. Abre el fichero FtpHandle.java, en él verás que se leen algunas variables del fichero EjemploFTP.jad

Lee el resto de esta entrada »

Tags: , , , ,

Comments 6 Comentarios »

Últimamente me han preguntado bastante en relación a la memoria RAM de los módulos gprs TC65 y XT65 (y sus correspondientes terminales) así que voy a poner un pequeño artículo en relación a este tema.

Como sabéis el módulo TC65 tiene un total de 400KB de memoria RAM y 1.7MB de memoria FLASH. Es evidente que la memoria flash, FFS (File Flash System, el sistema de archivos) estará en parte ocupada por nuestra aplicación java (es decir, por los ficheros .jad y .jar) y por todos aquellos archivos extra que necesitemos para nuestra aplicación así como los propios archivos generados por nuestra aplicación java, es decir, ficheros con logs, históricos, etc etc …
 

Blog de Electrónica Avanzada

 

Bueno … con 1.7MB puedo hacer un programa inmenso y me sobra ¿para qué me voy a perder el tiempo leyendo esto?
 
Es cierto que puedes hacer programas bastante grandes pero va a depender mucho de cómo los hagas y de las herramientas que estés utilizando. Si no estructuras bien tu programa puedes llegar a tener problemas serios de memoria.
 

Lee el resto de esta entrada »

Tags: , , , ,

Comments 6 Comentarios »

En muchas aplicaciones con módems GPRS es necesario almacenar datos dentro del propio módem. Ya vimos hace un tiempo cómo crear ficheros dentro de la memoria Flash del módem gprs, trabajando como si fuese una unidad de disco.

¿Que qué tipo de aplicaciones? pues por ejemplo una aplicación podría ser un datalogger, ó un tracker GPS, o cualquier otra aplicación que precise de ir guardando un log (un fichero) con ciertos datos capturados periódicamente. Evidentemente si estamos trabajando con módems GPRS es para transmitir los datos en algún momento. Cuando llegue el momento de transmitir vía GPRS los datos almacenados en el módem a un servidor central, en función del tamaño del fichero de datos que estemos manejando, puede ser bastante interesante comprimir los datos antes del envío.
 
 
¿Por qué puede ser interesante comprimir los datos?
 
Pues básicamente por dos motivos. Uno es por el ahorro de tiempo en el proceso de envío. El otro es por cuestiones económicas, pues, recordemos, en la mayoría de los casos los operadores de telefonía facturan por volumen de tráfico, es decir, cuantos más datos transmitamos más pagaremos.

compression-j2me

www.blogElectronica.com

¿Y cómo comprimo ficheros con J2ME?
 
Pues lo primero que se nos suele ocurrir a todos es empezar buscando si J2ME tiene alguna clase que nos facilite esta tarea. Lametáblemente pronto uno se da cuenta de que no, que J2ME no tiene estas clases debido a sus limitaciones (recordemos que j2me está pensado para dispositivos con poquitos recursos). En cambio J2SE (java standard edition) sí que las tiene. Con la edición completa de java basta con usar el paquete java.util.zip. para gestionar fácilmente la compresión de archivos. Viendo esto último, lo siguiente que a uno se le ocurre es “pues venga, voy a ver si puedo adaptar estas clases de J2SE para intentar que me funcionen en J2ME”. Pero tras unas horas gastadas en el intento uno acaba viendo que no va a ser tarea fácil, pues se utilizan ciertas clases nativas de Zlib.
 
Así que toca ponerse a investigar alternativas … Poca cosa aparece en Internet googleando acerca de la compresión con J2ME y mucho menos si buscamos algo relacionado con compresión y módems GPRS, así que creo que en este post aterrizarán bastantes navegantes. Bueno, tras buscar un rato, uno llega al proyecto JZLib (en la web http://www.jcraft.com/jzlib/) un proyecto de software libre donde han realizado una re-implementación de ZLIB. Podéis obtener toda la información que queráis de esa web, yo no voy a entrar en detalles.
 
 
¿Y funciona? ¿Podemos comprimir archivos dentro del módem usando esa librería?

Pues sí, funciona :) 

A continuación os voy a poner un ejemplito java que funciona en un módem TC65 ó MTX65.  Lo podéis descargar haciendo click aquí. El ejemplo básicamente lo que hace es comprimir el texto:  “en la granja de mi tia iaiaooooooooooooooooooooooooo” :) y guarda el resultado final, es decir, el texto comprimido, en un fichero (en la memoria flash interna del módem) con el nombre “datos.z”.  Si véis el código fuente del proyecto podéis ver que he puesto todos los archivos .java de la librería de compresión en el mismo proyecto. Obviamente se podría haber utilizado como librería pero para que nadie se me pierda y pueda probar el ejemplo sin dificultad lo dejo así.
 
 
¡Funciona!  Me ha comprimido el texto en un archivo. Pero si luego saco el archivo comprimido del módem con el MES y me lo llevo a mi PC no soy capaz de descomprimirlo con el WinZip.

No va a funcionar con WinZip puesto que únicamente se ha creado un fichero con los datos comprimidos, es decir, ZLIB comprime el archivo pero si quieres utilizar el winzip tendrás que construir la estructura de los ficheros ZIP, con sus cabeceras y demás. (http://www.pkware.com/products/enterprise/white_papers/appnote.html).
 

Uff, que difícil lo de las cabeceras ZIP. ¿No se puede descomprimir de otra forma?

Pues sí, con un descompresor ZLib. Pero eso lo pondré en otro post dentro de unos días (el Domingo seguramente). Intentaré poner un programita hecho en VB6 (con código fuente, por supuesto, para que lo podáis utilizar) que sea capaz de descomprimir los ficheros generados por el módem.  De esa manera tendréis todo lo necesario para poder  comprimir un archivo con el módem, enviarlo vía GPRS y descomprimirlo después en nuestro servidor.
 
 
Bueno, espero que os haya interesado el post y que os sea útil algún día, me voy a cenar. ;)

Tags: , , , , , ,

Comments 8 Comentarios »

Aquí cuelgo para quien lo necesite la versión 1.1 (beta por el momento) del software OTAP para la actualización remota del software java de los módems gprs Siemens / Cinterion, como comentaba en un post anterior.

Lo podéis descargar haciendo click aquí.

He añadido algunas cositas con respecto a la versión previa 1.0.  Por ejemplo, quien quiera probar/usar la aplicación y no tenga un servidor HTTP para poner sus archivos JAD y JAR le dejo usar mi servidor.  Para ello fijáos en la pantalla principal de la aplicación:
 

otap-v1-11

 
Arriba, a la derecha, puedes ver un botón “Upload”. Si haces click en el aparerá una pantalla como esta:

otap-http

 
Aquí basta con que selecciones tu fichero JAD y tu fichero JAR y pulses el botón que indica “Subir archivos”.  Los archivos se subirán automáticamente a:  http://www.otap.es/temp/  y será la ruta (URL Jad) que deberás indicar en la aplicación (como puedes ver en la primera imagen de este post).
 
¿Qué no tienes ahora ningún fichero .JAD y .JAR para probar la aplicación?   No te preocupes, aquí te pongo unos. Cuando te bajes los ficheros abre con el bloc de notas el fichero .JAD y fíjate en la ruta del fichero .JAR, te lo comento para que lo tengas en cuenta cuando generes los tuyos, que la ruta al fichero .JAR debe ser correcta.
 
Espero que te sea útil la aplicación. ;)


Puedes comentar este post en el nuevo Foro (click aquí)

- (6) Posts
Tags: , , , , , , ,

Comments No Hay Comentarios »

Si desarrollas aplicaciones en Java para los módems gprs TC65, XT65 (o sus terminales MTX65 o MTX65+G distribuidos por Matrix), tal vez pueda interesarte en alguna ocasión debugar tu aplicación de la manera que te voy a indicar aquí.
 
Como ocurre (o debería ocurrir) al final del desarrollo de cualquier programa, hay una fase de test, una fase en el que se debe probar a fondo la aplicación en busca de cualquier tipo de error que hayamos podido cometer. Si lo errores en nuestra aplicación son fácilmente reproducibles los encontraremos de manera relativamente sencilla, pero en ocasiones puede haber errores que se deban a un cúmulo de cosas o debido a unas situaciones muy concretas que no se reproducen en el laboratorio y sí en la calle.
 
Depurar este tipo de problemas puede llegar a ser realmente complicado, ya que si se producen de forma muy ocasional son difíciles de localizar.
 

Blog de Electrónica Avanzada

  Lee el resto de esta entrada »

Tags: , , , , , , ,

Comments 2 Comentarios »

Tal vez tenía que haber puesto un artículo como el que voy a poner hoy hace ya tiempo, realmente es algo que he comentado bastantes veces en respuestas a preguntas de los usuarios de este blog. Es referente al tema del autobauding y el java.
  
Básicamente lo que quiero decir en este artículo se resume en una línea: si vas a usar java con un módem TC65 o XT65 (o los terminales MTX65 / MTX65+G) no utilices autobauding. Para quien no lo sepa, autobauding es una características de los módems, activable con at+ipr=0, que permite no tener que establecer una velocidad del puerto serie fija al módem, sino que éste, al recibir los primeros datos por el puerto serie “averigua” la velocidad de los datos y se configura para trabajar a esa velocidad).
  
Utilizar autobauding está muy bien en muchas circunstancias, es muy cómodo, pero puede inducir a errores cuando trabajas con Java. Y es que Java y autobauding no se quieren.
 
  
java-autobauding
 
 
¿Y cuales son los problemas?
  
Pues los problemas son varios:

Comments No Hay Comentarios »

 En bastantes ocasiones me ha llegado la pregunta de cómo añadir más datos a un fichero ya existente dentro de la memoria flash de nuestros módems TC65 o XT65 (o de los terminales MTX de Matrix). Por ello hoy voy a poner un pequeño programa java para que ayude a quien no sepa cómo hacer esto. Es muy sencillo.

Básicamente consiste en utilizar el objeto OutputStream en lugar de DataOutputStream (DataOutputStream hereda de OutputStream) que seguro visteis en el post donde tengo la mayoría de los ejemplos java.

Vamos con el ejemplillo de hoy. Vamos a suponer que tenemos un fichero en el sistema de ficheros del módem de nombre “A:/fichero.txt” y con el texto “hola“, por lo que si no lo tienes, crea uno y ponlo dentro del módem.
  

 

Blog de Electrónica Avanzada

 
Lee el resto de esta entrada »

Tags: , , , , , , ,

Comments 7 Comentarios »

Como vimos hace ya un tiempo, con las nuevas versiones de SDK de las nuevas releases de firmware de los módulos TC65 (versión actual 3.0), XT65 (versión actual 2.0) y TC65i (versión actual 1.0) se han incorporado nuevas clases java.

Meses atrás vimos la nueva clase Watchdog. Hoy voy a poner un pequeño ejemplo de uso de las nuevas clases InPort y OutPort que nos permiten de una manera muy sencilla poder gestionar los pines de entradas y salidas digitales de nuestros módems Siemens / Cinterion. ´
 
 

Programación java Siemens


EJEMPLO_GPIO_API
(Download)

Descripción: Para el ejemplo me he basado en el MTX65v3. Como sabéis este teminal dispone de 4 entradas y salidas digitales que son la GPIO1, GPIO2, GPIO3 y GPIO4.

En el ejemplo configuro la GPIO1 y GPIO2 como entradas y la GPIO3 y GPIO4 como salidas y presupongo que se unen directamente, mediante unos cables de conexión, los pines GPIO1 con GPIO3 y GPIO2 con GPIO4. En el ejemplo se van variando el estado de las salidas (GPIO3 y GPIO4) y se va mostrando por la salida estandard (System.out.println) el valor de las entradas (GPIO1 y GPIO2). En el ejemplo java podéis ver que está comentado el código línea por línea por lo que no me extiendo más por aquí. Si utilizáis un MTX65v3 y ejecutáis la aplicación, este debería ser el resultado:

Válido para los módems: TC65 (v3.0), TC65i, XT65 (v2.0) y MTX65v3
 

Espero que os resulte de utilidad. Otro día más.
 
 
P.D. suerte mañana día 22 a todos con la Lotería de Navidad, a ver si hay suerte y cae algo ;)

Tags: , , , , ,

Comments No Hay Comentarios »

El otro día empecé unos capítulos de optimización de aplicaciones J2ME para nuestros módems gprs Siemens / Cinterion TC65 / XT65. Hoy voy con otra entrega que sigue el hilo al anterior, en lo referente a memoria y se trata de la creación de objetos.

En un lenguaje orientado a objetos como es el java en ocasiones tenemos tendencia a crear y utilizar más objetos de los que son realmente necesarios. Como dije anteriormente, en un PC de sobremesa no tiene mayor importancia, pero en un módulo embebido sí que lo tiene. Debemos intentar evitar crear objetos innecesarios, pues cada uno de estos objetos necesitan memoria y su creación además consume un precioso tiempo de CPU.

Además, cuantos más objetos creamos, mayor es la frecuencia en la que el Garbage Collector entrará en acción, lo que se traduce en una bajada de rendimiento de nuestras aplicaciones, pues es como tener otro thread funcionando en background.

Optimizar aplicaciones J2ME

  Lee el resto de esta entrada »

Tags: ,

Comments 1 Comentario »

No es lo mismo realizar aplicaciones para un Core 2 Duo que para un módulo embebido, como puede ser un módem Siemens / Cinterion TC65 ó XT65. Cuando desarrollamos aplicaciones para PCs convencionales, aunque debiéramos intentar optimizarlas, no vamos a notar grandes diferencias si gastamos unos cuantos cientos de KBytes de Ram más o menos, pues a día de hoy casi todo los ordenadores tienen de 1GB de Ram para arriba ni tampoco es crucial si no está todo lo optimizado que pudiera estar el código, cuando estamos hablando de procesadores a 3GHz. Esto es cambio, sí es muy importante para pequeños dispositivos embebidos.

Para el caso de los módulos embebidos hay dos maneras básicas de incrementar el rendimiento de las aplicaciones. Una es tener cuidado con el uso de la memoria, evitando utilizar más memoria de la necesaria. La otra es el tiempo de ejecución del código que implementamos. Por ejemplo en java, al igual que en cualquier lenguaje orientado a objetos, la creación y destrucción de objetos necesita de tiempo de procesador, además de requerir memoria cada objeto instanciado.

Voy a poner una serie de posts breves, por capítulos, sobre cosas a tener en cuenta a la hora de realizar aplicaciones J2ME, para obtener un mejor rendimiendo de las mismas.

Optimizar aplicaciones J2ME

Lee el resto de esta entrada »

Tags: ,

Comments 4 Comentarios »