genesys: Remove uses of sanei_genesys_get_address()

merge-requests/213/head^2
Povilas Kanapickas 2020-04-05 06:19:38 +03:00
rodzic db6b862d70
commit db50c91132
7 zmienionych plików z 223 dodań i 386 usunięć

Wyświetl plik

@ -690,7 +690,6 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
const ScanSession& session) const ScanSession& session)
{ {
DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time); DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time);
GenesysRegister *r;
uint32_t expmax; uint32_t expmax;
gl124_setup_sensor(dev, sensor, reg); gl124_setup_sensor(dev, sensor, reg);
@ -699,23 +698,21 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* enable shading */ /* enable shading */
regs_set_optical_off(dev->model->asic_type, *reg); regs_set_optical_off(dev->model->asic_type, *reg);
r = sanei_genesys_get_address (reg, REG_0x01);
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) || if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION)) has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION))
{ {
r->value &= ~REG_0x01_DVDSET; reg->find_reg(REG_0x01).value &= ~REG_0x01_DVDSET;
} else { } else {
r->value |= REG_0x01_DVDSET; reg->find_reg(REG_0x01).value |= REG_0x01_DVDSET;
} }
r = sanei_genesys_get_address(reg, REG_0x03);
if ((dev->model->sensor_id != SensorId::CIS_CANON_LIDE_120) && (session.params.xres>=600)) { if ((dev->model->sensor_id != SensorId::CIS_CANON_LIDE_120) && (session.params.xres>=600)) {
r->value &= ~REG_0x03_AVEENB; reg->find_reg(REG_0x03).value &= ~REG_0x03_AVEENB;
DBG (DBG_io, "%s: disabling AVEENB\n", __func__); DBG (DBG_io, "%s: disabling AVEENB\n", __func__);
} }
else else
{ {
r->value |= ~REG_0x03_AVEENB; reg->find_reg(REG_0x03).value |= ~REG_0x03_AVEENB;
DBG (DBG_io, "%s: enabling AVEENB\n", __func__); DBG (DBG_io, "%s: enabling AVEENB\n", __func__);
} }
@ -727,30 +724,29 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
dev->interface->write_register(REG_0x115, dev->settings.threshold); dev->interface->write_register(REG_0x115, dev->settings.threshold);
/* monochrome / color scan */ /* monochrome / color scan */
r = sanei_genesys_get_address (reg, REG_0x04);
switch (session.params.depth) { switch (session.params.depth) {
case 8: case 8:
r->value &= ~(REG_0x04_LINEART | REG_0x04_BITSET); reg->find_reg(REG_0x04).value &= ~(REG_0x04_LINEART | REG_0x04_BITSET);
break; break;
case 16: case 16:
r->value &= ~REG_0x04_LINEART; reg->find_reg(REG_0x04).value &= ~REG_0x04_LINEART;
r->value |= REG_0x04_BITSET; reg->find_reg(REG_0x04).value |= REG_0x04_BITSET;
break; break;
} }
r->value &= ~REG_0x04_FILTER; reg->find_reg(REG_0x04).value &= ~REG_0x04_FILTER;
if (session.params.channels == 1) if (session.params.channels == 1)
{ {
switch (session.params.color_filter) switch (session.params.color_filter)
{ {
case ColorFilter::RED: case ColorFilter::RED:
r->value |= 0x10; reg->find_reg(REG_0x04).value |= 0x10;
break; break;
case ColorFilter::BLUE: case ColorFilter::BLUE:
r->value |= 0x30; reg->find_reg(REG_0x04).value |= 0x30;
break; break;
case ColorFilter::GREEN: case ColorFilter::GREEN:
r->value |= 0x20; reg->find_reg(REG_0x04).value |= 0x20;
break; break;
default: default:
break; // should not happen break; // should not happen
@ -770,16 +766,14 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
reg->set16(REG_DPISET, sensor.register_dpiset); reg->set16(REG_DPISET, sensor.register_dpiset);
r = sanei_genesys_get_address(reg, REG_0x06); reg->find_reg(REG_0x06).value |= REG_0x06_GAIN4;
r->value |= REG_0x06_GAIN4;
/* CIS scanners can do true gray by setting LEDADD */ /* CIS scanners can do true gray by setting LEDADD */
/* we set up LEDADD only when asked */ /* we set up LEDADD only when asked */
if (dev->model->is_cis) { if (dev->model->is_cis) {
r = sanei_genesys_get_address (reg, REG_0x60); reg->find_reg(REG_0x60).value &= ~REG_0x60_LEDADD;
r->value &= ~REG_0x60_LEDADD;
if (session.enable_ledadd) { if (session.enable_ledadd) {
r->value |= REG_0x60_LEDADD; reg->find_reg(REG_0x60).value |= REG_0x60_LEDADD;
expmax = reg->get24(REG_EXPR); expmax = reg->get24(REG_EXPR);
expmax = std::max(expmax, reg->get24(REG_EXPG)); expmax = std::max(expmax, reg->get24(REG_EXPG));
expmax = std::max(expmax, reg->get24(REG_EXPB)); expmax = std::max(expmax, reg->get24(REG_EXPB));
@ -789,10 +783,9 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
dev->reg.set24(REG_EXPB, expmax); dev->reg.set24(REG_EXPB, expmax);
} }
/* RGB weighting, REG_TRUER,G and B are to be set */ /* RGB weighting, REG_TRUER,G and B are to be set */
r = sanei_genesys_get_address (reg, 0x01); reg->find_reg(0x01).value &= ~REG_0x01_TRUEGRAY;
r->value &= ~REG_0x01_TRUEGRAY;
if (session.enable_ledadd) { if (session.enable_ledadd) {
r->value |= REG_0x01_TRUEGRAY; reg->find_reg(0x01).value |= REG_0x01_TRUEGRAY;
dev->interface->write_register(REG_TRUER, 0x80); dev->interface->write_register(REG_TRUER, 0x80);
dev->interface->write_register(REG_TRUEG, 0x80); dev->interface->write_register(REG_TRUEG, 0x80);
dev->interface->write_register(REG_TRUEB, 0x80); dev->interface->write_register(REG_TRUEB, 0x80);
@ -939,17 +932,15 @@ void CommandSetGl124::save_power(Genesys_Device* dev, bool enable) const
void CommandSetGl124::set_powersaving(Genesys_Device* dev, int delay /* in minutes */) const void CommandSetGl124::set_powersaving(Genesys_Device* dev, int delay /* in minutes */) const
{ {
DBG_HELPER_ARGS(dbg, "delay = %d", delay); DBG_HELPER_ARGS(dbg, "delay = %d", delay);
GenesysRegister *r;
r = sanei_genesys_get_address(&dev->reg, REG_0x03); dev->reg.find_reg(REG_0x03).value &= ~0xf0;
r->value &= ~0xf0;
if(delay<15) if(delay<15)
{ {
r->value |= delay; dev->reg.find_reg(REG_0x03).value |= delay;
} }
else else
{ {
r->value |= 0x0f; dev->reg.find_reg(REG_0x03).value |= 0x0f;
} }
} }

Wyświetl plik

@ -586,60 +586,44 @@ static void gl841_init_motor_regs_off(Genesys_Register_Set* reg, unsigned int sc
{ {
DBG_HELPER_ARGS(dbg, "scan_lines=%d", scan_lines); DBG_HELPER_ARGS(dbg, "scan_lines=%d", scan_lines);
unsigned int feedl; unsigned int feedl;
GenesysRegister* r;
feedl = 2; feedl = 2;
r = sanei_genesys_get_address (reg, 0x3d); reg->set8(0x3d, (feedl >> 16) & 0xf);
r->value = (feedl >> 16) & 0xf; reg->set8(0x3e, (feedl >> 8) & 0xff);
r = sanei_genesys_get_address (reg, 0x3e); reg->set8(0x3f, feedl & 0xff);
r->value = (feedl >> 8) & 0xff; reg->find_reg(0x5e).value &= ~0xe0;
r = sanei_genesys_get_address (reg, 0x3f);
r->value = feedl & 0xff;
r = sanei_genesys_get_address (reg, 0x5e);
r->value &= ~0xe0;
r = sanei_genesys_get_address (reg, 0x25); reg->set8(0x25, (scan_lines >> 16) & 0xf);
r->value = (scan_lines >> 16) & 0xf; reg->set8(0x26, (scan_lines >> 8) & 0xff);
r = sanei_genesys_get_address (reg, 0x26); reg->set8(0x27, scan_lines & 0xff);
r->value = (scan_lines >> 8) & 0xff;
r = sanei_genesys_get_address (reg, 0x27);
r->value = scan_lines & 0xff;
r = sanei_genesys_get_address (reg, 0x02); reg->find_reg(0x02).value &= ~0x01; /*LONGCURV OFF*/
r->value &= ~0x01; /*LONGCURV OFF*/ reg->find_reg(0x02).value &= ~0x80; /*NOT_HOME OFF*/
r->value &= ~0x80; /*NOT_HOME OFF*/
r->value &= ~0x10; reg->find_reg(0x02).value &= ~0x10;
r->value &= ~0x06; reg->find_reg(0x02).value &= ~0x06;
r->value &= ~0x08; reg->find_reg(0x02).value &= ~0x08;
r->value &= ~0x20; reg->find_reg(0x02).value &= ~0x20;
r->value &= ~0x40; reg->find_reg(0x02).value &= ~0x40;
r = sanei_genesys_get_address (reg, 0x67); reg->set8(0x67, 0x3f);
r->value = 0x3f;
r = sanei_genesys_get_address (reg, 0x68); reg->set8(0x68, 0x3f);
r->value = 0x3f;
r = sanei_genesys_get_address(reg, REG_STEPNO); reg->set8(REG_STEPNO, 0);
r->value = 0;
r = sanei_genesys_get_address(reg, REG_FASTNO); reg->set8(REG_FASTNO, 0);
r->value = 0;
r = sanei_genesys_get_address (reg, 0x69); reg->set8(0x69, 0);
r->value = 0;
r = sanei_genesys_get_address (reg, 0x6a); reg->set8(0x6a, 0);
r->value = 0;
r = sanei_genesys_get_address (reg, 0x5f); reg->set8(0x5f, 0);
r->value = 0;
} }
/** @brief write motor table frequency /** @brief write motor table frequency
@ -694,7 +678,6 @@ static void gl841_init_motor_regs(Genesys_Device* dev, const Genesys_Sensor& sen
unsigned int fast_exposure = 0; unsigned int fast_exposure = 0;
int use_fast_fed = 0; int use_fast_fed = 0;
unsigned int feedl; unsigned int feedl;
GenesysRegister* r;
/*number of scan lines to add in a scan_lines line*/ /*number of scan lines to add in a scan_lines line*/
{ {
@ -762,72 +745,51 @@ HOME_FREE: 3
* Z2 * Z2
*/ */
r = sanei_genesys_get_address(reg, 0x3d); reg->set8(0x3d, (feedl >> 16) & 0xf);
r->value = (feedl >> 16) & 0xf; reg->set8(0x3e, (feedl >> 8) & 0xff);
r = sanei_genesys_get_address(reg, 0x3e); reg->set8(0x3f, feedl & 0xff);
r->value = (feedl >> 8) & 0xff; reg->find_reg(0x5e).value &= ~0xe0;
r = sanei_genesys_get_address(reg, 0x3f);
r->value = feedl & 0xff;
r = sanei_genesys_get_address(reg, 0x5e);
r->value &= ~0xe0;
r = sanei_genesys_get_address(reg, 0x25); reg->set8(0x25, 0);
r->value = 0; reg->set8(0x26, 0);
r = sanei_genesys_get_address(reg, 0x26); reg->set8(0x27, 0);
r->value = 0;
r = sanei_genesys_get_address(reg, 0x27);
r->value = 0;
r = sanei_genesys_get_address(reg, 0x02); reg->find_reg(0x02).value &= ~0x01; /*LONGCURV OFF*/
r->value &= ~0x01; /*LONGCURV OFF*/ reg->find_reg(0x02).value &= ~0x80; /*NOT_HOME OFF*/
r->value &= ~0x80; /*NOT_HOME OFF*/
r->value |= 0x10; reg->find_reg(0x02).value |= 0x10;
if (action == MOTOR_ACTION_GO_HOME) if (action == MOTOR_ACTION_GO_HOME)
r->value |= 0x06; reg->find_reg(0x02).value |= 0x06;
else else
r->value &= ~0x06; reg->find_reg(0x02).value &= ~0x06;
if (use_fast_fed) if (use_fast_fed)
r->value |= 0x08; reg->find_reg(0x02).value |= 0x08;
else else
r->value &= ~0x08; reg->find_reg(0x02).value &= ~0x08;
if (has_flag(flags, MotorFlag::AUTO_GO_HOME)) { if (has_flag(flags, MotorFlag::AUTO_GO_HOME)) {
r->value |= 0x20; reg->find_reg(0x02).value |= 0x20;
} else { } else {
r->value &= ~0x20; reg->find_reg(0x02).value &= ~0x20;
} }
r->value &= ~0x40; reg->find_reg(0x02).value &= ~0x40;
if (has_flag(flags, MotorFlag::REVERSE)) { if (has_flag(flags, MotorFlag::REVERSE)) {
r->value |= REG_0x02_MTRREV; reg->find_reg(0x02).value |= REG_0x02_MTRREV;
} }
gl841_send_slope_table(dev, sensor, 3, fast_table.table, 256); gl841_send_slope_table(dev, sensor, 3, fast_table.table, 256);
r = sanei_genesys_get_address(reg, 0x67); reg->set8(0x67, 0x3f);
r->value = 0x3f; reg->set8(0x68, 0x3f);
reg->set8(REG_STEPNO, 0);
r = sanei_genesys_get_address(reg, 0x68); reg->set8(REG_FASTNO, 0);
r->value = 0x3f; reg->set8(0x69, 0);
reg->set8(0x6a, (fast_table.steps_count >> 1) + (fast_table.steps_count & 1));
r = sanei_genesys_get_address(reg, REG_STEPNO); reg->set8(0x5f, (fast_table.steps_count >> 1) + (fast_table.steps_count & 1));
r->value = 0;
r = sanei_genesys_get_address(reg, REG_FASTNO);
r->value = 0;
r = sanei_genesys_get_address(reg, 0x69);
r->value = 0;
r = sanei_genesys_get_address(reg, 0x6a);
r->value = (fast_table.steps_count >> 1) + (fast_table.steps_count & 1);
r = sanei_genesys_get_address(reg, 0x5f);
r->value = (fast_table.steps_count >> 1) + (fast_table.steps_count & 1);
} }
static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
@ -851,7 +813,6 @@ static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor
unsigned int fast_time; unsigned int fast_time;
unsigned int slow_time; unsigned int slow_time;
unsigned int feedl; unsigned int feedl;
GenesysRegister* r;
unsigned int min_restep = 0x20; unsigned int min_restep = 0x20;
uint32_t z1, z2; uint32_t z1, z2;
@ -988,43 +949,32 @@ HOME_FREE: 3
* Z2 * Z2
*/ */
r = sanei_genesys_get_address (reg, 0x3d); reg->set8(0x3d, (feedl >> 16) & 0xf);
r->value = (feedl >> 16) & 0xf; reg->set8(0x3e, (feedl >> 8) & 0xff);
r = sanei_genesys_get_address (reg, 0x3e); reg->set8(0x3f, feedl & 0xff);
r->value = (feedl >> 8) & 0xff; reg->find_reg(0x5e).value &= ~0xe0;
r = sanei_genesys_get_address (reg, 0x3f); reg->set8(0x25, (scan_lines >> 16) & 0xf);
r->value = feedl & 0xff; reg->set8(0x26, (scan_lines >> 8) & 0xff);
r = sanei_genesys_get_address (reg, 0x5e); reg->set8(0x27, scan_lines & 0xff);
r->value &= ~0xe0; reg->find_reg(0x02).value &= ~0x01; /*LONGCURV OFF*/
reg->find_reg(0x02).value &= ~0x80; /*NOT_HOME OFF*/
r = sanei_genesys_get_address (reg, 0x25); reg->find_reg(0x02).value |= 0x10;
r->value = (scan_lines >> 16) & 0xf; reg->find_reg(0x02).value &= ~0x06;
r = sanei_genesys_get_address (reg, 0x26);
r->value = (scan_lines >> 8) & 0xff;
r = sanei_genesys_get_address (reg, 0x27);
r->value = scan_lines & 0xff;
r = sanei_genesys_get_address (reg, 0x02);
r->value &= ~0x01; /*LONGCURV OFF*/
r->value &= ~0x80; /*NOT_HOME OFF*/
r->value |= 0x10;
r->value &= ~0x06;
if (use_fast_fed) if (use_fast_fed)
r->value |= 0x08; reg->find_reg(0x02).value |= 0x08;
else else
r->value &= ~0x08; reg->find_reg(0x02).value &= ~0x08;
if (has_flag(flags, MotorFlag::AUTO_GO_HOME)) if (has_flag(flags, MotorFlag::AUTO_GO_HOME))
r->value |= 0x20; reg->find_reg(0x02).value |= 0x20;
else else
r->value &= ~0x20; reg->find_reg(0x02).value &= ~0x20;
if (has_flag(flags, MotorFlag::DISABLE_BUFFER_FULL_MOVE)) { if (has_flag(flags, MotorFlag::DISABLE_BUFFER_FULL_MOVE)) {
r->value |= 0x40; reg->find_reg(0x02).value |= 0x40;
} else { } else {
r->value &= ~0x40; reg->find_reg(0x02).value &= ~0x40;
} }
gl841_send_slope_table(dev, sensor, 0, slow_table.table, 256); gl841_send_slope_table(dev, sensor, 0, slow_table.table, 256);
@ -1053,11 +1003,10 @@ HOME_FREE: 3
min_restep = back_table.steps_count * 2 + 2; min_restep = back_table.steps_count * 2 + 2;
} }
/* steps of table 0*/ /* steps of table 0*/
r = sanei_genesys_get_address(reg, REG_FWDSTEP); reg->set8(REG_FWDSTEP, min_restep - slow_table.steps_count*2);
r->value = min_restep - slow_table.steps_count*2;
/* steps of table 1*/ /* steps of table 1*/
r = sanei_genesys_get_address(reg, REG_BWDSTEP); reg->set8(REG_BWDSTEP, min_restep - back_table.steps_count*2);
r->value = min_restep - back_table.steps_count*2;
/* /*
for z1/z2: for z1/z2:
@ -1078,43 +1027,21 @@ HOME_FREE: 3
DBG(DBG_info, "%s: z1 = %d\n", __func__, z1); DBG(DBG_info, "%s: z1 = %d\n", __func__, z1);
DBG(DBG_info, "%s: z2 = %d\n", __func__, z2); DBG(DBG_info, "%s: z2 = %d\n", __func__, z2);
r = sanei_genesys_get_address (reg, 0x60); reg->set8(0x60, ((z1 >> 16) & 0xff));
r->value = ((z1 >> 16) & 0xff); reg->set8(0x61, ((z1 >> 8) & 0xff));
r = sanei_genesys_get_address (reg, 0x61); reg->set8(0x62, (z1 & 0xff));
r->value = ((z1 >> 8) & 0xff); reg->set8(0x63, ((z2 >> 16) & 0xff));
r = sanei_genesys_get_address (reg, 0x62); reg->set8(0x64, ((z2 >> 8) & 0xff));
r->value = (z1 & 0xff); reg->set8(0x65, (z2 & 0xff));
r = sanei_genesys_get_address (reg, 0x63); reg->find_reg(REG_0x1E).value &= REG_0x1E_WDTIME;
r->value = ((z2 >> 16) & 0xff); reg->find_reg(REG_0x1E).value |= scan_dummy;
r = sanei_genesys_get_address (reg, 0x64); reg->set8(0x67, 0x3f | (static_cast<unsigned>(scan_step_type) << 6));
r->value = ((z2 >> 8) & 0xff); reg->set8(0x68, 0x3f);
r = sanei_genesys_get_address (reg, 0x65); reg->set8(REG_STEPNO, (slow_table.steps_count >> 1) + (slow_table.steps_count & 1));
r->value = (z2 & 0xff); reg->set8(REG_FASTNO, (back_table.steps_count >> 1) + (back_table.steps_count & 1));
reg->set8(0x69, (slow_table.steps_count >> 1) + (slow_table.steps_count & 1));
r = sanei_genesys_get_address(reg, REG_0x1E); reg->set8(0x6a, (fast_table.steps_count >> 1) + (fast_table.steps_count & 1));
r->value &= REG_0x1E_WDTIME; reg->set8(0x5f, (fast_table.steps_count >> 1) + (fast_table.steps_count & 1));
r->value |= scan_dummy;
r = sanei_genesys_get_address (reg, 0x67);
r->value = 0x3f | (static_cast<unsigned>(scan_step_type) << 6);
r = sanei_genesys_get_address (reg, 0x68);
r->value = 0x3f;
r = sanei_genesys_get_address(reg, REG_STEPNO);
r->value = (slow_table.steps_count >> 1) + (slow_table.steps_count & 1);
r = sanei_genesys_get_address(reg, REG_FASTNO);
r->value = (back_table.steps_count >> 1) + (back_table.steps_count & 1);
r = sanei_genesys_get_address (reg, 0x69);
r->value = (slow_table.steps_count >> 1) + (slow_table.steps_count & 1);
r = sanei_genesys_get_address (reg, 0x6a);
r->value = (fast_table.steps_count >> 1) + (fast_table.steps_count & 1);
r = sanei_genesys_get_address (reg, 0x5f);
r->value = (fast_table.steps_count >> 1) + (fast_table.steps_count & 1);
} }
static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
@ -1122,108 +1049,100 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
const ScanSession& session) const ScanSession& session)
{ {
DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time); DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time);
GenesysRegister* r;
uint16_t expavg, expr, expb, expg; uint16_t expavg, expr, expb, expg;
dev->cmd_set->set_fe(dev, sensor, AFE_SET); dev->cmd_set->set_fe(dev, sensor, AFE_SET);
/* gpio part.*/ /* gpio part.*/
if (dev->model->gpio_id == GpioId::CANON_LIDE_35) { if (dev->model->gpio_id == GpioId::CANON_LIDE_35) {
r = sanei_genesys_get_address(reg, REG_0x6C);
if (session.ccd_size_divisor > 1) { if (session.ccd_size_divisor > 1) {
r->value &= ~0x80; reg->find_reg(REG_0x6C).value &= ~0x80;
} else { } else {
r->value |= 0x80; reg->find_reg(REG_0x6C).value |= 0x80;
} }
} }
if (dev->model->gpio_id == GpioId::CANON_LIDE_80) { if (dev->model->gpio_id == GpioId::CANON_LIDE_80) {
r = sanei_genesys_get_address(reg, REG_0x6C);
if (session.ccd_size_divisor > 1) { if (session.ccd_size_divisor > 1) {
r->value &= ~0x40;
r->value |= 0x20; reg->find_reg(REG_0x6C).value &= ~0x40;
reg->find_reg(REG_0x6C).value |= 0x20;
} else { } else {
r->value &= ~0x20; reg->find_reg(REG_0x6C).value &= ~0x20;
r->value |= 0x40; reg->find_reg(REG_0x6C).value |= 0x40;
} }
} }
/* enable shading */ /* enable shading */
r = sanei_genesys_get_address (reg, 0x01); reg->find_reg(0x01).value |= REG_0x01_SCAN;
r->value |= REG_0x01_SCAN;
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) || if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION)) { has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION)) {
r->value &= ~REG_0x01_DVDSET; reg->find_reg(0x01).value &= ~REG_0x01_DVDSET;
} else { } else {
r->value |= REG_0x01_DVDSET; reg->find_reg(0x01).value |= REG_0x01_DVDSET;
} }
/* average looks better than deletion, and we are already set up to /* average looks better than deletion, and we are already set up to
use one of the average enabled resolutions use one of the average enabled resolutions
*/ */
r = sanei_genesys_get_address (reg, 0x03); reg->find_reg(0x03).value |= REG_0x03_AVEENB;
r->value |= REG_0x03_AVEENB;
sanei_genesys_set_lamp_power(dev, sensor, *reg, sanei_genesys_set_lamp_power(dev, sensor, *reg,
!has_flag(session.params.flags, ScanFlag::DISABLE_LAMP)); !has_flag(session.params.flags, ScanFlag::DISABLE_LAMP));
/* BW threshold */ /* BW threshold */
r = sanei_genesys_get_address (reg, 0x2e); reg->set8(0x2e, dev->settings.threshold);
r->value = dev->settings.threshold; reg->set8(0x2f, dev->settings.threshold);
r = sanei_genesys_get_address (reg, 0x2f);
r->value = dev->settings.threshold;
/* monochrome / color scan */ /* monochrome / color scan */
r = sanei_genesys_get_address (reg, 0x04);
switch (session.params.depth) { switch (session.params.depth) {
case 8: case 8:
r->value &= ~(REG_0x04_LINEART | REG_0x04_BITSET); reg->find_reg(0x04).value &= ~(REG_0x04_LINEART | REG_0x04_BITSET);
break; break;
case 16: case 16:
r->value &= ~REG_0x04_LINEART; reg->find_reg(0x04).value &= ~REG_0x04_LINEART;
r->value |= REG_0x04_BITSET; reg->find_reg(0x04).value |= REG_0x04_BITSET;
break; break;
} }
/* AFEMOD should depend on FESET, and we should set these /* AFEMOD should depend on FESET, and we should set these
* bits separately */ * bits separately */
r->value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD); reg->find_reg(0x04).value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD);
if (has_flag(session.params.flags, ScanFlag::ENABLE_LEDADD)) { if (has_flag(session.params.flags, ScanFlag::ENABLE_LEDADD)) {
r->value |= 0x10; /* no filter */ reg->find_reg(0x04).value |= 0x10; /* no filter */
} }
else if (session.params.channels == 1) else if (session.params.channels == 1)
{ {
switch (session.params.color_filter) switch (session.params.color_filter)
{ {
case ColorFilter::RED: case ColorFilter::RED:
r->value |= 0x14; reg->find_reg(0x04).value |= 0x14;
break; break;
case ColorFilter::GREEN: case ColorFilter::GREEN:
r->value |= 0x18; reg->find_reg(0x04).value |= 0x18;
break; break;
case ColorFilter::BLUE: case ColorFilter::BLUE:
r->value |= 0x1c; reg->find_reg(0x04).value |= 0x1c;
break; break;
default: default:
r->value |= 0x10; reg->find_reg(0x04).value |= 0x10;
break; break;
} }
} }
else else
{ {
if (dev->model->sensor_id == SensorId::CCD_PLUSTEK_OPTICPRO_3600) { if (dev->model->sensor_id == SensorId::CCD_PLUSTEK_OPTICPRO_3600) {
r->value |= 0x22; /* slow color pixel by pixel */ reg->find_reg(0x04).value |= 0x22; /* slow color pixel by pixel */
} }
else else
{ {
r->value |= 0x10; /* color pixel by pixel */ reg->find_reg(0x04).value |= 0x10; /* color pixel by pixel */
} }
} }
/* CIS scanners can do true gray by setting LEDADD */ /* CIS scanners can do true gray by setting LEDADD */
r = sanei_genesys_get_address (reg, 0x87); reg->find_reg(0x87).value &= ~REG_0x87_LEDADD;
r->value &= ~REG_0x87_LEDADD;
if (has_flag(session.params.flags, ScanFlag::ENABLE_LEDADD)) { if (has_flag(session.params.flags, ScanFlag::ENABLE_LEDADD)) {
r->value |= REG_0x87_LEDADD; reg->find_reg(0x87).value |= REG_0x87_LEDADD;
expr = reg->get16(REG_EXPR); expr = reg->get16(REG_EXPR);
expg = reg->get16(REG_EXPG); expg = reg->get16(REG_EXPG);
expb = reg->get16(REG_EXPB); expb = reg->get16(REG_EXPB);
@ -1249,20 +1168,13 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* sensor parameters */ /* sensor parameters */
sanei_gl841_setup_sensor(sensor, &dev->reg); sanei_gl841_setup_sensor(sensor, &dev->reg);
reg->set8(0x29, 255); /*<<<"magic" number, only suitable for cis*/
r = sanei_genesys_get_address (reg, 0x29);
r->value = 255; /*<<<"magic" number, only suitable for cis*/
reg->set16(REG_DPISET, sensor.register_dpiset); reg->set16(REG_DPISET, sensor.register_dpiset);
reg->set16(REG_STRPIXEL, session.pixel_startx); reg->set16(REG_STRPIXEL, session.pixel_startx);
reg->set16(REG_ENDPIXEL, session.pixel_endx); reg->set16(REG_ENDPIXEL, session.pixel_endx);
reg->set24(REG_MAXWD, session.output_line_bytes); reg->set24(REG_MAXWD, session.output_line_bytes);
reg->set16(REG_LPERIOD, exposure_time); reg->set16(REG_LPERIOD, exposure_time);
reg->set8(0x34, sensor.dummy_pixel);
r = sanei_genesys_get_address (reg, 0x34);
r->value = sensor.dummy_pixel;
} }
static int static int

