clang format
This commit is contained in:
+52
-74
@@ -27,12 +27,10 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This library creates QR Code symbols, which is a type of two-dimension barcode.
|
* This library creates QR Code symbols, which is a type of two-dimension barcode.
|
||||||
* Invented by Denso Wave and described in the ISO/IEC 18004 standard.
|
* Invented by Denso Wave and described in the ISO/IEC 18004 standard.
|
||||||
@@ -48,53 +46,49 @@ extern "C" {
|
|||||||
* (Note that all ways require supplying the desired error correction level and various byte buffers.)
|
* (Note that all ways require supplying the desired error correction level and various byte buffers.)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*---- Enum and struct types----*/
|
/*---- Enum and struct types----*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The error correction level in a QR Code symbol.
|
* The error correction level in a QR Code symbol.
|
||||||
*/
|
*/
|
||||||
enum qrcodegen_Ecc {
|
enum qrcodegen_Ecc {
|
||||||
// Must be declared in ascending order of error protection
|
// Must be declared in ascending order of error protection
|
||||||
// so that an internal qrcodegen function works properly
|
// so that an internal qrcodegen function works properly
|
||||||
qrcodegen_Ecc_LOW = 0 , // The QR Code can tolerate about 7% erroneous codewords
|
qrcodegen_Ecc_LOW = 0, // The QR Code can tolerate about 7% erroneous codewords
|
||||||
qrcodegen_Ecc_MEDIUM , // The QR Code can tolerate about 15% erroneous codewords
|
qrcodegen_Ecc_MEDIUM, // The QR Code can tolerate about 15% erroneous codewords
|
||||||
qrcodegen_Ecc_QUARTILE, // The QR Code can tolerate about 25% erroneous codewords
|
qrcodegen_Ecc_QUARTILE, // The QR Code can tolerate about 25% erroneous codewords
|
||||||
qrcodegen_Ecc_HIGH , // The QR Code can tolerate about 30% erroneous codewords
|
qrcodegen_Ecc_HIGH, // The QR Code can tolerate about 30% erroneous codewords
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The mask pattern used in a QR Code symbol.
|
* The mask pattern used in a QR Code symbol.
|
||||||
*/
|
*/
|
||||||
enum qrcodegen_Mask {
|
enum qrcodegen_Mask {
|
||||||
// A special value to tell the QR Code encoder to
|
// A special value to tell the QR Code encoder to
|
||||||
// automatically select an appropriate mask pattern
|
// automatically select an appropriate mask pattern
|
||||||
qrcodegen_Mask_AUTO = -1,
|
qrcodegen_Mask_AUTO = -1,
|
||||||
// The eight actual mask patterns
|
// The eight actual mask patterns
|
||||||
qrcodegen_Mask_0 = 0,
|
qrcodegen_Mask_0 = 0,
|
||||||
qrcodegen_Mask_1,
|
qrcodegen_Mask_1,
|
||||||
qrcodegen_Mask_2,
|
qrcodegen_Mask_2,
|
||||||
qrcodegen_Mask_3,
|
qrcodegen_Mask_3,
|
||||||
qrcodegen_Mask_4,
|
qrcodegen_Mask_4,
|
||||||
qrcodegen_Mask_5,
|
qrcodegen_Mask_5,
|
||||||
qrcodegen_Mask_6,
|
qrcodegen_Mask_6,
|
||||||
qrcodegen_Mask_7,
|
qrcodegen_Mask_7,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Describes how a segment's data bits are interpreted.
|
* Describes how a segment's data bits are interpreted.
|
||||||
*/
|
*/
|
||||||
enum qrcodegen_Mode {
|
enum qrcodegen_Mode {
|
||||||
qrcodegen_Mode_NUMERIC = 0x1,
|
qrcodegen_Mode_NUMERIC = 0x1,
|
||||||
qrcodegen_Mode_ALPHANUMERIC = 0x2,
|
qrcodegen_Mode_ALPHANUMERIC = 0x2,
|
||||||
qrcodegen_Mode_BYTE = 0x4,
|
qrcodegen_Mode_BYTE = 0x4,
|
||||||
qrcodegen_Mode_KANJI = 0x8,
|
qrcodegen_Mode_KANJI = 0x8,
|
||||||
qrcodegen_Mode_ECI = 0x7,
|
qrcodegen_Mode_ECI = 0x7,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A segment of character/binary/control data in a QR Code symbol.
|
* A segment of character/binary/control data in a QR Code symbol.
|
||||||
* The mid-level way to create a segment is to take the payload data
|
* The mid-level way to create a segment is to take the payload data
|
||||||
@@ -107,43 +101,39 @@ enum qrcodegen_Mode {
|
|||||||
* the largest QR Code (version 40) has 31329 modules.
|
* the largest QR Code (version 40) has 31329 modules.
|
||||||
*/
|
*/
|
||||||
struct qrcodegen_Segment {
|
struct qrcodegen_Segment {
|
||||||
// The mode indicator of this segment.
|
// The mode indicator of this segment.
|
||||||
enum qrcodegen_Mode mode;
|
enum qrcodegen_Mode mode;
|
||||||
|
|
||||||
// The length of this segment's unencoded data. Measured in characters for
|
// The length of this segment's unencoded data. Measured in characters for
|
||||||
// numeric/alphanumeric/kanji mode, bytes for byte mode, and 0 for ECI mode.
|
// numeric/alphanumeric/kanji mode, bytes for byte mode, and 0 for ECI mode.
|
||||||
// Always zero or positive. Not the same as the data's bit length.
|
// Always zero or positive. Not the same as the data's bit length.
|
||||||
int numChars;
|
int numChars;
|
||||||
|
|
||||||
// The data bits of this segment, packed in bitwise big endian.
|
// The data bits of this segment, packed in bitwise big endian.
|
||||||
// Can be null if the bit length is zero.
|
// Can be null if the bit length is zero.
|
||||||
uint8_t *data;
|
uint8_t* data;
|
||||||
|
|
||||||
// The number of valid data bits used in the buffer. Requires
|
// The number of valid data bits used in the buffer. Requires
|
||||||
// 0 <= bitLength <= 32767, and bitLength <= (capacity of data array) * 8.
|
// 0 <= bitLength <= 32767, and bitLength <= (capacity of data array) * 8.
|
||||||
// The character count (numChars) must agree with the mode and the bit buffer length.
|
// The character count (numChars) must agree with the mode and the bit buffer length.
|
||||||
int bitLength;
|
int bitLength;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*---- Macro constants and functions ----*/
|
/*---- Macro constants and functions ----*/
|
||||||
|
|
||||||
#define qrcodegen_VERSION_MIN 1 // The minimum version number supported in the QR Code Model 2 standard
|
#define qrcodegen_VERSION_MIN 1 // The minimum version number supported in the QR Code Model 2 standard
|
||||||
#define qrcodegen_VERSION_MAX 40 // The maximum version number supported in the QR Code Model 2 standard
|
#define qrcodegen_VERSION_MAX 40 // The maximum version number supported in the QR Code Model 2 standard
|
||||||
|
|
||||||
// Calculates the number of bytes needed to store any QR Code up to and including the given version number,
|
// Calculates the number of bytes needed to store any QR Code up to and including the given version number,
|
||||||
// as a compile-time constant. For example, 'uint8_t buffer[qrcodegen_BUFFER_LEN_FOR_VERSION(25)];'
|
// as a compile-time constant. For example, 'uint8_t buffer[qrcodegen_BUFFER_LEN_FOR_VERSION(25)];'
|
||||||
// can store any single QR Code from version 1 to 25 (inclusive). The result fits in an int (or int16).
|
// can store any single QR Code from version 1 to 25 (inclusive). The result fits in an int (or int16).
|
||||||
// Requires qrcodegen_VERSION_MIN <= n <= qrcodegen_VERSION_MAX.
|
// Requires qrcodegen_VERSION_MIN <= n <= qrcodegen_VERSION_MAX.
|
||||||
#define qrcodegen_BUFFER_LEN_FOR_VERSION(n) ((((n) * 4 + 17) * ((n) * 4 + 17) + 7) / 8 + 1)
|
#define qrcodegen_BUFFER_LEN_FOR_VERSION(n) ((((n) * 4 + 17) * ((n) * 4 + 17) + 7) / 8 + 1)
|
||||||
|
|
||||||
// The worst-case number of bytes needed to store one QR Code, up to and including
|
// The worst-case number of bytes needed to store one QR Code, up to and including
|
||||||
// version 40. This value equals 3918, which is just under 4 kilobytes.
|
// version 40. This value equals 3918, which is just under 4 kilobytes.
|
||||||
// Use this more convenient value to avoid calculating tighter memory bounds for buffers.
|
// Use this more convenient value to avoid calculating tighter memory bounds for buffers.
|
||||||
#define qrcodegen_BUFFER_LEN_MAX qrcodegen_BUFFER_LEN_FOR_VERSION(qrcodegen_VERSION_MAX)
|
#define qrcodegen_BUFFER_LEN_MAX qrcodegen_BUFFER_LEN_FOR_VERSION(qrcodegen_VERSION_MAX)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*---- Functions (high level) to generate QR Codes ----*/
|
/*---- Functions (high level) to generate QR Codes ----*/
|
||||||
|
|
||||||
@@ -184,9 +174,8 @@ struct qrcodegen_Segment {
|
|||||||
* Please consult the QR Code specification for information on
|
* Please consult the QR Code specification for information on
|
||||||
* data capacities per version, ECC level, and text encoding mode.
|
* data capacities per version, ECC level, and text encoding mode.
|
||||||
*/
|
*/
|
||||||
bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode[],
|
bool qrcodegen_encodeText(const char* text, uint8_t tempBuffer[], uint8_t qrcode[], enum qrcodegen_Ecc ecl,
|
||||||
enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl);
|
int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Encodes the given binary data to a QR Code, returning true if successful.
|
* Encodes the given binary data to a QR Code, returning true if successful.
|
||||||
@@ -223,9 +212,8 @@ bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode
|
|||||||
* Please consult the QR Code specification for information on
|
* Please consult the QR Code specification for information on
|
||||||
* data capacities per version, ECC level, and text encoding mode.
|
* data capacities per version, ECC level, and text encoding mode.
|
||||||
*/
|
*/
|
||||||
bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[],
|
bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[], enum qrcodegen_Ecc ecl,
|
||||||
enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl);
|
int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl);
|
||||||
|
|
||||||
|
|
||||||
/*---- Functions (low level) to generate QR Codes ----*/
|
/*---- Functions (low level) to generate QR Codes ----*/
|
||||||
|
|
||||||
@@ -260,9 +248,8 @@ bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcod
|
|||||||
* between modes (such as alphanumeric and byte) to encode text in less space.
|
* between modes (such as alphanumeric and byte) to encode text in less space.
|
||||||
* This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
|
* This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
|
||||||
*/
|
*/
|
||||||
bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len,
|
bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl,
|
||||||
enum qrcodegen_Ecc ecl, uint8_t tempBuffer[], uint8_t qrcode[]);
|
uint8_t tempBuffer[], uint8_t qrcode[]);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Encodes the given segments to a QR Code, returning true if successful.
|
* Encodes the given segments to a QR Code, returning true if successful.
|
||||||
@@ -300,23 +287,21 @@ bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len,
|
|||||||
* This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
|
* This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
|
||||||
*/
|
*/
|
||||||
bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl,
|
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[]);
|
int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl,
|
||||||
|
uint8_t tempBuffer[], uint8_t qrcode[]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tests whether the given string can be encoded as a segment in numeric mode.
|
* Tests whether the given string can be encoded as a segment in numeric mode.
|
||||||
* A string is encodable iff each character is in the range 0 to 9.
|
* A string is encodable iff each character is in the range 0 to 9.
|
||||||
*/
|
*/
|
||||||
bool qrcodegen_isNumeric(const char *text);
|
bool qrcodegen_isNumeric(const char* text);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tests whether the given string can be encoded as a segment in alphanumeric mode.
|
* Tests whether the given string can be encoded as a segment in alphanumeric mode.
|
||||||
* A string is encodable iff each character is in the following set: 0 to 9, A to Z
|
* A string is encodable iff each character is in the following set: 0 to 9, A to Z
|
||||||
* (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.
|
* (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.
|
||||||
*/
|
*/
|
||||||
bool qrcodegen_isAlphanumeric(const char *text);
|
bool qrcodegen_isAlphanumeric(const char* text);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the number of bytes (uint8_t) needed for the data buffer of a segment
|
* Returns the number of bytes (uint8_t) needed for the data buffer of a segment
|
||||||
@@ -331,7 +316,6 @@ bool qrcodegen_isAlphanumeric(const char *text);
|
|||||||
*/
|
*/
|
||||||
size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars);
|
size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns a segment representing the given binary data encoded in
|
* Returns a segment representing the given binary data encoded in
|
||||||
* byte mode. All input byte arrays are acceptable. Any text string
|
* byte mode. All input byte arrays are acceptable. Any text string
|
||||||
@@ -339,20 +323,17 @@ size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars
|
|||||||
*/
|
*/
|
||||||
struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[]);
|
struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[]);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns a segment representing the given string of decimal digits encoded in numeric mode.
|
* Returns a segment representing the given string of decimal digits encoded in numeric mode.
|
||||||
*/
|
*/
|
||||||
struct qrcodegen_Segment qrcodegen_makeNumeric(const char *digits, uint8_t buf[]);
|
struct qrcodegen_Segment qrcodegen_makeNumeric(const char* digits, uint8_t buf[]);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns a segment representing the given text string encoded in alphanumeric mode.
|
* Returns a segment representing the given text string encoded in alphanumeric mode.
|
||||||
* The characters allowed are: 0 to 9, A to Z (uppercase only), space,
|
* The characters allowed are: 0 to 9, A to Z (uppercase only), space,
|
||||||
* dollar, percent, asterisk, plus, hyphen, period, slash, colon.
|
* dollar, percent, asterisk, plus, hyphen, period, slash, colon.
|
||||||
*/
|
*/
|
||||||
struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t buf[]);
|
struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char* text, uint8_t buf[]);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns a segment representing an Extended Channel Interpretation
|
* Returns a segment representing an Extended Channel Interpretation
|
||||||
@@ -360,7 +341,6 @@ struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t bu
|
|||||||
*/
|
*/
|
||||||
struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]);
|
struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]);
|
||||||
|
|
||||||
|
|
||||||
/*---- Functions to extract raw data from QR Codes ----*/
|
/*---- Functions to extract raw data from QR Codes ----*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -371,7 +351,6 @@ struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]);
|
|||||||
*/
|
*/
|
||||||
int qrcodegen_getSize(const uint8_t qrcode[]);
|
int qrcodegen_getSize(const uint8_t qrcode[]);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the color of the module (pixel) at the given coordinates, which is false
|
* Returns the color of the module (pixel) at the given coordinates, which is false
|
||||||
* for light or true for dark. The top left corner has the coordinates (x=0, y=0).
|
* for light or true for dark. The top left corner has the coordinates (x=0, y=0).
|
||||||
@@ -379,7 +358,6 @@ int qrcodegen_getSize(const uint8_t qrcode[]);
|
|||||||
*/
|
*/
|
||||||
bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y);
|
bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user