1 /* sane - Scanner Access Now Easy.
2 
3    Copyright (C) 2002 Sergey Vlasov <vsu@altlinux.ru>
4    Copyright (C) 2002 - 2007 Henning Geinitz <sane@geinitz.org>
5 
6    This file is part of the SANE package.
7 
8    This program is free software; you can redistribute it and/or
9    modify it under the terms of the GNU General Public License as
10    published by the Free Software Foundation; either version 2 of the
11    License, or (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <https://www.gnu.org/licenses/>.
20 
21    As a special exception, the authors of SANE give permission for
22    additional uses of the libraries contained in this release of SANE.
23 
24    The exception is that, if you link a SANE library with other files
25    to produce an executable, this does not by itself cause the
26    resulting executable to be covered by the GNU General Public
27    License.  Your use of that executable is in no way restricted on
28    account of linking the SANE library code into it.
29 
30    This exception does not, however, invalidate any other reasons why
31    the executable file might be covered by the GNU General Public
32    License.
33 
34    If you submit changes to SANE to the maintainers to be included in
35    a subsequent release, you agree by submitting the changes that
36    those changes may be distributed with this exception intact.
37 
38    If you write modifications of your own for SANE, it is your choice
39    whether to permit this exception to apply to your modifications.
40    If you do not wish that, delete this exception notice.
41 */
42 
43 /* Scanner-specific data */
44 
45 #include "gt68xx_low.h"
46 #include "gt68xx_generic.c"
47 #include "gt68xx_gt6801.c"
48 #include "gt68xx_gt6816.c"
49 
50 static GT68xx_Command_Set mustek_gt6816_command_set = {
51   "mustek-gt6816",		/* Name of this command set */
52 
53   0x40,				/* Request type */
54   0x01,				/* Request */
55 
56   0x200c,			/* Memory read - wValue */
57   0x200b,			/* Memory write - wValue */
58 
59   0x2010,			/* Send normal command - wValue */
60   0x3f40,			/* Send normal command - wIndex */
61   0x2011,			/* Receive normal result - wValue */
62   0x3f00,			/* Receive normal result - wIndex */
63 
64   0x2012,			/* Send small command - wValue */
65   0x3f40,			/* Send small command - wIndex */
66   0x2013,			/* Receive small result - wValue */
67   0x3f00,			/* Receive small result - wIndex */
68 
69   /* activate */ NULL,
70   /* deactivate */ NULL,
71   gt6816_check_firmware,
72   gt6816_download_firmware,
73   gt6816_get_power_status,
74   gt6816_get_ta_status,
75   gt6816_lamp_control,
76   gt6816_is_moving,
77   gt68xx_generic_move_relative,
78   gt6816_carriage_home,
79   /* gt68xx_generic_paperfeed */ NULL,
80   gt68xx_generic_start_scan,
81   gt68xx_generic_read_scanned_data,
82   gt6816_stop_scan,
83   gt68xx_generic_setup_scan,
84   gt68xx_generic_set_afe,
85   gt68xx_generic_set_exposure_time,
86   gt68xx_generic_get_id,
87   /* gt68xx_generic_move_paper */ NULL,
88   /* gt6816_document_present */ NULL
89 };
90 
91 static GT68xx_Command_Set mustek_gt6816_sheetfed_command_set = {
92   "mustek-gt6816",		/* Name of this command set */
93 
94   0x40,				/* Request type */
95   0x01,				/* Request */
96 
97   0x200c,			/* Memory read - wValue */
98   0x200b,			/* Memory write - wValue */
99 
100   0x2010,			/* Send normal command - wValue */
101   0x3f40,			/* Send normal command - wIndex */
102   0x2011,			/* Receive normal result - wValue */
103   0x3f00,			/* Receive normal result - wIndex */
104 
105   0x2012,			/* Send small command - wValue */
106   0x3f40,			/* Send small command - wIndex */
107   0x2013,			/* Receive small result - wValue */
108   0x3f00,			/* Receive small result - wIndex */
109 
110   /* activate */ NULL,
111   /* deactivate */ NULL,
112   gt6816_check_firmware,
113   gt6816_download_firmware,
114   gt6816_get_power_status,
115   gt6816_get_ta_status,
116   gt6816_lamp_control,
117   gt6816_is_moving,
118   gt68xx_generic_move_relative,
119   /* gt6816_carriage_home */ NULL,
120   gt68xx_generic_paperfeed,
121   gt68xx_generic_start_scan,
122   gt68xx_generic_read_scanned_data,
123   gt6801_stop_scan,
124   gt68xx_generic_setup_scan,
125   gt68xx_generic_set_afe,
126   gt68xx_generic_set_exposure_time,
127   gt68xx_generic_get_id,
128   gt68xx_generic_move_paper,
129   gt6816_document_present
130 };
131 
132 static GT68xx_Command_Set mustek_gt6801_command_set = {
133   "mustek-gt6801",
134 
135 
136   0x40,				/* Request type */
137   0x01,				/* Request */
138 
139   0x200a,			/* Memory read - wValue */
140   0x2009,			/* Memory write - wValue */
141 
142   0x2010,			/* Send normal command - wValue */
143   0x3f40,			/* Send normal command - wIndex */
144   0x2011,			/* Receive normal result - wValue */
145   0x3f00,			/* Receive normal result - wIndex */
146 
147   0x2012,			/* Send small command - wValue */
148   0x3f40,			/* Send small command - wIndex */
149   0x2013,			/* Receive small result - wValue */
150   0x3f00,			/* Receive small result - wIndex */
151 
152   /* activate */ NULL,
153   /* deactivate */ NULL,
154   gt6801_check_firmware,
155   gt6801_download_firmware,
156   gt6801_get_power_status,
157   /* get_ta_status (FIXME: implement this) */ NULL,
158   gt6801_lamp_control,
159   gt6801_is_moving,
160   /* gt68xx_generic_move_relative *** to be tested */ NULL,
161   gt6801_carriage_home,
162   /* gt68xx_generic_paperfeed */ NULL,
163   gt68xx_generic_start_scan,
164   gt68xx_generic_read_scanned_data,
165   gt6801_stop_scan,
166   gt68xx_generic_setup_scan,
167   gt68xx_generic_set_afe,
168   gt68xx_generic_set_exposure_time,
169   gt68xx_generic_get_id,
170   /* gt68xx_generic_move_paper */ NULL,
171   /* gt6816_document_present */ NULL
172 };
173 
174 static GT68xx_Command_Set plustek_gt6801_command_set = {
175   "plustek-gt6801",
176 
177   0x40,				/* Request type */
178   0x04,				/* Request */
179 
180   0x200a,			/* Memory read - wValue */
181   0x2009,			/* Memory write - wValue */
182 
183   0x2010,			/* Send normal command - wValue */
184   0x3f40,			/* Send normal command - wIndex */
185   0x2011,			/* Receive normal result - wValue */
186   0x3f00,			/* Receive normal result - wIndex */
187 
188   0x2012,			/* Send small command - wValue */
189   0x3f40,			/* Send small command - wIndex */
190   0x2013,			/* Receive small result - wValue */
191   0x3f00,			/* Receive small result - wIndex */
192 
193   /* activate */ NULL,
194   /* deactivate */ NULL,
195   gt6801_check_plustek_firmware,
196   gt6801_download_firmware,
197   gt6801_get_power_status,
198   /* get_ta_status (FIXME: implement this) */ NULL,
199   gt6801_lamp_control,
200   gt6801_is_moving,
201   /* gt68xx_generic_move_relative *** to be tested */ NULL,
202   gt6801_carriage_home,
203   /* gt68xx_generic_paperfeed */ NULL,
204   gt68xx_generic_start_scan,
205   gt68xx_generic_read_scanned_data,
206   gt6801_stop_scan,
207   gt68xx_generic_setup_scan,
208   gt68xx_generic_set_afe,
209   /* set_exposure_time */ NULL,
210   gt68xx_generic_get_id,
211   /* gt68xx_generic_move_paper */ NULL,
212   /* gt6816_document_present */ NULL
213 };
214 
215 static GT68xx_Model unknown_model = {
216   "unknown-scanner",		/* Name */
217   "unknown manufacturer",	/* Device vendor string */
218   "unknown device -- use override to select",	/* Device model name */
219   "unknown",			/* Name of the firmware file */
220   SANE_FALSE,			/* Dynamic allocation flag */
221 
222   &mustek_gt6816_command_set,	/* Command set used by this scanner */
223 
224   600,				/* maximum optical sensor resolution */
225   1200,				/* maximum motor resolution */
226   600,				/* base x-res used to calculate geometry */
227   600,				/* base y-res used to calculate geometry */
228   1200,				/* if ydpi is equal or higher, disable backtracking */
229   SANE_FALSE,			/* Use base_ydpi for all resolutions */
230 
231   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
232   {1200, 600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
233   {8, 0},			/* possible depths in gray mode */
234   {8, 0},			/* possible depths in color mode */
235 
236   SANE_FIX (0.0),		/* Start of scan area in mm  (x) */
237   SANE_FIX (13.0),		/* Start of scan area in mm (y) */
238   SANE_FIX (200.0),		/* Size of scan area in mm (x) */
239   SANE_FIX (280.0),		/* Size of scan area in mm (y) */
240 
241   SANE_FIX (9.0),		/* Start of white strip in mm (y) */
242   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
243 
244   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
245   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
246   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
247   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
248 
249   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
250 
251   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
252   0,				/* CCD distcance for CCD with 6 lines) */
253 
254   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
255   {0x14, 0x07, 0x14, 0x07, 0x14, 0x07},	/* Default offset/gain */
256   {0x157, 0x157, 0x157},	/* Default exposure parameters */
257   SANE_FIX (2.0),		/* Default gamma value */
258 
259   SANE_TRUE,			/* Is this a CIS scanner? */
260   GT68XX_FLAG_NO_STOP		/* Which flags are needed for this scanner? */
261     /* Standard values for unknown scanner */
262 };
263 
264 static GT68xx_Model mustek_2400ta_model = {
265   "mustek-bearpaw-2400-ta",	/* Name */
266   "Mustek",			/* Device vendor string */
267   "BearPaw 2400 TA",		/* Device model name */
268   "A2fw.usb",			/* Name of the firmware file */
269   SANE_FALSE,			/* Dynamic allocation flag */
270 
271   &mustek_gt6816_command_set,	/* Command set used by this scanner */
272 
273   1200,				/* maximum optical sensor resolution */
274   2400,				/* maximum motor resolution */
275   1200,				/* base x-res used to calculate geometry */
276   1200,				/* base y-res used to calculate geometry */
277   1200,				/* if ydpi is equal or higher, disable backtracking */
278   SANE_FALSE,			/* Use base_ydpi for all resolutions */
279 
280   {1200, 600, 300, 200, 100, 50, 0},	/* possible x-resolutions */
281   {2400, 1200, 600, 300, 200, 100, 50, 0},	/* possible y-resolutions */
282   {16, 12, 8, 0},		/* possible depths in gray mode */
283   {16, 12, 8, 0},		/* possible depths in color mode */
284 
285   SANE_FIX (3.67),		/* Start of scan area in mm  (x) */
286   SANE_FIX (7.4),		/* Start of scan area in mm (y) */
287   SANE_FIX (219.0),		/* Size of scan area in mm (x) */
288   SANE_FIX (298.0),		/* Size of scan area in mm (y) */
289 
290   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
291   SANE_FIX (0.635),		/* Start of black mark in mm (x) */
292 
293   SANE_FIX (94.0),		/* Start of scan area in TA mode in mm (x) */
294   SANE_FIX (107.0),		/* Start of scan area in TA mode in mm (y) */
295   SANE_FIX (37.0),		/* Size of scan area in TA mode in mm (x) */
296   SANE_FIX (165.0),		/* Size of scan area in TA mode in mm (y) */
297   SANE_FIX (95.0),		/* Start of white strip in TA mode in mm (y) */
298 
299   0, 24, 48,			/* RGB CCD Line-distance correction in pixel */
300   0,				/* CCD distcance for CCD with 6 lines) */
301 
302   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
303   {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07},	/* Default offset/gain */
304   {0x157, 0x157, 0x157},	/* Default exposure parameters */
305   SANE_FIX (2.0),		/* Default gamma value */
306 
307   SANE_FALSE,			/* Is this a CIS scanner? */
308   GT68XX_FLAG_SCAN_FROM_HOME	/* Which flags are needed for this scanner? */
309     /* flatbed values tested */
310 };
311 
312 static GT68xx_Model mustek_2400taplus_model = {
313   "mustek-bearpaw-2400-ta-plus",	/* Name */
314   "Mustek",			/* Device vendor string */
315   "BearPaw 2400 TA Plus",	/* Device model name */
316   "A2Dfw.usb",			/* Name of the firmware file */
317   SANE_FALSE,			/* Dynamic allocation flag */
318 
319   &mustek_gt6816_command_set,	/* Command set used by this scanner */
320 
321   1200,				/* maximum optical sensor resolution */
322   2400,				/* maximum motor resolution */
323   600,				/* base x-res used to calculate geometry */
324   1200,				/* base y-res used to calculate geometry */
325   1200,				/* if ydpi is equal or higher, disable backtracking */
326   SANE_FALSE,			/* Use base_ydpi for all resolutions */
327 
328   {1200, 600, 300, 100, 50, 0},	/* possible x-resolutions */
329   {2400, 1200, 600, 300, 100, 50, 0},	/* possible y-resolutions */
330   {8, 0},			/* possible depths in gray mode */
331   {16, 12, 8, 0},		/* possible depths in color mode */
332 
333   SANE_FIX (7.41),		/* Start of scan area in mm  (x) */
334   SANE_FIX (7.4),		/* Start of scan area in mm (y) */
335   SANE_FIX (217.5),		/* Size of scan area in mm (x) */
336   SANE_FIX (298.0),		/* Size of scan area in mm (y) */
337 
338   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
339   SANE_FIX (5.0),		/* Start of black mark in mm (x) */
340 
341   SANE_FIX (94.0),		/* Start of scan area in TA mode in mm (x) */
342   SANE_FIX (107.0) /* Start of scan area in TA mode in mm (y) */ ,
343   SANE_FIX (37.0),		/* Size of scan area in TA mode in mm (x) */
344   SANE_FIX (165.0),		/* Size of scan area in TA mode in mm (y) */
345 
346   SANE_FIX (95.0),		/* Start of white strip in TA mode in mm (y) */
347 
348   0, 48, 96,			/* RGB CCD Line-distance correction in pixel */
349   8,				/* CCD distcance for CCD with 6 lines) */
350 
351   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
352   {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07},	/* Default offset/gain */
353   {0x157, 0x157, 0x157},	/* Default exposure parameters */
354   SANE_FIX (2.0),		/* Default gamma value */
355 
356   SANE_FALSE,			/* Is this a CIS scanner? */
357   GT68XX_FLAG_USE_OPTICAL_X | GT68XX_FLAG_SCAN_FROM_HOME	/* Which flags are needed for this scanner? */
358     /* Setup and tested */
359 };
360 
361 static GT68xx_Model mustek_2448taplus_model = {
362   "mustek-bearpaw-2448-ta-plus",	/* Name */
363   "Mustek",			/* Device vendor string */
364   "BearPaw 2448 TA Plus",	/* Device model name */
365   "A2Nfw.usb",			/* Name of the firmware file */
366   SANE_FALSE,			/* Dynamic allocation flag */
367 
368   &mustek_gt6816_command_set,	/* Command set used by this scanner */
369 
370   1200,				/* maximum optical sensor resolution */
371   2400,				/* maximum motor resolution */
372   600,				/* base x-res used to calculate geometry */
373   1200,				/* base y-res used to calculate geometry */
374   1200,				/* if ydpi is equal or higher, disable backtracking */
375   SANE_FALSE,			/* Use base_ydpi for all resolutions */
376 
377   {1200, 600, 300, 200, 100, 0},	/* possible x-resolutions */
378   {2400, 1200, 600, 300, 200, 100, 0},	/* possible y-resolutions */
379   {16, 12, 8, 0},		/* possible depths in gray mode */
380   {16, 12, 8, 0},		/* possible depths in color mode */
381 
382   SANE_FIX (7.41),		/* Start of scan area in mm  (x) */
383   SANE_FIX (7.4),		/* Start of scan area in mm (y) */
384   SANE_FIX (216.3),		/* Size of scan area in mm (x) */
385   SANE_FIX (297.5),		/* Size of scan area in mm (y) */
386 
387   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
388   SANE_FIX (4.0),		/* Start of black mark in mm (x) */
389 
390   SANE_FIX (94.0),		/* Start of scan area in TA mode in mm (x) */
391   SANE_FIX (105.0),		/* Start of scan area in TA mode in mm (y) */
392   SANE_FIX (36.0),		/* Size of scan area in TA mode in mm (x) */
393   SANE_FIX (165.0),		/* Size of scan area in TA mode in mm (y) */
394 
395   SANE_FIX (95.0),		/* Start of white strip in TA mode in mm (y) */
396 
397   0, 48, 96,			/* RGB CCD Line-distance correction in pixel */
398   8,				/* CCD distcance for CCD with 6 lines) */
399 
400   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
401   {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07},	/* Default offset/gain */
402   {0x157, 0x157, 0x157},	/* Default exposure parameters */
403   SANE_FIX (2.0),		/* Default gamma value */
404 
405   SANE_FALSE,			/* Is this a CIS scanner? */
406   GT68XX_FLAG_NO_STOP		/* Which flags are needed for this scanner? */
407     /* Based on data from Jakub Dvořák <xdvorak@chello.cz>. */
408 };
409 
410 static GT68xx_Model mustek_1200ta_model = {
411   "mustek-bearpaw-1200-ta",	/* Name */
412   "Mustek",			/* Device vendor string */
413   "BearPaw 1200 TA",		/* Device model name */
414   "A1fw.usb",			/* Name of the firmware file */
415   SANE_FALSE,			/* Dynamic allocation flag */
416 
417   &mustek_gt6816_command_set,	/* Command set used by this scanner */
418 
419   600,				/* maximum optical sensor resolution */
420   1200,				/* maximum motor resolution */
421   600,				/* base x-res used to calculate geometry */
422   600,				/* base y-res used to calculate geometry */
423   1200,				/* if ydpi is equal or higher, disable backtracking */
424   SANE_TRUE,			/* Use base_ydpi for all resolutions */
425 
426   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
427   {1200, 600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
428   {16, 12, 8, 0},		/* possible depths in gray mode */
429   {16, 12, 8, 0},		/* possible depths in color mode */
430 
431   SANE_FIX (8.4),		/* Start of scan area in mm  (x) */
432   SANE_FIX (7.5),		/* Start of scan area in mm (y) */
433   SANE_FIX (220.0),		/* Size of scan area in mm (x) */
434   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
435 
436   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
437   SANE_FIX (6.9),		/* Start of black mark in mm (x) */
438 
439   SANE_FIX (98.0),		/* Start of scan area in TA mode in mm (x) */
440   SANE_FIX (108.0),		/* Start of scan area in TA mode in mm (y) */
441   SANE_FIX (37.0),		/* Size of scan area in TA mode in mm (x) */
442   SANE_FIX (163.0),		/* Size of scan area in TA mode in mm (y) */
443 
444   SANE_FIX (95.0),		/* Start of white strip in TA mode in mm (y) */
445 
446   32, 16, 0,			/* RGB CCD Line-distance correction in pixel */
447   0,				/* CCD distcance for CCD with 6 lines) */
448 
449   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
450   {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07},	/* Default offset/gain */
451   {0x157, 0x157, 0x157},	/* Default exposure parameters */
452   SANE_FIX (2.0),		/* Default gamma value */
453 
454   SANE_FALSE,			/* Is this a CIS scanner? */
455   0				/* Which flags are needed for this scanner? */
456     /* Setup for 1200 TA */
457 };
458 
459 static GT68xx_Model mustek_1200cuplus_model = {
460   "mustek-bearpaw-1200-cu-plus",	/* Name */
461   "Mustek",			/* Device vendor string */
462   "Bearpaw 1200 CU Plus",	/* Device model name */
463   "PS1Dfw.usb",			/* Name of the firmware file */
464   SANE_FALSE,			/* Dynamic allocation flag */
465 
466   &mustek_gt6816_command_set,	/* Command set used by this scanner */
467 
468   600,				/* maximum optical sensor resolution */
469   1200,				/* maximum motor resolution */
470   600,				/* base x-res used to calculate geometry */
471   600,				/* base y-res used to calculate geometry */
472   1200,				/* if ydpi is equal or higher, disable backtracking */
473   SANE_FALSE,			/* Use base_ydpi for all resolutions */
474 
475   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
476   {1200, 600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
477   {16, 12, 8, 0},		/* possible depths in gray mode */
478   {16, 12, 8, 0},		/* possible depths in color mode */
479 
480   SANE_FIX (0.0),		/* Start of scan area in mm  (x) */
481   SANE_FIX (13.0),		/* Start of scan area in mm (y) */
482   SANE_FIX (217.0),		/* Size of scan area in mm (x) */
483   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
484 
485   SANE_FIX (9.0),		/* Start of white strip in mm (y) */
486   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
487 
488   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
489   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
490   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
491   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
492 
493   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
494 
495   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
496   0,				/* CCD distcance for CCD with 6 lines) */
497 
498   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
499   {0x14, 0x07, 0x14, 0x07, 0x14, 0x07},	/* Default offset/gain */
500   {0x157, 0x157, 0x157},	/* Default exposure parameters */
501   SANE_FIX (2.0),		/* Default gamma value */
502 
503   SANE_TRUE,			/* Is this a CIS scanner? */
504   GT68XX_FLAG_NO_STOP		/* Which flags are needed for this scanner? */
505     /* Tested by Hamersky Robert r.hamersky at utanet.at */
506 };
507 
508 static GT68xx_Model mustek_1200cuplus2_model = {
509   "mustek-bearpaw-1200-cu-plus-2",	/* Name */
510   "Mustek",			/* Device vendor string */
511   "Bearpaw 1200 CU Plus",	/* Device model name */
512   "PS1Gfw.usb",			/* Name of the firmware file */
513   SANE_FALSE,			/* Dynamic allocation flag */
514 
515   &mustek_gt6816_command_set,	/* Command set used by this scanner */
516 
517   600,				/* maximum optical sensor resolution */
518   1200,				/* maximum motor resolution */
519   600,				/* base x-res used to calculate geometry */
520   600,				/* base y-res used to calculate geometry */
521   1200,				/* if ydpi is equal or higher, disable backtracking */
522   SANE_FALSE,			/* Use base_ydpi for all resolutions */
523 
524   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
525   {1200, 600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
526   {16, 12, 8, 0},		/* possible depths in gray mode */
527   {16, 12, 8, 0},		/* possible depths in color mode */
528 
529   SANE_FIX (4.0),		/* Start of scan area in mm  (x) */
530   SANE_FIX (13.0),		/* Start of scan area in mm (y) */
531   SANE_FIX (217.0),		/* Size of scan area in mm (x) */
532   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
533 
534   SANE_FIX (5.0),		/* Start of white strip in mm (y) */
535   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
536 
537   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
538   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
539   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
540   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
541 
542   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
543 
544   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
545   0,				/* CCD distcance for CCD with 6 lines) */
546 
547   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
548   {0x19, 0x03, 0x1b, 0x05, 0x19, 0x03},	/* Default offset/gain */
549   {0xb0, 0xb0, 0xb0},	/* Default exposure parameters */
550   SANE_FIX (1.5),		/* Default gamma value */
551 
552   SANE_TRUE,			/* Is this a CIS scanner? */
553   GT68XX_FLAG_NO_STOP		/* Which flags are needed for this scanner? */
554     /* Tested by hmg */
555 };
556 
557 static GT68xx_Model mustek_2400cuplus_model = {
558   "mustek-bearpaw-2400-cu-plus",	/* Name */
559   "Mustek",			/* Device vendor string */
560   "BearPaw 2400 CU Plus",	/* Device model name */
561   "PS2Dfw.usb",			/* Name of the firmware file */
562   SANE_FALSE,			/* Dynamic allocation flag */
563 
564   &mustek_gt6816_command_set,	/* Command set used by this scanner */
565 
566   1200,				/* maximum optical sensor resolution */
567   2400,				/* maximum motor resolution */
568   1200,				/* base x-res used to calculate geometry */
569   1200,				/* base y-res used to calculate geometry */
570   1200,				/* if ydpi is equal or higher, disable backtracking */
571   SANE_FALSE,			/* Use base_ydpi for all resolutions */
572 
573   {1200, 600, 300, 200, 150, 100, 50, 0},	/* possible x-resolutions */
574   {2400, 1200, 600, 300, 200, 150, 100, 50, 0},	/* possible y-resolutions */
575   {16, 12, 8, 0},		/* possible depths in gray mode */
576   {16, 12, 8, 0},		/* possible depths in color mode */
577 
578   SANE_FIX (2.0),		/* Start of scan area in mm  (x) */
579   SANE_FIX (13.0),		/* Start of scan area in mm (y) */
580   SANE_FIX (217.0),		/* Size of scan area in mm (x) */
581   SANE_FIX (300.0),		/* Size of scan area in mm (y) */
582 
583   SANE_FIX (4.0),		/* Start of white strip in mm (y) */
584   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
585 
586   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
587   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
588   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
589   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
590 
591   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
592 
593   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
594   0,				/* CCD distcance for CCD with 6 lines) */
595 
596   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
597   {0x15, 0x08, 0x12, 0x05, 0x12, 0x05},	/* Default offset/gain */
598   {0x2a0, 0x1ab, 0x10d},	/* Default exposure parameters */
599   SANE_FIX (1.5),		/* Default gamma value */
600 
601   SANE_TRUE,			/* Is this a CIS scanner? */
602   GT68XX_FLAG_NO_STOP		/* Which flags are needed for this scanner? */
603     /* Setup and tested */
604 };
605 
606 /* Seems that Mustek ScanExpress 1200 UB Plus, the Mustek BearPaw 1200 CU
607  * and lots of other scanners have the same USB identifier.
608  */
609 static GT68xx_Model mustek_1200cu_model = {
610   "mustek-bearpaw-1200-cu",	/* Name */
611   "Mustek",			/* Device vendor string */
612   "BearPaw 1200 CU",		/* Device model name */
613   "PS1fw.usb",			/* Name of the firmware file */
614   SANE_FALSE,			/* Dynamic allocation flag */
615 
616   &mustek_gt6801_command_set,	/* Command set used by this scanner */
617 
618   600,				/* maximum optical sensor resolution */
619   1200,				/* maximum motor resolution */
620   600,				/* base x-res used to calculate geometry */
621   600,				/* base y-res used to calculate geometry */
622   600,				/* if ydpi is equal or higher, disable backtracking */
623   SANE_TRUE,			/* Use base_ydpi for all resolutions */
624 
625   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
626   {1200, 600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
627   {12, 8, 0},			/* possible depths in gray mode */
628   {12, 8, 0},			/* possible depths in color mode */
629 
630   SANE_FIX (0.0),		/* Start of scan area in mm  (x) */
631   SANE_FIX (13.0),		/* Start of scan area in mm (y) */
632   SANE_FIX (217.0),		/* Size of scan area in mm (x) */
633   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
634 
635   SANE_FIX (4.2),		/* Start of white strip in mm (y) */
636   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
637 
638   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
639   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
640   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
641   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
642 
643   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
644 
645   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
646   0,				/* CCD distcance for CCD with 6 lines) */
647 
648   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
649   {0x13, 0x04, 0x15, 0x06, 0x0f, 0x02},	/* Default offset/gain */
650   {0x150, 0x150, 0x150},	/* Default exposure parameters */
651   SANE_FIX (2.0),		/* Default gamma value */
652 
653   SANE_TRUE,			/* Is this a CIS scanner? */
654   0				/* Which flags are needed for this scanner? */
655     /* Setup and tested */
656 };
657 
658 static GT68xx_Model mustek_scanexpress1200ubplus_model = {
659   "mustek-scanexpress-1200-ub-plus",	/* Name */
660   "Mustek",			/* Device vendor string */
661   "ScanExpress 1200 UB Plus",	/* Device model name */
662   "SBfw.usb",			/* Name of the firmware file */
663   SANE_FALSE,			/* Dynamic allocation flag */
664 
665   &mustek_gt6801_command_set,	/* Command set used by this scanner */
666 
667   600,				/* maximum optical sensor resolution */
668   1200,				/* maximum motor resolution */
669   600,				/* base x-res used to calculate geometry */
670   600,				/* base y-res used to calculate geometry */
671   1200,				/* if ydpi is equal or higher, disable backtracking */
672   SANE_TRUE,			/* Use base_ydpi for all resolutions */
673 
674   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
675   {1200, 600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
676   {12, 8, 0},			/* possible depths in gray mode */
677   {12, 8, 0},			/* possible depths in color mode */
678 
679   SANE_FIX (0.0),		/* Start of scan area in mm  (x) */
680   SANE_FIX (15.5),		/* Start of scan area in mm (y) */
681   SANE_FIX (217.0),		/* Size of scan area in mm (x) */
682   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
683 
684   SANE_FIX (6.5),		/* Start of white strip in mm (y) */
685   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
686 
687   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
688   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
689   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
690   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
691 
692   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
693 
694   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
695   0,				/* CCD distcance for CCD with 6 lines) */
696 
697   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
698   {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04},	/* Default offset/gain */
699   {0x157, 0x157, 0x157},	/* Default exposure parameters */
700   SANE_FIX (2.0),		/* Default gamma value */
701 
702   SANE_TRUE,			/* Is this a CIS scanner? */
703   0				/* Which flags are needed for this scanner? */
704     /* Setup and tested */
705 };
706 
707 static GT68xx_Model mustek_scanexpress1248ub_model = {
708   "mustek-scanexpress-1248-ub",	/* Name */
709   "Mustek",			/* Device vendor string */
710   "ScanExpress 1248 UB",	/* Device model name */
711   "SBSfw.usb",			/* Name of the firmware file */
712   SANE_FALSE,			/* Dynamic allocation flag */
713 
714   &mustek_gt6816_command_set,	/* Command set used by this scanner */
715 
716   600,				/* maximum optical sensor resolution */
717   1200,				/* maximum motor resolution */
718   600,				/* base x-res used to calculate geometry */
719   600,				/* base y-res used to calculate geometry */
720   1200,				/* if ydpi is equal or higher, disable backtracking */
721   SANE_FALSE,			/* Use base_ydpi for all resolutions */
722 
723   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
724   {1200, 600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
725   {16, 12, 8, 0},		/* possible depths in gray mode */
726   {16, 12, 8, 0},		/* possible depths in color mode */
727 
728   SANE_FIX (4.0),		/* Start of scan area in mm  (x) */
729   SANE_FIX (14.5),		/* Start of scan area in mm (y) */
730   SANE_FIX (217.0),		/* Size of scan area in mm (x) */
731   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
732 
733   SANE_FIX (9.0),		/* Start of white strip in mm (y) */
734   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
735 
736   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
737   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
738   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
739   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
740 
741   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
742 
743   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
744   0,				/* CCD distcance for CCD with 6 lines) */
745 
746   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
747   {0x1e, 0x08, 0x21, 0x0d, 0x1b, 0x05},	/* Default offset/gain */
748   {0x50, 0x50, 0x50},	/* Default exposure parameters */
749   SANE_FIX (1.5),		/* Default gamma value */
750 
751   SANE_TRUE,			/* Is this a CIS scanner? */
752   GT68XX_FLAG_NO_STOP		/* Which flags are needed for this scanner? */
753     /* tested by hmg */
754 };
755 
756 
757 static GT68xx_Model artec_ultima2000_model = {
758   "artec-ultima-2000",		/* Name */
759   "Artec",			/* Device vendor string */
760   "Ultima 2000",		/* Device model name */
761   "Gt680xfw.usb",		/* Name of the firmware file */
762   SANE_FALSE,			/* Dynamic allocation flag */
763 
764   &mustek_gt6801_command_set,	/* Command set used by this scanner */
765 
766   600,				/* maximum optical sensor resolution */
767   600,				/* maximum motor resolution */
768   600,				/* base x-res used to calculate geometry */
769   600,				/* base y-res used to calculate geometry */
770   1200,				/* if ydpi is equal or higher, disable backtracking */
771   SANE_TRUE,			/* Use base_ydpi for all resolutions */
772 
773   {600, 300, 200, 150, 100, 75, 50, 0},	/* possible x-resolutions */
774   {600, 300, 200, 150, 100, 75, 50, 0},	/* possible y-resolutions */
775   {12, 8, 0},			/* possible depths in gray mode */
776   {12, 8, 0},			/* possible depths in color mode */
777 
778   SANE_FIX (2.0),		/* Start of scan area in mm  (x) */
779   SANE_FIX (7.0),		/* Start of scan area in mm (y) */
780   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
781   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
782 
783   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
784   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
785 
786   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
787   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
788   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
789   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
790 
791   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
792 
793   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
794   0,				/* CCD distcance for CCD with 6 lines) */
795 
796   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
797   {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04},	/* Default offset/gain */
798   {0x157, 0x157, 0x157},	/* Default exposure parameters */
799   SANE_FIX (2.0),		/* Default gamma value */
800 
801   SANE_TRUE,			/* Is this a CIS scanner? */
802   GT68XX_FLAG_MIRROR_X | GT68XX_FLAG_MOTOR_HOME | GT68XX_FLAG_OFFSET_INV	/* Which flags are needed for this scanner? */
803     /* Setup for Cytron TCM MD 9385 */
804 };
805 
806 static GT68xx_Model plustek_opticslim500plus_model = {
807   "plustek-opticslim-500plus",	/* Name */
808   "Plustek",			/* Device vendor string */
809   "OpticSlim 500 Plus",		/* Device model name */
810   "cis3R5B1.fw",		/* Name of the firmware file */
811   SANE_FALSE,			/* Dynamic allocation flag */
812 
813   &mustek_gt6816_command_set,	/* Command set used by this scanner */
814 
815   600,				/* maximum optical sensor resolution */
816   1200,				/* maximum motor resolution */
817   600,				/* base x-res used to calculate geometry */
818   600,				/* base y-res used to calculate geometry */
819   1200,				/* if ydpi is equal or higher, disable backtracking */
820   SANE_FALSE,			/* Use base_ydpi for all resolutions */
821 
822   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
823   {1200, 600, 300, 150, 75, 50, 0},/* possible y-resolutions */
824   {16, 8, 0},			/* possible depths in gray mode */
825   {16, 8, 0},			/* possible depths in color mode */
826 
827   SANE_FIX (1.0),		/* Start of scan area in mm  (x) */
828   SANE_FIX (9.5),		/* Start of scan area in mm (y) */
829   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
830   SANE_FIX (142.0),		/* Size of scan area in mm (y) */
831 
832   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
833   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
834 
835   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
836   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
837   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
838   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
839 
840   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
841 
842   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
843   0,				/* CCD distcance for CCD with 6 lines) */
844 
845   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
846   {0x32, 0x02, 0x26, 0x07, 0x26, 0x09},	/* Default offset/gain */
847   {0x127, 0x127, 0x127},	/* Default exposure parameters */
848   SANE_FIX (1.5),		/* Default gamma value */
849 
850   SANE_TRUE,			/* Is this a CIS scanner? */
851   GT68XX_FLAG_NO_CALIBRATE	/* Which flags are needed for this scanner? */
852 };
853 
854 static GT68xx_Model mustek_2400cu_model = {
855   "mustek-bearpaw-2400-cu",	/* Name */
856   "Mustek",			/* Device vendor string */
857   "BearPaw 2400 CU",		/* Device model name */
858   "PS2fw.usb",			/* Name of the firmware file */
859   SANE_FALSE,			/* Dynamic allocation flag */
860 
861   &mustek_gt6801_command_set,	/* Command set used by this scanner */
862 
863   1200,				/* maximum optical sensor resolution */
864   2400,				/* maximum motor resolution */
865   1200,				/* base x-res used to calculate geometry */
866   1200,				/* base y-res used to calculate geometry */
867   1200,				/* if ydpi is equal or higher, disable backtracking */
868   SANE_TRUE,			/* Use base_ydpi for all resolutions */
869 
870   {1200, 600, 300, 150, 100, 50, 0},	/* possible x-resolutions */
871   {2400, 1200, 600, 300, 150, 100, 50, 0},	/* possible y-resolutions */
872   {12, 8, 0},			/* possible depths in gray mode */
873   {12, 8, 0},			/* possible depths in color mode */
874 
875   SANE_FIX (0.0),		/* Start of scan area in mm  (x) */
876   SANE_FIX (13.5),		/* Start of scan area in mm (y) */
877   SANE_FIX (215.0),		/* Size of scan area in mm (x) */
878   SANE_FIX (296.9),		/* Size of scan area in mm (y) */
879 
880   SANE_FIX (5.5),		/* Start of white strip in mm (y) */
881   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
882 
883   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
884   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
885   SANE_FIX (100.9),		/* Size of scan area in TA mode in mm (x) */
886   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
887 
888   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
889 
890   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
891   0,				/* CCD distcance for CCD with 6 lines) */
892 
893   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
894   {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04},	/* Default offset/gain */
895   {0x157, 0x157, 0x157},	/* Default exposure parameters */
896   SANE_FIX (2.0),		/* Default gamma value */
897 
898   SANE_TRUE,			/* Is this a CIS scanner? */
899   0				/* Which flags are needed for this scanner? */
900     /* basically tested, details may need tweaking */
901 };
902 
903 static GT68xx_Model mustek_scanexpress2400usb_model = {
904   "mustek-scanexpress-2400-usb",	/* Name */
905   "Mustek",			/* Device vendor string */
906   "ScanExpress 2400 USB",	/* Device model name */
907   "P9fw.usb",			/* Name of the firmware file */
908   SANE_FALSE,			/* Dynamic allocation flag */
909 
910   &mustek_gt6801_command_set,	/* Command set used by this scanner */
911 
912   1200,				/* maximum optical sensor resolution */
913   1200,				/* maximum motor resolution */
914   1200,				/* base x-res used to calculate geometry */
915   1200,				/* base y-res used to calculate geometry */
916   1200,				/* if ydpi is equal or higher, disable backtracking */
917   SANE_TRUE,			/* Use base_ydpi for all resolutions */
918 
919   {600, 300, 150, 100, 50, 0},	/* possible x-resolutions */
920   {1200, 600, 300, 150, 100, 50, 0},	/* possible y-resolutions */
921   {12, 8, 0},			/* possible depths in gray mode */
922   {12, 8, 0},			/* possible depths in color mode */
923 
924   SANE_FIX (5.0),		/* Start of scan area in mm  (x) */
925   SANE_FIX (12.0),		/* Start of scan area in mm (y) */
926   SANE_FIX (224.0),		/* Size of scan area in mm (x) */
927   SANE_FIX (300.0),		/* Size of scan area in mm (y) */
928 
929   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
930   SANE_FIX (7.0),		/* Start of black mark in mm (x) */
931 
932   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
933   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
934   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
935   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
936 
937   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
938 
939   24, 12, 0,			/* RGB CCD Line-distance correction in pixel */
940   0,				/* CCD distcance for CCD with 6 lines) */
941 
942   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
943   {0x12, 0x06, 0x0e, 0x03, 0x19, 0x25},	/* Default offset/gain */
944   {0x157, 0x157, 0x157},	/* Default exposure parameters */
945   SANE_FIX (2.0),		/* Default gamma value */
946 
947   SANE_FALSE,			/* Is this a CIS scanner? */
948   GT68XX_FLAG_UNTESTED | GT68XX_FLAG_SE_2400	/* Which flags are needed for this scanner? */
949     /* only partly tested, from "Fan Dan" <dan_fancn@hotmail.com> */
950 };
951 
952 static GT68xx_Model mustek_a3usb_model = {
953   "mustek-scanexpress-a3-usb",	/* Name */
954   "Mustek",			/* Device vendor string */
955   "ScanExpress A3 USB",		/* Device model name */
956   "A32fw.usb",			/* Name of the firmware file */
957   SANE_FALSE,			/* Dynamic allocation flag */
958 
959   &mustek_gt6816_command_set,	/* Command set used by this scanner */
960 
961   300,				/* maximum optical sensor resolution */
962   600,				/* maximum motor resolution */
963   300,				/* base x-res used to calculate geometry */
964   300,				/* base y-res used to calculate geometry */
965   1200,				/* if ydpi is equal or higher, disable backtracking */
966   SANE_TRUE,			/* Use base_ydpi for all resolutions */
967 
968   {300, 150, 75, 50, 0},	/* possible x-resolutions */
969   {600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
970   {12, 8, 0},			/* possible depths in gray mode */
971   {12, 8, 0},			/* possible depths in color mode */
972 
973   SANE_FIX (7.0),		/* Start of scan area in mm  (x) */
974   SANE_FIX (11.5),		/* Start of scan area in mm (y) */
975   SANE_FIX (297.0),		/* Size of scan area in mm (x) */
976   SANE_FIX (433.0),		/* Size of scan area in mm (y) */
977 
978   SANE_FIX (2.4),		/* Start of white strip in mm (y) */
979   SANE_FIX (0),			/* Start of black mark in mm (x) */
980 
981   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
982   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
983   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
984   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
985 
986   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
987 
988   0, 5, 5,			/* RGB CCD Line-distance correction in pixel */
989   0,				/* CCD distcance for CCD with 6 lines) */
990 
991   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
992   {0x14, 0x05, 0x12, 0x05, 0x17, 0x0c},	/* Default offset/gain */
993   {0x157, 0x157, 0x157},	/* Default exposure parameters */
994   SANE_FIX (1.5),		/* Default gamma value */
995 
996   SANE_TRUE,			/* Is this a CIS scanner? */
997   GT68XX_FLAG_CIS_LAMP 		/* Which flags are needed for this scanner? */
998     /* Tested by hmg. This scanner is a bit strange as it uses a CIS sensor but
999        it also has a lamp. So the lamp needs to be heated but CIS mode must be
1000        used for scanning and calibration. There is no TA for that scanner */
1001 };
1002 
1003 static GT68xx_Model lexmark_x73_model = {
1004   "lexmark-x73",		/* Name */
1005   "Lexmark",			/* Device vendor string */
1006   "X73",			/* Device model name */
1007   "OSLO3071b2.usb",		/* Name of the firmware file */
1008   SANE_FALSE,			/* Dynamic allocation flag */
1009 
1010   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1011 
1012   600,				/* maximum optical sensor resolution */
1013   1200,				/* maximum motor resolution */
1014   600,				/* base x-res used to calculate geometry */
1015   600,				/* base y-res used to calculate geometry */
1016   1200,				/* if ydpi is equal or higher, disable backtracking */
1017   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1018 
1019   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1020   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1021   {16, 12, 8, 0},		/* possible depths in gray mode */
1022   {16, 12, 8, 0},		/* possible depths in color mode */
1023 
1024   SANE_FIX (6.519),		/* Start of scan area in mm  (x) */
1025   SANE_FIX (12.615),		/* Start of scan area in mm (y) */
1026   SANE_FIX (220.0),		/* Size of scan area in mm (x) */
1027   SANE_FIX (297.0),		/* Size of scan area in mm (y) */
1028 
1029   SANE_FIX (1.0),		/* Start of white strip in mm (y) */
1030   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
1031 
1032   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1033   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1034   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1035   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1036 
1037   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1038 
1039   32, 16, 0,			/* RGB CCD Line-distance correction in pixel */
1040   0,				/* CCD distcance for CCD with 6 lines) */
1041 
1042   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1043   {0x14, 0x07, 0x14, 0x07, 0x14, 0x07},	/* Default offset/gain */
1044   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1045   SANE_FIX (2.0),		/* Default gamma value */
1046 
1047   SANE_FALSE,			/* Is this a CIS scanner? */
1048   0				/* Which flags are needed for this scanner? */
1049     /* When using automatic gain pictures are too dark. Only some ad hoc tests for
1050        lexmark x70 were done so far. WARNING: Don't use the Full scan option
1051        with the above settings, otherwise the sensor may bump at the end of
1052        the sledge and the scanner may be damaged!  */
1053 };
1054 
1055 static GT68xx_Model plustek_op1248u_model = {
1056   "plustek-op1248u",		/* Name */
1057   "Plustek",			/* Device vendor string */
1058   "OpticPro 1248U",		/* Device model name */
1059   "ccd548.fw",			/* Name of the firmware file */
1060   SANE_FALSE,			/* Dynamic allocation flag */
1061 
1062   &plustek_gt6801_command_set,	/* Command set used by this scanner */
1063 
1064   600,				/* maximum optical sensor resolution */
1065   600,				/* maximum motor resolution */
1066   600,				/* base x-res used to calculate geometry */
1067   600,				/* base y-res used to calculate geometry */
1068   1200,				/* if ydpi is equal or higher, disable backtracking */
1069   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1070 
1071   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1072   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1073   {12, 8, 0},			/* possible depths in gray mode */
1074   {12, 8, 0},			/* possible depths in color mode */
1075 
1076   SANE_FIX (3.5),		/* Start of scan area in mm  (x) */
1077   SANE_FIX (7.5),		/* Start of scan area in mm (y) */
1078   SANE_FIX (216.0),		/* Size of scan area in mm (x) */
1079   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1080 
1081   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1082   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1083 
1084   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1085   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1086   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1087   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1088 
1089   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1090 
1091   0, 8, 16,			/* RGB CCD Line-distance correction in pixel */
1092   0,				/* CCD distcance for CCD with 6 lines) */
1093 
1094   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
1095   {0x1e, 0x24, 0x1d, 0x1f, 0x1d, 0x20},	/* Default offset/gain */
1096   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1097   SANE_FIX (2.0),		/* Default gamma value */
1098 
1099   SANE_FALSE,			/* Is this a CIS scanner? */
1100   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE	/* Which flags are needed for this scanner? */
1101     /* tested */
1102 };
1103 
1104 static GT68xx_Model plustek_u16b_model = {
1105   "plustek-u16b",		/* Name */
1106   "Plustek",			/* Device vendor string */
1107   "OpticPro U16B",		/* Device model name */
1108   "ccd68861.fw",		/* Name of the firmware file */
1109   SANE_FALSE,			/* Dynamic allocation flag */
1110 
1111   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1112 
1113   600,				/* maximum optical sensor resolution */
1114   600,				/* maximum motor resolution */
1115   600,				/* base x-res used to calculate geometry */
1116   600,				/* base y-res used to calculate geometry */
1117   1200,				/* if ydpi is equal or higher, disable backtracking */
1118   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1119 
1120   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1121   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1122   {16, 8, 0},			/* possible depths in gray mode */
1123   {16, 12, 8, 0},		/* possible depths in color mode */
1124 
1125   SANE_FIX (5.5),		/* Start of scan area in mm  (x) */
1126   SANE_FIX (8.5),		/* Start of scan area in mm (y) */
1127   SANE_FIX (216.0),		/* Size of scan area in mm (x) */
1128   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1129 
1130   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1131   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1132 
1133   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1134   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1135   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1136   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1137 
1138   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1139 
1140   0, 8, 16,			/* RGB CCD Line-distance correction in pixel */
1141   0,				/* CCD distcance for CCD with 6 lines) */
1142 
1143   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
1144   {0x18, 0x16, 0x16, 0x0f, 0x17, 0x11},	/* Default offset/gain */
1145   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1146   SANE_FIX (2.0),		/* Default gamma value */
1147 
1148   SANE_FALSE,			/* Is this a CIS scanner? */
1149   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_NO_POWER_STATUS |
1150     GT68XX_FLAG_NO_LINEMODE
1151     /* Which flags are needed for this scanner? */
1152     /* Tested with a U16B by Henning Meier-Geinitz. 600 dpi is maximum
1153        vertically. Line mode does not work. That's a hardware/firmware
1154        issue. */
1155 };
1156 
1157 static GT68xx_Model plustek_ops12_model = {
1158   "plustek-opticpro-s12",	/* Name */
1159   "Plustek",			/* Device vendor string */
1160   "OpticPro S12",		/* Device model name */
1161   "ccd548.fw",			/* Name of the firmware file */
1162   SANE_FALSE,			/* Dynamic allocation flag */
1163 
1164   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1165 
1166   600,				/* maximum optical sensor resolution */
1167   600,				/* maximum motor resolution */
1168   600,				/* base x-res used to calculate geometry */
1169   600,				/* base y-res used to calculate geometry */
1170   1200,				/* if ydpi is equal or higher, disable backtracking */
1171   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1172 
1173   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1174   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1175   {12, 8, 0},			/* possible depths in gray mode */
1176   {12, 8, 0},			/* possible depths in color mode */
1177 
1178   SANE_FIX (3.5),		/* Start of scan area in mm  (x) */
1179   SANE_FIX (7.5),		/* Start of scan area in mm (y) */
1180   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1181   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1182 
1183   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1184   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1185 
1186   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1187   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1188   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1189   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1190 
1191   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1192 
1193   0, 8, 16,			/* RGB CCD Line-distance correction in pixel */
1194   0,				/* CCD distcance for CCD with 6 lines) */
1195 
1196   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1197   {0x1c, 0x29, 0x1c, 0x2c, 0x1c, 0x2b},	/* Default offset/gain */
1198   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1199   SANE_FIX (2.0),		/* Default gamma value */
1200 
1201   SANE_FALSE,			/* Is this a CIS scanner? */
1202   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE	/* Which flags are needed for this scanner? */
1203     /* Seems to work */
1204 };
1205 
1206 static GT68xx_Model plustek_ops24_model = {
1207   "plustek-opticpro-s24",	/* Name */
1208   "Plustek",			/* Device vendor string */
1209   "OpticPro S24",	/* Device model name */
1210   "ccd569.fw",			/* Name of the firmware file */
1211   SANE_FALSE,			/* Dynamic allocation flag */
1212 
1213   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1214 
1215   600,				/* maximum optical sensor resolution */
1216   1200,				/* maximum motor resolution */
1217   600,				/* base x-res used to calculate geometry */
1218   600,				/* base y-res used to calculate geometry */
1219   1200,				/* if ydpi is equal or higher, disable backtracking */
1220   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1221 
1222   {600, 300, 200, 100, 50, 0},	/* possible x-resolutions */
1223   {1200, 600, 300, 200, 100, 50, 0},	/* possible y-resolutions */
1224   {12, 8, 0},			/* possible depths in gray mode */
1225   {12, 8, 0},			/* possible depths in color mode */
1226 
1227   SANE_FIX (4.5),		/* Start of scan area in mm  (x) */
1228   SANE_FIX (8.5),		/* Start of scan area in mm (y) */
1229   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1230   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1231 
1232   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1233   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1234 
1235   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1236   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1237   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1238   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1239 
1240   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1241 
1242   48, 24, 0,			/* RGB CCD Line-distance correction in pixel */
1243   0,				/* CCD distcance for CCD with 6 lines) */
1244 
1245   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1246   {0x18, 0x1c, 0x16, 0x12, 0x18, 0x1c},	/* Default offset/gain */
1247   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1248   SANE_FIX (2.0),		/* Default gamma value */
1249 
1250   SANE_FALSE,			/* Is this a CIS scanner? */
1251   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE
1252   				/* Which flags are needed for this scanner? */
1253     /* Works (tested by Filip Kaluza). Based on genius Colorpage Vivid 1200 X. */
1254 };
1255 
1256 
1257 static GT68xx_Model genius_vivid4_model = {
1258   "genius-colorpage-vivid4",	/* Name */
1259   "Genius",			/* Device vendor string */
1260   "ColorPage Vivid 4",		/* Device model name */
1261   "ccd68861.fw",		/* Name of the firmware file */
1262   SANE_FALSE,			/* Dynamic allocation flag */
1263 
1264   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1265 
1266   600,				/* maximum optical sensor resolution */
1267   600,				/* maximum motor resolution */
1268   600,				/* base x-res used to calculate geometry */
1269   600,				/* base y-res used to calculate geometry */
1270   1200,				/* if ydpi is equal or higher, disable backtracking */
1271   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1272 
1273   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1274   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1275   {16, 8, 0},			/* possible depths in gray mode */
1276   {16, 12, 8, 0},		/* possible depths in color mode */
1277 
1278   SANE_FIX (5.5),		/* Start of scan area in mm  (x) */
1279   SANE_FIX (8.5),		/* Start of scan area in mm (y) */
1280   SANE_FIX (216.0),		/* Size of scan area in mm (x) */
1281   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1282 
1283   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1284   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1285 
1286   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1287   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1288   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1289   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1290 
1291   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1292 
1293   0, 8, 16,			/* RGB CCD Line-distance correction in pixel */
1294   0,				/* CCD distcance for CCD with 6 lines) */
1295 
1296   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
1297   {0x18, 0x16, 0x16, 0x0f, 0x17, 0x11},	/* Default offset/gain */
1298   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1299   SANE_FIX (2.0),		/* Default gamma value */
1300 
1301   SANE_FALSE,			/* Is this a CIS scanner? */
1302   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_NO_POWER_STATUS |
1303     GT68XX_FLAG_NO_LINEMODE
1304     /* Which flags are needed for this scanner? */
1305     /* This scanner seems to be very similar to Plustelk U16B and is reported to work. */
1306 };
1307 
1308 
1309 static GT68xx_Model genius_vivid3x_model = {
1310   "genius-colorpage-vivid3x",	/* Name */
1311   "Genius",			/* Device vendor string */
1312   "Colorpage Vivid3x",		/* Device model name */
1313   "ccd548.fw",			/* Name of the firmware file */
1314   SANE_FALSE,			/* Dynamic allocation flag */
1315 
1316   &plustek_gt6801_command_set,	/* Command set used by this scanner */
1317 
1318   600,				/* maximum optical sensor resolution */
1319   600,				/* maximum motor resolution */
1320   600,				/* base x-res used to calculate geometry */
1321   600,				/* base y-res used to calculate geometry */
1322   1200,				/* if ydpi is equal or higher, disable backtracking */
1323   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1324 
1325   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1326   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1327   {12, 8, 0},			/* possible depths in gray mode */
1328   {12, 8, 0},			/* possible depths in color mode */
1329 
1330   SANE_FIX (3.5),		/* Start of scan area in mm  (x) */
1331   SANE_FIX (7.5),		/* Start of scan area in mm (y) */
1332   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1333   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1334 
1335   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1336   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1337 
1338   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1339   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1340   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1341   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1342 
1343   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1344 
1345   0, 8, 16,			/* RGB CCD Line-distance correction in pixel */
1346   0,				/* CCD distcance for CCD with 6 lines) */
1347 
1348   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
1349   {0x1c, 0x29, 0x1c, 0x2c, 0x1c, 0x2b},	/* Default offset/gain */
1350   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1351   SANE_FIX (2.0),		/* Default gamma value */
1352 
1353   SANE_FALSE,			/* Is this a CIS scanner? */
1354   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE	/* Which flags are needed for this scanner? */
1355     /* Tested to some degree, based on the Plustek OpticPro 1248U */
1356 };
1357 
1358 static GT68xx_Model genius_vivid4x_model = {
1359   "genius-colorpage-vivid4x",	/* Name */
1360   "Genius",			/* Device vendor string */
1361   "Colorpage Vivid4x",		/* Device model name */
1362   "ccd548.fw",			/* Name of the firmware file */
1363   SANE_FALSE,			/* Dynamic allocation flag */
1364 
1365   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1366 
1367   600,				/* maximum optical sensor resolution */
1368   600,				/* maximum motor resolution */
1369   600,				/* base x-res used to calculate geometry */
1370   600,				/* base y-res used to calculate geometry */
1371   1200,				/* if ydpi is equal or higher, disable backtracking */
1372   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1373 
1374   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1375   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1376   {12, 8, 0},			/* possible depths in gray mode */
1377   {12, 8, 0},			/* possible depths in color mode */
1378 
1379   SANE_FIX (3.5),		/* Start of scan area in mm  (x) */
1380   SANE_FIX (7.5),		/* Start of scan area in mm (y) */
1381   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1382   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1383 
1384   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1385   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1386 
1387   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1388   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1389   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1390   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1391 
1392   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1393 
1394   0, 8, 16,			/* RGB CCD Line-distance correction in pixel */
1395   0,				/* CCD distcance for CCD with 6 lines) */
1396 
1397   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1398   {0x1c, 0x29, 0x1c, 0x2c, 0x1c, 0x2b},	/* Default offset/gain */
1399   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1400   SANE_FIX (2.0),		/* Default gamma value */
1401 
1402   SANE_FALSE,			/* Is this a CIS scanner? */
1403   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE	/* Which flags are needed for this scanner? */
1404     /* Is reported to work, copied from 3x, some values from Claudio Filho <filhocf@openoffice.org> */
1405 };
1406 
1407 static GT68xx_Model genius_vivid4xe_model = {
1408   "genius-colorpage-vivid4xe",	/* Name */
1409   "Genius",			/* Device vendor string */
1410   "Colorpage Vivid4xe",		/* Device model name */
1411   "ccd548.fw",			/* Name of the firmware file */
1412   SANE_FALSE,			/* Dynamic allocation flag */
1413 
1414   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1415 
1416   600,				/* maximum optical sensor resolution */
1417   600,				/* maximum motor resolution */
1418   600,				/* base x-res used to calculate geometry */
1419   600,				/* base y-res used to calculate geometry */
1420   1200,				/* if ydpi is equal or higher, disable backtracking */
1421   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1422 
1423   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1424   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1425   {12, 8, 0},			/* possible depths in gray mode */
1426   {12, 8, 0},			/* possible depths in color mode */
1427 
1428   SANE_FIX (3.5),		/* Start of scan area in mm  (x) */
1429   SANE_FIX (7.5),		/* Start of scan area in mm (y) */
1430   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1431   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1432 
1433   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1434   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1435 
1436   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1437   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1438   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1439   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1440 
1441   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1442 
1443   0, 8, 16,			/* RGB CCD Line-distance correction in pixel */
1444   0,				/* CCD distcance for CCD with 6 lines) */
1445 
1446   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1447   {0x1c, 0x29, 0x1c, 0x2c, 0x1c, 0x2b},	/* Default offset/gain */
1448   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1449   SANE_FIX (2.0),		/* Default gamma value */
1450 
1451   SANE_FALSE,			/* Is this a CIS scanner? */
1452   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE	/* Which flags are needed for this scanner? */
1453     /* tested a bit */
1454 };
1455 
1456 static GT68xx_Model genius_vivid3xe_model = {
1457   "genius-colorpage-vivid3xe",	/* Name */
1458   "Genius",			/* Device vendor string */
1459   "Colorpage Vivid3xe",		/* Device model name */
1460   "ccd548.fw",			/* Name of the firmware file */
1461   SANE_FALSE,			/* Dynamic allocation flag */
1462 
1463   &plustek_gt6801_command_set,	/* Command set used by this scanner */
1464 
1465   600,				/* maximum optical sensor resolution */
1466   600,				/* maximum motor resolution */
1467   600,				/* base x-res used to calculate geometry */
1468   600,				/* base y-res used to calculate geometry */
1469   1200,				/* if ydpi is equal or higher, disable backtracking */
1470   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1471 
1472   {600, 300, 150, 75, 0},	/* possible x-resolutions */
1473   {600, 300, 150, 75, 0},	/* possible y-resolutions */
1474   {12, 8, 0},			/* possible depths in gray mode */
1475   {12, 8, 0},			/* possible depths in color mode */
1476 
1477   SANE_FIX (3.5),		/* Start of scan area in mm  (x) */
1478   SANE_FIX (7.5),		/* Start of scan area in mm (y) */
1479   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1480   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1481 
1482   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1483   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1484 
1485   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1486   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1487   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1488   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1489 
1490   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1491 
1492   0, 8, 16,			/* RGB CCD Line-distance correction in pixel */
1493   0,				/* CCD distcance for CCD with 6 lines) */
1494 
1495   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
1496   {0x1c, 0x29, 0x1c, 0x2c, 0x1c, 0x2b},	/* Default offset/gain */
1497   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1498   SANE_FIX (2.0),		/* Default gamma value */
1499 
1500   SANE_FALSE,			/* Is this a CIS scanner? */
1501   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE	/* Which flags are needed for this scanner? */
1502     /* mostly untested, based on the Genius Vivid3x */
1503 };
1504 
1505 static GT68xx_Model genius_vivid1200x_model = {
1506   "genius-colorpage-vivid-1200-x",	/* Name */
1507   "Genius",			/* Device vendor string */
1508   "Colorpage Vivid 1200 X",	/* Device model name */
1509   "ccd569.fw",			/* Name of the firmware file */
1510   SANE_FALSE,			/* Dynamic allocation flag */
1511 
1512   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1513 
1514   600,				/* maximum optical sensor resolution */
1515   1200,				/* maximum motor resolution */
1516   600,				/* base x-res used to calculate geometry */
1517   600,				/* base y-res used to calculate geometry */
1518   1200,				/* if ydpi is equal or higher, disable backtracking */
1519   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1520 
1521   {600, 300, 200, 100, 50, 0},	/* possible x-resolutions */
1522   {1200, 600, 300, 200, 100, 50, 0},	/* possible y-resolutions */
1523   {12, 8, 0},			/* possible depths in gray mode */
1524   {12, 8, 0},			/* possible depths in color mode */
1525 
1526   SANE_FIX (4.5),		/* Start of scan area in mm  (x) */
1527   SANE_FIX (8.5),		/* Start of scan area in mm (y) */
1528   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1529   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1530 
1531   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1532   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1533 
1534   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1535   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1536   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1537   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1538 
1539   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1540 
1541   48, 24, 0,			/* RGB CCD Line-distance correction in pixel */
1542   0,				/* CCD distcance for CCD with 6 lines) */
1543 
1544   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1545   {0x18, 0x1c, 0x16, 0x12, 0x18, 0x1c},	/* Default offset/gain */
1546   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1547   SANE_FIX (2.0),		/* Default gamma value */
1548 
1549   SANE_FALSE,			/* Is this a CIS scanner? */
1550   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE
1551   				/* Which flags are needed for this scanner? */
1552     /* Tested. */
1553 };
1554 
1555 
1556 static GT68xx_Model genius_vivid1200xe_model = {
1557   "genius-colorpage-vivid-1200-xe",	/* Name */
1558   "Genius",			/* Device vendor string */
1559   "Colorpage Vivid 1200 XE",	/* Device model name */
1560   "ccd569.fw",			/* Name of the firmware file */
1561   SANE_FALSE,			/* Dynamic allocation flag */
1562 
1563   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1564 
1565   600,				/* maximum optical sensor resolution */
1566   1200,				/* maximum motor resolution */
1567   600,				/* base x-res used to calculate geometry */
1568   600,				/* base y-res used to calculate geometry */
1569   1200,				/* if ydpi is equal or higher, disable backtracking */
1570   SANE_TRUE,			/* Use base_ydpi for all resolutions */
1571 
1572   {600, 300, 200, 100, 50, 0},	/* possible x-resolutions */
1573   {1200, 600, 300, 200, 100, 50, 0},	/* possible y-resolutions */
1574   {12, 8, 0},			/* possible depths in gray mode */
1575   {12, 8, 0},			/* possible depths in color mode */
1576 
1577   SANE_FIX (4.5),		/* Start of scan area in mm  (x) */
1578   SANE_FIX (8.5),		/* Start of scan area in mm (y) */
1579   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1580   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1581 
1582   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1583   SANE_FIX (1.0),		/* Start of black mark in mm (x) */
1584 
1585   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1586   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1587   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1588   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1589 
1590   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1591 
1592   48, 24, 0,			/* RGB CCD Line-distance correction in pixel */
1593   0,				/* CCD distcance for CCD with 6 lines) */
1594 
1595   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1596   {0x18, 0x1c, 0x16, 0x12, 0x18, 0x1c},	/* Default offset/gain */
1597   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1598   SANE_FIX (2.0),		/* Default gamma value */
1599 
1600   SANE_FALSE,			/* Is this a CIS scanner? */
1601   GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE	/* Which flags are needed for this scanner? */
1602     /* Tested by hmg */
1603 };
1604 
1605 static GT68xx_Model iriscan_express_2_model = {
1606   "iriscan-express-2",	/* Name */
1607   "Iris",				/* Device vendor string */
1608   "Iriscan Express 2",			/* Device model name */
1609   "cism216.fw",				/* Name of the firmware file */
1610   SANE_FALSE,				/* Dynamic allocation flag */
1611 
1612   &mustek_gt6816_sheetfed_command_set,	/* Command set used by this scanner */
1613 
1614   600,					/* maximum optical sensor resolution */
1615   1200,					/* maximum motor resolution */
1616   600,					/* base x-res used to calculate geometry */
1617   600,					/* base y-res used to calculate geometry */
1618   1200,   				/* if ydpi is equal or higher, disable backtracking */
1619   SANE_FALSE,			/* Use base_ydpi for all resolutions */
1620 
1621   /* values based on analyze of the firmware */
1622   {600, 400, 300, 200, 150, 100, 50, 0},	/* possible x-resolutions */
1623   {1200, 600, 400, 300, 200, 150, 100, 50, 0},	/* possible y-resolutions */
1624   {16, 8, 0},			/* possible depths in gray mode */
1625   {16, 8, 0},			/* possible depths in color mode */
1626 
1627   SANE_FIX (0.0),		/* Start of scan area in mm  (x) */
1628   SANE_FIX (1.5),		/* Start of scan area in mm (y) */
1629   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1630   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1631 
1632   SANE_FIX (18.0),		/* Start of white strip in mm (y) */
1633   SANE_FIX (21.72),		/* Start of black mark in mm (x) */
1634 
1635   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1636   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1637   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1638   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1639 
1640   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1641 
1642   0, 0, 0,				/* RGB CCD Line-distance correction in pixel */
1643   0,					/* CCD distcance for CCD with 6 lines) */
1644 
1645   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
1646   {0x22, 0x0c, 0x22, 0x0a, 0x24, 0x09},	/* Default offset/gain */
1647   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1648   SANE_FIX (2.0),			/* Default gamma value */
1649 
1650   SANE_TRUE,				/* Is this a CIS scanner? */
1651   GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE
1652 };
1653 
1654 
1655 static GT68xx_Model plustek_opticslim_m12_model = {
1656   "plustek-opticslim-m12",	/* Name */
1657   "Plustek",				/* Device vendor string */
1658   "OpticSlim M12",			/* Device model name */
1659   "cism216.fw",				/* Name of the firmware file */
1660   SANE_FALSE,				/* Dynamic allocation flag */
1661 
1662   &mustek_gt6816_sheetfed_command_set,	/* Command set used by this scanner */
1663 
1664   600,					/* maximum optical sensor resolution */
1665   1200,					/* maximum motor resolution */
1666   600,					/* base x-res used to calculate geometry */
1667   600,					/* base y-res used to calculate geometry */
1668   1200,   				/* if ydpi is equal or higher, disable backtracking */
1669   SANE_FALSE,			/* Use base_ydpi for all resolutions */
1670 
1671   {600, 400, 300, 200, 150, 100, 50, 0},	/* possible x-resolutions */
1672   {1200, 600, 400, 300, 200, 150, 100, 50, 0},	/* possible y-resolutions */
1673   {16, 8, 0},			/* possible depths in gray mode */
1674   {16, 8, 0},			/* possible depths in color mode */
1675 
1676   SANE_FIX (0.0),		/* Start of scan area in mm  (x) */
1677   SANE_FIX (1.5),		/* Start of scan area in mm (y) */
1678   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1679   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1680 
1681   SANE_FIX (18.0),		/* Start of white strip in mm (y) */
1682   SANE_FIX (21.72),		/* Start of black mark in mm (x) */
1683 
1684   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1685   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1686   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1687   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1688 
1689   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1690 
1691   0, 0, 0,				/* RGB CCD Line-distance correction in pixel */
1692   0,					/* CCD distcance for CCD with 6 lines) */
1693 
1694   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
1695   {0x24, 0x0a, 0x23, 0x0f, 0x23, 0x0b},	/* Default offset/gain */
1696   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1697   SANE_FIX (2.0),			/* Default gamma value */
1698 
1699   SANE_TRUE,				/* Is this a CIS scanner? */
1700   GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE
1701 };
1702 
1703 static GT68xx_Model genius_sf600_model = {
1704   "genius-SF600",	/* Name */
1705   "Genius",				/* Device vendor string */
1706   "ColorPage SF600",			/* Device model name */
1707   "cism216.fw",				/* Name of the firmware file */
1708   SANE_FALSE,				/* Dynamic allocation flag */
1709 
1710   &mustek_gt6816_sheetfed_command_set,	/* Command set used by this scanner */
1711 
1712   600,					/* maximum optical sensor resolution */
1713   1200,					/* maximum motor resolution */
1714   600,					/* base x-res used to calculate geometry */
1715   600,					/* base y-res used to calculate geometry */
1716   1200,   				/* if ydpi is equal or higher, disable backtracking */
1717   SANE_FALSE,			/* Use base_ydpi for all resolutions */
1718 
1719   {600, 300, 200, 150, 100, 0},	/* possible x-resolutions */
1720   {600, 300, 200, 150, 100, 0},	/* possible y-resolutions */
1721   {16, 8, 0},			/* possible depths in gray mode */
1722   {16, 8, 0},			/* possible depths in color mode */
1723 
1724   SANE_FIX (0.0),		/* Start of scan area in mm  (x) */
1725   SANE_FIX (1.5),		/* Start of scan area in mm (y) */
1726   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1727   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1728 
1729   SANE_FIX (18.0),		/* Start of white strip in mm (y) */
1730   SANE_FIX (21.72),		/* Start of black mark in mm (x) */
1731 
1732   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1733   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1734   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1735   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1736 
1737   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1738 
1739   0, 0, 0,				/* RGB CCD Line-distance correction in pixel */
1740   0,					/* CCD distcance for CCD with 6 lines) */
1741 
1742   COLOR_ORDER_BGR,		/* Order of the CCD/CIS colors */
1743   {0x24, 0x0a, 0x23, 0x0f, 0x23, 0x0b},	/* Default offset/gain */
1744   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1745   SANE_FIX (2.0),			/* Default gamma value */
1746 
1747   SANE_TRUE,				/* Is this a CIS scanner? */
1748   GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_UNTESTED | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE | GT68XX_FLAG_NO_STOP
1749 };
1750 
1751 /* Untested but should work according to Ryan Reading <ryanr23@gmail.com>. Based on Plustek M12 */
1752 
1753 static GT68xx_Model plustek_opticslim1200_model = {
1754   "plustek-opticslim-1200",	/* Name */
1755   "Plustek",			/* Device vendor string */
1756   "OpticSlim 1200",		/* Device model name */
1757   "cism216.fw",			/* Name of the firmware file */
1758   SANE_FALSE,			/* Dynamic allocation flag */
1759 
1760   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1761 
1762   600,				/* maximum optical sensor resolution */
1763   1200,				/* maximum motor resolution */
1764   600,				/* base x-res used to calculate geometry */
1765   600,				/* base y-res used to calculate geometry */
1766   1200,				/* if ydpi is equal or higher, disable backtracking */
1767   SANE_FALSE,			/* Use base_ydpi for all resolutions */
1768 
1769   {600, 300, 150, 75, 50, 0},	/* possible x-resolutions */
1770   {1200, 600, 300, 150, 75, 50, 0},	/* possible y-resolutions */
1771   {16, 8, 0},			/* possible depths in gray mode */
1772   {16, 8, 0},			/* possible depths in color mode */
1773 
1774   SANE_FIX (1.0),		/* Start of scan area in mm  (x) */
1775   SANE_FIX (9.5),		/* Start of scan area in mm (y) */
1776   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1777   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1778 
1779   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1780   SANE_FIX (140.0),		/* Start of black mark in mm (x) */
1781 
1782   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1783   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1784   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1785   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1786 
1787   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1788 
1789   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
1790   0,				/* CCD distcance for CCD with 6 lines) */
1791 
1792   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1793   {0x15, 0x09, 0x18, 0x11, 0x16, 0x0c},	/* Default offset/gain */
1794   {0x157, 0x157, 0x157},	/* Default exposure parameters */
1795   SANE_FIX (2.0),		/* Default gamma value */
1796 
1797   SANE_TRUE,			/* Is this a CIS scanner? */
1798   0
1799 };
1800 
1801 static GT68xx_Model plustek_opticslim2400_model = {
1802   "plustek-opticslim-2400",	/* Name */
1803   "Plustek",			/* Device vendor string */
1804   "OpticSlim 2400",		/* Device model name */
1805   "cis3R5B1.fw",		/* Name of the firmware file */
1806   SANE_FALSE,			/* Dynamic allocation flag */
1807 
1808   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1809 
1810   1200,				/* maximum optical sensor resolution */
1811   2400,				/* maximum motor resolution */
1812   1200,				/* base x-res used to calculate geometry */
1813   1200,				/* base y-res used to calculate geometry */
1814   1200,				/* if ydpi is equal or higher, disable backtracking */
1815   SANE_FALSE,			/* Use base_ydpi for all resolutions */
1816 
1817   {1200, 600, 300, 150, 100, 50, 0},	/* possible x-resolutions */
1818   {1200, 600, 300, 150, 100, 50, 0},	/* possible y-resolutions */
1819   {12, 8, 0},			/* possible depths in gray mode */
1820   {12, 8, 0},			/* possible depths in color mode */
1821 
1822   SANE_FIX (1.0),		/* Start of scan area in mm  (x) */
1823   SANE_FIX (9.5),		/* Start of scan area in mm (y) */
1824   SANE_FIX (217.0),		/* Size of scan area in mm (x) */
1825   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1826 
1827   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1828   SANE_FIX (0.0),		/* Start of black mark in mm (x) */
1829 
1830   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1831   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1832   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1833   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1834 
1835   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1836 
1837   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
1838   0,				/* CCD distcance for CCD with 6 lines) */
1839 
1840   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1841   {0x15, 0x09, 0x18, 0x11, 0x16, 0x0c},	/* Default offset/gain */
1842   {0x300, 0x300, 0x300},	/* Default exposure parameters */
1843   SANE_FIX (1.5),		/* Default gamma value */
1844 
1845   SANE_TRUE,			/* Is this a CIS scanner? */
1846   0
1847 /* By Detlef Gausepohl <detlef@psych.rwth-aachen.de>. Fixed and tested by hmg. */
1848 };
1849 
1850 static GT68xx_Model visioneer_onetouch_7300_model = {
1851   "visioneer-onetouch-7300",	/* Name */
1852   "Visioneer",			/* Device vendor string */
1853   "OneTouch 7300",		/* Device model name */
1854   "Cis3r5b1.fw",		/* Name of the firmware file */
1855   SANE_FALSE,			/* Dynamic allocation flag */
1856 
1857   &mustek_gt6816_command_set,	/* Command set used by this scanner */
1858 
1859   1200,				/* maximum optical sensor resolution */
1860   1200,				/* maximum motor resolution */
1861   1200,				/* base x-res used to calculate geometry */
1862   1200,				/* base y-res used to calculate geometry */
1863   1200,				/* if ydpi is equal or higher, disable backtracking */
1864   SANE_FALSE,			/* Use base_ydpi for all resolutions */
1865 
1866   {1200, 600, 300, 150, 100, 50, 0},	/* possible x-resolutions */
1867   {1200, 600, 300, 150, 100, 50, 0},	/* possible y-resolutions */
1868   {12, 8, 0},			/* possible depths in gray mode */
1869   {12, 8, 0},			/* possible depths in color mode */
1870 
1871   SANE_FIX (1.0),		/* Start of scan area in mm  (x) */
1872   SANE_FIX (9.5),		/* Start of scan area in mm (y) */
1873   SANE_FIX (218.0),		/* Size of scan area in mm (x) */
1874   SANE_FIX (299.0),		/* Size of scan area in mm (y) */
1875 
1876   SANE_FIX (0.0),		/* Start of white strip in mm (y) */
1877   SANE_FIX (140.0),		/* Start of black mark in mm (x) */
1878 
1879   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (x) */
1880   SANE_FIX (0.0),		/* Start of scan area in TA mode in mm (y) */
1881   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (x) */
1882   SANE_FIX (100.0),		/* Size of scan area in TA mode in mm (y) */
1883 
1884   SANE_FIX (0.0),		/* Start of white strip in TA mode in mm (y) */
1885 
1886   0, 0, 0,			/* RGB CCD Line-distance correction in pixel */
1887   0,				/* CCD distcance for CCD with 6 lines) */
1888 
1889   COLOR_ORDER_RGB,		/* Order of the CCD/CIS colors */
1890   {0x15, 0x09, 0x18, 0x11, 0x16, 0x0c},	/* Default offset/gain */
1891   {0x80, 0x80, 0x80},	/* Default exposure parameters */
1892   SANE_FIX (1.5),		/* Default gamma value */
1893 
1894   SANE_TRUE,			/* Is this a CIS scanner? */
1895   0
1896 };
1897 
1898 /* Tested by Jason Novek. Based on Plustek OpticSlim 2400. */
1899 
1900 
1901 static GT68xx_Model genius_colorpageslim_1200_model = {
1902   "genius-colorpageslim-1200",  /* Name */
1903   "Genius",                      /* Device vendor string */
1904   "ColorPage Slim 1200",                /* Device model name */
1905   "Cis3r5b1.fw",                /* Name of the firmware file */
1906   SANE_FALSE,                   /* Dynamic allocation flag */
1907 
1908   &mustek_gt6816_command_set,   /* Command set used by this scanner */
1909 
1910    1200,                         /* maximum optical sensor resolution */
1911    2400,                         /* maximum motor resolution */
1912    1200,                          /* base x-res used to calculate geometry */
1913    1200,                         /* base y-res used to calculate geometry */
1914    1200,                         /* if ydpi is equal or higher, disable backtracking */
1915    SANE_FALSE,                   /* Use base_ydpi for all resolutions */
1916 
1917 
1918 
1919   {1200, 600, 300, 150, 100, 50, 0},    /* possible x-resolutions */
1920   {2400,1200, 600, 300, 150, 100, 50, 0},       /* possible y-resolutions */
1921   {16, 12, 8, 0},                       /* possible depths in gray mode */
1922   {16, 12, 8, 0},                       /* possible depths in color mode */
1923 
1924   SANE_FIX (0.5),               /* Start of scan area in mm  (x) */
1925   SANE_FIX (8.0),               /* Start of scan area in mm (y) */
1926   SANE_FIX (218.0),             /* Size of scan area in mm (x) */
1927   SANE_FIX (299.0),             /* Size of scan area in mm (y) */
1928 
1929   SANE_FIX (0.0),               /* Start of white strip in mm (y) */
1930   SANE_FIX (9.5),               /* Start of black mark in mm (x) */
1931 
1932   SANE_FIX (0.0),               /* Start of scan area in TA mode in mm (x) */
1933   SANE_FIX (0.0),               /* Start of scan area in TA mode in mm (y) */
1934   SANE_FIX (0.0),               /* Size of scan area in TA mode in mm (x) */
1935   SANE_FIX (0.0),               /* Size of scan area in TA mode in mm (y) */
1936 
1937   SANE_FIX (0.0),               /* Start of white strip in TA mode in mm (y) */
1938 
1939   0, 0, 0,                      /* RGB CCD Line-distance correction in pixel */
1940   0,                            /* CCD distcance for CCD with 6 lines) */
1941 
1942   COLOR_ORDER_RGB,              /* Order of the CCD/CIS colors */
1943   {0x19, 0x1a, 0x18, 0x14, 0x18, 0x12}, /* Default offset/gain */
1944   {0x548, 0x513, 0x48d},        /* Default exposure parameters */
1945   SANE_FIX (1.5),               /* Default gamma value */
1946 
1947   SANE_TRUE,                    /* Is this a CIS scanner? */
1948   GT68XX_FLAG_ALWAYS_LINEMODE | GT68XX_FLAG_SE_2400
1949 };
1950 /* tested by  Aleksey Nedorezov <aleksey at nedorezov.com> */
1951 
1952 
1953 
1954 
1955 static GT68xx_USB_Device_Entry gt68xx_usb_device_list[] = {
1956   {0x10000, 0x10000, &unknown_model},	/* used for yet unknown scanners */
1957   {0x055f, 0x0218, &mustek_2400ta_model},
1958   {0x055f, 0x0219, &mustek_2400taplus_model},
1959   {0x055f, 0x021c, &mustek_1200cuplus_model},
1960   {0x055f, 0x021b, &mustek_1200cuplus2_model},
1961   {0x055f, 0x021d, &mustek_2400cuplus_model},
1962   {0x055f, 0x021e, &mustek_1200ta_model},
1963   {0x055f, 0x021f, &mustek_scanexpress1248ub_model},
1964   {0x05d8, 0x4002, &mustek_1200cu_model},
1965   {0x05d8, 0x4002, &mustek_scanexpress1200ubplus_model},	/* manual override */
1966   {0x05d8, 0x4002, &artec_ultima2000_model},	/* manual override */
1967   {0x05d8, 0x4002, &mustek_2400cu_model},	/* manual override */
1968   {0x05d8, 0x4002, &mustek_scanexpress2400usb_model},	/* manual override */
1969   {0x055f, 0x0210, &mustek_a3usb_model},
1970   {0x055f, 0x021a, &mustek_2448taplus_model},
1971   {0x043d, 0x002d, &lexmark_x73_model},
1972   {0x07b3, 0x0400, &plustek_op1248u_model},
1973   {0x07b3, 0x0401, &plustek_op1248u_model},	/* Same scanner, different id? */
1974   {0x07b3, 0x0402, &plustek_u16b_model},
1975   {0x07b3, 0x0403, &plustek_u16b_model},	/* two ids? 403 seems to be more common */
1976   {0x07b3, 0x040b, &plustek_ops12_model},
1977   {0x07b3, 0x040e, &plustek_ops24_model},
1978   {0x07b3, 0x0412, &plustek_opticslim_m12_model},
1979   {0x07b3, 0x046e, &plustek_opticslim500plus_model},
1980   {0x07b3, 0x0413, &plustek_opticslim1200_model},
1981   {0x07b3, 0x0422, &plustek_opticslim2400_model},
1982   {0x07b3, 0x045f, &iriscan_express_2_model},
1983   {0x0458, 0x2011, &genius_vivid3x_model},
1984   {0x0458, 0x2014, &genius_vivid4_model},
1985   {0x0458, 0x2017, &genius_vivid3xe_model},
1986   {0x0458, 0x201a, &genius_vivid4xe_model},
1987   {0x0458, 0x201b, &genius_vivid4x_model},
1988   {0x0458, 0x201d, &genius_vivid1200x_model},
1989   {0x0458, 0x201f, &genius_vivid1200xe_model},
1990   {0x0458, 0x2021, &genius_sf600_model},
1991   {0x04a7, 0x0444, &visioneer_onetouch_7300_model},
1992   {0x0458, 0x201E, &genius_colorpageslim_1200_model},
1993   {0, 0, NULL}
1994 };
1995