genesys: Extract slow_back_home_ta() to common code

merge-requests/213/head
Povilas Kanapickas 2019-12-01 10:43:09 +02:00
rodzic 5b7c19a7d5
commit 35c8cb84f8
15 zmienionych plików z 85 dodań i 107 usunięć

Wyświetl plik

@ -108,7 +108,6 @@ public:
virtual void wait_for_motor_stop(Genesys_Device* dev) const = 0;
virtual void slow_back_home(Genesys_Device* dev, bool wait_until_home) const = 0;
virtual void slow_back_home_ta(Genesys_Device& dev) const = 0;
virtual void rewind(Genesys_Device* dev) const = 0;

Wyświetl plik

@ -874,6 +874,7 @@ void sanei_genesys_search_reference_point(Genesys_Device* dev, Genesys_Sensor& s
namespace gl843 {
void gl843_park_xpa_lamp(Genesys_Device* dev);
void gl843_set_xpa_motor_power(Genesys_Device* dev, Genesys_Register_Set& regs, bool set);
} // namespace gl843
namespace gl124 {
@ -1148,7 +1149,7 @@ void scanner_slow_back_home(Genesys_Device& dev, bool wait_until_home)
}
if (dev.needs_home_ta) {
dev.cmd_set->slow_back_home_ta(dev);
scanner_slow_back_home_ta(dev);
}
if (dev.cmd_set->needs_update_home_sensor_gpio()) {
@ -1265,6 +1266,83 @@ void scanner_slow_back_home(Genesys_Device& dev, bool wait_until_home)
dbg.log(DBG_info, "scanhead is still moving");
}
void scanner_slow_back_home_ta(Genesys_Device& dev)
{
DBG_HELPER(dbg);
switch (dev.model->asic_type) {
case AsicType::GL843:
break;
default:
throw SaneException("Unsupported asic type");
}
Genesys_Register_Set local_reg = dev.reg;
auto scan_method = ScanMethod::TRANSPARENCY;
unsigned resolution = dev.model->get_resolution_settings(scan_method).get_min_resolution_y();
const auto& sensor = sanei_genesys_find_sensor(&dev, resolution, 1, scan_method);
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;
compute_session(&dev, session, sensor);
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::gl843_set_xpa_motor_power(&dev, local_reg, true);
try {
scanner_start_action(dev, true);
} catch (...) {
catch_all_exceptions(__func__, [&]() { scanner_stop_action(dev); });
// restore original registers
catch_all_exceptions(__func__, [&]() { dev.interface->write_registers(dev.reg); });
throw;
}
if (is_testing_mode()) {
scanner_stop_action(dev);
return;
}
for (unsigned i = 0; i < 300; ++i) {
auto status = scanner_read_status(dev);
if (status.is_at_home) {
dbg.log(DBG_info, "TA reached home position");
scanner_stop_action(dev);
gl843::gl843_set_xpa_motor_power(&dev, local_reg, false);
dev.needs_home_ta = false;
return;
}
dev.interface->sleep_ms(100);
}
// we are not parked here.... should we fail ?
dbg.log(DBG_info, "XPA lamp is not parked");
}
void sanei_genesys_calculate_zmod(bool two_table,
uint32_t exposure_time,
const std::vector<uint16_t>& slope_table,

Wyświetl plik

@ -1130,12 +1130,6 @@ void CommandSetGl124::slow_back_home(Genesys_Device* dev, bool wait_until_home)
scanner_slow_back_home(*dev, wait_until_home);
}
void CommandSetGl124::slow_back_home_ta(Genesys_Device& dev) const
{
(void) dev;
throw SaneException("not implemented");
}
// Automatically set top-left edge of the scan area by scanning a 200x200 pixels area at 600 dpi
// from very top of scanner
void CommandSetGl124::search_start_position(Genesys_Device* dev) const

Wyświetl plik

@ -161,7 +161,6 @@ public:
void wait_for_motor_stop(Genesys_Device* dev) const override;
void slow_back_home(Genesys_Device* dev, bool wait_until_home) const override;
void slow_back_home_ta(Genesys_Device& dev) const override;
void rewind(Genesys_Device* dev) const override;
void update_hardware_sensors(struct Genesys_Scanner* s) const override;

Wyświetl plik

@ -1577,12 +1577,6 @@ void CommandSetGl646::slow_back_home(Genesys_Device* dev, bool wait_until_home)
DBG(DBG_info, "%s: scanhead is still moving\n", __func__);
}
void CommandSetGl646::slow_back_home_ta(Genesys_Device& dev) const
{
(void) dev;
throw SaneException("not implemented");
}
/**
* Automatically set top-left edge of the scan area by scanning an
* area at 300 dpi from very top of scanner

Wyświetl plik

@ -282,7 +282,6 @@ public:
void wait_for_motor_stop(Genesys_Device* dev) const override;
void slow_back_home(Genesys_Device* dev, bool wait_until_home) const override;
void slow_back_home_ta(Genesys_Device& dev) const override;
void rewind(Genesys_Device* dev) const override;
bool has_rewind() const override { return false; }

Wyświetl plik

@ -2305,12 +2305,6 @@ void CommandSetGl841::slow_back_home(Genesys_Device* dev, bool wait_until_home)
DBG(DBG_info, "%s: scanhead is still moving\n", __func__);
}
void CommandSetGl841::slow_back_home_ta(Genesys_Device& dev) const
{
(void) dev;
throw SaneException("not implemented");
}
// Automatically set top-left edge of the scan area by scanning a 200x200 pixels area at 600 dpi
// from very top of scanner
void CommandSetGl841::search_start_position(Genesys_Device* dev) const

Wyświetl plik

@ -99,7 +99,6 @@ public:
void wait_for_motor_stop(Genesys_Device* dev) const override;
void slow_back_home(Genesys_Device* dev, bool wait_until_home) const override;
void slow_back_home_ta(Genesys_Device& dev) const override;
void rewind(Genesys_Device* dev) const override;
bool has_rewind() const override { return false; }

Wyświetl plik

@ -1386,8 +1386,9 @@ void CommandSetGl843::detect_document_end(Genesys_Device* dev) const
}
// enables or disables XPA slider motor
static void gl843_set_xpa_motor_power(Genesys_Device* dev, bool set)
void gl843_set_xpa_motor_power(Genesys_Device* dev, Genesys_Register_Set& regs, bool set)
{
(void) regs;
DBG_HELPER(dbg);
uint8_t val;
@ -1606,7 +1607,7 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
if (reg->state.is_xpa_on) {
dev->needs_home_ta = true;
gl843_set_xpa_motor_power(dev, true);
gl843_set_xpa_motor_power(dev, *reg, true);
}
// blinking led
@ -1619,7 +1620,7 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
}
if (reg->state.is_xpa_on) {
dev->needs_home_ta = true;
gl843_set_xpa_motor_power(dev, true);
gl843_set_xpa_motor_power(dev, *reg, true);
}
break;
case GpioId::PLUSTEK_OPTICFILM_7200I:
@ -1667,72 +1668,6 @@ 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& dev) const
{
DBG_HELPER(dbg);
Genesys_Register_Set local_reg = dev.reg;
auto scan_method = ScanMethod::TRANSPARENCY;
unsigned resolution = dev.model->get_resolution_settings(scan_method).get_min_resolution_y();
const auto& sensor = sanei_genesys_find_sensor(&dev, resolution, 1, scan_method);
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;
compute_session(&dev, session, sensor);
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);
} catch (...) {
catch_all_exceptions(__func__, [&]() { scanner_stop_action(dev); });
// restore original registers
catch_all_exceptions(__func__, [&]() { dev.interface->write_registers(dev.reg); });
throw;
}
for (unsigned i = 0; i < 300; ++i) {
auto status = scanner_read_status(dev);
if (status.is_at_home) {
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);
}
// 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
* */
void CommandSetGl843::slow_back_home(Genesys_Device* dev, bool wait_until_home) const

