From e2e1efae804fb3f1e2fb2a2c083e332fd6878048 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 25 Aug 2019 23:24:19 +0300 Subject: [PATCH] genesys: Use the sensor passed to gl646_setup_registers() --- backend/genesys_gl646.cc | 48 ++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/backend/genesys_gl646.cc b/backend/genesys_gl646.cc index fc8e02eb6..79e9407a3 100644 --- a/backend/genesys_gl646.cc +++ b/backend/genesys_gl646.cc @@ -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;