genesys: Implement support for fast movement curves in the motor table

merge-requests/318/head
Povilas Kanapickas 2020-01-31 20:13:18 +02:00
rodzic 91d5235d4b
commit a5d63baf3d
3 zmienionych plików z 21 dodań i 7 usunięć

Wyświetl plik

@ -800,6 +800,7 @@ void CommandSetGl843::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor,
static void gl843_init_motor_regs_scan(Genesys_Device* dev,
const Genesys_Sensor& sensor,
const ScanSession& session,
Genesys_Register_Set* reg,
const MotorProfile& motor_profile,
unsigned int exposure,
@ -863,7 +864,9 @@ static void gl843_init_motor_regs_scan(Genesys_Device* dev,
r->value &= ~REG_0x02_MTRREV;
}
/* scan and backtracking slope table */
// scan and backtracking slope table
auto scan_table = sanei_genesys_slope_table(dev->model->asic_type, scan_yres, exposure,
dev->motor.base_ydpi, step_multiplier,
motor_profile);
@ -875,10 +878,16 @@ static void gl843_init_motor_regs_scan(Genesys_Device* dev,
reg->set8(REG_FASTNO, scan_table.steps_count / step_multiplier);
// fast table
const auto* fast_profile = get_motor_profile_ptr(dev->motor.fast_profiles, 0, session);
if (fast_profile == nullptr) {
fast_profile = &motor_profile;
}
unsigned fast_yres = sanei_genesys_get_lowest_ydpi(dev);
auto fast_table = sanei_genesys_slope_table(dev->model->asic_type, fast_yres, exposure,
dev->motor.base_ydpi, step_multiplier,
motor_profile);
*fast_profile);
gl843_send_slope_table(dev, STOP_TABLE, fast_table.table, fast_table.steps_count);
gl843_send_slope_table(dev, FAST_TABLE, fast_table.table, fast_table.steps_count);
gl843_send_slope_table(dev, HOME_TABLE, fast_table.table, fast_table.steps_count);
@ -886,12 +895,12 @@ static void gl843_init_motor_regs_scan(Genesys_Device* dev,
reg->set8(REG_FSHDEC, fast_table.steps_count / step_multiplier);
reg->set8(REG_FMOVNO, fast_table.steps_count / step_multiplier);
if (motor_profile.motor_vref != -1) {
if (motor_profile.motor_vref != -1 && fast_profile->motor_vref != 1) {
std::uint8_t vref = 0;
vref |= (motor_profile.motor_vref << REG_0x80S_TABLE1_NORMAL) & REG_0x80_TABLE1_NORMAL;
vref |= (motor_profile.motor_vref << REG_0x80S_TABLE2_BACK) & REG_0x80_TABLE2_BACK;
vref |= (motor_profile.motor_vref << REG_0x80S_TABLE4_FAST) & REG_0x80_TABLE4_FAST;
vref |= (motor_profile.motor_vref << REG_0x80S_TABLE5_GO_HOME) & REG_0x80_TABLE5_GO_HOME;
vref |= (fast_profile->motor_vref << REG_0x80S_TABLE4_FAST) & REG_0x80_TABLE4_FAST;
vref |= (fast_profile->motor_vref << REG_0x80S_TABLE5_GO_HOME) & REG_0x80_TABLE5_GO_HOME;
reg->set8(REG_0x80, vref);
}
@ -1203,7 +1212,7 @@ void CommandSetGl843::init_regs_for_scan_session(Genesys_Device* dev, const Gene
mflags |= MotorFlag::REVERSE;
}
gl843_init_motor_regs_scan(dev, sensor, reg, motor_profile, exposure, slope_dpi,
gl843_init_motor_regs_scan(dev, sensor, session, reg, motor_profile, exposure, slope_dpi,
session.optical_line_count, dummy, session.params.starty, mflags);
dev->read_buffer.clear();

Wyświetl plik

@ -185,7 +185,10 @@ std::ostream& operator<<(std::ostream& out, const Genesys_Motor& motor)
<< " optical_ydpi: " << motor.optical_ydpi << '\n'
<< " profiles: "
<< format_indent_braced_list(4, format_vector_indent_braced(4, "MotorProfile",
motor.profiles))
motor.profiles)) << '\n'
<< " fast_profiles: "
<< format_indent_braced_list(4, format_vector_indent_braced(4, "MotorProfile",
motor.fast_profiles)) << '\n'
<< '}';
return out;
}

Wyświetl plik

@ -172,6 +172,8 @@ struct Genesys_Motor
int optical_ydpi = 0;
// slopes to derive individual slopes from
std::vector<MotorProfile> profiles;
// slopes to derive individual slopes from for fast moving
std::vector<MotorProfile> fast_profiles;
MotorSlope& get_slope_with_step_type(StepType step_type)
{