diff --git a/backend/genesys_gl646.cc b/backend/genesys_gl646.cc index 976cbf053..b8aa4ecdc 100644 --- a/backend/genesys_gl646.cc +++ b/backend/genesys_gl646.cc @@ -204,7 +204,6 @@ static void gl646_stop_motor(Genesys_Device* dev) dev->write_register(0x0f, 0x00); } - /** * find the lowest resolution for the sensor in the given mode. * @param sensor id of the sensor @@ -214,25 +213,16 @@ static void gl646_stop_motor(Genesys_Device* dev) static int get_lowest_resolution(int sensor_id, unsigned channels) { - int i, nb; - int dpi; - - i = 0; - dpi = 9600; - nb = sizeof (sensor_master) / sizeof (Sensor_Master); - while (i < nb) - { - /* computes distance and keep mode if it is closer than previous */ - if (sensor_id == sensor_master[i].sensor - && sensor_master[i].channels == channels) - { - if (sensor_master[i].dpi < dpi) - { - dpi = sensor_master[i].dpi; - } - } - i++; + int dpi = 9600; + for (const auto& sensor : sensor_master) { + // computes distance and keep mode if it is closer than previous + if (sensor_id == sensor.sensor && sensor.matches_channels(channels)) { + if (sensor.dpi < dpi) { + dpi = sensor.dpi; + } + } } + DBG(DBG_info, "%s: %d\n", __func__, dpi); return dpi; } @@ -247,35 +237,28 @@ get_lowest_resolution(int sensor_id, unsigned channels) static int get_closest_resolution(int sensor_id, int required, unsigned channels) { - int i, nb; - int dist, dpi; + int dpi = 0; + int dist = 9600; - i = 0; - dpi = 0; - dist = 9600; - nb = sizeof (sensor_master) / sizeof (Sensor_Master); - while (i < nb) - { - /* exit on perfect match */ - if (sensor_id == sensor_master[i].sensor - && sensor_master[i].dpi == required - && sensor_master[i].channels == channels) - { - DBG(DBG_info, "%s: match found for %d\n", __func__, required); - return required; - } - /* computes distance and keep mode if it is closer than previous */ - if (sensor_id == sensor_master[i].sensor - && sensor_master[i].channels == channels) - { - if (abs (sensor_master[i].dpi - required) < dist) - { - dpi = sensor_master[i].dpi; - dist = abs (sensor_master[i].dpi - required); - } - } - i++; + for (const auto& sensor : sensor_master) { + if (sensor_id != sensor.sensor) + continue; + + // exit on perfect match + if (sensor.dpi == required && sensor.matches_channels(channels)) { + DBG(DBG_info, "%s: match found for %d\n", __func__, required); + return required; + } + + // computes distance and keep mode if it is closer than previous + if (sensor.matches_channels(channels)) { + if (std::abs(sensor.dpi - required) < dist) { + dpi = sensor.dpi; + dist = std::abs(sensor.dpi - required); + } + } } + DBG(DBG_info, "%s: closest match for %d is %d\n", __func__, required, dpi); return dpi; } @@ -290,22 +273,15 @@ get_closest_resolution(int sensor_id, int required, unsigned channels) */ static unsigned get_ccd_size_divisor(int sensor_id, int required, unsigned channels) { - int i, nb; - - i = 0; - nb = sizeof (sensor_master) / sizeof (Sensor_Master); - while (i < nb) - { - /* exit on perfect match */ - if (sensor_id == sensor_master[i].sensor - && sensor_master[i].dpi == required - && sensor_master[i].channels == channels) - { - DBG(DBG_io, "%s: match found for %d (ccd_size_divisor=%d)\n", __func__, required, - sensor_master[i].ccd_size_divisor); - return sensor_master[i].ccd_size_divisor; - } - i++; + for (const auto& sensor : sensor_master) { + // exit on perfect match + if (sensor_id == sensor.sensor && sensor.dpi == required && + sensor.matches_channels(channels)) + { + DBG(DBG_io, "%s: match found for %d (ccd_size_divisor=%d)\n", __func__, required, + sensor.ccd_size_divisor); + return sensor.ccd_size_divisor; + } } DBG(DBG_info, "%s: failed to find match for %d dpi\n", __func__, required); return 1; @@ -320,22 +296,15 @@ static unsigned get_ccd_size_divisor(int sensor_id, int required, unsigned chann */ static int get_cksel(int sensor_id, int required, unsigned channels) { - int i, nb; - - i = 0; - nb = sizeof (sensor_master) / sizeof (Sensor_Master); - while (i < nb) - { - /* exit on perfect match */ - if (sensor_id == sensor_master[i].sensor - && sensor_master[i].dpi == required - && sensor_master[i].channels == channels) - { - DBG(DBG_io, "%s: match found for %d (cksel=%d)\n", __func__, required, - sensor_master[i].cksel); - return sensor_master[i].cksel; - } - i++; + for (const auto& sensor : sensor_master) { + // exit on perfect match + if (sensor_id == sensor.sensor && sensor.dpi == required && + sensor.matches_channels(channels)) + { + DBG(DBG_io, "%s: match found for %d (cksel=%d)\n", __func__, required, + sensor.cksel); + return sensor.cksel; + } } DBG(DBG_error, "%s: failed to find match for %d dpi\n", __func__, required); /* fail safe fallback */ @@ -413,10 +382,7 @@ static void gl646_setup_registers(Genesys_Device* dev, uint32_t endx = startx + pixels; int i, nb; - Sensor_Master *sensor_mst = NULL; Motor_Master *motor = NULL; - Sensor_Settings *settings = NULL; - GenesysRegister *r; unsigned int used1, used2, vfinal; unsigned int bpp; /**> bytes per pixel */ uint32_t z1, z2; @@ -439,20 +405,17 @@ static void gl646_setup_registers(Genesys_Device* dev, xresolution = resolution; } - /* for the given resolution, search for master - * sensor mode setting */ - i = 0; - nb = sizeof (sensor_master) / sizeof (Sensor_Master); - while (i < nb) - { - if (dev->model->ccd_type == sensor_master[i].sensor - && sensor_master[i].dpi == xresolution - && sensor_master[i].channels == session.params.channels) - { - sensor_mst = &sensor_master[i]; - } - i++; + // for the given resolution, search for master sensor mode setting + const Sensor_Master* sensor_mst = nullptr; + for (const auto& sensor : sensor_master) { + if (dev->model->ccd_type == sensor.sensor && sensor.dpi == xresolution && + sensor.matches_channels(session.params.channels)) + { + sensor_mst = &sensor; + break; + } } + if (sensor_mst == NULL) { throw SaneException("unable to find settings for sensor %d at %d dpi channels=%d", dev->model->ccd_type, xresolution, session.params.channels); @@ -480,69 +443,16 @@ static void gl646_setup_registers(Genesys_Device* dev, /* now we can search for the specific sensor settings */ i = 0; - nb = sizeof (sensor_settings) / sizeof (Sensor_Settings); - while (i < nb) - { - if (sensor_mst->sensor == sensor_settings[i].sensor - && sensor_mst->cksel == sensor_settings[i].cksel) - { - settings = &sensor_settings[i]; - } - i++; - } - if (settings == NULL) - { - throw SaneException("unable to find settings for sensor %d with '%d' ccd timing", - sensor_mst->sensor, sensor_mst->cksel); - } unsigned ccd_size_divisor = sensor_mst->ccd_size_divisor; - /* now apply values from settings to registers */ - if (sensor_mst->regs_0x10_0x15 != NULL) - { - for (i = 0; i < 6; i++) - { - r = sanei_genesys_get_address (regs, 0x10 + i); - r->value = sensor_mst->regs_0x10_0x15[i]; - } - } - else - { - for (i = 0; i < 6; i++) - { - r = sanei_genesys_get_address (regs, 0x10 + i); - r->value = 0; - } - } + // now apply values from settings to registers + regs->set16(REG_EXPR, sensor_mst->exposure.red); + regs->set16(REG_EXPG, sensor_mst->exposure.green); + regs->set16(REG_EXPB, sensor_mst->exposure.blue); - for (i = 0; i < 4; i++) - { - r = sanei_genesys_get_address (regs, 0x08 + i); - if (ccd_size_divisor > 1) { - r->value = settings->manual_0x08_0x0b[i]; - } else { - r->value = settings->regs_0x08_0x0b[i]; - } - } - - for (i = 0; i < 8; i++) - { - r = sanei_genesys_get_address (regs, 0x16 + i); - r->value = settings->regs_0x16_0x1d[i]; - } - - for (i = 0; i < 13; i++) - { - r = sanei_genesys_get_address (regs, 0x52 + i); - r->value = settings->regs_0x52_0x5e[i]; - } - if (ccd_size_divisor > 1) { - for (i = 0; i < 7; i++) - { - r = sanei_genesys_get_address (regs, 0x52 + i); - r->value = settings->manual_0x52_0x58[i]; - } + for (const auto& reg : sensor_mst->custom_regs) { + regs->set8(reg.address, reg.value); } /* now generate slope tables : we are not using generate_slope_table3 yet */ @@ -667,12 +577,6 @@ static void gl646_setup_registers(Genesys_Device* dev, regs->find_reg(0x05).value &= ~REG05_LEDADD; } - /* cktoggle, ckdelay and cksel at once, cktdelay=2 => ccd_size_divisor == 2 for md5345 */ - regs->find_reg(0x18).value = sensor_mst->r18; - - /* manual CCD/2 clock programming on ccd_size_divisor == 2 for hp2300 */ - regs->find_reg(0x1d).value = sensor_mst->r1d; - /* HP2400 1200dpi mode tuning */ if (dev->model->ccd_type == CCD_HP2400) @@ -759,8 +663,8 @@ static void gl646_setup_registers(Genesys_Device* dev, DBG(DBG_info, "%s: wpl=%d\n", __func__, words_per_line); regs->set24(REG_MAXWD, words_per_line); - regs->set16(REG_DPISET, sensor_mst->dpiset); - regs->set16(REG_LPERIOD, sensor_mst->exposure); + regs->set16(REG_DPISET, sensor_mst->xdpi * sensor_mst->ccd_size_divisor * sensor_mst->cksel); + regs->set16(REG_LPERIOD, sensor_mst->exposure_lperiod); /* move distance must be adjusted to take into account the extra lines * read to reorder data */ @@ -889,7 +793,7 @@ static void gl646_setup_registers(Genesys_Device* dev, regs->find_reg(0x65).value = motor->mtrpwm; sanei_genesys_calculate_zmod (regs->find_reg(0x02).value & REG02_FASTFED, - sensor_mst->exposure, + sensor_mst->exposure_lperiod, slope_table1, motor->steps1, move, motor->fwdbwd, &z1, &z2); @@ -942,7 +846,7 @@ static void gl646_setup_registers(Genesys_Device* dev, dev->current_setup.pixels = ((endx - startx) * sensor_mst->xdpi) / sensor.optical_res; dev->current_setup.lines = linecnt; - dev->current_setup.exposure_time = sensor_mst->exposure; + dev->current_setup.exposure_time = sensor_mst->exposure_lperiod; dev->current_setup.xres = sensor_mst->xdpi; dev->current_setup.ccd_size_divisor = ccd_size_divisor; dev->current_setup.stagger = stagger; @@ -3898,8 +3802,7 @@ static void gl646_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor unsigned ccd_size_divisor = 1; if (sensor.ccd_size_divisor > 1) { - // FIXME: possibly wrong channel count for ccd_size_divisor - ccd_size_divisor = get_ccd_size_divisor(dev->model->ccd_type, res, 3); + ccd_size_divisor = get_ccd_size_divisor(dev->model->ccd_type, res, 1); } /* we set up for a lowest available resolution color grey scan, full width */ diff --git a/backend/genesys_gl646.h b/backend/genesys_gl646.h index 039db2c60..9aae4f2e8 100644 --- a/backend/genesys_gl646.h +++ b/backend/genesys_gl646.h @@ -146,6 +146,9 @@ #define REG6C_Z1MOD 0x38 #define REG6C_Z2MOD 0x07 +#define REG_EXPR 0x10 +#define REG_EXPG 0x12 +#define REG_EXPB 0x14 #define REG_SCANFED 0x1f #define REG_BUFSEL 0x20 #define REG_LINCNT 0x25 @@ -281,134 +284,81 @@ typedef struct */ struct Sensor_Master { - /* key */ - SANE_Int sensor; /**< sensor identifier */ - SANE_Int dpi; /**< required dpi */ - unsigned channels; // 3 channels if color scan, 1 channel for gray scan + int sensor = 0; // sensor identifier */ + int dpi = 0; // required dpi */ + std::vector channels; // 3 channels if color scan, 1 channel for gray scan - /* settings */ - SANE_Int xdpi; /**< real sensor dpi, may be different from the required resolution */ - SANE_Int exposure; /**< exposure time */ - SANE_Int dpiset; /**< set sensor dpi */ - SANE_Int cksel; /**< dpiset 'divisor', part of reg 18h */ - SANE_Int dummy; /**< dummy exposure time */ - /* uint8_t regs_0x10_0x15[6];*/ - uint8_t *regs_0x10_0x15; /**< per color exposure time for CIS scanners */ + int xdpi = 0; // real sensor dpi, may be different from the required resolution */ + int exposure_lperiod = 0; // exposure time */ + int cksel = 0; // dpiset 'divisor', part of reg 18h // selects manual CCD/2 clock programming. I.e. we're scanning at high DPI, but clock is setup // such that we acquire only every 2nd pixel data - unsigned ccd_size_divisor; + unsigned ccd_size_divisor = 0; - uint8_t r18; /**> content of register 18h */ - uint8_t r1d; /**> content of register 1dh */ + SensorExposure exposure; + + GenesysRegisterSettingSet custom_regs; + + bool matches_channels(unsigned ch) const + { + return std::find(channels.begin(), channels.end(), ch) != channels.end(); + } }; -/** - * settings for a given resolution and DPISET - * TODO clean up this when all scanners will have been added - */ -typedef struct -{ - /* key */ - SANE_Int sensor; - SANE_Int cksel; - - /* values */ - uint8_t regs_0x08_0x0b[4]; /**< settings for normal CCD clock */ - uint8_t manual_0x08_0x0b[4]; /**< settings for CCD/2 clock */ - uint8_t regs_0x16_0x1d[8]; - uint8_t regs_0x52_0x5e[13]; - uint8_t manual_0x52_0x58[7]; -} Sensor_Settings; - -static uint8_t xp200_color[6]={0x16, 0x44, 0x0c, 0x80, 0x09, 0x2e}; -static uint8_t xp200_gray[6]={0x05, 0x0a, 0x0f, 0xa0, 0x10, 0x10}; - /** * master sensor settings, for a given sensor and dpi, * it gives exposure and CCD time */ -static Sensor_Master sensor_master[] = { +static std::vector sensor_master = { /* HP3670 master settings */ - {CCD_HP3670, 75, 3, 75, 4879, 300, 4, 42, NULL, 1, 0x33, 0x43}, - {CCD_HP3670, 100, 3, 100, 4487, 400, 4, 42, NULL, 1, 0x33, 0x43}, - {CCD_HP3670, 150, 3, 150, 4879, 600, 4, 42, NULL, 1, 0x33, 0x43}, - {CCD_HP3670, 300, 3, 300, 4503, 1200, 4, 42, NULL, 1, 0x33, 0x43}, - {CCD_HP3670, 600, 3, 600, 10251, 1200, 2, 42, NULL, 1, 0x31, 0x43}, - {CCD_HP3670,1200, 3, 1200, 12750, 1200, 1, 42, NULL, 1, 0x30, 0x43}, - {CCD_HP3670,2400, 3, 1200, 12750, 1200, 1, 42, NULL, 1, 0x30, 0x43}, - {CCD_HP3670, 75, 1, 75, 4879, 300, 4, 42, NULL, 1, 0x33, 0x43}, - {CCD_HP3670, 100, 1, 100, 4487, 400, 4, 42, NULL, 1, 0x33, 0x43}, - {CCD_HP3670, 150, 1, 150, 4879, 600, 4, 42, NULL, 1, 0x33, 0x43}, - {CCD_HP3670, 300, 1, 300, 4503, 1200, 4, 42, NULL, 1, 0x33, 0x43}, - {CCD_HP3670, 600, 1, 600, 10251, 1200, 2, 42, NULL, 1, 0x31, 0x43}, - {CCD_HP3670,1200, 1, 1200, 12750, 1200, 1, 42, NULL, 1, 0x30, 0x43}, - {CCD_HP3670,2400, 1, 1200, 12750, 1200, 1, 42, NULL, 1, 0x30, 0x43}, + {CCD_HP3670, 75, {1, 3}, 75, 4879, 4, 1, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x0a }, { 0x0a, 0x0b }, { 0x0b, 0x0d }, { 0x16, 0x33 }, { 0x17, 0x07 }, { 0x18, 0x33 }, { 0x19, 0x2a }, { 0x1a, 0x02 }, { 0x1b, 0x13 }, { 0x1c, 0xc0 }, { 0x1d, 0x43 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x15 }, { 0x5a, 0xc1 }, { 0x5b, 0x05 }, { 0x5c, 0x0a }, { 0x5d, 0x0f }, { 0x5e, 0x00 } } }, + {CCD_HP3670, 100, {1, 3}, 100, 4487, 4, 1, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x0a }, { 0x0a, 0x0b }, { 0x0b, 0x0d }, { 0x16, 0x33 }, { 0x17, 0x07 }, { 0x18, 0x33 }, { 0x19, 0x2a }, { 0x1a, 0x02 }, { 0x1b, 0x13 }, { 0x1c, 0xc0 }, { 0x1d, 0x43 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x15 }, { 0x5a, 0xc1 }, { 0x5b, 0x05 }, { 0x5c, 0x0a }, { 0x5d, 0x0f }, { 0x5e, 0x00 } } }, + {CCD_HP3670, 150, {1, 3}, 150, 4879, 4, 1, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x0a }, { 0x0a, 0x0b }, { 0x0b, 0x0d }, { 0x16, 0x33 }, { 0x17, 0x07 }, { 0x18, 0x33 }, { 0x19, 0x2a }, { 0x1a, 0x02 }, { 0x1b, 0x13 }, { 0x1c, 0xc0 }, { 0x1d, 0x43 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x15 }, { 0x5a, 0xc1 }, { 0x5b, 0x05 }, { 0x5c, 0x0a }, { 0x5d, 0x0f }, { 0x5e, 0x00 } } }, + {CCD_HP3670, 300, {1, 3}, 300, 4503, 4, 1, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x0a }, { 0x0a, 0x0b }, { 0x0b, 0x0d }, { 0x16, 0x33 }, { 0x17, 0x07 }, { 0x18, 0x33 }, { 0x19, 0x2a }, { 0x1a, 0x02 }, { 0x1b, 0x13 }, { 0x1c, 0xc0 }, { 0x1d, 0x43 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x15 }, { 0x5a, 0xc1 }, { 0x5b, 0x05 }, { 0x5c, 0x0a }, { 0x5d, 0x0f }, { 0x5e, 0x00 } } }, + {CCD_HP3670, 600, {1, 3}, 600, 10251, 2, 1, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x33 }, { 0x17, 0x07 }, { 0x18, 0x31 }, { 0x19, 0x2a }, { 0x1a, 0x02 }, { 0x1b, 0x0e }, { 0x1c, 0xc0 }, { 0x1d, 0x43 }, { 0x52, 0x0b }, { 0x53, 0x0f }, { 0x54, 0x13 }, { 0x55, 0x17 }, { 0x56, 0x03 }, { 0x57, 0x07 }, { 0x58, 0x63 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x02 }, { 0x5c, 0x0e }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_HP3670,1200, {1, 3}, 1200, 12750, 1, 1, { 0, 0, 0 }, { { 0x08, 0x0d }, { 0x09, 0x0f }, { 0x0a, 0x11 }, { 0x0b, 0x13 }, { 0x16, 0x2b }, { 0x17, 0x07 }, { 0x18, 0x30 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0xc0 }, { 0x1d, 0x43 }, { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x0b }, { 0x55, 0x0f }, { 0x56, 0x13 }, { 0x57, 0x17 }, { 0x58, 0x23 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_HP3670,2400, {1, 3}, 1200, 12750, 1, 1, { 0, 0, 0 }, { { 0x08, 0x0d }, { 0x09, 0x0f }, { 0x0a, 0x11 }, { 0x0b, 0x13 }, { 0x16, 0x2b }, { 0x17, 0x07 }, { 0x18, 0x30 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0xc0 }, { 0x1d, 0x43 }, { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x0b }, { 0x55, 0x0f }, { 0x56, 0x13 }, { 0x57, 0x17 }, { 0x58, 0x23 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, /* HP 2400 master settings */ - {CCD_HP2400, 50, 3, 50, 7211, 200, 4, 42, NULL, 1, 0x3f, 0x02}, - {CCD_HP2400, 100, 3, 100, 7211, 400, 4, 42, NULL, 1, 0x3f, 0x02}, - {CCD_HP2400, 150, 3, 150, 7211, 600, 4, 42, NULL, 1, 0x3f, 0x02}, - {CCD_HP2400, 300, 3, 300, 8751, 1200, 4, 42, NULL, 1, 0x3f, 0x02}, - {CCD_HP2400, 600, 3, 600, 18760, 1200, 2, 42, NULL, 1, 0x31, 0x02}, - {CCD_HP2400,1200, 3, 1200, 21749, 1200, 1, 42, NULL, 1, 0x30, 0x42}, - {CCD_HP2400, 50, 1, 50, 7211, 200, 4, 42, NULL, 1, 0x3f, 0x02}, - {CCD_HP2400, 100, 1, 100, 7211, 400, 4, 42, NULL, 1, 0x3f, 0x02}, - {CCD_HP2400, 150, 1, 150, 7211, 600, 4, 42, NULL, 1, 0x3f, 0x02}, - {CCD_HP2400, 300, 1, 300, 8751, 1200, 4, 42, NULL, 1, 0x3f, 0x02}, - {CCD_HP2400, 600, 1, 600, 18760, 1200, 2, 42, NULL, 1, 0x31, 0x02}, - {CCD_HP2400,1200, 1, 1200, 21749, 1200, 1, 42, NULL, 1, 0x30, 0x42}, + {CCD_HP2400, 50, {1, 3}, 50, 7211, 4, 1, { 0, 0, 0 }, { { 0x08, 0x14 }, { 0x09, 0x15 }, { 0x0a, 0x00 }, { 0x0b, 0x00 }, { 0x16, 0xbf }, { 0x17, 0x08 }, { 0x18, 0x3f }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x02 }, { 0x52, 0x0b }, { 0x53, 0x0f }, { 0x54, 0x13 }, { 0x55, 0x17 }, { 0x56, 0x03 }, { 0x57, 0x07 }, { 0x58, 0x63 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_HP2400, 100, {1, 3}, 100, 7211, 4, 1, { 0, 0, 0 }, { { 0x08, 0x14 }, { 0x09, 0x15 }, { 0x0a, 0x00 }, { 0x0b, 0x00 }, { 0x16, 0xbf }, { 0x17, 0x08 }, { 0x18, 0x3f }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x02 }, { 0x52, 0x0b }, { 0x53, 0x0f }, { 0x54, 0x13 }, { 0x55, 0x17 }, { 0x56, 0x03 }, { 0x57, 0x07 }, { 0x58, 0x63 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_HP2400, 150, {1, 3}, 150, 7211, 4, 1, { 0, 0, 0 }, { { 0x08, 0x14 }, { 0x09, 0x15 }, { 0x0a, 0x00 }, { 0x0b, 0x00 }, { 0x16, 0xbf }, { 0x17, 0x08 }, { 0x18, 0x3f }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x02 }, { 0x52, 0x0b }, { 0x53, 0x0f }, { 0x54, 0x13 }, { 0x55, 0x17 }, { 0x56, 0x03 }, { 0x57, 0x07 }, { 0x58, 0x63 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_HP2400, 300, {1, 3}, 300, 8751, 4, 1, { 0, 0, 0 }, { { 0x08, 0x14 }, { 0x09, 0x15 }, { 0x0a, 0x00 }, { 0x0b, 0x00 }, { 0x16, 0xbf }, { 0x17, 0x08 }, { 0x18, 0x3f }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x02 }, { 0x52, 0x0b }, { 0x53, 0x0f }, { 0x54, 0x13 }, { 0x55, 0x17 }, { 0x56, 0x03 }, { 0x57, 0x07 }, { 0x58, 0x63 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_HP2400, 600, {1, 3}, 600, 18760, 2, 1, { 0, 0, 0 }, { { 0x08, 0x0e }, { 0x09, 0x0f }, { 0x0a, 0x00 }, { 0x0b, 0x00 }, { 0x16, 0xbf }, { 0x17, 0x08 }, { 0x18, 0x31 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x02 }, { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x0b }, { 0x55, 0x0f }, { 0x56, 0x13 }, { 0x57, 0x17 }, { 0x58, 0x23 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_HP2400,1200, {1, 3}, 1200, 21749, 1, 1, { 0, 0, 0 }, { { 0x08, 0x02 }, { 0x09, 0x04 }, { 0x0a, 0x00 }, { 0x0b, 0x00 }, { 0x16, 0xbf }, { 0x17, 0x08 }, { 0x18, 0x30 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0xc0 }, { 0x1d, 0x42 }, { 0x52, 0x0b }, { 0x53, 0x0f }, { 0x54, 0x13 }, { 0x55, 0x17 }, { 0x56, 0x03 }, { 0x57, 0x07 }, { 0x58, 0x63 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x0e }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, /* XP 200 master settings */ - {CIS_XP200 , 75, 3, 75, 5700, 75, 1, 42, xp200_color, 1, 0x00, 0x11}, - {CIS_XP200 , 100, 3, 100, 5700, 100, 1, 42, xp200_color, 1, 0x00, 0x11}, - {CIS_XP200 , 200, 3, 200, 5700, 200, 1, 42, xp200_color, 1, 0x00, 0x11}, - {CIS_XP200 , 300, 3, 300, 9000, 300, 1, 42, xp200_color, 1, 0x00, 0x11}, - {CIS_XP200 , 600, 3, 600, 16000, 600, 1, 42, xp200_color, 1, 0x00, 0x11}, + {CIS_XP200 , 75, {3}, 75, 5700, 1, 1, { 0x1644, 0x0c80, 0x092e }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CIS_XP200 , 100, {3}, 100, 5700, 1, 1, { 0x1644, 0x0c80, 0x092e }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CIS_XP200 , 200, {3}, 200, 5700, 1, 1, { 0x1644, 0x0c80, 0x092e }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CIS_XP200 , 300, {3}, 300, 9000, 1, 1, { 0x1644, 0x0c80, 0x092e }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CIS_XP200 , 600, {3}, 600, 16000, 1, 1, { 0x1644, 0x0c80, 0x092e }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, - {CIS_XP200 , 75, 1, 75, 16000, 75, 1, 42, xp200_gray, 1, 0x00, 0x11}, - {CIS_XP200 , 100, 1, 100, 7800, 100, 1, 42, xp200_gray, 1, 0x00, 0x11}, - {CIS_XP200 , 200, 1, 200, 11000, 200, 1, 42, xp200_gray, 1, 0x00, 0x11}, - {CIS_XP200 , 300, 1, 300, 13000, 300, 1, 42, xp200_gray, 1, 0x00, 0x11}, - {CIS_XP200 , 600, 1, 600, 24000, 600, 1, 42, xp200_gray, 1, 0x00, 0x11}, + {CIS_XP200 , 75, {1}, 75, 16000, 1, 1, { 0x050a, 0x0fa0, 0x1010 }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CIS_XP200 , 100, {1}, 100, 7800, 1, 1, { 0x050a, 0x0fa0, 0x1010 }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CIS_XP200 , 200, {1}, 200, 11000, 1, 1, { 0x050a, 0x0fa0, 0x1010 }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CIS_XP200 , 300, {1}, 300, 13000, 1, 1, { 0x050a, 0x0fa0, 0x1010 }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CIS_XP200 , 600, {1}, 600, 24000, 1, 1, { 0x050a, 0x0fa0, 0x1010 }, { { 0x08, 0x06 }, { 0x09, 0x07 }, { 0x0a, 0x0a }, { 0x0b, 0x04 }, { 0x16, 0x24 }, { 0x17, 0x04 }, { 0x18, 0x00 }, { 0x19, 0x2a }, { 0x1a, 0x0a }, { 0x1b, 0x0a }, { 0x1c, 0x00 }, { 0x1d, 0x11 }, { 0x52, 0x08 }, { 0x53, 0x02 }, { 0x54, 0x00 }, { 0x55, 0x00 }, { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x1a }, { 0x59, 0x51 }, { 0x5a, 0x00 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, /* HP 2300 master settings */ - {CCD_HP2300, 75, 3, 75, 4480, 150, 1, 42, NULL, 2, 0x20, 0x85}, - {CCD_HP2300, 150, 3, 150, 4350, 300, 1, 42, NULL, 2, 0x20, 0x85}, - {CCD_HP2300, 300, 3, 300, 4350, 600, 1, 42, NULL, 2, 0x20, 0x85}, - {CCD_HP2300, 600, 3, 600, 8700, 600, 1, 42, NULL, 1, 0x20, 0x05}, - {CCD_HP2300,1200, 3, 600, 8700, 600, 1, 42, NULL, 1, 0x20, 0x05}, - {CCD_HP2300, 75, 1, 75, 4480, 150, 1, 42, NULL, 2, 0x20, 0x85}, - {CCD_HP2300, 150, 1, 150, 4350, 300, 1, 42, NULL, 2, 0x20, 0x85}, - {CCD_HP2300, 300, 1, 300, 4350, 600, 1, 42, NULL, 2, 0x20, 0x85}, - {CCD_HP2300, 600, 1, 600, 8700, 600, 1, 42, NULL, 1, 0x20, 0x05}, - {CCD_HP2300,1200, 1, 600, 8700, 600, 1, 42, NULL, 1, 0x20, 0x05}, - /* non half ccd 300 dpi settings - {CCD_HP2300, 300, 3, 300, 8700, 300, 1, 42, NULL, 1, 0x20, 0x05}, - {CCD_HP2300, 300, 1, 300, 8700, 300, 1, 42, NULL, 1, 0x20, 0x05}, - */ + {CCD_HP2300, 75, {1, 3}, 75, 4480, 1, 2, { 0, 0, 0 }, { { 0x08, 0x16 }, { 0x09, 0x00 }, { 0x0a, 0x01 }, { 0x0b, 0x03 }, { 0x16, 0xb7 }, { 0x17, 0x0a }, { 0x18, 0x20 }, { 0x19, 0x2a }, { 0x1a, 0x6a }, { 0x1b, 0x8a }, { 0x1c, 0x00 }, { 0x1d, 0x85 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x06 }, { 0x5c, 0x0b }, { 0x5d, 0x10 }, { 0x5e, 0x16 } } }, + {CCD_HP2300, 150, {1, 3}, 150, 4350, 1, 2, { 0, 0, 0 }, { { 0x08, 0x16 }, { 0x09, 0x00 }, { 0x0a, 0x01 }, { 0x0b, 0x03 }, { 0x16, 0xb7 }, { 0x17, 0x0a }, { 0x18, 0x20 }, { 0x19, 0x2a }, { 0x1a, 0x6a }, { 0x1b, 0x8a }, { 0x1c, 0x00 }, { 0x1d, 0x85 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x06 }, { 0x5c, 0x0b }, { 0x5d, 0x10 }, { 0x5e, 0x16 } } }, + {CCD_HP2300, 300, {1, 3}, 300, 4350, 1, 2, { 0, 0, 0 }, { { 0x08, 0x16 }, { 0x09, 0x00 }, { 0x0a, 0x01 }, { 0x0b, 0x03 }, { 0x16, 0xb7 }, { 0x17, 0x0a }, { 0x18, 0x20 }, { 0x19, 0x2a }, { 0x1a, 0x6a }, { 0x1b, 0x8a }, { 0x1c, 0x00 }, { 0x1d, 0x85 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x06 }, { 0x5c, 0x0b }, { 0x5d, 0x10 }, { 0x5e, 0x16 } } }, + {CCD_HP2300, 600, {1, 3}, 600, 8700, 1, 1, { 0, 0, 0 }, { { 0x08, 0x01 }, { 0x09, 0x03 }, { 0x0a, 0x04 }, { 0x0b, 0x06 }, { 0x16, 0xb7 }, { 0x17, 0x0a }, { 0x18, 0x20 }, { 0x19, 0x2a }, { 0x1a, 0x6a }, { 0x1b, 0x8a }, { 0x1c, 0x00 }, { 0x1d, 0x05 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x06 }, { 0x5c, 0x0b }, { 0x5d, 0x10 }, { 0x5e, 0x16 } } }, + {CCD_HP2300,1200, {1, 3}, 600, 8700, 1, 1, { 0, 0, 0 }, { { 0x08, 0x01 }, { 0x09, 0x03 }, { 0x0a, 0x04 }, { 0x0b, 0x06 }, { 0x16, 0xb7 }, { 0x17, 0x0a }, { 0x18, 0x20 }, { 0x19, 0x2a }, { 0x1a, 0x6a }, { 0x1b, 0x8a }, { 0x1c, 0x00 }, { 0x1d, 0x05 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x06 }, { 0x5c, 0x0b }, { 0x5d, 0x10 }, { 0x5e, 0x16 } } }, /* MD5345/6471 master settings */ - {CCD_5345 , 50, 3, 50, 12000, 100, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 75, 3, 75, 11000, 150, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 100, 3, 100, 11000, 200, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 150, 3, 150, 11000, 300, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 200, 3, 200, 11000, 400, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 300, 3, 300, 11000, 600, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 400, 3, 400, 11000, 800, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 600, 3, 600, 11000,1200, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 ,1200, 3, 1200, 11000,1200, 1, 42, NULL, 1, 0x30, 0x03}, - {CCD_5345 ,2400, 3, 1200, 11000,1200, 1, 42, NULL, 1, 0x30, 0x03}, - {CCD_5345 , 50, 1, 50, 12000, 100, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 75, 1, 75, 11000, 150, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 100, 1, 100, 11000, 200, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 150, 1, 150, 11000, 300, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 200, 1, 200, 11000, 400, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 300, 1, 300, 11000, 600, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 400, 1, 400, 11000, 800, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 , 600, 1, 600, 11000,1200, 1, 42, NULL, 2, 0x28, 0x03}, - {CCD_5345 ,1200, 1, 1200, 11000,1200, 1, 42, NULL, 2, 0x30, 0x03}, - {CCD_5345 ,2400, 1, 1200, 11000,1200, 1, 42, NULL, 1, 0x30, 0x03}, + {CCD_5345 , 50, {1, 3}, 50, 12000, 1, 2, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x28 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 , 75, {1, 3}, 75, 11000, 1, 2, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x28 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 , 100, {1, 3}, 100, 11000, 1, 2, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x28 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 , 150, {1, 3}, 150, 11000, 1, 2, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x28 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 , 200, {1, 3}, 200, 11000, 1, 2, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x28 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 , 300, {1, 3}, 300, 11000, 1, 2, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x28 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 , 400, {1, 3}, 400, 11000, 1, 2, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x28 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 , 600, {1, 3}, 600, 11000, 1, 2, { 0, 0, 0 }, { { 0x08, 0x00 }, { 0x09, 0x05 }, { 0x0a, 0x06 }, { 0x0b, 0x08 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x28 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x0f }, { 0x53, 0x13 }, { 0x54, 0x17 }, { 0x55, 0x03 }, { 0x56, 0x07 }, { 0x57, 0x0b }, { 0x58, 0x83 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 ,1200, {1, 3}, 1200, 11000, 1, 1, { 0, 0, 0 }, { { 0x08, 0x0d }, { 0x09, 0x0f }, { 0x0a, 0x11 }, { 0x0b, 0x13 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x30 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x0b }, { 0x55, 0x0f }, { 0x56, 0x13 }, { 0x57, 0x17 }, { 0x58, 0x23 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, + {CCD_5345 ,2400, {1, 3}, 1200, 11000, 1, 1, { 0, 0, 0 }, { { 0x08, 0x0d }, { 0x09, 0x0f }, { 0x0a, 0x11 }, { 0x0b, 0x13 }, { 0x16, 0x0b }, { 0x17, 0x0a }, { 0x18, 0x30 }, { 0x19, 0x2a }, { 0x1a, 0x00 }, { 0x1b, 0x00 }, { 0x1c, 0x00 }, { 0x1d, 0x03 }, { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x0b }, { 0x55, 0x0f }, { 0x56, 0x13 }, { 0x57, 0x17 }, { 0x58, 0x23 }, { 0x59, 0x00 }, { 0x5a, 0xc1 }, { 0x5b, 0x00 }, { 0x5c, 0x00 }, { 0x5d, 0x00 }, { 0x5e, 0x00 } } }, }; @@ -501,74 +451,3 @@ static Motor_Master motor_master[] = { {MOTOR_5345, 1200, 1,1200, QUATER_STEP, SANE_FALSE, SANE_TRUE , 0, 16, 2750, 2750, 255, 2000, 300, 0.3, 0.4, 146}, {MOTOR_5345, 2400, 1,2400, QUATER_STEP, SANE_FALSE, SANE_TRUE , 0, 16, 5500, 5500, 255, 2000, 300, 0.3, 0.4, 146}, /* 5500 guessed */ }; - -/** - * sensor settings for a given sensor and timing method - */ -static Sensor_Settings sensor_settings[] = { - /* HP 3670 */ - {CCD_HP3670, 1, - {0x0d, 0x0f, 0x11, 0x13}, - {0x00, 0x00, 0x00, 0x00}, - {0x2b, 0x07, 0x30, 0x2a, 0x00, 0x00, 0xc0, 0x43}, - {0x03, 0x07, 0x0b, 0x0f, 0x13, 0x17, 0x23, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, }, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} - }, - {CCD_HP3670, 2, - {0x00, 0x05, 0x06, 0x08}, - {0x00, 0x00, 0x00, 0x00}, - {0x33, 0x07, 0x31, 0x2a, 0x02, 0x0e, 0xc0, 0x43}, - {0x0b, 0x0f, 0x13, 0x17, 0x03, 0x07, 0x63, 0x00, 0xc1, 0x02, 0x0e, 0x00, 0x00, }, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} - }, - {CCD_HP3670, 4, - {0x00, 0x0a, 0x0b, 0x0d}, - {0x00, 0x00, 0x00, 0x00}, - {0x33, 0x07, 0x33, 0x2a, 0x02, 0x13, 0xc0, 0x43}, - {0x0f, 0x13, 0x17, 0x03, 0x07, 0x0b, 0x83, 0x15, 0xc1, 0x05, 0x0a, 0x0f, 0x00, }, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} - }, - /* HP 2400 */ - {CCD_HP2400, 4, - {0x14, 0x15, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0xbf, 0x08, 0x3f, 0x2a, 0x00, 0x00, 0x00, 0x02}, - {11, 15, 19, 23, 3, 7, 0x63, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00}, - {11, 15, 19, 23, 3, 7, 0x63} - }, - {CCD_HP2400, 2, - {14, 15, 0, 0}, - {14, 15, 0, 0}, - {0xbf, 0x08, 0x31, 0x2a, 0, 0, 0, 0x02}, - {3, 7, 11, 15, 19, 23, 0x23, 0, 0xc1, 0, 0, 0, 0}, - {3, 7, 11, 15, 19, 23, 0x23} - }, - {CCD_HP2400, 1, - {0x02, 0x04, 0x00, 0x00}, - {0x02, 0x04, 0x00, 0x00}, - {0xbf, 0x08, 0x30, 0x2a, 0x00, 0x00, 0xc0, 0x42}, - {0x0b, 0x0f, 0x13, 0x17, 0x03, 0x07, 0x63, 0x00, 0xc1, 0x00, 0x0e, 0x00, 0x00}, - {0x0b, 0x0f, 0x13, 0x17, 0x03, 0x07, 0x63} - }, - {CIS_XP200, 1, - {6, 7, 10, 4}, - {6, 7, 10, 4}, - {0x24, 0x04, 0x00, 0x2a, 0x0a, 0x0a, 0, 0x11}, - {8, 2, 0, 0, 0, 0, 0x1a, 0x51, 0, 0, 0, 0, 0}, - {8, 2, 0, 0, 0, 0, 0x1a} - }, - {CCD_HP2300, 1, - {0x01, 0x03, 0x04, 0x06}, - {0x16, 0x00, 0x01, 0x03}, - {0xb7, 0x0a, 0x20, 0x2a, 0x6a, 0x8a, 0x00, 0x05}, - {0x0f, 0x13, 0x17, 0x03, 0x07, 0x0b, 0x83, 0x00, 0xc1, 0x06, 0x0b, 0x10, 0x16}, - {0x0f, 0x13, 0x17, 0x03, 0x07, 0x0b, 0x83} - }, - {CCD_5345, 1, - {0x0d, 0x0f, 0x11, 0x13}, - {0x00, 0x05, 0x06, 0x08}, /* manual clock 1/2 settings or half ccd */ - {0x0b, 0x0a, 0x30, 0x2a, 0x00, 0x00, 0x00, 0x03, }, - {0x03, 0x07, 0x0b, 0x0f, 0x13, 0x17, 0x23, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00}, - {0x0f, 0x13, 0x17, 0x03, 0x07, 0x0b, 0x83} /* half ccd settings */ - }, -};