diff --git a/c/qrcodegen.c b/c/qrcodegen.c index 4f9b46c..4e14af5 100644 --- a/c/qrcodegen.c +++ b/c/qrcodegen.c @@ -67,8 +67,10 @@ static uint8_t finiteFieldMultiply(uint8_t x, uint8_t y); /*---- Private tables of constants ----*/ +// For checking text and encoding segments. static const char *ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"; +// For generating error correction codes. static const int8_t ECC_CODEWORDS_PER_BLOCK[4][41] = { // Version: (note that index 0 is for padding, and is set to an illegal value) //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level @@ -78,6 +80,7 @@ static const int8_t ECC_CODEWORDS_PER_BLOCK[4][41] = { {-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // High }; +// For generating error correction codes. const int8_t NUM_ERROR_CORRECTION_BLOCKS[4][41] = { // Version: (note that index 0 is for padding, and is set to an illegal value) //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level @@ -87,6 +90,7 @@ const int8_t NUM_ERROR_CORRECTION_BLOCKS[4][41] = { {-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81}, // High }; +// For automatic mask pattern selection. static const int PENALTY_N1 = 3; static const int PENALTY_N2 = 3; static const int PENALTY_N3 = 40; @@ -225,6 +229,8 @@ int qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode } +// Returns the minimum possible version in the given range to fit one +// segment with the given characteristics, or 0 if no version fits the data. static int fitVersionToData(int minVersion, int maxVersion, enum qrcodegen_Ecc ecl, int dataLen, int dataBitLen, int ver1To9LenBits, int ver10To26LenBits, int ver27To40LenBits) {