@@ -771,7 +771,7 @@ uint8_t qrcode_initBytes(QRCode *qrcode, uint8_t *data, uint16_t length) {
771771
772772 // If Version is 0, choose the smallest version that can hold the data
773773 if (qrcode -> version == VERSION_AUTO ) {
774- qrcode -> version = qrcode_minVersion (qrcode -> ecc , qrcode -> mode , (char * )data , length );
774+ qrcode -> version = qrcode_minVersion (qrcode -> mode , (char * )data , length );
775775 }
776776 else if (qrcode -> version > 40 || qrcode -> ecc > 3 )
777777 {
@@ -899,9 +899,10 @@ uint16_t qrcode_dataCapacity(uint8_t version, uint8_t ecc) {
899899 return dataCapacity ;
900900}
901901
902- uint8_t qrcode_minVersion (uint8_t ecc , uint8_t mode , const char * data , uint16_t length ) {
902+ uint8_t qrcode_minVersion (uint8_t mode , const char * data , uint16_t length ) {
903903
904904 uint8_t version = 1 ;
905+ uint8_t ecc = ECC_HIGH ;
905906 uint8_t lengthMode = getModeBits (version , mode );
906907 uint16_t lengthMax ;
907908
@@ -910,7 +911,13 @@ uint8_t qrcode_minVersion(uint8_t ecc, uint8_t mode, const char *data, uint16_t
910911 lengthMax = qrcode_dataCapacity (version , ecc ) - 2 ;
911912 //printf("Testing version[%d] ecc[%d] len[%d] lengthMode[%d] encoded[%d] max[%d]\n", version, ecc, length, lengthMode, lengthEncoded, lengthMax);
912913 if (lengthEncoded > lengthMax ) {
913- version ++ ;
914+ if (ecc == 0 )
915+ {
916+ version ++ ;
917+ ecc = ECC_HIGH ;
918+ }
919+ else
920+ ecc -- ;
914921 } else {
915922 break ;
916923 }
0 commit comments