/* quirc -- QR-code recognition library * Copyright (C) 2010-2012 Daniel Beer * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef QUIRC_INTERNAL_H_ #define QUIRC_INTERNAL_H_ #include "quirc.h" #define QUIRC_PIXEL_WHITE 0 #define QUIRC_PIXEL_BLACK 1 #define QUIRC_PIXEL_REGION 2 #ifndef QUIRC_MAX_REGIONS #define QUIRC_MAX_REGIONS 254 #endif #define QUIRC_MAX_CAPSTONES 32 #define QUIRC_MAX_GRIDS 8 #define QUIRC_PERSPECTIVE_PARAMS 8 #if QUIRC_MAX_REGIONS < UINT8_MAX typedef uint8_t quirc_pixel_t; #elif QUIRC_MAX_REGIONS < UINT16_MAX typedef uint16_t quirc_pixel_t; #else #error "QUIRC_MAX_REGIONS > 65534 is not supported" #endif struct quirc_region { struct quirc_point seed; int count; int capstone; } __attribute__((aligned(8))); struct quirc_capstone { int ring; int stone; struct quirc_point corners[4]; struct quirc_point center; float c[QUIRC_PERSPECTIVE_PARAMS]; int qr_grid; } __attribute__((aligned(8))); struct quirc_grid { /* Capstone indices */ int caps[3]; /* Alignment pattern region and corner */ int align_region; struct quirc_point align; /* Timing pattern endpoints */ struct quirc_point tpep[3]; int hscan; int vscan; /* Grid size and perspective transform */ int grid_size; float c[QUIRC_PERSPECTIVE_PARAMS]; } __attribute__((aligned(8))); struct quirc { uint8_t *image; quirc_pixel_t *pixels; int w; int h; int num_regions; struct quirc_region regions[QUIRC_MAX_REGIONS]; int num_capstones; struct quirc_capstone capstones[QUIRC_MAX_CAPSTONES]; int num_grids; struct quirc_grid grids[QUIRC_MAX_GRIDS]; } __attribute__((aligned(8))); /************************************************************************ * QR-code version information database */ #define QUIRC_MAX_VERSION 40 #define QUIRC_MAX_ALIGNMENT 7 struct quirc_rs_params { uint8_t bs; /* Small block size */ uint8_t dw; /* Small data words */ uint8_t ns; /* Number of small blocks */ } __attribute__((aligned(8))); struct quirc_version_info { uint16_t data_bytes; uint8_t apat[QUIRC_MAX_ALIGNMENT]; struct quirc_rs_params ecc[4]; } __attribute__((aligned(8))); extern const struct quirc_version_info quirc_version_db[QUIRC_MAX_VERSION + 1]; #endif