kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Implement transparency scanning support for 8400F
rodzic
ab2952d1df
commit
5c32aefd0f
|
@ -1648,6 +1648,88 @@ void genesys_init_sensor_tables()
|
|||
{ 0x03, 0x1f },
|
||||
}
|
||||
},
|
||||
{ -1, 600, 14400, ScanMethod::TRANSPARENCY, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x13 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x00 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0d },
|
||||
{ 0x53, 0x10 },
|
||||
{ 0x54, 0x01 },
|
||||
{ 0x55, 0x04 },
|
||||
{ 0x56, 0x07 },
|
||||
{ 0x57, 0x0a },
|
||||
{ 0x58, 0x6b },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x0e }, { 0x76, 0x3f },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
{ 0x7a, 0x01 }, { 0x7b, 0xb6 }, { 0x7c, 0xdb },
|
||||
{ 0x70, 0x01 }, { 0x71, 0x02 }, { 0x72, 0x03 }, { 0x73, 0x04 },
|
||||
{ 0x80, 0x20 },
|
||||
}, {}
|
||||
},
|
||||
{ 1200, 1200, 28800, ScanMethod::TRANSPARENCY, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x11 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x00 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x0b },
|
||||
{ 0x53, 0x0e },
|
||||
{ 0x54, 0x11 },
|
||||
{ 0x55, 0x02 },
|
||||
{ 0x56, 0x05 },
|
||||
{ 0x57, 0x08 },
|
||||
{ 0x58, 0x63 },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ 0x70, 0x00 }, { 0x71, 0x01 }, { 0x72, 0x02 }, { 0x73, 0x03 },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x01 }, { 0x76, 0xff },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
{ 0x7a, 0x02 }, { 0x7b, 0x49 }, { 0x7c, 0x24 },
|
||||
{ 0x80, 0x29 },
|
||||
}, {
|
||||
{ 0x03, 0x1f },
|
||||
},
|
||||
},
|
||||
{ 2400, 2400, 28800, ScanMethod::TRANSPARENCY, {
|
||||
{ 0x16, 0x33 },
|
||||
{ 0x17, 0x0c },
|
||||
{ 0x18, 0x10 },
|
||||
{ 0x19, 0x2a },
|
||||
{ 0x1a, 0x30 },
|
||||
{ 0x1b, 0x00 },
|
||||
{ 0x1c, 0x20 },
|
||||
{ 0x1d, 0x84 },
|
||||
{ 0x1e, 0xa0 },
|
||||
{ 0x52, 0x02 },
|
||||
{ 0x53, 0x05 },
|
||||
{ 0x54, 0x08 },
|
||||
{ 0x55, 0x0b },
|
||||
{ 0x56, 0x0e },
|
||||
{ 0x57, 0x11 },
|
||||
{ 0x58, 0x1b },
|
||||
{ 0x59, 0x00 },
|
||||
{ 0x5a, 0x40 },
|
||||
{ 0x70, 0x09 }, { 0x71, 0x0a }, { 0x72, 0x0b }, { 0x73, 0x0c },
|
||||
{ 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x00 },
|
||||
{ 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x00 },
|
||||
{ 0x7a, 0x02 }, { 0x7b, 0x49 }, { 0x7c, 0x24 },
|
||||
{ 0x80, 0x2b },
|
||||
}, {
|
||||
{ 0x03, 0x1f },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
for (const CustomSensorSettings& setting : custom_settings)
|
||||
|
@ -3224,16 +3306,16 @@ static Genesys_Model canon_8400f_model = {
|
|||
SANE_FIX(219.9), // x_size
|
||||
SANE_FIX(315.0), // y_size
|
||||
|
||||
SANE_FIX(0.0), /* Start of white strip in mm (y) */
|
||||
SANE_FIX(10.0), /* Start of black mark in mm (x) */
|
||||
SANE_FIX(0.0), // y_offset_calib
|
||||
SANE_FIX(10.0), // x_offset_mark
|
||||
|
||||
SANE_FIX (8.0), /* Start of scan area in TA mode in mm (x) */
|
||||
SANE_FIX (13.00), /* Start of scan area in TA mode in mm (y) */
|
||||
SANE_FIX (217.9), /* Size of scan area in TA mode in mm (x) */
|
||||
SANE_FIX (250.0), /* Size of scan area in TA mode in mm (y) */
|
||||
SANE_FIX(100.0), // x_offset_ta
|
||||
SANE_FIX(50.00), // y_offset_ta
|
||||
SANE_FIX(100.0), // x_size_ta
|
||||
SANE_FIX(230.0), // y_size_ta
|
||||
|
||||
SANE_FIX(0.0), // y_offset_sensor_to_ta
|
||||
SANE_FIX (40.0), /* Start of white strip in TA mode in mm (y) */
|
||||
SANE_FIX(22.0), // y_offset_sensor_to_ta
|
||||
SANE_FIX(25.0), // y_offset_calib_ta
|
||||
|
||||
SANE_FIX (0.0), /* Size of scan area after paper sensor stops
|
||||
sensing document in mm */
|
||||
|
@ -3252,6 +3334,7 @@ static Genesys_Model canon_8400f_model = {
|
|||
DAC_CS8400F,
|
||||
GPO_CS8400F,
|
||||
MOTOR_CS8400F,
|
||||
GENESYS_FLAG_HAS_UTA |
|
||||
GENESYS_FLAG_LAZY_INIT |
|
||||
GENESYS_FLAG_OFFSET_CALIBRATION |
|
||||
GENESYS_FLAG_STAGGERED_LINE |
|
||||
|
@ -3262,7 +3345,7 @@ static Genesys_Model canon_8400f_model = {
|
|||
GENESYS_FLAG_SHADING_REPARK,
|
||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW,
|
||||
100,
|
||||
0, // shading_ta_lines
|
||||
50, // shading_ta_lines
|
||||
100
|
||||
};
|
||||
|
||||
|
|
|
@ -1709,7 +1709,9 @@ gl843_calculate_current_setup(Genesys_Device * dev, const Genesys_Sensor& sensor
|
|||
start = SANE_UNFIX(dev->model->x_offset);
|
||||
}
|
||||
|
||||
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
|
||||
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F ||
|
||||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
|
||||
{
|
||||
// FIXME: this is probably just an artifact of a bug elsewhere
|
||||
start /= ccd_size_divisor;
|
||||
}
|
||||
|
@ -2115,7 +2117,28 @@ static SANE_Status gl843_set_xpa_motor_power(Genesys_Device *dev, bool set)
|
|||
|
||||
DBGSTART;
|
||||
|
||||
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
|
||||
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
|
||||
|
||||
if (set) {
|
||||
RIE(sanei_genesys_read_register(dev, 0x6c, &val));
|
||||
val &= ~(REG6C_GPIO16 | REG6C_GPIO13);
|
||||
RIE(sanei_genesys_write_register(dev, 0x6c, val));
|
||||
|
||||
RIE(sanei_genesys_read_register(dev, 0xa9, &val));
|
||||
val |= REGA9_GPO30;
|
||||
val &= ~REGA9_GPO29;
|
||||
RIE(sanei_genesys_write_register(dev, 0xa9,val));
|
||||
} else {
|
||||
RIE(sanei_genesys_read_register(dev, 0x6c, &val));
|
||||
val |= REG6C_GPIO16 | REG6C_GPIO13;
|
||||
RIE(sanei_genesys_write_register(dev, 0x6c, val));
|
||||
|
||||
RIE(sanei_genesys_read_register(dev, 0xa9, &val));
|
||||
val &= ~REGA9_GPO30;
|
||||
val |= REGA9_GPO29;
|
||||
RIE(sanei_genesys_write_register(dev, 0xa9, val));
|
||||
}
|
||||
} else if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
|
||||
|
||||
if (set) {
|
||||
RIE(sanei_genesys_read_register(dev, REG6C, &val));
|
||||
|
@ -2140,11 +2163,7 @@ static SANE_Status gl843_set_xpa_motor_power(Genesys_Device *dev, bool set)
|
|||
val &= ~REGA6_GPIO23;
|
||||
RIE(sanei_genesys_write_register(dev, REGA6,val));
|
||||
}
|
||||
DBGCOMPLETED;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (dev->model->model_id == MODEL_HP_SCANJET_G4050) {
|
||||
} else if (dev->model->model_id == MODEL_HP_SCANJET_G4050) {
|
||||
|
||||
if (set) {
|
||||
/* set MULTFILM et GPOADF */
|
||||
|
@ -2182,12 +2201,10 @@ static SANE_Status gl843_set_xpa_motor_power(Genesys_Device *dev, bool set)
|
|||
val &= ~REGA9_GPO31;
|
||||
RIE (sanei_genesys_write_register (dev, REGA9, val));
|
||||
}
|
||||
DBGCOMPLETED;
|
||||
return status;
|
||||
}
|
||||
|
||||
DBGCOMPLETED;
|
||||
return status;
|
||||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2304,6 +2321,7 @@ gl843_begin_scan (Genesys_Device * dev, const Genesys_Sensor& sensor, Genesys_Re
|
|||
/* blinking led */
|
||||
RIE (sanei_genesys_write_register (dev, REG7E, 0x01));
|
||||
break;
|
||||
case GPO_CS8400F:
|
||||
case GPO_CS8600F:
|
||||
if (reg->state.is_xpa_on && reg->state.is_lamp_on) {
|
||||
RIE(gl843_set_xpa_lamp_power(dev, true));
|
||||
|
@ -2314,7 +2332,6 @@ gl843_begin_scan (Genesys_Device * dev, const Genesys_Sensor& sensor, Genesys_Re
|
|||
}
|
||||
break;
|
||||
case GPO_CS4400F:
|
||||
case GPO_CS8400F:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -3074,7 +3091,9 @@ gl843_init_regs_for_scan (Genesys_Device * dev, const Genesys_Sensor& sensor)
|
|||
start = SANE_UNFIX(dev->model->x_offset);
|
||||
}
|
||||
|
||||
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
|
||||
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F ||
|
||||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
|
||||
{
|
||||
// FIXME: this is probably just an artifact of a bug elsewhere
|
||||
start /= sensor.get_ccd_size_divisor_for_dpi(dev->settings.xres);
|
||||
}
|
||||
|
@ -3985,9 +4004,10 @@ gl843_boot (Genesys_Device * dev, SANE_Bool cold)
|
|||
RIE (sanei_genesys_write_register (dev, REG0B, val));
|
||||
dev->reg.find_reg(0x0b).value = val;
|
||||
|
||||
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
|
||||
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
|
||||
RIE(sanei_genesys_write_0x8c(dev, 0x1e, 0x01));
|
||||
RIE(sanei_genesys_write_0x8c(dev, 0x10, 0xb4));
|
||||
RIE(sanei_genesys_write_0x8c(dev, 0x0f, 0x02));
|
||||
}
|
||||
else if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
|
||||
RIE(sanei_genesys_write_0x8c(dev, 0x10, 0xc8));
|
||||
|
|
|
@ -466,7 +466,7 @@ static Motor_Profile gl843_motors[]={
|
|||
{MOTOR_G4050, 42752, 2, g4050_max},
|
||||
{MOTOR_G4050, 56064, 1, g4050_high},
|
||||
/* CS8400F */
|
||||
{MOTOR_CS8400F, 7200, 0, cs8400f_fast},
|
||||
{MOTOR_CS8400F, 50000, 2, cs8400f_fast},
|
||||
{ MOTOR_CS8600F, 0x59d8, 2, motor_speeds_cs8600f }, // FIXME: if the exposure is lower then we'll select another motor
|
||||
{ 0, 0, 0, NULL },
|
||||
};
|
||||
|
|
Ładowanie…
Reference in New Issue