kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Return MotorSlopeTable out of *_generate_slope_table()
rodzic
8731a6cc5d
commit
c685ac075b
|
@ -324,7 +324,6 @@ void sanei_genesys_init_structs (Genesys_Device * dev)
|
|||
* of the table. The summed time of the acceleration steps is returned, and the
|
||||
* number of accerelation steps is put into used_steps.
|
||||
*
|
||||
* @param slope_table Table to write to
|
||||
* @param max_steps Size of slope_table in steps
|
||||
* @param use_steps Maximum number of steps to use for acceleration
|
||||
* @param stop_at Minimum step time to use
|
||||
|
@ -332,34 +331,20 @@ void sanei_genesys_init_structs (Genesys_Device * dev)
|
|||
* @param vend End step time of default slope
|
||||
* @param steps Step count of default slope
|
||||
* @param g Power for default slope
|
||||
* @param used_steps Final number of steps is stored here
|
||||
* @param vfinal Final step time is stored here
|
||||
* @return Time for acceleration
|
||||
* @return Motor slope table
|
||||
* @note All times in pixel time. Correction for other motor timings is not
|
||||
* done.
|
||||
*/
|
||||
SANE_Int sanei_genesys_generate_slope_table(std::vector<uint16_t>& slope_table,
|
||||
unsigned int max_steps,
|
||||
unsigned int use_steps,
|
||||
uint16_t stop_at,
|
||||
uint16_t vstart,
|
||||
uint16_t vend,
|
||||
unsigned int steps,
|
||||
double g,
|
||||
unsigned int *used_steps,
|
||||
unsigned int *vfinal)
|
||||
MotorSlopeTable sanei_genesys_generate_slope_table(unsigned max_steps, unsigned use_steps,
|
||||
std::uint16_t stop_at, std::uint16_t vstart,
|
||||
std::uint16_t vend, unsigned steps, double g)
|
||||
{
|
||||
MotorSlopeTable table;
|
||||
|
||||
double t;
|
||||
SANE_Int sum = 0;
|
||||
unsigned int i;
|
||||
unsigned int c = 0;
|
||||
uint16_t t2;
|
||||
unsigned int dummy;
|
||||
unsigned int _vfinal;
|
||||
if (!used_steps)
|
||||
used_steps = &dummy;
|
||||
if (!vfinal)
|
||||
vfinal = &_vfinal;
|
||||
|
||||
DBG(DBG_proc, "%s: table size: %d\n", __func__, max_steps);
|
||||
|
||||
|
@ -368,12 +353,10 @@ SANE_Int sanei_genesys_generate_slope_table(std::vector<uint16_t>& slope_table,
|
|||
DBG(DBG_proc, "%s: target slope: vstart: %d, vend: %d, steps: %d, g: %g\n", __func__, vstart,
|
||||
vend, steps, g);
|
||||
|
||||
sum = 0;
|
||||
c = 0;
|
||||
*used_steps = 0;
|
||||
|
||||
slope_table.clear();
|
||||
slope_table.reserve(max_steps);
|
||||
table.table.clear();
|
||||
table.table.reserve(max_steps);
|
||||
|
||||
if (use_steps < 1)
|
||||
use_steps = 1;
|
||||
|
@ -388,34 +371,29 @@ SANE_Int sanei_genesys_generate_slope_table(std::vector<uint16_t>& slope_table,
|
|||
if (t2 < stop_at) {
|
||||
break;
|
||||
}
|
||||
slope_table.push_back(t2);
|
||||
/* DBG (DBG_io, "slope_table[%3d] = %5d\n", c, t2); */
|
||||
sum += t2;
|
||||
table.table.push_back(t2);
|
||||
table.pixeltime_sum += t2;
|
||||
}
|
||||
if (t2 > stop_at)
|
||||
{
|
||||
DBG(DBG_warn, "Can not reach target speed(%d) in %d steps.\n", stop_at, use_steps);
|
||||
DBG(DBG_warn, "Expect image to be distorted. Ignore this if only feeding.\n");
|
||||
}
|
||||
*vfinal = t2;
|
||||
*used_steps += i;
|
||||
table.final_exposure = t2;
|
||||
table.steps_count += i;
|
||||
max_steps -= i;
|
||||
}
|
||||
else
|
||||
*vfinal = stop_at;
|
||||
|
||||
for (i = 0; i < max_steps; i++, c++)
|
||||
{
|
||||
slope_table.push_back(*vfinal);
|
||||
/* DBG (DBG_io, "slope_table[%3d] = %5d\n", c, *vfinal); */
|
||||
} else {
|
||||
table.final_exposure = stop_at;
|
||||
}
|
||||
|
||||
(*used_steps)++;
|
||||
sum += *vfinal;
|
||||
for (unsigned i = 0; i < max_steps; i++, c++) {
|
||||
table.table.push_back(table.final_exposure);
|
||||
}
|
||||
|
||||
DBG(DBG_proc, "%s: returns sum=%d, used %d steps, completed\n", __func__, sum, *used_steps);
|
||||
table.steps_count++;
|
||||
table.pixeltime_sum += table.final_exposure;
|
||||
|
||||
return sum;
|
||||
return table;
|
||||
}
|
||||
|
||||
/* Generate slope table for motor movement */
|
||||
|
@ -446,12 +424,9 @@ MotorSlopeTable sanei_genesys_create_slope_table3(const Genesys_Motor& motor,
|
|||
int exposure_time,
|
||||
unsigned yres)
|
||||
{
|
||||
MotorSlopeTable table;
|
||||
|
||||
unsigned int vtarget;
|
||||
unsigned int vend;
|
||||
unsigned int vstart;
|
||||
unsigned int vfinal;
|
||||
|
||||
DBG(DBG_proc, "%s: step_type = %d, exposure_time = %d, yres = %d\n", __func__,
|
||||
static_cast<unsigned>(step_type), exposure_time, yres);
|
||||
|
@ -469,20 +444,10 @@ MotorSlopeTable sanei_genesys_create_slope_table3(const Genesys_Motor& motor,
|
|||
vstart = std::min(vstart >> u_step_type, 65535u);
|
||||
vend = std::min(vend >> u_step_type, 65535u);
|
||||
|
||||
unsigned used_steps = 0;
|
||||
table.pixeltime_sum = sanei_genesys_generate_slope_table(table.table,
|
||||
max_steps,
|
||||
use_steps,
|
||||
vtarget,
|
||||
vstart,
|
||||
vend,
|
||||
slope.minimum_steps << u_step_type,
|
||||
slope.g,
|
||||
&used_steps,
|
||||
&vfinal);
|
||||
auto table = sanei_genesys_generate_slope_table(max_steps, use_steps, vtarget, vstart, vend,
|
||||
slope.minimum_steps << u_step_type, slope.g);
|
||||
|
||||
table.steps_count = used_steps;
|
||||
table.final_exposure = (vfinal * motor.base_ydpi) / yres;
|
||||
table.final_exposure = (table.final_exposure * motor.base_ydpi) / yres;
|
||||
|
||||
return table;
|
||||
}
|
||||
|
|
|
@ -179,7 +179,6 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene
|
|||
|
||||
int i, nb;
|
||||
Motor_Master *motor = nullptr;
|
||||
unsigned int used1, used2, vfinal;
|
||||
uint32_t z1, z2;
|
||||
int feedl;
|
||||
|
||||
|
@ -218,17 +217,12 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene
|
|||
}
|
||||
|
||||
/* now generate slope tables : we are not using generate_slope_table3 yet */
|
||||
std::vector<std::uint16_t> slope_table1, slope_table2;
|
||||
sanei_genesys_generate_slope_table (slope_table1, motor->steps1,
|
||||
motor->steps1 + 1, motor->vend1,
|
||||
motor->vstart1, motor->vend1,
|
||||
motor->steps1, motor->g1, &used1,
|
||||
&vfinal);
|
||||
sanei_genesys_generate_slope_table (slope_table2, motor->steps2,
|
||||
motor->steps2 + 1, motor->vend2,
|
||||
motor->vstart2, motor->vend2,
|
||||
motor->steps2, motor->g2, &used2,
|
||||
&vfinal);
|
||||
auto slope_table1 = sanei_genesys_generate_slope_table(motor->steps1, motor->steps1 + 1,
|
||||
motor->vend1, motor->vstart1,
|
||||
motor->vend1, motor->steps1, motor->g1);
|
||||
auto slope_table2 = sanei_genesys_generate_slope_table(motor->steps2, motor->steps2 + 1,
|
||||
motor->vend2, motor->vstart2,
|
||||
motor->vend2, motor->steps2, motor->g2);
|
||||
|
||||
/* R01 */
|
||||
/* now setup other registers for final scan (ie with shading enabled) */
|
||||
|
@ -506,7 +500,7 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene
|
|||
|
||||
sanei_genesys_calculate_zmod(regs->find_reg(0x02).value & REG_0x02_FASTFED,
|
||||
sensor.exposure_lperiod,
|
||||
slope_table1,
|
||||
slope_table1.table,
|
||||
motor->steps1,
|
||||
move, motor->fwdbwd, &z1, &z2);
|
||||
|
||||
|
@ -557,8 +551,8 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene
|
|||
}
|
||||
}
|
||||
|
||||
gl646_send_slope_table(dev, 0, slope_table1, regs->get8(0x21));
|
||||
gl646_send_slope_table(dev, 1, slope_table2, regs->get8(0x6b));
|
||||
gl646_send_slope_table(dev, 0, slope_table1.table, regs->get8(0x21));
|
||||
gl646_send_slope_table(dev, 1, slope_table2.table, regs->get8(0x6b));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1094,8 +1088,7 @@ void CommandSetGl646::load_document(Genesys_Device* dev) const
|
|||
|
||||
// FIXME: sequential not really needed in this case
|
||||
Genesys_Register_Set regs(Genesys_Register_Set::SEQUENTIAL);
|
||||
unsigned int used, vfinal, count;
|
||||
std::vector<uint16_t> slope_table;
|
||||
unsigned count;
|
||||
|
||||
/* no need to load document is flatbed scanner */
|
||||
if (!dev->model->is_sheetfed) {
|
||||
|
@ -1154,16 +1147,12 @@ void CommandSetGl646::load_document(Genesys_Device* dev) const
|
|||
regs.init_reg(0x24, 4);
|
||||
|
||||
/* generate slope table 2 */
|
||||
sanei_genesys_generate_slope_table (slope_table,
|
||||
50,
|
||||
51,
|
||||
2400,
|
||||
6000, 2400, 50, 0.25, &used, &vfinal);
|
||||
auto slope_table = sanei_genesys_generate_slope_table(50, 51, 2400, 6000, 2400, 50, 0.25);
|
||||
// document loading:
|
||||
// send regs
|
||||
// start motor
|
||||
// wait e1 status to become e0
|
||||
gl646_send_slope_table(dev, 1, slope_table, 50);
|
||||
gl646_send_slope_table(dev, 1, slope_table.table, 50);
|
||||
|
||||
dev->interface->write_registers(regs);
|
||||
|
||||
|
@ -1257,8 +1246,7 @@ void CommandSetGl646::eject_document(Genesys_Device* dev) const
|
|||
|
||||
// FIXME: SEQUENTIAL not really needed in this case
|
||||
Genesys_Register_Set regs((Genesys_Register_Set::SEQUENTIAL));
|
||||
unsigned int used, vfinal, count;
|
||||
std::vector<uint16_t> slope_table;
|
||||
unsigned count;
|
||||
std::uint8_t gpio;
|
||||
|
||||
/* at the end there will be noe more document */
|
||||
|
@ -1314,16 +1302,12 @@ void CommandSetGl646::eject_document(Genesys_Device* dev) const
|
|||
regs.init_reg(0x24, 4);
|
||||
|
||||
/* generate slope table 2 */
|
||||
sanei_genesys_generate_slope_table (slope_table,
|
||||
60,
|
||||
61,
|
||||
1600,
|
||||
10000, 1600, 60, 0.25, &used, &vfinal);
|
||||
auto slope_table = sanei_genesys_generate_slope_table(60, 61, 1600, 10000, 1600, 60, 0.25);
|
||||
// document eject:
|
||||
// send regs
|
||||
// start motor
|
||||
// wait c1 status to become c8 : HOMESNR and ~MOTFLAG
|
||||
gl646_send_slope_table(dev, 1, slope_table, 60);
|
||||
gl646_send_slope_table(dev, 1, slope_table.table, 60);
|
||||
|
||||
dev->interface->write_registers(regs);
|
||||
|
||||
|
|
|
@ -323,11 +323,10 @@ unsigned sanei_genesys_get_bulk_max_size(AsicType asic_type);
|
|||
SANE_Int sanei_genesys_exposure_time2(Genesys_Device * dev, float ydpi, StepType step_type,
|
||||
int endpixel, int led_exposure);
|
||||
|
||||
SANE_Int sanei_genesys_generate_slope_table(std::vector<uint16_t>& slope_table, unsigned int max_steps,
|
||||
unsigned int use_steps, uint16_t stop_at,
|
||||
uint16_t vstart, uint16_t vend,
|
||||
unsigned int steps, double g,
|
||||
unsigned int *used_steps, unsigned int *vfinal);
|
||||
MotorSlopeTable sanei_genesys_generate_slope_table(unsigned max_steps,
|
||||
unsigned use_steps, std::uint16_t stop_at,
|
||||
std::uint16_t vstart, std::uint16_t vend,
|
||||
unsigned steps, double g);
|
||||
|
||||
MotorSlopeTable sanei_genesys_create_slope_table3(const Genesys_Motor& motor,
|
||||
unsigned max_steps,
|
||||
|
|
Ładowanie…
Reference in New Issue