From bdc671b58be6a74e944d9c88119f25f3c381682a Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:20 +0200 Subject: [PATCH 01/13] genesys: Don't perform register writes in init_regs_for_shading() --- backend/genesys/genesys.cpp | 20 ++++++++++++++++++++ backend/genesys/gl124.cpp | 2 -- backend/genesys/gl841.cpp | 2 -- backend/genesys/gl843.cpp | 2 -- backend/genesys/gl846.cpp | 2 -- backend/genesys/gl847.cpp | 2 -- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index d18b85f8e..303d3f1f6 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -2943,6 +2943,10 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen dev->interface->record_progress_message("init_regs_for_shading"); dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + dev->interface->record_progress_message("genesys_dark_white_shading_calibration"); genesys_dark_white_shading_calibration(dev, sensor); } else { @@ -2953,6 +2957,10 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen dev->interface->record_progress_message("init_regs_for_shading"); dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + dev->interface->record_progress_message("genesys_dark_shading_calibration"); genesys_dark_shading_calibration(dev, sensor); genesys_repark_sensor_before_shading(dev); @@ -2961,6 +2969,10 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen dev->interface->record_progress_message("init_regs_for_shading2"); dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + dev->interface->record_progress_message("genesys_white_shading_calibration"); genesys_white_shading_calibration(dev, sensor); genesys_repark_sensor_after_white_shading(dev); @@ -3048,6 +3060,10 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + try { genesys_dark_shading_calibration(dev, sensor); } catch (...) { @@ -3070,6 +3086,10 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + try { genesys_white_shading_calibration(dev, sensor); genesys_repark_sensor_after_white_shading(dev); diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 9f9eb8f91..3b5c9c3dd 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -1240,8 +1240,6 @@ void CommandSetGl124::init_regs_for_shading(Genesys_Device* dev, const Genesys_S throw; } sanei_genesys_set_motor_power(regs, false); - - dev->interface->write_registers(regs); } void CommandSetGl124::wait_for_motor_stop(Genesys_Device* dev) const diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index 16ed21594..e78bc3744 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -2494,8 +2494,6 @@ void CommandSetGl841::init_regs_for_shading(Genesys_Device* dev, const Genesys_S compute_session(dev, session, calib_sensor); init_regs_for_scan_session(dev, calib_sensor, ®s, session); - - dev->interface->write_registers(regs); } // set up registers for the actual scan diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 02a412ce9..4fb04538b 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -1782,8 +1782,6 @@ void CommandSetGl843::init_regs_for_shading(Genesys_Device* dev, const Genesys_S dev->calib_session = session; dev->calib_total_bytes_to_read = session.output_total_bytes_raw; - - dev->interface->write_registers(regs); } /** @brief set up registers for the actual scan diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index 9730892db..8e8d319fb 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -1012,8 +1012,6 @@ void CommandSetGl846::init_regs_for_shading(Genesys_Device* dev, const Genesys_S init_regs_for_scan_session(dev, calib_sensor, ®s, session); - dev->interface->write_registers(regs); - /* we use ModelFlag::SHADING_REPARK */ dev->set_head_pos_zero(ScanHeadId::PRIMARY); } diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index 75ec80dc8..9a4581c3f 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -1012,8 +1012,6 @@ void CommandSetGl847::init_regs_for_shading(Genesys_Device* dev, const Genesys_S init_regs_for_scan_session(dev, calib_sensor, ®s, session); - dev->interface->write_registers(regs); - /* we use ModelFlag::SHADING_REPARK */ dev->set_head_pos_zero(ScanHeadId::PRIMARY); } From 55e32001583ddee2da0a911dfe2ecd1a593fcc91 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:21 +0200 Subject: [PATCH 02/13] genesys: Don't write registers in init_regs_for_coarse_calibration() --- backend/genesys/genesys.cpp | 12 ++++++++++++ backend/genesys/gl124.cpp | 2 -- backend/genesys/gl841.cpp | 5 ----- backend/genesys/gl843.cpp | 2 -- backend/genesys/gl846.cpp | 2 -- backend/genesys/gl847.cpp | 2 -- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 303d3f1f6..8e77ae93c 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -2872,6 +2872,10 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen dev->interface->record_progress_message("init_regs_for_coarse_calibration"); dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, dev->calib_reg); + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + dev->interface->record_progress_message("genesys_coarse_calibration"); genesys_coarse_calibration(dev, sensor); } @@ -2913,6 +2917,10 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen dev->interface->record_progress_message("init_regs_for_coarse_calibration"); dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, dev->calib_reg); + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + dev->interface->record_progress_message("genesys_coarse_calibration"); genesys_coarse_calibration(dev, sensor); } @@ -3044,6 +3052,10 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se { dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, dev->calib_reg); + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + genesys_coarse_calibration(dev, sensor); } diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 3b5c9c3dd..8e5509c97 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -1170,8 +1170,6 @@ void CommandSetGl124::init_regs_for_coarse_calibration(Genesys_Device* dev, DBG(DBG_info, "%s: optical sensor res: %d dpi, actual res: %d\n", __func__, sensor.optical_res / sensor.ccd_pixels_per_system_pixel(), dev->settings.xres); - - dev->interface->write_registers(regs); } diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index e78bc3744..cd7e5a34e 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -2425,11 +2425,6 @@ void CommandSetGl841::init_regs_for_coarse_calibration(Genesys_Device* dev, DBG(DBG_info, "%s: optical sensor res: %d dpi, actual res: %d\n", __func__, sensor.optical_res / sensor.ccd_pixels_per_system_pixel(), dev->settings.xres); - - dev->interface->write_registers(regs); - -/* if (DBG_LEVEL >= DBG_info) - sanei_gl841_print_registers (regs);*/ } diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 4fb04538b..629f00113 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -1678,8 +1678,6 @@ void CommandSetGl843::init_regs_for_coarse_calibration(Genesys_Device* dev, DBG(DBG_info, "%s: optical sensor res: %d dpi, actual res: %d\n", __func__, sensor.optical_res / sensor.ccd_pixels_per_system_pixel(), dev->settings.xres); - - dev->interface->write_registers(regs); } static bool should_calibrate_only_active_area(const Genesys_Device& dev, diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index 8e8d319fb..619f89071 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -952,8 +952,6 @@ void CommandSetGl846::init_regs_for_coarse_calibration(Genesys_Device* dev, DBG(DBG_info, "%s: optical sensor res: %d dpi, actual res: %d\n", __func__, sensor.optical_res / sensor.ccd_pixels_per_system_pixel(), dev->settings.xres); - - dev->interface->write_registers(regs); } // init registers for shading calibration diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index 9a4581c3f..442127aa4 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -960,8 +960,6 @@ void CommandSetGl847::init_regs_for_coarse_calibration(Genesys_Device* dev, DBG(DBG_info, "%s: optical sensor res: %d dpi, actual res: %d\n", __func__, sensor.optical_res / sensor.ccd_pixels_per_system_pixel(), dev->settings.xres); - - dev->interface->write_registers(regs); } // init registers for shading calibration From dff52ad7136c5d5f1e83f888d660820fbff85b94 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:22 +0200 Subject: [PATCH 03/13] genesys: Don't write registers in init_regs_for_warmup() --- backend/genesys/genesys.cpp | 2 ++ backend/genesys/gl124.cpp | 1 - backend/genesys/gl646.cpp | 1 - backend/genesys/gl841.cpp | 2 -- backend/genesys/gl843.cpp | 1 - 5 files changed, 2 insertions(+), 5 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 8e77ae93c..caea54d4e 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -3177,6 +3177,8 @@ static void genesys_warmup_lamp(Genesys_Device* dev) const auto& sensor = sanei_genesys_find_sensor_any(dev); dev->cmd_set->init_regs_for_warmup(dev, sensor, &dev->reg, &channels, &total_size); + dev->interface->write_registers(dev->reg); + std::vector first_line(total_size); std::vector second_line(total_size); diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 8e5509c97..e64eedcea 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -1956,7 +1956,6 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se *total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */ sanei_genesys_set_motor_power(*reg, false); - dev->interface->write_registers(*reg); } /** @brief default GPIO values diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index 6d69f7677..a921995c6 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -2636,7 +2636,6 @@ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se // now registers are ok, write them to scanner gl646_set_fe(dev, local_sensor, AFE_SET, settings.xres); - dev->interface->write_registers(*local_reg); } diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index cd7e5a34e..f9aab5c42 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -3387,8 +3387,6 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se num_pixels = session.output_pixels; *total_size = num_pixels * 3 * 2 * 1; /* colors * bytes_per_color * scan lines */ - - dev->interface->write_registers(*local_reg); } diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 629f00113..9ec911c3f 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -2428,7 +2428,6 @@ void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se init_regs_for_scan_session(dev, calib_sensor, reg, session); sanei_genesys_set_motor_power(*reg, false); - dev->interface->write_registers(*reg); } /** From b1b57026ddaf8a04a68590c6f745cad1463d21c5 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:23 +0200 Subject: [PATCH 04/13] genesys: Move writing to registers to calibration functions --- backend/genesys/genesys.cpp | 95 +++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 45 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index caea54d4e..c66f579c8 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -1627,10 +1627,24 @@ static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sens */ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_Sensor& sensor, std::vector& out_average_data, - bool is_dark, const std::string& log_filename_prefix) + bool is_dark, const std::string& log_filename_prefix, + const char* shading_progress_msg, + const char* function_progress_msg) { DBG_HELPER(dbg); + if (shading_progress_msg) { // FIXME: remove when updating tests + dev->interface->record_progress_message(shading_progress_msg); + } + dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + + if (function_progress_msg) { // FIXME: remove when updating tests + dev->interface->record_progress_message(function_progress_msg); + } debug_dump(DBG_info, dev->calib_session); size_t size; @@ -1736,10 +1750,13 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ } -static void genesys_dark_shading_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor) +static void genesys_dark_shading_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, + const char* shading_progress_msg, + const char* function_progress_msg) { DBG_HELPER(dbg); - genesys_shading_calibration_impl(dev, sensor, dev->dark_average_data, true, "gl_black_"); + genesys_shading_calibration_impl(dev, sensor, dev->dark_average_data, true, "gl_black_", + shading_progress_msg, function_progress_msg); } /* * this function builds dummy dark calibration data so that we can @@ -1841,10 +1858,13 @@ static void genesys_repark_sensor_after_white_shading(Genesys_Device* dev) } } -static void genesys_white_shading_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor) +static void genesys_white_shading_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, + const char* shading_progress_msg, + const char* function_progress_msg) { DBG_HELPER(dbg); - genesys_shading_calibration_impl(dev, sensor, dev->white_average_data, false, "gl_white_"); + genesys_shading_calibration_impl(dev, sensor, dev->white_average_data, false, "gl_white_", + shading_progress_msg, function_progress_msg); } // This calibration uses a scan over the calibration target, comprising a black and a white strip. @@ -1853,6 +1873,19 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor) { DBG_HELPER_ARGS(dbg, "lines = %zu", dev->calib_lines); + + // FIXME: remove when updating tests + dev->interface->record_progress_message("init_regs_for_shading"); + + dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + + // FIXME: remove when updating tests + dev->interface->record_progress_message("genesys_dark_white_shading_calibration"); + size_t size; uint32_t pixels_per_line; uint8_t channels; @@ -2948,41 +2981,25 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen // shading calibration if (has_flag(dev->model->flags, ModelFlag::DARK_WHITE_CALIBRATION)) { - dev->interface->record_progress_message("init_regs_for_shading"); - dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); - - if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); - } - - dev->interface->record_progress_message("genesys_dark_white_shading_calibration"); + // FIXME: enable when updating tests + // dev->interface->record_progress_message("genesys_dark_white_shading_calibration"); genesys_dark_white_shading_calibration(dev, sensor); } else { DBG(DBG_proc, "%s : genesys_dark_shading_calibration dev->calib_reg ", __func__); debug_dump(DBG_proc, dev->calib_reg); if (has_flag(dev->model->flags, ModelFlag::DARK_CALIBRATION)) { - dev->interface->record_progress_message("init_regs_for_shading"); - dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); - - if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); - } - - dev->interface->record_progress_message("genesys_dark_shading_calibration"); - genesys_dark_shading_calibration(dev, sensor); + // FIXME: enable when updating tests + // dev->interface->record_progress_message("genesys_dark_shading_calibration"); + genesys_dark_shading_calibration(dev, sensor, "init_regs_for_shading", + "genesys_dark_shading_calibration"); genesys_repark_sensor_before_shading(dev); } - dev->interface->record_progress_message("init_regs_for_shading2"); - dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); - - if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); - } - - dev->interface->record_progress_message("genesys_white_shading_calibration"); - genesys_white_shading_calibration(dev, sensor); + // FIXME: enable when updating tests + // dev->interface->record_progress_message("genesys_white_shading_calibration"); + genesys_white_shading_calibration(dev, sensor, "init_regs_for_shading2", + "genesys_white_shading_calibration"); genesys_repark_sensor_after_white_shading(dev); if (!has_flag(dev->model->flags, ModelFlag::DARK_CALIBRATION)) { @@ -3070,14 +3087,8 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se throw; } - dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); - - if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); - } - try { - genesys_dark_shading_calibration(dev, sensor); + genesys_dark_shading_calibration(dev, sensor, nullptr, nullptr); } catch (...) { catch_all_exceptions(__func__, [&](){ dev->cmd_set->eject_document(dev); }); throw; @@ -3096,14 +3107,8 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se genesys_repark_sensor_before_shading(dev); - dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); - - if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); - } - try { - genesys_white_shading_calibration(dev, sensor); + genesys_white_shading_calibration(dev, sensor, nullptr, nullptr); genesys_repark_sensor_after_white_shading(dev); } catch (...) { catch_all_exceptions(__func__, [&](){ dev->cmd_set->eject_document(dev); }); From d80db65c5864f5eccc8baecd0780c507b23df7c7 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:24 +0200 Subject: [PATCH 05/13] genesys: Move writing to registers to coarse calibration functions --- backend/genesys/genesys.cpp | 46 +++++++++++++++---------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index c66f579c8..5c80ba1a0 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -1453,6 +1453,18 @@ genesys_average_black (Genesys_Device * dev, int channel, static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sensor) { DBG_HELPER_ARGS(dbg, "scan_mode = %d", static_cast(dev->settings.scan_mode)); + + // FIXME: remove when updating tests + dev->interface->record_progress_message("init_regs_for_coarse_calibration"); + dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, dev->calib_reg); + + if (dev->model->asic_type != AsicType::GL646) { + dev->interface->write_registers(dev->calib_reg); + } + + // FIXME: remove when updating tests + dev->interface->record_progress_message("genesys_coarse_calibration"); + int black_pixels; int white_average; uint8_t offset[4] = { 0xa0, 0x00, 0xa0, 0x40 }; /* first value isn't used */ @@ -2900,16 +2912,10 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen dev->interface->record_progress_message("coarse_gain_calibration"); dev->cmd_set->coarse_gain_calibration(dev, sensor, dev->calib_reg, coarse_res); } else { - /* since we have 2 gain calibration proc, skip second if first one was - used. */ - dev->interface->record_progress_message("init_regs_for_coarse_calibration"); - dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, dev->calib_reg); + // since we have 2 gain calibration proc, skip second if first one was used. - if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); - } - - dev->interface->record_progress_message("genesys_coarse_calibration"); + // FIXME: enable when updating tests + // dev->interface->record_progress_message("genesys_coarse_calibration"); genesys_coarse_calibration(dev, sensor); } @@ -2947,14 +2953,9 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen dev->cmd_set->coarse_gain_calibration(dev, sensor, dev->calib_reg, coarse_res); } else { // since we have 2 gain calibration proc, skip second if first one was used - dev->interface->record_progress_message("init_regs_for_coarse_calibration"); - dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, dev->calib_reg); - if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); - } - - dev->interface->record_progress_message("genesys_coarse_calibration"); + // FIXME: enable when updating tests + // dev->interface->record_progress_message("genesys_coarse_calibration"); genesys_coarse_calibration(dev, sensor); } } @@ -3062,17 +3063,8 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se /* since all the registers are set up correctly, just use them */ dev->cmd_set->coarse_gain_calibration(dev, sensor, dev->calib_reg, sensor.optical_res); - } - else - /* since we have 2 gain calibration proc, skip second if first one was - used. */ - { - dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, dev->calib_reg); - - if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); - } - + } else { + // since we have 2 gain calibration proc, skip second if first one was used genesys_coarse_calibration(dev, sensor); } From 25f097b44597c920535bb333259acdd231e96748 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:25 +0200 Subject: [PATCH 06/13] genesys: Pass registers from callers in coarse calibration --- backend/genesys/genesys.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 5c80ba1a0..97df3432c 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -1450,16 +1450,17 @@ genesys_average_black (Genesys_Device * dev, int channel, // todo: check; it works but the lines 1, 2, and 3 are too dark even with the // same offset and gain settings? -static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sensor) +static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sensor, + Genesys_Register_Set& local_reg) { DBG_HELPER_ARGS(dbg, "scan_mode = %d", static_cast(dev->settings.scan_mode)); // FIXME: remove when updating tests dev->interface->record_progress_message("init_regs_for_coarse_calibration"); - dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, dev->calib_reg); + dev->cmd_set->init_regs_for_coarse_calibration(dev, sensor, local_reg); if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); + dev->interface->write_registers(local_reg); } // FIXME: remove when updating tests @@ -1577,11 +1578,11 @@ static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sens dev->frontend.get_offset(2)); - dev->cmd_set->begin_scan(dev, sensor, &dev->calib_reg, false); + dev->cmd_set->begin_scan(dev, sensor, &local_reg, false); if (is_testing_mode()) { dev->interface->test_checkpoint("coarse_calibration"); - dev->cmd_set->end_scan(dev, &dev->calib_reg, true); + dev->cmd_set->end_scan(dev, &local_reg, true); return; } @@ -1598,7 +1599,7 @@ static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sens sanei_genesys_write_pnm_file("gl_coarse.pnm", all_data_8.data(), 8, channels, size / 6, 4); } - dev->cmd_set->end_scan(dev, &dev->calib_reg, true); + dev->cmd_set->end_scan(dev, &local_reg, true); if (dev->settings.scan_mode == ScanColorMode::COLOR_SINGLE_PASS) { @@ -2916,7 +2917,7 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_coarse_calibration"); - genesys_coarse_calibration(dev, sensor); + genesys_coarse_calibration(dev, sensor, dev->calib_reg); } if (dev->model->is_cis) @@ -2956,7 +2957,7 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_coarse_calibration"); - genesys_coarse_calibration(dev, sensor); + genesys_coarse_calibration(dev, sensor, dev->calib_reg); } } @@ -3065,7 +3066,7 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se dev->cmd_set->coarse_gain_calibration(dev, sensor, dev->calib_reg, sensor.optical_res); } else { // since we have 2 gain calibration proc, skip second if first one was used - genesys_coarse_calibration(dev, sensor); + genesys_coarse_calibration(dev, sensor, dev->calib_reg); } /* search for a full width black strip and then do a 16 bit scan to From 2a3ae40d8ddc4003508034a10a32f8de0925fd1f Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:26 +0200 Subject: [PATCH 07/13] genesys: Pass registers from callers to dark-white shading calibration --- backend/genesys/genesys.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 97df3432c..bc68e7c58 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -1883,17 +1883,18 @@ static void genesys_white_shading_calibration(Genesys_Device* dev, const Genesys // This calibration uses a scan over the calibration target, comprising a black and a white strip. // (So the motor must be on.) static void genesys_dark_white_shading_calibration(Genesys_Device* dev, - const Genesys_Sensor& sensor) + const Genesys_Sensor& sensor, + Genesys_Register_Set& local_reg) { DBG_HELPER_ARGS(dbg, "lines = %zu", dev->calib_lines); // FIXME: remove when updating tests dev->interface->record_progress_message("init_regs_for_shading"); - dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + dev->cmd_set->init_regs_for_shading(dev, sensor, local_reg); if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); + dev->interface->write_registers(local_reg); } // FIXME: remove when updating tests @@ -1932,22 +1933,22 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, } // turn on motor and lamp power - sanei_genesys_set_lamp_power(dev, sensor, dev->calib_reg, true); - sanei_genesys_set_motor_power(dev->calib_reg, motor); + sanei_genesys_set_lamp_power(dev, sensor, local_reg, true); + sanei_genesys_set_motor_power(local_reg, motor); - dev->interface->write_registers(dev->calib_reg); + dev->interface->write_registers(local_reg); - dev->cmd_set->begin_scan(dev, sensor, &dev->calib_reg, false); + dev->cmd_set->begin_scan(dev, sensor, &local_reg, false); if (is_testing_mode()) { dev->interface->test_checkpoint("dark_white_shading_calibration"); - dev->cmd_set->end_scan(dev, &dev->calib_reg, true); + dev->cmd_set->end_scan(dev, &local_reg, true); return; } sanei_genesys_read_data_from_scanner(dev, calibration_data.data(), size); - dev->cmd_set->end_scan(dev, &dev->calib_reg, true); + dev->cmd_set->end_scan(dev, &local_reg, true); if (DBG_LEVEL >= DBG_data) { @@ -2985,7 +2986,7 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen if (has_flag(dev->model->flags, ModelFlag::DARK_WHITE_CALIBRATION)) { // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_dark_white_shading_calibration"); - genesys_dark_white_shading_calibration(dev, sensor); + genesys_dark_white_shading_calibration(dev, sensor, dev->calib_reg); } else { DBG(DBG_proc, "%s : genesys_dark_shading_calibration dev->calib_reg ", __func__); debug_dump(DBG_proc, dev->calib_reg); From 8e4c332ea69fdb674ebf371f4fe274645de2d6ca Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:27 +0200 Subject: [PATCH 08/13] genesys: Pass registers from callers to shading calibration --- backend/genesys/genesys.cpp | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index bc68e7c58..7efc76c5d 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -1639,6 +1639,7 @@ static void genesys_coarse_calibration(Genesys_Device* dev, Genesys_Sensor& sens * @param dev scanner's device */ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_Sensor& sensor, + Genesys_Register_Set& local_reg, std::vector& out_average_data, bool is_dark, const std::string& log_filename_prefix, const char* shading_progress_msg, @@ -1649,10 +1650,10 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ if (shading_progress_msg) { // FIXME: remove when updating tests dev->interface->record_progress_message(shading_progress_msg); } - dev->cmd_set->init_regs_for_shading(dev, sensor, dev->calib_reg); + dev->cmd_set->init_regs_for_shading(dev, sensor, local_reg); if (dev->model->asic_type != AsicType::GL646) { - dev->interface->write_registers(dev->calib_reg); + dev->interface->write_registers(local_reg); } if (function_progress_msg) { // FIXME: remove when updating tests @@ -1702,14 +1703,14 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ // turn off motor and lamp power for flatbed scanners, but not for sheetfed scanners // because they have a calibration sheet with a sufficient black strip if (is_dark && !dev->model->is_sheetfed) { - sanei_genesys_set_lamp_power(dev, sensor, dev->calib_reg, false); - sanei_genesys_set_motor_power(dev->calib_reg, motor); + sanei_genesys_set_lamp_power(dev, sensor, local_reg, false); + sanei_genesys_set_motor_power(local_reg, motor); } else { - sanei_genesys_set_lamp_power(dev, sensor, dev->calib_reg, true); - sanei_genesys_set_motor_power(dev->calib_reg, motor); + sanei_genesys_set_lamp_power(dev, sensor, local_reg, true); + sanei_genesys_set_motor_power(local_reg, motor); } - dev->interface->write_registers(dev->calib_reg); + dev->interface->write_registers(local_reg); if (is_dark) { // wait some time to let lamp to get dark @@ -1721,20 +1722,20 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ } bool start_motor = !is_dark; - dev->cmd_set->begin_scan(dev, sensor, &dev->calib_reg, start_motor); + dev->cmd_set->begin_scan(dev, sensor, &local_reg, start_motor); if (is_testing_mode()) { dev->interface->test_checkpoint(is_dark ? "dark_shading_calibration" : "white_shading_calibration"); - dev->cmd_set->end_scan(dev, &dev->calib_reg, true); + dev->cmd_set->end_scan(dev, &local_reg, true); return; } sanei_genesys_read_data_from_scanner(dev, reinterpret_cast(calibration_data.data()), size); - dev->cmd_set->end_scan(dev, &dev->calib_reg, true); + dev->cmd_set->end_scan(dev, &local_reg, true); if (has_flag(dev->model->flags, ModelFlag::INVERTED_16BIT_DATA)) { for (std::size_t i = 0; i < size / 2; ++i) { @@ -1764,11 +1765,12 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ static void genesys_dark_shading_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, + Genesys_Register_Set& local_reg, const char* shading_progress_msg, const char* function_progress_msg) { DBG_HELPER(dbg); - genesys_shading_calibration_impl(dev, sensor, dev->dark_average_data, true, "gl_black_", + genesys_shading_calibration_impl(dev, sensor, local_reg, dev->dark_average_data, true, "gl_black_", shading_progress_msg, function_progress_msg); } /* @@ -1872,11 +1874,12 @@ static void genesys_repark_sensor_after_white_shading(Genesys_Device* dev) } static void genesys_white_shading_calibration(Genesys_Device* dev, const Genesys_Sensor& sensor, + Genesys_Register_Set& local_reg, const char* shading_progress_msg, const char* function_progress_msg) { DBG_HELPER(dbg); - genesys_shading_calibration_impl(dev, sensor, dev->white_average_data, false, "gl_white_", + genesys_shading_calibration_impl(dev, sensor, local_reg, dev->white_average_data, false, "gl_white_", shading_progress_msg, function_progress_msg); } @@ -2994,14 +2997,14 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen if (has_flag(dev->model->flags, ModelFlag::DARK_CALIBRATION)) { // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_dark_shading_calibration"); - genesys_dark_shading_calibration(dev, sensor, "init_regs_for_shading", + genesys_dark_shading_calibration(dev, sensor, dev->calib_reg, "init_regs_for_shading", "genesys_dark_shading_calibration"); genesys_repark_sensor_before_shading(dev); } // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_white_shading_calibration"); - genesys_white_shading_calibration(dev, sensor, "init_regs_for_shading2", + genesys_white_shading_calibration(dev, sensor, dev->calib_reg, "init_regs_for_shading2", "genesys_white_shading_calibration"); genesys_repark_sensor_after_white_shading(dev); @@ -3082,7 +3085,7 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se } try { - genesys_dark_shading_calibration(dev, sensor, nullptr, nullptr); + genesys_dark_shading_calibration(dev, sensor, dev->calib_reg, nullptr, nullptr); } catch (...) { catch_all_exceptions(__func__, [&](){ dev->cmd_set->eject_document(dev); }); throw; @@ -3102,7 +3105,7 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se genesys_repark_sensor_before_shading(dev); try { - genesys_white_shading_calibration(dev, sensor, nullptr, nullptr); + genesys_white_shading_calibration(dev, sensor, dev->calib_reg, nullptr, nullptr); genesys_repark_sensor_after_white_shading(dev); } catch (...) { catch_all_exceptions(__func__, [&](){ dev->cmd_set->eject_document(dev); }); From 87473910cf85c638b9efafd027990ec956d3d0bb Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:28 +0200 Subject: [PATCH 09/13] genesys: Use regular registers when computing what coefficient to send --- backend/genesys/genesys.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 7efc76c5d..f8f38ba3e 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -2569,7 +2569,7 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_ Wn = white average for column n Dn = dark average for column n */ - if (get_registers_gain4_bit(dev->model->asic_type, dev->calib_reg)) { + if (get_registers_gain4_bit(dev->model->asic_type, dev->reg)) { coeff = 0x4000; } else { coeff = 0x2000; From 86fe2f5f6d32bf78a9242ecae5733dcd9e83c600 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:29 +0200 Subject: [PATCH 10/13] genesys: Move modification of calib_reg out of shading reg init on gl646 --- backend/genesys/genesys.cpp | 8 ++++++-- backend/genesys/gl646.cpp | 3 --- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index f8f38ba3e..1a2ab80ab 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -1652,7 +1652,9 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ } dev->cmd_set->init_regs_for_shading(dev, sensor, local_reg); - if (dev->model->asic_type != AsicType::GL646) { + if (dev->model->asic_type == AsicType::GL646) { + local_reg = dev->reg; + } else { dev->interface->write_registers(local_reg); } @@ -1896,7 +1898,9 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, dev->cmd_set->init_regs_for_shading(dev, sensor, local_reg); - if (dev->model->asic_type != AsicType::GL646) { + if (dev->model->asic_type == AsicType::GL646) { + local_reg = dev->reg; + } else { dev->interface->write_registers(local_reg); } diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index a921995c6..0f9db41ab 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -1729,9 +1729,6 @@ void CommandSetGl646::init_regs_for_shading(Genesys_Device* dev, const Genesys_S dev->reg.set24(REG_LINCNT, dev->calib_lines * 3); } - /* copy reg to calib_reg */ - dev->calib_reg = dev->reg; - DBG(DBG_info, "%s:\n\tdev->settings.xres=%d\n\tdev->settings.yres=%d\n", __func__, dev->settings.xres, dev->settings.yres); } From 16e8ca35119963846dda94ae0cf13636aa337a60 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:30 +0200 Subject: [PATCH 11/13] genesys: Don't modify calib_reg when calibrating --- backend/genesys/genesys.cpp | 42 ++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 1a2ab80ab..1940b59a6 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -2912,20 +2912,22 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen coarse_res = 1200; } + auto local_reg = dev->calib_reg; + /* do offset calibration if needed */ if (has_flag(dev->model->flags, ModelFlag::OFFSET_CALIBRATION)) { dev->interface->record_progress_message("offset_calibration"); - dev->cmd_set->offset_calibration(dev, sensor, dev->calib_reg); + dev->cmd_set->offset_calibration(dev, sensor, local_reg); /* since all the registers are set up correctly, just use them */ dev->interface->record_progress_message("coarse_gain_calibration"); - dev->cmd_set->coarse_gain_calibration(dev, sensor, dev->calib_reg, coarse_res); + dev->cmd_set->coarse_gain_calibration(dev, sensor, local_reg, coarse_res); } else { // since we have 2 gain calibration proc, skip second if first one was used. // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_coarse_calibration"); - genesys_coarse_calibration(dev, sensor, dev->calib_reg); + genesys_coarse_calibration(dev, sensor, local_reg); } if (dev->model->is_cis) @@ -2937,7 +2939,7 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen case AsicType::GL845: case AsicType::GL846: case AsicType::GL847: { - auto calib_exposure = dev->cmd_set->led_calibration(dev, sensor, dev->calib_reg); + auto calib_exposure = dev->cmd_set->led_calibration(dev, sensor, local_reg); for (auto& sensor_update : sanei_genesys_find_sensors_all_for_write(dev, sensor.method)) { sensor_update.get().exposure = calib_exposure; @@ -2946,7 +2948,7 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen break; } default: { - sensor.exposure = dev->cmd_set->led_calibration(dev, sensor, dev->calib_reg); + sensor.exposure = dev->cmd_set->led_calibration(dev, sensor, local_reg); } } @@ -2954,18 +2956,18 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen /* calibrate afe again to match new exposure */ if (has_flag(dev->model->flags, ModelFlag::OFFSET_CALIBRATION)) { dev->interface->record_progress_message("offset_calibration"); - dev->cmd_set->offset_calibration(dev, sensor, dev->calib_reg); + dev->cmd_set->offset_calibration(dev, sensor, local_reg); // since all the registers are set up correctly, just use them dev->interface->record_progress_message("coarse_gain_calibration"); - dev->cmd_set->coarse_gain_calibration(dev, sensor, dev->calib_reg, coarse_res); + dev->cmd_set->coarse_gain_calibration(dev, sensor, local_reg, coarse_res); } else { // since we have 2 gain calibration proc, skip second if first one was used // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_coarse_calibration"); - genesys_coarse_calibration(dev, sensor, dev->calib_reg); + genesys_coarse_calibration(dev, sensor, local_reg); } } @@ -2993,22 +2995,22 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen if (has_flag(dev->model->flags, ModelFlag::DARK_WHITE_CALIBRATION)) { // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_dark_white_shading_calibration"); - genesys_dark_white_shading_calibration(dev, sensor, dev->calib_reg); + genesys_dark_white_shading_calibration(dev, sensor, local_reg); } else { - DBG(DBG_proc, "%s : genesys_dark_shading_calibration dev->calib_reg ", __func__); - debug_dump(DBG_proc, dev->calib_reg); + DBG(DBG_proc, "%s : genesys_dark_shading_calibration local_reg ", __func__); + debug_dump(DBG_proc, local_reg); if (has_flag(dev->model->flags, ModelFlag::DARK_CALIBRATION)) { // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_dark_shading_calibration"); - genesys_dark_shading_calibration(dev, sensor, dev->calib_reg, "init_regs_for_shading", + genesys_dark_shading_calibration(dev, sensor, local_reg, "init_regs_for_shading", "genesys_dark_shading_calibration"); genesys_repark_sensor_before_shading(dev); } // FIXME: enable when updating tests // dev->interface->record_progress_message("genesys_white_shading_calibration"); - genesys_white_shading_calibration(dev, sensor, dev->calib_reg, "init_regs_for_shading2", + genesys_white_shading_calibration(dev, sensor, local_reg, "init_regs_for_shading2", "genesys_white_shading_calibration"); genesys_repark_sensor_after_white_shading(dev); @@ -3037,6 +3039,8 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se DBG_HELPER(dbg); bool forward = true; + auto local_reg = dev->calib_reg; + // first step, load document dev->cmd_set->load_document(dev); @@ -3062,19 +3066,19 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se if (dev->model->is_cis) { - dev->cmd_set->led_calibration(dev, sensor, dev->calib_reg); + dev->cmd_set->led_calibration(dev, sensor, local_reg); } /* calibrate afe */ if (has_flag(dev->model->flags, ModelFlag::OFFSET_CALIBRATION)) { - dev->cmd_set->offset_calibration(dev, sensor, dev->calib_reg); + dev->cmd_set->offset_calibration(dev, sensor, local_reg); /* since all the registers are set up correctly, just use them */ - dev->cmd_set->coarse_gain_calibration(dev, sensor, dev->calib_reg, sensor.optical_res); + dev->cmd_set->coarse_gain_calibration(dev, sensor, local_reg, sensor.optical_res); } else { // since we have 2 gain calibration proc, skip second if first one was used - genesys_coarse_calibration(dev, sensor, dev->calib_reg); + genesys_coarse_calibration(dev, sensor, local_reg); } /* search for a full width black strip and then do a 16 bit scan to @@ -3089,7 +3093,7 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se } try { - genesys_dark_shading_calibration(dev, sensor, dev->calib_reg, nullptr, nullptr); + genesys_dark_shading_calibration(dev, sensor, local_reg, nullptr, nullptr); } catch (...) { catch_all_exceptions(__func__, [&](){ dev->cmd_set->eject_document(dev); }); throw; @@ -3109,7 +3113,7 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se genesys_repark_sensor_before_shading(dev); try { - genesys_white_shading_calibration(dev, sensor, dev->calib_reg, nullptr, nullptr); + genesys_white_shading_calibration(dev, sensor, local_reg, nullptr, nullptr); genesys_repark_sensor_after_white_shading(dev); } catch (...) { catch_all_exceptions(__func__, [&](){ dev->cmd_set->eject_document(dev); }); From 32041bc7fedb64a031e3e75c01c9edd9aa94fda4 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:31 +0200 Subject: [PATCH 12/13] genesys: Rename calib_reg to initial_regs --- backend/genesys/device.cpp | 2 +- backend/genesys/device.h | 2 +- backend/genesys/genesys.cpp | 4 ++-- backend/genesys/gl124.cpp | 2 +- backend/genesys/gl646.cpp | 3 +-- backend/genesys/gl841.cpp | 14 +++++++------- backend/genesys/gl846.cpp | 3 +-- backend/genesys/gl847.cpp | 3 +-- backend/genesys/low.cpp | 3 +-- 9 files changed, 16 insertions(+), 20 deletions(-) diff --git a/backend/genesys/device.cpp b/backend/genesys/device.cpp index dd13d8e7b..0a2033e1a 100644 --- a/backend/genesys/device.cpp +++ b/backend/genesys/device.cpp @@ -209,7 +209,7 @@ std::ostream& operator<<(std::ostream& out, const Genesys_Device& dev) << " ignore_offsets: " << dev.ignore_offsets << '\n' << " model: (not printed)\n" << " reg: " << format_indent_braced_list(4, dev.reg) << '\n' - << " calib_reg: " << format_indent_braced_list(4, dev.calib_reg) << '\n' + << " initial_regs: " << format_indent_braced_list(4, dev.initial_regs) << '\n' << " settings: " << format_indent_braced_list(4, dev.settings) << '\n' << " frontend: " << format_indent_braced_list(4, dev.frontend) << '\n' << " frontend_initial: " << format_indent_braced_list(4, dev.frontend_initial) << '\n' diff --git a/backend/genesys/device.h b/backend/genesys/device.h index 479c2be79..4d8686cd3 100644 --- a/backend/genesys/device.h +++ b/backend/genesys/device.h @@ -250,7 +250,7 @@ struct Genesys_Device std::unique_ptr cmd_set; Genesys_Register_Set reg; - Genesys_Register_Set calib_reg; + Genesys_Register_Set initial_regs; Genesys_Settings settings; Genesys_Frontend frontend, frontend_initial; diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 1940b59a6..170bf3461 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -2912,7 +2912,7 @@ static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sen coarse_res = 1200; } - auto local_reg = dev->calib_reg; + auto local_reg = dev->initial_regs; /* do offset calibration if needed */ if (has_flag(dev->model->flags, ModelFlag::OFFSET_CALIBRATION)) { @@ -3039,7 +3039,7 @@ static void genesys_sheetfed_calibration(Genesys_Device* dev, Genesys_Sensor& se DBG_HELPER(dbg); bool forward = true; - auto local_reg = dev->calib_reg; + auto local_reg = dev->initial_regs; // first step, load document dev->cmd_set->load_document(dev); diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index e64eedcea..9fded5244 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -338,7 +338,7 @@ gl124_init_registers (Genesys_Device * dev) const auto& sensor = sanei_genesys_find_sensor_any(dev); sanei_genesys_set_dpihw(dev->reg, sensor, sensor.optical_res); - dev->calib_reg = dev->reg; + dev->initial_regs = dev->reg; } /**@brief send slope table for motor movement diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index 0f9db41ab..8f2e0e212 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -2726,8 +2726,7 @@ void CommandSetGl646::init(Genesys_Device* dev) const // Init shading data sanei_genesys_init_shading_data(dev, sensor, sensor.sensor_pixels); - /* initial calibration reg values */ - dev->calib_reg = dev->reg; + dev->initial_regs = dev->reg; } // execute physical unit init only if cold diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index f9aab5c42..a3641d4bd 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -1745,7 +1745,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const uint8_t val = dev->interface->read_register(REG_0x6B); dev->interface->write_register(REG_0x6B, val & ~REG_0x6B_GPO17); dev->reg.find_reg(0x6b).value &= ~REG_0x6B_GPO17; - dev->calib_reg.find_reg(0x6b).value &= ~REG_0x6B_GPO17; + dev->initial_regs.find_reg(0x6b).value &= ~REG_0x6B_GPO17; } set_fe(dev, sensor, AFE_POWER_SAVE); @@ -1777,13 +1777,13 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const val = dev->interface->read_register(REG_0x6B); dev->interface->write_register(REG_0x6B, val | REG_0x6B_GPO17); dev->reg.find_reg(0x6b).value |= REG_0x6B_GPO17; - dev->calib_reg.find_reg(0x6b).value |= REG_0x6B_GPO17; + dev->initial_regs.find_reg(0x6b).value |= REG_0x6B_GPO17; /*enable GPO18*/ val = dev->interface->read_register(REG_0x6B); dev->interface->write_register(REG_0x6B, val | REG_0x6B_GPO18); dev->reg.find_reg(0x6b).value |= REG_0x6B_GPO18; - dev->calib_reg.find_reg(0x6b).value |= REG_0x6B_GPO18; + dev->initial_regs.find_reg(0x6b).value |= REG_0x6B_GPO18; } if (dev->model->gpio_id == GpioId::DP665 @@ -1792,7 +1792,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const uint8_t val = dev->interface->read_register(REG_0x6B); dev->interface->write_register(REG_0x6B, val | REG_0x6B_GPO17); dev->reg.find_reg(0x6b).value |= REG_0x6B_GPO17; - dev->calib_reg.find_reg(0x6b).value |= REG_0x6B_GPO17; + dev->initial_regs.find_reg(0x6b).value |= REG_0x6B_GPO17; } } @@ -3446,8 +3446,8 @@ void CommandSetGl841::init(Genesys_Device* dev) const // Set analog frontend dev->cmd_set->set_fe(dev, sensor, AFE_INIT); - // FIXME: move_back_home modifies dev->calib_reg and requires it to be filled - dev->calib_reg = dev->reg; + // FIXME: move_back_home modifies dev->initial_regs and requires it to be filled + dev->initial_regs = dev->reg; // Move home dev->cmd_set->move_back_home(dev, true); @@ -3466,7 +3466,7 @@ void CommandSetGl841::init(Genesys_Device* dev) const dev->cmd_set->send_gamma_table(dev, sensor); /* initial calibration reg values */ - Genesys_Register_Set& regs = dev->calib_reg; + Genesys_Register_Set& regs = dev->initial_regs; regs = dev->reg; unsigned resolution = sensor.get_logical_hwdpi(300); diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index 619f89071..0f3b50396 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -218,8 +218,7 @@ gl846_init_registers (Genesys_Device * dev) const auto& sensor = sanei_genesys_find_sensor_any(dev); sanei_genesys_set_dpihw(dev->reg, sensor, sensor.optical_res); - /* initalize calibration reg */ - dev->calib_reg = dev->reg; + dev->initial_regs = dev->reg; } /**@brief send slope table for motor movement diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index 442127aa4..72aee3e79 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -239,8 +239,7 @@ gl847_init_registers (Genesys_Device * dev) const auto& sensor = sanei_genesys_find_sensor_any(dev); sanei_genesys_set_dpihw(dev->reg, sensor, sensor.optical_res); - /* initalize calibration reg */ - dev->calib_reg = dev->reg; + dev->initial_regs = dev->reg; } /**@brief send slope table for motor movement diff --git a/backend/genesys/low.cpp b/backend/genesys/low.cpp index 4f3849b3b..1e1b632bf 100644 --- a/backend/genesys/low.cpp +++ b/backend/genesys/low.cpp @@ -1493,8 +1493,7 @@ void sanei_genesys_asic_init(Genesys_Device* dev, bool /*max_regs*/) dev->settings.color_filter = ColorFilter::RED; - /* duplicate initial values into calibration registers */ - dev->calib_reg = dev->reg; + dev->initial_regs = dev->reg; const auto& sensor = sanei_genesys_find_sensor_any(dev); From cce5e21829b1efbfdc22c2357ec9bf4927620c77 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 2 Feb 2020 18:45:32 +0200 Subject: [PATCH 13/13] genesys: Remove several unnecessary initializations of dev->initial_regs --- backend/genesys/gl124.cpp | 2 -- backend/genesys/gl843.cpp | 2 -- backend/genesys/gl846.cpp | 2 -- backend/genesys/gl847.cpp | 2 -- 4 files changed, 8 deletions(-) diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 9fded5244..3de07774e 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -337,8 +337,6 @@ gl124_init_registers (Genesys_Device * dev) // fine tune upon device description const auto& sensor = sanei_genesys_find_sensor_any(dev); sanei_genesys_set_dpihw(dev->reg, sensor, sensor.optical_res); - - dev->initial_regs = dev->reg; } /**@brief send slope table for motor movement diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 9ec911c3f..eb57816fd 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -654,8 +654,6 @@ gl843_init_registers (Genesys_Device * dev) dev->reg.init_reg(0xac, 0x00); } - dev->calib_reg = dev->reg; - if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I) { uint8_t data[32] = { 0x8c, 0x8f, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index 0f3b50396..35ff0d4ca 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -217,8 +217,6 @@ gl846_init_registers (Genesys_Device * dev) const auto& sensor = sanei_genesys_find_sensor_any(dev); sanei_genesys_set_dpihw(dev->reg, sensor, sensor.optical_res); - - dev->initial_regs = dev->reg; } /**@brief send slope table for motor movement diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index 72aee3e79..e8c2bcea2 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -238,8 +238,6 @@ gl847_init_registers (Genesys_Device * dev) const auto& sensor = sanei_genesys_find_sensor_any(dev); sanei_genesys_set_dpihw(dev->reg, sensor, sensor.optical_res); - - dev->initial_regs = dev->reg; } /**@brief send slope table for motor movement