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.

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!

Este es un hardware interesante tal como es:
- compacto (comparado con un PC, tableta o portátil convencional)
- puede funcionar con baterías y con alimentación directa
- funciona con WiFi y tiene la opción de internet móvil 4G
- tiene una gran pantalla táctil
- puede ejecutar aplicaciones nativas de Android
- puede acceder a la web
- ¡tiene una impresora integrada!

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.

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.

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!


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!

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!

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á!