From bb8411a48a04ba8734d9302e210fa6578c5f8dcb Mon Sep 17 00:00:00 2001 From: Ralph Little Date: Tue, 7 Dec 2021 22:16:13 -0800 Subject: [PATCH] genesys: Added transparency button option This is introduced primarily for the ScanJet G4010 which has "Scan Film" buttons. --- backend/genesys/genesys.cpp | 14 ++++++++++++++ backend/genesys/genesys.h | 2 ++ backend/genesys/gl843.cpp | 2 +- backend/genesys/low.h | 1 + backend/genesys/tables_model.cpp | 2 +- 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 9552fa9ef..4538b950b 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -5003,6 +5003,18 @@ static void init_options(Genesys_Scanner* s) else s->opt[OPT_EXTRA_SW].cap = SANE_CAP_INACTIVE; + // transparency/scan_film button + s->opt[OPT_TRANSP_SW].name = "transparency"; + s->opt[OPT_TRANSP_SW].title = SANE_I18N ("Transparency button"); + s->opt[OPT_TRANSP_SW].desc = SANE_I18N ("Transparency button"); + s->opt[OPT_TRANSP_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_TRANSP_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_TRANSP_SW) { + s->opt[OPT_TRANSP_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + } else { + s->opt[OPT_TRANSP_SW].cap = SANE_CAP_INACTIVE; + } + /* calibration needed */ s->opt[OPT_NEED_CALIBRATION_SW].name = "need-calibration"; s->opt[OPT_NEED_CALIBRATION_SW].title = SANE_I18N ("Needs calibration"); @@ -5821,6 +5833,7 @@ static void get_option_value(Genesys_Scanner* s, int option, void* val) case OPT_OCR_SW: case OPT_POWER_SW: case OPT_EXTRA_SW: + case OPT_TRANSP_SW: s->dev->cmd_set->update_hardware_sensors(s); *reinterpret_cast(val) = s->buttons[genesys_option_to_button(option)].read(); break; @@ -6456,6 +6469,7 @@ GenesysButtonName genesys_option_to_button(int option) case OPT_OCR_SW: return BUTTON_OCR_SW; case OPT_POWER_SW: return BUTTON_POWER_SW; case OPT_EXTRA_SW: return BUTTON_EXTRA_SW; + case OPT_TRANSP_SW: return BUTTON_TRANSP_SW; default: throw std::runtime_error("Unknown option to convert to button index"); } } diff --git a/backend/genesys/genesys.h b/backend/genesys/genesys.h index 19d6feb03..6f2e67c47 100644 --- a/backend/genesys/genesys.h +++ b/backend/genesys/genesys.h @@ -124,6 +124,7 @@ enum Genesys_Option OPT_OCR_SW, OPT_POWER_SW, OPT_EXTRA_SW, + OPT_TRANSP_SW, OPT_NEED_CALIBRATION_SW, OPT_BUTTON_GROUP, OPT_CALIBRATE, @@ -144,6 +145,7 @@ enum GenesysButtonName : unsigned { BUTTON_OCR_SW, BUTTON_POWER_SW, BUTTON_EXTRA_SW, + BUTTON_TRANSP_SW, NUM_BUTTONS }; diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 80ebe0e7d..f63f67545 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -1697,7 +1697,7 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const case GpioId::G4010: s->buttons[BUTTON_FILE_SW].write((val & 0x01) == 0); s->buttons[BUTTON_COPY_SW].write((val & 0x04) == 0); - s->buttons[BUTTON_EXTRA_SW].write((val & 0x40) == 0); // transparency + s->buttons[BUTTON_TRANSP_SW].write((val & 0x40) == 0); s->buttons[BUTTON_SCAN_SW].write((val & 0x08) == 0); break; case GpioId::CANON_4400F: diff --git a/backend/genesys/low.h b/backend/genesys/low.h index ac149b5ae..449618672 100644 --- a/backend/genesys/low.h +++ b/backend/genesys/low.h @@ -116,6 +116,7 @@ #define GENESYS_HAS_POWER_SW (1 << 6) /**< scanner has power button */ #define GENESYS_HAS_CALIBRATE (1 << 7) /**< scanner has 'calibrate' software button to start calibration */ #define GENESYS_HAS_EXTRA_SW (1 << 8) /**< scanner has extra function button */ +#define GENESYS_HAS_TRANSP_SW (1 << 9) /**< scanner has TRANSPARCY/SCAN_FILM button */ /* USB control message values */ #define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN) diff --git a/backend/genesys/tables_model.cpp b/backend/genesys/tables_model.cpp index 04017d013..acd933a89 100644 --- a/backend/genesys/tables_model.cpp +++ b/backend/genesys/tables_model.cpp @@ -347,7 +347,7 @@ void genesys_init_usb_device_tables() model.flags = ModelFlag::WARMUP | ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA; - model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EXTRA_SW; + model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_TRANSP_SW; model.search_lines = 100; s_usb_devices->emplace_back(0x03f0, 0x4505, model);