kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Extract regs_set_optical_off() to use across the ASICs
rodzic
052aa01626
commit
6913513dc2
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue