genesys: Extract regs_set_optical_off() to use across the ASICs

merge-requests/213/head
Povilas Kanapickas 2019-12-01 10:08:55 +02:00
rodzic 052aa01626
commit 6913513dc2
9 zmienionych plików z 63 dodań i 50 usunięć

Wyświetl plik

@ -739,8 +739,8 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
/* enable shading */
regs_set_optical_off(dev->model->asic_type, *reg);
r = sanei_genesys_get_address (reg, REG_0x01);
r->value &= ~REG_0x01_SCAN;
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
(dev->model->flags & GENESYS_FLAG_NO_CALIBRATION))
{
@ -1017,10 +1017,8 @@ void gl124_stop_action(Genesys_Device* dev)
}
/* ends scan */
std::uint8_t val = dev->reg.get8(REG_0x01);
val &= ~REG_0x01_SCAN;
dev->reg.set8(REG_0x01, val);
dev->interface->write_register(REG_0x01, val);
regs_set_optical_off(dev->model->asic_type, dev->reg);
dev->interface->write_register(REG_0x01, dev->reg.get8(REG_0x01));
dev->interface->sleep_ms(100);

Wyświetl plik

@ -1384,10 +1384,8 @@ static void end_scan_impl(Genesys_Device* dev, Genesys_Register_Set* reg, bool c
}
/* ends scan */
std::uint8_t val = reg->get8(0x01);
val &= ~REG_0x01_SCAN;
reg->set8(0x01, val);
dev->interface->write_register(0x01, val);
regs_set_optical_off(dev->model->asic_type, *reg);
dev->interface->write_register(0x01, reg->get8(0x01));
/* for sheetfed scanners, we may have to eject document */
if (dev->model->is_sheetfed) {
@ -1525,7 +1523,7 @@ void CommandSetGl646::slow_back_home(Genesys_Device* dev, bool wait_until_home)
init_regs_for_scan_session(dev, sensor, &dev->reg, session);
/* backward , no actual data scanned TODO more setup flags to avoid this register manipulations ? */
dev->reg.find_reg(0x01).value &= ~REG_0x01_SCAN;
regs_set_optical_off(dev->model->asic_type, dev->reg);
// sets frontend
gl646_set_fe(dev, sensor, AFE_SET, resolution);
@ -2687,7 +2685,7 @@ static void gl646_repark_head(Genesys_Device* dev)
setup_for_scan(dev, sensor, &dev->reg, settings, false, false, false, false);
/* TODO seems wrong ... no effective scan */
dev->reg.find_reg(0x01).value &= ~REG_0x01_SCAN;
regs_set_optical_off(dev->model->asic_type, dev->reg);
dev->interface->write_registers(dev->reg);

Wyświetl plik

@ -53,6 +53,7 @@ using RegAddr = std::uint16_t;
using RegMask = std::uint8_t;
using RegShift = unsigned;
static constexpr RegAddr REG_0x01 = 0x01;
static constexpr RegMask REG_0x01_CISSET = 0x80;
static constexpr RegMask REG_0x01_DOGENB = 0x40;
static constexpr RegMask REG_0x01_DVDSET = 0x20;

Wyświetl plik

@ -1300,15 +1300,6 @@ gl841_get_dpihw(Genesys_Device * dev)
return 0;
}
static void gl841_init_optical_regs_off(Genesys_Register_Set* reg)
{
DBG_HELPER(dbg);
GenesysRegister* r;
r = sanei_genesys_get_address(reg, 0x01);
r->value &= ~REG_0x01_SCAN;
}
static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sensor& sensor,
Genesys_Register_Set* reg, unsigned int exposure_time,
const ScanSession& session)
@ -1879,7 +1870,7 @@ static void gl841_stop_action(Genesys_Device* dev)
local_reg = dev->reg;
gl841_init_optical_regs_off(&local_reg);
regs_set_optical_off(dev->model->asic_type, local_reg);
gl841_init_motor_regs_off(&local_reg,0);
dev->interface->write_registers(local_reg);
@ -1941,7 +1932,7 @@ void CommandSetGl841::eject_document(Genesys_Device* dev) const
local_reg = dev->reg;
gl841_init_optical_regs_off(&local_reg);
regs_set_optical_off(dev->model->asic_type, local_reg);
const auto& sensor = sanei_genesys_find_sensor_any(dev);
gl841_init_motor_regs(dev, sensor, &local_reg, 65536, MOTOR_ACTION_FEED, MotorFlag::NONE);
@ -2180,7 +2171,7 @@ static void gl841_feed(Genesys_Device* dev, int steps)
local_reg = dev->reg;
gl841_init_optical_regs_off(&local_reg);
regs_set_optical_off(dev->model->asic_type, local_reg);
gl841_init_motor_regs(dev, sensor, &local_reg, steps, MOTOR_ACTION_FEED, MotorFlag::NONE);
@ -2229,7 +2220,6 @@ void CommandSetGl841::slow_back_home(Genesys_Device* dev, bool wait_until_home)
{
DBG_HELPER_ARGS(dbg, "wait_until_home = %d", wait_until_home);
Genesys_Register_Set local_reg;
GenesysRegister *r;
int loop = 0;
if (dev->model->is_sheetfed) {
@ -2264,9 +2254,8 @@ void CommandSetGl841::slow_back_home(Genesys_Device* dev, bool wait_until_home)
}
/* end previous scan if any */
r = sanei_genesys_get_address(&dev->reg, REG_0x01);
r->value &= ~REG_0x01_SCAN;
dev->interface->write_register(REG_0x01, r->value);
regs_set_optical_off(dev->model->asic_type, dev->reg);
dev->interface->write_register(REG_0x01, dev->reg.get8(REG_0x01));
/* if motor is on, stop current action */
if (status.is_motor_enabled) {
@ -2280,8 +2269,7 @@ void CommandSetGl841::slow_back_home(Genesys_Device* dev, bool wait_until_home)
gl841_init_motor_regs(dev, sensor, &local_reg, 65536, MOTOR_ACTION_GO_HOME, MotorFlag::REVERSE);
// set up for no scan
r = sanei_genesys_get_address(&local_reg, REG_0x01);
r->value &= ~REG_0x01_SCAN;
regs_set_optical_off(dev->model->asic_type, local_reg);
dev->interface->write_registers(local_reg);

Wyświetl plik

@ -1039,8 +1039,8 @@ static void gl843_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
/* enable shading */
regs_set_optical_off(dev->model->asic_type, *reg);
r = sanei_genesys_get_address (reg, REG_0x01);
r->value &= ~REG_0x01_SCAN;
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
(dev->model->flags & GENESYS_FLAG_NO_CALIBRATION ||
(dev->model->flags & GENESYS_FLAG_CALIBRATION_HOST_SIDE)))
@ -1318,10 +1318,8 @@ void CommandSetGl843::set_powersaving(Genesys_Device* dev, int delay /* in minut
static void gl843_stop_action_no_move(Genesys_Device* dev, Genesys_Register_Set* reg)
{
DBG_HELPER(dbg);
uint8_t val = reg->get8(REG_0x01);
val &= ~REG_0x01_SCAN;
reg->set8(REG_0x01, val);
dev->interface->write_register(REG_0x01, val);
regs_set_optical_off(dev->model->asic_type, *reg);
dev->interface->write_register(REG_0x01, reg->get8(REG_0x01));
dev->interface->sleep_ms(100);
}
@ -1341,11 +1339,9 @@ void gl843_stop_action(Genesys_Device* dev)
return;
}
/* ends scan 646 */
std::uint8_t val = dev->reg.get8(REG_0x01);
val &= ~REG_0x01_SCAN;
dev->reg.set8(REG_0x01, val);
dev->interface->write_register(REG_0x01, val);
// ends scan
regs_set_optical_off(dev->model->asic_type, dev->reg);
dev->interface->write_register(REG_0x01, dev->reg.get8(REG_0x01));
dev->interface->sleep_ms(100);

Wyświetl plik

@ -612,8 +612,8 @@ static void gl846_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
/* enable shading */
regs_set_optical_off(dev->model->asic_type, *reg);
r = sanei_genesys_get_address(reg, REG_0x01);
r->value &= ~REG_0x01_SCAN;
r->value |= REG_0x01_SHDAREA;
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
(dev->model->flags & GENESYS_FLAG_NO_CALIBRATION))
@ -857,10 +857,8 @@ void gl846_stop_action(Genesys_Device* dev)
}
/* ends scan */
std::uint8_t val = dev->reg.get8(REG_0x01);
val &= ~REG_0x01_SCAN;
dev->reg.set8(REG_0x01, val);
dev->interface->write_register(REG_0x01, val);
regs_set_optical_off(dev->model->asic_type, dev->reg);
dev->interface->write_register(REG_0x01, dev->reg.get8(REG_0x01));
dev->interface->sleep_ms(100);
if (is_testing_mode()) {

Wyświetl plik

@ -619,8 +619,8 @@ static void gl847_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
/* enable shading */
regs_set_optical_off(dev->model->asic_type, *reg);
r = sanei_genesys_get_address(reg, REG_0x01);
r->value &= ~REG_0x01_SCAN;
r->value |= REG_0x01_SHDAREA;
if (has_flag(session.params.flags, ScanFlag::DISABLE_SHADING) ||
@ -847,7 +847,6 @@ void CommandSetGl847::set_powersaving(Genesys_Device* dev, int delay /* in minut
void gl847_stop_action(Genesys_Device* dev)
{
DBG_HELPER(dbg);
uint8_t val;
unsigned int loop;
dev->cmd_set->update_home_sensor_gpio(*dev);
@ -862,10 +861,8 @@ void gl847_stop_action(Genesys_Device* dev)
}
/* ends scan */
val = dev->reg.get8(REG_0x01);
val &= ~REG_0x01_SCAN;
dev->reg.set8(REG_0x01, val);
dev->interface->write_register(REG_0x01, val);
regs_set_optical_off(dev->model->asic_type, dev->reg);
dev->interface->write_register(REG_0x01, dev->reg.get8(REG_0x01));
dev->interface->sleep_ms(100);

Wyświetl plik

@ -49,6 +49,7 @@
#include "test_settings.h"
#include "gl124_registers.h"
#include "gl646_registers.h"
#include "gl841_registers.h"
#include "gl843_registers.h"
#include "gl846_registers.h"
@ -1691,6 +1692,40 @@ void regs_set_exposure(AsicType asic_type, Genesys_Register_Set& regs,
}
}
void regs_set_optical_off(AsicType asic_type, Genesys_Register_Set& regs)
{
DBG_HELPER(dbg);
switch (asic_type) {
case AsicType::GL646: {
regs.find_reg(gl646::REG_0x01).value &= ~gl646::REG_0x01_SCAN;
break;
}
case AsicType::GL841: {
regs.find_reg(gl841::REG_0x01).value &= ~gl841::REG_0x01_SCAN;
break;
}
case AsicType::GL843: {
regs.find_reg(gl843::REG_0x01).value &= ~gl843::REG_0x01_SCAN;
break;
}
case AsicType::GL845:
case AsicType::GL846: {
regs.find_reg(gl846::REG_0x01).value &= ~gl846::REG_0x01_SCAN;
break;
}
case AsicType::GL847: {
regs.find_reg(gl847::REG_0x01).value &= ~gl847::REG_0x01_SCAN;
break;
}
case AsicType::GL124: {
regs.find_reg(gl124::REG_0x01).value &= ~gl124::REG_0x01_SCAN;
break;
}
default:
throw SaneException("Unsupported asic");
}
}
bool get_registers_gain4_bit(AsicType asic_type, const Genesys_Register_Set& regs)
{
switch (asic_type) {

Wyświetl plik

@ -379,6 +379,8 @@ Image read_unshuffled_image_from_scanner(Genesys_Device* dev, const ScanSession&
void regs_set_exposure(AsicType asic_type, Genesys_Register_Set& regs,
const SensorExposure& exposure);
void regs_set_optical_off(AsicType asic_type, Genesys_Register_Set& regs);
void sanei_genesys_set_dpihw(Genesys_Register_Set& regs, const Genesys_Sensor& sensor,
unsigned dpihw);