kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Move motor direction register adjustment to low level functions
rodzic
50149e9064
commit
3ada79c35a
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Ładowanie…
Reference in New Issue