From faab7b02e0ee513834d35e313f7186245b2584a1 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Fri, 2 Aug 2019 22:39:00 +0300 Subject: [PATCH] genesys: Cache physical register state in the device on bulk writes --- backend/genesys.cc | 8 +++---- backend/genesys_device.cc | 11 ++++++++-- backend/genesys_device.h | 2 ++ backend/genesys_gl124.cc | 30 ++++++++++++------------- backend/genesys_gl646.cc | 20 ++++++++--------- backend/genesys_gl841.cc | 46 +++++++++++++++++++-------------------- backend/genesys_gl843.cc | 38 ++++++++++++++++---------------- backend/genesys_gl846.cc | 30 ++++++++++++------------- backend/genesys_gl847.cc | 30 ++++++++++++------------- backend/genesys_low.cc | 6 ++--- backend/genesys_low.h | 3 ++- 11 files changed, 117 insertions(+), 107 deletions(-) diff --git a/backend/genesys.cc b/backend/genesys.cc index 50e81f6d8..f93b1ffc5 100644 --- a/backend/genesys.cc +++ b/backend/genesys.cc @@ -1671,7 +1671,7 @@ static void genesys_dark_shading_calibration(Genesys_Device* dev, const Genesys_ sanei_genesys_set_motor_power(dev->calib_reg, motor); } - sanei_genesys_bulk_write_register(dev, dev->calib_reg); + dev->write_registers(dev->calib_reg); // wait some time to let lamp to get dark sanei_genesys_sleep_ms(200); @@ -1846,7 +1846,7 @@ static void genesys_white_shading_calibration(Genesys_Device* dev, const Genesys sanei_genesys_set_lamp_power(dev, sensor, dev->calib_reg, true); sanei_genesys_set_motor_power(dev->calib_reg, motor); - sanei_genesys_bulk_write_register(dev, dev->calib_reg); + dev->write_registers(dev->calib_reg); if (dev->model->flags & GENESYS_FLAG_DARK_CALIBRATION) { sanei_genesys_sleep_ms(500); // make sure lamp is bright again @@ -1932,7 +1932,7 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, sanei_genesys_set_lamp_power(dev, sensor, dev->calib_reg, true); sanei_genesys_set_motor_power(dev->calib_reg, motor); - sanei_genesys_bulk_write_register(dev, dev->calib_reg); + dev->write_registers(dev->calib_reg); dev->model->cmd_set->begin_scan(dev, sensor, &dev->calib_reg, SANE_FALSE); @@ -3427,7 +3427,7 @@ static void genesys_start_scan(Genesys_Device* dev, SANE_Bool lamp_off) } // now send registers for scan - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); // start effective scan dev->model->cmd_set->begin_scan(dev, sensor, &dev->reg, SANE_TRUE); diff --git a/backend/genesys_device.cc b/backend/genesys_device.cc index ab338f62c..40219a98f 100644 --- a/backend/genesys_device.cc +++ b/backend/genesys_device.cc @@ -80,6 +80,14 @@ uint8_t Genesys_Device::read_register(uint16_t address) return value; } +void Genesys_Device::write_registers(Genesys_Register_Set& regs) +{ + sanei_genesys_bulk_write_register(this, regs); + for (const auto& reg : regs) { + update_register_state(reg.address, reg.value); + } +} + void Genesys_Device::update_register_state(uint16_t address, uint8_t value) { if (physical_regs.has_reg(address)) { @@ -92,8 +100,7 @@ void Genesys_Device::update_register_state(uint16_t address, uint8_t value) void apply_reg_settings_to_device(Genesys_Device& dev, const GenesysRegisterSettingSet& regs) { for (const auto& reg : regs) { - uint8_t val; - sanei_genesys_read_register(&dev, reg.address, &val); + uint8_t val = dev.read_register(reg.address); val = (val & ~reg.mask) | (reg.value & reg.mask); sanei_genesys_write_register(&dev, reg.address, val); } diff --git a/backend/genesys_device.h b/backend/genesys_device.h index 7ff771c1e..f760d7734 100644 --- a/backend/genesys_device.h +++ b/backend/genesys_device.h @@ -337,6 +337,8 @@ struct Genesys_Device Genesys_Register_Set physical_regs; uint8_t read_register(uint16_t address); + void write_registers(Genesys_Register_Set& regs); + private: void update_register_state(uint16_t address, uint8_t value); }; diff --git a/backend/genesys_gl124.cc b/backend/genesys_gl124.cc index 42b766486..c5189f9f6 100644 --- a/backend/genesys_gl124.cc +++ b/backend/genesys_gl124.cc @@ -1775,7 +1775,7 @@ static void gl124_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) r = sanei_genesys_get_address(&local_reg, REG02); r->value |= REG02_MTRREV; - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); gl124_setup_scan_gpio(dev,resolution); @@ -1786,7 +1786,7 @@ static void gl124_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -1879,7 +1879,7 @@ static void gl124_feed(Genesys_Device* dev, unsigned int steps, int reverse) } // send registers - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl124_start_action(dev); @@ -1889,7 +1889,7 @@ static void gl124_feed(Genesys_Device* dev, unsigned int steps, int reverse) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -1943,7 +1943,7 @@ static void gl124_search_start_position(Genesys_Device* dev) gl124_init_scan_regs(dev, sensor, &local_reg, params); // send to scanner - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); size = pixels * dev->model->search_lines; @@ -2014,7 +2014,7 @@ static void gl124_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); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); } @@ -2084,7 +2084,7 @@ static void gl124_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso dev->scanhead_position_in_steps += dev->calib_lines + move; - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); } static void gl124_wait_for_motor_stop(Genesys_Device* dev) @@ -2333,7 +2333,7 @@ static void move_to_calibration_area(Genesys_Device* dev, const Genesys_Sensor& std::vector line(size); // write registers and scan data - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG (DBG_info, "%s: starting line reading\n", __func__); gl124_begin_scan (dev, sensor, ®s, SANE_TRUE); @@ -2432,7 +2432,7 @@ static void gl124_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor, sanei_genesys_set_triple(®s,REG_EXPB,exp[2]); // write registers and scan data - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting line reading\n", __func__); gl124_begin_scan (dev, sensor, ®s, SANE_TRUE); @@ -2602,7 +2602,7 @@ static void gl124_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& dev->frontend.set_offset(2, bottom); gl124_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting first line reading\n", __func__); gl124_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size); @@ -2622,7 +2622,7 @@ static void gl124_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& dev->frontend.set_offset(1, top); dev->frontend.set_offset(2, top); gl124_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting second line reading\n", __func__); gl124_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -2642,7 +2642,7 @@ static void gl124_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& // scan with no move gl124_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting second line reading\n", __func__); gl124_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -2749,7 +2749,7 @@ static void gl124_coarse_gain_calibration(Genesys_Device* dev, const Genesys_Sen sanei_genesys_set_motor_power(regs, false); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); total_size = pixels * channels * (16/bpp) * lines; @@ -2864,7 +2864,7 @@ static void gl124_init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor *total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */ sanei_genesys_set_motor_power(*reg, false); - sanei_genesys_bulk_write_register(dev, *reg); + dev->write_registers(*reg); } /** @brief default GPIO values @@ -3009,7 +3009,7 @@ static void gl124_boot(Genesys_Device* dev, SANE_Bool cold) gl124_init_registers (dev); // Write initial registers - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); /* tune reg 0B */ val = REG0B_30MHZ | REG0B_ENBDRAM | REG0B_64M; diff --git a/backend/genesys_gl646.cc b/backend/genesys_gl646.cc index ccccdb1e5..3aa15cc34 100644 --- a/backend/genesys_gl646.cc +++ b/backend/genesys_gl646.cc @@ -1579,7 +1579,7 @@ static void gl646_set_powersaving(Genesys_Device* dev, int delay /* in minutes * local_reg.find_reg(0x38).value = exposure_time / 256; local_reg.find_reg(0x39).value = exposure_time & 255; - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); } @@ -1673,7 +1673,7 @@ static void gl646_load_document(Genesys_Device* dev) // wait e1 status to become e0 gl646_send_slope_table(dev, 1, slope_table, 50); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); gl646_start_motor(dev); @@ -1698,7 +1698,7 @@ static void gl646_load_document(Genesys_Device* dev) regs.set8(0x02, 0x71); regs.set8(0x3f, 1); regs.set8(0x6b, 8); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); } /** @@ -1854,7 +1854,7 @@ static void gl646_eject_document(Genesys_Device* dev) // wait c1 status to become c8 : HOMESNR and ~MOTFLAG gl646_send_slope_table(dev, 1, slope_table, 60); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); gl646_start_motor(dev); @@ -1895,7 +1895,7 @@ static void gl646_begin_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, local_reg.init_reg(0x0f, 0x00); // do not start motor yet } - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); } @@ -2082,7 +2082,7 @@ static void gl646_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) /* write scan registers */ try { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); } catch (...) { DBG(DBG_error, "%s: failed to bulk write registers\n", __func__); } @@ -3224,7 +3224,7 @@ static void gl646_init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor // now registers are ok, write them to scanner gl646_set_fe(dev, sensor, AFE_SET, settings.xres); - sanei_genesys_bulk_write_register(dev, *local_reg); + dev->write_registers(*local_reg); } @@ -3261,7 +3261,7 @@ static void gl646_repark_head(Genesys_Device* dev) /* TODO seems wrong ... no effective scan */ dev->reg.find_reg(0x01).value &= ~REG01_SCAN; - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); // start scan gl646_begin_scan(dev, sensor, &dev->reg, SANE_TRUE); @@ -3341,7 +3341,7 @@ static void gl646_init(Genesys_Device* dev) sanei_genesys_sleep_ms(100); // Write initial registers - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); /* Test ASIC and RAM */ if (!(dev->model->flags & GENESYS_FLAG_LAZY_INIT)) @@ -3556,7 +3556,7 @@ static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, } // write scan registers - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); // starts scan gl646_begin_scan(dev, sensor, &dev->reg, move); diff --git a/backend/genesys_gl841.cc b/backend/genesys_gl841.cc index cbe876fed..73fc0028e 100644 --- a/backend/genesys_gl841.cc +++ b/backend/genesys_gl841.cc @@ -2444,7 +2444,7 @@ static void gl841_set_powersaving(Genesys_Device* dev, int delay /* in minutes * local_reg.set8(0x38, exposure_time >> 8); local_reg.set8(0x39, exposure_time & 255); /* lowbyte */ - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); } static void gl841_start_action(Genesys_Device* dev) @@ -2480,7 +2480,7 @@ static void gl841_stop_action(Genesys_Device* dev) gl841_init_optical_regs_off(&local_reg); gl841_init_motor_regs_off(&local_reg,0); - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); /* looks like writing the right registers to zero is enough to get the chip out of scan mode into command mode, actually triggering(writing to @@ -2548,7 +2548,7 @@ static void gl841_eject_document(Genesys_Device* dev) gl841_init_motor_regs(dev, sensor, &local_reg, 65536,MOTOR_ACTION_FEED,0); - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl841_start_action(dev); @@ -2557,7 +2557,7 @@ static void gl841_eject_document(Genesys_Device* dev) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -2761,7 +2761,7 @@ static void gl841_begin_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, local_reg.init_reg(0x0f, 0x00); } - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); } @@ -2795,7 +2795,7 @@ static void gl841_feed(Genesys_Device* dev, int steps) gl841_init_motor_regs(dev, sensor, &local_reg, steps,MOTOR_ACTION_FEED,0); - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl841_start_action(dev); @@ -2804,7 +2804,7 @@ static void gl841_feed(Genesys_Device* dev, int steps) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -2908,7 +2908,7 @@ static void gl841_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) r = sanei_genesys_get_address(&local_reg, REG01); r->value &= ~REG01_SCAN; - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl841_start_action(dev); @@ -2917,7 +2917,7 @@ static void gl841_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -2988,7 +2988,7 @@ static void gl841_search_start_position(Genesys_Device* dev) gl841_init_scan_regs(dev, sensor, &local_reg, params); // send to scanner - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); size = pixels * dev->model->search_lines; @@ -3058,7 +3058,7 @@ static void gl841_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); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); /* if (DBG_LEVEL >= DBG_info) sanei_gl841_print_registers (regs);*/ @@ -3123,7 +3123,7 @@ static void gl841_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso dev->calib_pixels = dev->current_setup.pixels; dev->scanhead_position_in_steps += dev->calib_lines + starty; - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); } // set up registers for the actual scan @@ -3315,7 +3315,7 @@ static void gl841_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor, gl841_init_scan_regs(dev, sensor, ®s, params); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); num_pixels = dev->current_setup.pixels; @@ -3354,7 +3354,7 @@ static void gl841_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor, sanei_genesys_write_register(dev, 0x14, (sensor.exposure.blue >> 8) & 0xff); sanei_genesys_write_register(dev, 0x15, sensor.exposure.blue & 0xff); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting line reading\n", __func__); gl841_begin_scan(dev, sensor, ®s, SANE_TRUE); @@ -3530,7 +3530,7 @@ static void ad_fe_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& /* scan line */ DBG(DBG_info, "%s: starting line reading\n", __func__); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); gl841_set_fe(dev, sensor, AFE_SET); gl841_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, line.data(), total_size); @@ -3665,7 +3665,7 @@ static void gl841_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& do { - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); for (j=0; j < channels; j++) { off[j] = (offh[j]+offl[j])/2; @@ -3782,7 +3782,7 @@ static void gl841_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& gl841_set_fe(dev, sensor, AFE_SET); DBG(DBG_info, "%s: starting second line reading\n", __func__); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); gl841_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -3985,7 +3985,7 @@ static void gl841_coarse_gain_calibration(Genesys_Device* dev, const Genesys_Sen gl841_init_scan_regs(dev, sensor, ®s, params); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); num_pixels = dev->current_setup.pixels; @@ -4138,7 +4138,7 @@ static void gl841_init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor *total_size = num_pixels * 3 * 2 * 1; /* colors * bytes_per_color * scan lines */ - sanei_genesys_bulk_write_register(dev, *local_reg); + dev->write_registers(*local_reg); } @@ -4234,7 +4234,7 @@ static void gl841_init(Genesys_Device* dev) gl841_init_registers (dev); // Write initial registers - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); /* Test ASIC and RAM */ if (!(dev->model->flags & GENESYS_FLAG_LAZY_INIT)) @@ -4288,7 +4288,7 @@ static void gl841_init(Genesys_Device* dev) gl841_init_scan_regs(dev, sensor, ®s, params); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); size = dev->current_setup.pixels * 3 * 2 * 1; /* colors * bytes_per_color * scan lines */ @@ -4421,7 +4421,7 @@ static void gl841_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor r->value |= 4; } - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); gl841_begin_scan(dev, sensor, &local_reg, SANE_TRUE); @@ -4447,7 +4447,7 @@ static void gl841_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor found = 0; while (pass < length && !found) { - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); //now start scan gl841_begin_scan(dev, sensor, &local_reg, SANE_TRUE); diff --git a/backend/genesys_gl843.cc b/backend/genesys_gl843.cc index f3752eb9a..30780ebd9 100644 --- a/backend/genesys_gl843.cc +++ b/backend/genesys_gl843.cc @@ -2201,7 +2201,7 @@ static void gl843_park_xpa_lamp(Genesys_Device* dev) r->value &= ~REG01_SCAN; // write to scanner and start action - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); gl843_set_xpa_motor_power(dev, true); try { gl843_start_action(dev); @@ -2210,7 +2210,7 @@ static void gl843_park_xpa_lamp(Genesys_Device* dev) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -2311,7 +2311,7 @@ static void gl843_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) r = sanei_genesys_get_address(&local_reg, REG01); r->value &= ~REG01_SCAN; - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl843_start_action(dev); @@ -2320,7 +2320,7 @@ static void gl843_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -2398,7 +2398,7 @@ static void gl843_search_start_position(Genesys_Device* dev) gl843_init_scan_regs(dev, sensor, &local_reg, session); // send to scanner - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); size = dev->read_bytes_left; @@ -2477,7 +2477,7 @@ static void gl843_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); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); } /** @brief moves the slider to steps at motor base dpi @@ -2528,7 +2528,7 @@ static void gl843_feed(Genesys_Device* dev, unsigned int steps) r->value &= ~REG01_SCAN; // send registers - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl843_start_action(dev); @@ -2537,7 +2537,7 @@ static void gl843_feed(Genesys_Device* dev, unsigned int steps) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -2650,7 +2650,7 @@ static void gl843_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso sanei_genesys_get_double(®s,REG_STRPIXEL,&strpixel); DBG(DBG_info, "%s: STRPIXEL=%d\n", __func__, strpixel); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); } /** @brief set up registers for the actual scan @@ -2839,7 +2839,7 @@ static void gl843_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor, gl843_init_scan_regs(dev, calib_sensor, ®s, session); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); total_size = dev->read_bytes_left; @@ -2868,7 +2868,7 @@ static void gl843_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor, sanei_genesys_set_exposure(regs, calib_sensor.exposure); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting first line reading\n", __func__); gl843_begin_scan(dev, calib_sensor, ®s, SANE_TRUE); @@ -3091,7 +3091,7 @@ static void gl843_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& gl843_set_fe(dev, calib_sensor, AFE_SET); // scan with obttom AFE settings - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting first line reading\n", __func__); gl843_begin_scan(dev, calib_sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size); @@ -3120,7 +3120,7 @@ static void gl843_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& gl843_set_fe(dev, calib_sensor, AFE_SET); // scan with top AFE values - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting second line reading\n", __func__); gl843_begin_scan(dev, calib_sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -3156,7 +3156,7 @@ static void gl843_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& gl843_set_fe(dev, calib_sensor, AFE_SET); // scan with no move - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting second line reading\n", __func__); gl843_begin_scan(dev, calib_sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -3300,7 +3300,7 @@ static void gl843_coarse_gain_calibration(Genesys_Device* dev, const Genesys_Sen sanei_genesys_set_motor_power(regs, false); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); total_size = dev->read_bytes_left; @@ -3452,7 +3452,7 @@ static void gl843_init_regs_for_warmup(Genesys_Device* dev, const Genesys_Sensor gl843_init_scan_regs(dev, calib_sensor, reg, session); sanei_genesys_set_motor_power(*reg, false); - sanei_genesys_bulk_write_register(dev, *reg); + dev->write_registers(*reg); } /** @@ -3531,7 +3531,7 @@ static void gl843_boot(Genesys_Device* dev, SANE_Bool cold) } // Write initial registers - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); // Enable DRAM by setting a rising edge on bit 3 of reg 0x0b val = dev->reg.find_reg(0x0b).value & REG0B_DRAMSEL; @@ -3705,7 +3705,7 @@ static void gl843_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor r->value |= REG02_MTRREV; } - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); gl843_begin_scan(dev, calib_sensor, &local_reg, SANE_TRUE); @@ -3732,7 +3732,7 @@ static void gl843_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor found = 0; while (pass < 20 && !found) { - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); // now start scan gl843_begin_scan(dev, calib_sensor, &local_reg, SANE_TRUE); diff --git a/backend/genesys_gl846.cc b/backend/genesys_gl846.cc index 609145c99..9619228f7 100644 --- a/backend/genesys_gl846.cc +++ b/backend/genesys_gl846.cc @@ -1531,7 +1531,7 @@ static void gl846_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home r = sanei_genesys_get_address(&local_reg, REG02); r->value |= REG02_MTRREV; - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl846_start_action(dev); @@ -1542,7 +1542,7 @@ static void gl846_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -1616,7 +1616,7 @@ static void gl846_search_start_position(Genesys_Device* dev) gl846_init_scan_regs(dev, sensor, &local_reg, params); // send to scanner - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); size = pixels * dev->model->search_lines; @@ -1686,7 +1686,7 @@ static void gl846_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); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); } /** @brief moves the slider to steps at motor base dpi @@ -1740,7 +1740,7 @@ static void gl846_feed(Genesys_Device* dev, unsigned int steps) r->value &= ~REG01_SCAN; // send registers - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl846_start_action(dev); @@ -1751,7 +1751,7 @@ static void gl846_feed(Genesys_Device* dev, unsigned int steps) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -1814,7 +1814,7 @@ static void gl846_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso gl846_init_scan_regs(dev, sensor, ®s, params); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); /* we use GENESYS_FLAG_SHADING_REPARK */ dev->scanhead_position_in_steps = 0; @@ -2099,7 +2099,7 @@ static void gl846_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor, sanei_genesys_set_double(®s,REG_EXPB,exp[2]); // write registers and scan data - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting line reading\n", __func__); gl846_begin_scan(dev, sensor, ®s, SANE_TRUE); @@ -2278,7 +2278,7 @@ static void gl846_boot(Genesys_Device* dev, SANE_Bool cold) gl846_init_registers (dev); // Write initial registers - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); /* Enable DRAM by setting a rising edge on bit 3 of reg 0x0b */ val = dev->reg.find_reg(0x0b).value & REG0B_DRAMSEL; @@ -2408,7 +2408,7 @@ static void gl846_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor r->value |= REG02_MTRREV; } - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); gl846_begin_scan(dev, sensor, &local_reg, SANE_TRUE); @@ -2434,7 +2434,7 @@ static void gl846_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor found = 0; while (pass < 20 && !found) { - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); // now start scan gl846_begin_scan(dev, sensor, &local_reg, SANE_TRUE); @@ -2646,7 +2646,7 @@ static void gl846_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& dev->frontend.set_offset(2, bottom); gl846_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting first line reading\n", __func__); gl846_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size); @@ -2666,7 +2666,7 @@ static void gl846_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& dev->frontend.set_offset(1, top); dev->frontend.set_offset(2, top); gl846_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting second line reading\n", __func__); gl846_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -2686,7 +2686,7 @@ static void gl846_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& // scan with no move gl846_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting second line reading\n", __func__); gl846_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -2786,7 +2786,7 @@ static void gl846_coarse_gain_calibration(Genesys_Device* dev, const Genesys_Sen sanei_genesys_set_motor_power(regs, false); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); total_size = pixels * channels * (16/bpp) * lines; diff --git a/backend/genesys_gl847.cc b/backend/genesys_gl847.cc index 1c60a8851..960974a26 100644 --- a/backend/genesys_gl847.cc +++ b/backend/genesys_gl847.cc @@ -1588,7 +1588,7 @@ static void gl847_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) r = sanei_genesys_get_address (&local_reg, REG02); r->value |= REG02_MTRREV; - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl847_start_action(dev); @@ -1597,7 +1597,7 @@ static void gl847_slow_back_home(Genesys_Device* dev, SANE_Bool wait_until_home) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -1671,7 +1671,7 @@ static void gl847_search_start_position(Genesys_Device* dev) gl847_init_scan_regs(dev, sensor, &local_reg, params); // send to scanner - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); size = pixels * dev->model->search_lines; @@ -1741,7 +1741,7 @@ static void gl847_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); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); } /** @brief moves the slider to steps at motor base dpi @@ -1794,7 +1794,7 @@ static void gl847_feed(Genesys_Device* dev, unsigned int steps) r->value &= ~REG01_SCAN; // send registers - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); try { gl847_start_action(dev); @@ -1803,7 +1803,7 @@ static void gl847_feed(Genesys_Device* dev, unsigned int steps) // restore original registers catch_all_exceptions(__func__, [&]() { - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); }); throw; } @@ -1867,7 +1867,7 @@ static void gl847_init_regs_for_shading(Genesys_Device* dev, const Genesys_Senso gl847_init_scan_regs(dev, sensor, ®s, params); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); /* we use GENESYS_FLAG_SHADING_REPARK */ dev->scanhead_position_in_steps = 0; @@ -2152,7 +2152,7 @@ static void gl847_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor, sanei_genesys_set_double(®s,REG_EXPB,exp[2]); // write registers and scan data - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting line reading\n", __func__); gl847_begin_scan(dev, sensor, ®s, SANE_TRUE); @@ -2369,7 +2369,7 @@ static void gl847_boot(Genesys_Device* dev, SANE_Bool cold) gl847_init_registers (dev); // Write initial registers - sanei_genesys_bulk_write_register(dev, dev->reg); + dev->write_registers(dev->reg); /* Enable DRAM by setting a rising edge on bit 3 of reg 0x0b */ val = dev->reg.find_reg(0x0b).value & REG0B_DRAMSEL; @@ -2501,7 +2501,7 @@ static void gl847_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor r->value |= REG02_MTRREV; } - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); gl847_begin_scan(dev, sensor, &local_reg, SANE_TRUE); @@ -2527,7 +2527,7 @@ static void gl847_search_strip(Genesys_Device* dev, const Genesys_Sensor& sensor found = 0; while (pass < 20 && !found) { - sanei_genesys_bulk_write_register(dev, local_reg); + dev->write_registers(local_reg); // now start scan gl847_begin_scan(dev, sensor, &local_reg, SANE_TRUE); @@ -2739,7 +2739,7 @@ static void gl847_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& dev->frontend.set_offset(2, bottom); gl847_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting first line reading\n", __func__); gl847_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, first_line.data(), total_size); @@ -2759,7 +2759,7 @@ static void gl847_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& dev->frontend.set_offset(1, top); dev->frontend.set_offset(2, top); gl847_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting second line reading\n", __func__); gl847_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -2779,7 +2779,7 @@ static void gl847_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& // scan with no move gl847_set_fe(dev, sensor, AFE_SET); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); DBG(DBG_info, "%s: starting second line reading\n", __func__); gl847_begin_scan(dev, sensor, ®s, SANE_TRUE); sanei_genesys_read_data_from_scanner(dev, second_line.data(), total_size); @@ -2877,7 +2877,7 @@ static void gl847_coarse_gain_calibration(Genesys_Device* dev, const Genesys_Sen sanei_genesys_set_motor_power(regs, false); - sanei_genesys_bulk_write_register(dev, regs); + dev->write_registers(regs); total_size = pixels * channels * (16/bpp) * lines; diff --git a/backend/genesys_low.cc b/backend/genesys_low.cc index 4ca37697c..eefacd37d 100644 --- a/backend/genesys_low.cc +++ b/backend/genesys_low.cc @@ -542,7 +542,7 @@ void sanei_genesys_fe_read_data (Genesys_Device* dev, uint8_t addr, uint16_t* da reg.init_reg(0x50, addr); // set up read address - sanei_genesys_bulk_write_register(dev, reg); + dev->write_registers(reg); // read data uint8_t value = dev->read_register(0x46); @@ -574,7 +574,7 @@ void sanei_genesys_fe_write_data(Genesys_Device* dev, uint8_t addr, uint16_t dat reg.init_reg(0x3b, data & 0xff); } - sanei_genesys_bulk_write_register(dev, reg); + dev->write_registers(reg); } /* ------------------------------------------------------------------------ */ @@ -869,7 +869,7 @@ void sanei_genesys_set_motor_power(Genesys_Register_Set& regs, bool set) * @param reg pointer to an array of registers * @param elems size of the array */ -void sanei_genesys_bulk_write_register(Genesys_Device * dev, Genesys_Register_Set& reg) +void sanei_genesys_bulk_write_register(Genesys_Device* dev, const Genesys_Register_Set& reg) { DBG_HELPER(dbg); diff --git a/backend/genesys_low.h b/backend/genesys_low.h index 4bd4a10c6..a25550e9f 100644 --- a/backend/genesys_low.h +++ b/backend/genesys_low.h @@ -438,7 +438,8 @@ extern void sanei_genesys_read_hregister(Genesys_Device* dev, uint16_t reg, uint extern void sanei_genesys_write_hregister(Genesys_Device* dev, uint16_t reg, uint8_t val); -extern void sanei_genesys_bulk_write_register(Genesys_Device* dev, Genesys_Register_Set& regs); +extern void sanei_genesys_bulk_write_register(Genesys_Device* dev, + const Genesys_Register_Set& regs); extern void sanei_genesys_write_0x8c(Genesys_Device* dev, uint8_t index, uint8_t val);