MCPcopy Create free account
hub / github.com/BruceDevices/firmware / stringtoqr

Function stringtoqr

lib/TFT_eSPI_QRcode/src/qrencode.c:129–198  ·  view source on GitHub ↗

======================================================================== 8 bit data to QR-coded 8 bit data

Source from the content-addressed store, hash-verified

127//========================================================================
128// 8 bit data to QR-coded 8 bit data
129void stringtoqr(void)
130{
131 unsigned i;
132 unsigned size, max;
133 size = strlen((char *) strinbuf);
134
135 max = datablkw * (neccblk1 + neccblk2) + neccblk2;
136 if (size >= max - 2) {
137 size = max - 2;
138 if (VERSION > 9)
139 size--;
140 }
141
142 i = size;
143 if (VERSION > 9) {
144 strinbuf[i + 2] = 0;
145 while (i--) {
146 strinbuf[i + 3] |= strinbuf[i] << 4;
147 strinbuf[i + 2] = strinbuf[i] >> 4;
148 }
149 strinbuf[2] |= size << 4;
150 strinbuf[1] = size >> 4;
151 strinbuf[0] = 0x40 | (size >> 12);
152 } else {
153 strinbuf[i + 1] = 0;
154 while (i--) {
155 strinbuf[i + 2] |= strinbuf[i] << 4;
156 strinbuf[i + 1] = strinbuf[i] >> 4;
157 }
158 strinbuf[1] |= size << 4;
159 strinbuf[0] = 0x40 | (size >> 4);
160 }
161 i = size + 3 - (VERSION < 10);
162 while (i < max) {
163 strinbuf[i++] = 0xec;
164 // buffer has room if (i == max) break;
165 strinbuf[i++] = 0x11;
166 }
167
168 // calculate and append ECC
169 unsigned char *ecc = &strinbuf[max];
170 unsigned char *dat = strinbuf;
171 initrspoly(eccblkwid,qrframe);
172
173 for (i = 0; i < neccblk1; i++) {
174 appendrs(dat, datablkw, ecc, eccblkwid, qrframe);
175 dat += datablkw;
176 ecc += eccblkwid;
177 }
178 for (i = 0; i < neccblk2; i++) {
179 appendrs(dat, datablkw + 1, ecc, eccblkwid, qrframe);
180 dat += datablkw + 1;
181 ecc += eccblkwid;
182 }
183 unsigned j;
184 dat = qrframe;
185 for (i = 0; i < datablkw; i++) {
186 for (j = 0; j < neccblk1; j++)

Callers 1

qrencodeFunction · 0.85

Calls 2

initrspolyFunction · 0.85
appendrsFunction · 0.85

Tested by

no test coverage detected