hp3670/hp2400 like scanners progress

- managed to get AFE working for HP2400/HP3670
- cleaned up gpio usage
- add custom gamma for GL841 models
- turned default lineart to 'dynamyc'
merge-requests/1/head
Stphane Voltz 2010-02-08 06:19:17 +01:00
rodzic bec7607e9d
commit 43512a7a0a
6 zmienionych plików z 125 dodań i 132 usunięć

Wyświetl plik

@ -470,6 +470,48 @@ sanei_genesys_init_fe (Genesys_Device * dev)
DBG (DBG_proc, "sanei_genesys_init_fe: end\n");
}
/** read data for analog frontend
* @param dev device owning the AFE
* @param addr register address to read
* @param data placeholder for the result
* @return SANE_STATUS_GOOD is OK, else the error code
*/
SANE_Status
sanei_genesys_fe_read_data (Genesys_Device * dev, uint8_t addr,
uint16_t *data)
{
SANE_Status status;
uint8_t value;
Genesys_Register_Set reg[1];
DBG (DBG_proc, "sanei_genesys_fe_read_data: start\n");
reg[0].address = 0x50;
reg[0].value = addr;
/* set up read address */
status = dev->model->cmd_set->bulk_write_register (dev, reg, 1);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error,
"sanei_genesys_fe_read_data: failed while bulk writing registers: %s\n",
sane_strstatus (status));
return status;
}
/* read data */
RIE (sanei_genesys_read_register (dev, 0x46, &value));
*data=256*value;
RIE (sanei_genesys_read_register (dev, 0x47, &value));
*data+=value;
DBG (DBG_io, "sanei_genesys_fe_read_data (0x%02x, 0x%04x)\n", addr, *data);
DBG (DBG_proc, "sanei_genesys_fe_read_data: completed\n");
return status;
}
/* Write data for analog frontend */
SANE_Status
sanei_genesys_fe_write_data (Genesys_Device * dev, uint8_t addr,
@ -491,7 +533,7 @@ sanei_genesys_fe_write_data (Genesys_Device * dev, uint8_t addr,
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error,
"sanei_genesys_fe_write_data: Failed while bulk writing registers: %s\n",
"sanei_genesys_fe_write_data: failed while bulk writing registers: %s\n",
sane_strstatus (status));
return status;
}
@ -5287,7 +5329,7 @@ calc_parameters (Genesys_Scanner * s)
/* dynamic lineart */
s->dev->settings.dynamic_lineart =
s->val[OPT_DYNAMIC_LINEART].w == SANE_TRUE;
s->val[OPT_DISABLE_DYNAMIC_LINEART].w == SANE_FALSE;
/* threshold curve for dynamic ratserization */
if(s->dev->settings.dynamic_lineart==SANE_TRUE)
@ -5341,8 +5383,8 @@ init_gamma_vector_option (Genesys_Scanner * scanner, int option)
}
}
else
{ /* GL841 case */
scanner->opt[option].size = 256 * sizeof (SANE_Word);
{ /* GL841 case 16 bits gamma table */
scanner->opt[option].size = 65536 * sizeof (SANE_Word);
scanner->opt[option].constraint.range = &u16_range;
}
/* default value is NULL */
@ -5577,20 +5619,20 @@ init_options (Genesys_Scanner * s)
s->val[OPT_THRESHOLD_CURVE].w = 50;
/* dynamic linart */
s->opt[OPT_DYNAMIC_LINEART].name = "dynamic-lineart";
s->opt[OPT_DYNAMIC_LINEART].title = SANE_I18N ("Dynamic lineart");
s->opt[OPT_DYNAMIC_LINEART].desc =
s->opt[OPT_DISABLE_DYNAMIC_LINEART].name = "disable-dynamic-lineart";
s->opt[OPT_DISABLE_DYNAMIC_LINEART].title = SANE_I18N ("Disable dynamic lineart");
s->opt[OPT_DISABLE_DYNAMIC_LINEART].desc =
SANE_I18N
("Use a software adaptative algorithm to generate lineart instead of"
("Disabel use of a software adaptative algorithm to generate lineart instead of"
" relying on hardware lineart");
s->opt[OPT_DYNAMIC_LINEART].type = SANE_TYPE_BOOL;
s->opt[OPT_DYNAMIC_LINEART].unit = SANE_UNIT_NONE;
s->opt[OPT_DYNAMIC_LINEART].constraint_type = SANE_CONSTRAINT_NONE;
s->val[OPT_DYNAMIC_LINEART].w = SANE_FALSE;
s->opt[OPT_DISABLE_DYNAMIC_LINEART].type = SANE_TYPE_BOOL;
s->opt[OPT_DISABLE_DYNAMIC_LINEART].unit = SANE_UNIT_NONE;
s->opt[OPT_DISABLE_DYNAMIC_LINEART].constraint_type = SANE_CONSTRAINT_NONE;
s->val[OPT_DISABLE_DYNAMIC_LINEART].w = SANE_FALSE;
/* not working for GL646 scanners yet */
if (s->dev->model->asic_type == GENESYS_GL646)
{
s->opt[OPT_DYNAMIC_LINEART].cap |= SANE_CAP_INACTIVE;
s->opt[OPT_DISABLE_DYNAMIC_LINEART].cap |= SANE_CAP_INACTIVE;
}
/* disable_interpolation */
@ -6503,9 +6545,11 @@ get_option_value (Genesys_Scanner * s, int option, void *val)
case OPT_PREVIEW:
case OPT_THRESHOLD:
case OPT_THRESHOLD_CURVE:
case OPT_DYNAMIC_LINEART:
case OPT_DISABLE_DYNAMIC_LINEART:
case OPT_DISABLE_INTERPOLATION:
case OPT_LAMP_OFF_TIME:
*(SANE_Word *) val = s->val[option].w;
break;
case OPT_CUSTOM_GAMMA:
*(SANE_Word *) val = s->val[option].w;
break;
@ -6614,7 +6658,7 @@ set_option_value (Genesys_Scanner * s, int option, void *val,
case OPT_BIT_DEPTH:
case OPT_THRESHOLD:
case OPT_THRESHOLD_CURVE:
case OPT_DYNAMIC_LINEART:
case OPT_DISABLE_DYNAMIC_LINEART:
case OPT_DISABLE_INTERPOLATION:
case OPT_PREVIEW:
s->val[option].w = *(SANE_Word *) val;
@ -6640,13 +6684,13 @@ set_option_value (Genesys_Scanner * s, int option, void *val,
ENABLE (OPT_THRESHOLD_CURVE);
DISABLE (OPT_BIT_DEPTH);
ENABLE (OPT_COLOR_FILTER);
ENABLE (OPT_DYNAMIC_LINEART);
ENABLE (OPT_DISABLE_DYNAMIC_LINEART);
}
else
{
DISABLE (OPT_THRESHOLD);
DISABLE (OPT_THRESHOLD_CURVE);
DISABLE (OPT_DYNAMIC_LINEART);
DISABLE (OPT_DISABLE_DYNAMIC_LINEART);
if (strcmp (s->val[option].s, SANE_VALUE_SCAN_MODE_GRAY) == 0)
{
ENABLE (OPT_COLOR_FILTER);

Wyświetl plik

@ -93,7 +93,7 @@ enum Genesys_Option
OPT_LAMP_OFF_TIME,
OPT_THRESHOLD,
OPT_THRESHOLD_CURVE,
OPT_DYNAMIC_LINEART,
OPT_DISABLE_DYNAMIC_LINEART,
OPT_DISABLE_INTERPOLATION,
OPT_COLOR_FILTER,

Wyświetl plik

@ -122,7 +122,8 @@ binarize_line(Genesys_Device * dev, uint8_t *src, uint8_t *dst, int width)
min = src[x];
}
}
/* safeguard againt dark of white areas */
/* safeguard against dark or white areas */
if(min>80)
min=0;
if(max<80)

Wyświetl plik

@ -84,14 +84,16 @@ static Genesys_Frontend Wolfson[] = {
, {0x00, 0x00, 0x00}
}
, /* 3: MD6228/MD6471 */
{DAC_WOLFSON_HP2400,{0x00, 0x03, 0x05, 0x02}
{DAC_WOLFSON_HP2400,
{0x00, 0x03, 0x04, 0x02}
, {0x00, 0x00, 0x00}
, {0xc0, 0xc0, 0xc0}
, {0x07, 0x07, 0x07}
, {0x00, 0x00, 0x00}
}
, /* 4: HP2400c */
{DAC_WOLFSON_HP2300,{0x00, 0x03, 0x04, 0x02}
{DAC_WOLFSON_HP2300,
{0x00, 0x03, 0x04, 0x02}
, {0x00, 0x00, 0x00}
, {0xbe, 0xbe, 0xbe}
, {0x04, 0x04, 0x04}
@ -123,8 +125,8 @@ static Genesys_Frontend Wolfson[] = {
/* reg0 reg1 reg2 reg3 */
{0x00, 0x03, 0x04, 0x02}
, {0x00, 0x00, 0x00} /* sign */
, {0x20, 0x20, 0x20} /* offset */
, {0x20, 0x20, 0x20} /* gain */
, {0xb0, 0xb0, 0xb0} /* offset */
, {0x07, 0x07, 0x07} /* gain */
, {0x00, 0x00, 0x00}
}
,
@ -211,7 +213,7 @@ static Genesys_Sensor Sensor[] = {
{0x0b, 0x0f, 0x13, 0x17, 0x03, 0x07, 0x63, 0x00, 0xc1, 0x00, 0x0e, 0x00,
0x00}
,
1.0, 1.0, 1.0,
2.1, 2.1, 2.1,
NULL, NULL, NULL}
,
/* 5: HP2300c */
@ -274,7 +276,7 @@ static Genesys_Sensor Sensor[] = {
{0x00, 0x0a, 0x0b, 0x0d} ,
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x07, 0x20, 0x2a, 0x00, 0x00, 0xc0, 0x43} ,
{0x0f, 0x13, 0x17, 0x03, 0x07, 0x0b, 0x83, 0x00, 0x15, 0x05, 0x0a, 0x0f, 0x00},
2.38, 2.35, 2.34,
2.10, 2.10, 2.10,
NULL, NULL, NULL}
,
/* Syscan DP 665 */
@ -464,9 +466,9 @@ static Genesys_Gpo Gpo[] = {
},
/* HP3670 */
{GPO_HP3670,
{0x00, 0x00} /* XXX STEF XXX 0x20 */
{0x00, 0x00}
,
{0x70, 0x00}
{0x00, 0x00}
}
,
/* 8: XP300 */
@ -808,6 +810,7 @@ static Genesys_Model canon_lide_50_model = {
GENESYS_FLAG_SKIP_WARMUP |
GENESYS_FLAG_OFFSET_CALIBRATION |
GENESYS_FLAG_DARK_WHITE_CALIBRATION |
GENESYS_FLAG_CUSTOM_GAMMA |
GENESYS_FLAG_HALF_CCD_MODE,
GENESYS_HAS_SCAN_SW |
GENESYS_HAS_FILE_SW |
@ -863,6 +866,7 @@ static Genesys_Model canon_lide_60_model = {
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_WHITE_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_HALF_CCD_MODE,
GENESYS_HAS_NO_BUTTONS, /* no buttons supported */
@ -957,7 +961,7 @@ Genesys_Model hp2400c_model = {
SANE_FIX (0.0), /* Amount of feeding needed to eject document
after finishing scanning in mm */
0, 0, 0, /* RGB CCD Line-distance correction in pixel */
32, 16, 0, /* RGB CCD Line-distance correction in pixel */
COLOR_ORDER_BGR, /* Order of the CCD/CIS colors */
@ -1048,7 +1052,7 @@ static Genesys_Model hp3670c_model = {
SANE_FIX (0.0), /* Start of scan area in mm (x) */
SANE_FIX (7.5), /* Start of scan area in mm (y) */
SANE_FIX (215.9), /* Size of scan area in mm (x) */
SANE_FIX (297.2), /* Size of scan area in mm (y) */
SANE_FIX (310.0), /* Size of scan area in mm (y) */
SANE_FIX (0.0), /* Start of white strip in mm (y) */
SANE_FIX (1.0), /* Start of black mark in mm (x) */
@ -1065,7 +1069,7 @@ static Genesys_Model hp3670c_model = {
SANE_FIX (0.0), /* Amount of feeding needed to eject document
after finishing scanning in mm */
0, 8, 16, /* RGB CCD Line-distance correction in pixel */
0, 24, 48, /* RGB CCD Line-distance correction in pixel */
COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */
@ -1077,11 +1081,9 @@ static Genesys_Model hp3670c_model = {
MOTOR_HP3670,
GENESYS_FLAG_LAZY_INIT
| GENESYS_FLAG_14BIT_GAMMA
| GENESYS_FLAG_NO_CALIBRATION /* until fully supported */
/* | GENESYS_FLAG_SEARCH_START
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_OFFSET_CALIBRATION until fully supported */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_NO_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_NO_BUTTONS,
20,
@ -1181,7 +1183,9 @@ static Genesys_Model plustek_st24_model = {
GENESYS_FLAG_UNTESTED
| GENESYS_FLAG_14BIT_GAMMA
| GENESYS_FLAG_LAZY_INIT
| GENESYS_FLAG_SEARCH_START | GENESYS_FLAG_OFFSET_CALIBRATION,
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_SEARCH_START
| GENESYS_FLAG_OFFSET_CALIBRATION,
GENESYS_HAS_NO_BUTTONS, /* no buttons supported */
20,
200
@ -1288,7 +1292,8 @@ static Genesys_Model visioneer_xp300_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_CALIBRATION,
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
400
@ -1339,7 +1344,8 @@ static Genesys_Model syscan_docketport_665_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_CALIBRATION,
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
400
@ -1390,6 +1396,7 @@ static Genesys_Model visioneer_roadwarrior_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_DARK_CALIBRATION,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
@ -1441,6 +1448,7 @@ static Genesys_Model syscan_docketport_465_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_NO_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_UNTESTED,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW,
300,
@ -1492,6 +1500,7 @@ static Genesys_Model visioneer_xp100_r3_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_DARK_CALIBRATION,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
@ -1543,6 +1552,7 @@ static Genesys_Model pentax_dsmobile_600_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_DARK_CALIBRATION,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
@ -1594,6 +1604,7 @@ static Genesys_Model syscan_docketport_467_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_DARK_CALIBRATION,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
@ -1646,6 +1657,7 @@ static Genesys_Model syscan_docketport_685_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_DARK_CALIBRATION,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
@ -1698,6 +1710,7 @@ static Genesys_Model syscan_docketport_485_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_DARK_CALIBRATION,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
@ -1751,6 +1764,7 @@ static Genesys_Model dct_docketport_487_model = {
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_UNTESTED,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,
@ -1857,6 +1871,7 @@ static Genesys_Model xerox_travelscanner_model = {
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_DARK_CALIBRATION,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
100,

Wyświetl plik

@ -735,12 +735,6 @@ gl646_setup_registers (Genesys_Device * dev,
return SANE_STATUS_INVAL;
}
/* vfinal=(exposure/(1200/dpi))/step_type */
/* DBG (DBG_info, "XXX STEF XXX vfinal=%d, vend1=%d\n",
(sensor->exposure * sensor->xdpi) / ((1 << motor->steptype) *
dev->sensor.optical_res),
motor->vend1); */
/* half_ccd if manual clock programming or dpi is half dpiset */
half_ccd = sensor->half_ccd;
@ -748,9 +742,6 @@ gl646_setup_registers (Genesys_Device * dev,
for (i = 0; i < 6; i++)
{
r = sanei_genesys_get_address (regs, 0x10 + i);
/* XXX STEF XXX
r->value = dev->sensor.regs_0x10_0x1d[i];
*/
r->value = sensor->regs_0x10_0x15[i];
}
@ -1121,13 +1112,6 @@ gl646_setup_registers (Genesys_Device * dev,
(regs[reg_0x6c].value & REG6C_TGTIME) | ((z1 >> 13) & 0x38) | ((z2 >> 16)
& 0x07);
/* the 3670 seems to behave differently regarding GPIO */
/* TODO to be added in the sensor setting struct ?? */
if (dev->model->ccd_type == CCD_HP3670)
{
dev->reg[reg_0x66].value = 0;
}
RIE (write_control (dev, xresolution));
/* setup analog frontend */
@ -1500,7 +1484,7 @@ gl646_init_regs (Genesys_Device * dev)
dev->reg[reg_0x19].value = 0x2a;
dev->reg[reg_0x1e].value = 0x80;
dev->reg[reg_0x1f].value = 0x10;
dev->reg[reg_0x20].value = 0x50;
dev->reg[reg_0x20].value = 0x20;
break;
case CIS_XP200:
dev->reg[reg_0x1e].value = 0x10;
@ -1705,6 +1689,7 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
{
case AFE_INIT:
sanei_genesys_init_fe (dev);
RIE(sanei_genesys_write_register (dev, 0x50, 0x00));
status = sanei_genesys_fe_write_data (dev, 0x04, 0x80);
if (status != SANE_STATUS_GOOD)
{
@ -1712,6 +1697,7 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
sane_strstatus (status));
return status;
}
usleep (200000UL);
status = sanei_genesys_fe_write_data (dev, 0x01, dev->frontend.reg[1]);
if (status != SANE_STATUS_GOOD)
{
@ -1727,6 +1713,14 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
sane_strstatus (status));
return status;
}
status = gl646_gpio_output_enable (dev->dn, 0x07);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error,
"gl646_set_fe: failed to enable GPIO: %s\n",
sane_strstatus (status));
return status;
}
break;
case AFE_POWER_SAVE:
/*
@ -1736,7 +1730,14 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
DBG (DBG_error, "gl646_wm_hp3670: writing reg1 failed: %s\n",
sane_strstatus (status));
return status;
}*/
}
status = sanei_genesys_fe_write_data (dev, 0x06, 0x0f);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "gl646_wm_hp3670: writing reg6 failed: %s\n",
sane_strstatus (status));
return status;
} */
return status;
break;
default: /* AFE_SET */
@ -1749,16 +1750,16 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
sane_strstatus (status));
return status;
}
/* offset 30 ~ */
status = sanei_genesys_fe_write_data (dev, 0x23, dev->frontend.offset[0]);
/* offset 0x23 */
status = sanei_genesys_fe_write_data (dev, 0x28, dev->frontend.offset[0]);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "gl646_wm_hp3670: writing offset failed: %s\n",
sane_strstatus (status));
return status;
}
/* gain */
status = sanei_genesys_fe_write_data (dev, 0x28, dev->frontend.gain[0]);
/* gain 0x28 */
status = sanei_genesys_fe_write_data (dev, 0x23, dev->frontend.gain[0]);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "gl646_wm_hp3670: writing gain failed: %s\n",
@ -2043,7 +2044,7 @@ gl646_set_powersaving (Genesys_Device * dev, int delay /* in minutes */ )
SANE_Status status = SANE_STATUS_GOOD;
Genesys_Register_Set local_reg[6];
int rate, exposure_time, tgtime, time;
return SANE_STATUS_GOOD;
DBG (DBG_proc, "gl646_set_powersaving (delay = %d)\n", delay);
local_reg[0].address = 0x01;
@ -3170,7 +3171,7 @@ setup_for_scan (Genesys_Device * dev, Genesys_Settings settings,
/* compute distance to move */
move = 0;
/* XXX STEF XXX mD5345 -> optical_ydpi, other base_ydpi => half/full step ? */
/* XXX STEF XXX MD5345 -> optical_ydpi, other base_ydpi => half/full step ? */
if (split == SANE_FALSE)
{
if (dev->model->is_sheetfed == SANE_FALSE)
@ -4477,32 +4478,6 @@ gl646_init (Genesys_Device * dev)
sanei_genesys_write_register (dev, 0x66, 0x00);
sanei_genesys_write_register (dev, 0x66, 0x10);
}
if (dev->model->ccd_type == CCD_HP3670+12345) /* XXX STEF XXX */
{
sanei_genesys_write_register (dev, 0x68, dev->gpo.enable[0]);
sanei_genesys_write_register (dev, 0x69, dev->gpo.enable[1]);
/* enable GPIO */
status = gl646_gpio_output_enable (dev->dn, 0x07);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "gl646_init: GPO enable failed ... %s\n",
sane_strstatus (status));
}
val = 0;
/* writes 0 to GPIO */
status = gl646_gpio_write (dev->dn, 0);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "gl646_init: GPO write failed ... %s\n",
sane_strstatus (status));
}
sanei_genesys_write_register (dev, 0x66, 0x20);
sanei_genesys_write_register (dev, 0x66, 0x00);
sanei_genesys_write_register (dev, 0x66, 0x20);
}
/* MD6471/G2410 and XP200 read/write data from an undocumented memory area which
* is after the second slope table */
@ -4682,7 +4657,6 @@ simple_scan (Genesys_Device * dev, Genesys_Settings settings, SANE_Bool move,
/* no shading correction and not watch dog for simple scan */
dev->reg[reg_0x01].value &= ~(REG01_DVDSET | REG01_DOGENB);
dev->reg[reg_0x01].value |= REG01_DOGENB; /* XXX STEF XXX */
if (shading == SANE_TRUE)
{
dev->reg[reg_0x01].value |= REG01_DVDSET;
@ -4690,7 +4664,6 @@ simple_scan (Genesys_Device * dev, Genesys_Settings settings, SANE_Bool move,
/* one table movement for simple scan */
dev->reg[reg_0x02].value &= ~REG02_FASTFED;
dev->reg[reg_0x02].value |= REG02_FASTFED; /* XXX STEF XXX */
if (move == SANE_FALSE)
{
@ -4838,24 +4811,6 @@ gl646_update_hardware_sensors (Genesys_Scanner * session)
uint8_t value;
SANE_Status status;
if (dev->model->gpo_type == GPO_HP3670)
{
status = gl646_gpio_output_enable (dev->dn, 0x03);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "gl646_init: GPO enable failed ... %s\n",
sane_strstatus (status));
}
status = gl646_gpio_write (dev->dn, 0x03);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error,
"gl646_update_hardware_sensors: failed to write GPIO %s\n",
sane_strstatus (status));
return status;
}
}
/* do what is needed to get a new set of events, but try to not loose
any of them.
*/
@ -4869,18 +4824,6 @@ gl646_update_hardware_sensors (Genesys_Scanner * session)
}
DBG (DBG_io, "gl646_update_hardware_sensors: GPIO=0x%02x\n", value);
if (dev->model->gpo_type == GPO_HP3670)
{
status = gl646_gpio_write (dev->dn, 0x01);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error,
"gl646_update_hardware_sensors: failed to write GPIO %s\n",
sane_strstatus (status));
return status;
}
}
/* scan button */
if ((dev->model->buttons & GENESYS_HAS_SCAN_SW)
&& session->val[OPT_SCAN_SW].b == session->last_val[OPT_SCAN_SW].b)
@ -4983,18 +4926,7 @@ gl646_update_hardware_sensors (Genesys_Scanner * session)
return SANE_STATUS_UNSUPPORTED;
}
}
if (dev->model->gpo_type == GPO_HP3670)
{
status = gl646_gpio_output_enable (dev->dn, 0x07);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "gl646_init: GPO enable failed ... %s\n",
sane_strstatus (status));
}
}
return status;
}

