diff --git a/backend/genesys/command_set.h b/backend/genesys/command_set.h index eed6fce8e..0de798171 100644 --- a/backend/genesys/command_set.h +++ b/backend/genesys/command_set.h @@ -76,8 +76,6 @@ public: Genesys_Register_Set& regs) const = 0; virtual void init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) const = 0; - virtual bool get_gain4_bit(Genesys_Register_Set * reg) const = 0; - virtual bool test_buffer_empty_bit(std::uint8_t val) const = 0; virtual void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const = 0; diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 3634ca033..e4f73b46c 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -2094,7 +2094,7 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_ Wn = white average for column n Dn = dark average for column n */ - if (dev->cmd_set->get_gain4_bit(&dev->calib_reg)) { + if (get_registers_gain4_bit(dev->model->asic_type, dev->calib_reg)) { coeff = 0x4000; } else { coeff = 0x2000; diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 44b10c118..69376ebb6 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -53,11 +53,6 @@ namespace genesys { namespace gl124 { -bool CommandSetGl124::get_gain4_bit(Genesys_Register_Set* regs) const -{ - return static_cast(regs->get8(REG_0x06) & REG_0x06_GAIN4); -} - bool CommandSetGl124::test_buffer_empty_bit(SANE_Byte val) const { return (val & BUFEMPTY); diff --git a/backend/genesys/gl124.h b/backend/genesys/gl124.h index e8a8caf03..5dbeb27c6 100644 --- a/backend/genesys/gl124.h +++ b/backend/genesys/gl124.h @@ -137,8 +137,6 @@ public: void init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) const override; - bool get_gain4_bit(Genesys_Register_Set * reg) const override; - bool test_buffer_empty_bit(std::uint8_t val) const override; void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index 042fc3f89..0706d8a72 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -90,12 +90,6 @@ static void gl646_gpio_output_enable(IUsbDevice& usb_dev, uint8_t value) usb_dev.control_msg(REQUEST_TYPE_OUT, REQUEST_REGISTER, GPIO_OUTPUT_ENABLE, INDEX, 1, &value); } -bool CommandSetGl646::get_gain4_bit(Genesys_Register_Set* regs) const -{ - GenesysRegister *r = sanei_genesys_get_address(regs, 0x06); - return (r && (r->value & REG_0x06_GAIN4)); -} - bool CommandSetGl646::test_buffer_empty_bit(SANE_Byte val) const { return (val & REG_0x41_BUFEMPTY); diff --git a/backend/genesys/gl646.h b/backend/genesys/gl646.h index 910f0e49b..21c8ce31e 100644 --- a/backend/genesys/gl646.h +++ b/backend/genesys/gl646.h @@ -254,8 +254,6 @@ public: void init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) const override; - bool get_gain4_bit(Genesys_Register_Set * reg) const override; - bool test_buffer_empty_bit(std::uint8_t val) const override; void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; diff --git a/backend/genesys/gl646_registers.h b/backend/genesys/gl646_registers.h index 76ed24dc6..06dafae29 100644 --- a/backend/genesys/gl646_registers.h +++ b/backend/genesys/gl646_registers.h @@ -98,6 +98,7 @@ static constexpr RegMask REG_0x05_GMMENB = 0x08; static constexpr RegMask REG_0x05_LEDADD = 0x04; static constexpr RegMask REG_0x05_BASESEL = 0x03; +static constexpr RegAddr REG_0x06 = 0x06; static constexpr RegMask REG_0x06_PWRBIT = 0x10; static constexpr RegMask REG_0x06_GAIN4 = 0x08; static constexpr RegMask REG_0x06_OPTEST = 0x07; diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index e5e94bf7e..cdce82b8c 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -68,12 +68,6 @@ static int gl841_exposure_time(Genesys_Device *dev, const Genesys_Sensor& sensor int start, int used_pixels); -bool CommandSetGl841::get_gain4_bit(Genesys_Register_Set* regs) const -{ - GenesysRegister *r = sanei_genesys_get_address(regs, 0x06); - return (r && (r->value & REG_0x06_GAIN4)); -} - bool CommandSetGl841::test_buffer_empty_bit(SANE_Byte val) const { return (val & REG_0x41_BUFEMPTY); diff --git a/backend/genesys/gl841.h b/backend/genesys/gl841.h index 2b91c05fd..292be20c9 100644 --- a/backend/genesys/gl841.h +++ b/backend/genesys/gl841.h @@ -71,8 +71,6 @@ public: void init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) const override; - bool get_gain4_bit(Genesys_Register_Set* reg) const override; - bool test_buffer_empty_bit(std::uint8_t val) const override; void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; diff --git a/backend/genesys/gl841_registers.h b/backend/genesys/gl841_registers.h index 0e45db644..e8f8a14fa 100644 --- a/backend/genesys/gl841_registers.h +++ b/backend/genesys/gl841_registers.h @@ -95,6 +95,7 @@ static constexpr RegMask REG_0x05_MTLLAMP = 0x30; static constexpr RegMask REG_0x05_GMMENB = 0x08; static constexpr RegMask REG_0x05_MTLBASE = 0x03; +static constexpr RegAddr REG_0x06 = 0x06; static constexpr RegMask REG_0x06_SCANMOD = 0xe0; static constexpr RegShift REG_0x06S_SCANMOD = 5; static constexpr RegMask REG_0x06_PWRBIT = 0x10; diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index df4263258..080252345 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -63,12 +63,6 @@ static void gl843_set_buffer_address(Genesys_Device* dev, uint32_t addr) dev->interface->write_register(0x5c, (addr & 0xff)); } -bool CommandSetGl843::get_gain4_bit(Genesys_Register_Set* regs) const -{ - GenesysRegister *r = sanei_genesys_get_address(regs, REG_0x06); - return (r && (r->value & REG_0x06_GAIN4)); -} - /** * compute the step multiplier used */ diff --git a/backend/genesys/gl843.h b/backend/genesys/gl843.h index 9cb4648f8..b3b87eec8 100644 --- a/backend/genesys/gl843.h +++ b/backend/genesys/gl843.h @@ -71,8 +71,6 @@ public: void init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) const override; - bool get_gain4_bit(Genesys_Register_Set * reg) const override; - bool test_buffer_empty_bit(std::uint8_t val) const override; void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index 586de6237..1ca81e3a4 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -58,12 +58,6 @@ namespace genesys { namespace gl846 { -bool CommandSetGl846::get_gain4_bit(Genesys_Register_Set* regs) const -{ - GenesysRegister *r = sanei_genesys_get_address(regs, 0x06); - return (r && (r->value & REG_0x06_GAIN4)); -} - bool CommandSetGl846::test_buffer_empty_bit(SANE_Byte val) const { return (val & REG_0x41_BUFEMPTY); diff --git a/backend/genesys/gl846.h b/backend/genesys/gl846.h index d5d67c193..66ac5f2d8 100644 --- a/backend/genesys/gl846.h +++ b/backend/genesys/gl846.h @@ -156,8 +156,6 @@ public: void init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) const override; - bool get_gain4_bit(Genesys_Register_Set * reg) const override; - bool test_buffer_empty_bit(std::uint8_t val) const override; void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; diff --git a/backend/genesys/gl846_registers.h b/backend/genesys/gl846_registers.h index fc796c731..39b302921 100644 --- a/backend/genesys/gl846_registers.h +++ b/backend/genesys/gl846_registers.h @@ -99,6 +99,7 @@ static constexpr RegMask REG_0x05_MTLLAMP = 0x30; static constexpr RegMask REG_0x05_GMMENB = 0x08; static constexpr RegMask REG_0x05_MTLBASE = 0x03; +static constexpr RegAddr REG_0x06 = 0x06; static constexpr RegMask REG_0x06_SCANMOD = 0xe0; static constexpr RegShift REG_0x06S_SCANMOD = 5; static constexpr RegMask REG_0x06_PWRBIT = 0x10; diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index 2b060d7f6..bed5c8303 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -53,12 +53,6 @@ namespace genesys { namespace gl847 { -bool CommandSetGl847::get_gain4_bit(Genesys_Register_Set* regs) const -{ - GenesysRegister *r = sanei_genesys_get_address(regs, 0x06); - return (r && (r->value & REG_0x06_GAIN4)); -} - bool CommandSetGl847::test_buffer_empty_bit(SANE_Byte val) const { return (val & REG_0x41_BUFEMPTY); diff --git a/backend/genesys/gl847.h b/backend/genesys/gl847.h index 4b79384a5..fce01ade1 100644 --- a/backend/genesys/gl847.h +++ b/backend/genesys/gl847.h @@ -140,8 +140,6 @@ public: void init_regs_for_scan(Genesys_Device* dev, const Genesys_Sensor& sensor) const override; - bool get_gain4_bit(Genesys_Register_Set * reg) const override; - bool test_buffer_empty_bit(std::uint8_t val) const override; void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; diff --git a/backend/genesys/gl847_registers.h b/backend/genesys/gl847_registers.h index 47f399323..0603a6a65 100644 --- a/backend/genesys/gl847_registers.h +++ b/backend/genesys/gl847_registers.h @@ -98,6 +98,7 @@ static constexpr RegMask REG_0x05_MTLLAMP = 0x30; static constexpr RegMask REG_0x05_GMMENB = 0x08; static constexpr RegMask REG_0x05_MTLBASE = 0x03; +static constexpr RegAddr REG_0x06 = 0x06; static constexpr RegMask REG_0x06_SCANMOD = 0xe0; static constexpr RegMask REG_0x06S_SCANMOD = 5; static constexpr RegMask REG_0x06_PWRBIT = 0x10; diff --git a/backend/genesys/low.cpp b/backend/genesys/low.cpp index 53ef44cd6..cda1b7051 100644 --- a/backend/genesys/low.cpp +++ b/backend/genesys/low.cpp @@ -48,6 +48,13 @@ #include "assert.h" #include "test_settings.h" +#include "gl124_registers.h" +#include "gl841_registers.h" +#include "gl843_registers.h" +#include "gl846_registers.h" +#include "gl847_registers.h" +#include "gl646_registers.h" + #include #include #include @@ -1600,6 +1607,27 @@ void sanei_genesys_set_dpihw(Genesys_Register_Set& regs, const Genesys_Sensor& s regs.set8_mask(0x05, dpihw_setting, REG_0x05_DPIHW_MASK); } +bool get_registers_gain4_bit(AsicType asic_type, const Genesys_Register_Set& regs) +{ + switch (asic_type) { + case AsicType::GL646: + return static_cast(regs.get8(gl646::REG_0x06) & gl646::REG_0x06_GAIN4); + case AsicType::GL841: + return static_cast(regs.get8(gl841::REG_0x06) & gl841::REG_0x06_GAIN4); + case AsicType::GL843: + return static_cast(regs.get8(gl843::REG_0x06) & gl843::REG_0x06_GAIN4); + case AsicType::GL845: + case AsicType::GL846: + return static_cast(regs.get8(gl846::REG_0x06) & gl846::REG_0x06_GAIN4); + case AsicType::GL847: + return static_cast(regs.get8(gl847::REG_0x06) & gl847::REG_0x06_GAIN4); + case AsicType::GL124: + return static_cast(regs.get8(gl124::REG_0x06) & gl124::REG_0x06_GAIN4); + default: + throw SaneException("Unsupported chipset"); + } +} + /** * Wait for the scanning head to park */ diff --git a/backend/genesys/low.h b/backend/genesys/low.h index b8247c6e2..49f720127 100644 --- a/backend/genesys/low.h +++ b/backend/genesys/low.h @@ -402,6 +402,8 @@ inline SensorExposure sanei_genesys_fixup_exposure(SensorExposure exposure) return exposure; } +bool get_registers_gain4_bit(AsicType asic_type, const Genesys_Register_Set& regs); + extern void sanei_genesys_wait_for_home(Genesys_Device* dev); extern void sanei_genesys_asic_init(Genesys_Device* dev, bool cold);