1 /* quirc -- QR-code recognition library
2  * Copyright (C) 2010-2012 Daniel Beer <dlbeer@gmail.com>
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #include <quirc_internal.h>
18 
19 const struct quirc_version_info quirc_version_db[QUIRC_MAX_VERSION + 1] = {
20 	    {0},
21 	    { /* Version 1 */
22 		    .data_bytes = 26,
23 		    .apat = {0},
24 		    .ecc = {
25 			    {.bs = 26, .dw = 16, .ns = 1},
26 			    {.bs = 26, .dw = 19, .ns = 1},
27 			    {.bs = 26, .dw = 9, .ns = 1},
28 			    {.bs = 26, .dw = 13, .ns = 1}
29 		    }
30 	    },
31 	    { /* Version 2 */
32 		    .data_bytes = 44,
33 		    .apat = {6, 18, 0},
34 		    .ecc = {
35 			    {.bs = 44, .dw = 28, .ns = 1},
36 			    {.bs = 44, .dw = 34, .ns = 1},
37 			    {.bs = 44, .dw = 16, .ns = 1},
38 			    {.bs = 44, .dw = 22, .ns = 1}
39 		    }
40 	    },
41 	    { /* Version 3 */
42 		    .data_bytes = 70,
43 		    .apat = {6, 22, 0},
44 		    .ecc = {
45 			    {.bs = 70, .dw = 44, .ns = 1},
46 			    {.bs = 70, .dw = 55, .ns = 1},
47 			    {.bs = 35, .dw = 13, .ns = 2},
48 			    {.bs = 35, .dw = 17, .ns = 2}
49 		    }
50 	    },
51 	    { /* Version 4 */
52 		    .data_bytes = 100,
53 		    .apat = {6, 26, 0},
54 		    .ecc = {
55 			    {.bs = 50, .dw = 32, .ns = 2},
56 			    {.bs = 100, .dw = 80, .ns = 1},
57 			    {.bs = 25, .dw = 9, .ns = 4},
58 			    {.bs = 50, .dw = 24, .ns = 2}
59 		    }
60 	    },
61 	    { /* Version 5 */
62 		    .data_bytes = 134,
63 		    .apat = {6, 30, 0},
64 		    .ecc = {
65 			    {.bs = 67, .dw = 43, .ns = 2},
66 			    {.bs = 134, .dw = 108, .ns = 1},
67 			    {.bs = 33, .dw = 11, .ns = 2},
68 			    {.bs = 33, .dw = 15, .ns = 2}
69 		    }
70 	    },
71 	    { /* Version 6 */
72 		    .data_bytes = 172,
73 		    .apat = {6, 34, 0},
74 		    .ecc = {
75 			    {.bs = 43, .dw = 27, .ns = 4},
76 			    {.bs = 86, .dw = 68, .ns = 2},
77 			    {.bs = 43, .dw = 15, .ns = 4},
78 			    {.bs = 43, .dw = 19, .ns = 4}
79 		    }
80 	    },
81 	    { /* Version 7 */
82 		    .data_bytes = 196,
83 		    .apat = {6, 22, 38, 0},
84 		    .ecc = {
85 			    {.bs = 49, .dw = 31, .ns = 4},
86 			    {.bs = 98, .dw = 78, .ns = 2},
87 			    {.bs = 39, .dw = 13, .ns = 4},
88 			    {.bs = 32, .dw = 14, .ns = 2}
89 		    }
90 	    },
91 	    { /* Version 8 */
92 		    .data_bytes = 242,
93 		    .apat = {6, 24, 42, 0},
94 		    .ecc = {
95 			    {.bs = 60, .dw = 38, .ns = 2},
96 			    {.bs = 121, .dw = 97, .ns = 2},
97 			    {.bs = 40, .dw = 14, .ns = 4},
98 			    {.bs = 40, .dw = 18, .ns = 4}
99 		    }
100 	    },
101 	    { /* Version 9 */
102 		    .data_bytes = 292,
103 		    .apat = {6, 26, 46, 0},
104 		    .ecc = {
105 			    {.bs = 58, .dw = 36, .ns = 3},
106 			    {.bs = 146, .dw = 116, .ns = 2},
107 			    {.bs = 36, .dw = 12, .ns = 4},
108 			    {.bs = 36, .dw = 16, .ns = 4}
109 		    }
110 	    },
111 	    { /* Version 10 */
112 		    .data_bytes = 346,
113 		    .apat = {6, 28, 50, 0},
114 		    .ecc = {
115 			    {.bs = 69, .dw = 43, .ns = 4},
116 			    {.bs = 86, .dw = 68, .ns = 2},
117 			    {.bs = 43, .dw = 15, .ns = 6},
118 			    {.bs = 43, .dw = 19, .ns = 6}
119 		    }
120 	    },
121 	    { /* Version 11 */
122 		    .data_bytes = 404,
123 		    .apat = {6, 30, 54, 0},
124 		    .ecc = {
125 			    {.bs = 80, .dw = 50, .ns = 1},
126 			    {.bs = 101, .dw = 81, .ns = 4},
127 			    {.bs = 36, .dw = 12, .ns = 3},
128 			    {.bs = 50, .dw = 22, .ns = 4}
129 		    }
130 	    },
131 	    { /* Version 12 */
132 		    .data_bytes = 466,
133 		    .apat = {6, 32, 58, 0},
134 		    .ecc = {
135 			    {.bs = 58, .dw = 36, .ns = 6},
136 			    {.bs = 116, .dw = 92, .ns = 2},
137 			    {.bs = 42, .dw = 14, .ns = 7},
138 			    {.bs = 46, .dw = 20, .ns = 4}
139 		    }
140 	    },
141 	    { /* Version 13 */
142 		    .data_bytes = 532,
143 		    .apat = {6, 34, 62, 0},
144 		    .ecc = {
145 			    {.bs = 59, .dw = 37, .ns = 8},
146 			    {.bs = 133, .dw = 107, .ns = 4},
147 			    {.bs = 33, .dw = 11, .ns = 12},
148 			    {.bs = 44, .dw = 20, .ns = 8}
149 		    }
150 	    },
151 	    { /* Version 14 */
152 		    .data_bytes = 581,
153 		    .apat = {6, 26, 46, 66, 0},
154 		    .ecc = {
155 			    {.bs = 64, .dw = 40, .ns = 4},
156 			    {.bs = 145, .dw = 115, .ns = 3},
157 			    {.bs = 36, .dw = 12, .ns = 11},
158 			    {.bs = 36, .dw = 16, .ns = 11}
159 		    }
160 	    },
161 	    { /* Version 15 */
162 		    .data_bytes = 655,
163 		    .apat = {6, 26, 48, 70, 0},
164 		    .ecc = {
165 			    {.bs = 65, .dw = 41, .ns = 5},
166 			    {.bs = 109, .dw = 87, .ns = 5},
167 			    {.bs = 36, .dw = 12, .ns = 11},
168 			    {.bs = 54, .dw = 24, .ns = 5}
169 		    }
170 	    },
171 	    { /* Version 16 */
172 		    .data_bytes = 733,
173 		    .apat = {6, 26, 50, 74, 0},
174 		    .ecc = {
175 			    {.bs = 73, .dw = 45, .ns = 7},
176 			    {.bs = 122, .dw = 98, .ns = 5},
177 			    {.bs = 45, .dw = 15, .ns = 3},
178 			    {.bs = 43, .dw = 19, .ns = 15}
179 		    }
180 	    },
181 	    { /* Version 17 */
182 		    .data_bytes = 815,
183 		    .apat = {6, 30, 54, 78, 0},
184 		    .ecc = {
185 			    {.bs = 74, .dw = 46, .ns = 10},
186 			    {.bs = 135, .dw = 107, .ns = 1},
187 			    {.bs = 42, .dw = 14, .ns = 2},
188 			    {.bs = 50, .dw = 22, .ns = 1}
189 		    }
190 	    },
191 	    { /* Version 18 */
192 		    .data_bytes = 901,
193 		    .apat = {6, 30, 56, 82, 0},
194 		    .ecc = {
195 			    {.bs = 69, .dw = 43, .ns = 9},
196 			    {.bs = 150, .dw = 120, .ns = 5},
197 			    {.bs = 42, .dw = 14, .ns = 2},
198 			    {.bs = 50, .dw = 22, .ns = 17}
199 		    }
200 	    },
201 	    { /* Version 19 */
202 		    .data_bytes = 991,
203 		    .apat = {6, 30, 58, 86, 0},
204 		    .ecc = {
205 			    {.bs = 70, .dw = 44, .ns = 3},
206 			    {.bs = 141, .dw = 113, .ns = 3},
207 			    {.bs = 39, .dw = 13, .ns = 9},
208 			    {.bs = 47, .dw = 21, .ns = 17}
209 		    }
210 	    },
211 	    { /* Version 20 */
212 		    .data_bytes = 1085,
213 		    .apat = {6, 34, 62, 90, 0},
214 		    .ecc = {
215 			    {.bs = 67, .dw = 41, .ns = 3},
216 			    {.bs = 135, .dw = 107, .ns = 3},
217 			    {.bs = 43, .dw = 15, .ns = 15},
218 			    {.bs = 54, .dw = 24, .ns = 15}
219 		    }
220 	    },
221 	    { /* Version 21 */
222 		    .data_bytes = 1156,
223 		    .apat = {6, 28, 50, 72, 92, 0},
224 		    .ecc = {
225 			    {.bs = 68, .dw = 42, .ns = 17},
226 			    {.bs = 144, .dw = 116, .ns = 4},
227 			    {.bs = 46, .dw = 16, .ns = 19},
228 			    {.bs = 50, .dw = 22, .ns = 17}
229 		    }
230 	    },
231 	    { /* Version 22 */
232 		    .data_bytes = 1258,
233 		    .apat = {6, 26, 50, 74, 98, 0},
234 		    .ecc = {
235 			    {.bs = 74, .dw = 46, .ns = 17},
236 			    {.bs = 139, .dw = 111, .ns = 2},
237 			    {.bs = 37, .dw = 13, .ns = 34},
238 			    {.bs = 54, .dw = 24, .ns = 7}
239 		    }
240 	    },
241 	    { /* Version 23 */
242 		    .data_bytes = 1364,
243 		    .apat = {6, 30, 54, 78, 102, 0},
244 		    .ecc = {
245 			    {.bs = 75, .dw = 47, .ns = 4},
246 			    {.bs = 151, .dw = 121, .ns = 4},
247 			    {.bs = 45, .dw = 15, .ns = 16},
248 			    {.bs = 54, .dw = 24, .ns = 11}
249 		    }
250 	    },
251 	    { /* Version 24 */
252 		    .data_bytes = 1474,
253 		    .apat = {6, 28, 54, 80, 106, 0},
254 		    .ecc = {
255 			    {.bs = 73, .dw = 45, .ns = 6},
256 			    {.bs = 147, .dw = 117, .ns = 6},
257 			    {.bs = 46, .dw = 16, .ns = 30},
258 			    {.bs = 54, .dw = 24, .ns = 11}
259 		    }
260 	    },
261 	    { /* Version 25 */
262 		    .data_bytes = 1588,
263 		    .apat = {6, 32, 58, 84, 110, 0},
264 		    .ecc = {
265 			    {.bs = 75, .dw = 47, .ns = 8},
266 			    {.bs = 132, .dw = 106, .ns = 8},
267 			    {.bs = 45, .dw = 15, .ns = 22},
268 			    {.bs = 54, .dw = 24, .ns = 7}
269 		    }
270 	    },
271 	    { /* Version 26 */
272 		    .data_bytes = 1706,
273 		    .apat = {6, 30, 58, 86, 114, 0},
274 		    .ecc = {
275 			    {.bs = 74, .dw = 46, .ns = 19},
276 			    {.bs = 142, .dw = 114, .ns = 10},
277 			    {.bs = 46, .dw = 16, .ns = 33},
278 			    {.bs = 50, .dw = 22, .ns = 28}
279 		    }
280 	    },
281 	    { /* Version 27 */
282 		    .data_bytes = 1828,
283 		    .apat = {6, 34, 62, 90, 118, 0},
284 		    .ecc = {
285 			    {.bs = 73, .dw = 45, .ns = 22},
286 			    {.bs = 152, .dw = 122, .ns = 8},
287 			    {.bs = 45, .dw = 15, .ns = 12},
288 			    {.bs = 53, .dw = 23, .ns = 8}
289 		    }
290 	    },
291 	    { /* Version 28 */
292 		    .data_bytes = 1921,
293 		    .apat = {6, 26, 50, 74, 98, 122, 0},
294 		    .ecc = {
295 			    {.bs = 73, .dw = 45, .ns = 3},
296 			    {.bs = 147, .dw = 117, .ns = 3},
297 			    {.bs = 45, .dw = 15, .ns = 11},
298 			    {.bs = 54, .dw = 24, .ns = 4}
299 		    }
300 	    },
301 	    { /* Version 29 */
302 		    .data_bytes = 2051,
303 		    .apat = {6, 30, 54, 78, 102, 126, 0},
304 		    .ecc = {
305 			    {.bs = 73, .dw = 45, .ns = 21},
306 			    {.bs = 146, .dw = 116, .ns = 7},
307 			    {.bs = 45, .dw = 15, .ns = 19},
308 			    {.bs = 53, .dw = 23, .ns = 1}
309 		    }
310 	    },
311 	    { /* Version 30 */
312 		    .data_bytes = 2185,
313 		    .apat = {6, 26, 52, 78, 104, 130, 0},
314 		    .ecc = {
315 			    {.bs = 75, .dw = 47, .ns = 19},
316 			    {.bs = 145, .dw = 115, .ns = 5},
317 			    {.bs = 45, .dw = 15, .ns = 23},
318 			    {.bs = 54, .dw = 24, .ns = 15}
319 		    }
320 	    },
321 	    { /* Version 31 */
322 		    .data_bytes = 2323,
323 		    .apat = {6, 30, 56, 82, 108, 134, 0},
324 		    .ecc = {
325 			    {.bs = 74, .dw = 46, .ns = 2},
326 			    {.bs = 145, .dw = 115, .ns = 13},
327 			    {.bs = 45, .dw = 15, .ns = 23},
328 			    {.bs = 54, .dw = 24, .ns = 42}
329 		    }
330 	    },
331 	    { /* Version 32 */
332 		    .data_bytes = 2465,
333 		    .apat = {6, 34, 60, 86, 112, 138, 0},
334 		    .ecc = {
335 			    {.bs = 74, .dw = 46, .ns = 10},
336 			    {.bs = 145, .dw = 115, .ns = 17},
337 			    {.bs = 45, .dw = 15, .ns = 19},
338 			    {.bs = 54, .dw = 24, .ns = 10}
339 		    }
340 	    },
341 	    { /* Version 33 */
342 		    .data_bytes = 2611,
343 		    .apat = {6, 30, 58, 86, 114, 142, 0},
344 		    .ecc = {
345 			    {.bs = 74, .dw = 46, .ns = 14},
346 			    {.bs = 145, .dw = 115, .ns = 17},
347 			    {.bs = 45, .dw = 15, .ns = 11},
348 			    {.bs = 54, .dw = 24, .ns = 29}
349 		    }
350 	    },
351 	    { /* Version 34 */
352 		    .data_bytes = 2761,
353 		    .apat = {6, 34, 62, 90, 118, 146, 0},
354 		    .ecc = {
355 			    {.bs = 74, .dw = 46, .ns = 14},
356 			    {.bs = 145, .dw = 115, .ns = 13},
357 			    {.bs = 46, .dw = 16, .ns = 59},
358 			    {.bs = 54, .dw = 24, .ns = 44}
359 		    }
360 	    },
361 	    { /* Version 35 */
362 		    .data_bytes = 2876,
363 		    .apat = {6, 30, 54, 78, 102, 126, 150},
364 		    .ecc = {
365 			    {.bs = 75, .dw = 47, .ns = 12},
366 			    {.bs = 151, .dw = 121, .ns = 12},
367 			    {.bs = 45, .dw = 15, .ns = 22},
368 			    {.bs = 54, .dw = 24, .ns = 39}
369 		    }
370 	    },
371 	    { /* Version 36 */
372 		    .data_bytes = 3034,
373 		    .apat = {6, 24, 50, 76, 102, 128, 154},
374 		    .ecc = {
375 			    {.bs = 75, .dw = 47, .ns = 6},
376 			    {.bs = 151, .dw = 121, .ns = 6},
377 			    {.bs = 45, .dw = 15, .ns = 2},
378 			    {.bs = 54, .dw = 24, .ns = 46}
379 		    }
380 	    },
381 	    { /* Version 37 */
382 		    .data_bytes = 3196,
383 		    .apat = {6, 28, 54, 80, 106, 132, 158},
384 		    .ecc = {
385 			    {.bs = 74, .dw = 46, .ns = 29},
386 			    {.bs = 152, .dw = 122, .ns = 17},
387 			    {.bs = 45, .dw = 15, .ns = 24},
388 			    {.bs = 54, .dw = 24, .ns = 49}
389 		    }
390 	    },
391 	    { /* Version 38 */
392 		    .data_bytes = 3362,
393 		    .apat = {6, 32, 58, 84, 110, 136, 162},
394 		    .ecc = {
395 			    {.bs = 74, .dw = 46, .ns = 13},
396 			    {.bs = 152, .dw = 122, .ns = 4},
397 			    {.bs = 45, .dw = 15, .ns = 42},
398 			    {.bs = 54, .dw = 24, .ns = 48}
399 		    }
400 	    },
401 	    { /* Version 39 */
402 		    .data_bytes = 3532,
403 		    .apat = {6, 26, 54, 82, 110, 138, 166},
404 		    .ecc = {
405 			    {.bs = 75, .dw = 47, .ns = 40},
406 			    {.bs = 147, .dw = 117, .ns = 20},
407 			    {.bs = 45, .dw = 15, .ns = 10},
408 			    {.bs = 54, .dw = 24, .ns = 43}
409 		    }
410 	    },
411 	    { /* Version 40 */
412 		    .data_bytes = 3706,
413 		    .apat = {6, 30, 58, 86, 114, 142, 170},
414 		    .ecc = {
415 			    {.bs = 75, .dw = 47, .ns = 18},
416 			    {.bs = 148, .dw = 118, .ns = 19},
417 			    {.bs = 45, .dw = 15, .ns = 20},
418 			    {.bs = 54, .dw = 24, .ns = 34}
419 		    }
420 	    }
421 };
422