kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'genesys-simplify-dpiset' into 'master'
genesys: Simplify DPISET register calculations See merge request sane-project/backends!367fix-build-obselete-jpeg
commit
c99580b811
|
@ -247,6 +247,7 @@ enum class SensorId : unsigned
|
|||
CCD_DP665,
|
||||
CCD_DP685,
|
||||
CCD_DSMOBILE600,
|
||||
CCD_DOCKETPORT_487,
|
||||
CCD_G4050,
|
||||
CCD_HP2300,
|
||||
CCD_HP2400,
|
||||
|
|
|
@ -492,6 +492,7 @@ static void genesys_send_offset_and_shading(Genesys_Device* dev, const Genesys_S
|
|||
&& dev->model->sensor_id != SensorId::CCD_CANON_8600F
|
||||
&& dev->model->sensor_id != SensorId::CCD_DSMOBILE600
|
||||
&& dev->model->sensor_id != SensorId::CCD_XP300
|
||||
&& dev->model->sensor_id != SensorId::CCD_DOCKETPORT_487
|
||||
&& dev->model->sensor_id != SensorId::CCD_DP665
|
||||
&& dev->model->sensor_id != SensorId::CCD_DP685
|
||||
&& dev->model->sensor_id != SensorId::CIS_CANON_LIDE_80
|
||||
|
@ -2879,6 +2880,7 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_
|
|||
switch (dev->model->sensor_id)
|
||||
{
|
||||
case SensorId::CCD_XP300:
|
||||
case SensorId::CCD_DOCKETPORT_487:
|
||||
case SensorId::CCD_ROADWARRIOR:
|
||||
case SensorId::CCD_DP665:
|
||||
case SensorId::CCD_DP685:
|
||||
|
@ -3204,6 +3206,7 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen
|
|||
dev->interface->record_progress_message("led_calibration");
|
||||
switch (dev->model->asic_type) {
|
||||
case AsicType::GL124:
|
||||
case AsicType::GL841:
|
||||
case AsicType::GL845:
|
||||
case AsicType::GL846:
|
||||
case AsicType::GL847: {
|
||||
|
@ -4916,7 +4919,7 @@ static void probe_genesys_devices()
|
|||
of Genesys_Calibration_Cache as is.
|
||||
*/
|
||||
static const char* CALIBRATION_IDENT = "sane_genesys";
|
||||
static const int CALIBRATION_VERSION = 28;
|
||||
static const int CALIBRATION_VERSION = 29;
|
||||
|
||||
bool read_calibration(std::istream& str, Genesys_Device::Calibration& calibration,
|
||||
const std::string& path)
|
||||
|
|
|
@ -693,10 +693,6 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
GenesysRegister *r;
|
||||
uint32_t expmax;
|
||||
|
||||
// resolution is divided according to ccd_pixels_per_system_pixel
|
||||
unsigned ccd_pixels_per_system_pixel = sensor.ccd_pixels_per_system_pixel();
|
||||
DBG(DBG_io2, "%s: ccd_pixels_per_system_pixel=%d\n", __func__, ccd_pixels_per_system_pixel);
|
||||
|
||||
gl124_setup_sensor(dev, sensor, reg);
|
||||
|
||||
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
|
||||
|
@ -772,14 +768,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
reg->find_reg(REG_0x05).value &= ~REG_0x05_GMMENB;
|
||||
}
|
||||
|
||||
unsigned dpiset_reg = session.output_resolution * ccd_pixels_per_system_pixel *
|
||||
session.ccd_size_divisor;
|
||||
if (sensor.dpiset_override != 0) {
|
||||
dpiset_reg = sensor.dpiset_override;
|
||||
}
|
||||
|
||||
reg->set16(REG_DPISET, dpiset_reg);
|
||||
DBG (DBG_io2, "%s: dpiset used=%d\n", __func__, dpiset_reg);
|
||||
reg->set16(REG_DPISET, sensor.register_dpiset);
|
||||
|
||||
r = sanei_genesys_get_address(reg, REG_0x06);
|
||||
r->value |= REG_0x06_GAIN4;
|
||||
|
|
|
@ -362,8 +362,11 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene
|
|||
|
||||
regs->set24(REG_MAXWD, session.output_line_bytes);
|
||||
|
||||
regs->set16(REG_DPISET, session.output_resolution * session.ccd_size_divisor *
|
||||
sensor.ccd_pixels_per_system_pixel());
|
||||
// FIXME: the incoming sensor is selected for incorrect resolution
|
||||
const auto& dpiset_sensor = sanei_genesys_find_sensor(dev, session.params.xres,
|
||||
session.params.channels,
|
||||
session.params.scan_method);
|
||||
regs->set16(REG_DPISET, dpiset_sensor.register_dpiset);
|
||||
regs->set16(REG_LPERIOD, sensor.exposure_lperiod);
|
||||
|
||||
/* move distance must be adjusted to take into account the extra lines
|
||||
|
@ -1549,15 +1552,18 @@ void CommandSetGl646::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
|
|||
DBG_HELPER(dbg);
|
||||
(void) regs;
|
||||
Genesys_Settings settings;
|
||||
int cksel = 1;
|
||||
|
||||
/* fill settings for scan : always a color scan */
|
||||
int channels = 3;
|
||||
|
||||
unsigned ccd_size_divisor = sensor.get_ccd_size_divisor_for_dpi(dev->settings.xres);
|
||||
unsigned cksel = get_cksel(dev->model->sensor_id, dev->settings.xres, channels);
|
||||
|
||||
unsigned resolution = sensor.optical_res / ccd_size_divisor / cksel;
|
||||
// FIXME: we select wrong calibration sensor
|
||||
const auto& calib_sensor = sanei_genesys_find_sensor(dev, dev->settings.xres, channels,
|
||||
dev->settings.scan_method);
|
||||
|
||||
unsigned ccd_size_divisor = calib_sensor.get_ccd_size_divisor_for_dpi(dev->settings.xres);
|
||||
|
||||
settings.scan_method = dev->settings.scan_method;
|
||||
settings.scan_mode = dev->settings.scan_mode;
|
||||
|
@ -1565,9 +1571,7 @@ void CommandSetGl646::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
|
|||
// FIXME: always a color scan, but why don't we set scan_mode to COLOR_SINGLE_PASS always?
|
||||
settings.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
|
||||
}
|
||||
settings.xres = sensor.optical_res / ccd_size_divisor;
|
||||
cksel = get_cksel(dev->model->sensor_id, dev->settings.xres, channels);
|
||||
settings.xres = settings.xres / cksel;
|
||||
settings.xres = resolution;
|
||||
settings.yres = settings.xres;
|
||||
settings.tl_x = 0;
|
||||
settings.tl_y = 0;
|
||||
|
|
|
@ -101,99 +101,12 @@ other register settings depending on this:
|
|||
RHI(0x52),RLOW(0x53),GHI(0x54),GLOW(0x55),BHI(0x56),BLOW(0x57),
|
||||
|
||||
*/
|
||||
static void sanei_gl841_setup_sensor(Genesys_Device * dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set * regs,
|
||||
bool extended, unsigned ccd_size_divisor)
|
||||
static void sanei_gl841_setup_sensor(const Genesys_Sensor& sensor, Genesys_Register_Set* regs)
|
||||
{
|
||||
DBG(DBG_proc, "%s\n", __func__);
|
||||
DBG_HELPER(dbg);
|
||||
|
||||
// that one is tricky at least
|
||||
for (uint16_t addr = 0x08; addr <= 0x0b; ++addr) {
|
||||
regs->set8(0x70 + addr - 0x08, sensor.custom_regs.get_value(addr));
|
||||
}
|
||||
|
||||
// ignore registers in range [0x10..0x16)
|
||||
for (uint16_t addr = 0x16; addr < 0x1e; ++addr) {
|
||||
regs->set8(addr, sensor.custom_regs.get_value(addr));
|
||||
}
|
||||
|
||||
// ignore registers in range [0x5b..0x5e]
|
||||
for (uint16_t addr = 0x52; addr < 0x52 + 9; ++addr) {
|
||||
regs->set8(addr, sensor.custom_regs.get_value(addr));
|
||||
}
|
||||
|
||||
/* don't go any further if no extended setup */
|
||||
if (!extended)
|
||||
return;
|
||||
|
||||
/* todo : add more CCD types if needed */
|
||||
/* we might want to expand the Sensor struct to have these
|
||||
2 kind of settings */
|
||||
if (dev->model->sensor_id == SensorId::CCD_5345) {
|
||||
if (ccd_size_divisor > 1) {
|
||||
GenesysRegister* r;
|
||||
/* settings for CCD used at half is max resolution */
|
||||
r = sanei_genesys_get_address (regs, 0x70);
|
||||
r->value = 0x00;
|
||||
r = sanei_genesys_get_address (regs, 0x71);
|
||||
r->value = 0x05;
|
||||
r = sanei_genesys_get_address (regs, 0x72);
|
||||
r->value = 0x06;
|
||||
r = sanei_genesys_get_address (regs, 0x73);
|
||||
r->value = 0x08;
|
||||
r = sanei_genesys_get_address (regs, 0x18);
|
||||
r->value = 0x28;
|
||||
r = sanei_genesys_get_address (regs, 0x58);
|
||||
r->value = 0x80 | (r->value & 0x03); /* VSMP=16 */
|
||||
}
|
||||
else
|
||||
{
|
||||
GenesysRegister* r;
|
||||
/* swap latch times */
|
||||
r = sanei_genesys_get_address (regs, 0x18);
|
||||
r->value = 0x30;
|
||||
regs->set8(0x52, sensor.custom_regs.get_value(0x55));
|
||||
regs->set8(0x53, sensor.custom_regs.get_value(0x56));
|
||||
regs->set8(0x54, sensor.custom_regs.get_value(0x57));
|
||||
regs->set8(0x55, sensor.custom_regs.get_value(0x52));
|
||||
regs->set8(0x56, sensor.custom_regs.get_value(0x53));
|
||||
regs->set8(0x57, sensor.custom_regs.get_value(0x54));
|
||||
r = sanei_genesys_get_address (regs, 0x58);
|
||||
r->value = 0x20 | (r->value & 0x03); /* VSMP=4 */
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (dev->model->sensor_id == SensorId::CCD_HP2300) {
|
||||
/* settings for CCD used at half is max resolution */
|
||||
GenesysRegister* r;
|
||||
if (ccd_size_divisor > 1) {
|
||||
r = sanei_genesys_get_address (regs, 0x70);
|
||||
r->value = 0x16;
|
||||
r = sanei_genesys_get_address (regs, 0x71);
|
||||
r->value = 0x00;
|
||||
r = sanei_genesys_get_address (regs, 0x72);
|
||||
r->value = 0x01;
|
||||
r = sanei_genesys_get_address (regs, 0x73);
|
||||
r->value = 0x03;
|
||||
/* manual clock programming */
|
||||
r = sanei_genesys_get_address (regs, 0x1d);
|
||||
r->value |= 0x80;
|
||||
}
|
||||
else
|
||||
{
|
||||
r = sanei_genesys_get_address (regs, 0x70);
|
||||
r->value = 1;
|
||||
r = sanei_genesys_get_address (regs, 0x71);
|
||||
r->value = 3;
|
||||
r = sanei_genesys_get_address (regs, 0x72);
|
||||
r->value = 4;
|
||||
r = sanei_genesys_get_address (regs, 0x73);
|
||||
r->value = 6;
|
||||
}
|
||||
r = sanei_genesys_get_address (regs, 0x58);
|
||||
r->value = 0x80 | (r->value & 0x03); /* VSMP=16 */
|
||||
return;
|
||||
for (const auto& custom_reg : sensor.custom_regs) {
|
||||
regs->set8(custom_reg.address, custom_reg.value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -344,7 +257,7 @@ gl841_init_lide80 (Genesys_Device * dev)
|
|||
dev->reg.find_reg(0x6c).value |= REG_0x6B_GPO18;
|
||||
dev->reg.find_reg(0x6c).value &= ~REG_0x6B_GPO17;
|
||||
|
||||
sanei_gl841_setup_sensor(dev, sensor, &dev->reg, 0, 1);
|
||||
sanei_gl841_setup_sensor(sensor, &dev->reg);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -409,24 +322,14 @@ gl841_init_registers (Genesys_Device * dev)
|
|||
|
||||
dev->reg.find_reg(0x05).value = 0x00; /* disable gamma, 24 clocks/pixel */
|
||||
|
||||
unsigned dpihw = 0;
|
||||
unsigned sensor_pixels = dev->model->x_size_calib_mm * sensor.optical_res / MM_PER_INCH;
|
||||
if (sensor_pixels < 0x1500) {
|
||||
dpihw = 600;
|
||||
} else if (sensor_pixels < 0x2a80) {
|
||||
dpihw = 1200;
|
||||
} else if (sensor_pixels < 0x5400) {
|
||||
dpihw = 2400;
|
||||
} else {
|
||||
throw SaneException("Cannot handle sensor pixel count %d", sensor_pixels);
|
||||
}
|
||||
sanei_genesys_set_dpihw(dev->reg, dpihw);
|
||||
sanei_genesys_set_dpihw(dev->reg, sensor.register_dpihw);
|
||||
|
||||
dev->reg.find_reg(0x06).value |= REG_0x06_PWRBIT;
|
||||
dev->reg.find_reg(0x06).value |= REG_0x06_GAIN4;
|
||||
|
||||
/* XP300 CCD needs different clock and clock/pixels values */
|
||||
if (dev->model->sensor_id != SensorId::CCD_XP300 &&
|
||||
dev->model->sensor_id != SensorId::CCD_DOCKETPORT_487 &&
|
||||
dev->model->sensor_id != SensorId::CCD_DP685 &&
|
||||
dev->model->sensor_id != SensorId::CCD_PLUSTEK_OPTICPRO_3600)
|
||||
{
|
||||
|
@ -480,7 +383,7 @@ gl841_init_registers (Genesys_Device * dev)
|
|||
/*STOPTIM*/
|
||||
dev->reg.find_reg(0x5e).value |= 0x2 << REG_0x5ES_STOPTIM;
|
||||
|
||||
sanei_gl841_setup_sensor(dev, sensor, &dev->reg, 0, 1);
|
||||
sanei_gl841_setup_sensor(sensor, &dev->reg);
|
||||
|
||||
// set up GPIO
|
||||
for (const auto& reg : dev->gpo.regs) {
|
||||
|
@ -506,27 +409,21 @@ gl841_init_registers (Genesys_Device * dev)
|
|||
}
|
||||
|
||||
// Send slope table for motor movement slope_table in machine byte order
|
||||
static void gl841_send_slope_table(Genesys_Device* dev, int table_nr,
|
||||
const std::vector<uint16_t>& slope_table,
|
||||
static void gl841_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
int table_nr, const std::vector<uint16_t>& slope_table,
|
||||
int steps)
|
||||
{
|
||||
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %d", table_nr, steps);
|
||||
int dpihw;
|
||||
int start_address;
|
||||
/*#ifdef WORDS_BIGENDIAN*/
|
||||
int i;
|
||||
/*#endif*/
|
||||
|
||||
dpihw = dev->reg.find_reg(0x05).value >> 6;
|
||||
|
||||
if (dpihw == 0) /* 600 dpi */
|
||||
start_address = 0x08000;
|
||||
else if (dpihw == 1) /* 1200 dpi */
|
||||
start_address = 0x10000;
|
||||
else if (dpihw == 2) /* 2400 dpi */
|
||||
start_address = 0x20000;
|
||||
else {
|
||||
throw SaneException("Unexpected dpihw");
|
||||
switch (sensor.register_dpihw) {
|
||||
case 600: start_address = 0x08000; break;
|
||||
case 1200: start_address = 0x10000; break;
|
||||
case 2400: start_address = 0x20000; break;
|
||||
default: throw SaneException("Unexpected dpihw");
|
||||
}
|
||||
|
||||
std::vector<uint8_t> table(steps * 2);
|
||||
|
@ -804,11 +701,11 @@ static void gl841_init_motor_regs(Genesys_Device* dev, const Genesys_Sensor& sen
|
|||
std::vector<uint16_t> table;
|
||||
table.resize(256, 0xffff);
|
||||
|
||||
gl841_send_slope_table(dev, 0, table, 256);
|
||||
gl841_send_slope_table(dev, 1, table, 256);
|
||||
gl841_send_slope_table(dev, 2, table, 256);
|
||||
gl841_send_slope_table(dev, 3, table, 256);
|
||||
gl841_send_slope_table(dev, 4, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 0, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 1, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 2, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 3, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 4, table, 256);
|
||||
}
|
||||
|
||||
gl841_write_freq(dev, dev->motor.base_ydpi / 4);
|
||||
|
@ -909,7 +806,7 @@ HOME_FREE: 3
|
|||
r->value |= REG_0x02_MTRREV;
|
||||
}
|
||||
|
||||
gl841_send_slope_table(dev, 3, fast_table.table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 3, fast_table.table, 256);
|
||||
|
||||
r = sanei_genesys_get_address(reg, 0x67);
|
||||
r->value = 0x3f;
|
||||
|
@ -970,11 +867,11 @@ static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor
|
|||
std::vector<uint16_t> table;
|
||||
table.resize(256, 0xffff);
|
||||
|
||||
gl841_send_slope_table(dev, 0, table, 256);
|
||||
gl841_send_slope_table(dev, 1, table, 256);
|
||||
gl841_send_slope_table(dev, 2, table, 256);
|
||||
gl841_send_slope_table(dev, 3, table, 256);
|
||||
gl841_send_slope_table(dev, 4, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 0, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 1, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 2, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 3, table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 4, table, 256);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1130,18 +1027,16 @@ HOME_FREE: 3
|
|||
r->value &= ~0x40;
|
||||
}
|
||||
|
||||
gl841_send_slope_table(dev, 0, slow_table.table, 256);
|
||||
|
||||
gl841_send_slope_table(dev, 1, back_table.table, 256);
|
||||
|
||||
gl841_send_slope_table(dev, 2, slow_table.table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 0, slow_table.table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 1, back_table.table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 2, slow_table.table, 256);
|
||||
|
||||
if (use_fast_fed) {
|
||||
gl841_send_slope_table(dev, 3, fast_table.table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 3, fast_table.table, 256);
|
||||
}
|
||||
|
||||
if (has_flag(flags, MotorFlag::AUTO_GO_HOME)) {
|
||||
gl841_send_slope_table(dev, 4, fast_table.table, 256);
|
||||
gl841_send_slope_table(dev, sensor, 4, fast_table.table, 256);
|
||||
}
|
||||
|
||||
/* now reg 0x21 and 0x24 are available, we can calculate reg 0x22 and 0x23,
|
||||
|
@ -1222,23 +1117,6 @@ HOME_FREE: 3
|
|||
r->value = (fast_table.steps_count >> 1) + (fast_table.steps_count & 1);
|
||||
}
|
||||
|
||||
static int
|
||||
gl841_get_dpihw(Genesys_Device * dev)
|
||||
{
|
||||
GenesysRegister* r;
|
||||
r = sanei_genesys_get_address(&dev->reg, 0x05);
|
||||
if ((r->value & REG_0x05_DPIHW) == REG_0x05_DPIHW_600) {
|
||||
return 600;
|
||||
}
|
||||
if ((r->value & REG_0x05_DPIHW) == REG_0x05_DPIHW_1200) {
|
||||
return 1200;
|
||||
}
|
||||
if ((r->value & REG_0x05_DPIHW) == REG_0x05_DPIHW_2400) {
|
||||
return 2400;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
|
||||
Genesys_Register_Set* reg, unsigned int exposure_time,
|
||||
const ScanSession& session)
|
||||
|
@ -1370,12 +1248,12 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
}
|
||||
|
||||
/* sensor parameters */
|
||||
sanei_gl841_setup_sensor(dev, sensor, &dev->reg, 1, session.ccd_size_divisor);
|
||||
sanei_gl841_setup_sensor(sensor, &dev->reg);
|
||||
|
||||
r = sanei_genesys_get_address (reg, 0x29);
|
||||
r->value = 255; /*<<<"magic" number, only suitable for cis*/
|
||||
|
||||
reg->set16(REG_DPISET, gl841_get_dpihw(dev) * session.output_resolution / session.optical_resolution);
|
||||
reg->set16(REG_DPISET, sensor.register_dpiset);
|
||||
reg->set16(REG_STRPIXEL, session.pixel_startx);
|
||||
reg->set16(REG_ENDPIXEL, session.pixel_endx);
|
||||
|
||||
|
@ -3163,8 +3041,8 @@ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Senso
|
|||
uint8_t* data, int size) const
|
||||
{
|
||||
DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size);
|
||||
uint32_t length, x, factor, pixels, i;
|
||||
uint16_t dpiset, dpihw, beginpixel;
|
||||
uint32_t length, x, pixels, i;
|
||||
std::uint16_t beginpixel;
|
||||
uint8_t *ptr,*src;
|
||||
|
||||
/* old method if no SHDAREA */
|
||||
|
@ -3178,14 +3056,6 @@ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Senso
|
|||
unsigned strpixel = dev->session.pixel_startx;
|
||||
unsigned endpixel = dev->session.pixel_endx;
|
||||
|
||||
/* compute deletion/average factor */
|
||||
dpiset = dev->reg.get16(REG_DPISET);
|
||||
dpihw = gl841_get_dpihw(dev);
|
||||
unsigned ccd_size_divisor = dev->session.ccd_size_divisor;
|
||||
factor=dpihw/dpiset;
|
||||
DBG(DBG_io2, "%s: dpihw=%d, dpiset=%d, ccd_size_divisor=%d, factor=%d\n", __func__, dpihw, dpiset,
|
||||
ccd_size_divisor, factor);
|
||||
|
||||
/* turn pixel value into bytes 2x16 bits words */
|
||||
strpixel*=2*2; /* 2 words of 2 bytes */
|
||||
endpixel*=2*2;
|
||||
|
@ -3194,10 +3064,10 @@ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Senso
|
|||
/* shading pixel begin is start pixel minus start pixel during shading
|
||||
* calibration. Currently only cases handled are full and half ccd resolution.
|
||||
*/
|
||||
beginpixel = sensor.ccd_start_xoffset / ccd_size_divisor;
|
||||
beginpixel = sensor.ccd_start_xoffset / dev->session.ccd_size_divisor;
|
||||
beginpixel += sensor.dummy_pixel + 1;
|
||||
DBG(DBG_io2, "%s: ORIGIN PIXEL=%d\n", __func__, beginpixel);
|
||||
beginpixel = (strpixel-beginpixel*2*2)/factor;
|
||||
beginpixel = (strpixel - beginpixel * 2 * 2) / sensor.shading_factor;
|
||||
DBG(DBG_io2, "%s: BEGIN PIXEL=%d\n", __func__, beginpixel/4);
|
||||
|
||||
dev->interface->record_key_value("shading_offset", std::to_string(beginpixel));
|
||||
|
|
|
@ -960,10 +960,6 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
/* sensor parameters */
|
||||
gl843_setup_sensor(dev, sensor, reg);
|
||||
|
||||
// resolution is divided according to CKSEL
|
||||
unsigned ccd_pixels_per_system_pixel = sensor.ccd_pixels_per_system_pixel();
|
||||
DBG(DBG_io2, "%s: ccd_pixels_per_system_pixel=%d\n", __func__, ccd_pixels_per_system_pixel);
|
||||
|
||||
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
|
||||
|
||||
/* enable shading */
|
||||
|
@ -1078,14 +1074,7 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
reg->find_reg(REG_0x05).value &= ~REG_0x05_GMMENB;
|
||||
}
|
||||
|
||||
unsigned dpiset = session.output_resolution * session.ccd_size_divisor *
|
||||
ccd_pixels_per_system_pixel;
|
||||
|
||||
if (sensor.dpiset_override != 0) {
|
||||
dpiset = sensor.dpiset_override;
|
||||
}
|
||||
reg->set16(REG_DPISET, dpiset);
|
||||
DBG(DBG_io2, "%s: dpiset used=%d\n", __func__, dpiset);
|
||||
reg->set16(REG_DPISET, sensor.register_dpiset);
|
||||
|
||||
reg->set16(REG_STRPIXEL, session.pixel_startx);
|
||||
reg->set16(REG_ENDPIXEL, session.pixel_endx);
|
||||
|
|
|
@ -518,10 +518,6 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time);
|
||||
GenesysRegister *r;
|
||||
|
||||
// resolution is divided according to ccd_pixels_per_system_pixel()
|
||||
unsigned ccd_pixels_per_system_pixel = sensor.ccd_pixels_per_system_pixel();
|
||||
DBG(DBG_io2, "%s: ccd_pixels_per_system_pixel=%d\n", __func__, ccd_pixels_per_system_pixel);
|
||||
|
||||
gl846_setup_sensor(dev, sensor, reg);
|
||||
|
||||
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
|
||||
|
@ -613,10 +609,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
}*/
|
||||
}
|
||||
|
||||
unsigned dpiset = session.params.xres * ccd_pixels_per_system_pixel;
|
||||
reg->set16(REG_DPISET, dpiset);
|
||||
DBG(DBG_io2, "%s: dpiset used=%d\n", __func__, dpiset);
|
||||
|
||||
reg->set16(REG_DPISET, sensor.register_dpiset);
|
||||
reg->set16(REG_STRPIXEL, session.pixel_startx);
|
||||
reg->set16(REG_ENDPIXEL, session.pixel_endx);
|
||||
|
||||
|
|
|
@ -528,10 +528,6 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time);
|
||||
GenesysRegister *r;
|
||||
|
||||
// resolution is divided according to ccd_pixels_per_system_pixel()
|
||||
unsigned ccd_pixels_per_system_pixel = sensor.ccd_pixels_per_system_pixel();
|
||||
DBG(DBG_io2, "%s: ccd_pixels_per_system_pixel=%d\n", __func__, ccd_pixels_per_system_pixel);
|
||||
|
||||
gl847_setup_sensor(dev, sensor, reg);
|
||||
|
||||
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
|
||||
|
@ -625,10 +621,7 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
|||
*/
|
||||
}
|
||||
|
||||
unsigned dpiset = session.params.xres * ccd_pixels_per_system_pixel;
|
||||
reg->set16(REG_DPISET, dpiset);
|
||||
DBG (DBG_io2, "%s: dpiset used=%d\n", __func__, dpiset);
|
||||
|
||||
reg->set16(REG_DPISET, sensor.register_dpiset);
|
||||
reg->set16(REG_STRPIXEL, session.pixel_startx);
|
||||
reg->set16(REG_ENDPIXEL, session.pixel_endx);
|
||||
|
||||
|
|
|
@ -126,8 +126,7 @@ std::ostream& operator<<(std::ostream& out, const Genesys_Sensor& sensor)
|
|||
<< " channels: " << format_vector_unsigned(4, sensor.channels) << '\n'
|
||||
<< " method: " << sensor.method << '\n'
|
||||
<< " register_dpihw: " << sensor.register_dpihw << '\n'
|
||||
<< " logical_dpihw_override: " << sensor.logical_dpihw_override << '\n'
|
||||
<< " dpiset_override: " << sensor.dpiset_override << '\n'
|
||||
<< " register_dpiset: " << sensor.register_dpiset << '\n'
|
||||
<< " ccd_size_divisor: " << sensor.ccd_size_divisor << '\n'
|
||||
<< " shading_factor: " << sensor.shading_factor << '\n'
|
||||
<< " pixel_count_ratio: " << sensor.pixel_count_ratio << '\n'
|
||||
|
|
|
@ -273,13 +273,9 @@ struct Genesys_Sensor {
|
|||
// resolution. The value zero does not set the override.
|
||||
unsigned register_dpihw = 0;
|
||||
|
||||
// The scanner may be setup to use a custom logical dpihw that does not correspond to any actual
|
||||
// resolution. The value zero does not set the override.
|
||||
unsigned logical_dpihw_override = 0;
|
||||
|
||||
// The scanner may be setup to use a custom dpiset value that does not correspond to any actual
|
||||
// resolution. The value zero does not set the override.
|
||||
unsigned dpiset_override = 0;
|
||||
unsigned register_dpiset = 0;
|
||||
|
||||
// CCD may present itself as half or quarter-size CCD on certain resolutions
|
||||
int ccd_size_divisor = 1;
|
||||
|
|
|
@ -2045,7 +2045,7 @@ void genesys_init_usb_device_tables()
|
|||
|
||||
model.is_cis = true;
|
||||
model.is_sheetfed = true;
|
||||
model.sensor_id = SensorId::CCD_XP300;
|
||||
model.sensor_id = SensorId::CCD_DOCKETPORT_487;
|
||||
model.adc_id = AdcId::WOLFSON_XP300;
|
||||
model.gpio_id = GpioId::XP300;
|
||||
model.motor_id = MotorId::XP300;
|
||||
|
|
Plik diff jest za duży
Load Diff
Ładowanie…
Reference in New Issue