genesys: Cache physical register state in the device on bulk writes

merge-requests/111/head
Povilas Kanapickas 2019-08-02 22:39:00 +03:00
rodzic 7836ea5778
commit faab7b02e0
11 zmienionych plików z 117 dodań i 107 usunięć

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -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<uint8_t> 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, &regs, SANE_TRUE);
@ -2432,7 +2432,7 @@ static void gl124_led_calibration(Genesys_Device* dev, Genesys_Sensor& sensor,
sanei_genesys_set_triple(&regs,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, &regs, 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, &regs, 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, &regs, 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, &regs, 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;

Wyświetl plik

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

Wyświetl plik

@ -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, &regs, 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, &regs, 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, &regs, 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, &regs, 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, &regs, 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, &regs, 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);

Wyświetl plik

@ -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(&regs,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, &regs, 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, &regs, 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, &regs, 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, &regs, 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, &regs, 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);

Wyświetl plik

@ -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, &regs, 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(&regs,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, &regs, 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, &regs, 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, &regs, 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, &regs, 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;

Wyświetl plik

@ -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, &regs, 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(&regs,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, &regs, 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, &regs, 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, &regs, 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, &regs, 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;

Wyświetl plik

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

Wyświetl plik

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