genesys: Use full scan initialization in slow_back_home_ta()

merge-requests/228/merge
Povilas Kanapickas 2019-11-30 19:19:21 +02:00
rodzic 66a95875d4
commit f98bec2afb
2 zmienionych plików z 46 dodań i 40 usunięć

Wyświetl plik

@ -1727,63 +1727,67 @@ void CommandSetGl843::end_scan(Genesys_Device* dev, Genesys_Register_Set* reg,
/** @brief park XPA lamp
* park the XPA lamp if needed
*/
void CommandSetGl843::slow_back_home_ta(Genesys_Device& devr) const
void CommandSetGl843::slow_back_home_ta(Genesys_Device& dev) const
{
Genesys_Device* dev = &devr;
DBG_HELPER(dbg);
Genesys_Register_Set local_reg;
GenesysRegister *r;
int loop = 0;
Genesys_Register_Set local_reg = dev.reg;
/* copy scan settings */
local_reg = dev->reg;
auto scan_method = ScanMethod::TRANSPARENCY;
unsigned resolution = dev.model->get_resolution_settings(scan_method).get_min_resolution_y();
/* set a huge feedl and reverse direction */
local_reg.set24(REG_FEEDL, 0xbdcd);
const auto& sensor = sanei_genesys_find_sensor(&dev, resolution, 1, scan_method);
// clear scan and feed count
dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT);
ScanSession session;
session.params.xres = resolution;
session.params.yres = resolution;
session.params.startx = 100;
session.params.starty = 30000;
session.params.pixels = 100;
session.params.lines = 100;
session.params.depth = 8;
session.params.channels = 1;
session.params.scan_method = scan_method;
session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = ColorFilter::RED;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::IGNORE_LINE_DISTANCE |
ScanFlag::REVERSE;
/* set up for reverse and no scan */
r = sanei_genesys_get_address (&local_reg, REG_0x02);
r->value |= REG_0x02_MTRREV;
r = sanei_genesys_get_address (&local_reg, REG_0x01);
r->value &= ~REG_0x01_SCAN;
compute_session(&dev, session, sensor);
// write to scanner and start action
dev->interface->write_registers(local_reg);
gl843_set_xpa_motor_power(dev, true);
dev.cmd_set->init_regs_for_scan_session(&dev, sensor, &local_reg, session);
scanner_clear_scan_and_feed_counts(dev);
dev.interface->write_registers(local_reg);
gl843_set_xpa_motor_power(&dev, true);
try {
scanner_start_action(*dev, true);
scanner_start_action(dev, true);
} catch (...) {
catch_all_exceptions(__func__, [&]() { gl843_stop_action(dev); });
catch_all_exceptions(__func__, [&]() { scanner_stop_action(dev); });
// restore original registers
catch_all_exceptions(__func__, [&]()
{
dev->interface->write_registers(dev->reg);
});
catch_all_exceptions(__func__, [&]() { dev.interface->write_registers(dev.reg); });
throw;
}
while (loop < 600) /* do not wait longer then 60 seconds */
{
auto status = scanner_read_status(*dev);
for (unsigned i = 0; i < 300; ++i) {
auto status = scanner_read_status(dev);
if (status.is_at_home) {
DBG(DBG_info, "%s: reached home position\n", __func__);
DBG(DBG_proc, "%s: finished\n", __func__);
gl843_set_xpa_motor_power(dev, false);
dev->needs_home_ta = false;
dbg.log(DBG_info, "TA reached home position");
scanner_stop_action(dev);
gl843_set_xpa_motor_power(&dev, false);
dev.needs_home_ta = false;
return;
}
dev->interface->sleep_ms(100);
++loop;
}
dev.interface->sleep_ms(100);
}
/* we are not parked here.... should we fail ? */
DBG(DBG_info, "%s: XPA lamp is not parked\n", __func__);
// we are not parked here.... should we fail ?
dbg.log(DBG_info, "XPA lamp is not parked");
}
/** @brief Moves the slider to the home (top) position slowly

Wyświetl plik

@ -353,6 +353,7 @@ extern void sanei_genesys_search_reference_point(Genesys_Device* dev, Genesys_Se
int width, int height);
void scanner_slow_back_home(Genesys_Device& dev, bool wait_until_home);
void scanner_clear_scan_and_feed_counts(Genesys_Device& dev);
extern void sanei_genesys_write_file(const char* filename, const std::uint8_t* data,
std::size_t length);
@ -411,6 +412,7 @@ extern void sanei_genesys_wait_for_home(Genesys_Device* dev);
extern void sanei_genesys_asic_init(Genesys_Device* dev, bool cold);
void scanner_start_action(Genesys_Device& dev, bool start_motor);
void scanner_stop_action(Genesys_Device& dev);
const Motor_Profile& sanei_genesys_get_motor_profile(const std::vector<Motor_Profile>& motors,
MotorId motor_id, int exposure);