1static void 2putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) 3{ 4 int i; 5 6 for (i = nbytes - 1; i >= 0; i--) { 7 pnt[i] = value & 0xff; 8 value = value >> 8; 9 } 10} 11 12#define SET_WINDOW_LEN 72 13#define set_SW_byte7(out, val) out[7] = val 14#define set_SW_xres(out, val) putnbyte(out + 0x0a, val, 2) 15#define set_SW_yres(out, val) putnbyte(out + 0x0c, val, 2) 16#define set_SW_xpix(out, val) putnbyte(out + 0x16, val, 4) 17#define set_SW_ypix(out, val) putnbyte(out + 0x1a, val, 4) 18#define set_SW_compo(out, val) out[0x21] = val /*color=5,gray=2*/ 19#define set_SW_bpp(out, val) out[0x22] = val 20#define set_SW_byte31(out, val) out[0x31] = val 21#define set_SW_byte32(out, val) out[0x32] = val 22#define set_SW_byte33(out, val) out[0x33] = val 23#define set_SW_lpb(out, val) out[0x34] = val 24#define set_SW_byte35(out, val) out[0x35] = val 25#define set_SW_byte36(out, val) out[0x36] = val 26#define set_SW_byte38(out, val) out[0x38] = val /*move motor?*/ 27#define set_SW_fres(out, val) putnbyte(out + 0x39, val, 2) 28 29/*************** COARSE CALIBRATION DEFAULT PAYLOAD *************/ 30/* 1b c6 (send coarse cal) command payload - not resolution specific? */ 31/* first group of 3 is offset?, larger # == brighter */ 32/* second group of 3 is gain?, larger # == brighter */ 33static unsigned char coarseCalData_FI60F[] = { 340x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x26, 0x00, 0x26, 0x00, 0x26, 350x00, 0x00, 0x0b, 0x22, 0x00, 0x00, 0x0b, 0x22, 0x00, 0x00, 0x0b, 0x22 36}; 37static unsigned char coarseCalData_S300[] = { 380x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x24, 0x00, 0x28, 0x00, 0x00, 390x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 40}; 41static unsigned char coarseCalData_S1300i[] = { 420x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x24, 0x00, 0x28, 0x00, 0x00, 430x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 44}; 45static unsigned char coarseCalData_S1100[] = { 460x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x26, 0x00, 0x00, 470x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 48}; 49 50/*************** fi-60F 300dpi gray *************/ 51#if 0 52static unsigned char setWindowScan_FI60F_300_g[] = { 530x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 540x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x06, 0xd5, 0x00, 0x00, 550x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 560x00, 0x80, 0x80, 0x01, 0x6c, 0x01, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 570x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 58}; 59 60/*************** fi-60F 400dpi gray *************/ 61static unsigned char setWindowScan_FI60F_400_g[] = { 620x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x58, 0x01, 0x90, 0x00, 0x00, 630x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x09, 0x1c, 0x00, 0x00, 640x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 650x00, 0x80, 0x80, 0x01, 0xca, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 660x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 67}; 68 69/*************** fi-60F 600dpi gray *************/ 70static unsigned char setWindowScan_FI60F_600_g[] = { 710x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 720x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x0d, 0xaa, 0x00, 0x00, 730x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 740x00, 0x80, 0x80, 0x01, 0xca, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 750x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 76}; 77#endif 78 79/*************** fi-60F 150dpi *************/ 80static unsigned char setWindowScan_FI60F_150[] = { 810x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x96, 0x00, 0x00, 820x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x60, 0x00, 0x00, 0x03, 0x6b, 0x00, 0x00, 830x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 840x00, 0x80, 0x80, 0x01, 0x48, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 850x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 86}; 87 88/*************** fi-60F 200dpi *************/ 89static unsigned char setWindowScan_FI60F_200[] = { 900x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0xc8, 0x00, 0x00, 910x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x60, 0x00, 0x00, 0x04, 0x8e, 0x00, 0x00, 920x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 930x00, 0x80, 0x80, 0x01, 0x48, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 940x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 95}; 96 97/*************** fi-60F 300dpi *************/ 98/* 1b d1 (set window) before coarse cal (read 1 line of 0x1c20 bytes) */ 99static unsigned char setWindowCoarseCal_FI60F_300[] = { 1000x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 1010x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 1020x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1030x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1040x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 105}; 106/* 1b d1 (set window) before fine cal (read 16 lines of 0x1c20 bytes) */ 107static unsigned char setWindowFineCal_FI60F_300[] = { 1080x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 1090x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 1100x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1110x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1120x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 113}; 114/* 1b d1 (set window) before gain/offset tables (write 1 line of 0x3840 bytes) */ 115static unsigned char setWindowSendCal_FI60F_300[] = { 1160x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 1170x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 1180x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1190x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1200x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 121}; 122/* 1b c3 (gain?) command header */ 123static unsigned char sendCal1Header_FI60F_300[] = { /* plus 0x3840 data bytes */ 1240x8c, 0x0f, 0x8c, 0x0f, 0x8c, 0x0f, 0x8c, 0x0f, 0x8c, 0x0f, 0x8c, 0x0f, 0x00, 0x04 125}; 126/* 1b c4 (offset?) command header */ 127static unsigned char sendCal2Header_FI60F_300[] = { 1280x39, 0x3f, 0x39, 0x3f, 0x39, 0x3f, 0x07 129}; 130/* 1b d1 (set window) before scan */ 131static unsigned char setWindowScan_FI60F_300[] = { 1320x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 1330x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x60, 0x00, 0x00, 0x06, 0xd5, 0x00, 0x00, 1340x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1350x00, 0x80, 0x80, 0x01, 0x48, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1360x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 137}; 138 139/*************** fi-60F 400dpi *************/ 140static unsigned char setWindowScan_FI60F_400[] = { 1410x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x58, 0x01, 0x90, 0x00, 0x00, 1420x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x20, 0x00, 0x00, 0x09, 0x1c, 0x00, 0x00, 1430x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1440x00, 0x80, 0x80, 0x01, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1450x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 146}; 147 148/*************** fi-60F 600dpi *************/ 149/* 1b d1 (set window) before coarse cal (read 1 line of 0x2160 bytes) */ 150static unsigned char setWindowCoarseCal_FI60F_600[] = { 1510x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 1520x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 1530x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1540x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1550x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 156}; 157/* 1b d1 (set window) before fine cal (read 16 lines of 0x2160 bytes) */ 158static unsigned char setWindowFineCal_FI60F_600[] = { 1590x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x58, 0x03, 0x20, 0x00, 0x00, 1600x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 1610x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1620x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1630x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 164}; 165/* 1b d1 (set window) before gain/offset tables (write 1 line of 0x42c0 bytes) */ 166static unsigned char setWindowSendCal_FI60F_600[] = { 1670x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 1680x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x20, 0x00, 0x00, 0x0d, 0xaa, 0x00, 0x00, 1690x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1700x00, 0x80, 0x80, 0x01, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1710x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 172}; 173/* 1b c3 (gain?) command header */ 174static unsigned char sendCal1Header_FI60F_600[] = { 1750x4f, 0x10, 0x4f, 0x10, 0x4f, 0x10, 0x4f, 0x10, 0x4f, 0x10, 0x4f, 0x10, 0x00, 0x04 176}; 177/* 1b c4 (offset?) command header */ 178static unsigned char sendCal2Header_FI60F_600[] = { 1790x2b, 0x40, 0x2b, 0x40, 0x2b, 0x40, 0x07 180}; 181/* 1b d1 (set window) before scan */ 182static unsigned char setWindowScan_FI60F_600[] = { 1830x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 1840x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x20, 0x00, 0x00, 0x0d, 0xaa, 0x00, 0x00, 1850x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1860x00, 0x80, 0x80, 0x01, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1870x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 188}; 189 190/*************** S300 150dpi *************/ 191/* 1b d1 (set window) before coarse cal (read 1 line of 0x63c0 bytes) */ 192static unsigned char setWindowCoarseCal_S300_150[] = { 1930x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 1940x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 1950x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1960x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 1970x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 198}; 199/* 1b d1 (set window) before fine cal (read 16 lines of 0x63c0 bytes) */ 200static unsigned char setWindowFineCal_S300_150[] = { 2010x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 2020x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x90, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 2030x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2040x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 2050x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 206}; 207/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xc780 bytes) */ 208static unsigned char setWindowSendCal_S300_150[] = { 2090x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 2100x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 2110x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2120x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 2130x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 214}; 215/* 1b c3 (gain?) command header */ 216static unsigned char sendCal1Header_S300_150[] = { /* plus 0xc780 data bytes */ 2170xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0x00, 0x04 218/*0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0x00, 0x05*/ 219}; 220/* 1b c4 (offset?) command header */ 221static unsigned char sendCal2Header_S300_150[] = { /* plus 0xc780 data bytes */ 2220x77, 0x26, 0x77, 0x26, 0x77, 0x26, 0x07 223/*0xd0, 0x34, 0xd0, 0x34, 0xd0, 0x34, 0x08*/ 224}; 225/* 1b d1 (set window) before scan */ 226static unsigned char setWindowScan_S300_150[] = { 2270x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x96, 0x00, 0x96, 0x00, 0x00, 2280x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xc8, 0x00, 0x00, 0x06, 0xe2, 0x00, 0x00, 2290x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2300x00, 0x80, 0x80, 0x01, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2310x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 232}; 233 234/*************** S300 225dpi *************/ 235/* 1b d1 (set window) before coarse cal (read 1 line of 0x63c0 bytes) */ 236static unsigned char setWindowCoarseCal_S300_225[] = { 2370x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 2380x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 2390x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2400x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 2410x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 242}; 243/* 1b d1 (set window) before fine cal (read 16 lines of 0x63c0 bytes) */ 244static unsigned char setWindowFineCal_S300_225[] = { 2450x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 2460x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 2470x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2480x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 2490x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 250}; 251/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xc780 bytes) */ 252static unsigned char setWindowSendCal_S300_225[] = { 2530x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 2540x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 2550x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2560x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 2570x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 258}; 259/* 1b c3 (gain?) command header */ 260static unsigned char sendCal1Header_S300_225[] = { /* plus 0xc780 data bytes */ 2610xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0x00, 0x04 262/*0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0x00, 0x05*/ 263}; 264/* 1b c4 (offset?) command header */ 265static unsigned char sendCal2Header_S300_225[] = { /* plus 0xc780 data bytes */ 2660x77, 0x26, 0x77, 0x26, 0x77, 0x26, 0x07 267/*0xd0, 0x34, 0xd0, 0x34, 0xd0, 0x34, 0x08*/ 268}; 269/* 1b d1 (set window) before scan */ 270static unsigned char setWindowScan_S300_225[] = { 2710x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xe1, 0x00, 0xc8, 0x00, 0x00, 2720x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 2730x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2740x00, 0x80, 0x80, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2750x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 276}; 277 278/*************** S300 300dpi *************/ 279/* 1b d1 (set window) before coarse cal (read 1 line of 0x6000 bytes) */ 280static unsigned char setWindowCoarseCal_S300_300[] = { 2810x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 2820x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 2830x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2840x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 2850x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 286}; 287/* 1b d1 (set window) before fine cal (read 16 lines of 0x6000 bytes) */ 288static unsigned char setWindowFineCal_S300_300[] = { 2890x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 2900x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 2910x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2920x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 2930x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 294}; 295/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xc000 bytes) */ 296static unsigned char setWindowSendCal_S300_300[] = { 2970x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 2980x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 2990x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3000x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 3010x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 302}; 303/* 1b c3 (gain?) command header */ 304static unsigned char sendCal1Header_S300_300[] = { /* plus 0xc000 data bytes */ 3050xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0x00, 0x04 306/*0x30, 0x0c, 0x30, 0x0c, 0x30, 0x0c, 0x30, 0x0c, 0x30, 0x0c, 0x30, 0x0c, 0x00, 0x05*/ 307}; 308/* 1b c4 (offset?) command header */ 309static unsigned char sendCal2Header_S300_300[] = { /* plus 0xc000 data bytes */ 3100x77, 0x26, 0x77, 0x26, 0x77, 0x26, 0x07 311/*0xb8, 0x34, 0xb8, 0x34, 0xb8, 0x34, 0x08*/ 312}; 313/* 1b d1 (set window) before scan */ 314static unsigned char setWindowScan_S300_300[] = { 3150x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 3160x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf0, 0x00, 0x00, 0x0d, 0xc4, 0x00, 0x00, 3170x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3180x00, 0x80, 0x80, 0x01, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3190x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 320}; 321 322/*************** S300 600dpi USB and AC power *************/ 323/* 1b d1 (set window) before coarse cal (read 1 line of 0xbc40 bytes) */ 324static unsigned char setWindowCoarseCal_S300_600[] = { 3250x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 3260x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 3270x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3280x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 3290x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 330}; 331/* 1b d1 (set window) before fine cal (read 16 lines of 0xbc40 bytes) */ 332static unsigned char setWindowFineCal_S300_600[] = { 3330x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x03, 0x20, 0x00, 0x00, 3340x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 3350x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3360x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 3370x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 338}; 339/* 1b d1 (set window) before gain/offset tables (write 1 line of 0x17880 bytes) */ 340static unsigned char setWindowSendCal_S300_600[] = { 3410x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x03, 0x20, 0x00, 0x00, 3420x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 3430x00, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3440x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 3450x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 346}; 347/* 1b c3 (gain?) command header */ 348static unsigned char sendCal1Header_S300_600[] = { 3490x7f, 0x0b, 0x7f, 0x0b, 0x7f, 0x0b, 0x7f, 0x0b, 0x7f, 0x0b, 0x7f, 0x0b, 0x00, 0x04 350}; 351/* 1b c4 (offset?) command header */ 352static unsigned char sendCal2Header_S300_600[] = { 3530xc7, 0x23, 0xc7, 0x23, 0xc7, 0x23, 0x07 354}; 355/* 1b d1 (set window) before scan */ 356static unsigned char setWindowScan_S300_600[] = { 3570x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 3580x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x40, 0x00, 0x00, 0x24, 0x21, 0x00, 0x00, 3590x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3600x00, 0x80, 0x80, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3610x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 362}; 363 364/*S300/S1300/S1300i can also use a USB power cable, but it requires a different set of params?*/ 365/*************** S300/S1300/S1300i 150dpi USB *************/ 366/* 1b d1 (set window) before coarse cal (read 1 line of 0x63c0 bytes) */ 367static unsigned char setWindowCoarseCal_S300_150_U[] = { 3680x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 3690x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 3700x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3710x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 3720x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 373}; 374/* 1b d1 (set window) before fine cal (read 16 lines of 0x63c0 bytes) */ 375static unsigned char setWindowFineCal_S300_150_U[] = { 3760x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 3770x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 3780x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3790x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 3800x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 381}; 382/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xc780 bytes) */ 383static unsigned char setWindowSendCal_S300_150_U[] = { 3840x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 3850x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 3860x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 3870x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 3880x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 389}; 390/* 1b c3 (gain?) command header */ 391static unsigned char sendCal1Header_S300_150_U[] = { /* plus 0xc780 data bytes */ 3920xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0x00, 0x04 393/*0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0x00, 0x05*/ 394}; 395/* 1b c4 (offset?) command header */ 396static unsigned char sendCal2Header_S300_150_U[] = { /* plus 0xc780 data bytes */ 3970x77, 0x26, 0x77, 0x26, 0x77, 0x26, 0x07 398/*0xd0, 0x34, 0xd0, 0x34, 0xd0, 0x34, 0x08*/ 399}; 400/* 1b d1 (set window) before scan */ 401static unsigned char setWindowScan_S300_150_U[] = { 4020x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x96, 0x00, 0x96, 0x00, 0x00, 4030x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x90, 0x00, 0x00, 0x09, 0x0d, 0x00, 0x00, 4040x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4050x00, 0x80, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4060x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 407}; 408 409/*************** S300/S1300/S1300i 225dpi USB *************/ 410/* 1b d1 (set window) before coarse cal (read 1 line of 0x63c0 bytes) */ 411static unsigned char setWindowCoarseCal_S300_225_U[] = { 4120x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 4130x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 4140x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4150x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 4160x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 417}; 418/* 1b d1 (set window) before fine cal (read 16 lines of 0x63c0 bytes) */ 419static unsigned char setWindowFineCal_S300_225_U[] = { 4200x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 4210x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 4220x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4230x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 4240x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 425}; 426/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xc780 bytes) */ 427static unsigned char setWindowSendCal_S300_225_U[] = { 4280x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 4290x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 4300x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4310x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 4320x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 433}; 434/* 1b c3 (gain?) command header */ 435static unsigned char sendCal1Header_S300_225_U[] = { /* plus 0xc780 data bytes */ 4360xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0x00, 0x04 437/*0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0x00, 0x05*/ 438}; 439/* 1b c4 (offset?) command header */ 440static unsigned char sendCal2Header_S300_225_U[] = { /* plus 0xc780 data bytes */ 4410x77, 0x26, 0x77, 0x26, 0x77, 0x26, 0x07 442/*0xd0, 0x34, 0xd0, 0x34, 0xd0, 0x34, 0x08*/ 443}; 444/* 1b d1 (set window) before scan */ 445static unsigned char setWindowScan_S300_225_U[] = { 4460x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xe1, 0x00, 0xc8, 0x00, 0x00, 4470x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 4480x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4490x00, 0x80, 0x80, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4500x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 451}; 452 453/*************** S300/S1300/S1300i 300dpi USB *************/ 454/* 1b d1 (set window) before coarse cal (read 1 line of 0x63c0 bytes) */ 455/* 1b d1 (set window) before coarse cal (read 1 line of 0x63c0 bytes) */ 456static unsigned char setWindowCoarseCal_S300_300_U[] = { 4570x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 4580x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 4590x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4600x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 4610x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 462}; 463/* 1b d1 (set window) before fine cal (read 16 lines of 0x63c0 bytes) */ 464static unsigned char setWindowFineCal_S300_300_U[] = { 4650x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 4660x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xf0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 4670x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4680x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 4690x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 470}; 471/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xc780 bytes) */ 472static unsigned char setWindowSendCal_S300_300_U[] = { 4730x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 4740x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 4750x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4760x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 4770x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 478}; 479/* 1b c3 (gain?) command header */ 480static unsigned char sendCal1Header_S300_300_U[] = { /* plus 0xc780 data bytes */ 4810xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0xe2, 0x0a, 0x00, 0x04 482/*0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0xa5, 0x0b, 0x00, 0x05*/ 483}; 484/* 1b c4 (offset?) command header */ 485static unsigned char sendCal2Header_S300_300_U[] = { /* plus 0xc780 data bytes */ 4860x77, 0x26, 0x77, 0x26, 0x77, 0x26, 0x07 487/*0xd0, 0x34, 0xd0, 0x34, 0xd0, 0x34, 0x08*/ 488}; 489/* 1b d1 (set window) before scan */ 490static unsigned char setWindowScan_S300_300_U[] = { 4910x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 4920x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xf0, 0x00, 0x00, 0x12, 0x11, 0x00, 0x00, 4930x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4940x00, 0x80, 0x80, 0x01, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4950x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 496}; 497 498/*************** S300/S1300/S1300i USB is same as AC power *************/ 499 500/*************** S1300i 150dpi *************/ 501/* 1b d1 (set window) before coarse cal (read 1 line of 0x5e24 bytes) */ 502static unsigned char setWindowCoarseCal_S1300i_150[] = { 5030x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 5040x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xa0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 5050x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5060x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 5070x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 508}; 509/* 1b d1 (set window) before fine cal (read 16 lines of 0x5e24 bytes) */ 510static unsigned char setWindowFineCal_S1300i_150[] = { 5110x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 5120x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xa0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 5130x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5140x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 5150x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 516}; 517/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xbc40 bytes) */ 518static unsigned char setWindowSendCal_S1300i_150[] = { 5190x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 5200x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x60, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 5210x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5220x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 5230x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 524}; 525/* 1b c3 (gain?) command header */ 526static unsigned char sendCal1Header_S1300i_150[] = { /* plus 0xc780 data bytes */ 5270xc4, 0x06, 0xc4, 0x06, 0xc4, 0x06, 0xc4, 0x06, 0xc4, 0x06, 0xc4, 0x06, 0x00, 0x04 528}; 529/* 1b c4 (offset?) command header */ 530static unsigned char sendCal2Header_S1300i_150[] = { /* plus 0xc780 data bytes */ 5310xd7, 0x3b, 0xd7, 0x3b, 0xd7, 0x3b, 0x07 532}; 533/* 1b d1 (set window) before scan */ 534static unsigned char setWindowScan_S1300i_150[] = { 5350x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x96, 0x00, 0x96, 0x00, 0x00, 5360x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x00, 0x00, 0x06, 0xe2, 0x00, 0x00, 5370x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5380x00, 0x80, 0x80, 0x01, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5390x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 540}; 541 542/*************** S1300i 225dpi *************/ 543/* 1b d1 (set window) before coarse cal (read 1 line of 0x63c0 bytes) */ 544static unsigned char setWindowCoarseCal_S1300i_225[] = { 5450x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 5460x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 5470x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5480x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 5490x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 550}; 551/* 1b d1 (set window) before fine cal (read 16 lines of 0x63c0 bytes) */ 552static unsigned char setWindowFineCal_S1300i_225[] = { 5530x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 5540x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 5550x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5560x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 5570x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 558}; 559/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xc780 bytes) */ 560static unsigned char setWindowSendCal_S1300i_225[] = { 5610x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 5620x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 5630x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5640x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 5650x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 566}; 567/* 1b c3 (gain?) command header */ 568static unsigned char sendCal1Header_S1300i_225[] = { /* plus 0xc780 data bytes */ 5690x2f, 0x07, 0x2f, 0x07, 0x2f, 0x07, 0x2f, 0x07, 0x2f, 0x07, 0x2f, 0x07, 0x00, 0x04 570}; 571/* 1b c4 (offset?) command header */ 572static unsigned char sendCal2Header_S1300i_225[] = { /* plus 0xc780 data bytes */ 5730xa5, 0x3b, 0xa5, 0x3b, 0xa5, 0x3b, 0x07 574}; 575/* 1b d1 (set window) before scan */ 576static unsigned char setWindowScan_S1300i_225[] = { 5770x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xe1, 0x00, 0xc8, 0x00, 0x00, 5780x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 5790x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5800x00, 0x80, 0x80, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5810x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 582}; 583 584/*************** S1300i 300dpi *************/ 585/* 1b d1 (set window) before coarse cal (read 1 line of 0x5ee0 bytes) */ 586static unsigned char setWindowCoarseCal_S1300i_300[] = { 5870x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 5880x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 5890x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5900x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 5910x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 592}; 593/* 1b d1 (set window) before fine cal (read 16 lines of 0x5ee0 bytes) */ 594static unsigned char setWindowFineCal_S1300i_300[] = { 5950x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 5960x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 5970x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5980x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 5990x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 600}; 601/* 1b d1 (set window) before gain/offset tables (write 1 line of 0xbdc0 bytes) */ 602static unsigned char setWindowSendCal_S1300i_300[] = { 6030x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 6040x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 6050x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6060x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 6070x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 608}; 609/* 1b c3 (gain?) command header */ 610static unsigned char sendCal1Header_S1300i_300[] = { /* plus 0xc000 data bytes */ 6110xdd, 0x06, 0xdd, 0x06, 0xdd, 0x06, 0xdd, 0x06, 0xdd, 0x06, 0xdd, 0x06, 0x00, 0x04 612}; 613/* 1b c4 (offset?) command header */ 614static unsigned char sendCal2Header_S1300i_300[] = { /* plus 0xc000 data bytes */ 6150x75, 0x3c, 0x75, 0x3c, 0x75, 0x3c, 0x07 616}; 617/* 1b d1 (set window) before scan */ 618static unsigned char setWindowScan_S1300i_300[] = { 6190x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 6200x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x0d, 0xc4, 0x00, 0x00, 6210x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6220x00, 0x80, 0x80, 0x01, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6230x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 624}; 625 626/*************** S1300i 600dpi AC power is same as S300 *************/ 627/*************** except the calibration headers *************/ 628 629/* 1b c3 (gain?) command header */ 630static unsigned char sendCal1Header_S1300i_USB[] = { 6310x4d, 0x06, 0x4d, 0x06, 0x4d, 0x06, 0x4d, 0x06, 0x4d, 0x06, 0x4d, 0x06, 0x00, 0x04 632}; 633/* 1b c4 (offset?) command header */ 634static unsigned char sendCal2Header_S1300i_USB[] = { 6350x8f, 0x40, 0x8f, 0x40, 0x8f, 0x40, 0x07 636}; 637 638/*************** S1300i all resolutions USB power is same as S300 *************/ 639 640/*************** S1100 300dpi USB *************/ 641/* 1b d1 (set window) before coarse cal (read 1 line of 0x45a0 bytes) */ 642static unsigned char setWindowCoarseCal_S1100_300_U[] = { 6430x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 6440x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 6450x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6460x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 6470x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 648}; 649/* 1b d1 (set window) before fine cal (read 16 lines of 0x45a0 bytes) */ 650static unsigned char setWindowFineCal_S1100_300_U[] = { 6510x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x00, 6520x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x58, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 6530x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6540x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 6550x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 656}; 657/* 1b d1 (set window) before gain/offset tables (write 1 line of 0x45a0 bytes) */ 658static unsigned char setWindowSendCal_S1100_300_U[] = { 6590x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 6600x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xd0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 6610x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6620x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x00, 0x00, 6630x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 664}; 665/* 1b c3 (gain?) command header */ 666static unsigned char sendCal1Header_S1100_300_U[] = { /* plus 0x45a0 data bytes */ 6670x1e, 0x10, 0x1e, 0x10, 0x1e, 0x10, 0x1e, 0x10, 0x1e, 0x10, 0x1e, 0x10, 0x00, 0x03 668}; 669/* 1b c4 (offset?) command header */ 670static unsigned char sendCal2Header_S1100_300_U[] = { /* plus 0x45a0 data bytes */ 6710x63, 0x86, 0x63, 0x86, 0x63, 0x86, 0x07 672}; 673/* 1b d1 (set window) before scan */ 674static unsigned char setWindowScan_S1100_300_U[] = { 6750x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 6760x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x58, 0x00, 0x00, 0x1b, 0xe1, 0x00, 0x00, 6770x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6780x00, 0x80, 0x80, 0x01, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6790x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 680}; 681 682/*************** S1100 600dpi USB *************/ 683/* 1b d1 (set window) before coarse cal (read 1 line of 0x3e20 bytes) */ 684static unsigned char setWindowCoarseCal_S1100_600_U[] = { 6850x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 6860x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 6870x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6880x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 6890x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 690}; 691/* 1b d1 (set window) before fine cal (read 16 lines of 0x3e20 bytes) */ 692static unsigned char setWindowFineCal_S1100_600_U[] = { 6930x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x03, 0x20, 0x00, 0x00, 6940x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xf0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 6950x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6960x00, 0x80, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 6970x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 698}; 699/* 1b d1 (set window) before gain/offset tables (write 1 line of 0x7c40 bytes) */ 700static unsigned char setWindowSendCal_S1100_600_U[] = { 7010x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 7020x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 7030x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7040x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 7050x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 706}; 707/* 1b c3 (gain?) command header */ 708static unsigned char sendCal1Header_S1100_600_U[] = { /* plus 0x7c40 data bytes */ 7090xff, 0x11, 0xff, 0x11, 0xff, 0x11, 0xff, 0x11, 0xff, 0x11, 0xff, 0x11, 0x00, 0x03 710}; 711/* 1b c4 (offset?) command header */ 712static unsigned char sendCal2Header_S1100_600_U[] = { /* plus 0x7c40 data bytes */ 7130x4b, 0x81, 0x4b, 0x81, 0x4b, 0x81, 0x07 714}; 715/* 1b d1 (set window) before scan */ 716static unsigned char setWindowScan_S1100_600_U[] = { 7170x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 7180x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xf0, 0x00, 0x00, 0x37, 0xbf, 0x00, 0x00, 7190x00, 0x05, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7200x00, 0x80, 0x80, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7210x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 722}; 723