kopia lustrzana https://gitlab.com/sane-project/backends
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
rodzic
bec7607e9d
commit
43512a7a0a
|
@ -470,6 +470,48 @@ sanei_genesys_init_fe (Genesys_Device * dev)
|
||||||
DBG (DBG_proc, "sanei_genesys_init_fe: end\n");
|
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 */
|
/* Write data for analog frontend */
|
||||||
SANE_Status
|
SANE_Status
|
||||||
sanei_genesys_fe_write_data (Genesys_Device * dev, uint8_t addr,
|
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)
|
if (status != SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
DBG (DBG_error,
|
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));
|
sane_strstatus (status));
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -5287,7 +5329,7 @@ calc_parameters (Genesys_Scanner * s)
|
||||||
|
|
||||||
/* dynamic lineart */
|
/* dynamic lineart */
|
||||||
s->dev->settings.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 */
|
/* threshold curve for dynamic ratserization */
|
||||||
if(s->dev->settings.dynamic_lineart==SANE_TRUE)
|
if(s->dev->settings.dynamic_lineart==SANE_TRUE)
|
||||||
|
@ -5341,8 +5383,8 @@ init_gamma_vector_option (Genesys_Scanner * scanner, int option)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ /* GL841 case */
|
{ /* GL841 case 16 bits gamma table */
|
||||||
scanner->opt[option].size = 256 * sizeof (SANE_Word);
|
scanner->opt[option].size = 65536 * sizeof (SANE_Word);
|
||||||
scanner->opt[option].constraint.range = &u16_range;
|
scanner->opt[option].constraint.range = &u16_range;
|
||||||
}
|
}
|
||||||
/* default value is NULL */
|
/* default value is NULL */
|
||||||
|
@ -5577,20 +5619,20 @@ init_options (Genesys_Scanner * s)
|
||||||
s->val[OPT_THRESHOLD_CURVE].w = 50;
|
s->val[OPT_THRESHOLD_CURVE].w = 50;
|
||||||
|
|
||||||
/* dynamic linart */
|
/* dynamic linart */
|
||||||
s->opt[OPT_DYNAMIC_LINEART].name = "dynamic-lineart";
|
s->opt[OPT_DISABLE_DYNAMIC_LINEART].name = "disable-dynamic-lineart";
|
||||||
s->opt[OPT_DYNAMIC_LINEART].title = SANE_I18N ("Dynamic lineart");
|
s->opt[OPT_DISABLE_DYNAMIC_LINEART].title = SANE_I18N ("Disable dynamic lineart");
|
||||||
s->opt[OPT_DYNAMIC_LINEART].desc =
|
s->opt[OPT_DISABLE_DYNAMIC_LINEART].desc =
|
||||||
SANE_I18N
|
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");
|
" relying on hardware lineart");
|
||||||
s->opt[OPT_DYNAMIC_LINEART].type = SANE_TYPE_BOOL;
|
s->opt[OPT_DISABLE_DYNAMIC_LINEART].type = SANE_TYPE_BOOL;
|
||||||
s->opt[OPT_DYNAMIC_LINEART].unit = SANE_UNIT_NONE;
|
s->opt[OPT_DISABLE_DYNAMIC_LINEART].unit = SANE_UNIT_NONE;
|
||||||
s->opt[OPT_DYNAMIC_LINEART].constraint_type = SANE_CONSTRAINT_NONE;
|
s->opt[OPT_DISABLE_DYNAMIC_LINEART].constraint_type = SANE_CONSTRAINT_NONE;
|
||||||
s->val[OPT_DYNAMIC_LINEART].w = SANE_FALSE;
|
s->val[OPT_DISABLE_DYNAMIC_LINEART].w = SANE_FALSE;
|
||||||
/* not working for GL646 scanners yet */
|
/* not working for GL646 scanners yet */
|
||||||
if (s->dev->model->asic_type == GENESYS_GL646)
|
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 */
|
/* disable_interpolation */
|
||||||
|
@ -6503,9 +6545,11 @@ get_option_value (Genesys_Scanner * s, int option, void *val)
|
||||||
case OPT_PREVIEW:
|
case OPT_PREVIEW:
|
||||||
case OPT_THRESHOLD:
|
case OPT_THRESHOLD:
|
||||||
case OPT_THRESHOLD_CURVE:
|
case OPT_THRESHOLD_CURVE:
|
||||||
case OPT_DYNAMIC_LINEART:
|
case OPT_DISABLE_DYNAMIC_LINEART:
|
||||||
case OPT_DISABLE_INTERPOLATION:
|
case OPT_DISABLE_INTERPOLATION:
|
||||||
case OPT_LAMP_OFF_TIME:
|
case OPT_LAMP_OFF_TIME:
|
||||||
|
*(SANE_Word *) val = s->val[option].w;
|
||||||
|
break;
|
||||||
case OPT_CUSTOM_GAMMA:
|
case OPT_CUSTOM_GAMMA:
|
||||||
*(SANE_Word *) val = s->val[option].w;
|
*(SANE_Word *) val = s->val[option].w;
|
||||||
break;
|
break;
|
||||||
|
@ -6614,7 +6658,7 @@ set_option_value (Genesys_Scanner * s, int option, void *val,
|
||||||
case OPT_BIT_DEPTH:
|
case OPT_BIT_DEPTH:
|
||||||
case OPT_THRESHOLD:
|
case OPT_THRESHOLD:
|
||||||
case OPT_THRESHOLD_CURVE:
|
case OPT_THRESHOLD_CURVE:
|
||||||
case OPT_DYNAMIC_LINEART:
|
case OPT_DISABLE_DYNAMIC_LINEART:
|
||||||
case OPT_DISABLE_INTERPOLATION:
|
case OPT_DISABLE_INTERPOLATION:
|
||||||
case OPT_PREVIEW:
|
case OPT_PREVIEW:
|
||||||
s->val[option].w = *(SANE_Word *) val;
|
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);
|
ENABLE (OPT_THRESHOLD_CURVE);
|
||||||
DISABLE (OPT_BIT_DEPTH);
|
DISABLE (OPT_BIT_DEPTH);
|
||||||
ENABLE (OPT_COLOR_FILTER);
|
ENABLE (OPT_COLOR_FILTER);
|
||||||
ENABLE (OPT_DYNAMIC_LINEART);
|
ENABLE (OPT_DISABLE_DYNAMIC_LINEART);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DISABLE (OPT_THRESHOLD);
|
DISABLE (OPT_THRESHOLD);
|
||||||
DISABLE (OPT_THRESHOLD_CURVE);
|
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)
|
if (strcmp (s->val[option].s, SANE_VALUE_SCAN_MODE_GRAY) == 0)
|
||||||
{
|
{
|
||||||
ENABLE (OPT_COLOR_FILTER);
|
ENABLE (OPT_COLOR_FILTER);
|
||||||
|
|
|
@ -93,7 +93,7 @@ enum Genesys_Option
|
||||||
OPT_LAMP_OFF_TIME,
|
OPT_LAMP_OFF_TIME,
|
||||||
OPT_THRESHOLD,
|
OPT_THRESHOLD,
|
||||||
OPT_THRESHOLD_CURVE,
|
OPT_THRESHOLD_CURVE,
|
||||||
OPT_DYNAMIC_LINEART,
|
OPT_DISABLE_DYNAMIC_LINEART,
|
||||||
OPT_DISABLE_INTERPOLATION,
|
OPT_DISABLE_INTERPOLATION,
|
||||||
OPT_COLOR_FILTER,
|
OPT_COLOR_FILTER,
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,8 @@ binarize_line(Genesys_Device * dev, uint8_t *src, uint8_t *dst, int width)
|
||||||
min = src[x];
|
min = src[x];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* safeguard againt dark of white areas */
|
|
||||||
|
/* safeguard against dark or white areas */
|
||||||
if(min>80)
|
if(min>80)
|
||||||
min=0;
|
min=0;
|
||||||
if(max<80)
|
if(max<80)
|
||||||
|
|
|
@ -84,14 +84,16 @@ static Genesys_Frontend Wolfson[] = {
|
||||||
, {0x00, 0x00, 0x00}
|
, {0x00, 0x00, 0x00}
|
||||||
}
|
}
|
||||||
, /* 3: MD6228/MD6471 */
|
, /* 3: MD6228/MD6471 */
|
||||||
{DAC_WOLFSON_HP2400,{0x00, 0x03, 0x05, 0x02}
|
{DAC_WOLFSON_HP2400,
|
||||||
|
{0x00, 0x03, 0x04, 0x02}
|
||||||
, {0x00, 0x00, 0x00}
|
, {0x00, 0x00, 0x00}
|
||||||
, {0xc0, 0xc0, 0xc0}
|
, {0xc0, 0xc0, 0xc0}
|
||||||
, {0x07, 0x07, 0x07}
|
, {0x07, 0x07, 0x07}
|
||||||
, {0x00, 0x00, 0x00}
|
, {0x00, 0x00, 0x00}
|
||||||
}
|
}
|
||||||
, /* 4: HP2400c */
|
, /* 4: HP2400c */
|
||||||
{DAC_WOLFSON_HP2300,{0x00, 0x03, 0x04, 0x02}
|
{DAC_WOLFSON_HP2300,
|
||||||
|
{0x00, 0x03, 0x04, 0x02}
|
||||||
, {0x00, 0x00, 0x00}
|
, {0x00, 0x00, 0x00}
|
||||||
, {0xbe, 0xbe, 0xbe}
|
, {0xbe, 0xbe, 0xbe}
|
||||||
, {0x04, 0x04, 0x04}
|
, {0x04, 0x04, 0x04}
|
||||||
|
@ -123,8 +125,8 @@ static Genesys_Frontend Wolfson[] = {
|
||||||
/* reg0 reg1 reg2 reg3 */
|
/* reg0 reg1 reg2 reg3 */
|
||||||
{0x00, 0x03, 0x04, 0x02}
|
{0x00, 0x03, 0x04, 0x02}
|
||||||
, {0x00, 0x00, 0x00} /* sign */
|
, {0x00, 0x00, 0x00} /* sign */
|
||||||
, {0x20, 0x20, 0x20} /* offset */
|
, {0xb0, 0xb0, 0xb0} /* offset */
|
||||||
, {0x20, 0x20, 0x20} /* gain */
|
, {0x07, 0x07, 0x07} /* gain */
|
||||||
, {0x00, 0x00, 0x00}
|
, {0x00, 0x00, 0x00}
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
|
@ -211,7 +213,7 @@ static Genesys_Sensor Sensor[] = {
|
||||||
{0x0b, 0x0f, 0x13, 0x17, 0x03, 0x07, 0x63, 0x00, 0xc1, 0x00, 0x0e, 0x00,
|
{0x0b, 0x0f, 0x13, 0x17, 0x03, 0x07, 0x63, 0x00, 0xc1, 0x00, 0x0e, 0x00,
|
||||||
0x00}
|
0x00}
|
||||||
,
|
,
|
||||||
1.0, 1.0, 1.0,
|
2.1, 2.1, 2.1,
|
||||||
NULL, NULL, NULL}
|
NULL, NULL, NULL}
|
||||||
,
|
,
|
||||||
/* 5: HP2300c */
|
/* 5: HP2300c */
|
||||||
|
@ -274,7 +276,7 @@ static Genesys_Sensor Sensor[] = {
|
||||||
{0x00, 0x0a, 0x0b, 0x0d} ,
|
{0x00, 0x0a, 0x0b, 0x0d} ,
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x07, 0x20, 0x2a, 0x00, 0x00, 0xc0, 0x43} ,
|
{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},
|
{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}
|
NULL, NULL, NULL}
|
||||||
,
|
,
|
||||||
/* Syscan DP 665 */
|
/* Syscan DP 665 */
|
||||||
|
@ -464,9 +466,9 @@ static Genesys_Gpo Gpo[] = {
|
||||||
},
|
},
|
||||||
/* HP3670 */
|
/* HP3670 */
|
||||||
{GPO_HP3670,
|
{GPO_HP3670,
|
||||||
{0x00, 0x00} /* XXX STEF XXX 0x20 */
|
{0x00, 0x00}
|
||||||
,
|
,
|
||||||
{0x70, 0x00}
|
{0x00, 0x00}
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
/* 8: XP300 */
|
/* 8: XP300 */
|
||||||
|
@ -808,6 +810,7 @@ static Genesys_Model canon_lide_50_model = {
|
||||||
GENESYS_FLAG_SKIP_WARMUP |
|
GENESYS_FLAG_SKIP_WARMUP |
|
||||||
GENESYS_FLAG_OFFSET_CALIBRATION |
|
GENESYS_FLAG_OFFSET_CALIBRATION |
|
||||||
GENESYS_FLAG_DARK_WHITE_CALIBRATION |
|
GENESYS_FLAG_DARK_WHITE_CALIBRATION |
|
||||||
|
GENESYS_FLAG_CUSTOM_GAMMA |
|
||||||
GENESYS_FLAG_HALF_CCD_MODE,
|
GENESYS_FLAG_HALF_CCD_MODE,
|
||||||
GENESYS_HAS_SCAN_SW |
|
GENESYS_HAS_SCAN_SW |
|
||||||
GENESYS_HAS_FILE_SW |
|
GENESYS_HAS_FILE_SW |
|
||||||
|
@ -863,6 +866,7 @@ static Genesys_Model canon_lide_60_model = {
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
| GENESYS_FLAG_DARK_WHITE_CALIBRATION
|
| GENESYS_FLAG_DARK_WHITE_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_HALF_CCD_MODE,
|
| GENESYS_FLAG_HALF_CCD_MODE,
|
||||||
|
|
||||||
GENESYS_HAS_NO_BUTTONS, /* no buttons supported */
|
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
|
SANE_FIX (0.0), /* Amount of feeding needed to eject document
|
||||||
after finishing scanning in mm */
|
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 */
|
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 (0.0), /* Start of scan area in mm (x) */
|
||||||
SANE_FIX (7.5), /* Start of scan area in mm (y) */
|
SANE_FIX (7.5), /* Start of scan area in mm (y) */
|
||||||
SANE_FIX (215.9), /* Size of scan area in mm (x) */
|
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 (0.0), /* Start of white strip in mm (y) */
|
||||||
SANE_FIX (1.0), /* Start of black mark in mm (x) */
|
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
|
SANE_FIX (0.0), /* Amount of feeding needed to eject document
|
||||||
after finishing scanning in mm */
|
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 */
|
COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */
|
||||||
|
|
||||||
|
@ -1077,11 +1081,9 @@ static Genesys_Model hp3670c_model = {
|
||||||
MOTOR_HP3670,
|
MOTOR_HP3670,
|
||||||
GENESYS_FLAG_LAZY_INIT
|
GENESYS_FLAG_LAZY_INIT
|
||||||
| GENESYS_FLAG_14BIT_GAMMA
|
| GENESYS_FLAG_14BIT_GAMMA
|
||||||
| GENESYS_FLAG_NO_CALIBRATION /* until fully supported */
|
|
||||||
/* | GENESYS_FLAG_SEARCH_START
|
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION
|
| GENESYS_FLAG_DARK_CALIBRATION
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION until fully supported */
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_NO_CALIBRATION
|
||||||
| GENESYS_FLAG_CUSTOM_GAMMA,
|
| GENESYS_FLAG_CUSTOM_GAMMA,
|
||||||
GENESYS_HAS_NO_BUTTONS,
|
GENESYS_HAS_NO_BUTTONS,
|
||||||
20,
|
20,
|
||||||
|
@ -1181,7 +1183,9 @@ static Genesys_Model plustek_st24_model = {
|
||||||
GENESYS_FLAG_UNTESTED
|
GENESYS_FLAG_UNTESTED
|
||||||
| GENESYS_FLAG_14BIT_GAMMA
|
| GENESYS_FLAG_14BIT_GAMMA
|
||||||
| GENESYS_FLAG_LAZY_INIT
|
| 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 */
|
GENESYS_HAS_NO_BUTTONS, /* no buttons supported */
|
||||||
20,
|
20,
|
||||||
200
|
200
|
||||||
|
@ -1288,7 +1292,8 @@ static Genesys_Model visioneer_xp300_model = {
|
||||||
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
|
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| 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,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
100,
|
||||||
400
|
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_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| 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,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
100,
|
||||||
400
|
400
|
||||||
|
@ -1390,6 +1396,7 @@ static Genesys_Model visioneer_roadwarrior_model = {
|
||||||
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
|
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION,
|
| GENESYS_FLAG_DARK_CALIBRATION,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
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_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_NO_CALIBRATION
|
| GENESYS_FLAG_NO_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_UNTESTED,
|
| GENESYS_FLAG_UNTESTED,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW,
|
||||||
300,
|
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_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION,
|
| GENESYS_FLAG_DARK_CALIBRATION,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
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_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION,
|
| GENESYS_FLAG_DARK_CALIBRATION,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
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_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION,
|
| GENESYS_FLAG_DARK_CALIBRATION,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
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_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION,
|
| GENESYS_FLAG_DARK_CALIBRATION,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
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_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION,
|
| GENESYS_FLAG_DARK_CALIBRATION,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
100,
|
||||||
|
@ -1751,6 +1764,7 @@ static Genesys_Model dct_docketport_487_model = {
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION
|
| GENESYS_FLAG_DARK_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_UNTESTED,
|
| GENESYS_FLAG_UNTESTED,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
100,
|
||||||
|
@ -1857,6 +1871,7 @@ static Genesys_Model xerox_travelscanner_model = {
|
||||||
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
|
GENESYS_FLAG_LAZY_INIT /* Which flags are needed for this scanner? */
|
||||||
| GENESYS_FLAG_SKIP_WARMUP
|
| GENESYS_FLAG_SKIP_WARMUP
|
||||||
| GENESYS_FLAG_OFFSET_CALIBRATION
|
| GENESYS_FLAG_OFFSET_CALIBRATION
|
||||||
|
| GENESYS_FLAG_CUSTOM_GAMMA
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION,
|
| GENESYS_FLAG_DARK_CALIBRATION,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE,
|
||||||
100,
|
100,
|
||||||
|
|
|
@ -735,12 +735,6 @@ gl646_setup_registers (Genesys_Device * dev,
|
||||||
return SANE_STATUS_INVAL;
|
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 if manual clock programming or dpi is half dpiset */
|
||||||
half_ccd = sensor->half_ccd;
|
half_ccd = sensor->half_ccd;
|
||||||
|
|
||||||
|
@ -748,9 +742,6 @@ gl646_setup_registers (Genesys_Device * dev,
|
||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
r = sanei_genesys_get_address (regs, 0x10 + 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];
|
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)
|
(regs[reg_0x6c].value & REG6C_TGTIME) | ((z1 >> 13) & 0x38) | ((z2 >> 16)
|
||||||
& 0x07);
|
& 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));
|
RIE (write_control (dev, xresolution));
|
||||||
|
|
||||||
/* setup analog frontend */
|
/* setup analog frontend */
|
||||||
|
@ -1500,7 +1484,7 @@ gl646_init_regs (Genesys_Device * dev)
|
||||||
dev->reg[reg_0x19].value = 0x2a;
|
dev->reg[reg_0x19].value = 0x2a;
|
||||||
dev->reg[reg_0x1e].value = 0x80;
|
dev->reg[reg_0x1e].value = 0x80;
|
||||||
dev->reg[reg_0x1f].value = 0x10;
|
dev->reg[reg_0x1f].value = 0x10;
|
||||||
dev->reg[reg_0x20].value = 0x50;
|
dev->reg[reg_0x20].value = 0x20;
|
||||||
break;
|
break;
|
||||||
case CIS_XP200:
|
case CIS_XP200:
|
||||||
dev->reg[reg_0x1e].value = 0x10;
|
dev->reg[reg_0x1e].value = 0x10;
|
||||||
|
@ -1705,6 +1689,7 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
|
||||||
{
|
{
|
||||||
case AFE_INIT:
|
case AFE_INIT:
|
||||||
sanei_genesys_init_fe (dev);
|
sanei_genesys_init_fe (dev);
|
||||||
|
RIE(sanei_genesys_write_register (dev, 0x50, 0x00));
|
||||||
status = sanei_genesys_fe_write_data (dev, 0x04, 0x80);
|
status = sanei_genesys_fe_write_data (dev, 0x04, 0x80);
|
||||||
if (status != SANE_STATUS_GOOD)
|
if (status != SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
|
@ -1712,6 +1697,7 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
|
||||||
sane_strstatus (status));
|
sane_strstatus (status));
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
usleep (200000UL);
|
||||||
status = sanei_genesys_fe_write_data (dev, 0x01, dev->frontend.reg[1]);
|
status = sanei_genesys_fe_write_data (dev, 0x01, dev->frontend.reg[1]);
|
||||||
if (status != SANE_STATUS_GOOD)
|
if (status != SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
|
@ -1727,6 +1713,14 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
|
||||||
sane_strstatus (status));
|
sane_strstatus (status));
|
||||||
return 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;
|
break;
|
||||||
case AFE_POWER_SAVE:
|
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",
|
DBG (DBG_error, "gl646_wm_hp3670: writing reg1 failed: %s\n",
|
||||||
sane_strstatus (status));
|
sane_strstatus (status));
|
||||||
return 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;
|
return status;
|
||||||
break;
|
break;
|
||||||
default: /* AFE_SET */
|
default: /* AFE_SET */
|
||||||
|
@ -1749,16 +1750,16 @@ gl646_wm_hp3670 (Genesys_Device * dev, uint8_t set)
|
||||||
sane_strstatus (status));
|
sane_strstatus (status));
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
/* offset 30 ~ */
|
/* offset 0x23 */
|
||||||
status = sanei_genesys_fe_write_data (dev, 0x23, dev->frontend.offset[0]);
|
status = sanei_genesys_fe_write_data (dev, 0x28, dev->frontend.offset[0]);
|
||||||
if (status != SANE_STATUS_GOOD)
|
if (status != SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
DBG (DBG_error, "gl646_wm_hp3670: writing offset failed: %s\n",
|
DBG (DBG_error, "gl646_wm_hp3670: writing offset failed: %s\n",
|
||||||
sane_strstatus (status));
|
sane_strstatus (status));
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
/* gain */
|
/* gain 0x28 */
|
||||||
status = sanei_genesys_fe_write_data (dev, 0x28, dev->frontend.gain[0]);
|
status = sanei_genesys_fe_write_data (dev, 0x23, dev->frontend.gain[0]);
|
||||||
if (status != SANE_STATUS_GOOD)
|
if (status != SANE_STATUS_GOOD)
|
||||||
{
|
{
|
||||||
DBG (DBG_error, "gl646_wm_hp3670: writing gain failed: %s\n",
|
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;
|
SANE_Status status = SANE_STATUS_GOOD;
|
||||||
Genesys_Register_Set local_reg[6];
|
Genesys_Register_Set local_reg[6];
|
||||||
int rate, exposure_time, tgtime, time;
|
int rate, exposure_time, tgtime, time;
|
||||||
return SANE_STATUS_GOOD;
|
|
||||||
DBG (DBG_proc, "gl646_set_powersaving (delay = %d)\n", delay);
|
DBG (DBG_proc, "gl646_set_powersaving (delay = %d)\n", delay);
|
||||||
|
|
||||||
local_reg[0].address = 0x01;
|
local_reg[0].address = 0x01;
|
||||||
|
@ -3170,7 +3171,7 @@ setup_for_scan (Genesys_Device * dev, Genesys_Settings settings,
|
||||||
|
|
||||||
/* compute distance to move */
|
/* compute distance to move */
|
||||||
move = 0;
|
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 (split == SANE_FALSE)
|
||||||
{
|
{
|
||||||
if (dev->model->is_sheetfed == 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, 0x00);
|
||||||
sanei_genesys_write_register (dev, 0x66, 0x10);
|
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
|
/* MD6471/G2410 and XP200 read/write data from an undocumented memory area which
|
||||||
* is after the second slope table */
|
* 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 */
|
/* 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_DVDSET | REG01_DOGENB);
|
||||||
dev->reg[reg_0x01].value |= REG01_DOGENB; /* XXX STEF XXX */
|
|
||||||
if (shading == SANE_TRUE)
|
if (shading == SANE_TRUE)
|
||||||
{
|
{
|
||||||
dev->reg[reg_0x01].value |= REG01_DVDSET;
|
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 */
|
/* one table movement for simple scan */
|
||||||
dev->reg[reg_0x02].value &= ~REG02_FASTFED;
|
dev->reg[reg_0x02].value &= ~REG02_FASTFED;
|
||||||
dev->reg[reg_0x02].value |= REG02_FASTFED; /* XXX STEF XXX */
|
|
||||||
|
|
||||||
if (move == SANE_FALSE)
|
if (move == SANE_FALSE)
|
||||||
{
|
{
|
||||||
|
@ -4838,24 +4811,6 @@ gl646_update_hardware_sensors (Genesys_Scanner * session)
|
||||||
uint8_t value;
|
uint8_t value;
|
||||||
SANE_Status status;
|
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
|
/* do what is needed to get a new set of events, but try to not loose
|
||||||
any of them.
|
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);
|
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 */
|
/* scan button */
|
||||||
if ((dev->model->buttons & GENESYS_HAS_SCAN_SW)
|
if ((dev->model->buttons & GENESYS_HAS_SCAN_SW)
|
||||||
&& session->val[OPT_SCAN_SW].b == session->last_val[OPT_SCAN_SW].b)
|
&& session->val[OPT_SCAN_SW].b == session->last_val[OPT_SCAN_SW].b)
|
||||||
|
@ -4984,17 +4927,6 @@ gl646_update_hardware_sensors (Genesys_Scanner * session)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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, 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, 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, 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 */
|
/* 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},
|
{MOTOR_HP2400, 50, SANE_TRUE, 50, HALF_STEP, SANE_FALSE, SANE_FALSE, 63, 4, 1382, 800, 2, 5400, 5400, 0.25, 0.5, 16},
|
||||||
|
|
Ładowanie…
Reference in New Issue