/* (c) GPL 2007 Karel 'Clock' Kulhavy, Twibright Labs */ #define MIN(x,y) ((x)<(y)?(x):(y)) #define MAX(x,y) ((x)>(y)?(x):(y)) #define BORDER 2 /* In pixels. Thickness of the border */ #define CHALF 3 /* Size of the cross half. Size of the cross is CHALF*2 x CHALF*2. */ #define CPITCH 24 /* Distance between cross centers */ /* XCROSSES A4 65, US Letter 67. */ #define XCROSSES 65 /* Number of crosses horizontally */ /* YCROSSES A4 93, US Letter 87. */ #define YCROSSES 93 /* Number of crosses vertically */ #define DATA_WIDTH (CPITCH*(XCROSSES-1)+2*CHALF) /* The rectangle occupied by the data and crosses */ #define DATA_HEIGHT (CPITCH*(YCROSSES-1)+2*CHALF) #define WIDTH (2*BORDER+DATA_WIDTH) /* In pixels, including the border */ /* In pixels, including the border and the label */ #define TEXT_WIDTH 13 /* Width of a single letter */ /* Definitions for seq2xy */ /* Properties of the narrow horizontal strip, with crosses */ #define NARROWHEIGHT (2*CHALF) #define GAPWIDTH (CPITCH-2*CHALF) #define NARROWWIDTH (GAPWIDTH*(XCROSSES-1)) /* Useful width */ #define NARROWPIXELS (NARROWHEIGHT*NARROWWIDTH) /* Useful pixels */ /* Properties of the wide horizontal strip, without crosses */ #define WIDEHEIGHT GAPWIDTH #define WIDEWIDTH (WIDTH-2*BORDER) #define WIDEPIXELS (WIDEHEIGHT*WIDEWIDTH) /* Amount of raw payload pixels in one narrow-wide strip pair */ #define REPHEIGHT (NARROWHEIGHT+WIDEHEIGHT) #define REPPIXELS (WIDEPIXELS+NARROWPIXELS) /* Total bits before hamming including the unused */ #define TOTALBITS ((long)REPPIXELS*(YCROSSES-1)+NARROWPIXELS) /* Hamming codes with parity */ #define FEC_ORDER 1 /* Can be 2 to 5 inclusive. 5 is 26/32, 4 is 11/16, 3 is 4/8, 2 is 4/1 1 is golay codes */ #if FEC_ORDER==1 /* Golay */ #define FEC_LARGEBITS 24 #define FEC_SMALLBITS 12 #else /* Hamming */ #define FEC_LARGEBITS (1<