genesys: Move motor direction register adjustment to low level functions

merge-requests/228/merge
Povilas Kanapickas 2019-11-30 19:06:42 +02:00
rodzic 50149e9064
commit 3ada79c35a
8 zmienionych plików z 79 dodań i 73 usunięć

Wyświetl plik

@ -425,6 +425,7 @@ enum class ScanFlag : unsigned
USE_XPA = 1 << 8, USE_XPA = 1 << 8,
ENABLE_LEDADD = 1 << 9, ENABLE_LEDADD = 1 << 9,
USE_XCORRECTION = 1 << 10, USE_XCORRECTION = 1 << 10,
REVERSE = 1 << 11,
}; };
inline ScanFlag operator|(ScanFlag left, ScanFlag right) inline ScanFlag operator|(ScanFlag left, ScanFlag right)
@ -472,6 +473,7 @@ enum class MotorFlag : unsigned
DISABLE_BUFFER_FULL_MOVE = 1 << 2, DISABLE_BUFFER_FULL_MOVE = 1 << 2,
FEED = 1 << 3, FEED = 1 << 3,
USE_XPA = 1 << 4, USE_XPA = 1 << 4,
REVERSE = 1 << 5,
}; };
inline MotorFlag operator|(MotorFlag left, MotorFlag right) inline MotorFlag operator|(MotorFlag left, MotorFlag right)

Wyświetl plik