Wyświetl plik

@ -520,7 +520,8 @@ static Motor_Master motor_master[] = {
{MOTOR_HP3670, 150, SANE_FALSE, 150, HALF_STEP, SANE_FALSE, SANE_TRUE , 1, 73, 3429, 305, 192, 3399, 341, 0.3, 0.4, 192},
{MOTOR_HP3670, 300, SANE_FALSE, 300, HALF_STEP, SANE_FALSE, SANE_TRUE , 1, 11, 1055, 563, 192, 3399, 341, 0.3, 0.4, 192},
{MOTOR_HP3670, 600, SANE_FALSE, 600, FULL_STEP, SANE_FALSE, SANE_TRUE , 0, 3, 10687, 5126, 192, 3399, 341, 0.3, 0.4, 192},
{MOTOR_HP3670,1200, SANE_FALSE,1200, HALF_STEP, SANE_FALSE, SANE_TRUE , 0, 3, 12751,12751, 192, 3399, 341, 0.3, 0.4, 192},
/* {MOTOR_HP3670,1200, SANE_FALSE,1200, HALF_STEP, SANE_FALSE, SANE_TRUE , 0, 3, 12751,12751, 192, 3399, 341, 0.3, 0.4, 192}, */
{MOTOR_HP3670,1200, SANE_TRUE , 1200, HALF_STEP, SANE_FALSE, SANE_FALSE, 0, 2, 12750, 12750, 2, 5400, 5400, 0.3, 0.4, 8},
/* HP2400/G2410 motor settings base motor dpi = 600 */
{MOTOR_HP2400, 50, SANE_TRUE, 50, HALF_STEP, SANE_FALSE, SANE_FALSE, 63, 4, 1382, 800, 2, 5400, 5400, 0.25, 0.5, 16},