diff --git a/ChangeLog b/ChangeLog index 84202e00e..38705186b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,18 @@ and epson. Added sanei_usb issues. Updated MacOS X and OS/2 porting issues. * README.darwin: Updated. + * backend/gt68xx.c backend/gt68xx.conf backend/gt68xx_devices.c + backend/gt68xx_high.c backend/gt68xx_high.h backend/gt68xx_low.c + backend/gt68xx_low.h doc/sane-gt68xx.man doc/descriptions/gt68xx.desc + doc/gt68xx/gt68xx.CHANGES: + Coarse calibration for first scan only" is off by default now. Added gamma + table factor option (SANE_CAP_EMULATED). Setup gamma to 2.0 by default. + Fixed (hopefully) sigpipe when cancelling. No geometry quantization anymore + (not necessary). Plustek 1248U: do linemode for every resolution, fix color + correction. Added comments for every Model member in gt68xx_devices. + Added Plustek UT16B and Genius Vivid3x to .desc. Added implementation for + inverted offset for CCD scanners. Added Mustek ScanExpress 2400 USB. Well, + at least it's detected. Added NEW marker to .desc. 2002-12-07 Abel Deuring * sanei/sanei_scsi.c: improved error handling diff --git a/backend/gt68xx.c b/backend/gt68xx.c index 46df47238..426e98558 100644 --- a/backend/gt68xx.c +++ b/backend/gt68xx.c @@ -48,7 +48,7 @@ #include "../include/sane/config.h" -#define BUILD 31 +#define BUILD 32 #define MAX_DEBUG #define WARMUP_TIME 30 @@ -79,6 +79,7 @@ #include #include #include +#include #include "../include/sane/sane.h" #include "../include/sane/sanei.h" @@ -124,15 +125,15 @@ static SANE_String_Const source_list[] = { }; static SANE_Range x_range = { - SANE_FIX (0), /* minimum */ - SANE_FIX (216), /* maximum */ - SANE_FIX (0.1) /* quantization */ + SANE_FIX (0.0), /* minimum */ + SANE_FIX (216.0), /* maximum */ + SANE_FIX (0.0) /* quantization */ }; static SANE_Range y_range = { - SANE_FIX (0), /* minimum */ - SANE_FIX (299), /* maximum */ - SANE_FIX (0.1) /* quantization */ + SANE_FIX (0.0), /* minimum */ + SANE_FIX (299.0), /* maximum */ + SANE_FIX (0.0) /* quantization */ }; static const SANE_Range exposure_range = { @@ -147,6 +148,12 @@ static const SANE_Range offset_range = { 1 /* quantization */ }; +static SANE_Range gamma_range = { + SANE_FIX (0.01), /* minimum */ + SANE_FIX (5.0), /* maximum */ + SANE_FIX (0.01) /* quantization */ +}; + static const SANE_Range u8_range = { 0, /* minimum */ 255, /* maximum */ @@ -488,7 +495,7 @@ init_options (GT68xx_Scanner * s) s->opt[OPT_COARSE_CAL_ONCE].type = SANE_TYPE_BOOL; s->opt[OPT_COARSE_CAL_ONCE].unit = SANE_UNIT_NONE; s->opt[OPT_COARSE_CAL_ONCE].constraint_type = SANE_CONSTRAINT_NONE; - s->val[OPT_COARSE_CAL_ONCE].w = SANE_TRUE; + s->val[OPT_COARSE_CAL_ONCE].w = SANE_FALSE; /* calibration */ s->opt[OPT_QUALITY_CAL].name = SANE_NAME_QUALITY_CAL; @@ -612,6 +619,18 @@ init_options (GT68xx_Scanner * s) s->opt[OPT_ENHANCEMENT_GROUP].size = 0; s->opt[OPT_ENHANCEMENT_GROUP].constraint_type = SANE_CONSTRAINT_NONE; + /* internal gamma value */ + s->opt[OPT_GAMMA_VALUE].name = "gamma-value"; + s->opt[OPT_GAMMA_VALUE].title = SANE_I18N ("Gamma value"); + s->opt[OPT_GAMMA_VALUE].desc = SANE_I18N ("Sets the gamma value of all channels."); + s->opt[OPT_GAMMA_VALUE].type = SANE_TYPE_FIXED; + s->opt[OPT_GAMMA_VALUE].unit = SANE_UNIT_NONE; + s->opt[OPT_GAMMA_VALUE].constraint_type = SANE_CONSTRAINT_RANGE; + s->opt[OPT_GAMMA_VALUE].constraint.range = &gamma_range; + s->opt[OPT_GAMMA_VALUE].cap |= SANE_CAP_EMULATED; + s->val[OPT_GAMMA_VALUE].w = s->dev->gamma_value; + + /* threshold */ s->opt[OPT_THRESHOLD].name = SANE_NAME_THRESHOLD; s->opt[OPT_THRESHOLD].title = SANE_TITLE_THRESHOLD; @@ -1224,6 +1243,7 @@ sane_open (SANE_String_Const devicename, SANE_Handle * handle) *handle = s; s->scanning = SANE_FALSE; s->first_scan = SANE_TRUE; + s->gamma_table = 0; RIE (init_options (s)); DBG (5, "sane_open: exit\n"); @@ -1333,6 +1353,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, case OPT_PREVIEW: case OPT_LAMP_ON: case OPT_AUTO_WARMUP: + case OPT_GAMMA_VALUE: case OPT_THRESHOLD: case OPT_SCAN_EXPOS_TIME_R: case OPT_SCAN_EXPOS_TIME_G: @@ -1396,6 +1417,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, case OPT_AUTO_WARMUP: case OPT_COARSE_CAL_ONCE: case OPT_QUALITY_CAL: + case OPT_GAMMA_VALUE: case OPT_THRESHOLD: case OPT_SCAN_EXPOS_TIME_R: case OPT_SCAN_EXPOS_TIME_G: @@ -1531,7 +1553,7 @@ sane_start (SANE_Handle handle) GT68xx_Scan_Request scan_request; GT68xx_Scan_Parameters scan_params; SANE_Status status; - SANE_Int i; + SANE_Int i, gamma_size; unsigned int *buffer_pointers[3]; DBG (5, "sane_start: start\n"); @@ -1571,6 +1593,26 @@ sane_start (SANE_Handle handle) s->dev->afe->b_pga = s->val[OPT_GAIN_B].w; } + s->dev->gamma_value = s->val[OPT_GAMMA_VALUE].w; + gamma_size = s->params.depth == 16 ? 65536 : 256; + s->gamma_table = malloc (sizeof (SANE_Int) * gamma_size); + if (!s->gamma_table) + { + DBG (1, "sane_start: couldn't malloc %d bytes for gamma table\n", + gamma_size); + return SANE_STATUS_NO_MEM; + } + for (i = 0; i < gamma_size; i++) + { + s->gamma_table [i] = + (gamma_size - 1) * pow (((double) i) / (gamma_size - 1), + 1.0 / SANE_UNFIX(s->dev->gamma_value)) + 0.5; + if (s->gamma_table [i] > (gamma_size - 1)) + s->gamma_table [i] = (gamma_size - 1); + if (s->gamma_table [i] < 0) + s->gamma_table [i] = 0; + } + s->calib = s->val[OPT_QUALITY_CAL].w; RIE (gt68xx_device_stop_scan (s->dev)); @@ -1607,6 +1649,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, static unsigned int *buffer_pointers[3]; SANE_Int inflate_x; SANE_Bool lineart; + SANE_Int i, color, colors; if (!s) { @@ -1655,6 +1698,11 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, lineart = (strcmp (s->val[OPT_MODE].s, "Lineart") == 0) ? SANE_TRUE : SANE_FALSE; + if (s->reader->params.color) + colors = 3; + else + colors = 1; + while ((*len) < max_len) { if (s->byte_count >= s->reader->params.pixel_xs) @@ -1670,15 +1718,22 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, RIE (gt68xx_scanner_read_line (s, buffer_pointers)); s->line++; s->byte_count = 0; - if (s->dev->model->flags & GT68XX_FLAG_MIRROR_X) - { /* mirror lines */ - int i, color, colors; - unsigned int swap; - if (s->reader->params.color) - colors = 3; - else - colors = 1; + /* Apply gamma */ + for (color = 0; color < colors; color++) + for (i = 0; i < s->reader->pixels_per_line; i++) + { + if (s->reader->params.depth > 8) + buffer_pointers[color][i] = s->gamma_table[buffer_pointers[color][i]]; + else + buffer_pointers[color][i] = + (s->gamma_table[buffer_pointers[color][i] >> 8] << 8) + + (s->gamma_table[buffer_pointers[color][i] >> 8]); + } + /* mirror lines */ + if (s->dev->model->flags & GT68XX_FLAG_MIRROR_X) + { + unsigned int swap; for (color = 0; color < colors; color++) { @@ -1815,6 +1870,9 @@ sane_cancel (SANE_Handle handle) gt68xx_scanner_stop_scan (s); gt68xx_scanner_wait_for_positioning (s); gt68xx_device_carriage_home (s->dev); + if (s->gamma_table) + free (s->gamma_table); + s->gamma_table = 0; } else { diff --git a/backend/gt68xx.conf b/backend/gt68xx.conf index b0fc96cef..6974b751c 100644 --- a/backend/gt68xx.conf +++ b/backend/gt68xx.conf @@ -16,6 +16,9 @@ usb 0x05d8 0x4002 #vendor "Trust" #model "Compact Scan USB 19200" +# Mustek ScanExpress 2400 USB +#override "mustek-scanexpress-2400-usb" + # Artec Ultima 2000, Boeder SmartScan Slim Edition, # Medion/Lifetec/Tevion/Cytron MD/LT 9385 and MD 9458, # Trust Flat Scan USB 19200 diff --git a/backend/gt68xx_devices.c b/backend/gt68xx_devices.c index 578f7ca0e..3dc0e2ab5 100644 --- a/backend/gt68xx_devices.c +++ b/backend/gt68xx_devices.c @@ -50,11 +50,20 @@ #include "gt68xx_gt6816.c" static GT68xx_Command_Set mustek_gt6816_command_set = { - "mustek-gt6816", + "mustek-gt6816", /* Name of this command set */ - 0x200c, 0x200b, - 0x2010, 0x3f40, 0x2011, 0x3f00, - 0x2012, 0x3f40, 0x2013, 0x3f00, + 0x200c, /* Memory read - wValue */ + 0x200b, /* Memory write - wValue */ + + 0x2010, /* Send normal command - wValue */ + 0x3f40, /* Send normal command - wIndex */ + 0x2011, /* Receive normal result - wValue */ + 0x3f00, /* Receive normal result - wIndex */ + + 0x2012, /* Send small command - wValue */ + 0x3f40, /* Send small command - wIndex */ + 0x2013, /* Receive small result - wValue */ + 0x3f00, /* Receive small result - wIndex */ /* activate */ NULL, /* deactivate */ NULL, @@ -78,9 +87,18 @@ static GT68xx_Command_Set mustek_gt6816_command_set = { static GT68xx_Command_Set mustek_gt6801_command_set = { "mustek-gt6801", - 0x200a, 0x2009, - 0x2010, 0x3f40, 0x2011, 0x3f00, - 0x2012, 0x3f40, 0x2013, 0x3f00, + 0x200a, /* Memory read - wValue */ + 0x2009, /* Memory write - wValue */ + + 0x2010, /* Send normal command - wValue */ + 0x3f40, /* Send normal command - wIndex */ + 0x2011, /* Receive normal result - wValue */ + 0x3f00, /* Receive normal result - wIndex */ + + 0x2012, /* Send small command - wValue */ + 0x3f40, /* Send small command - wIndex */ + 0x2013, /* Receive small result - wValue */ + 0x3f00, /* Receive small result - wIndex */ /* activate */ NULL, /* deactivate */ NULL, @@ -90,7 +108,7 @@ static GT68xx_Command_Set mustek_gt6801_command_set = { /* get_ta_status (FIXME: implement this) */ NULL, gt6801_lamp_control, gt6801_is_moving, - /*gt68xx_generic_move_relative *** to be tested */ NULL, + /* gt68xx_generic_move_relative *** to be tested */ NULL, gt6801_carriage_home, gt68xx_generic_start_scan, gt68xx_generic_read_scanned_data, @@ -104,9 +122,18 @@ static GT68xx_Command_Set mustek_gt6801_command_set = { static GT68xx_Command_Set plustek_gt6801_command_set = { "plustek-gt6801", - 0x200a, 0x2009, - 0x2010, 0x3f40, 0x2011, 0x3f00, - 0x2012, 0x3f40, 0x2013, 0x3f00, + 0x200a, /* Memory read - wValue */ + 0x2009, /* Memory write - wValue */ + + 0x2010, /* Send normal command - wValue */ + 0x3f40, /* Send normal command - wIndex */ + 0x2011, /* Receive normal result - wValue */ + 0x3f00, /* Receive normal result - wIndex */ + + 0x2012, /* Send small command - wValue */ + 0x3f40, /* Send small command - wIndex */ + 0x2013, /* Receive small result - wValue */ + 0x3f00, /* Receive small result - wIndex */ /* activate */ NULL, /* deactivate */ NULL, @@ -116,230 +143,259 @@ static GT68xx_Command_Set plustek_gt6801_command_set = { /* get_ta_status (FIXME: implement this) */ NULL, gt6801_lamp_control, gt6801_is_moving, - /*gt68xx_generic_move_relative *** to be tested */ NULL, + /* gt68xx_generic_move_relative *** to be tested */ NULL, gt6801_carriage_home, gt68xx_generic_start_scan, gt68xx_generic_read_scanned_data, gt6801_stop_scan, gt6801_setup_scan, gt68xx_generic_set_afe, - NULL, + /* set_exposure_time */ NULL, gt68xx_generic_get_id }; static GT68xx_Model mustek_2400ta_model = { - "mustek-bearpaw-2400-ta", - "Mustek", - "BearPaw 2400 TA", - "A2fw.usb", - SANE_FALSE, + "mustek-bearpaw-2400-ta", /* Name */ + "Mustek", /* Device vendor string */ + "BearPaw 2400 TA", /* Device model name */ + "A2fw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6816_command_set, + &mustek_gt6816_command_set, /* Command set used by this scanner */ - 1200, - 2400, - 1200, /* ??? */ - 1200, - 1200, - SANE_FALSE, - {1200, 600, 300, 200, 100, 50, 0}, - {2400, 1200, 600, 300, 200, 100, 50, 0}, - {16, 12, 8, 0}, - {16, 12, 8, 0}, - SANE_FIX (3.67), - SANE_FIX (7.4), - SANE_FIX (219.0), - SANE_FIX (298.0), - SANE_FIX (0.0), - SANE_FIX (0.635), + 1200, /* maximum optical sensor resolution */ + 2400, /* maximum motor resolution */ + 1200, /* base x-res used to calculate geometry */ + 1200, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_FALSE, /* Use base_ydpi for all resolutions */ - SANE_FIX (94.0), - SANE_FIX (107.0), - SANE_FIX (37.0), - SANE_FIX (165.0), - SANE_FIX (95.0), + {1200, 600, 300, 200, 100, 50, 0}, /* possible x-resolutions */ + {2400, 1200, 600, 300, 200, 100, 50, 0}, /* possible y-resolutions */ + {16, 12, 8, 0}, /* possible depths in gray mode */ + {16, 12, 8, 0}, /* possible depths in color mode */ - 0, 24, 48, /* ??? */ - 0, + SANE_FIX (3.67), /* Start of scan area in mm (x) */ + SANE_FIX (7.4), /* Start of scan area in mm (y) */ + SANE_FIX (219.0), /* Size of scan area in mm (x) */ + SANE_FIX (298.0), /* Size of scan area in mm (y) */ - COLOR_ORDER_RGB, - {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07}, - {0x157, 0x157, 0x157}, - SANE_FALSE, - 0 + SANE_FIX (0.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.635), /* Start of black mark in mm (x) */ + + SANE_FIX (94.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (107.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (37.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (165.0), /* Size of scan area in TA mode in mm (y) */ + SANE_FIX (95.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 24, 48, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_FALSE, /* Is this a CIS scanner? */ + 0 /* Which flags are needed for this scanner? */ /* flatbed values tested */ }; static GT68xx_Model mustek_2400taplus_model = { - "mustek-bearpaw-2400-ta-plus", - "Mustek", - "BearPaw 2400 TA Plus", - "A2Dfw.usb", - SANE_FALSE, + "mustek-bearpaw-2400-ta-plus", /* Name */ + "Mustek", /* Device vendor string */ + "BearPaw 2400 TA Plus", /* Device model name */ + "A2Dfw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6816_command_set, + &mustek_gt6816_command_set, /* Command set used by this scanner */ - 1200, - 2400, - 600, - 1200, - 1200, - SANE_FALSE, - {1200, 600, 300, 100, 50, 0}, - {2400, 1200, 600, 300, 100, 50, 0}, - {8, 0}, - {16, 12, 8, 0}, - SANE_FIX (7.41), - SANE_FIX (7.4), - SANE_FIX (217.5), - SANE_FIX (298.0), - SANE_FIX (0.0), - SANE_FIX (5.0), + 1200, /* maximum optical sensor resolution */ + 2400, /* maximum motor resolution */ + 600, /* base x-res used to calculate geometry */ + 1200, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_FALSE, /* Use base_ydpi for all resolutions */ - SANE_FIX (94.0), - SANE_FIX (107.0), - SANE_FIX (37.0), - SANE_FIX (165.0), - SANE_FIX (95.0), + {1200, 600, 300, 100, 50, 0}, /* possible x-resolutions */ + {2400, 1200, 600, 300, 100, 50, 0}, /* possible y-resolutions */ + {8, 0}, /* possible depths in gray mode */ + {16, 12, 8, 0}, /* possible depths in color mode */ - 0, 48, 96, - 8, + SANE_FIX (7.41), /* Start of scan area in mm (x) */ + SANE_FIX (7.4), /* Start of scan area in mm (y) */ + SANE_FIX (217.5), /* Size of scan area in mm (x) */ + SANE_FIX (298.0), /* Size of scan area in mm (y) */ - COLOR_ORDER_RGB, - {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07}, - {0x157, 0x157, 0x157}, - SANE_FALSE, - 0 + SANE_FIX (0.0), /* Start of white strip in mm (y) */ + SANE_FIX (5.0), /* Start of black mark in mm (x) */ + + SANE_FIX (94.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (107.0) /* Start of scan area in TA mode in mm (y) */ , + SANE_FIX (37.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (165.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (95.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 48, 96, /* RGB CCD Line-distance correction in pixel */ + 8, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_FALSE, /* Is this a CIS scanner? */ + 0 /* Which flags are needed for this scanner? */ /* Setup and tested */ }; static GT68xx_Model mustek_1200ta_model = { - "mustek-bearpaw-1200-ta", - "Mustek", - "BearPaw 1200 TA", - "A1fw.usb", - SANE_FALSE, + "mustek-bearpaw-1200-ta", /* Name */ + "Mustek", /* Device vendor string */ + "BearPaw 1200 TA", /* Device model name */ + "A1fw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6816_command_set, + &mustek_gt6816_command_set, /* Command set used by this scanner */ - 600, - 1200, - 600, - 600, - 1200, - SANE_TRUE, - {600, 300, 150, 75, 50, 0}, - {1200, 600, 300, 150, 100, 50, 0}, - {16, 12, 8, 0}, - {16, 12, 8, 0}, - SANE_FIX (8.4), - SANE_FIX (7.5), - SANE_FIX (220.0), - SANE_FIX (299.0), - SANE_FIX (0.0), - SANE_FIX (7.0), + 600, /* maximum optical sensor resolution */ + 1200, /* maximum motor resolution */ + 600, /* base x-res used to calculate geometry */ + 600, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_TRUE, /* Use base_ydpi for all resolutions */ - SANE_FIX (98.0), - SANE_FIX (108.0), /* 109 */ - SANE_FIX (37.0), - SANE_FIX (163.0), - SANE_FIX (95.0), + {600, 300, 150, 75, 50, 0}, /* possible x-resolutions */ + {1200, 600, 300, 150, 100, 50, 0}, /* possible y-resolutions */ + {16, 12, 8, 0}, /* possible depths in gray mode */ + {16, 12, 8, 0}, /* possible depths in color mode */ - 32, 16, 0, /* ??? */ - 0, + SANE_FIX (8.4), /* Start of scan area in mm (x) */ + SANE_FIX (7.5), /* Start of scan area in mm (y) */ + SANE_FIX (220.0), /* Size of scan area in mm (x) */ + SANE_FIX (299.0), /* Size of scan area in mm (y) */ - COLOR_ORDER_RGB, - {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07}, - {0x157, 0x157, 0x157}, - SANE_FALSE, - 0 - /* Setup for 1200 TA */ + SANE_FIX (0.0), /* Start of white strip in mm (y) */ + SANE_FIX (7.0), /* Start of black mark in mm (x) */ + + SANE_FIX (98.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (108.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (37.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (163.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (95.0), /* Start of white strip in TA mode in mm (y) */ + + 32, 16, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + {0x2a, 0x0c, 0x2e, 0x06, 0x2d, 0x07}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_FALSE, /* Is this a CIS scanner? */ + 0 /* Which flags are needed for this scanner? */ + /* Setup for 1200 TA */ }; static GT68xx_Model mustek_1200cuplus_model = { - "mustek-bearpaw-1200-cu-plus", - "Mustek", - "Bearpaw 1200 CU Plus", - "PS1Dfw.usb", - SANE_FALSE, + "mustek-bearpaw-1200-cu-plus", /* Name */ + "Mustek", /* Device vendor string */ + "Bearpaw 1200 CU Plus", /* Device model name */ + "PS1Dfw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6816_command_set, + &mustek_gt6816_command_set, /* Command set used by this scanner */ - 600, - 1200, - 600, - 600, - 1200, - SANE_FALSE, - {600, 300, 150, 75, 50, 0}, - {1200, 600, 300, 150, 75, 50, 0}, - {16, 12, 8, 0}, - {16, 12, 8, 0}, - SANE_FIX (0.0), - SANE_FIX (13.0), - SANE_FIX (217.0), - SANE_FIX (299.0), - SANE_FIX (5.0), - SANE_FIX (0.0), /* no black mark */ + 600, /* maximum optical sensor resolution */ + 1200, /* maximum motor resolution */ + 600, /* base x-res used to calculate geometry */ + 600, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_FALSE, /* Use base_ydpi for all resolutions */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), + {600, 300, 150, 75, 50, 0}, /* possible x-resolutions */ + {1200, 600, 300, 150, 75, 50, 0}, /* possible y-resolutions */ + {16, 12, 8, 0}, /* possible depths in gray mode */ + {16, 12, 8, 0}, /* possible depths in color mode */ - 0, 0, 0, - 0, + SANE_FIX (0.0), /* Start of scan area in mm (x) */ + SANE_FIX (13.0), /* Start of scan area in mm (y) */ + SANE_FIX (217.0), /* Size of scan area in mm (x) */ + SANE_FIX (299.0), /* Size of scan area in mm (y) */ - COLOR_ORDER_BGR, - {0x14, 0x07, 0x14, 0x07, 0x14, 0x07}, - {0x157, 0x157, 0x157}, - SANE_TRUE, - 0 + SANE_FIX (5.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_BGR, /* Order of the CCD/CIS colors */ + {0x14, 0x07, 0x14, 0x07, 0x14, 0x07}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_TRUE, /* Is this a CIS scanner? */ + 0 /* Which flags are needed for this scanner? */ /* Everything untested */ }; static GT68xx_Model mustek_2400cuplus_model = { - "mustek-bearpaw-2400-cu-plus", - "Mustek", - "BearPaw 2400 CU Plus", - "PS2Dfw.usb", - SANE_FALSE, + "mustek-bearpaw-2400-cu-plus", /* Name */ + "Mustek", /* Device vendor string */ + "BearPaw 2400 CU Plus", /* Device model name */ + "PS2Dfw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6816_command_set, + &mustek_gt6816_command_set, /* Command set used by this scanner */ - 1200, - 2400, - 1200, - 1200, - 1200, - SANE_FALSE, - {1200, 600, 300, 200, 150, 100, 50, 0}, - {2400, 1200, 600, 300, 200, 150, 100, 50, 0}, - {16, 12, 8, 0}, - {16, 12, 8, 0}, - SANE_FIX (2.0), - SANE_FIX (13.0), - SANE_FIX (217.0), - SANE_FIX (300.0), - SANE_FIX (5.0), - SANE_FIX (0.0), /* no black mark */ + 1200, /* maximum optical sensor resolution */ + 2400, /* maximum motor resolution */ + 1200, /* base x-res used to calculate geometry */ + 1200, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_FALSE, /* Use base_ydpi for all resolutions */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), + {1200, 600, 300, 200, 150, 100, 50, 0}, /* possible x-resolutions */ + {2400, 1200, 600, 300, 200, 150, 100, 50, 0}, /* possible y-resolutions */ + {16, 12, 8, 0}, /* possible depths in gray mode */ + {16, 12, 8, 0}, /* possible depths in color mode */ - 0, 0, 0, /* no LD correction */ - 0, + SANE_FIX (2.0), /* Start of scan area in mm (x) */ + SANE_FIX (13.0), /* Start of scan area in mm (y) */ + SANE_FIX (217.0), /* Size of scan area in mm (x) */ + SANE_FIX (300.0), /* Size of scan area in mm (y) */ - COLOR_ORDER_BGR, - {0x1a, 0x16, 0x15, 0x08, 0x0e, 0x02}, - {0x157, 0x157, 0x157}, - SANE_TRUE, - 0 + SANE_FIX (5.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_BGR, /* Order of the CCD/CIS colors */ + {0x1a, 0x16, 0x15, 0x08, 0x0e, 0x02}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_TRUE, /* Is this a CIS scanner? */ + 0 /* Which flags are needed for this scanner? */ /* Setup and tested */ }; @@ -347,310 +403,397 @@ static GT68xx_Model mustek_2400cuplus_model = { * and lots of other scanners have the same USB identifier. */ static GT68xx_Model mustek_1200cu_model = { - "mustek-bearpaw-1200-cu", - "Mustek", - "BearPaw 1200 CU", - "PS1fw.usb", - SANE_FALSE, + "mustek-bearpaw-1200-cu", /* Name */ + "Mustek", /* Device vendor string */ + "BearPaw 1200 CU", /* Device model name */ + "PS1fw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6801_command_set, + &mustek_gt6801_command_set, /* Command set used by this scanner */ - 600, - 1200, - 600, - 600, - 1200, - SANE_TRUE, - {600, 300, 150, 75, 50, 0}, - {1200, 600, 300, 150, 75, 50, 0}, - {12, 8, 0}, - {12, 8, 0}, - SANE_FIX (0.0), - SANE_FIX (13.0), - SANE_FIX (217.0), - SANE_FIX (299.0), - SANE_FIX (3.5), - SANE_FIX (0.0), /* no black mark */ + 600, /* maximum optical sensor resolution */ + 1200, /* maximum motor resolution */ + 600, /* base x-res used to calculate geometry */ + 600, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_TRUE, /* Use base_ydpi for all resolutions */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), + {600, 300, 150, 75, 50, 0}, /* possible x-resolutions */ + {1200, 600, 300, 150, 75, 50, 0}, /* possible y-resolutions */ + {12, 8, 0}, /* possible depths in gray mode */ + {12, 8, 0}, /* possible depths in color mode */ - 0, 0, 0, /* no LD correction */ - 0, + SANE_FIX (0.0), /* Start of scan area in mm (x) */ + SANE_FIX (13.0), /* Start of scan area in mm (y) */ + SANE_FIX (217.0), /* Size of scan area in mm (x) */ + SANE_FIX (299.0), /* Size of scan area in mm (y) */ - COLOR_ORDER_BGR, - {0x13, 0x04, 0x15, 0x06, 0x0f, 0x02}, - {0x157, 0x157, 0x157}, - SANE_TRUE, - 0 + SANE_FIX (3.5), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_BGR, /* Order of the CCD/CIS colors */ + {0x13, 0x04, 0x15, 0x06, 0x0f, 0x02}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_TRUE, /* Is this a CIS scanner? */ + 0 /* Which flags are needed for this scanner? */ /* Setup and tested */ }; static GT68xx_Model mustek_scanexpress1200ubplus_model = { - "mustek-scanexpress-1200-ub-plus", - "Mustek", - "ScanExpress 1200 UB Plus", - "SBfw.usb", - SANE_FALSE, + "mustek-scanexpress-1200-ub-plus", /* Name */ + "Mustek", /* Device vendor string */ + "ScanExpress 1200 UB Plus", /* Device model name */ + "SBfw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6801_command_set, + &mustek_gt6801_command_set, /* Command set used by this scanner */ - 600, - 1200, - 600, - 600, - 1200, - SANE_TRUE, - {600, 300, 150, 75, 50, 0}, - {1200, 600, 300, 150, 75, 50, 0}, - {12, 8, 0}, - {12, 8, 0}, - SANE_FIX (0.0), - SANE_FIX (15.5), - SANE_FIX (217.0), - SANE_FIX (299.0), - SANE_FIX (6.5), - SANE_FIX (0.0), /* no black mark */ + 600, /* maximum optical sensor resolution */ + 1200, /* maximum motor resolution */ + 600, /* base x-res used to calculate geometry */ + 600, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_TRUE, /* Use base_ydpi for all resolutions */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), + {600, 300, 150, 75, 50, 0}, /* possible x-resolutions */ + {1200, 600, 300, 150, 75, 50, 0}, /* possible y-resolutions */ + {12, 8, 0}, /* possible depths in gray mode */ + {12, 8, 0}, /* possible depths in color mode */ - 0, 0, 0, /* no LD correction */ - 0, + SANE_FIX (0.0), /* Start of scan area in mm (x) */ + SANE_FIX (15.5), /* Start of scan area in mm (y) */ + SANE_FIX (217.0), /* Size of scan area in mm (x) */ + SANE_FIX (299.0), /* Size of scan area in mm (y) */ - COLOR_ORDER_BGR, - {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04}, - {0x157, 0x157, 0x157}, - SANE_TRUE, - 0 + SANE_FIX (6.5), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_BGR, /* Order of the CCD/CIS colors */ + {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_TRUE, /* Is this a CIS scanner? */ + 0 /* Which flags are needed for this scanner? */ /* Setup and tested */ }; static GT68xx_Model artec_ultima2000_model = { - "artec-ultima-2000", - "Artec", - "Ultima 2000", - "Gt680xfw.usb", - SANE_FALSE, + "artec-ultima-2000", /* Name */ + "Artec", /* Device vendor string */ + "Ultima 2000", /* Device model name */ + "Gt680xfw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6801_command_set, + &mustek_gt6801_command_set, /* Command set used by this scanner */ - 600, - 600, - 600, - 600, - 600, - SANE_TRUE, - {600, 300, 200, 150, 100, 75, 50, 0}, - {600, 300, 200, 150, 100, 75, 50, 0}, - {12, 8, 0}, - {12, 8, 0}, - SANE_FIX (2.0), - SANE_FIX (7.0), - SANE_FIX (218.0), - SANE_FIX (299.0), - SANE_FIX (0.0), - SANE_FIX (0.0), /* no black mark */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), + 600, /* maximum optical sensor resolution */ + 600, /* maximum motor resolution */ + 600, /* base x-res used to calculate geometry */ + 600, /* base y-res used to calculate geometry */ + 600, /* if ydpi is equal or higher, use linemode */ + SANE_TRUE, /* Use base_ydpi for all resolutions */ - 0, 0, 0, /* no LD correction */ - 0, + {600, 300, 200, 150, 100, 75, 50, 0}, /* possible x-resolutions */ + {600, 300, 200, 150, 100, 75, 50, 0}, /* possible y-resolutions */ + {12, 8, 0}, /* possible depths in gray mode */ + {12, 8, 0}, /* possible depths in color mode */ - COLOR_ORDER_BGR, - {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04}, - {0x157, 0x157, 0x157}, - SANE_TRUE, - GT68XX_FLAG_MIRROR_X | GT68XX_FLAG_MOTOR_HOME | GT68XX_FLAG_OFFSET_INV + SANE_FIX (2.0), /* Start of scan area in mm (x) */ + SANE_FIX (7.0), /* Start of scan area in mm (y) */ + SANE_FIX (218.0), /* Size of scan area in mm (x) */ + SANE_FIX (299.0), /* Size of scan area in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_BGR, /* Order of the CCD/CIS colors */ + {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_TRUE, /* Is this a CIS scanner? */ + GT68XX_FLAG_MIRROR_X | GT68XX_FLAG_MOTOR_HOME | GT68XX_FLAG_OFFSET_INV /* Which flags are needed for this scanner? */ /* Setup for Cytron TCM MD 9385 */ }; static GT68xx_Model mustek_2400cu_model = { - "mustek-bearpaw-2400-cu", - "Mustek", - "BearPaw 2400 CU", - "PS2fw.usb", - SANE_FALSE, + "mustek-bearpaw-2400-cu", /* Name */ + "Mustek", /* Device vendor string */ + "BearPaw 2400 CU", /* Device model name */ + "PS2fw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6801_command_set, + &mustek_gt6801_command_set, /* Command set used by this scanner */ - 1200, - 2400, - 1200, - 1200, - 2400, - SANE_TRUE, - {1200, 600, 300, 150, 100, 50, 0}, - {2400, 1200, 600, 300, 150, 100, 50, 0}, - {12, 8, 0}, - {12, 8, 0}, - SANE_FIX (0.0), /* 0 */ - SANE_FIX (13.5), /* 1280, */ - SANE_FIX (215.9), /* 10240, */ - SANE_FIX (296.7), /* 28032, */ - SANE_FIX (5.5), - SANE_FIX (0.0), /* no black mark */ + 1200, /* maximum optical sensor resolution */ + 2400, /* maximum motor resolution */ + 1200, /* base x-res used to calculate geometry */ + 1200, /* base y-res used to calculate geometry */ + 2400, /* if ydpi is equal or higher, use linemode */ + SANE_TRUE, /* Use base_ydpi for all resolutions */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), + {1200, 600, 300, 150, 100, 50, 0}, /* possible x-resolutions */ + {2400, 1200, 600, 300, 150, 100, 50, 0}, /* possible y-resolutions */ + {12, 8, 0}, /* possible depths in gray mode */ + {12, 8, 0}, /* possible depths in color mode */ - 0, 0, 0, /* no LD correction */ - 0, + SANE_FIX (0.0), /* Start of scan area in mm (x) */ + SANE_FIX (13.5), /* Start of scan area in mm (y) */ + SANE_FIX (215.0), /* Size of scan area in mm (x) */ + SANE_FIX (296.9), /* Size of scan area in mm (y) */ - COLOR_ORDER_BGR, - {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04}, - {0x157, 0x157, 0x157}, - SANE_TRUE, - 0 + SANE_FIX (5.5), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.9), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_BGR, /* Order of the CCD/CIS colors */ + {0x0f, 0x01, 0x15, 0x06, 0x13, 0x04}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_TRUE, /* Is this a CIS scanner? */ + 0 /* Which flags are needed for this scanner? */ /* basically tested, details may need tweaking */ }; +static GT68xx_Model mustek_scanexpress2400usb_model = { + "mustek-scanexpress-2400-usb", /* Name */ + "Mustek", /* Device vendor string */ + "ScanExpress 2400 USB", /* Device model name */ + "P9fw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ + + &mustek_gt6801_command_set, /* Command set used by this scanner */ + + 600, /* maximum optical sensor resolution */ + 1200, /* maximum motor resolution */ + 1200, /* base x-res used to calculate geometry */ + 600, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_TRUE, /* Use base_ydpi for all resolutions */ + + {600, 300, 150, 100, 50, 0}, /* possible x-resolutions */ + {1200, 600, 300, 150, 100, 50, 0}, /* possible y-resolutions */ + {8, 0}, /* possible depths in gray mode */ + {8, 0}, /* possible depths in color mode */ + + SANE_FIX (15.0), /* Start of scan area in mm (x) */ + SANE_FIX (25.0), /* Start of scan area in mm (y) */ + SANE_FIX (220.0), /* Size of scan area in mm (x) */ + SANE_FIX (299.0), /* Size of scan area in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in mm (y) */ + SANE_FIX (7.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.9), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 16, 32, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + {0x16, 0x06, 0x16, 0x06, 0x16, 0x06}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_FALSE, /* Is this a CIS scanner? */ + GT68XX_FLAG_UNTESTED /* Which flags are needed for this scanner? */ + /* only partly tested */ +}; + static GT68xx_Model mustek_a3usb_model = { - "mustek-scanexpress-a3-usb", - "Mustek", - "ScanExpress A3 USB", - "A32fw.usb", - SANE_FALSE, + "mustek-scanexpress-a3-usb", /* Name */ + "Mustek", /* Device vendor string */ + "ScanExpress A3 USB", /* Device model name */ + "A32fw.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6816_command_set, + &mustek_gt6816_command_set, /* Command set used by this scanner */ - 300, - 600, - 300, - 300, - 300, - SANE_FALSE, - {300, 150, 95, 50, 0}, - {600, 300, 150, 75, 50, 0}, - {12, 8, 0}, - {12, 8, 0}, - SANE_FIX (2.0), - SANE_FIX (13.0), - SANE_FIX (300.0), - SANE_FIX (420.0), - SANE_FIX (5.0), - SANE_FIX (0.0), /* no black mark */ + 300, /* maximum optical sensor resolution */ + 600, /* maximum motor resolution */ + 300, /* base x-res used to calculate geometry */ + 300, /* base y-res used to calculate geometry */ + 300, /* if ydpi is equal or higher, use linemode */ + SANE_FALSE, /* Use base_ydpi for all resolutions */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), + {300, 150, 95, 50, 0}, /* possible x-resolutions */ + {600, 300, 150, 75, 50, 0}, /* possible y-resolutions */ + {12, 8, 0}, /* possible depths in gray mode */ + {12, 8, 0}, /* possible depths in color mode */ - 0, 0, 0, /* no LD correction */ - 0, + SANE_FIX (2.0), /* Start of scan area in mm (x) */ + SANE_FIX (13.0), /* Start of scan area in mm (y) */ + SANE_FIX (300.0), /* Size of scan area in mm (x) */ + SANE_FIX (420.0), /* Size of scan area in mm (y) */ - COLOR_ORDER_RGB, - {0x14, 0x07, 0x14, 0x07, 0x14, 0x07}, - {0x157, 0x157, 0x157}, - SANE_TRUE, - GT68XX_FLAG_UNTESTED - /* Completely untested, doesn't seem to work */ + SANE_FIX (5.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + {0x14, 0x07, 0x14, 0x07, 0x14, 0x07}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_TRUE, /* Is this a CIS scanner? */ + GT68XX_FLAG_UNTESTED /* Which flags are needed for this scanner? */ + /* Mostly untested, margins seem to be wrong */ }; static GT68xx_Model lexmark_x73_model = { - "lexmark-x73", - "Lexmark", - "X73", - "OSLO3071b2.usb", - SANE_FALSE, + "lexmark-x73", /* Name */ + "Lexmark", /* Device vendor string */ + "X73", /* Device model name */ + "OSLO3071b2.usb", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &mustek_gt6816_command_set, + &mustek_gt6816_command_set, /* Command set used by this scanner */ - 600, - 1200, - 600, - 600, /* ??? */ - 1200, /* ??? */ - SANE_TRUE, + 600, /* maximum optical sensor resolution */ + 1200, /* maximum motor resolution */ + 600, /* base x-res used to calculate geometry */ + 600, /* base y-res used to calculate geometry */ + 1200, /* if ydpi is equal or higher, use linemode */ + SANE_TRUE, /* Use base_ydpi for all resolutions */ - {600, 300, 150, 75, 0}, - {600, 300, 150, 75, 0}, - {16, 12, 8, 0}, - {16, 12, 8, 0}, - SANE_FIX (6.519), - SANE_FIX (12.615), - SANE_FIX (220.0), /* physical windowsize: 220 mm */ - SANE_FIX (297.0), /* physical windowsize: 300 mm */ - SANE_FIX (1.0), - SANE_FIX (0.0), + {600, 300, 150, 75, 0}, /* possible x-resolutions */ + {600, 300, 150, 75, 0}, /* possible y-resolutions */ + {16, 12, 8, 0}, /* possible depths in gray mode */ + {16, 12, 8, 0}, /* possible depths in color mode */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), /* ld_shift */ + SANE_FIX (6.519), /* Start of scan area in mm (x) */ + SANE_FIX (12.615), /* Start of scan area in mm (y) */ + SANE_FIX (220.0), /* Size of scan area in mm (x) */ + SANE_FIX (297.0), /* Size of scan area in mm (y) */ - 32, 16, 0, - 0, + SANE_FIX (1.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ - COLOR_ORDER_RGB, - {0x14, 0x07, 0x14, 0x07, 0x14, 0x07}, - {0x157, 0x157, 0x157}, - SANE_FALSE, - GT68XX_FLAG_UNTESTED + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ - /* 50 dpi and 1200 dpi scan does not work (for lexmark x70); when using - automatic gain pictures are too dark. Only some ad hoc tests for - lexmark x70 were done so far. WARNING: Don't use the Full scan option - with the above settings, otherwise the sensor may bump at the end of - the sledge and the scanner may be damaged! */ + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 32, 16, 0, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + {0x14, 0x07, 0x14, 0x07, 0x14, 0x07}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_FALSE, /* Is this a CIS scanner? */ + GT68XX_FLAG_UNTESTED /* Which flags are needed for this scanner? */ + /* When using automatic gain pictures are too dark. Only some ad hoc tests for + lexmark x70 were done so far. WARNING: Don't use the Full scan option + with the above settings, otherwise the sensor may bump at the end of + the sledge and the scanner may be damaged! */ }; static GT68xx_Model plustek_op1248u_model = { - "plustek-op1248u", - "Plustek", - "OpticPro 1248U", - "ccd548.fw", - SANE_FALSE, + "plustek-op1248u", /* Name */ + "Plustek", /* Device vendor string */ + "OpticPro 1248U", /* Device model name */ + "ccd548.fw", /* Name of the firmware file */ + SANE_FALSE, /* Dynamic allocation flag */ - &plustek_gt6801_command_set, + &plustek_gt6801_command_set, /* Command set used by this scanner */ - 600, /* Optic X DPI */ - 600, /* Optic Y DPI */ - 600, /* Base X DPI */ - 600, /* Base Y DPI */ - 600, /* Y DPI force line mode */ + 600, /* maximum optical sensor resolution */ + 600, /* maximum motor resolution */ + 600, /* base x-res used to calculate geometry */ + 600, /* base y-res used to calculate geometry */ + 50, /* if ydpi is equal or higher, use linemode */ + SANE_TRUE, /* Use base_ydpi for all resolutions */ - SANE_TRUE, - {600, 300, 150, 75, 0}, - {600, 300, 150, 75, 0}, + {600, 300, 150, 75, 0}, /* possible x-resolutions */ + {600, 300, 150, 75, 0}, /* possible y-resolutions */ + {12, 8, 0}, /* possible depths in gray mode */ + {12, 8, 0}, /* possible depths in color mode */ - {12, 8, 0}, - {12, 8, 0}, - SANE_FIX (5.6), /* scanarea start X */ - SANE_FIX (8.0), /* scanarea start Y */ - SANE_FIX (218.0), - SANE_FIX (299.0), - SANE_FIX (0.0), /* shading start */ - SANE_FIX (0.0), /* no black mark */ - SANE_FIX (0.0), /* no TA */ - SANE_FIX (0.0), - SANE_FIX (100.0), - SANE_FIX (100.0), - SANE_FIX (0.0), + SANE_FIX (5.6), /* Start of scan area in mm (x) */ + SANE_FIX (7.5), /* Start of scan area in mm (y) */ + SANE_FIX (218.0), /* Size of scan area in mm (x) */ + SANE_FIX (299.0), /* Size of scan area in mm (y) */ - /* line distance correction */ - 0, 0, 0, - 0, + SANE_FIX (0.0), /* Start of white strip in mm (y) */ + SANE_FIX (1.0), /* Start of black mark in mm (x) */ - COLOR_ORDER_BGR, - {31, 25, 31, 25, 31, 25}, - {0x157, 0x157, 0x157}, - SANE_FALSE, /* is a CCD device */ - 0 + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 8, 16, /* RGB CCD Line-distance correction in pixel */ + 0, /* CCD distcance for CCD with 6 lines) */ + + COLOR_ORDER_BGR, /* Order of the CCD/CIS colors */ + {31, 25, 31, 25, 31, 25}, /* Default offset/gain */ + {0x157, 0x157, 0x157}, /* Default exposure parameters */ + SANE_FIX (2.0), /* Default gamma value */ + + SANE_FALSE, /* Is this a CIS scanner? */ + GT68XX_FLAG_UNTESTED | GT68XX_FLAG_OFFSET_INV /* Which flags are needed for this scanner? */ }; static GT68xx_USB_Device_Entry gt68xx_usb_device_list[] = { @@ -663,10 +806,9 @@ static GT68xx_USB_Device_Entry gt68xx_usb_device_list[] = { {0x05d8, 0x4002, &mustek_scanexpress1200ubplus_model}, /* manual override */ {0x05d8, 0x4002, &artec_ultima2000_model}, /* manual override */ {0x05d8, 0x4002, &mustek_2400cu_model}, /* manual override */ + {0x05d8, 0x4002, &mustek_scanexpress2400usb_model}, /* manual override */ {0x055f, 0x0210, &mustek_a3usb_model}, {0x043d, 0x002d, &lexmark_x73_model}, {0x07b3, 0x0401, &plustek_op1248u_model}, {0, 0, NULL} }; - -/* vim: set sw=2 cino=>2se-1sn-1s{s^-1st0(0u0 smarttab expandtab: */ diff --git a/backend/gt68xx_high.c b/backend/gt68xx_high.c index c3b6c857e..2a92f581e 100644 --- a/backend/gt68xx_high.c +++ b/backend/gt68xx_high.c @@ -920,6 +920,7 @@ struct GT68xx_Afe_Values SANE_Int max_width; SANE_Int scan_dpi; SANE_Fixed start_black; + SANE_Int offset_direction; }; #ifndef NDEBUG @@ -1037,9 +1038,9 @@ gt68xx_afe_ccd_adjust_channel_offset (GT68xx_Afe_Values * values, gt68xx_afe_ccd_calc (values, buffer); avg = (values->white + values->black) / 2; if (avg <= 122) - *offset -= off_dist; + *offset -= (off_dist * values->offset_direction); else if (avg >= 130) - *offset += off_dist; + *offset += (off_dist * values->offset_direction); DBG (5, "Offset: white=%d, black=%d, avg=%d, offset=%d\n", values->white, values->black, avg, *offset); } @@ -1055,7 +1056,7 @@ gt68xx_afe_ccd_adjust_channel_white (GT68xx_Afe_Values * values, if ((values->white - values->black) < 230) { if (values->white > 253) - (*offset)++; + (*offset) += values->offset_direction; else (*pga)++; } @@ -1085,7 +1086,7 @@ gt68xx_afe_ccd_adjust_channel_black (GT68xx_Afe_Values * values, if (values->white > 250) (*pga)--; else - (*offset)--; + (*offset) -= values->offset_direction; } else if (values->black < 15) /* just right */ { @@ -1095,7 +1096,7 @@ gt68xx_afe_ccd_adjust_channel_black (GT68xx_Afe_Values * values, done = 1; } else - (*offset)++; /* too high */ + (*offset) += values->offset_direction; /* too high */ DBG (5, "Black: white=%d, black=%d, offset=%d, pga=%d\n", values->white, values->black, *offset, *pga); @@ -1133,6 +1134,10 @@ gt68xx_afe_ccd_auto (GT68xx_Scanner * scanner, afe->r_pga = afe->g_pga = afe->b_pga = 0x00; afe->r_offset = afe->g_offset = afe->b_offset = 0x20; + values.offset_direction = 1; + if (scanner->dev->model->flags & GT68XX_FLAG_OFFSET_INV) + values.offset_direction = -1; + request.x0 = SANE_FIX (0.0); request.xs = scanner->dev->model->x_size; request.xdpi = 300; @@ -1443,7 +1448,7 @@ gt68xx_afe_cis_calc_white (GT68xx_Afe_Values * values, static SANE_Bool gt68xx_afe_cis_adjust_offset (GT68xx_Afe_Values * values, unsigned int *black_buffer, - SANE_Int offset_direction, SANE_Byte * offset) + SANE_Byte * offset) { SANE_Int offs = 0, tmp_offset = *offset; SANE_Int low = 8, high = 22; @@ -1451,16 +1456,16 @@ gt68xx_afe_cis_adjust_offset (GT68xx_Afe_Values * values, gt68xx_afe_cis_calc_black (values, black_buffer); if (values->black < low) { - offs = (offset_direction * (low - values->black) / 4); + offs = (values->offset_direction * (low - values->black) / 4); if (offs == 0) - offs = offset_direction; + offs = values->offset_direction; DBG (5, "black = %d (too low) --> offs = %d\n", values->black, offs); } else if (values->black > high) { - offs = -(offset_direction * (values->black - high) / 7); + offs = -(values->offset_direction * (values->black - high) / 7); if (offs == 0) - offs = -offset_direction; + offs = -values->offset_direction; DBG (5, "black = %d (too high) --> offs = %d\n", values->black, offs); } else @@ -1635,7 +1640,6 @@ gt68xx_afe_cis_auto (GT68xx_Scanner * scanner) GT68xx_Afe_Values values; GT68xx_AFE_Parameters *afe = scanner->dev->afe; GT68xx_Exposure_Parameters *exposure = scanner->dev->exposure; - SANE_Int offset_direction; SANE_Int done; SANE_Bool first = SANE_TRUE; unsigned int *r_buffer = 0, *g_buffer = 0, *b_buffer = 0; @@ -1655,13 +1659,12 @@ gt68xx_afe_cis_auto (GT68xx_Scanner * scanner) return SANE_STATUS_NO_MEM; total_count = 0; - /* afe->r_pga = afe->g_pga = afe->b_pga = 0x06; */ do { offset_count = 0; - offset_direction = 1; + values.offset_direction = 1; if (scanner->dev->model->flags & GT68XX_FLAG_OFFSET_INV) - offset_direction = -1; + values.offset_direction = -1; exposure->r_time = exposure->g_time = exposure->b_time = 0x157; do { @@ -1671,17 +1674,13 @@ gt68xx_afe_cis_auto (GT68xx_Scanner * scanner) /* read black line */ RIE (gt68xx_afe_cis_read_lines (&values, scanner, SANE_FALSE, first, r_buffer, g_buffer, b_buffer)); - /*offset_direction /= 2; */ done = - gt68xx_afe_cis_adjust_offset (&values, r_buffer, offset_direction, - &afe->r_offset); + gt68xx_afe_cis_adjust_offset (&values, r_buffer, &afe->r_offset); done &= - gt68xx_afe_cis_adjust_offset (&values, g_buffer, offset_direction, - &afe->g_offset); + gt68xx_afe_cis_adjust_offset (&values, g_buffer, &afe->g_offset); done &= - gt68xx_afe_cis_adjust_offset (&values, b_buffer, offset_direction, - &afe->b_offset); + gt68xx_afe_cis_adjust_offset (&values, b_buffer, &afe->b_offset); offset_count++; total_count++; diff --git a/backend/gt68xx_high.h b/backend/gt68xx_high.h index 07ee042d0..96fee8f41 100644 --- a/backend/gt68xx_high.h +++ b/backend/gt68xx_high.h @@ -210,6 +210,7 @@ enum GT68xx_Option OPT_GAIN_B, OPT_ENHANCEMENT_GROUP, + OPT_GAMMA_VALUE, OPT_THRESHOLD, OPT_GEOMETRY_GROUP, @@ -258,6 +259,7 @@ struct GT68xx_Scanner struct timeval lamp_on_time; /**< Time when the lamp was turned on */ struct timeval start_time; /**< Time when the scan was started */ SANE_Int bpp_list[5]; /**< */ + SANE_Int *gamma_table; /**< Gray gamma table */ }; diff --git a/backend/gt68xx_low.c b/backend/gt68xx_low.c index fe198cace..b32024327 100644 --- a/backend/gt68xx_low.c +++ b/backend/gt68xx_low.c @@ -412,6 +412,8 @@ gt68xx_device_activate (GT68xx_Device * dev) memcpy (dev->afe, &dev->model->afe_params, sizeof (*dev->afe)); memcpy (dev->exposure, &dev->model->exposure, sizeof (*dev->exposure)); + dev->gamma_value = dev->model->default_gamma_value; + dev->active = SANE_TRUE; return SANE_STATUS_GOOD; @@ -1032,22 +1034,22 @@ gt68xx_device_read_finish (GT68xx_Device * dev) (long) dev->read_bytes_left); #ifdef USE_FORK - if (dev->shm_channel) - { - shm_channel_free (dev->shm_channel); - dev->shm_channel = NULL; - } - if (dev->reader_pid != 0) { int status; - usleep (100000); + /* usleep (100000);*/ DBG (7, "gt68xx_device_read_finish: trying to kill reader process\n"); kill (dev->reader_pid, SIGKILL); waitpid (dev->reader_pid, &status, 0); DBG (7, "gt68xx_device_read_finish: reader process killed\n"); dev->reader_pid = 0; } + if (dev->shm_channel) + { + shm_channel_free (dev->shm_channel); + dev->shm_channel = NULL; + } + #endif /* USE_FORK */ free (dev->read_buffer); diff --git a/backend/gt68xx_low.h b/backend/gt68xx_low.h index 48335e46b..ee31667a2 100644 --- a/backend/gt68xx_low.h +++ b/backend/gt68xx_low.h @@ -436,39 +436,48 @@ struct GT68xx_Model GT68xx_Command_Set *command_set; - SANE_Int optical_xdpi; - SANE_Int optical_ydpi; - SANE_Int base_xdpi; - SANE_Int base_ydpi; - SANE_Int ydpi_force_line_mode; - SANE_Bool constant_ydpi; /* Use base_ydpi for all resolutions */ - SANE_Int xdpi_values[MAX_RESOLUTIONS]; - SANE_Int ydpi_values[MAX_RESOLUTIONS]; - SANE_Int bpp_gray_values[MAX_DPI]; - SANE_Int bpp_color_values[MAX_DPI]; - SANE_Fixed x_offset; /* Start of scan area in mm */ - SANE_Fixed y_offset; /* Start of scan area in mm */ - SANE_Fixed x_size; /* Size of scan area in mm */ - SANE_Fixed y_size; /* Size of scan area in mm */ - SANE_Fixed y_offset_calib; /* Start of white strip in mm */ - SANE_Fixed x_offset_mark; /* Start of black mark in mm */ + SANE_Int optical_xdpi; /* maximum resolution in x-direction */ + SANE_Int optical_ydpi; /* maximum resolution in y-direction */ + SANE_Int base_xdpi; /* x-resolution used to calculate geometry */ + SANE_Int base_ydpi; /* y-resolution used to calculate geometry */ + SANE_Int ydpi_force_line_mode;/* if ydpi is equal or higher, use linemode */ + SANE_Bool constant_ydpi; /* Use base_ydpi for all resolutions */ + SANE_Int xdpi_values[MAX_RESOLUTIONS]; /* possible x resolutions */ + SANE_Int ydpi_values[MAX_RESOLUTIONS]; /* possible y resolutions */ + SANE_Int bpp_gray_values[MAX_DPI]; /* possible depths in gray mode */ + SANE_Int bpp_color_values[MAX_DPI]; /* possible depths in color mode */ + + SANE_Fixed x_offset; /* Start of scan area in mm */ + SANE_Fixed y_offset; /* Start of scan area in mm */ + SANE_Fixed x_size; /* Size of scan area in mm */ + SANE_Fixed y_size; /* Size of scan area in mm */ + + SANE_Fixed y_offset_calib; /* Start of white strip in mm */ + SANE_Fixed x_offset_mark; /* Start of black mark in mm */ + SANE_Fixed x_offset_ta; /* Start of scan area in TA mode in mm */ SANE_Fixed y_offset_ta; /* Start of scan area in TA mode in mm */ SANE_Fixed x_size_ta; /* Size of scan area in TA mode in mm */ SANE_Fixed y_size_ta; /* Size of scan area in TA mode in mm */ + SANE_Fixed y_offset_calib_ta; /* Start of white strip in TA mode in mm */ - SANE_Int ld_shift_r; - SANE_Int ld_shift_g; - SANE_Int ld_shift_b; - SANE_Int ld_shift_double; + /* Line-distance correction (in pixel at optical_ydpi) for CCD scanners */ + SANE_Int ld_shift_r; /* red */ + SANE_Int ld_shift_g; /* green */ + SANE_Int ld_shift_b; /* blue */ + SANE_Int ld_shift_double; /* distance between two CCD lines of one color + (only applicable for CCD with 6 lines) */ - GT68xx_Color_Order line_mode_color_order; - GT68xx_AFE_Parameters afe_params; - GT68xx_Exposure_Parameters exposure; + GT68xx_Color_Order line_mode_color_order; /* Order of the CCD/CIS colors */ + + GT68xx_AFE_Parameters afe_params; /* Default offset/gain */ + GT68xx_Exposure_Parameters exposure; /* Default exposure parameters */ + SANE_Fixed default_gamma_value; /* Default gamma value */ SANE_Bool is_cis; /* Is this a CIS or CCD scanner? */ + SANE_Word flags; /* Which hacks are needed for this scanner? */ /*@} */ }; @@ -492,6 +501,7 @@ struct GT68xx_Device GT68xx_AFE_Parameters *afe; GT68xx_Exposure_Parameters *exposure; + SANE_Fixed gamma_value; SANE_Bool read_active; SANE_Bool final_scan; diff --git a/doc/descriptions/gt68xx.desc b/doc/descriptions/gt68xx.desc index 1b8872eab..550aa1fda 100644 --- a/doc/descriptions/gt68xx.desc +++ b/doc/descriptions/gt68xx.desc @@ -1,6 +1,7 @@ :backend "gt68xx" :status :beta -:version "1.0-31" +:version "1.0-32" +:new :yes :manpage "sane-gt68xx" :url "http://www.meier-geinitz.de/sane/gt68xx-backend/" :comment "Only the USB scanners mentioned below are supported. For other Mustek BearPaws, look at the Plustek backend." @@ -66,6 +67,10 @@ :status :alpha :comment "Basically works but margins are not correct. More reports welcome." +:model "ScanExpress 2400 USB" +:interface "USB" +:status :untested +:comment "Should be detected but may need some more work in the code. Testers welcome." :mfg "Plustek" :url "http://www.plustek.de/" @@ -76,6 +81,11 @@ :status :alpha :comment "Works up to 600 dpi in gray mode, try disabling calibration" +:model "OpticPro UT16B" +:interface "USB" +:status :untested +:comment "Isn't detected yet mut may work some time in future. Testers welcome." + :mfg "Artec" :url "http://www.artecusa.com/" @@ -144,3 +154,11 @@ :status :alpha :interface "USB" :comment "should work like the X70, but was reported to fail, more reports welcome" + +:mfg "Genius" +:url "http://www.genius-kye.com/" + +:model "Colorpage Vivid3x" +:status :untested +:interface "USB" +:comment "Not detected yet but should work when code is added" diff --git a/doc/gt68xx/gt68xx.CHANGES b/doc/gt68xx/gt68xx.CHANGES index a8b070f1d..036f726aa 100644 --- a/doc/gt68xx/gt68xx.CHANGES +++ b/doc/gt68xx/gt68xx.CHANGES @@ -1,3 +1,23 @@ +gt68xx.CHANGES -*-text-*- + +V 1.0-32 (2002-12-08) + +- "Coarse calibration for first scan only" is off by default now. As at least + CIS calibration is faster now, it doesn't seem to be necessary and produces + wrong images sometimes. +- Added gamma table. +- Setup gamma to 2.0 by default. +- Fixed (hopefully) sigpipe when cancelling. +- No geometry quantization anymore (not necessary). That should fix scanimage + warnings. +- Plustek 1248U: do linemode for every resolution, fix color correction. +- Set SANE_CAP_EMULATED for gamma value. +- Added comments for every Model member in gt68xx_devices. +- Added Plustek UT16B and Genius Vivid3x to .desc. +- Added implementation for inverted offset for CCD scanners. +- Added Mustek ScanExpress 2400 USB. Well, at least it's detected. +- Added NEW marker to .desc. + V 1.0-31 (2002-11-21) - Changed 150 to 200 dpi for Mustek BearPaw 2400 TA. diff --git a/doc/sane-gt68xx.man b/doc/sane-gt68xx.man index b3dc818b1..9ca11b518 100644 --- a/doc/sane-gt68xx.man +++ b/doc/sane-gt68xx.man @@ -37,6 +37,8 @@ Mustek ScanExpress A3 USB .br Mustek ScanExpress 1200 UB Plus .br +Mustek ScanExpress 2400 USB +.br Packard Bell Diamond 1200 .br Plustek OpticPro 1248U