
Écrits · 31 déc. 2020
Travailler avec du matériel spécial venu de Chine
Développer du logiciel sans mode d'emploi
Ce mois-ci, j'ai reçu un colis de Chine contenant du matériel spécial : des appareils Android avec imprimante intégrée ! Pour faciliter la vie des restaurateurs et commerçants qui utilisent mon appli de commande de repas, je veux que ces appareils impriment automatiquement les nouvelles commandes. Si seulement j'arrive à faire marcher ces machines avec mon logiciel... défi relevé !
Appli de commande de repas
Grâce à une boutique en ligne ultra-optimisée, les gens peuvent commander des repas à emporter ou à se faire livrer. Mes clients sont des restaurateurs et des commerçants qui vendent leurs produits via l'appli. Les commandes sont transmises à la cuisine et aux livreurs, pour que tout soit préparé et livré.

Besoin d'une imprimante
Ces derniers mois, j'ai ajouté des fonctions pour aider mes clients à mieux gérer leurs boutiques en ligne. Une demande revient souvent : se débarrasser de l'ordinateur ou de la tablette qu'ils doivent aujourd'hui utiliser en cuisine pour accéder aux commandes en ligne. Au lieu d'un gros ordinateur encombrant, j'ai cherché une alternative compacte.
Android avec imprimante intégrée
Après avoir fouillé plusieurs places de marché internationales, j'ai réussi à contacter un fabricant chinois qui a créé un appareil Android avec imprimante intégrée ! Quelques semaines plus tard, il est arrivé de Chine : quel monde merveilleux que le nôtre !

C'est un matériel intéressant parce qu'il est :
- compact (comparé à un PC, une tablette ou un ordinateur portable classique)
- il fonctionne sur batterie et sur secteur
- il marche en WiFi et propose l'option internet mobile 4G
- il a un grand écran tactile
- il peut exécuter des applis Android natives
- il peut accéder au web
- il a une imprimante intégrée !

L'imprimante intégrée est super pratique, car elle fait de l'appareil une solution complète pour gérer les commandes en ligne. L'écran tactile permet d'accéder aux commandes, et l'appareil peut être configuré pour les imprimer automatiquement. Cela facilite leur transmission à la cuisine et aux livreurs.

Faire tourner quelque chose / du logiciel
Pour que tout cela fonctionne, je dois pouvoir y exécuter mon propre logiciel. Même s'il tourne sous Android, les appareils sont arrivés sans manuel, sans guide ni kit de développement logiciel. J'ai donc dû faire de la rétro-ingénierie pour entrer dans cet appareil.
Le mieux à faire alors, c'est d'essayer quelque chose que tu connais bien, de voir si tu peux faire tourner une autre de tes applis sur l'appareil. J'ai connecté l'appareil à ma tablette Linux et je me suis mis à bricoler ! Il se trouve que j'avais déjà créé une petite appli Android... elle semblait parfaite pour tester ma liaison de développement avec l'appareil.

L'avantage de faire tourner quelque chose de bien connu sur du matériel inconnu, c'est qu'on obtient une sorte de référence sur ce que le matériel sait faire. Et il s'avère que l'imprimante Android est très capable !
Pas de documentation ni de SDK
Pour exploiter pleinement les capacités du matériel, je devais comprendre comment programmer l'imprimante intégrée. Le fabricant chinois a intégré l'imprimante d'une façon non standard pour Android (pour autant qu'il existe une façon standard sur Android..). Les appareils reçus n'avaient ni logiciel ni code source, vraiment embêtant !
J'ai examiné les numéros de série et de modèle de l'appareil OEM. J'ai cherché le moindre indice et j'ai fouillé internet pour trouver des appareils similaires. Peut-être trouverais-je un morceau de code source (apparenté) qui me donnerait un point de départ pour travailler sur cet appareil.
Rétro-ingénierie de code Java
Après des heures de recherche, j'ai trouvé dans un recoin lointain d'internet un paquet contenant du code source pour un appareil similaire ! Le problème, c'est que... tout était en chinois !


J'ai analysé le code source et compris rapidement les bases. Avec Google Translate, j'ai découvert que certaines parties du code étaient limitées ou pas entièrement prises en charge. Mais au moins, j'avais un point de départ ! Finalement, je n'ai pas seulement réussi à lire le code source chinois, j'ai aussi pu écrire du logiciel pour cet appareil !

L'étape suivante a été de créer un programme de test pour vérifier si le code chinois adapté fonctionnerait vraiment. Si j'y arrivais, je pourrais commencer à écrire du vrai logiciel pour l'imprimante Android, un logiciel que mes clients utiliseront un jour. Eh bien... ça a marché, incroyable ! L'imprimante s'est mise à faire du bruit et hop : un logo Lemmid est apparu !

Conclusion
C'est génial ! Je suis vraiment content d'avoir trouvé comment écrire du logiciel pour ce matériel spécial. Cela me permet d'intégrer le matériel à la plateforme que je construis pour mes clients.
S'il y a une chose à retenir de cet article, c'est qu'il faut parfois simplement essayer et voir si on trouve un moyen de faire marcher les choses. Car c'est seulement quand tu n'essaies pas que tu peux être vraiment certain que ça ne marchera pas !