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");
|
||||
}
|
||||
|
||||
/** 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);
|
||||
|
|
|
@ -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,
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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},
|
||||
|
|
Ładowanie…
Reference in New Issue