31 dec. 2020

Werken met speciale hardware uit China

Over softwareontwikkeling zonder handleiding

Deze maand ontving ik een zending uit China met speciale hardware, Android-apparaten met ingebouwde printers! Om het leven makkelijker te maken voor de restaurant- en bedrijfseigenaren die mijn app voor het bestellen van eten gebruiken, wil ik dat deze apparaten automatisch nieuwe bestellingen printen. Als ik deze machines maar aan de praat krijg met mijn software... uitdaging geaccepteerd!

Bestel-app voor eten

Via een geoptimaliseerde webshop kunnen mensen eten bestellen voor afhaal en bezorging. Mijn klanten zijn restaurants en winkeleigenaren die hun producten via de app verkopen. Bestellingen worden doorgestuurd naar keuken- en bezorgpersoneel, zodat alles wordt voorbereid en bezorgd.

Mensen gebruiken de app om eten te bestellen - bestellingen worden doorgestuurd naar keuken- en bezorgpersoneel
Mensen gebruiken de app om eten te bestellen - bestellingen worden doorgestuurd naar keuken- en bezorgpersoneel

Behoefte aan een printer

De afgelopen maanden heb ik functies toegevoegd om mijn klanten te helpen hun online winkels beter te beheren. Een veelgehoorde vraag is om de computer of tablet in de keuken, die ze nu moeten gebruiken om online bestellingen te bekijken, te vervangen. In plaats van een grote en logge computer zocht ik naar een compact alternatief.

Android met ingebouwde printer

Na wat speurwerk op verschillende internationale marktplaatsen, kwam ik in contact met een Chinese hardwareleverancier die een Android-apparaat met een geïntegreerde printer heeft gemaakt! Een paar weken later arriveerde het uit China - wat een geweldige wereld leven we toch in!

Handheld Android Terminal - OEM hardware rechtstreeks uit China
Handheld Android Terminal - OEM hardware rechtstreeks uit China

Dit is een interessant stuk hardware omdat het:

Het draait op Android - met wat Chinese saus erop (figuurlijk gesproken...)
Het draait op Android - met wat Chinese saus erop (figuurlijk gesproken...)

De geïntegreerde printer is super praktisch omdat het apparaat hierdoor een totaaloplossing wordt voor het afhandelen van online bestellingen. Via het touchscreen kunnen bestellingen worden bekeken en kan het apparaat worden geconfigureerd om ze automatisch af te drukken. Dit zorgt voor eenvoudige doorsturing naar het keuken- en bezorgpersoneel.

Zijn party trick is de ingebouwde printer - super handig in de context van het afhandelen van (online) bestellingen
Zijn party trick is de ingebouwde printer - super handig in de context van het afhandelen van (online) bestellingen

Iets / software draaien

Om dit allemaal mogelijk te maken, moet ik aangepaste software erop kunnen draaien. Hoewel het Android draait, werden de apparaten geleverd zonder handleidingen, instructies of software development kit. Dit betekent dat ik mijn weg in dit apparaat moest reverse-engineeren.

Het beste wat je dan kunt doen, is iets proberen dat je goed kent, kijken of je een andere van je apps op het apparaat kunt laten werken. Ik heb het apparaat aangesloten op mijn Linux tablet en ben begonnen met knutselen! Ik heb toevallig eerder een kleine Android app gemaakt... dat leek de perfecte kandidaat om mijn development uplink naar het apparaat te testen.

Snake '97 op de Lemmid Printer - ha!
Snake '97 op de Lemmid Printer - ha!

Het voordeel van het draaien van iets bekends op onbekende hardware is dat je een soort referentie kunt vaststellen voor de mogelijkheden van de hardware. Het blijkt dat de Android-printer behoorlijk capabel is!

Geen documentatie of SDK

Om de mogelijkheden van de hardware volledig te benutten, moest ik uitzoeken hoe ik de geïntegreerde printer moest programmeren. De Chinese hardwareleverancier heeft de printer op een niet-standaard Android-manier geïntegreerd (voor zover er een standaard manier is op Android..). De apparaten die ik ontving, werden geleverd zonder software of broncode, echt jammer!

Ik heb de serie- en modelnummers op het OEM-apparaat onderzocht. Ik zocht naar elke aanwijzing die ik kon vinden en ik zocht op internet naar vergelijkbare apparaten. Misschien kon ik een stukje (gerelateerde) broncode vinden dat me een startpunt zou geven om aan dit apparaat te werken.

Java-code reverse-engineeren

Na uren onderzoek vond ik een pakket op een afgelegen deel van het internet dat wat broncode bevatte voor een soortgelijk apparaat! Het probleem was... het was allemaal in het Chinees!

Chinese code om de printer te laten werken... hoe kan iemand dit ooit begrijpen?
Chinese code om de printer te laten werken... hoe kan iemand dit ooit begrijpen?
Google Translate te hulp!
Google Translate te hulp!

Ik analyseerde de broncode en kwam er snel achter hoe de basisprincipes werkten. Met behulp van Google Translate ontdekte ik dat sommige delen van de broncode beperkt of niet volledig ondersteund waren. Maar het bood me tenminste een startpunt! Uiteindelijk was ik niet alleen in staat om de Chinese broncode te lezen, ik kon er ook software voor schrijven!

Java code om de printer aan te sturen
Java code om de printer aan te sturen

De volgende stap was het maken van een testprogramma om te testen of de aangepaste Chinese broncode daadwerkelijk zou werken. Als dit zou lukken, zou ik echte software voor de Android-printer kunnen gaan schrijven, software die uiteindelijk door mijn klanten zal worden gebruikt. Nou... zie daar, het werkte! De printer begon wat geluid te maken en voila: een Lemmid Logo verscheen!

YES! De printer print het
YES! De printer print het "Lemmid" logo op een ticket!

Conclusie

Dit is geweldig! Ik ben erg blij dat ik een manier heb gevonden om software te schrijven voor deze speciale hardware. Het stelt me in staat om de hardware te integreren in het platform dat ik bouw voor mijn klanten.

Als er één ding is dat je uit dit bericht kunt meenemen, is het dat je soms gewoon moet proberen en kijken of je een manier kunt vinden om dingen te laten werken. Want alleen als je het niet probeert, kun je er echt zeker van zijn dat het niet zal werken!