Dec. 31, 2020

Trabajar con hardware especial de China

Sobre el desarrollo de software sin manual

Este mes recibí un envío de China que contiene un hardware especial, ¡dispositivos Android con impresoras integradas! Para facilitarles la vida a los dueños de restaurantes y negocios que usan mi aplicación de pedidos de comida, quiero que estos dispositivos impriman automáticamente los nuevos pedidos. Si tan solo pudiera hacer que estas máquinas funcionen con mi software... ¡reto aceptado!

Aplicación para pedir comida

A través de una tienda web altamente optimizada la gente puede pedir comida para llevar y a domicilio. Mis clientes son restaurantes y dueños de tiendas que venden sus productos a través de la aplicación. Los pedidos se envían al personal de cocina y reparto, asegurándose de que todo se prepare y entregue.

La gente usa la app para pedir comida - los pedidos se envían a la cocina y al personal de reparto
La gente usa la app para pedir comida - los pedidos se envían a la cocina y al personal de reparto

Necesidad de una impresora

Durante los últimos meses he estado añadiendo funciones para ayudar a mis clientes a gestionar mejor sus tiendas online. Una solicitud frecuente es deshacerse del ordenador o tableta en la cocina que ahora tienen que usar para acceder a los pedidos online. En lugar de un ordenador grande y voluminoso, busqué una alternativa compacta.

Android con impresora integrada

Después de investigar en varios mercados internacionales, pude contactar con un proveedor de hardware chino que ha creado un dispositivo Android con una impresora integrada. Unas semanas más tarde llegó de China, ¡qué mundo tan maravilloso en el que vivimos!

Terminal Android portátil - hardware OEM directamente de China
Terminal Android portátil - hardware OEM directamente de China

Este es un hardware interesante tal como es:

Funciona con Android - con algo de salsa china (en sentido figurado...)
Funciona con Android - con algo de salsa china (en sentido figurado...)

La impresora integrada es súper práctica, ya que permite que el dispositivo se convierta en una solución total para la gestión de pedidos online. Utilizando la pantalla táctil se puede acceder a los pedidos y el dispositivo se puede configurar para imprimirlos automáticamente. Esto permite un fácil envío al personal de cocina y reparto.

Su truco de fiesta es la impresora integrada - súper útil en el contexto de la gestión de pedidos (online)
Su truco de fiesta es la impresora integrada - súper útil en el contexto de la gestión de pedidos (online)

Ejecutando algo / software

Para que todo esto suceda, necesito poder ejecutar software personalizado en él. Aunque funciona con Android, los dispositivos vienen sin manuales, guías o kit de desarrollo de software. Esto significa que tuve que aplicar ingeniería inversa para acceder a este dispositivo.

Lo mejor que se puede hacer entonces es probar algo que se conoce bien, ver si se puede hacer funcionar otra de tus aplicaciones en el dispositivo. Conecté el dispositivo a mi tableta Linux y ¡empecé a trastear! Resulta que he creado una pequeña aplicación Android antes... que parecía el candidato perfecto para probar mi enlace de desarrollo con el dispositivo.

Snake '97 en la impresora Lemmid - ¡ja!
Snake '97 en la impresora Lemmid - ¡ja!

La ventaja de ejecutar algo bien conocido en un hardware desconocido es que se puede establecer algún tipo de referencia sobre las capacidades del hardware. ¡Resulta que la impresora Android es bastante capaz!

Sin documentación ni SDK

Para aprovechar al máximo las capacidades del hardware, necesitaba averiguar cómo programar la impresora integrada. El proveedor de hardware chino integró la impresora de una manera no estándar en Android (por mucho que haya una manera estándar en Android..). Los dispositivos que recibí venían sin ningún software o código fuente, ¡una verdadera lástima!

Investigué los números de serie y de modelo del dispositivo OEM. Busqué cualquier pista que pudiera encontrar y busqué en Internet dispositivos similares. Tal vez pudiera encontrar algún fragmento de código fuente (relacionado) que me diera un punto de partida para trabajar en este dispositivo.

Ingeniería inversa de código Java

Después de horas de investigación, ¡encontré un paquete en una parte remota de Internet que contenía algún código fuente para un dispositivo similar! El problema era... ¡que estaba todo en chino!

Código chino para hacer funcionar la impresora... ¿cómo se puede entender esto?
Código chino para hacer funcionar la impresora... ¿cómo se puede entender esto?
¡Google Translate al rescate!
¡Google Translate al rescate!

Analicé el código fuente y rápidamente descubrí cómo funcionaban los aspectos básicos. Usando el Traductor de Google descubrí que algunas partes del código fuente eran limitadas o no estaban totalmente soportadas. ¡Pero al menos me ofreció un punto de partida! Finalmente, no solo fui capaz de leer el código fuente chino, ¡sino que también fui capaz de escribir software para él!

Código Java para controlar la impresora
Código Java para controlar la impresora

El siguiente paso fue crear un programa de prueba que pudiera comprobar si el código fuente chino adaptado realmente funcionaba. Si tenía éxito, esto me permitiría empezar a escribir software real para la impresora Android, software que finalmente será utilizado por mis clientes. Bueno... ¡he aquí que funcionó! La impresora empezó a hacer ruido y ¡voilá: apareció un logotipo de Lemmid!

¡SÍ! ¡La impresora imprime el logo de
¡SÍ! ¡La impresora imprime el logo de "Lemmid" en un ticket!

Conclusión

¡Esto es brillante! Estoy muy contento de haber encontrado una manera de escribir software para este hardware especial. Me permite integrar el hardware en la plataforma que estoy construyendo para mis clientes.

Si hay algo que aprender de este post es que a veces simplemente hay que intentar ver si se puede encontrar una manera de hacer que las cosas funcionen. ¡Porque solo si no lo intentas, puedes estar realmente seguro de que no funcionará!