@ -576,6 +576,9 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev,
{ {
r02 |= REG_0x02_ACDCDIS; r02 |= REG_0x02_ACDCDIS;
} }
if (has_flag(flags, MotorFlag::REVERSE)) {
r02 |= REG_0x02_MTRREV;
}
reg->set8(REG_0x02, r02); reg->set8(REG_0x02, r02);
sanei_genesys_set_motor_power(*reg, true); sanei_genesys_set_motor_power(*reg, true);
@ -933,6 +936,9 @@ static void gl124_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
if (has_flag(session.params.flags, ScanFlag::FEEDING)) { if (has_flag(session.params.flags, ScanFlag::FEEDING)) {
mflags |= MotorFlag::FEED; mflags |= MotorFlag::FEED;
} }
if (has_flag(session.params.flags, ScanFlag::REVERSE)) {
mflags |= MotorFlag::REVERSE;
}
gl124_init_motor_regs_scan(dev, sensor, reg, motor_profile, exposure_time, slope_dpi, gl124_init_motor_regs_scan(dev, sensor, reg, motor_profile, exposure_time, slope_dpi,
dev->model->is_cis ? session.output_line_count * session.params.channels : dev->model->is_cis ? session.output_line_count * session.params.channels :
session.output_line_count, session.output_line_count,
@ -1204,7 +1210,6 @@ void CommandSetGl124::slow_back_home(Genesys_Device* dev, bool wait_until_home)
{ {
DBG_HELPER_ARGS(dbg, "wait_until_home = %d", wait_until_home); DBG_HELPER_ARGS(dbg, "wait_until_home = %d", wait_until_home);
Genesys_Register_Set local_reg; Genesys_Register_Set local_reg;
GenesysRegister *r;
uint8_t val; uint8_t val;
int loop = 0; int loop = 0;
@ -1260,7 +1265,8 @@ void CommandSetGl124::slow_back_home(Genesys_Device* dev, bool wait_until_home)
session.params.color_filter = ColorFilter::RED; session.params.color_filter = ColorFilter::RED;
session.params.flags = ScanFlag::DISABLE_SHADING | session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA | ScanFlag::DISABLE_GAMMA |
ScanFlag::IGNORE_LINE_DISTANCE; ScanFlag::IGNORE_LINE_DISTANCE |
ScanFlag::REVERSE;
compute_session(dev, session, sensor); compute_session(dev, session, sensor);
gl124_init_scan_regs(dev, sensor, &local_reg, session); gl124_init_scan_regs(dev, sensor, &local_reg, session);
@ -1268,9 +1274,6 @@ void CommandSetGl124::slow_back_home(Genesys_Device* dev, bool wait_until_home)
// clear scan and feed count // clear scan and feed count
dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT); dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT);
/* set up for reverse and no scan */
r = sanei_genesys_get_address(&local_reg, REG_0x02);
r->value |= REG_0x02_MTRREV;
dev->interface->write_registers(local_reg); dev->interface->write_registers(local_reg);
@ -1356,6 +1359,9 @@ static void gl124_feed(Genesys_Device* dev, unsigned int steps, int reverse)
ScanFlag::FEEDING | ScanFlag::FEEDING |
ScanFlag::DISABLE_BUFFER_FULL_MOVE | ScanFlag::DISABLE_BUFFER_FULL_MOVE |
ScanFlag::IGNORE_LINE_DISTANCE; ScanFlag::IGNORE_LINE_DISTANCE;
if (reverse) {
session.params.flags |= ScanFlag::REVERSE;
}
compute_session(dev, session, sensor); compute_session(dev, session, sensor);
gl124_init_scan_regs(dev, sensor, &local_reg, session); gl124_init_scan_regs(dev, sensor, &local_reg, session);
@ -1372,13 +1378,6 @@ static void gl124_feed(Genesys_Device* dev, unsigned int steps, int reverse)
r = sanei_genesys_get_address (&local_reg, REG_0x01); r = sanei_genesys_get_address (&local_reg, REG_0x01);
r->value &= ~REG_0x01_SCAN; r->value &= ~REG_0x01_SCAN;
/* set up for reverse if needed */
if(reverse)
{
r = sanei_genesys_get_address (&local_reg, REG_0x02);
r->value |= REG_0x02_MTRREV;
}
// send registers // send registers
dev->interface->write_registers(local_reg); dev->interface->write_registers(local_reg);

Wyświetl plik

@ -303,7 +303,12 @@ static void gl646_setup_registers(Genesys_Device* dev,
/* setup motor power and direction */ /* setup motor power and direction */
sanei_genesys_set_motor_power(*regs, true); sanei_genesys_set_motor_power(*regs, true);
regs->find_reg(0x02).value &= ~REG_0x02_MTRREV;
if (has_flag(session.params.flags, ScanFlag::REVERSE)) {
regs->find_reg(0x02).value |= REG_0x02_MTRREV;
} else {
regs->find_reg(0x02).value &= ~REG_0x02_MTRREV;
}
/* fastfed enabled (2 motor slope tables) */ /* fastfed enabled (2 motor slope tables) */
if (motor->fastfed) { if (motor->fastfed) {
@ -1585,10 +1590,9 @@ void CommandSetGl646::slow_back_home(Genesys_Device* dev, bool wait_until_home)
const auto& sensor = sanei_genesys_find_sensor(dev, settings.xres, 3, const auto& sensor = sanei_genesys_find_sensor(dev, settings.xres, 3,
dev->model->default_method); dev->model->default_method);
setup_for_scan(dev, sensor, &dev->reg, settings, true, true, true); setup_for_scan(dev, sensor, &dev->reg, settings, true, true, true, true);
/* backward , no actual data scanned TODO more setup flags to avoid this register manipulations ? */ /* backward , no actual data scanned TODO more setup flags to avoid this register manipulations ? */
dev->reg.find_reg(0x02).value |= REG_0x02_MTRREV;
dev->reg.find_reg(0x01).value &= ~REG_0x01_SCAN; dev->reg.find_reg(0x01).value &= ~REG_0x01_SCAN;
dev->reg.set24(REG_FEEDL, 65535); dev->reg.set24(REG_FEEDL, 65535);
@ -1779,7 +1783,7 @@ void CommandSetGl646::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
// we don't want top offset, but we need right margin to be the same than the one for the final // we don't want top offset, but we need right margin to be the same than the one for the final
// scan // scan
setup_for_scan(dev, calib_sensor, &dev->reg, settings, true, false, false); setup_for_scan(dev, calib_sensor, &dev->reg, settings, true, false, false, false);
/* used when sending shading calibration data */ /* used when sending shading calibration data */
dev->calib_pixels = settings.pixels; dev->calib_pixels = settings.pixels;
@ -1861,7 +1865,8 @@ static void setup_for_scan(Genesys_Device* dev,
Genesys_Settings settings, Genesys_Settings settings,
bool split, bool split,
bool xcorrection, bool xcorrection,
bool ycorrection) bool ycorrection,
bool reverse)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
@ -1918,6 +1923,9 @@ static void setup_for_scan(Genesys_Device* dev,
if (xcorrection) { if (xcorrection) {
session.params.flags |= ScanFlag::USE_XCORRECTION; session.params.flags |= ScanFlag::USE_XCORRECTION;
} }
if (reverse) {
session.params.flags |= ScanFlag::REVERSE;
}
compute_session(dev, session, sensor); compute_session(dev, session, sensor);
std::vector<uint16_t> slope_table0; std::vector<uint16_t> slope_table0;
@ -2702,7 +2710,7 @@ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
settings.threshold = 0; settings.threshold = 0;
// setup for scan // setup for scan
setup_for_scan(dev, local_sensor, &dev->reg, settings, true, false, false); setup_for_scan(dev, local_sensor, &dev->reg, settings, true, false, false, false);
/* we are not going to move, so clear these bits */ /* we are not going to move, so clear these bits */
dev->reg.find_reg(0x02).value &= ~(REG_0x02_FASTFED | REG_0x02_AGOHOME); dev->reg.find_reg(0x02).value &= ~(REG_0x02_FASTFED | REG_0x02_AGOHOME);
@ -2756,7 +2764,7 @@ static void gl646_repark_head(Genesys_Device* dev)
const auto& sensor = sanei_genesys_find_sensor(dev, settings.xres, 3, const auto& sensor = sanei_genesys_find_sensor(dev, settings.xres, 3,
dev->model->default_method); dev->model->default_method);
setup_for_scan(dev, sensor, &dev->reg, settings, false, false, false); setup_for_scan(dev, sensor, &dev->reg, settings, false, false, false, false);
/* TODO seems wrong ... no effective scan */ /* TODO seems wrong ... no effective scan */
dev->reg.find_reg(0x01).value &= ~REG_0x01_SCAN; dev->reg.find_reg(0x01).value &= ~REG_0x01_SCAN;
@ -2967,7 +2975,7 @@ static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
/* setup for move then scan */ /* setup for move then scan */
split = !(move && settings.tl_y > 0); split = !(move && settings.tl_y > 0);
setup_for_scan(dev, sensor, &dev->reg, settings, split, false, false); setup_for_scan(dev, sensor, &dev->reg, settings, split, false, false, !forward);
/* allocate memory fo scan : LINCNT may have been adjusted for CCD reordering */ /* allocate memory fo scan : LINCNT may have been adjusted for CCD reordering */
if (dev->model->is_cis) { if (dev->model->is_cis) {
@ -3011,11 +3019,6 @@ static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
/* no automatic go home if no movement */ /* no automatic go home if no movement */
dev->reg.find_reg(0x02).value &= ~REG_0x02_AGOHOME; dev->reg.find_reg(0x02).value &= ~REG_0x02_AGOHOME;
} }
if (!forward) {
dev->reg.find_reg(0x02).value |= REG_0x02_MTRREV;
} else {
dev->reg.find_reg(0x02).value &= ~REG_0x02_MTRREV;
}
/* no automatic go home when using XPA */ /* no automatic go home when using XPA */
if (settings.scan_method == ScanMethod::TRANSPARENCY) { if (settings.scan_method == ScanMethod::TRANSPARENCY) {

Wyświetl plik

@ -73,7 +73,8 @@ static void setup_for_scan(Genesys_Device* device,
Genesys_Settings settings, Genesys_Settings settings,
bool split, bool split,
bool xcorrection, bool xcorrection,
bool ycorrection); bool ycorrection,
bool reverse);
/** /**
* Does a simple move of the given distance by doing a scan at lowest resolution * Does a simple move of the given distance by doing a scan at lowest resolution

Wyświetl plik

@ -957,6 +957,10 @@ HOME_FREE: 3
r->value &= ~0x40; r->value &= ~0x40;
if (has_flag(flags, MotorFlag::REVERSE)) {
r->value |= REG_0x02_MTRREV;
}
gl841_send_slope_table(dev, 3, fast_slope_table, 256); gl841_send_slope_table(dev, 3, fast_slope_table, 256);
r = sanei_genesys_get_address(reg, 0x67); r = sanei_genesys_get_address(reg, 0x67);
@ -2308,11 +2312,9 @@ void CommandSetGl841::slow_back_home(Genesys_Device* dev, bool wait_until_home)
const auto& sensor = sanei_genesys_find_sensor_any(dev); const auto& sensor = sanei_genesys_find_sensor_any(dev);
gl841_init_motor_regs(dev, sensor, &local_reg, 65536, MOTOR_ACTION_GO_HOME, MotorFlag::NONE); gl841_init_motor_regs(dev, sensor, &local_reg, 65536, MOTOR_ACTION_GO_HOME, MotorFlag::REVERSE);
/* set up for reverse and no scan */ // set up for 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 = sanei_genesys_get_address(&local_reg, REG_0x01);
r->value &= ~REG_0x01_SCAN; r->value &= ~REG_0x01_SCAN;

Wyświetl plik

@ -873,6 +873,12 @@ static void gl843_init_motor_regs_scan(Genesys_Device* dev,
r->value |= REG_0x02_ACDCDIS; r->value |= REG_0x02_ACDCDIS;
} }
if (has_flag(flags, MotorFlag::REVERSE)) {
r->value |= REG_0x02_MTRREV;
} else {
r->value &= ~REG_0x02_MTRREV;
}
/* scan and backtracking slope table */ /* scan and backtracking slope table */
auto scan_table = sanei_genesys_slope_table(scan_yres, exposure, dev->motor.base_ydpi, auto scan_table = sanei_genesys_slope_table(scan_yres, exposure, dev->motor.base_ydpi,
factor, motor_profile); factor, motor_profile);
@ -1220,6 +1226,9 @@ static void gl843_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
if (has_flag(session.params.flags, ScanFlag::USE_XPA)) { if (has_flag(session.params.flags, ScanFlag::USE_XPA)) {
mflags |= MotorFlag::USE_XPA; mflags |= MotorFlag::USE_XPA;
} }
if (has_flag(session.params.flags, ScanFlag::REVERSE)) {
mflags |= MotorFlag::REVERSE;
}
unsigned scan_lines = dev->model->is_cis ? session.output_line_count * session.params.channels unsigned scan_lines = dev->model->is_cis ? session.output_line_count * session.params.channels
: session.output_line_count; : session.output_line_count;
@ -1859,7 +1868,8 @@ void CommandSetGl843::slow_back_home(Genesys_Device* dev, bool wait_until_home)
session.params.flags = ScanFlag::DISABLE_SHADING | session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA | ScanFlag::DISABLE_GAMMA |
ScanFlag::DISABLE_BUFFER_FULL_MOVE | ScanFlag::DISABLE_BUFFER_FULL_MOVE |
ScanFlag::IGNORE_LINE_DISTANCE; ScanFlag::IGNORE_LINE_DISTANCE |
ScanFlag::REVERSE;
compute_session(dev, session, sensor); compute_session(dev, session, sensor);
gl843_init_scan_regs(dev, sensor, &local_reg, session); gl843_init_scan_regs(dev, sensor, &local_reg, session);
@ -1867,9 +1877,7 @@ void CommandSetGl843::slow_back_home(Genesys_Device* dev, bool wait_until_home)
// clear scan and feed count // clear scan and feed count
dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT); dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT);
/* set up for reverse and no scan */ // set up for 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 = sanei_genesys_get_address(&local_reg, REG_0x01);
r->value &= ~REG_0x01_SCAN; r->value &= ~REG_0x01_SCAN;
@ -3136,7 +3144,6 @@ void CommandSetGl843::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
Genesys_Register_Set local_reg; Genesys_Register_Set local_reg;
int dpi; int dpi;
unsigned int pass, count, found, x, y; unsigned int pass, count, found, x, y;
GenesysRegister *r;
dev->cmd_set->set_fe(dev, sensor, AFE_SET); dev->cmd_set->set_fe(dev, sensor, AFE_SET);
gl843_stop_action(dev); gl843_stop_action(dev);
@ -3171,18 +3178,13 @@ void CommandSetGl843::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
session.params.scan_mode = ScanColorMode::GRAY; session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = ColorFilter::RED; session.params.color_filter = ColorFilter::RED;
session.params.flags = ScanFlag::DISABLE_SHADING | ScanFlag::DISABLE_SHADING; session.params.flags = ScanFlag::DISABLE_SHADING | ScanFlag::DISABLE_SHADING;
if (!forward) {
session.params.flags = ScanFlag::REVERSE;
}
compute_session(dev, session, calib_sensor); compute_session(dev, session, calib_sensor);
gl843_init_scan_regs(dev, calib_sensor, &local_reg, session); gl843_init_scan_regs(dev, calib_sensor, &local_reg, session);
/* set up for reverse or forward */
r = sanei_genesys_get_address(&local_reg, REG_0x02);
if (forward) {
r->value &= ~REG_0x02_MTRREV;
} else {
r->value |= REG_0x02_MTRREV;
}
dev->interface->write_registers(local_reg); dev->interface->write_registers(local_reg);
dev->cmd_set->begin_scan(dev, calib_sensor, &local_reg, true); dev->cmd_set->begin_scan(dev, calib_sensor, &local_reg, true);

Wyświetl plik

@ -423,6 +423,11 @@ static void gl846_init_motor_regs_scan(Genesys_Device* dev,
if (has_flag(flags, MotorFlag::DISABLE_BUFFER_FULL_MOVE) ||(scan_yres>=sensor.optical_res)) { if (has_flag(flags, MotorFlag::DISABLE_BUFFER_FULL_MOVE) ||(scan_yres>=sensor.optical_res)) {
r->value |= REG_0x02_ACDCDIS; r->value |= REG_0x02_ACDCDIS;
} }
if (has_flag(flags, MotorFlag::REVERSE)) {
r->value |= REG_0x02_MTRREV;
} else {
r->value &= ~REG_0x02_MTRREV;
}
/* scan and backtracking slope table */ /* scan and backtracking slope table */
auto scan_table = sanei_genesys_slope_table(scan_yres, scan_exposure_time, dev->motor.base_ydpi, auto scan_table = sanei_genesys_slope_table(scan_yres, scan_exposure_time, dev->motor.base_ydpi,
@ -785,6 +790,9 @@ static void gl846_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
if (has_flag(session.params.flags, ScanFlag::FEEDING)) { if (has_flag(session.params.flags, ScanFlag::FEEDING)) {
mflags |= MotorFlag::FEED; mflags |= MotorFlag::FEED;
} }
if (has_flag(session.params.flags, ScanFlag::REVERSE)) {
mflags |= MotorFlag::REVERSE;
}
gl846_init_motor_regs_scan(dev, sensor, reg, motor_profile, exposure_time, slope_dpi, gl846_init_motor_regs_scan(dev, sensor, reg, motor_profile, exposure_time, slope_dpi,
dev->model->is_cis ? session.output_line_count * session.params.channels dev->model->is_cis ? session.output_line_count * session.params.channels
@ -957,7 +965,6 @@ void CommandSetGl846::slow_back_home(Genesys_Device* dev, bool wait_until_home)
{ {
DBG_HELPER_ARGS(dbg, "wait_until_home = %d", wait_until_home); DBG_HELPER_ARGS(dbg, "wait_until_home = %d", wait_until_home);
Genesys_Register_Set local_reg; Genesys_Register_Set local_reg;
GenesysRegister *r;
uint8_t val; uint8_t val;
int loop = 0; int loop = 0;
ScanColorMode scan_mode; ScanColorMode scan_mode;
@ -1014,7 +1021,8 @@ void CommandSetGl846::slow_back_home(Genesys_Device* dev, bool wait_until_home)
session.params.color_filter = ColorFilter::RED; session.params.color_filter = ColorFilter::RED;
session.params.flags = ScanFlag::DISABLE_SHADING | session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA | ScanFlag::DISABLE_GAMMA |
ScanFlag::IGNORE_LINE_DISTANCE; ScanFlag::IGNORE_LINE_DISTANCE |
ScanFlag::REVERSE;
compute_session(dev, session, sensor); compute_session(dev, session, sensor);
gl846_init_scan_regs(dev, sensor, &local_reg, session); gl846_init_scan_regs(dev, sensor, &local_reg, session);
@ -1024,10 +1032,6 @@ void CommandSetGl846::slow_back_home(Genesys_Device* dev, bool wait_until_home)
// clear scan and feed count // clear scan and feed count
dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT); dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT);
/* set up for reverse */
r = sanei_genesys_get_address(&local_reg, REG_0x02);
r->value |= REG_0x02_MTRREV;
dev->interface->write_registers(local_reg); dev->interface->write_registers(local_reg);
try { try {
@ -1835,7 +1839,6 @@ void CommandSetGl846::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
size_t size; size_t size;
unsigned int pass, count, found, x, y; unsigned int pass, count, found, x, y;
char title[80]; char title[80];
GenesysRegister *r;
set_fe(dev, sensor, AFE_SET); set_fe(dev, sensor, AFE_SET);
@ -1868,6 +1871,9 @@ void CommandSetGl846::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
session.params.color_filter = ColorFilter::RED; session.params.color_filter = ColorFilter::RED;
session.params.flags = ScanFlag::DISABLE_SHADING | session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA; ScanFlag::DISABLE_GAMMA;
if (!forward) {
session.params.flags |= ScanFlag::REVERSE;
}
compute_session(dev, session, sensor); compute_session(dev, session, sensor);
gl846_init_scan_regs(dev, sensor, &local_reg, session); gl846_init_scan_regs(dev, sensor, &local_reg, session);
@ -1875,14 +1881,6 @@ void CommandSetGl846::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
size = pixels * channels * lines * (session.params.depth / 8); size = pixels * channels * lines * (session.params.depth / 8);
std::vector<uint8_t> data(size); std::vector<uint8_t> data(size);
/* set up for reverse or forward */
r = sanei_genesys_get_address(&local_reg, REG_0x02);
if (forward) {
r->value &= ~REG_0x02_MTRREV;
} else {
r->value |= REG_0x02_MTRREV;
}
dev->interface->write_registers(local_reg); dev->interface->write_registers(local_reg);
begin_scan(dev, sensor, &local_reg, true); begin_scan(dev, sensor, &local_reg, true);

Wyświetl plik

@ -462,6 +462,12 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev,
r->value |= REG_0x02_ACDCDIS; r->value |= REG_0x02_ACDCDIS;
} }
if (has_flag(flags, MotorFlag::REVERSE)) {
r->value |= REG_0x02_MTRREV;
} else {
r->value &= ~REG_0x02_MTRREV;
}
/* scan and backtracking slope table */ /* scan and backtracking slope table */
auto scan_table = sanei_genesys_slope_table(scan_yres, scan_exposure_time, dev->motor.base_ydpi, auto scan_table = sanei_genesys_slope_table(scan_yres, scan_exposure_time, dev->motor.base_ydpi,
factor, motor_profile); factor, motor_profile);
@ -797,6 +803,9 @@ static void gl847_init_scan_regs(Genesys_Device* dev, const Genesys_Sensor& sens
if (has_flag(session.params.flags, ScanFlag::FEEDING)) { if (has_flag(session.params.flags, ScanFlag::FEEDING)) {
mflags |= MotorFlag::FEED; mflags |= MotorFlag::FEED;
} }
if (has_flag(session.params.flags, ScanFlag::REVERSE)) {
mflags |= MotorFlag::REVERSE;
}
gl847_init_motor_regs_scan(dev, sensor, reg, motor_profile, exposure_time, slope_dpi, gl847_init_motor_regs_scan(dev, sensor, reg, motor_profile, exposure_time, slope_dpi,
dev->model->is_cis ? session.output_line_count * session.params.channels dev->model->is_cis ? session.output_line_count * session.params.channels
@ -1007,7 +1016,6 @@ void CommandSetGl847::slow_back_home(Genesys_Device* dev, bool wait_until_home)
{ {
DBG_HELPER_ARGS(dbg, "wait_until_home = %d", wait_until_home); DBG_HELPER_ARGS(dbg, "wait_until_home = %d", wait_until_home);
Genesys_Register_Set local_reg; Genesys_Register_Set local_reg;
GenesysRegister *r;
uint8_t val; uint8_t val;
int loop = 0; int loop = 0;
ScanColorMode scan_mode; ScanColorMode scan_mode;
@ -1064,7 +1072,8 @@ void CommandSetGl847::slow_back_home(Genesys_Device* dev, bool wait_until_home)
session.params.color_filter = ColorFilter::RED; session.params.color_filter = ColorFilter::RED;
session.params.flags = ScanFlag::DISABLE_SHADING | session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA | ScanFlag::DISABLE_GAMMA |
ScanFlag::IGNORE_LINE_DISTANCE; ScanFlag::IGNORE_LINE_DISTANCE |
ScanFlag::REVERSE;
compute_session(dev, session, sensor); compute_session(dev, session, sensor);
gl847_init_scan_regs(dev, sensor, &local_reg, session); gl847_init_scan_regs(dev, sensor, &local_reg, session);
@ -1074,10 +1083,6 @@ void CommandSetGl847::slow_back_home(Genesys_Device* dev, bool wait_until_home)
// clear scan and feed count // clear scan and feed count
dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT); dev->interface->write_register(REG_0x0D, REG_0x0D_CLRLNCNT | REG_0x0D_CLRMCNT);
/* set up for reverse */
r = sanei_genesys_get_address (&local_reg, REG_0x02);
r->value |= REG_0x02_MTRREV;
dev->interface->write_registers(local_reg); dev->interface->write_registers(local_reg);
try { try {
@ -1905,7 +1910,6 @@ void CommandSetGl847::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
size_t size; size_t size;
unsigned int pass, count, found, x, y; unsigned int pass, count, found, x, y;
char title[80]; char title[80];
GenesysRegister *r;
set_fe(dev, sensor, AFE_SET); set_fe(dev, sensor, AFE_SET);
gl847_stop_action(dev); gl847_stop_action(dev);
@ -1937,6 +1941,9 @@ void CommandSetGl847::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
session.params.color_filter = ColorFilter::RED; session.params.color_filter = ColorFilter::RED;
session.params.flags = ScanFlag::DISABLE_SHADING | session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA; ScanFlag::DISABLE_GAMMA;
if (!forward) {
session.params.flags |= ScanFlag::REVERSE;
}
compute_session(dev, session, sensor); compute_session(dev, session, sensor);
size = pixels * channels * lines * (session.params.depth / 8); size = pixels * channels * lines * (session.params.depth / 8);
@ -1944,14 +1951,6 @@ void CommandSetGl847::search_strip(Genesys_Device* dev, const Genesys_Sensor& se
gl847_init_scan_regs(dev, sensor, &local_reg, session); gl847_init_scan_regs(dev, sensor, &local_reg, session);
/* set up for reverse or forward */
r = sanei_genesys_get_address(&local_reg, REG_0x02);
if (forward) {
r->value &= ~REG_0x02_MTRREV;
} else {
r->value |= REG_0x02_MTRREV;
}
dev->interface->write_registers(local_reg); dev->interface->write_registers(local_reg);
begin_scan(dev, sensor, &local_reg, true); begin_scan(dev, sensor, &local_reg, true);