Wyświetl plik

@ -59,25 +59,12 @@ namespace gl843 {
*/ */
static int gl843_get_step_multiplier(Genesys_Register_Set* regs) static int gl843_get_step_multiplier(Genesys_Register_Set* regs)
{ {
GenesysRegister *r = sanei_genesys_get_address(regs, REG_0x9D); switch (regs->get8(REG_0x9D) & 0x0c) {
int value = 1; case 0x04: return 2;
if (r != nullptr) case 0x08: return 4;
{ default: return 1;
switch (r->value & 0x0c)
{
case 0x04:
value = 2;
break;
case 0x08:
value = 4;
break;
default:
value = 1;
} }
} }
DBG(DBG_io, "%s: step multiplier is %d\n", __func__, value);
return value;
}
/** copy sensor specific settings */ /** copy sensor specific settings */
static void gl843_setup_sensor(Genesys_Device* dev, const Genesys_Sensor& sensor, static void gl843_setup_sensor(Genesys_Device* dev, const Genesys_Sensor& sensor,
@ -951,7 +938,6 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
{ {
DBG_HELPER_ARGS(dbg, "exposure=%d", exposure); DBG_HELPER_ARGS(dbg, "exposure=%d", exposure);
unsigned int tgtime; /**> exposure time multiplier */ unsigned int tgtime; /**> exposure time multiplier */
GenesysRegister *r;
/* tgtime */ /* tgtime */
tgtime = exposure / 65536 + 1; tgtime = exposure / 65536 + 1;
@ -964,14 +950,14 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* enable shading */ /* enable shading */
regs_set_optical_off(dev->model->asic_type, *reg); regs_set_optical_off(dev->model->asic_type, *reg);
r = sanei_genesys_get_address (reg, REG_0x01);
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) || if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION) || has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION) ||
session.use_host_side_calib) session.use_host_side_calib)
{ {
r->value &= ~REG_0x01_DVDSET; reg->find_reg(REG_0x01).value &= ~REG_0x01_DVDSET;
} else { } else {
r->value |= REG_0x01_DVDSET; reg->find_reg(REG_0x01).value |= REG_0x01_DVDSET;
} }
bool use_shdarea = false; bool use_shdarea = false;
@ -990,16 +976,15 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
} }
if (use_shdarea) { if (use_shdarea) {
r->value |= REG_0x01_SHDAREA; reg->find_reg(REG_0x01).value |= REG_0x01_SHDAREA;
} else { } else {
r->value &= ~REG_0x01_SHDAREA; reg->find_reg(REG_0x01).value &= ~REG_0x01_SHDAREA;
} }
r = sanei_genesys_get_address (reg, REG_0x03);
if (dev->model->model_id == ModelId::CANON_8600F) { if (dev->model->model_id == ModelId::CANON_8600F) {
r->value |= REG_0x03_AVEENB; reg->find_reg(REG_0x03).value |= REG_0x03_AVEENB;
} else { } else {
r->value &= ~REG_0x03_AVEENB; reg->find_reg(REG_0x03).value &= ~REG_0x03_AVEENB;
} }
// FIXME: we probably don't need to set exposure to registers at this point. It was this way // FIXME: we probably don't need to set exposure to registers at this point. It was this way
@ -1008,43 +993,40 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
!has_flag(session.params.flags, ScanFlag::DISABLE_LAMP)); !has_flag(session.params.flags, ScanFlag::DISABLE_LAMP));
/* select XPA */ /* select XPA */
r->value &= ~REG_0x03_XPASEL; reg->find_reg(REG_0x03).value &= ~REG_0x03_XPASEL;
if (has_flag(session.params.flags, ScanFlag::USE_XPA)) { if (has_flag(session.params.flags, ScanFlag::USE_XPA)) {
r->value |= REG_0x03_XPASEL; reg->find_reg(REG_0x03).value |= REG_0x03_XPASEL;
} }
reg->state.is_xpa_on = has_flag(session.params.flags, ScanFlag::USE_XPA); reg->state.is_xpa_on = has_flag(session.params.flags, ScanFlag::USE_XPA);
/* BW threshold */ // BW threshold
r = sanei_genesys_get_address(reg, REG_0x2E); reg->set8(REG_0x2E, dev->settings.threshold);
r->value = dev->settings.threshold; reg->set8(REG_0x2F, dev->settings.threshold);
r = sanei_genesys_get_address(reg, REG_0x2F);
r->value = dev->settings.threshold;
/* monochrome / color scan */ /* monochrome / color scan */
r = sanei_genesys_get_address(reg, REG_0x04);
switch (session.params.depth) { switch (session.params.depth) {
case 8: case 8:
r->value &= ~(REG_0x04_LINEART | REG_0x04_BITSET); reg->find_reg(REG_0x04).value &= ~(REG_0x04_LINEART | REG_0x04_BITSET);
break; break;
case 16: case 16:
r->value &= ~REG_0x04_LINEART; reg->find_reg(REG_0x04).value &= ~REG_0x04_LINEART;
r->value |= REG_0x04_BITSET; reg->find_reg(REG_0x04).value |= REG_0x04_BITSET;
break; break;
} }
r->value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD); reg->find_reg(REG_0x04).value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD);
if (session.params.channels == 1) if (session.params.channels == 1)
{ {
switch (session.params.color_filter) switch (session.params.color_filter)
{ {
case ColorFilter::RED: case ColorFilter::RED:
r->value |= 0x14; reg->find_reg(REG_0x04).value |= 0x14;
break; break;
case ColorFilter::BLUE: case ColorFilter::BLUE:
r->value |= 0x1c; reg->find_reg(REG_0x04).value |= 0x1c;
break; break;
case ColorFilter::GREEN: case ColorFilter::GREEN:
r->value |= 0x18; reg->find_reg(REG_0x04).value |= 0x18;
break; break;
default: default:
break; // should not happen break; // should not happen
@ -1052,10 +1034,10 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
} else { } else {
switch (dev->frontend.layout.type) { switch (dev->frontend.layout.type) {
case FrontendType::WOLFSON: case FrontendType::WOLFSON:
r->value |= 0x10; // pixel by pixel reg->find_reg(REG_0x04).value |= 0x10; // pixel by pixel
break; break;
case FrontendType::ANALOG_DEVICES: case FrontendType::ANALOG_DEVICES:
r->value |= 0x20; // slow color pixel by pixel reg->find_reg(REG_0x04).value |= 0x20; // slow color pixel by pixel
break; break;
default: default:
throw SaneException("Invalid frontend type %d", throw SaneException("Invalid frontend type %d",
@ -1087,8 +1069,7 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
reg->set16(REG_LPERIOD, exposure / tgtime); reg->set16(REG_LPERIOD, exposure / tgtime);
DBG(DBG_io2, "%s: exposure used=%d\n", __func__, exposure/tgtime); DBG(DBG_io2, "%s: exposure used=%d\n", __func__, exposure/tgtime);
r = sanei_genesys_get_address (reg, REG_DUMMY); reg->set8(REG_DUMMY, sensor.dummy_pixel);
r->value = sensor.dummy_pixel;
} }
void CommandSetGl843::init_regs_for_scan_session(Genesys_Device* dev, const Genesys_Sensor& sensor, void CommandSetGl843::init_regs_for_scan_session(Genesys_Device* dev, const Genesys_Sensor& sensor,
@ -1991,14 +1972,11 @@ void CommandSetGl843::send_shading_data(Genesys_Device* dev, const Genesys_Senso
uint32_t final_size, length, i; uint32_t final_size, length, i;
uint8_t *buffer; uint8_t *buffer;
int count,offset; int count,offset;
GenesysRegister *r;
uint16_t strpixel, endpixel, startx; uint16_t strpixel, endpixel, startx;
offset=0; offset=0;
length=size; length=size;
r = sanei_genesys_get_address(&dev->reg, REG_0x01); if (dev->reg.get8(REG_0x01) & REG_0x01_SHDAREA) {
if (r->value & REG_0x01_SHDAREA)
{
/* recompute STRPIXEL used shading calibration so we can /* recompute STRPIXEL used shading calibration so we can
* compute offset within data for SHDAREA case */ * compute offset within data for SHDAREA case */

Wyświetl plik

@ -61,17 +61,10 @@ namespace gl846 {
/** /**
* compute the step multiplier used * compute the step multiplier used
*/ */
static int static int gl846_get_step_multiplier (Genesys_Register_Set * regs)
gl846_get_step_multiplier (Genesys_Register_Set * regs)
{ {
GenesysRegister *r = sanei_genesys_get_address(regs, 0x9d); unsigned value = (regs->get8(0x9d) & 0x0f) >> 1;
int value = 1; return 1 << value;
if (r != nullptr) {
value = (r->value & 0x0f)>>1;
value = 1 << value;
}
DBG (DBG_io, "%s: step multiplier is %d\n", __func__, value);
return value;
} }
/** @brief sensor specific settings /** @brief sensor specific settings
@ -625,7 +618,6 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
const ScanSession& session) const ScanSession& session)
{ {
DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time); DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time);
GenesysRegister *r;
gl846_setup_sensor(dev, sensor, reg); gl846_setup_sensor(dev, sensor, reg);
@ -633,61 +625,56 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* enable shading */ /* enable shading */
regs_set_optical_off(dev->model->asic_type, *reg); regs_set_optical_off(dev->model->asic_type, *reg);
r = sanei_genesys_get_address(reg, REG_0x01); reg->find_reg(REG_0x01).value |= REG_0x01_SHDAREA;
r->value |= REG_0x01_SHDAREA;
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) || if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION) || has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION) ||
session.use_host_side_calib) session.use_host_side_calib)
{ {
r->value &= ~REG_0x01_DVDSET; reg->find_reg(REG_0x01).value &= ~REG_0x01_DVDSET;
} else { } else {
r->value |= REG_0x01_DVDSET; reg->find_reg(REG_0x01).value |= REG_0x01_DVDSET;
} }
r = sanei_genesys_get_address(reg, REG_0x03); reg->find_reg(REG_0x03).value &= ~REG_0x03_AVEENB;
r->value &= ~REG_0x03_AVEENB;
sanei_genesys_set_lamp_power(dev, sensor, *reg, sanei_genesys_set_lamp_power(dev, sensor, *reg,
!has_flag(session.params.flags, ScanFlag::DISABLE_LAMP)); !has_flag(session.params.flags, ScanFlag::DISABLE_LAMP));
reg->state.is_xpa_on = has_flag(session.params.flags, ScanFlag::USE_XPA); reg->state.is_xpa_on = has_flag(session.params.flags, ScanFlag::USE_XPA);
/* BW threshold */ // BW threshold
r = sanei_genesys_get_address (reg, 0x2e); reg->set8(0x2e, dev->settings.threshold);
r->value = dev->settings.threshold; reg->set8(0x2f, dev->settings.threshold);
r = sanei_genesys_get_address (reg, 0x2f);
r->value = dev->settings.threshold;
/* monochrome / color scan */ /* monochrome / color scan */
r = sanei_genesys_get_address(reg, REG_0x04);
switch (session.params.depth) { switch (session.params.depth) {
case 8: case 8:
r->value &= ~(REG_0x04_LINEART | REG_0x04_BITSET); reg->find_reg(REG_0x04).value &= ~(REG_0x04_LINEART | REG_0x04_BITSET);
break; break;
case 16: case 16:
r->value &= ~REG_0x04_LINEART; reg->find_reg(REG_0x04).value &= ~REG_0x04_LINEART;
r->value |= REG_0x04_BITSET; reg->find_reg(REG_0x04).value |= REG_0x04_BITSET;
break; break;
} }
r->value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD); reg->find_reg(REG_0x04).value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD);
if (session.params.channels == 1) if (session.params.channels == 1)
{ {
switch (session.params.color_filter) switch (session.params.color_filter)
{ {
case ColorFilter::RED: case ColorFilter::RED:
r->value |= 0x24; reg->find_reg(REG_0x04).value |= 0x24;
break; break;
case ColorFilter::BLUE: case ColorFilter::BLUE:
r->value |= 0x2c; reg->find_reg(REG_0x04).value |= 0x2c;
break; break;
case ColorFilter::GREEN: case ColorFilter::GREEN:
r->value |= 0x28; reg->find_reg(REG_0x04).value |= 0x28;
break; break;
default: default:
break; // should not happen break; // should not happen
} }
} else { } else {
r->value |= 0x20; // mono reg->find_reg(REG_0x04).value |= 0x20; // mono
} }
const auto& dpihw_sensor = sanei_genesys_find_sensor(dev, session.output_resolution, const auto& dpihw_sensor = sanei_genesys_find_sensor(dev, session.output_resolution,
@ -704,17 +691,17 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* CIS scanners can do true gray by setting LEDADD */ /* CIS scanners can do true gray by setting LEDADD */
/* we set up LEDADD only when asked */ /* we set up LEDADD only when asked */
if (dev->model->is_cis) { if (dev->model->is_cis) {
r = sanei_genesys_get_address (reg, 0x87); reg->find_reg(0x87).value &= ~REG_0x87_LEDADD;
r->value &= ~REG_0x87_LEDADD;
if (session.enable_ledadd) { if (session.enable_ledadd) {
r->value |= REG_0x87_LEDADD; reg->find_reg(0x87).value |= REG_0x87_LEDADD;
} }
/* RGB weighting /* RGB weighting
r = sanei_genesys_get_address (reg, 0x01); reg->find_reg(0x01).value &= ~REG_0x01_TRUEGRAY;
r->value &= ~REG_0x01_TRUEGRAY;
if (session.enable_ledadd)) if (session.enable_ledadd))
{ {
r->value |= REG_0x01_TRUEGRAY; reg->find_reg(0x01).value |= REG_0x01_TRUEGRAY;
}*/ }*/
} }
@ -731,8 +718,7 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
reg->set16(REG_LPERIOD, exposure_time); reg->set16(REG_LPERIOD, exposure_time);
DBG (DBG_io2, "%s: exposure_time used=%d\n", __func__, exposure_time); DBG (DBG_io2, "%s: exposure_time used=%d\n", __func__, exposure_time);
r = sanei_genesys_get_address (reg, 0x34); reg->set8(0x34, sensor.dummy_pixel);
r->value = sensor.dummy_pixel;
} }
void CommandSetGl846::init_regs_for_scan_session(Genesys_Device* dev, const Genesys_Sensor& sensor, void CommandSetGl846::init_regs_for_scan_session(Genesys_Device* dev, const Genesys_Sensor& sensor,
@ -885,7 +871,6 @@ void CommandSetGl846::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
DBG_HELPER(dbg); DBG_HELPER(dbg);
(void) sensor; (void) sensor;
uint8_t val; uint8_t val;
GenesysRegister *r;
if (reg->state.is_xpa_on && reg->state.is_lamp_on) { if (reg->state.is_xpa_on && reg->state.is_lamp_on) {
dev->cmd_set->set_xpa_lamp_power(*dev, true); dev->cmd_set->set_xpa_lamp_power(*dev, true);
@ -896,8 +881,7 @@ void CommandSetGl846::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
val = dev->interface->read_register(REG_0x01); val = dev->interface->read_register(REG_0x01);
val |= REG_0x01_SCAN; val |= REG_0x01_SCAN;
dev->interface->write_register(REG_0x01, val); dev->interface->write_register(REG_0x01, val);
r = sanei_genesys_get_address (reg, REG_0x01); reg->set8(REG_0x01, val);
r->value = val;
scanner_start_action(*dev, start_motor); scanner_start_action(*dev, start_motor);

Wyświetl plik

@ -56,18 +56,10 @@ namespace gl847 {
/** /**
* compute the step multiplier used * compute the step multiplier used
*/ */
static int static unsigned gl847_get_step_multiplier (Genesys_Register_Set * regs)
gl847_get_step_multiplier (Genesys_Register_Set * regs)
{ {
GenesysRegister *r = sanei_genesys_get_address(regs, 0x9d); unsigned value = (regs->get8(0x9d) & 0x0f) >> 1;
int value = 1; return 1 << value;
if (r != nullptr)
{
value = (r->value & 0x0f)>>1;
value = 1 << value;
}
DBG (DBG_io, "%s: step multiplier is %d\n", __func__, value);
return value;
} }
/** @brief sensor specific settings /** @brief sensor specific settings
@ -526,7 +518,6 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
const ScanSession& session) const ScanSession& session)
{ {
DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time); DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time);
GenesysRegister *r;
gl847_setup_sensor(dev, sensor, reg); gl847_setup_sensor(dev, sensor, reg);
@ -534,63 +525,58 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* enable shading */ /* enable shading */
regs_set_optical_off(dev->model->asic_type, *reg); regs_set_optical_off(dev->model->asic_type, *reg);
r = sanei_genesys_get_address(reg, REG_0x01); reg->find_reg(REG_0x01).value |= REG_0x01_SHDAREA;
r->value |= REG_0x01_SHDAREA;
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) || if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION)) has_flag(dev->model->flags, ModelFlag::NO_CALIBRATION))
{ {
r->value &= ~REG_0x01_DVDSET; reg->find_reg(REG_0x01).value &= ~REG_0x01_DVDSET;
} }
else else
{ {
r->value |= REG_0x01_DVDSET; reg->find_reg(REG_0x01).value |= REG_0x01_DVDSET;
} }
r = sanei_genesys_get_address (reg, REG_0x03); reg->find_reg(REG_0x03).value &= ~REG_0x03_AVEENB;
r->value &= ~REG_0x03_AVEENB;
sanei_genesys_set_lamp_power(dev, sensor, *reg, sanei_genesys_set_lamp_power(dev, sensor, *reg,
!has_flag(session.params.flags, ScanFlag::DISABLE_LAMP)); !has_flag(session.params.flags, ScanFlag::DISABLE_LAMP));
/* BW threshold */ // BW threshold
r = sanei_genesys_get_address (reg, 0x2e); reg->set8(0x2e, dev->settings.threshold);
r->value = dev->settings.threshold; reg->set8(0x2f, dev->settings.threshold);
r = sanei_genesys_get_address (reg, 0x2f);
r->value = dev->settings.threshold;
/* monochrome / color scan */ /* monochrome / color scan */
r = sanei_genesys_get_address (reg, REG_0x04);
switch (session.params.depth) { switch (session.params.depth) {
case 8: case 8:
r->value &= ~(REG_0x04_LINEART | REG_0x04_BITSET); reg->find_reg(REG_0x04).value &= ~(REG_0x04_LINEART | REG_0x04_BITSET);
break; break;
case 16: case 16:
r->value &= ~REG_0x04_LINEART; reg->find_reg(REG_0x04).value &= ~REG_0x04_LINEART;
r->value |= REG_0x04_BITSET; reg->find_reg(REG_0x04).value |= REG_0x04_BITSET;
break; break;
} }
r->value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD); reg->find_reg(REG_0x04).value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD);
if (session.params.channels == 1) if (session.params.channels == 1)
{ {
switch (session.params.color_filter) switch (session.params.color_filter)
{ {
case ColorFilter::RED: case ColorFilter::RED:
r->value |= 0x14; reg->find_reg(REG_0x04).value |= 0x14;
break; break;
case ColorFilter::BLUE: case ColorFilter::BLUE:
r->value |= 0x1c; reg->find_reg(REG_0x04).value |= 0x1c;
break; break;
case ColorFilter::GREEN: case ColorFilter::GREEN:
r->value |= 0x18; reg->find_reg(REG_0x04).value |= 0x18;
break; break;
default: default:
break; // should not happen break; // should not happen
} }
} else { } else {
r->value |= 0x10; // mono reg->find_reg(REG_0x04).value |= 0x10; // mono
} }
const auto& dpihw_sensor = sanei_genesys_find_sensor(dev, session.output_resolution, const auto& dpihw_sensor = sanei_genesys_find_sensor(dev, session.output_resolution,
@ -607,16 +593,15 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* CIS scanners can do true gray by setting LEDADD */ /* CIS scanners can do true gray by setting LEDADD */
/* we set up LEDADD only when asked */ /* we set up LEDADD only when asked */
if (dev->model->is_cis) { if (dev->model->is_cis) {
r = sanei_genesys_get_address (reg, 0x87); reg->find_reg(0x87).value &= ~REG_0x87_LEDADD;
r->value &= ~REG_0x87_LEDADD;
if (session.enable_ledadd) { if (session.enable_ledadd) {
r->value |= REG_0x87_LEDADD; reg->find_reg(0x87).value |= REG_0x87_LEDADD;
} }
/* RGB weighting /* RGB weighting
r = sanei_genesys_get_address (reg, 0x01); reg->find_reg(0x01).value &= ~REG_0x01_TRUEGRAY;
r->value &= ~REG_0x01_TRUEGRAY;
if (session.enable_ledadd) { if (session.enable_ledadd) {
r->value |= REG_0x01_TRUEGRAY; reg->find_reg(0x01).value |= REG_0x01_TRUEGRAY;
} }
*/ */
} }
@ -634,8 +619,7 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
reg->set16(REG_LPERIOD, exposure_time); reg->set16(REG_LPERIOD, exposure_time);
DBG(DBG_io2, "%s: exposure_time used=%d\n", __func__, exposure_time); DBG(DBG_io2, "%s: exposure_time used=%d\n", __func__, exposure_time);
r = sanei_genesys_get_address (reg, 0x34); reg->set8(0x34, sensor.dummy_pixel);
r->value = sensor.dummy_pixel;
} }
void CommandSetGl847::init_regs_for_scan_session(Genesys_Device* dev, const Genesys_Sensor& sensor, void CommandSetGl847::init_regs_for_scan_session(Genesys_Device* dev, const Genesys_Sensor& sensor,
@ -773,7 +757,6 @@ void CommandSetGl847::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
DBG_HELPER(dbg); DBG_HELPER(dbg);
(void) sensor; (void) sensor;
uint8_t val; uint8_t val;
GenesysRegister *r;
// clear GPIO 10 // clear GPIO 10
if (dev->model->gpio_id != GpioId::CANON_LIDE_700F) { if (dev->model->gpio_id != GpioId::CANON_LIDE_700F) {
@ -790,8 +773,7 @@ void CommandSetGl847::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
val = dev->interface->read_register(REG_0x01); val = dev->interface->read_register(REG_0x01);
val |= REG_0x01_SCAN; val |= REG_0x01_SCAN;
dev->interface->write_register(REG_0x01, val); dev->interface->write_register(REG_0x01, val);
r = sanei_genesys_get_address (reg, REG_0x01); reg->set8(REG_0x01, val);
r->value = val;
scanner_start_action(*dev, start_motor); scanner_start_action(*dev, start_motor);

Wyświetl plik

@ -219,16 +219,6 @@ private:
/* common functions needed by low level specific functions */ /* common functions needed by low level specific functions */
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
inline GenesysRegister* sanei_genesys_get_address(Genesys_Register_Set* regs, uint16_t addr)
{
auto* ret = regs->find_reg_address(addr);
if (ret == nullptr) {
DBG(DBG_error, "%s: failed to find address for register 0x%02x, crash expected !\n",
__func__, addr);
}
return ret;
}
extern void sanei_genesys_init_cmd_set(Genesys_Device* dev); extern void sanei_genesys_init_cmd_set(Genesys_Device* dev);
// reads the status of the scanner // reads the status of the scanner