Merge branch 'genesys-gl646-simplify-sensor' into 'master'

genesys: Simplify sensor setup on GL646

See merge request sane-project/backends!139
merge-requests/138/merge
Povilas Kanapickas 2019-08-31 14:55:57 +00:00
commit 3e2b6cead0
2 zmienionych plików z 125 dodań i 343 usunięć

Wyświetl plik

@ -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 */

Wyświetl plik

@ -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<unsigned> 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> 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 */
},
};