genesys: Use the sensor passed to gl646_setup_registers()

merge-requests/142/head
Povilas Kanapickas 2019-08-25 23:24:19 +03:00
rodzic 1a02dfc8cb
commit e2e1efae80
1 zmienionych plików z 16 dodań i 32 usunięć

Wyświetl plik

@ -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;