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.

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!

Dit is een interessant stuk hardware omdat het:
- compact is (vergeleken met een conventionele pc, tablet of laptop)
- het kan werken op batterijen en op netstroom
- werkt op wifi en heeft de optie voor 4G mobiel internet
- een groot touchscreen heeft
- het native Android-apps kan draaien
- het toegang heeft tot internet
- het een geïntegreerde printer heeft!

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.

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.

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!


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!

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!

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!