libwebsockets
Lightweight C library for HTML5 websockets
Toggle main menu visibility
Loading...
Searching...
No Matches
qrcodegen.h
Go to the documentation of this file.
1
/*
2
* QR Code generator library (C)
3
*
4
* Copyright (c) Project Nayuki. (MIT License)
5
* https://www.nayuki.io/page/qr-code-generator-library
6
*
7
* Permission is hereby granted, free of charge, to any person obtaining a copy of
8
* this software and associated documentation files (the "Software"), to deal in
9
* the Software without restriction, including without limitation the rights to
10
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
11
* the Software, and to permit persons to whom the Software is furnished to do so,
12
* subject to the following conditions:
13
* - The above copyright notice and this permission notice shall be included in
14
* all copies or substantial portions of the Software.
15
* - The Software is provided "as is", without warranty of any kind, express or
16
* implied, including but not limited to the warranties of merchantability,
17
* fitness for a particular purpose and noninfringement. In no event shall the
18
* authors or copyright holders be liable for any claim, damages or other
19
* liability, whether in an action of contract, tort or otherwise, arising from,
20
* out of or in connection with the Software or the use or other dealings in the
21
* Software.
22
*/
23
24
#pragma once
25
26
#include <stdbool.h>
27
#include <stddef.h>
28
#include <stdint.h>
29
30
31
#ifdef __cplusplus
32
extern
"C"
{
33
#endif
34
35
36
/*
37
* This library creates QR Code symbols, which is a type of two-dimension barcode.
38
* Invented by Denso Wave and described in the ISO/IEC 18004 standard.
39
* A QR Code structure is an immutable square grid of dark and light cells.
40
* The library provides functions to create a QR Code from text or binary data.
41
* The library covers the QR Code Model 2 specification, supporting all versions (sizes)
42
* from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
43
*
44
* Ways to create a QR Code object:
45
* - High level: Take the payload data and call qrcodegen_encodeText() or qrcodegen_encodeBinary().
46
* - Low level: Custom-make the list of segments and call
47
* qrcodegen_encodeSegments() or qrcodegen_encodeSegmentsAdvanced().
48
* (Note that all ways require supplying the desired error correction level and various byte buffers.)
49
*/
50
51
52
/*---- Enum and struct types----*/
53
54
/*
55
* The error correction level in a QR Code symbol.
56
*/
57
enum
qrcodegen_Ecc
{
58
// Must be declared in ascending order of error protection
59
// so that an internal qrcodegen function works properly
60
qrcodegen_Ecc_LOW
= 0 ,
// The QR Code can tolerate about 7% erroneous codewords
61
qrcodegen_Ecc_MEDIUM
,
// The QR Code can tolerate about 15% erroneous codewords
62
qrcodegen_Ecc_QUARTILE
,
// The QR Code can tolerate about 25% erroneous codewords
63
qrcodegen_Ecc_HIGH
,
// The QR Code can tolerate about 30% erroneous codewords
64
};
65
66
67
/*
68
* The mask pattern used in a QR Code symbol.
69
*/
70
enum
qrcodegen_Mask
{
71
// A special value to tell the QR Code encoder to
72
// automatically select an appropriate mask pattern
73
qrcodegen_Mask_AUTO
= -1,
74
// The eight actual mask patterns
75
qrcodegen_Mask_0
= 0,
76
qrcodegen_Mask_1
,
77
qrcodegen_Mask_2
,
78
qrcodegen_Mask_3
,
79
qrcodegen_Mask_4
,
80
qrcodegen_Mask_5
,
81
qrcodegen_Mask_6
,
82
qrcodegen_Mask_7
,
83
};
84
85
86
/*
87
* Describes how a segment's data bits are interpreted.
88
*/
89
enum
qrcodegen_Mode
{
90
qrcodegen_Mode_NUMERIC
= 0x1,
91
qrcodegen_Mode_ALPHANUMERIC
= 0x2,
92
qrcodegen_Mode_BYTE
= 0x4,
93
qrcodegen_Mode_KANJI
= 0x8,
94
qrcodegen_Mode_ECI
= 0x7,
95
};
96
97
98
/*
99
* A segment of character/binary/control data in a QR Code symbol.
100
* The mid-level way to create a segment is to take the payload data
101
* and call a factory function such as qrcodegen_makeNumeric().
102
* The low-level way to create a segment is to custom-make the bit buffer
103
* and initialize a qrcodegen_Segment struct with appropriate values.
104
* Even in the most favorable conditions, a QR Code can only hold 7089 characters of data.
105
* Any segment longer than this is meaningless for the purpose of generating QR Codes.
106
* Moreover, the maximum allowed bit length is 32767 because
107
* the largest QR Code (version 40) has 31329 modules.
108
*/
109
struct
qrcodegen_Segment
{
110
// The mode indicator of this segment.
111
enum
qrcodegen_Mode
mode
;
112
113
// The length of this segment's unencoded data. Measured in characters for
114
// numeric/alphanumeric/kanji mode, bytes for byte mode, and 0 for ECI mode.
115
// Always zero or positive. Not the same as the data's bit length.
116
int
numChars
;
117
118
// The data bits of this segment, packed in bitwise big endian.
119
// Can be null if the bit length is zero.
120
uint8_t
*
data
;
121
122
// The number of valid data bits used in the buffer. Requires
123
// 0 <= bitLength <= 32767, and bitLength <= (capacity of data array) * 8.
124
// The character count (numChars) must agree with the mode and the bit buffer length.
125
int
bitLength
;
126
};
127
128
129
130
/*---- Macro constants and functions ----*/
131
132
#define qrcodegen_VERSION_MIN 1
// The minimum version number supported in the QR Code Model 2 standard
133
#define qrcodegen_VERSION_MAX 40
// The maximum version number supported in the QR Code Model 2 standard
134
135
// Calculates the number of bytes needed to store any QR Code up to and including the given version number,
136
// as a compile-time constant. For example, 'uint8_t buffer[qrcodegen_BUFFER_LEN_FOR_VERSION(25)];'
137
// can store any single QR Code from version 1 to 25 (inclusive). The result fits in an int (or int16).
138
// Requires qrcodegen_VERSION_MIN <= n <= qrcodegen_VERSION_MAX.
139
#define qrcodegen_BUFFER_LEN_FOR_VERSION(n) ((((n) * 4 + 17) * ((n) * 4 + 17) + 7) / 8 + 1)
140
141
// The worst-case number of bytes needed to store one QR Code, up to and including
142
// version 40. This value equals 3918, which is just under 4 kilobytes.
143
// Use this more convenient value to avoid calculating tighter memory bounds for buffers.
144
#define qrcodegen_BUFFER_LEN_MAX qrcodegen_BUFFER_LEN_FOR_VERSION(qrcodegen_VERSION_MAX)
145
146
147
148
/*---- Functions (high level) to generate QR Codes ----*/
149
150
/*
151
* Encodes the given text string to a QR Code, returning true if successful.
152
* If the data is too long to fit in any version in the given range
153
* at the given ECC level, then false is returned.
154
*
155
* The input text must be encoded in UTF-8 and contain no NULs.
156
* Requires 1 <= minVersion <= maxVersion <= 40.
157
*
158
* The smallest possible QR Code version within the given range is automatically
159
* chosen for the output. Iff boostEcl is true, then the ECC level of the result
160
* may be higher than the ecl argument if it can be done without increasing the
161
* version. The mask is either between qrcodegen_Mask_0 to 7 to force that mask, or
162
* qrcodegen_Mask_AUTO to automatically choose an appropriate mask (which may be slow).
163
*
164
* About the arrays, letting len = qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion):
165
* - Before calling the function:
166
* - The array ranges tempBuffer[0 : len] and qrcode[0 : len] must allow
167
* reading and writing; hence each array must have a length of at least len.
168
* - The two ranges must not overlap (aliasing).
169
* - The initial state of both ranges can be uninitialized
170
* because the function always writes before reading.
171
* - After the function returns:
172
* - Both ranges have no guarantee on which elements are initialized and what values are stored.
173
* - tempBuffer contains no useful data and should be treated as entirely uninitialized.
174
* - If successful, qrcode can be passed into qrcodegen_getSize() and qrcodegen_getModule().
175
*
176
* If successful, the resulting QR Code may use numeric,
177
* alphanumeric, or byte mode to encode the text.
178
*
179
* In the most optimistic case, a QR Code at version 40 with low ECC
180
* can hold any UTF-8 string up to 2953 bytes, or any alphanumeric string
181
* up to 4296 characters, or any digit string up to 7089 characters.
182
* These numbers represent the hard upper limit of the QR Code standard.
183
*
184
* Please consult the QR Code specification for information on
185
* data capacities per version, ECC level, and text encoding mode.
186
*/
187
LWS_VISIBLE
bool
qrcodegen_encodeText
(
const
char
*text,
uint8_t
tempBuffer[],
uint8_t
qrcode[],
188
enum
qrcodegen_Ecc
ecl,
int
minVersion,
int
maxVersion,
enum
qrcodegen_Mask
mask,
bool
boostEcl);
189
190
191
/*
192
* Encodes the given binary data to a QR Code, returning true if successful.
193
* If the data is too long to fit in any version in the given range
194
* at the given ECC level, then false is returned.
195
*
196
* Requires 1 <= minVersion <= maxVersion <= 40.
197
*
198
* The smallest possible QR Code version within the given range is automatically
199
* chosen for the output. Iff boostEcl is true, then the ECC level of the result
200
* may be higher than the ecl argument if it can be done without increasing the
201
* version. The mask is either between qrcodegen_Mask_0 to 7 to force that mask, or
202
* qrcodegen_Mask_AUTO to automatically choose an appropriate mask (which may be slow).
203
*
204
* About the arrays, letting len = qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion):
205
* - Before calling the function:
206
* - The array ranges dataAndTemp[0 : len] and qrcode[0 : len] must allow
207
* reading and writing; hence each array must have a length of at least len.
208
* - The two ranges must not overlap (aliasing).
209
* - The input array range dataAndTemp[0 : dataLen] should normally be
210
* valid UTF-8 text, but is not required by the QR Code standard.
211
* - The initial state of dataAndTemp[dataLen : len] and qrcode[0 : len]
212
* can be uninitialized because the function always writes before reading.
213
* - After the function returns:
214
* - Both ranges have no guarantee on which elements are initialized and what values are stored.
215
* - dataAndTemp contains no useful data and should be treated as entirely uninitialized.
216
* - If successful, qrcode can be passed into qrcodegen_getSize() and qrcodegen_getModule().
217
*
218
* If successful, the resulting QR Code will use byte mode to encode the data.
219
*
220
* In the most optimistic case, a QR Code at version 40 with low ECC can hold any byte
221
* sequence up to length 2953. This is the hard upper limit of the QR Code standard.
222
*
223
* Please consult the QR Code specification for information on
224
* data capacities per version, ECC level, and text encoding mode.
225
*/
226
LWS_VISIBLE
bool
qrcodegen_encodeBinary
(
uint8_t
dataAndTemp[],
size_t
dataLen,
uint8_t
qrcode[],
227
enum
qrcodegen_Ecc
ecl,
int
minVersion,
int
maxVersion,
enum
qrcodegen_Mask
mask,
bool
boostEcl);
228
229
230
/*---- Functions (low level) to generate QR Codes ----*/
231
232
/*
233
* Encodes the given segments to a QR Code, returning true if successful.
234
* If the data is too long to fit in any version at the given ECC level,
235
* then false is returned.
236
*
237
* The smallest possible QR Code version is automatically chosen for
238
* the output. The ECC level of the result may be higher than the
239
* ecl argument if it can be done without increasing the version.
240
*
241
* About the byte arrays, letting len = qrcodegen_BUFFER_LEN_FOR_VERSION(qrcodegen_VERSION_MAX):
242
* - Before calling the function:
243
* - The array ranges tempBuffer[0 : len] and qrcode[0 : len] must allow
244
* reading and writing; hence each array must have a length of at least len.
245
* - The two ranges must not overlap (aliasing).
246
* - The initial state of both ranges can be uninitialized
247
* because the function always writes before reading.
248
* - The input array segs can contain segments whose data buffers overlap with tempBuffer.
249
* - After the function returns:
250
* - Both ranges have no guarantee on which elements are initialized and what values are stored.
251
* - tempBuffer contains no useful data and should be treated as entirely uninitialized.
252
* - Any segment whose data buffer overlaps with tempBuffer[0 : len]
253
* must be treated as having invalid values in that array.
254
* - If successful, qrcode can be passed into qrcodegen_getSize() and qrcodegen_getModule().
255
*
256
* Please consult the QR Code specification for information on
257
* data capacities per version, ECC level, and text encoding mode.
258
*
259
* This function allows the user to create a custom sequence of segments that switches
260
* between modes (such as alphanumeric and byte) to encode text in less space.
261
* This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
262
*/
263
LWS_VISIBLE
bool
qrcodegen_encodeSegments
(
const
struct
qrcodegen_Segment
segs[],
size_t
len,
264
enum
qrcodegen_Ecc
ecl,
uint8_t
tempBuffer[],
uint8_t
qrcode[]);
265
266
267
/*
268
* Encodes the given segments to a QR Code, returning true if successful.
269
* If the data is too long to fit in any version in the given range
270
* at the given ECC level, then false is returned.
271
*
272
* Requires 1 <= minVersion <= maxVersion <= 40.
273
*
274
* The smallest possible QR Code version within the given range is automatically
275
* chosen for the output. Iff boostEcl is true, then the ECC level of the result
276
* may be higher than the ecl argument if it can be done without increasing the
277
* version. The mask is either between qrcodegen_Mask_0 to 7 to force that mask, or
278
* qrcodegen_Mask_AUTO to automatically choose an appropriate mask (which may be slow).
279
*
280
* About the byte arrays, letting len = qrcodegen_BUFFER_LEN_FOR_VERSION(qrcodegen_VERSION_MAX):
281
* - Before calling the function:
282
* - The array ranges tempBuffer[0 : len] and qrcode[0 : len] must allow
283
* reading and writing; hence each array must have a length of at least len.
284
* - The two ranges must not overlap (aliasing).
285
* - The initial state of both ranges can be uninitialized
286
* because the function always writes before reading.
287
* - The input array segs can contain segments whose data buffers overlap with tempBuffer.
288
* - After the function returns:
289
* - Both ranges have no guarantee on which elements are initialized and what values are stored.
290
* - tempBuffer contains no useful data and should be treated as entirely uninitialized.
291
* - Any segment whose data buffer overlaps with tempBuffer[0 : len]
292
* must be treated as having invalid values in that array.
293
* - If successful, qrcode can be passed into qrcodegen_getSize() and qrcodegen_getModule().
294
*
295
* Please consult the QR Code specification for information on
296
* data capacities per version, ECC level, and text encoding mode.
297
*
298
* This function allows the user to create a custom sequence of segments that switches
299
* between modes (such as alphanumeric and byte) to encode text in less space.
300
* This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
301
*/
302
LWS_VISIBLE
bool
qrcodegen_encodeSegmentsAdvanced
(
const
struct
qrcodegen_Segment
segs[],
size_t
len,
enum
qrcodegen_Ecc
ecl,
303
int
minVersion,
int
maxVersion,
enum
qrcodegen_Mask
mask,
bool
boostEcl,
uint8_t
tempBuffer[],
uint8_t
qrcode[]);
304
305
306
/*
307
* Tests whether the given string can be encoded as a segment in numeric mode.
308
* A string is encodable iff each character is in the range 0 to 9.
309
*/
310
LWS_VISIBLE
bool
qrcodegen_isNumeric
(
const
char
*text);
311
312
313
/*
314
* Tests whether the given string can be encoded as a segment in alphanumeric mode.
315
* A string is encodable iff each character is in the following set: 0 to 9, A to Z
316
* (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.
317
*/
318
LWS_VISIBLE
bool
qrcodegen_isAlphanumeric
(
const
char
*text);
319
320
321
/*
322
* Returns the number of bytes (uint8_t) needed for the data buffer of a segment
323
* containing the given number of characters using the given mode. Notes:
324
* - Returns SIZE_MAX on failure, i.e. numChars > INT16_MAX or the internal
325
* calculation of the number of needed bits exceeds INT16_MAX (i.e. 32767).
326
* - Otherwise, all valid results are in the range [0, ceil(INT16_MAX / 8)], i.e. at most 4096.
327
* - It is okay for the user to allocate more bytes for the buffer than needed.
328
* - For byte mode, numChars measures the number of bytes, not Unicode code points.
329
* - For ECI mode, numChars must be 0, and the worst-case number of bytes is returned.
330
* An actual ECI segment can have shorter data. For non-ECI modes, the result is exact.
331
*/
332
LWS_VISIBLE
size_t
qrcodegen_calcSegmentBufferSize
(
enum
qrcodegen_Mode
mode,
size_t
numChars);
333
334
335
/*
336
* Returns a segment representing the given binary data encoded in
337
* byte mode. All input byte arrays are acceptable. Any text string
338
* can be converted to UTF-8 bytes and encoded as a byte mode segment.
339
*/
340
LWS_VISIBLE
struct
qrcodegen_Segment
qrcodegen_makeBytes
(const
uint8_t
data
[], size_t len,
uint8_t
buf[]);
341
342
343
/*
344
* Returns a segment representing the given string of decimal digits encoded in numeric mode.
345
*/
346
LWS_VISIBLE
struct
qrcodegen_Segment
qrcodegen_makeNumeric
(const char *digits,
uint8_t
buf[]);
347
348
349
/*
350
* Returns a segment representing the given text string encoded in alphanumeric mode.
351
* The characters allowed are: 0 to 9, A to Z (uppercase only), space,
352
* dollar, percent, asterisk, plus, hyphen, period, slash, colon.
353
*/
354
LWS_VISIBLE
struct
qrcodegen_Segment
qrcodegen_makeAlphanumeric
(const char *text,
uint8_t
buf[]);
355
356
357
/*
358
* Returns a segment representing an Extended Channel Interpretation
359
* (ECI) designator with the given assignment value.
360
*/
361
LWS_VISIBLE
struct
qrcodegen_Segment
qrcodegen_makeEci
(long assignVal,
uint8_t
buf[]);
362
363
364
/*---- Functions to extract raw data from QR Codes ----*/
365
366
/*
367
* Returns the side length of the given QR Code, assuming that encoding succeeded.
368
* The result is in the range [21, 177]. Note that the length of the array buffer
369
* is related to the side length - every 'uint8_t qrcode[]' must have length at least
370
* qrcodegen_BUFFER_LEN_FOR_VERSION(version), which equals ceil(size^2 / 8 + 1).
371
*/
372
LWS_VISIBLE
int
qrcodegen_getSize
(
const
uint8_t
qrcode[]);
373
374
375
/*
376
* Returns the color of the module (pixel) at the given coordinates, which is false
377
* for light or true for dark. The top left corner has the coordinates (x=0, y=0).
378
* If the given coordinates are out of bounds, then false (light) is returned.
379
*/
380
LWS_VISIBLE
bool
qrcodegen_getModule
(
const
uint8_t
qrcode[],
int
x,
int
y);
381
382
383
#ifdef __cplusplus
384
}
385
#endif
uint8_t
unsigned char uint8_t
Definition
libwebsockets.h:699
LWS_VISIBLE
#define LWS_VISIBLE
Definition
libwebsockets.h:291
qrcodegen_makeBytes
LWS_VISIBLE struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[])
qrcodegen_getModule
LWS_VISIBLE bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y)
qrcodegen_Segment::data
uint8_t * data
Definition
qrcodegen.h:120
qrcodegen_encodeBinary
LWS_VISIBLE bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[], enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl)
qrcodegen_isNumeric
LWS_VISIBLE bool qrcodegen_isNumeric(const char *text)
qrcodegen_makeNumeric
LWS_VISIBLE struct qrcodegen_Segment qrcodegen_makeNumeric(const char *digits, uint8_t buf[])
qrcodegen_Segment::numChars
int numChars
Definition
qrcodegen.h:116
qrcodegen_Segment::bitLength
int bitLength
Definition
qrcodegen.h:125
qrcodegen_Ecc
qrcodegen_Ecc
Definition
qrcodegen.h:57
qrcodegen_Ecc_MEDIUM
@ qrcodegen_Ecc_MEDIUM
Definition
qrcodegen.h:61
qrcodegen_Ecc_HIGH
@ qrcodegen_Ecc_HIGH
Definition
qrcodegen.h:63
qrcodegen_Ecc_QUARTILE
@ qrcodegen_Ecc_QUARTILE
Definition
qrcodegen.h:62
qrcodegen_Ecc_LOW
@ qrcodegen_Ecc_LOW
Definition
qrcodegen.h:60
qrcodegen_calcSegmentBufferSize
LWS_VISIBLE size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars)
qrcodegen_isAlphanumeric
LWS_VISIBLE bool qrcodegen_isAlphanumeric(const char *text)
qrcodegen_encodeSegments
LWS_VISIBLE bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl, uint8_t tempBuffer[], uint8_t qrcode[])
qrcodegen_encodeText
LWS_VISIBLE bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode[], enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl)
qrcodegen_Mask
qrcodegen_Mask
Definition
qrcodegen.h:70
qrcodegen_Mask_1
@ qrcodegen_Mask_1
Definition
qrcodegen.h:76
qrcodegen_Mask_0
@ qrcodegen_Mask_0
Definition
qrcodegen.h:75
qrcodegen_Mask_2
@ qrcodegen_Mask_2
Definition
qrcodegen.h:77
qrcodegen_Mask_6
@ qrcodegen_Mask_6
Definition
qrcodegen.h:81
qrcodegen_Mask_AUTO
@ qrcodegen_Mask_AUTO
Definition
qrcodegen.h:73
qrcodegen_Mask_7
@ qrcodegen_Mask_7
Definition
qrcodegen.h:82
qrcodegen_Mask_4
@ qrcodegen_Mask_4
Definition
qrcodegen.h:79
qrcodegen_Mask_5
@ qrcodegen_Mask_5
Definition
qrcodegen.h:80
qrcodegen_Mask_3
@ qrcodegen_Mask_3
Definition
qrcodegen.h:78
qrcodegen_Mode
qrcodegen_Mode
Definition
qrcodegen.h:89
qrcodegen_Mode_NUMERIC
@ qrcodegen_Mode_NUMERIC
Definition
qrcodegen.h:90
qrcodegen_Mode_ALPHANUMERIC
@ qrcodegen_Mode_ALPHANUMERIC
Definition
qrcodegen.h:91
qrcodegen_Mode_BYTE
@ qrcodegen_Mode_BYTE
Definition
qrcodegen.h:92
qrcodegen_Mode_KANJI
@ qrcodegen_Mode_KANJI
Definition
qrcodegen.h:93
qrcodegen_Mode_ECI
@ qrcodegen_Mode_ECI
Definition
qrcodegen.h:94
qrcodegen_getSize
LWS_VISIBLE int qrcodegen_getSize(const uint8_t qrcode[])
qrcodegen_makeAlphanumeric
LWS_VISIBLE struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t buf[])
qrcodegen_Segment::mode
enum qrcodegen_Mode mode
Definition
qrcodegen.h:111
qrcodegen_makeEci
LWS_VISIBLE struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[])
qrcodegen_encodeSegmentsAdvanced
LWS_VISIBLE bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl, uint8_t tempBuffer[], uint8_t qrcode[])
qrcodegen_Segment
Definition
qrcodegen.h:109
include
libwebsockets
qrcodegen.h
Generated on
for libwebsockets by
1.18.0