private/constants.rkt
#lang racket/base

(provide (all-defined-out))

(define qr-alignment-coord-table
  #(#()
    #(6 18)
    #(6 22)
    #(6 26)
    #(6 30)
    #(6 34)
    #(6 22 38)
    #(6 24 42)
    #(6 26 46)
    #(6 28 50) ; 10
    #(6 30 54)
    #(6 32 58)
    #(6 34 62)
    #(6 26 46 66)
    #(6 26 48 70)
    #(6 26 50 74)
    #(6 30 54 78)
    #(6 30 56 82)
    #(6 30 58 86)
    #(6 34 62 90) ; 20
    #(6 28 50 72  94)
    #(6 26 50 74  98)
    #(6 30 54 78 102)
    #(6 28 54 80 106)
    #(6 32 58 84 110)
    #(6 30 58 86 114)
    #(6 34 62 90 118)
    #(6 26 50 74  98 122)
    #(6 30 54 78 102 126)
    #(6 26 52 78 104 130) ; 30
    #(6 30 56 82 108 134)
    #(6 34 60 86 112 138)
    #(6 30 58 86 114 142)
    #(6 34 62 90 118 146)
    #(6 30 54 78 102 126 150)
    #(6 24 50 76 102 128 154)
    #(6 28 54 80 106 132 158)
    #(6 32 58 84 110 136 162)
    #(6 26 54 82 110 138 166)
    #(6 30 58 86 114 142 170))) ; 40

;; use custom converter?
(define qr-alpha-charset
  #(#\0 #\1 #\2 #\3 #\4 #\5
    #\6 #\7 #\8 #\9 #\A #\B
    #\C #\D #\E #\F #\G #\H
    #\I #\J #\K #\L #\M #\N
    #\O #\P #\Q #\R #\S #\T
    #\U #\V #\W #\X #\Y #\Z
    #\  #\$ #\% #\* #\+ #\-
    #\. #\/ #\:))

;; would really like to get rid of these tables
(define qr-data-word-count-table
  '((L #(  19   34   55   80  108  136  156  194  232  274
          324  370  428  461  523  589  647  721  795  861
          932 1006 1094 1174 1276 1370 1468 1531 1631 1735
         1843 1955 2071 2191 2306 2434 2566 2702 2812 2956))
    (M #(  16   28   44   64   86  108  124  154  182  216
          254  290  334  365  415  453  507  563  627  669
          714  782  860  914 1000 1062 1128 1193 1267 1373
         1455 1541 1631 1725 1812 1914 1992 2102 2216 2334))
    (Q #(  13   22   34   48   62   76   88  110  132  154
          180  206  244  261  295  325  367  397  445  485
          512  568  614  664  718  754  808  871  911  985
         1033 1115 1171 1231 1286 1354 1426 1502 1582 1666))
    (H #(   9   16   26   36   46   60   66   86  100  122
          140  158  180  197  223  253  283  313  341  385
          406  442  464  514  538  596  628  661  701  745
          793  845  901  961  986 1054 1096 1142 1222 1276))))

(define qr-edc-block-count-table
  '((L #(( 1  0) ( 1  0) ( 1  0) ( 1  0) ( 1  0)
         ( 2  0) ( 2  0) ( 2  0) ( 2  0) ( 2  2)
         ( 4  0) ( 2  2) ( 4  0) ( 3  1) ( 5  1)
         ( 5  1) ( 1  5) ( 5  1) ( 3  4) ( 3  5)
         ( 4  4) ( 2  7) ( 4  5) ( 6  4) ( 8  4)
         (10  2) ( 8  4) ( 3 10) ( 7  7) ( 5 10)
         (13  3) (17  0) (17  1) (13  6) (12  7)
         ( 6 14) (17  4) ( 4 18) (20  4) (19  6)))
    (M #(( 1  0) ( 1  0) ( 1  0) ( 2  0) ( 2  0)
         ( 4  0) ( 4  0) ( 2  2) ( 3  2) ( 4  1)
         ( 1  4) ( 6  2) ( 8  1) ( 4  5) ( 5  5)
         ( 7  3) (10  1) ( 9  4) ( 3 11) ( 3 13)
         (17  0) (17  0) ( 4 14) ( 6 14) ( 8 13)
         (19  4) (22  3) ( 3 23) (21  7) (19 10)
         ( 2 29) (10 23) (14 21) (14 23) (12 26)
         ( 6 34) (29 14) (13 32) (40  7) (18 31)))
    (Q #(( 1  0) ( 1  0) ( 2  0) ( 2  0) ( 2  2)
         ( 4  0) ( 2  4) ( 4  2) ( 4  4) ( 6  2)
         ( 4  4) ( 4  6) ( 8  4) (11  5) ( 5  7)
         (15  2) ( 1 15) (17  1) (17  4) (15  5)
         (17  6) ( 7 16) (11 14) (11 16) ( 7 22)
         (28  6) ( 8 26) ( 4 31) ( 1 37) (15 25)
         (42  1) (10 35) (29 19) (44  7) (39 14)
         (46 10) (49 10) (48 14) (43 22) (34 34)))
    (H #(( 1  0) ( 1  0) ( 2  0) ( 4  0) ( 2  2)
         ( 4  0) ( 4  1) ( 4  2) ( 4  4) ( 6  2)
         ( 3  8) ( 7  4) (12  4) (11  5) (11  7)
         ( 3 13) ( 2 17) ( 2 19) ( 9 16) (15 10)
         (19  6) (34  0) (16 14) (30  2) (22 13)
         (33  4) (12 28) (11 31) (19 26) (23 25)
         (23 28) (19 35) (11 46) (59  1) (22 41)
         ( 2 64) (24 46) (42 32) (10 67) (20 61)))))

;; FIXME: this should really be calculated
(define qr-version-edc-bits-table
  #(        #x07C94 #x085BC #x09A99 #x0A4D3
    #x0BBF6 #x0C762 #x0D847 #x0E60D #x0F928
    #x10B78 #x1145D #x12A17 #x13532 #x149A6
    #x15683 #x168C9 #x177EC #x18EC4 #x191E1
    #x1AFAB #x1B08E #x1CC1A #x1D33F #x1ED75
    #x1F250 #x209D5 #x216F0 #x228BA #x2379F
    #x24B0B #x2542E #x26A64 #x27541 #x28C69))