Nano QR kód generáló
Mivel több HUP-os fórumtárs is mikrokontrollerezik, ezért gondoltam megosztom, hátha másnak is hasznos lesz.
Összedobtam egy minimalista QR kód generálót ANSI C-ben, kifejezetten URL-ek kódolására:
- Szabad és Nyílt Forráskódú, MIT licenszű
- irtó kicsi (kb. 150 SLoC), egyetlen egy függvény csak
- nincs semmi függősége (még libc se, de még csak libc fejlécek sem kellenek neki)
- nem foglal memóriát egyáltalán
- csak pár bájtot eszik a veremből
- pofon egyszerű használni, nem kell konfigurálni
- egy 53 x 53 pixeles szürkeárnyalatos képet köp ki (csak 0 (előtér) ill. 255 (háttér) színekkel)
- a bemenete egy legfeljebb 128 bájtos URL (vagy hát bármilyen UTF-8 sztring igazából)
Példa használatra (csak példa, semmilyen domain sem query paraméter nincs a függvénykönyvtárban, bármi lehet):
#define NANOQR_IMPLEMENTATION #include "nanoqr.h" uint8_t image[53][53]; nanoqr(image, "https://gitlab.com/bztsrc/nanoqr?errcode=1234&errpos=1234&when=1234");
Ennyi. Aztán a megadott URL-re lehet rakni egy JavaScriptet, ami megcsócsálja és ember számára érthető hibaüzenetekké formálja az URL paraméterében megadott kódokat.
Technikai részletek: QR version 9-et generál (mert a 128 bájtos tárhely elfogadhatónak tűnt, a 53 x 53 pixeles méret meg elég kicsi ahhoz, hogy elférjen LCD-kre, de akár LED-es kijezlőkre is). A hibajavító kód QUARTILE (eggyel rosszabb csak, mint a legjobb opció), a maszkszint fixen 1-es, az adathalmaza pedig bájt (mert az alfanumerikusból hiányzik a ?, &, =, szóval nemigazán kódolható vele URL). Ezeket bedrótoztam az egyszerűség kedvéért, hogy ne kelljen semmit állítgatni. Ha valakinek ez nem felelne meg, akkor nekik ott a Nayuki QR kódgeneráló, de az többet eszik és bonyibb használni is.
SZERK: lett nagytesója, MiniQR, ez kb ugyanaz használni, de az összes QR verziót tudja (V1-től V40-ig), dinamikusan méretezi a kimeneti képet (21-től 177 pixelig), a bemenete meg egészen elképesztő 1663 bájtos is lehet. Ja, és ez bűntetőpontokat számol a maszkokra, és asszerint választja ki. Mindezért cserébe kb. kétszer akkora a kód, 300 SLoC, és több memóriát is igényel, valamint már nemcsak egyetlen függvényből áll (a publikus API-ja továbbra is egyetlen fgv.).
#define MINIQR_IMPLEMENTATION #include "miniqr.h" uint8_t image[177 * 177]; int wh = miniqr(image, "https://gitlab.com/bztsrc/nanoqr?errcode=1234&errpos=1234&when=1234");
A visszaadott kép "wh" x "wh" pixeles, lehet hogy csak 53 x 53.
- Tovább (Nano QR kód generáló)
- 974 megtekintés