Wyświetl plik

@ -99,7 +99,6 @@ public:
void wait_for_motor_stop(Genesys_Device* dev) const override;
void slow_back_home(Genesys_Device* dev, bool wait_until_home) const override;
void slow_back_home_ta(Genesys_Device& dev) const override;
void rewind(Genesys_Device* dev) const override;
bool has_rewind() const override { return false; }

Wyświetl plik

@ -888,12 +888,6 @@ void CommandSetGl846::slow_back_home(Genesys_Device* dev, bool wait_until_home)
scanner_slow_back_home(*dev, wait_until_home);
}
void CommandSetGl846::slow_back_home_ta(Genesys_Device& dev) const
{
(void) dev;
throw SaneException("not implemented");
}
// Automatically set top-left edge of the scan area by scanning a 200x200 pixels area at 600 dpi
// from very top of scanner
void CommandSetGl846::search_start_position(Genesys_Device* dev) const

Wyświetl plik

@ -174,7 +174,6 @@ public:
void wait_for_motor_stop(Genesys_Device* dev) const override;
void slow_back_home(Genesys_Device* dev, bool wait_until_home) const override;
void slow_back_home_ta(Genesys_Device& dev) const override;
void rewind(Genesys_Device* dev) const override;
bool has_rewind() const override { return false; }

Wyświetl plik

@ -931,12 +931,6 @@ void CommandSetGl847::slow_back_home(Genesys_Device* dev, bool wait_until_home)
scanner_slow_back_home(*dev, wait_until_home);
}
void CommandSetGl847::slow_back_home_ta(Genesys_Device& dev) const
{
(void) dev;
throw SaneException("not implemented");
}
// Automatically set top-left edge of the scan area by scanning a 200x200 pixels area at 600 dpi
// from very top of scanner
void CommandSetGl847::search_start_position(Genesys_Device* dev) const

Wyświetl plik

@ -162,7 +162,6 @@ public:
void wait_for_motor_stop(Genesys_Device* dev) const override;
void slow_back_home(Genesys_Device* dev, bool wait_until_home) const override;
void slow_back_home_ta(Genesys_Device& dev) const override;
void rewind(Genesys_Device* dev) const override;
bool has_rewind() const override { return false; }

Wyświetl plik

@ -356,6 +356,8 @@ extern void sanei_genesys_search_reference_point(Genesys_Device* dev, Genesys_Se
void scanner_move(Genesys_Device& dev, unsigned steps, Direction direction);
void scanner_slow_back_home(Genesys_Device& dev, bool wait_until_home);
void scanner_slow_back_home_ta(Genesys_Device& dev);
void scanner_clear_scan_and_feed_counts(Genesys_Device& dev);
extern void sanei_genesys_write_file(const char* filename, const std::uint8_t* data,