kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'genesys-use-full-scan-ta' into 'master'
genesys: Use full scan initialization in slow_back_home_ta() See merge request sane-project/backends!251merge-requests/228/merge
commit
f41bd003d0
|
@ -108,6 +108,8 @@ public:
|
||||||
|
|
||||||
virtual void wait_for_motor_stop(Genesys_Device* dev) const = 0;
|
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(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;
|
virtual void rewind(Genesys_Device* dev) const = 0;
|
||||||
|
|
||||||
virtual bool has_rewind() const { return true; }
|
virtual bool has_rewind() const { return true; }
|
||||||
|
|
|
@ -960,7 +960,7 @@ void scanner_slow_back_home(Genesys_Device& dev, bool wait_until_home)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev.needs_home_ta) {
|
if (dev.needs_home_ta) {
|
||||||
gl843::gl843_park_xpa_lamp(&dev);
|
dev.cmd_set->slow_back_home_ta(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev.cmd_set->needs_update_home_sensor_gpio()) {
|
if (dev.cmd_set->needs_update_home_sensor_gpio()) {
|
||||||
|
@ -1024,11 +1024,6 @@ void scanner_slow_back_home(Genesys_Device& dev, bool wait_until_home)
|
||||||
|
|
||||||
scanner_clear_scan_and_feed_counts(dev);
|
scanner_clear_scan_and_feed_counts(dev);
|
||||||
|
|
||||||
// FIXME: why we do differently than other asics here?
|
|
||||||
if (dev.model->asic_type == AsicType::GL843) {
|
|
||||||
local_reg.find_reg(gl843::REG_0x01).value &= ~gl843::REG_0x01_SCAN;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev.interface->write_registers(local_reg);
|
dev.interface->write_registers(local_reg);
|
||||||
|
|
||||||
if (dev.model->asic_type == AsicType::GL124) {
|
if (dev.model->asic_type == AsicType::GL124) {
|
||||||
|
|
|
@ -748,7 +748,6 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
|
||||||
} else {
|
} else {
|
||||||
r->value |= REG_0x01_DVDSET;
|
r->value |= REG_0x01_DVDSET;
|
||||||
}
|
}
|
||||||
r->value &= ~REG_0x01_SCAN;
|
|
||||||
|
|
||||||
r = sanei_genesys_get_address(reg, REG_0x03);
|
r = sanei_genesys_get_address(reg, REG_0x03);
|
||||||
if ((dev->model->sensor_id != SensorId::CIS_CANON_LIDE_120) && (session.params.xres>=600)) {
|
if ((dev->model->sensor_id != SensorId::CIS_CANON_LIDE_120) && (session.params.xres>=600)) {
|
||||||
|
@ -1181,6 +1180,12 @@ void CommandSetGl124::slow_back_home(Genesys_Device* dev, bool wait_until_home)
|
||||||
scanner_slow_back_home(*dev, 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");
|
||||||
|
}
|
||||||
|
|
||||||
/** @brief moves the slider to steps at motor base dpi
|
/** @brief moves the slider to steps at motor base dpi
|
||||||
* @param dev device to work on
|
* @param dev device to work on
|
||||||
* @param steps number of steps to move
|
* @param steps number of steps to move
|
||||||
|
|
|
@ -165,6 +165,7 @@ public:
|
||||||
|
|
||||||
void wait_for_motor_stop(Genesys_Device* dev) const override;
|
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(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 rewind(Genesys_Device* dev) const override;
|
||||||
|
|
||||||
void update_hardware_sensors(struct Genesys_Scanner* s) const override;
|
void update_hardware_sensors(struct Genesys_Scanner* s) const override;
|
||||||
|
|
|
@ -1579,6 +1579,12 @@ void CommandSetGl646::slow_back_home(Genesys_Device* dev, bool wait_until_home)
|
||||||
DBG(DBG_info, "%s: scanhead is still moving\n", __func__);
|
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
|
* Automatically set top-left edge of the scan area by scanning an
|
||||||
* area at 300 dpi from very top of scanner
|
* area at 300 dpi from very top of scanner
|
||||||
|
|
|
@ -282,6 +282,7 @@ public:
|
||||||
|
|
||||||
void wait_for_motor_stop(Genesys_Device* dev) const override;
|
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(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 rewind(Genesys_Device* dev) const override;
|
||||||
|
|
||||||
bool has_rewind() const override { return false; }
|
bool has_rewind() const override { return false; }
|
||||||
|
|
|
@ -2325,6 +2325,12 @@ void CommandSetGl841::slow_back_home(Genesys_Device* dev, bool wait_until_home)
|
||||||
DBG(DBG_info, "%s: scanhead is still moving\n", __func__);
|
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
|
// Automatically set top-left edge of the scan area by scanning a 200x200 pixels area at 600 dpi
|
||||||
// from very top of scanner
|
// from very top of scanner
|
||||||
void CommandSetGl841::search_start_position(Genesys_Device* dev) const
|
void CommandSetGl841::search_start_position(Genesys_Device* dev) const
|
||||||
|
|
|
@ -99,6 +99,7 @@ public:
|
||||||
|
|
||||||
void wait_for_motor_stop(Genesys_Device* dev) const override;
|
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(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 rewind(Genesys_Device* dev) const override;
|
||||||
|
|
||||||
bool has_rewind() const override { return false; }
|
bool has_rewind() const override { return false; }
|
||||||
|
|
|
@ -1727,61 +1727,67 @@ void CommandSetGl843::end_scan(Genesys_Device* dev, Genesys_Register_Set* reg,
|
||||||
/** @brief park XPA lamp
|
/** @brief park XPA lamp
|
||||||
* park the XPA lamp if needed
|
* park the XPA lamp if needed
|
||||||
*/
|
*/
|
||||||
void gl843_park_xpa_lamp(Genesys_Device* dev)
|
void CommandSetGl843::slow_back_home_ta(Genesys_Device& dev) const
|
||||||
{
|
{
|
||||||
DBG_HELPER(dbg);
|
DBG_HELPER(dbg);
|
||||||
Genesys_Register_Set local_reg;
|
Genesys_Register_Set local_reg = dev.reg;
|
||||||
GenesysRegister *r;
|
|
||||||
int loop = 0;
|
|
||||||
|
|
||||||
/* copy scan settings */
|
auto scan_method = ScanMethod::TRANSPARENCY;
|
||||||
local_reg = dev->reg;
|
unsigned resolution = dev.model->get_resolution_settings(scan_method).get_min_resolution_y();
|
||||||
|
|
||||||
/* set a huge feedl and reverse direction */
|
const auto& sensor = sanei_genesys_find_sensor(&dev, resolution, 1, scan_method);
|
||||||
local_reg.set24(REG_FEEDL, 0xbdcd);
|
|
||||||
|
|
||||||
// clear scan and feed count
|
ScanSession session;
|
||||||
dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT);
|
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 */
|
compute_session(&dev, session, sensor);
|
||||||
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;
|
|
||||||
|
|
||||||
// write to scanner and start action
|
dev.cmd_set->init_regs_for_scan_session(&dev, sensor, &local_reg, session);
|
||||||
dev->interface->write_registers(local_reg);
|
|
||||||
gl843_set_xpa_motor_power(dev, true);
|
scanner_clear_scan_and_feed_counts(dev);
|
||||||
|
|
||||||
|
dev.interface->write_registers(local_reg);
|
||||||
|
gl843_set_xpa_motor_power(&dev, true);
|
||||||
try {
|
try {
|
||||||
scanner_start_action(*dev, true);
|
scanner_start_action(dev, true);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
catch_all_exceptions(__func__, [&]() { gl843_stop_action(dev); });
|
catch_all_exceptions(__func__, [&]() { scanner_stop_action(dev); });
|
||||||
// restore original registers
|
// restore original registers
|
||||||
catch_all_exceptions(__func__, [&]()
|
catch_all_exceptions(__func__, [&]() { dev.interface->write_registers(dev.reg); });
|
||||||
{
|
|
||||||
dev->interface->write_registers(dev->reg);
|
|
||||||
});
|
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (loop < 600) /* do not wait longer then 60 seconds */
|
for (unsigned i = 0; i < 300; ++i) {
|
||||||
{
|
|
||||||
auto status = scanner_read_status(*dev);
|
auto status = scanner_read_status(dev);
|
||||||
|
|
||||||
if (status.is_at_home) {
|
if (status.is_at_home) {
|
||||||
DBG(DBG_info, "%s: reached home position\n", __func__);
|
dbg.log(DBG_info, "TA reached home position");
|
||||||
DBG(DBG_proc, "%s: finished\n", __func__);
|
scanner_stop_action(dev);
|
||||||
|
gl843_set_xpa_motor_power(&dev, false);
|
||||||
gl843_set_xpa_motor_power(dev, false);
|
dev.needs_home_ta = false;
|
||||||
dev->needs_home_ta = false;
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dev->interface->sleep_ms(100);
|
|
||||||
++loop;
|
dev.interface->sleep_ms(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we are not parked here.... should we fail ? */
|
// we are not parked here.... should we fail ?
|
||||||
DBG(DBG_info, "%s: XPA lamp is not parked\n", __func__);
|
dbg.log(DBG_info, "XPA lamp is not parked");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief Moves the slider to the home (top) position slowly
|
/** @brief Moves the slider to the home (top) position slowly
|
||||||
|
|
|
@ -99,6 +99,7 @@ public:
|
||||||
|
|
||||||
void wait_for_motor_stop(Genesys_Device* dev) const override;
|
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(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 rewind(Genesys_Device* dev) const override;
|
||||||
|
|
||||||
bool has_rewind() const override { return false; }
|
bool has_rewind() const override { return false; }
|
||||||
|
|
|
@ -934,6 +934,12 @@ void CommandSetGl846::slow_back_home(Genesys_Device* dev, bool wait_until_home)
|
||||||
scanner_slow_back_home(*dev, 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
|
// Automatically set top-left edge of the scan area by scanning a 200x200 pixels area at 600 dpi
|
||||||
// from very top of scanner
|
// from very top of scanner
|
||||||
void CommandSetGl846::search_start_position(Genesys_Device* dev) const
|
void CommandSetGl846::search_start_position(Genesys_Device* dev) const
|
||||||
|
|
|
@ -184,6 +184,7 @@ public:
|
||||||
|
|
||||||
void wait_for_motor_stop(Genesys_Device* dev) const override;
|
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(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 rewind(Genesys_Device* dev) const override;
|
||||||
|
|
||||||
bool has_rewind() const override { return false; }
|
bool has_rewind() const override { return false; }
|
||||||
|
|
|
@ -980,6 +980,12 @@ void CommandSetGl847::slow_back_home(Genesys_Device* dev, bool wait_until_home)
|
||||||
scanner_slow_back_home(*dev, 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
|
// Automatically set top-left edge of the scan area by scanning a 200x200 pixels area at 600 dpi
|
||||||
// from very top of scanner
|
// from very top of scanner
|
||||||
void CommandSetGl847::search_start_position(Genesys_Device* dev) const
|
void CommandSetGl847::search_start_position(Genesys_Device* dev) const
|
||||||
|
|
|
@ -168,6 +168,7 @@ public:
|
||||||
|
|
||||||
void wait_for_motor_stop(Genesys_Device* dev) const override;
|
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(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 rewind(Genesys_Device* dev) const override;
|
||||||
|
|
||||||
bool has_rewind() const override { return false; }
|
bool has_rewind() const override { return false; }
|
||||||
|
|
|
@ -353,6 +353,7 @@ extern void sanei_genesys_search_reference_point(Genesys_Device* dev, Genesys_Se
|
||||||
int width, int height);
|
int width, int height);
|
||||||
|
|
||||||
void scanner_slow_back_home(Genesys_Device& dev, bool wait_until_home);
|
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,
|
extern void sanei_genesys_write_file(const char* filename, const std::uint8_t* data,
|
||||||
std::size_t length);
|
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);
|
extern void sanei_genesys_asic_init(Genesys_Device* dev, bool cold);
|
||||||
|
|
||||||
void scanner_start_action(Genesys_Device& dev, bool start_motor);
|
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,
|
const Motor_Profile& sanei_genesys_get_motor_profile(const std::vector<Motor_Profile>& motors,
|
||||||
MotorId motor_id, int exposure);
|
MotorId motor_id, int exposure);
|
||||||
|
|
Ładowanie…
Reference in New Issue