genesys: Extract scanner_send_slope_table()

merge-requests/463/merge
Povilas Kanapickas 2020-05-18 03:53:10 +03:00
rodzic 11c3a67e47
commit 16fa00c13b
9 zmienionych plików z 152 dodań i 253 usunięć

Wyświetl plik

@ -591,6 +591,108 @@ void scanner_clear_scan_and_feed_counts(Genesys_Device& dev)
}
}
void scanner_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor, unsigned table_nr,
const std::vector<uint16_t>& slope_table)
{
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size());
unsigned max_table_nr = 0;
switch (dev->model->asic_type) {
case AsicType::GL646: {
max_table_nr = 2;
break;
}
case AsicType::GL841:
case AsicType::GL842:
case AsicType::GL843:
case AsicType::GL845:
case AsicType::GL846:
case AsicType::GL847:
case AsicType::GL124: {
max_table_nr = 4;
break;
}
default:
throw SaneException("Unsupported ASIC type");
}
if (table_nr > max_table_nr) {
throw SaneException("invalid table number %d", table_nr);
}
std::vector<uint8_t> table(slope_table.size() * 2);
for (std::size_t i = 0; i < slope_table.size(); i++) {
table[i * 2] = slope_table[i] & 0xff;
table[i * 2 + 1] = slope_table[i] >> 8;
}
if (dev->interface->is_mock()) {
dev->interface->record_slope_table(table_nr, slope_table);
}
switch (dev->model->asic_type) {
case AsicType::GL646: {
unsigned dpihw = dev->reg.find_reg(0x05).value >> 6;
unsigned start_address = 0;
if (dpihw == 0) { // 600 dpi
start_address = 0x08000;
} else if (dpihw == 1) { // 1200 dpi
start_address = 0x10000;
} else if (dpihw == 2) { // 2400 dpi
start_address = 0x1f800;
} else {
throw SaneException("Unexpected dpihw");
}
dev->interface->write_buffer(0x3c, start_address + table_nr * 0x100, table.data(),
slope_table.size() * 2);
break;
}
case AsicType::GL841: {
unsigned start_address = 0;
switch (sensor.register_dpihw) {
case 600: start_address = 0x08000; break;
case 1200: start_address = 0x10000; break;
case 2400: start_address = 0x20000; break;
default: throw SaneException("Unexpected dpihw");
}
dev->interface->write_buffer(0x3c, start_address + table_nr * 0x200, table.data(),
slope_table.size() * 2);
break;
}
case AsicType::GL842: {
// slope table addresses are fixed : 0x40000, 0x48000, 0x50000, 0x58000, 0x60000
// XXX STEF XXX USB 1.1 ? sanei_genesys_write_0x8c (dev, 0x0f, 0x14);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
dev->interface->write_buffer(0x3c, 0x010000 + 0x200 * table_nr, table.data(),
slope_table.size() * 2);
} else {
dev->interface->write_gamma(0x28, 0x40000 + 0x8000 * table_nr, table.data(),
slope_table.size() * 2);
}
break;
}
case AsicType::GL843: {
// slope table addresses are fixed : 0x40000, 0x48000, 0x50000, 0x58000, 0x60000
// XXX STEF XXX USB 1.1 ? sanei_genesys_write_0x8c (dev, 0x0f, 0x14);
dev->interface->write_gamma(0x28, 0x40000 + 0x8000 * table_nr, table.data(),
slope_table.size() * 2);
break;
}
case AsicType::GL845:
case AsicType::GL846:
case AsicType::GL847:
case AsicType::GL124: {
// slope table addresses are fixed
dev->interface->write_ahb(0x10000000 + 0x4000 * table_nr, slope_table.size() * 2,
table.data());
break;
}
default:
throw SaneException("Unsupported ASIC type");
}
}
bool scanner_is_motor_stopped(Genesys_Device& dev)
{
switch (dev.model->asic_type) {

Wyświetl plik

@ -372,38 +372,6 @@ gl124_init_registers (Genesys_Device * dev)
sanei_genesys_set_dpihw(dev->reg, dpihw_sensor.register_dpihw);
}
/**@brief send slope table for motor movement
* Send slope_table in machine byte order
* @param dev device to send slope table
* @param table_nr index of the slope table in ASIC memory
* Must be in the [0-4] range.
* @param slope_table pointer to 16 bit values array of the slope table
* @param steps number of elemnts in the slope table
*/
static void gl124_send_slope_table(Genesys_Device* dev, int table_nr,
const std::vector<uint16_t>& slope_table)
{
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size());
/* sanity check */
if(table_nr<0 || table_nr>4)
{
throw SaneException("invalid table number");
}
std::vector<uint8_t> table(slope_table.size() * 2);
for (std::size_t i = 0; i < slope_table.size(); i++) {
table[i * 2] = slope_table[i] & 0xff;
table[i * 2 + 1] = slope_table[i] >> 8;
}
if (dev->interface->is_mock()) {
dev->interface->record_slope_table(table_nr, slope_table);
}
// slope table addresses are fixed
dev->interface->write_ahb(0x10000000 + 0x4000 * table_nr, slope_table.size() * 2, table.data());
}
/** @brief * Set register values of 'special' ti type frontend
* Registers value are taken from the frontend register data
* set.
@ -576,8 +544,8 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev,
/* scan and backtracking slope table */
auto scan_table = create_slope_table(dev->model->asic_type, dev->motor, yres,
scan_exposure_time, 1, motor_profile);
gl124_send_slope_table(dev, SCAN_TABLE, scan_table.table);
gl124_send_slope_table(dev, BACKTRACK_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, SCAN_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, BACKTRACK_TABLE, scan_table.table);
reg->set16(REG_STEPNO, scan_table.table.size());
@ -592,8 +560,8 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev,
*/
auto fast_table = create_slope_table(dev->model->asic_type, dev->motor, fast_dpi,
scan_exposure_time, 1, motor_profile);
gl124_send_slope_table(dev, STOP_TABLE, fast_table.table);
gl124_send_slope_table(dev, FAST_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, STOP_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, FAST_TABLE, fast_table.table);
reg->set16(REG_FASTNO, fast_table.table.size());
reg->set16(REG_FSHDEC, fast_table.table.size());

