genesys: Make get_motor_profile* reusable for different profile sets

merge-requests/318/head
Povilas Kanapickas 2020-01-31 20:13:17 +02:00
rodzic 247a6b7882
commit 91d5235d4b
6 zmienionych plików z 31 dodań i 22 usunięć

Wyświetl plik

@ -856,7 +856,7 @@ void CommandSetGl124::init_regs_for_scan_session(Genesys_Device* dev, const Gene
} else {
exposure_time = sensor.exposure_lperiod;
}
const auto& motor_profile = get_motor_profile_by_exposure(dev->motor, exposure_time, session);
const auto& motor_profile = get_motor_profile(dev->motor.profiles, exposure_time, session);
DBG(DBG_info, "%s : exposure_time=%d pixels\n", __func__, exposure_time);
DBG(DBG_info, "%s : scan_step_type=%d\n", __func__, static_cast<unsigned>(motor_profile.step_type));

Wyświetl plik

@ -1179,7 +1179,7 @@ void CommandSetGl843::init_regs_for_scan_session(Genesys_Device* dev, const Gene
if (exposure < 0) {
throw std::runtime_error("Exposure not defined in sensor definition");
}
const auto& motor_profile = get_motor_profile_by_exposure(dev->motor, exposure, session);
const auto& motor_profile = get_motor_profile(dev->motor.profiles, exposure, session);
DBG(DBG_info, "%s : exposure=%d pixels\n", __func__, exposure);
DBG(DBG_info, "%s : scan_step_type=%d\n", __func__,

Wyświetl plik

@ -705,7 +705,7 @@ void CommandSetGl846::init_regs_for_scan_session(Genesys_Device* dev, const Gene
slope_dpi = slope_dpi * (1 + dummy);
exposure_time = sensor.exposure_lperiod;
const auto& motor_profile = get_motor_profile_by_exposure(dev->motor, exposure_time, session);
const auto& motor_profile = get_motor_profile(dev->motor.profiles, exposure_time, session);
DBG(DBG_info, "%s : exposure_time=%d pixels\n", __func__, exposure_time);
DBG(DBG_info, "%s : scan_step_type=%d\n", __func__,

Wyświetl plik

@ -712,7 +712,7 @@ void CommandSetGl847::init_regs_for_scan_session(Genesys_Device* dev, const Gene
slope_dpi = slope_dpi * (1 + dummy);
exposure_time = sensor.exposure_lperiod;
const auto& motor_profile = get_motor_profile_by_exposure(dev->motor, exposure_time, session);
const auto& motor_profile = get_motor_profile(dev->motor.profiles, exposure_time, session);
DBG(DBG_info, "%s : exposure_time=%d pixels\n", __func__, exposure_time);
DBG(DBG_info, "%s : scan_step_type=%d\n", __func__,

Wyświetl plik

@ -1720,22 +1720,14 @@ void sanei_genesys_wait_for_home(Genesys_Device* dev)
}
}
/** @brief motor profile
* search for the database of motor profiles and get the best one. Each
* profile is at full step and at a reference exposure. Use first entry
* by default.
* @param motors motor profile database
* @param motor_type motor id
* @param exposure exposure time
* @return a pointer to a MotorProfile struct
*/
const MotorProfile& get_motor_profile_by_exposure(const Genesys_Motor& motor, unsigned exposure,
const ScanSession& session)
const MotorProfile* get_motor_profile_ptr(const std::vector<MotorProfile>& profiles,
unsigned exposure,
const ScanSession& session)
{
int best_i = -1;
for (unsigned i = 0; i < motor.profiles.size(); ++i) {
const auto& profile = motor.profiles[i];
for (unsigned i = 0; i < profiles.size(); ++i) {
const auto& profile = profiles[i];
if (!profile.resolutions.matches(session.params.yres)) {
continue;
@ -1745,7 +1737,7 @@ const MotorProfile& get_motor_profile_by_exposure(const Genesys_Motor& motor, un
}
if (profile.max_exposure == exposure) {
return profile;
return &profile;
}
if (profile.max_exposure == 0 || profile.max_exposure >= exposure) {
@ -1754,7 +1746,7 @@ const MotorProfile& get_motor_profile_by_exposure(const Genesys_Motor& motor, un
best_i = i;
} else {
// test for better match
if (motor.profiles[i].max_exposure < motor.profiles[best_i].max_exposure) {
if (profiles[i].max_exposure < profiles[best_i].max_exposure) {
best_i = i;
}
}
@ -1762,10 +1754,22 @@ const MotorProfile& get_motor_profile_by_exposure(const Genesys_Motor& motor, un
}
if (best_i < 0) {
return nullptr;
}
return &profiles[best_i];
}
const MotorProfile& get_motor_profile(const std::vector<MotorProfile>& profiles,
unsigned exposure,
const ScanSession& session)
{
const auto* profile = get_motor_profile_ptr(profiles, exposure, session);
if (profile == nullptr) {
throw SaneException("Motor slope is not configured");
}
return motor.profiles[best_i];
return *profile;
}
MotorSlopeTable sanei_genesys_slope_table(AsicType asic_type, int dpi, int exposure, int base_dpi,

Wyświetl plik

@ -388,8 +388,13 @@ void scanner_stop_action_no_move(Genesys_Device& dev, Genesys_Register_Set& regs
bool scanner_is_motor_stopped(Genesys_Device& dev);
const MotorProfile& get_motor_profile_by_exposure(const Genesys_Motor& motor, unsigned exposure,
const ScanSession& session);
const MotorProfile* get_motor_profile_ptr(const std::vector<MotorProfile>& profiles,
unsigned exposure,
const ScanSession& session);
const MotorProfile& get_motor_profile(const std::vector<MotorProfile>& profiles,
unsigned exposure,
const ScanSession& session);
MotorSlopeTable sanei_genesys_slope_table(AsicType asic_type, int dpi, int exposure, int base_dpi,
unsigned step_multiplier,