kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Use the sensor passed to gl646_setup_registers()
rodzic
1a02dfc8cb
commit
e2e1efae80
|
@ -407,22 +407,6 @@ static void gl646_setup_registers(Genesys_Device* dev,
|
|||
xresolution = resolution;
|
||||
}
|
||||
|
||||
// for the given resolution, search for master sensor mode setting
|
||||
const Genesys_Sensor* sensor_mst = nullptr;
|
||||
for (const auto& sensor : *s_sensors) {
|
||||
if (sensor.sensor_id == dev->model->ccd_type && sensor.resolutions.matches(xresolution) &&
|
||||
sensor.matches_channel_count(session.params.channels))
|
||||
{
|
||||
sensor_mst = &sensor;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sensor_mst == NULL) {
|
||||
throw SaneException("unable to find settings for sensor %d at %d dpi channels=%d",
|
||||
dev->model->ccd_type, xresolution, session.params.channels);
|
||||
}
|
||||
|
||||
/* for the given resolution, search for master
|
||||
* motor mode setting */
|
||||
i = 0;
|
||||
|
@ -446,14 +430,14 @@ static void gl646_setup_registers(Genesys_Device* dev,
|
|||
/* now we can search for the specific sensor settings */
|
||||
i = 0;
|
||||
|
||||
unsigned ccd_size_divisor = sensor_mst->ccd_size_divisor;
|
||||
unsigned ccd_size_divisor = sensor.ccd_size_divisor;
|
||||
|
||||
// now apply values from settings to registers
|
||||
regs->set16(REG_EXPR, sensor_mst->exposure.red);
|
||||
regs->set16(REG_EXPG, sensor_mst->exposure.green);
|
||||
regs->set16(REG_EXPB, sensor_mst->exposure.blue);
|
||||
regs->set16(REG_EXPR, sensor.exposure.red);
|
||||
regs->set16(REG_EXPG, sensor.exposure.green);
|
||||
regs->set16(REG_EXPB, sensor.exposure.blue);
|
||||
|
||||
for (const auto& reg : sensor_mst->custom_regs) {
|
||||
for (const auto& reg : sensor.custom_regs) {
|
||||
regs->set8(reg.address, reg.value);
|
||||
}
|
||||
|
||||
|
@ -640,15 +624,15 @@ static void gl646_setup_registers(Genesys_Device* dev,
|
|||
}
|
||||
|
||||
/* scanner's x coordinates are expressed in physical DPI but they must be divided by cksel */
|
||||
sx = startx / sensor_mst->ccd_pixels_per_system_pixel() / ccd_size_divisor;
|
||||
ex = endx / sensor_mst->ccd_pixels_per_system_pixel() / ccd_size_divisor;
|
||||
sx = startx / sensor.ccd_pixels_per_system_pixel() / ccd_size_divisor;
|
||||
ex = endx / sensor.ccd_pixels_per_system_pixel() / ccd_size_divisor;
|
||||
regs->set16(REG_STRPIXEL, sx);
|
||||
regs->set16(REG_ENDPIXEL, ex);
|
||||
DBG(DBG_info, "%s: startx=%d, endx=%d, ccd_size_divisor=%d\n", __func__, sx, ex, ccd_size_divisor);
|
||||
|
||||
/* words_per_line must be computed according to the scan's resolution */
|
||||
/* in fact, words_per_line _gives_ the actual scan resolution */
|
||||
words_per_line = (((endx - startx) * sensor_mst->real_resolution) / sensor.optical_res);
|
||||
words_per_line = (((endx - startx) * sensor.real_resolution) / sensor.optical_res);
|
||||
bpp = session.params.depth/8;
|
||||
if (session.params.depth == 1) {
|
||||
words_per_line = (words_per_line+7)/8 ;
|
||||
|
@ -665,9 +649,9 @@ static void gl646_setup_registers(Genesys_Device* dev,
|
|||
DBG(DBG_info, "%s: wpl=%d\n", __func__, words_per_line);
|
||||
regs->set24(REG_MAXWD, words_per_line);
|
||||
|
||||
regs->set16(REG_DPISET, sensor_mst->real_resolution * sensor_mst->ccd_size_divisor *
|
||||
sensor_mst->ccd_pixels_per_system_pixel());
|
||||
regs->set16(REG_LPERIOD, sensor_mst->exposure_lperiod);
|
||||
regs->set16(REG_DPISET, sensor.real_resolution * sensor.ccd_size_divisor *
|
||||
sensor.ccd_pixels_per_system_pixel());
|
||||
regs->set16(REG_LPERIOD, sensor.exposure_lperiod);
|
||||
|
||||
/* move distance must be adjusted to take into account the extra lines
|
||||
* read to reorder data */
|
||||
|
@ -795,8 +779,8 @@ static void gl646_setup_registers(Genesys_Device* dev,
|
|||
|
||||
regs->find_reg(0x65).value = motor->mtrpwm;
|
||||
|
||||
sanei_genesys_calculate_zmod (regs->find_reg(0x02).value & REG02_FASTFED,
|
||||
sensor_mst->exposure_lperiod,
|
||||
sanei_genesys_calculate_zmod(regs->find_reg(0x02).value & REG02_FASTFED,
|
||||
sensor.exposure_lperiod,
|
||||
slope_table1,
|
||||
motor->steps1,
|
||||
move, motor->fwdbwd, &z1, &z2);
|
||||
|
@ -846,10 +830,10 @@ static void gl646_setup_registers(Genesys_Device* dev,
|
|||
dev->read_active = SANE_TRUE;
|
||||
|
||||
dev->session = session;
|
||||
dev->current_setup.pixels = ((endx - startx) * sensor_mst->real_resolution) / sensor.optical_res;
|
||||
dev->current_setup.pixels = ((endx - startx) * sensor.real_resolution) / sensor.optical_res;
|
||||
dev->current_setup.lines = linecnt;
|
||||
dev->current_setup.exposure_time = sensor_mst->exposure_lperiod;
|
||||
dev->current_setup.xres = sensor_mst->real_resolution;
|
||||
dev->current_setup.exposure_time = sensor.exposure_lperiod;
|
||||
dev->current_setup.xres = sensor.real_resolution;
|
||||
dev->current_setup.ccd_size_divisor = ccd_size_divisor;
|
||||
dev->current_setup.stagger = stagger;
|
||||
dev->current_setup.max_shift = max_shift + stagger;
|
||||
|
|
Ładowanie…
Reference in New Issue