Wyświetl plik

@ -63,8 +63,6 @@ namespace {
constexpr unsigned CALIBRATION_LINES = 10;
} // namespace
static void gl646_send_slope_table(Genesys_Device* dev, int table_nr,
const std::vector<uint16_t>& slope_table);
static void write_control(Genesys_Device* dev, const Genesys_Sensor& sensor, int resolution);
@ -872,8 +870,8 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene
}
}
gl646_send_slope_table(dev, 0, slope_table1.table);
gl646_send_slope_table(dev, 1, slope_table2.table);
scanner_send_slope_table(dev, sensor, 0, slope_table1.table);
scanner_send_slope_table(dev, sensor, 1, slope_table2.table);
}
/**
@ -1057,40 +1055,6 @@ gl646_init_regs (Genesys_Device * dev)
dev->reg.find_reg(0x6c).value = 0x00; /* peroid times for LPeriod, expR,expG,expB, Z1MODE, Z2MODE (one period time) */
}
// Send slope table for motor movement slope_table in machine byte order
static void gl646_send_slope_table(Genesys_Device* dev, int table_nr,
const std::vector<uint16_t>& slope_table)
{
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size());
int dpihw;
int start_address;
dpihw = dev->reg.find_reg(0x05).value >> 6;
if (dpihw == 0) /* 600 dpi */
start_address = 0x08000;
else if (dpihw == 1) /* 1200 dpi */
start_address = 0x10000;
else if (dpihw == 2) /* 2400 dpi */
start_address = 0x1f800;
else {
throw SaneException("Unexpected dpihw");
}
std::vector<uint8_t> table(slope_table.size() * 2);
for (std::size_t i = 0; i < slope_table.size(); i++) {
table[i * 2] = slope_table[i] & 0xff;
table[i * 2 + 1] = slope_table[i] >> 8;
}
if (dev->interface->is_mock()) {
dev->interface->record_slope_table(table_nr, slope_table);
}
dev->interface->write_buffer(0x3c, start_address + table_nr * 0x100, table.data(),
slope_table.size() * 2);
}
// Set values of Analog Device type frontend
static void gl646_set_ad_fe(Genesys_Device* dev, uint8_t set)
{
@ -1442,7 +1406,8 @@ void CommandSetGl646::load_document(Genesys_Device* dev) const
// send regs
// start motor
// wait e1 status to become e0
gl646_send_slope_table(dev, 1, slope_table.table);
const auto& sensor = sanei_genesys_find_sensor_any(dev);
scanner_send_slope_table(dev, sensor, 1, slope_table.table);
dev->interface->write_registers(regs);
@ -1598,7 +1563,9 @@ void CommandSetGl646::eject_document(Genesys_Device* dev) const
// send regs
// start motor
// wait c1 status to become c8 : HOMESNR and ~MOTFLAG
gl646_send_slope_table(dev, 1, slope_table.table);
// FIXME: sensor is not used.
const auto& sensor = sanei_genesys_find_sensor_any(dev);
scanner_send_slope_table(dev, sensor, 1, slope_table.table);
dev->interface->write_registers(regs);

Wyświetl plik

@ -344,33 +344,6 @@ gl841_init_registers (Genesys_Device * dev)
}
}
// Send slope table for motor movement slope_table in machine byte order
static void gl841_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor,
int table_nr, const std::vector<uint16_t>& slope_table)
{
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size());
int start_address;
switch (sensor.register_dpihw) {
case 600: start_address = 0x08000; break;
case 1200: start_address = 0x10000; break;
case 2400: start_address = 0x20000; break;
default: throw SaneException("Unexpected dpihw");
}
std::vector<uint8_t> table(slope_table.size() * 2);
for (std::size_t i = 0; i < slope_table.size(); i++) {
table[i * 2] = slope_table[i] & 0xff;
table[i * 2 + 1] = slope_table[i] >> 8;
}
if (dev->interface->is_mock()) {
dev->interface->record_slope_table(table_nr, slope_table);
}
dev->interface->write_buffer(0x3c, start_address + table_nr * 0x200, table.data(),
slope_table.size() * 2);
}
static void gl841_set_lide80_fe(Genesys_Device* dev, uint8_t set)
{
DBG_HELPER(dbg);
@ -582,11 +555,11 @@ static void gl841_init_motor_regs_feed(Genesys_Device* dev, const Genesys_Sensor
std::vector<uint16_t> table;
table.resize(256, 0xffff);
gl841_send_slope_table(dev, sensor, 0, table);
gl841_send_slope_table(dev, sensor, 1, table);
gl841_send_slope_table(dev, sensor, 2, table);
gl841_send_slope_table(dev, sensor, 3, table);
gl841_send_slope_table(dev, sensor, 4, table);
scanner_send_slope_table(dev, sensor, 0, table);
scanner_send_slope_table(dev, sensor, 1, table);
scanner_send_slope_table(dev, sensor, 2, table);
scanner_send_slope_table(dev, sensor, 3, table);
scanner_send_slope_table(dev, sensor, 4, table);
}
gl841_write_freq(dev, dev->motor.base_ydpi / 4);
@ -638,7 +611,7 @@ static void gl841_init_motor_regs_feed(Genesys_Device* dev, const Genesys_Sensor
reg->find_reg(0x02).value &= ~REG_0x02_MTRREV;
}
gl841_send_slope_table(dev, sensor, 3, fast_table.table);
scanner_send_slope_table(dev, sensor, 3, fast_table.table);
reg->set8(0x67, 0x3f);
reg->set8(0x68, 0x3f);
@ -681,11 +654,11 @@ static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor
std::vector<uint16_t> table;
table.resize(256, 0xffff);
gl841_send_slope_table(dev, sensor, 0, table);
gl841_send_slope_table(dev, sensor, 1, table);
gl841_send_slope_table(dev, sensor, 2, table);
gl841_send_slope_table(dev, sensor, 3, table);
gl841_send_slope_table(dev, sensor, 4, table);
scanner_send_slope_table(dev, sensor, 0, table);
scanner_send_slope_table(dev, sensor, 1, table);
scanner_send_slope_table(dev, sensor, 2, table);
scanner_send_slope_table(dev, sensor, 3, table);
scanner_send_slope_table(dev, sensor, 4, table);
}
@ -800,16 +773,16 @@ static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor
reg->find_reg(0x02).value &= ~0x40;
}
gl841_send_slope_table(dev, sensor, 0, slow_table.table);
gl841_send_slope_table(dev, sensor, 1, back_table.table);
gl841_send_slope_table(dev, sensor, 2, slow_table.table);
scanner_send_slope_table(dev, sensor, 0, slow_table.table);
scanner_send_slope_table(dev, sensor, 1, back_table.table);
scanner_send_slope_table(dev, sensor, 2, slow_table.table);
if (use_fast_fed) {
gl841_send_slope_table(dev, sensor, 3, fast_table.table);
scanner_send_slope_table(dev, sensor, 3, fast_table.table);
}
if (has_flag(flags, ScanFlag::AUTO_GO_HOME)) {
gl841_send_slope_table(dev, sensor, 4, fast_table.table);
scanner_send_slope_table(dev, sensor, 4, fast_table.table);
}
/* now reg 0x21 and 0x24 are available, we can calculate reg 0x22 and 0x23,

Wyświetl plik

@ -181,33 +181,6 @@ static void gl842_init_registers(Genesys_Device& dev)
scanner_setup_sensor(dev, sensor, dev.reg);
}
// Send slope table for motor movement slope_table in machine byte order
static void gl842_send_slope_table(Genesys_Device* dev, int table_nr,
const std::vector<uint16_t>& slope_table)
{
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size());
std::vector<uint8_t> table(slope_table.size() * 2);
for (std::size_t i = 0; i < slope_table.size(); i++) {
table[i * 2] = slope_table[i] & 0xff;
table[i * 2 + 1] = slope_table[i] >> 8;
}
if (dev->interface->is_mock()) {
dev->interface->record_slope_table(table_nr, slope_table);
}
// slope table addresses are fixed : 0x40000, 0x48000, 0x50000, 0x58000, 0x60000
// XXX STEF XXX USB 1.1 ? sanei_genesys_write_0x8c (dev, 0x0f, 0x14);
if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) {
dev->interface->write_buffer(0x3c, 0x010000 + 0x200 * table_nr, table.data(),
slope_table.size() * 2);
} else {
dev->interface->write_gamma(0x28, 0x40000 + 0x8000 * table_nr, table.data(),
slope_table.size() * 2);
}
}
static void gl842_set_ad_fe(Genesys_Device* dev)
{
for (const auto& reg : dev->frontend.regs) {
@ -320,9 +293,9 @@ static void gl842_init_motor_regs_scan(Genesys_Device* dev,
auto scan_table = create_slope_table(dev->model->asic_type, dev->motor, scan_yres, exposure,
step_multiplier, motor_profile);
gl842_send_slope_table(dev, SCAN_TABLE, scan_table.table);
gl842_send_slope_table(dev, BACKTRACK_TABLE, scan_table.table);
gl842_send_slope_table(dev, STOP_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, SCAN_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, BACKTRACK_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, STOP_TABLE, scan_table.table);
reg->set8(REG_STEPNO, scan_table.table.size() / step_multiplier);
reg->set8(REG_FASTNO, scan_table.table.size() / step_multiplier);
@ -337,8 +310,8 @@ static void gl842_init_motor_regs_scan(Genesys_Device* dev,
auto fast_table = create_slope_table_fastest(dev->model->asic_type, step_multiplier,
*fast_profile);
gl842_send_slope_table(dev, FAST_TABLE, fast_table.table);
gl842_send_slope_table(dev, HOME_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, FAST_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, HOME_TABLE, fast_table.table);
reg->set8(REG_FMOVNO, fast_table.table.size() / step_multiplier);

Wyświetl plik

@ -631,28 +631,6 @@ gl843_init_registers (Genesys_Device * dev)
}
}
// Send slope table for motor movement slope_table in machine byte order
static void gl843_send_slope_table(Genesys_Device* dev, int table_nr,
const std::vector<uint16_t>& slope_table)
{
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size());
std::vector<uint8_t> table(slope_table.size() * 2);
for (std::size_t i = 0; i < slope_table.size(); i++) {
table[i * 2] = slope_table[i] & 0xff;
table[i * 2 + 1] = slope_table[i] >> 8;
}
if (dev->interface->is_mock()) {
dev->interface->record_slope_table(table_nr, slope_table);
}
// slope table addresses are fixed : 0x40000, 0x48000, 0x50000, 0x58000, 0x60000
// XXX STEF XXX USB 1.1 ? sanei_genesys_write_0x8c (dev, 0x0f, 0x14);
dev->interface->write_gamma(0x28, 0x40000 + 0x8000 * table_nr, table.data(),
slope_table.size() * 2);
}
static void gl843_set_ad_fe(Genesys_Device* dev)
{
for (const auto& reg : dev->frontend.regs) {
@ -769,9 +747,9 @@ static void gl843_init_motor_regs_scan(Genesys_Device* dev,
auto scan_table = create_slope_table(dev->model->asic_type, dev->motor, scan_yres, exposure,
step_multiplier, motor_profile);
gl843_send_slope_table(dev, SCAN_TABLE, scan_table.table);
gl843_send_slope_table(dev, BACKTRACK_TABLE, scan_table.table);
gl843_send_slope_table(dev, STOP_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, SCAN_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, BACKTRACK_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, STOP_TABLE, scan_table.table);
reg->set8(REG_STEPNO, scan_table.table.size() / step_multiplier);
reg->set8(REG_FASTNO, scan_table.table.size() / step_multiplier);
@ -786,8 +764,8 @@ static void gl843_init_motor_regs_scan(Genesys_Device* dev,
auto fast_table = create_slope_table_fastest(dev->model->asic_type, step_multiplier,
*fast_profile);
gl843_send_slope_table(dev, FAST_TABLE, fast_table.table);
gl843_send_slope_table(dev, HOME_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, FAST_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, HOME_TABLE, fast_table.table);
reg->set8(REG_FMOVNO, fast_table.table.size() / step_multiplier);

Wyświetl plik

@ -304,38 +304,6 @@ gl846_init_registers (Genesys_Device * dev)
sanei_genesys_set_dpihw(dev->reg, dpihw_sensor.register_dpihw);
}
/**@brief send slope table for motor movement
* Send slope_table in machine byte order
* @param dev device to send slope table
* @param table_nr index of the slope table in ASIC memory
* Must be in the [0-4] range.
* @param slope_table pointer to 16 bit values array of the slope table
* @param steps number of elements in the slope table
*/
static void gl846_send_slope_table(Genesys_Device* dev, int table_nr,
const std::vector<uint16_t>& slope_table)
{
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size());
/* sanity check */
if(table_nr<0 || table_nr>4)
{
throw SaneException("invalid table number %d", table_nr);
}
std::vector<uint8_t> table(slope_table.size() * 2);
for (std::size_t i = 0; i < slope_table.size(); i++) {
table[i * 2] = slope_table[i] & 0xff;
table[i * 2 + 1] = slope_table[i] >> 8;
}
if (dev->interface->is_mock()) {
dev->interface->record_slope_table(table_nr, slope_table);
}
// slope table addresses are fixed
dev->interface->write_ahb(0x10000000 + 0x4000 * table_nr, slope_table.size() * 2, table.data());
}
/**
* Set register values of Analog Device type frontend
* */
@ -444,9 +412,9 @@ static void gl846_init_motor_regs_scan(Genesys_Device* dev,
auto scan_table = create_slope_table(dev->model->asic_type, dev->motor, scan_yres,
scan_exposure_time, step_multiplier, motor_profile);
gl846_send_slope_table(dev, SCAN_TABLE, scan_table.table);
gl846_send_slope_table(dev, BACKTRACK_TABLE, scan_table.table);
gl846_send_slope_table(dev, STOP_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, SCAN_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, BACKTRACK_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, STOP_TABLE, scan_table.table);
reg->set8(REG_STEPNO, scan_table.table.size() / step_multiplier);
reg->set8(REG_FASTNO, scan_table.table.size() / step_multiplier);
@ -461,8 +429,8 @@ static void gl846_init_motor_regs_scan(Genesys_Device* dev,
auto fast_table = create_slope_table_fastest(dev->model->asic_type, step_multiplier,
*fast_profile);
gl846_send_slope_table(dev, FAST_TABLE, fast_table.table);
gl846_send_slope_table(dev, HOME_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, FAST_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, HOME_TABLE, fast_table.table);
reg->set8(REG_FMOVNO, fast_table.table.size() / step_multiplier);
reg->set8(REG_FMOVDEC, fast_table.table.size() / step_multiplier);

Wyświetl plik

@ -215,39 +215,6 @@ gl847_init_registers (Genesys_Device * dev)
sanei_genesys_set_dpihw(dev->reg, dpihw_sensor.register_dpihw);
}
/**@brief send slope table for motor movement
* Send slope_table in machine byte order
* @param dev device to send slope table
* @param table_nr index of the slope table in ASIC memory
* Must be in the [0-4] range.
* @param slope_table pointer to 16 bit values array of the slope table
* @param steps number of elements in the slope table
*/
static void gl847_send_slope_table(Genesys_Device* dev, int table_nr,
const std::vector<uint16_t>& slope_table)
{
DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size());
/* sanity check */
if(table_nr<0 || table_nr>4)
{
throw SaneException("invalid table number %d", table_nr);
}
std::vector<uint8_t> table(slope_table.size() * 2);
for (std::size_t i = 0; i < slope_table.size(); i++) {
table[i * 2] = slope_table[i] & 0xff;
table[i * 2 + 1] = slope_table[i] >> 8;
}
if (dev->interface->is_mock()) {
dev->interface->record_slope_table(table_nr, slope_table);
}
// slope table addresses are fixed
dev->interface->write_ahb(0x10000000 + 0x4000 * table_nr, slope_table.size() * 2,
table.data());
}
// Set values of analog frontend
void CommandSetGl847::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const
{
@ -337,8 +304,8 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev,
// scan and backtracking slope table
auto scan_table = create_slope_table(dev->model->asic_type, dev->motor, scan_yres,
scan_exposure_time, step_multiplier, motor_profile);
gl847_send_slope_table(dev, SCAN_TABLE, scan_table.table);
gl847_send_slope_table(dev, BACKTRACK_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, SCAN_TABLE, scan_table.table);
scanner_send_slope_table(dev, sensor, BACKTRACK_TABLE, scan_table.table);
// fast table
unsigned fast_dpi = sanei_genesys_get_lowest_ydpi(dev);
@ -355,9 +322,9 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev,
auto fast_table = create_slope_table(dev->model->asic_type, dev->motor, fast_dpi,
scan_exposure_time, step_multiplier, fast_motor_profile);
gl847_send_slope_table(dev, STOP_TABLE, fast_table.table);
gl847_send_slope_table(dev, FAST_TABLE, fast_table.table);
gl847_send_slope_table(dev, HOME_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, STOP_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, FAST_TABLE, fast_table.table);
scanner_send_slope_table(dev, sensor, HOME_TABLE, fast_table.table);
// correct move distance by acceleration and deceleration amounts
unsigned feedl = feed_steps;

Wyświetl plik

@ -327,6 +327,9 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
void scanner_clear_scan_and_feed_counts(Genesys_Device& dev);
void scanner_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor, unsigned table_nr,
const std::vector<uint16_t>& slope_table);
extern void sanei_genesys_write_file(const char* filename, const std::uint8_t* data,
std::size_t length);