From 4586ae4e563edba12fed630815360593a72a6ce5 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:04 +0300 Subject: [PATCH 01/10] genesys: Increase consistency of lamp warmup handling --- backend/genesys/command_set.h | 3 +-- backend/genesys/genesys.cpp | 32 ++++++++++++++++---------------- backend/genesys/gl124.cpp | 12 ++---------- backend/genesys/gl124.h | 3 +-- backend/genesys/gl646.cpp | 9 +-------- backend/genesys/gl646.h | 3 +-- backend/genesys/gl841.cpp | 15 +++------------ backend/genesys/gl841.h | 3 +-- backend/genesys/gl843.cpp | 10 ++++------ backend/genesys/gl843.h | 3 +-- backend/genesys/gl846.cpp | 5 +---- backend/genesys/gl846.h | 3 +-- backend/genesys/gl847.cpp | 5 +---- backend/genesys/gl847.h | 3 +-- 14 files changed, 35 insertions(+), 74 deletions(-) diff --git a/backend/genesys/command_set.h b/backend/genesys/command_set.h index 0b1591a9c..4e22a562c 100644 --- a/backend/genesys/command_set.h +++ b/backend/genesys/command_set.h @@ -67,8 +67,7 @@ public: virtual void init(Genesys_Device* dev) const = 0; virtual void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const = 0; + Genesys_Register_Set* regs) const = 0; virtual void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs) const = 0; diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index ab2f8d62c..a8440f167 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3428,18 +3428,20 @@ static void genesys_warmup_lamp(Genesys_Device* dev) { DBG_HELPER(dbg); unsigned seconds = 0; - int pixel; - int channels, total_size; double first_average = 0; double second_average = 0; int difference = 255; - int lines = 3; const auto& sensor = sanei_genesys_find_sensor_any(dev); - dev->cmd_set->init_regs_for_warmup(dev, sensor, &dev->reg, &channels, &total_size); + dev->cmd_set->init_regs_for_warmup(dev, sensor, &dev->reg); dev->interface->write_registers(dev->reg); + auto total_pixels = dev->session.output_pixels; + auto total_size = dev->session.output_line_bytes; + auto channels = dev->session.params.channels; + auto lines = dev->session.output_line_count; + std::vector first_line(total_size); std::vector second_line(total_size); @@ -3476,8 +3478,7 @@ static void genesys_warmup_lamp(Genesys_Device* dev) dev->cmd_set->end_scan(dev, &dev->reg, true); /* compute difference between the two scans */ - for (pixel = 0; pixel < total_size; pixel++) - { + for (unsigned pixel = 0; pixel < total_size; pixel++) { // 16 bit data if (dev->session.params.depth == 16) { first_average += (first_line[pixel] + first_line[pixel + 1] * 256); @@ -3488,11 +3489,13 @@ static void genesys_warmup_lamp(Genesys_Device* dev) { first_average += first_line[pixel]; second_average += second_line[pixel]; - } - } + } + } + + first_average /= total_pixels; + second_average /= total_pixels; + if (dev->session.params.depth == 16) { - first_average /= pixel; - second_average /= pixel; difference = static_cast(std::fabs(first_average - second_average)); DBG(DBG_info, "%s: average = %.2f, diff = %.3f\n", __func__, 100 * ((second_average) / (256 * 256)), @@ -3501,11 +3504,8 @@ static void genesys_warmup_lamp(Genesys_Device* dev) if (second_average > (100 * 256) && (difference / second_average) < 0.002) break; - } - else - { - first_average /= pixel; - second_average /= pixel; + } else { + if (DBG_LEVEL >= DBG_data) { sanei_genesys_write_pnm_file("gl_warmup1.pnm", first_line.data(), 8, channels, @@ -3519,7 +3519,7 @@ static void genesys_warmup_lamp(Genesys_Device* dev) if (fabs (first_average - second_average) < 15 && second_average > 55) break; - } + } /* sleep another second before next loop */ dev->interface->sleep_ms(1000); diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index b6beefb45..7f6010686 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -1418,13 +1418,9 @@ void CommandSetGl124::coarse_gain_calibration(Genesys_Device* dev, const Genesys // wait for lamp warmup by scanning the same line until difference // between 2 scans is below a threshold void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* reg, int* channels, - int* total_size) const + Genesys_Register_Set* reg) const { DBG_HELPER(dbg); - int num_pixels; - - *channels=3; *reg = dev->reg; @@ -1436,7 +1432,7 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.pixels = dev->model->x_size_calib_mm * sensor.optical_res / MM_PER_INCH / 2; session.params.lines = 1; session.params.depth = 8; - session.params.channels = *channels; + session.params.channels = 3; session.params.scan_method = dev->settings.scan_method; session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; session.params.color_filter = dev->settings.color_filter; @@ -1449,10 +1445,6 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se init_regs_for_scan_session(dev, sensor, reg, session); - num_pixels = session.output_pixels; - - *total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */ - sanei_genesys_set_motor_power(*reg, false); } diff --git a/backend/genesys/gl124.h b/backend/genesys/gl124.h index 9f6da50c3..df50c12d6 100644 --- a/backend/genesys/gl124.h +++ b/backend/genesys/gl124.h @@ -93,8 +93,7 @@ public: void init(Genesys_Device* dev) const override; void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const override; + Genesys_Register_Set* regs) const override; void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs) const override; diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index da8c4b448..65ee5ae0d 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -2458,14 +2458,12 @@ void CommandSetGl646::coarse_gain_calibration(Genesys_Device* dev, const Genesys * */ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* local_reg, int* channels, - int* total_size) const + Genesys_Register_Set* local_reg) const { DBG_HELPER(dbg); (void) sensor; Genesys_Settings settings; - int lines; dev->frontend = dev->frontend_initial; @@ -2504,11 +2502,6 @@ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se /* turn off motor during this scan */ sanei_genesys_set_motor_power(*local_reg, false); - /* returned value to higher level warmup function */ - *channels = 1; - lines = local_reg->get24(REG_LINCNT) + 1; - *total_size = lines * settings.pixels; - // now registers are ok, write them to scanner gl646_set_fe(dev, local_sensor, AFE_SET, settings.xres); } diff --git a/backend/genesys/gl646.h b/backend/genesys/gl646.h index ad9a1104f..dea4bffca 100644 --- a/backend/genesys/gl646.h +++ b/backend/genesys/gl646.h @@ -446,8 +446,7 @@ public: void init(Genesys_Device* dev) const override; void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const override; + Genesys_Register_Set* regs) const override; void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs) const override; diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index 9a364bf67..61d6ca08f 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -2834,8 +2834,7 @@ void CommandSetGl841::coarse_gain_calibration(Genesys_Device* dev, const Genesys // wait for lamp warmup by scanning the same line until difference // between 2 scans is below a threshold void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* local_reg, int* channels, - int* total_size) const + Genesys_Register_Set* local_reg) const { DBG_HELPER(dbg); int num_pixels = 4 * 300; @@ -2857,13 +2856,9 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.pixels = num_pixels; session.params.lines = 1; session.params.depth = 16; - session.params.channels = *channels; + session.params.channels = 3; session.params.scan_method = dev->settings.scan_method; - if (*channels == 3) { - session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; - } else { - session.params.scan_mode = ScanColorMode::GRAY; - } + session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; session.params.color_filter = dev->settings.color_filter; session.params.flags = ScanFlag::DISABLE_SHADING | ScanFlag::DISABLE_GAMMA | @@ -2873,10 +2868,6 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se compute_session(dev, session, sensor); init_regs_for_scan_session(dev, sensor, local_reg, session); - - num_pixels = session.output_pixels; - - *total_size = num_pixels * 3 * 2 * 1; /* colors * bytes_per_color * scan lines */ } /* diff --git a/backend/genesys/gl841.h b/backend/genesys/gl841.h index 9e010bb30..a66bb80a0 100644 --- a/backend/genesys/gl841.h +++ b/backend/genesys/gl841.h @@ -60,8 +60,7 @@ public: void init(Genesys_Device* dev) const override; void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const override; + Genesys_Register_Set* regs) const override; void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs) const override; diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 68a72ab5d..b3fd73e57 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -1757,20 +1757,18 @@ void CommandSetGl843::coarse_gain_calibration(Genesys_Device* dev, const Genesys // wait for lamp warmup by scanning the same line until difference // between 2 scans is below a threshold void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* reg, int* channels, - int* total_size) const + Genesys_Register_Set* reg) const { DBG_HELPER(dbg); (void) sensor; - *channels=3; + unsigned channels = 3; unsigned resolution = dev->model->get_resolution_settings(dev->settings.scan_method) .get_nearest_resolution_x(600); - const auto& calib_sensor = sanei_genesys_find_sensor(dev, resolution, *channels, + const auto& calib_sensor = sanei_genesys_find_sensor(dev, resolution, channels, dev->settings.scan_method); unsigned num_pixels = dev->model->x_size_calib_mm * resolution / MM_PER_INCH / 2; - *total_size = num_pixels * 3 * 1; *reg = dev->reg; @@ -1782,7 +1780,7 @@ void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.pixels = num_pixels; session.params.lines = 1; session.params.depth = 8; - session.params.channels = *channels; + session.params.channels = channels; session.params.scan_method = dev->settings.scan_method; session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; session.params.color_filter = dev->settings.color_filter; diff --git a/backend/genesys/gl843.h b/backend/genesys/gl843.h index 7cd46fcab..d227af2d9 100644 --- a/backend/genesys/gl843.h +++ b/backend/genesys/gl843.h @@ -60,8 +60,7 @@ public: void init(Genesys_Device* dev) const override; void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const override; + Genesys_Register_Set* regs) const override; void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs) const override; diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index c22b3cd9c..aff036955 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -1392,14 +1392,11 @@ bool CommandSetGl846::needs_home_before_init_regs_for_scan(Genesys_Device* dev) } void CommandSetGl846::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const + Genesys_Register_Set* regs) const { (void) dev; (void) sensor; (void) regs; - (void) channels; - (void) total_size; throw SaneException("not implemented"); } diff --git a/backend/genesys/gl846.h b/backend/genesys/gl846.h index bfc214c0a..742a7c5f1 100644 --- a/backend/genesys/gl846.h +++ b/backend/genesys/gl846.h @@ -60,8 +60,7 @@ public: void init(Genesys_Device* dev) const override; void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const override; + Genesys_Register_Set* regs) const override; void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs) const override; diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index b41e4e127..305f6836a 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -1288,14 +1288,11 @@ bool CommandSetGl847::needs_home_before_init_regs_for_scan(Genesys_Device* dev) } void CommandSetGl847::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const + Genesys_Register_Set* regs) const { (void) dev; (void) sensor; (void) regs; - (void) channels; - (void) total_size; throw SaneException("not implemented"); } diff --git a/backend/genesys/gl847.h b/backend/genesys/gl847.h index 794aa3ebf..7a5f954b1 100644 --- a/backend/genesys/gl847.h +++ b/backend/genesys/gl847.h @@ -80,8 +80,7 @@ public: void init(Genesys_Device* dev) const override; void init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor& sensor, - Genesys_Register_Set* regs, int* channels, - int* total_size) const override; + Genesys_Register_Set* regs) const override; void init_regs_for_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs) const override; From 6420e00a38bbd239f33d407ad66e0b96e9178ad8 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:05 +0300 Subject: [PATCH 02/10] genesys: Don't hardcode depth during warmup --- backend/genesys/gl124.cpp | 2 +- backend/genesys/gl646.cpp | 2 +- backend/genesys/gl841.cpp | 2 +- backend/genesys/gl843.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 7f6010686..2a3c79e61 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -1431,7 +1431,7 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.starty = 0; session.params.pixels = dev->model->x_size_calib_mm * sensor.optical_res / MM_PER_INCH / 2; session.params.lines = 1; - session.params.depth = 8; + session.params.depth = dev->model->bpp_color_values.front(); session.params.channels = 3; session.params.scan_method = dev->settings.scan_method; session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index 65ee5ae0d..c82da51f7 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -2481,7 +2481,7 @@ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se settings.pixels = dev->model->x_size_calib_mm * resolution / MM_PER_INCH; settings.requested_pixels = settings.pixels; settings.lines = 2; - settings.depth = 8; + settings.depth = dev->model->bpp_gray_values.front(); settings.color_filter = ColorFilter::RED; settings.disable_interpolation = 0; diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index 61d6ca08f..70e1c8c8b 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -2855,7 +2855,7 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.starty = 0; session.params.pixels = num_pixels; session.params.lines = 1; - session.params.depth = 16; + session.params.depth = dev->model->bpp_color_values.front(); session.params.channels = 3; session.params.scan_method = dev->settings.scan_method; session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index b3fd73e57..87cf5d89a 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -1779,7 +1779,7 @@ void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.starty = 0; session.params.pixels = num_pixels; session.params.lines = 1; - session.params.depth = 8; + session.params.depth = dev->model->bpp_color_values.front(); session.params.channels = channels; session.params.scan_method = dev->settings.scan_method; session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; From fa594d965d3903f258728ebd6eaaa7d3c9235332 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:06 +0300 Subject: [PATCH 03/10] genesys: Correctly initialize warmup registers in transparency scans --- backend/genesys/gl124.cpp | 18 +++++++++++++----- backend/genesys/gl841.cpp | 18 +++++++++++++----- backend/genesys/gl843.cpp | 18 +++++++++++++----- 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 2a3c79e61..408db144d 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -1424,6 +1424,17 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se *reg = dev->reg; + auto flags = ScanFlag::DISABLE_SHADING | + ScanFlag::DISABLE_GAMMA | + ScanFlag::SINGLE_LINE | + ScanFlag::IGNORE_STAGGER_OFFSET | + ScanFlag::IGNORE_COLOR_OFFSET; + if (dev->settings.scan_method == ScanMethod::TRANSPARENCY || + dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED) + { + flags |= ScanFlag::USE_XPA; + } + ScanSession session; session.params.xres = sensor.optical_res; session.params.yres = dev->motor.base_ydpi; @@ -1436,11 +1447,8 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.scan_method = dev->settings.scan_method; session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; session.params.color_filter = dev->settings.color_filter; - session.params.flags = ScanFlag::DISABLE_SHADING | - ScanFlag::DISABLE_GAMMA | - ScanFlag::SINGLE_LINE | - ScanFlag::IGNORE_STAGGER_OFFSET | - ScanFlag::IGNORE_COLOR_OFFSET; + session.params.flags = flags; + compute_session(dev, session, sensor); init_regs_for_scan_session(dev, sensor, reg, session); diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index 70e1c8c8b..9b1e5aa5d 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -2848,6 +2848,17 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se dev->frontend.set_offset(1, 0x80); dev->frontend.set_offset(2, 0x80); + auto flags = ScanFlag::DISABLE_SHADING | + ScanFlag::DISABLE_GAMMA | + ScanFlag::SINGLE_LINE | + ScanFlag::IGNORE_STAGGER_OFFSET | + ScanFlag::IGNORE_COLOR_OFFSET; + if (dev->settings.scan_method == ScanMethod::TRANSPARENCY || + dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED) + { + flags |= ScanFlag::USE_XPA; + } + ScanSession session; session.params.xres = sensor.optical_res; session.params.yres = dev->settings.yres; @@ -2860,11 +2871,8 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.scan_method = dev->settings.scan_method; session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; session.params.color_filter = dev->settings.color_filter; - session.params.flags = ScanFlag::DISABLE_SHADING | - ScanFlag::DISABLE_GAMMA | - ScanFlag::SINGLE_LINE | - ScanFlag::IGNORE_STAGGER_OFFSET | - ScanFlag::IGNORE_COLOR_OFFSET; + session.params.flags = flags; + compute_session(dev, session, sensor); init_regs_for_scan_session(dev, sensor, local_reg, session); diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 87cf5d89a..a5625c64f 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -1772,6 +1772,17 @@ void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se *reg = dev->reg; + auto flags = ScanFlag::DISABLE_SHADING | + ScanFlag::DISABLE_GAMMA | + ScanFlag::SINGLE_LINE | + ScanFlag::IGNORE_STAGGER_OFFSET | + ScanFlag::IGNORE_COLOR_OFFSET; + if (dev->settings.scan_method == ScanMethod::TRANSPARENCY || + dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED) + { + flags |= ScanFlag::USE_XPA; + } + ScanSession session; session.params.xres = resolution; session.params.yres = resolution; @@ -1784,11 +1795,8 @@ void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se session.params.scan_method = dev->settings.scan_method; session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; session.params.color_filter = dev->settings.color_filter; - session.params.flags = ScanFlag::DISABLE_SHADING | - ScanFlag::DISABLE_GAMMA | - ScanFlag::SINGLE_LINE | - ScanFlag::IGNORE_STAGGER_OFFSET | - ScanFlag::IGNORE_COLOR_OFFSET; + session.params.flags = flags; + compute_session(dev, session, calib_sensor); init_regs_for_scan_session(dev, calib_sensor, reg, session); From 0ab6e786579441ac0ad87b4b67580a886c4ec151 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:07 +0300 Subject: [PATCH 04/10] genesys: Compare all subsequent scans during lamp warmup --- backend/genesys/genesys.cpp | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index a8440f167..2169f5aa4 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3445,9 +3445,11 @@ static void genesys_warmup_lamp(Genesys_Device* dev) std::vector first_line(total_size); std::vector second_line(total_size); - do - { - DBG(DBG_info, "%s: one more loop\n", __func__); + do { + DBG(DBG_info, "%s: one more loop\n", __func__); + + first_line = second_line; + dev->cmd_set->begin_scan(dev, sensor, &dev->reg, false); if (is_testing_mode()) { @@ -3458,22 +3460,6 @@ static void genesys_warmup_lamp(Genesys_Device* dev) wait_until_buffer_non_empty(dev); - try { - sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size); - } catch (...) { - // FIXME: document why this retry is here - sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size); - } - - dev->cmd_set->end_scan(dev, &dev->reg, true); - - dev->interface->sleep_ms(1000); - seconds++; - - dev->cmd_set->begin_scan(dev, sensor, &dev->reg, false); - - wait_until_buffer_non_empty(dev); - sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); dev->cmd_set->end_scan(dev, &dev->reg, true); From 40cb193cc37d1a348fb621511b86509280d63d2e Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:08 +0300 Subject: [PATCH 05/10] genesys: Fix debug messages during lamp warmup on 16-bit scans --- backend/genesys/genesys.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 2169f5aa4..245aaa66e 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3492,13 +3492,6 @@ static void genesys_warmup_lamp(Genesys_Device* dev) break; } else { - if (DBG_LEVEL >= DBG_data) - { - sanei_genesys_write_pnm_file("gl_warmup1.pnm", first_line.data(), 8, channels, - total_size / (lines * channels), lines); - sanei_genesys_write_pnm_file("gl_warmup2.pnm", second_line.data(), 8, channels, - total_size / (lines * channels), lines); - } DBG(DBG_info, "%s: average 1 = %.2f, average 2 = %.2f\n", __func__, first_average, second_average); /* if delta below 15/255 ~= 5.8%, lamp is considred warm enough */ @@ -3507,6 +3500,15 @@ static void genesys_warmup_lamp(Genesys_Device* dev) break; } + if (DBG_LEVEL >= DBG_data) { + sanei_genesys_write_pnm_file("gl_warmup1.pnm", first_line.data(), + dev->session.params.depth, channels, + total_size / (lines * channels), lines); + sanei_genesys_write_pnm_file("gl_warmup2.pnm", second_line.data(), + dev->session.params.depth, channels, + total_size / (lines * channels), lines); + } + /* sleep another second before next loop */ dev->interface->sleep_ms(1000); seconds++; From c2480ac0649aaa5af1540695e38e9b78a2ba18d5 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:09 +0300 Subject: [PATCH 06/10] genesys: Simplify calculation of warmup success criteria --- backend/genesys/genesys.cpp | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 245aaa66e..280297f79 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3430,7 +3430,6 @@ static void genesys_warmup_lamp(Genesys_Device* dev) unsigned seconds = 0; double first_average = 0; double second_average = 0; - int difference = 255; const auto& sensor = sanei_genesys_find_sensor_any(dev); @@ -3481,25 +3480,6 @@ static void genesys_warmup_lamp(Genesys_Device* dev) first_average /= total_pixels; second_average /= total_pixels; - if (dev->session.params.depth == 16) { - difference = static_cast(std::fabs(first_average - second_average)); - DBG(DBG_info, "%s: average = %.2f, diff = %.3f\n", __func__, - 100 * ((second_average) / (256 * 256)), - 100 * (difference / second_average)); - - if (second_average > (100 * 256) - && (difference / second_average) < 0.002) - break; - } else { - - DBG(DBG_info, "%s: average 1 = %.2f, average 2 = %.2f\n", __func__, first_average, - second_average); - /* if delta below 15/255 ~= 5.8%, lamp is considred warm enough */ - if (fabs (first_average - second_average) < 15 - && second_average > 55) - break; - } - if (DBG_LEVEL >= DBG_data) { sanei_genesys_write_pnm_file("gl_warmup1.pnm", first_line.data(), dev->session.params.depth, channels, @@ -3509,7 +3489,15 @@ static void genesys_warmup_lamp(Genesys_Device* dev) total_size / (lines * channels), lines); } - /* sleep another second before next loop */ + DBG(DBG_info, "%s: average 1 = %.2f, average 2 = %.2f\n", __func__, first_average, + second_average); + + if (second_average > 0 && + std::fabs(first_average - second_average) / second_average < 0.005) + { + break; + } + dev->interface->sleep_ms(1000); seconds++; } while (seconds < WARMUP_TIME); From 8b653560476b5c74cc793880432de410c40a20ed Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:10 +0300 Subject: [PATCH 07/10] genesys: Fix calculation of averages during lamp warmup --- backend/genesys/genesys.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 280297f79..4601001a2 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3428,8 +3428,6 @@ static void genesys_warmup_lamp(Genesys_Device* dev) { DBG_HELPER(dbg); unsigned seconds = 0; - double first_average = 0; - double second_average = 0; const auto& sensor = sanei_genesys_find_sensor_any(dev); @@ -3462,18 +3460,18 @@ static void genesys_warmup_lamp(Genesys_Device* dev) sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); dev->cmd_set->end_scan(dev, &dev->reg, true); - /* compute difference between the two scans */ + // compute difference between the two scans + double first_average = 0; + double second_average = 0; for (unsigned pixel = 0; pixel < total_size; pixel++) { // 16 bit data if (dev->session.params.depth == 16) { - first_average += (first_line[pixel] + first_line[pixel + 1] * 256); - second_average += (second_line[pixel] + second_line[pixel + 1] * 256); - pixel++; - } - else - { - first_average += first_line[pixel]; - second_average += second_line[pixel]; + first_average += (first_line[pixel] + first_line[pixel + 1] * 256); + second_average += (second_line[pixel] + second_line[pixel + 1] * 256); + pixel++; + } else { + first_average += first_line[pixel]; + second_average += second_line[pixel]; } } From 21d9079eb760bceba9e95e9afb957def63ffcecb Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:11 +0300 Subject: [PATCH 08/10] genesys: Invert meaning of ModelFlag::SKIP_WARMUP --- backend/genesys/enums.h | 4 +- backend/genesys/genesys.cpp | 2 +- backend/genesys/tables_model.cpp | 111 +++++++++++-------------------- 3 files changed, 40 insertions(+), 77 deletions(-) diff --git a/backend/genesys/enums.h b/backend/genesys/enums.h index 32c54609b..5bd0cece5 100644 --- a/backend/genesys/enums.h +++ b/backend/genesys/enums.h @@ -474,8 +474,8 @@ enum class ModelFlag : unsigned // use 14-bit gamma table instead of 12-bit GAMMA_14BIT = 1 << 1, - // skip lamp warmup (genesys_warmup()) - SKIP_WARMUP = 1 << 4, + // perform lamp warmup + WARMUP = 1 << 4, // repark head and check for lock by moving without scanning REPARK = 1 << 7, diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 4601001a2..efc376d40 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3529,7 +3529,7 @@ static void genesys_start_scan(Genesys_Device* dev, bool lamp_off) /* wait for lamp warmup : until a warmup for TRANSPARENCY is designed, skip * it when scanning from XPA. */ - if (!has_flag(dev->model->flags, ModelFlag::SKIP_WARMUP) && + if (has_flag(dev->model->flags, ModelFlag::WARMUP) && (dev->settings.scan_method == ScanMethod::FLATBED)) { genesys_warmup_lamp(dev); diff --git a/backend/genesys/tables_model.cpp b/backend/genesys/tables_model.cpp index 9645b6f66..eca2d6abc 100644 --- a/backend/genesys/tables_model.cpp +++ b/backend/genesys/tables_model.cpp @@ -192,8 +192,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_35; model.gpio_id = GpioId::CANON_LIDE_35; model.motor_id = MotorId::CANON_LIDE_35; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_WHITE_CALIBRATION | + model.flags = ModelFlag::DARK_WHITE_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | @@ -247,8 +246,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::KVSS080; model.gpio_id = GpioId::KVSS080; model.motor_id = MotorId::KVSS080; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA; + model.flags = ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW; model.search_lines = 100; @@ -299,7 +297,6 @@ void genesys_init_usb_device_tables() model.gpio_id = GpioId::G4050; model.motor_id = MotorId::G4050; model.flags = ModelFlag::SHADING_REPARK | - ModelFlag::SKIP_WARMUP | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; model.search_lines = 100; @@ -348,8 +345,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::G4050; model.gpio_id = GpioId::G4050; model.motor_id = MotorId::G4050; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; model.search_lines = 100; @@ -400,8 +396,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::G4050; model.gpio_id = GpioId::G4050; model.motor_id = MotorId::G4050; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; model.search_lines = 100; @@ -465,8 +460,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_4400F; model.gpio_id = GpioId::CANON_4400F; model.motor_id = MotorId::CANON_4400F; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::SHADING_REPARK | ModelFlag::UTA_NO_SECONDARY_MOTOR; @@ -537,8 +531,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_8400F; model.gpio_id = GpioId::CANON_8400F; model.motor_id = MotorId::CANON_8400F; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::SHADING_REPARK; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; @@ -603,8 +596,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_8600F; model.gpio_id = GpioId::CANON_8600F; model.motor_id = MotorId::CANON_8600F; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::SHADING_REPARK; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; @@ -656,8 +648,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_200; model.gpio_id = GpioId::CANON_LIDE_200; model.motor_id = MotorId::CANON_LIDE_100; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::SIS_SENSOR | + model.flags = ModelFlag::SIS_SENSOR | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::CUSTOM_GAMMA; @@ -712,8 +703,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_110; model.gpio_id = GpioId::CANON_LIDE_110; model.motor_id = MotorId::CANON_LIDE_110; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | @@ -766,8 +756,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_120; model.gpio_id = GpioId::CANON_LIDE_120; model.motor_id = MotorId::CANON_LIDE_120; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | @@ -822,8 +811,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_110; model.gpio_id = GpioId::CANON_LIDE_210; model.motor_id = MotorId::CANON_LIDE_210; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | @@ -878,8 +866,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_110; model.gpio_id = GpioId::CANON_LIDE_210; model.motor_id = MotorId::CANON_LIDE_210; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | @@ -936,7 +923,6 @@ void genesys_init_usb_device_tables() model.gpio_id = GpioId::CANON_LIDE_200; model.motor_id = MotorId::CANON_LIDE_200; model.flags = ModelFlag::UNTESTED | - ModelFlag::SKIP_WARMUP | ModelFlag::SIS_SENSOR | ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; @@ -992,8 +978,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_700F; model.gpio_id = GpioId::CANON_LIDE_700F; model.motor_id = MotorId::CANON_LIDE_700; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::SIS_SENSOR | + model.flags = ModelFlag::SIS_SENSOR | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::CUSTOM_GAMMA; @@ -1048,8 +1033,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_200; model.gpio_id = GpioId::CANON_LIDE_200; model.motor_id = MotorId::CANON_LIDE_200; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::SIS_SENSOR | + model.flags = ModelFlag::SIS_SENSOR | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::CUSTOM_GAMMA; @@ -1106,8 +1090,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_35; model.gpio_id = GpioId::CANON_LIDE_35; model.motor_id = MotorId::CANON_LIDE_35; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_WHITE_CALIBRATION | + model.flags = ModelFlag::DARK_WHITE_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_COPY_SW | @@ -1162,8 +1145,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_LIDE_80; model.gpio_id = GpioId::CANON_LIDE_80; model.motor_id = MotorId::CANON_LIDE_80; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_WHITE_CALIBRATION | + model.flags = ModelFlag::DARK_WHITE_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | @@ -1217,7 +1199,6 @@ void genesys_init_usb_device_tables() model.gpio_id = GpioId::HP2300; model.motor_id = MotorId::HP2300; model.flags = ModelFlag::GAMMA_14BIT | - ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW; @@ -1271,7 +1252,6 @@ void genesys_init_usb_device_tables() model.motor_id = MotorId::HP2400; model.flags = ModelFlag::GAMMA_14BIT | ModelFlag::DARK_CALIBRATION | - ModelFlag::SKIP_WARMUP | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_SCAN_SW; model.search_lines = 132; @@ -1324,7 +1304,6 @@ void genesys_init_usb_device_tables() model.motor_id = MotorId::XP200; model.flags = ModelFlag::GAMMA_14BIT | ModelFlag::CUSTOM_GAMMA | - ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 132; @@ -1375,7 +1354,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_HP3670; model.gpio_id = GpioId::HP3670; model.motor_id = MotorId::HP3670; - model.flags = ModelFlag::GAMMA_14BIT | + model.flags = ModelFlag::WARMUP | + ModelFlag::GAMMA_14BIT | ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_SCAN_SW; @@ -1526,7 +1506,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_5345; model.gpio_id = GpioId::MD_5345; model.motor_id = MotorId::MD_5345; - model.flags = ModelFlag::GAMMA_14BIT | + model.flags = ModelFlag::WARMUP | + ModelFlag::GAMMA_14BIT | ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_COPY_SW | @@ -1581,8 +1562,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_XP300; model.gpio_id = GpioId::XP300; model.motor_id = MotorId::XP300; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -1632,8 +1612,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_XP300; model.gpio_id = GpioId::DP665; model.motor_id = MotorId::DP665; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -1683,8 +1662,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_XP300; model.gpio_id = GpioId::DP665; model.motor_id = MotorId::ROADWARRIOR; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -1734,8 +1712,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_XP300; model.gpio_id = GpioId::DP665; model.motor_id = MotorId::ROADWARRIOR; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::NO_CALIBRATION | + model.flags = ModelFlag::NO_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::UNTESTED; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW; @@ -1787,8 +1764,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_XP300; model.gpio_id = GpioId::DP665; model.motor_id = MotorId::ROADWARRIOR; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -1838,8 +1814,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_DSM600; model.gpio_id = GpioId::DP665; model.motor_id = MotorId::DSMOBILE_600; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -1890,8 +1865,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_DSM600; model.gpio_id = GpioId::DP665; model.motor_id = MotorId::DSMOBILE_600; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -1941,8 +1915,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_DSM600; model.gpio_id = GpioId::DP685; model.motor_id = MotorId::XP300; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -1994,8 +1967,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_XP300; model.gpio_id = GpioId::XP300; model.motor_id = MotorId::XP300; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -2047,8 +2019,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_XP300; model.gpio_id = GpioId::XP300; model.motor_id = MotorId::XP300; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::UNTESTED; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; @@ -2099,7 +2070,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_5345; model.gpio_id = GpioId::MD_5345; model.motor_id = MotorId::MD_5345; - model.flags = ModelFlag::GAMMA_14BIT | + model.flags = ModelFlag::WARMUP | + ModelFlag::GAMMA_14BIT | ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_COPY_SW | @@ -2154,7 +2126,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_5345; model.gpio_id = GpioId::MD_5345; model.motor_id = MotorId::MD_5345; - model.flags = ModelFlag::GAMMA_14BIT | + model.flags = ModelFlag::WARMUP | + ModelFlag::GAMMA_14BIT | ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_COPY_SW | @@ -2210,8 +2183,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::WOLFSON_XP300; model.gpio_id = GpioId::DP665; model.motor_id = MotorId::ROADWARRIOR; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_PAGE_LOADED_SW | GENESYS_HAS_CALIBRATE; model.search_lines = 400; @@ -2264,7 +2236,6 @@ void genesys_init_usb_device_tables() model.motor_id = MotorId::PLUSTEK_OPTICPRO_3600; model.flags = ModelFlag::UNTESTED | // not fully working yet ModelFlag::CUSTOM_GAMMA | - ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION; model.buttons = GENESYS_HAS_NO_BUTTONS; model.search_lines = 200; @@ -2329,7 +2300,6 @@ void genesys_init_usb_device_tables() model.motor_id = MotorId::PLUSTEK_OPTICFILM_7200I; model.flags = ModelFlag::CUSTOM_GAMMA | - ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::INVERTED_16BIT_DATA; @@ -2408,7 +2378,6 @@ void genesys_init_usb_device_tables() model.motor_id = MotorId::PLUSTEK_OPTICFILM_7300; model.flags = ModelFlag::CUSTOM_GAMMA | - ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK; @@ -2479,7 +2448,6 @@ void genesys_init_usb_device_tables() model.motor_id = MotorId::PLUSTEK_OPTICFILM_7400; model.flags = ModelFlag::CUSTOM_GAMMA | - ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK; @@ -2550,7 +2518,6 @@ void genesys_init_usb_device_tables() model.motor_id = MotorId::PLUSTEK_OPTICFILM_7500I; model.flags = ModelFlag::CUSTOM_GAMMA | - ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK; @@ -2621,7 +2588,6 @@ void genesys_init_usb_device_tables() model.motor_id = MotorId::PLUSTEK_OPTICFILM_8200I; model.flags = ModelFlag::CUSTOM_GAMMA | - ModelFlag::SKIP_WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK; @@ -2682,7 +2648,6 @@ void genesys_init_usb_device_tables() ModelFlag::GAMMA_14BIT | ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | - ModelFlag::SKIP_WARMUP | ModelFlag::NO_CALIBRATION; model.buttons = GENESYS_HAS_NO_BUTTONS; @@ -2734,8 +2699,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::PLUSTEK_OPTICBOOK_3800; model.gpio_id = GpioId::PLUSTEK_OPTICBOOK_3800; model.motor_id = MotorId::PLUSTEK_OPTICBOOK_3800; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA; + model.flags = ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_NO_BUTTONS; // TODO there are 4 buttons to support model.search_lines = 100; @@ -2785,8 +2749,7 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::IMG101; model.gpio_id = GpioId::IMG101; model.motor_id = MotorId::IMG101; - model.flags = ModelFlag::SKIP_WARMUP | - ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::CUSTOM_GAMMA | ModelFlag::UNTESTED; model.buttons = GENESYS_HAS_NO_BUTTONS ; model.search_lines = 100; From f22dd4d7b204e1b1e328bc2234b7a022f88ede57 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:12 +0300 Subject: [PATCH 09/10] genesys: Move lamp to transparency adapter if needed during lamp warmup --- backend/genesys/genesys.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index efc376d40..8a7869246 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3530,8 +3530,14 @@ static void genesys_start_scan(Genesys_Device* dev, bool lamp_off) /* wait for lamp warmup : until a warmup for TRANSPARENCY is designed, skip * it when scanning from XPA. */ if (has_flag(dev->model->flags, ModelFlag::WARMUP) && - (dev->settings.scan_method == ScanMethod::FLATBED)) + (dev->settings.scan_method != ScanMethod::TRANSPARENCY_INFRARED)) { + if (dev->settings.scan_method == ScanMethod::TRANSPARENCY || + dev->settings.scan_method == ScanMethod::TRANSPARENCY_INFRARED) + { + dev->cmd_set->move_to_ta(dev); + } + genesys_warmup_lamp(dev); } From ea94970b6a2d22cec3af797bbce75120ef065259 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Thu, 9 Apr 2020 23:57:13 +0300 Subject: [PATCH 10/10] genesys: Enable lamp warmup on scanners that need it --- backend/genesys/tables_model.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/backend/genesys/tables_model.cpp b/backend/genesys/tables_model.cpp index eca2d6abc..9fab9e4f9 100644 --- a/backend/genesys/tables_model.cpp +++ b/backend/genesys/tables_model.cpp @@ -296,7 +296,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::G4050; model.gpio_id = GpioId::G4050; model.motor_id = MotorId::G4050; - model.flags = ModelFlag::SHADING_REPARK | + model.flags = ModelFlag::WARMUP | + ModelFlag::SHADING_REPARK | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; model.search_lines = 100; @@ -345,7 +346,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::G4050; model.gpio_id = GpioId::G4050; model.motor_id = MotorId::G4050; - model.flags = ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::WARMUP | + ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; model.search_lines = 100; @@ -396,7 +398,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::G4050; model.gpio_id = GpioId::G4050; model.motor_id = MotorId::G4050; - model.flags = ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::WARMUP | + ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; model.search_lines = 100; @@ -460,7 +463,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_4400F; model.gpio_id = GpioId::CANON_4400F; model.motor_id = MotorId::CANON_4400F; - model.flags = ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::WARMUP | + ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::SHADING_REPARK | ModelFlag::UTA_NO_SECONDARY_MOTOR; @@ -531,7 +535,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_8400F; model.gpio_id = GpioId::CANON_8400F; model.motor_id = MotorId::CANON_8400F; - model.flags = ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::WARMUP | + ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::SHADING_REPARK; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; @@ -596,7 +601,8 @@ void genesys_init_usb_device_tables() model.adc_id = AdcId::CANON_8600F; model.gpio_id = GpioId::CANON_8600F; model.motor_id = MotorId::CANON_8600F; - model.flags = ModelFlag::DARK_CALIBRATION | + model.flags = ModelFlag::WARMUP | + ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::SHADING_REPARK; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; @@ -2299,7 +2305,8 @@ void genesys_init_usb_device_tables() model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7200I; model.motor_id = MotorId::PLUSTEK_OPTICFILM_7200I; - model.flags = ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::WARMUP | + ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK | ModelFlag::INVERTED_16BIT_DATA; @@ -2377,7 +2384,8 @@ void genesys_init_usb_device_tables() model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7300; model.motor_id = MotorId::PLUSTEK_OPTICFILM_7300; - model.flags = ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::WARMUP | + ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK; @@ -2517,7 +2525,8 @@ void genesys_init_usb_device_tables() model.gpio_id = GpioId::PLUSTEK_OPTICFILM_7500I; model.motor_id = MotorId::PLUSTEK_OPTICFILM_7500I; - model.flags = ModelFlag::CUSTOM_GAMMA | + model.flags = ModelFlag::WARMUP | + ModelFlag::CUSTOM_GAMMA | ModelFlag::DARK_CALIBRATION | ModelFlag::SHADING_REPARK;