QR-Code Encode

Na und wer hat nicht schon mal im Bett eine QR-Code Bibliothek überarbeitet?

Oder: Was man über Weihnachten sonst noch alles machen kann.


Mit dem Projekt quirc kann ich schon seit einiger Zeit QR-Codes aus Bildern lesen und ihren Inhalt extrahieren. Doch eigene QR-Codes erzeugen konnte ich mit diese Bibliothek nicht.

Neben anderen (teils sehr aufgeblähten) Projekten fiel mir eines ins Auge:
nämlich github.com/ricmoo/QRCode

Es glänzt durch seine Einfachheit und dem Fehlen von malloc oder anderen Heapallokationen im Quellcode.
Damit ist es ideal für Mikrokontroller Projekt geeignet und auch ein würdiger Kandidat für das GATE Projekt.

Codebase

Leider fielen mir neben der kompakten Codebase auch ein paar Unschönheiten auf. Der Build liefert zahlreiche Warnungen bezüglich nicht zusammenpassenden Datentypen auf.

Es wird wild zwischen 8, 16 und 32 bit Typen hin und her gecastet, während sich auch Wechsel zwischen signed und unsigned häufen.

Aus diesem Grund habe ich einen Fork angelegt und mir vorgenommen, dieses alte Projekt etwas aufzupolieren.

Codeupdate

Tatsächlich lassen sich viele Warnungen durch die Umstellung auf einheitliche Datentypen bzw. typedefs fixen.
An den Stellen, wo wirklich Casts notwendig sind, werden diese explizit durchgeführt, womit der Typenwechsel auch sichtbar wird.

Da der Code bereits im C99 Stil geschrieben ist, ich jedoch noch ältere Compiler unterstützen möchte, habe ich auch hier einiges verschieben müssen.

Die Deklaration von Variablen kommt C90-like an den Anfang jeder Funktion. Und der einmalige Einsatz von lokalen variablen Arraylängen wurde durch eine feste Arraylänge mit einem Maximumwert ersetzt.

Um vom optionalen stdint.h loszukommen, wurden typedefs nach dem Schema qrcode_intX_t eingeführt.

Und am Ende wird CMake benutzt um festzustellen, ob Header und Features vorhanden sind und um die typedefs auf Standards oder Fallback Werte zu setzen.

Fazit

Am Ende habe ich nun eine überarbeitete Version von QRCode, die auch mit meinen Windows CE Builds oder unter Watcom und MS-DOS kompilierbar ist.

Obwohl fast jede Zeile überarbeitet wurde, ist die Funktionalität gleich geblieben.

Und weil die Resultate nicht nur für das GATE Projekt relevant sind, habe ich ein eigenes Repo auf Codeberg dafür angelegt:

codeberg.org/gatelinker/QRCodeGenPort

📧 📋 🐘 | 🔗 🔔
 

Meine Dokus über:
 
Weitere externe Links zu:
Alle extern verlinkten Webseiten stehen nicht in Zusammenhang mit opengate.at.
Für deren Inhalt wird keine Haftung übernommen.



Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!