Merge branch 'genesys_8400f_sensors' into 'master'

Genesys 8400f sensors

See merge request sane-project/backends!712
escl-add-user-and-password
Ralph Little 2022-04-13 18:24:57 +00:00
commit ea8d0eb91e
5 zmienionych plików z 87 dodań i 4 usunięć

Wyświetl plik

@ -4907,6 +4907,54 @@ static void init_options(Genesys_Scanner* s)
else else
s->opt[OPT_TRANSP_SW].cap = SANE_CAP_INACTIVE; s->opt[OPT_TRANSP_SW].cap = SANE_CAP_INACTIVE;
/* PDF special function button 1 */
s->opt[OPT_PDF1_SW].name = "pdf1";
s->opt[OPT_PDF1_SW].title = SANE_I18N ("PDF function button 1");
s->opt[OPT_PDF1_SW].desc = SANE_I18N ("PDF function button 1");
s->opt[OPT_PDF1_SW].type = SANE_TYPE_BOOL;
s->opt[OPT_PDF1_SW].unit = SANE_UNIT_NONE;
if (model->buttons & GENESYS_HAS_PDF1_SW)
s->opt[OPT_PDF1_SW].cap =
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
else
s->opt[OPT_PDF1_SW].cap = SANE_CAP_INACTIVE;
/* PDF special function button 2 */
s->opt[OPT_PDF2_SW].name = "pdf2";
s->opt[OPT_PDF2_SW].title = SANE_I18N ("PDF function button 2");
s->opt[OPT_PDF2_SW].desc = SANE_I18N ("PDF function button 2");
s->opt[OPT_PDF2_SW].type = SANE_TYPE_BOOL;
s->opt[OPT_PDF2_SW].unit = SANE_UNIT_NONE;
if (model->buttons & GENESYS_HAS_PDF2_SW)
s->opt[OPT_PDF2_SW].cap =
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
else
s->opt[OPT_PDF2_SW].cap = SANE_CAP_INACTIVE;
/* PDF special function button 3 */
s->opt[OPT_PDF3_SW].name = "pdf3";
s->opt[OPT_PDF3_SW].title = SANE_I18N ("PDF function button 3");
s->opt[OPT_PDF3_SW].desc = SANE_I18N ("PDF function button 3");
s->opt[OPT_PDF3_SW].type = SANE_TYPE_BOOL;
s->opt[OPT_PDF3_SW].unit = SANE_UNIT_NONE;
if (model->buttons & GENESYS_HAS_PDF3_SW)
s->opt[OPT_PDF3_SW].cap =
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
else
s->opt[OPT_PDF3_SW].cap = SANE_CAP_INACTIVE;
/* PDF special function button 4 */
s->opt[OPT_PDF4_SW].name = "pdf4";
s->opt[OPT_PDF4_SW].title = SANE_I18N ("PDF function button 4");
s->opt[OPT_PDF4_SW].desc = SANE_I18N ("PDF function button 4");
s->opt[OPT_PDF4_SW].type = SANE_TYPE_BOOL;
s->opt[OPT_PDF4_SW].unit = SANE_UNIT_NONE;
if (model->buttons & GENESYS_HAS_PDF4_SW)
s->opt[OPT_PDF4_SW].cap =
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
else
s->opt[OPT_PDF4_SW].cap = SANE_CAP_INACTIVE;
/* calibration needed */ /* calibration needed */
s->opt[OPT_NEED_CALIBRATION_SW].name = "need-calibration"; s->opt[OPT_NEED_CALIBRATION_SW].name = "need-calibration";
s->opt[OPT_NEED_CALIBRATION_SW].title = SANE_I18N ("Needs calibration"); s->opt[OPT_NEED_CALIBRATION_SW].title = SANE_I18N ("Needs calibration");
@ -5726,6 +5774,10 @@ static void get_option_value(Genesys_Scanner* s, int option, void* val)
case OPT_POWER_SW: case OPT_POWER_SW:
case OPT_EXTRA_SW: case OPT_EXTRA_SW:
case OPT_TRANSP_SW: case OPT_TRANSP_SW:
case OPT_PDF1_SW:
case OPT_PDF2_SW:
case OPT_PDF3_SW:
case OPT_PDF4_SW:
s->dev->cmd_set->update_hardware_sensors(s); s->dev->cmd_set->update_hardware_sensors(s);
*reinterpret_cast<SANE_Bool*>(val) = s->buttons[genesys_option_to_button(option)].read(); *reinterpret_cast<SANE_Bool*>(val) = s->buttons[genesys_option_to_button(option)].read();
break; break;
@ -6362,6 +6414,10 @@ GenesysButtonName genesys_option_to_button(int option)
case OPT_POWER_SW: return BUTTON_POWER_SW; case OPT_POWER_SW: return BUTTON_POWER_SW;
case OPT_EXTRA_SW: return BUTTON_EXTRA_SW; case OPT_EXTRA_SW: return BUTTON_EXTRA_SW;
case OPT_TRANSP_SW: return BUTTON_TRANSP_SW; case OPT_TRANSP_SW: return BUTTON_TRANSP_SW;
case OPT_PDF1_SW: return BUTTON_PDF1_SW;
case OPT_PDF2_SW: return BUTTON_PDF2_SW;
case OPT_PDF3_SW: return BUTTON_PDF3_SW;
case OPT_PDF4_SW: return BUTTON_PDF4_SW;
default: throw std::runtime_error("Unknown option to convert to button index"); default: throw std::runtime_error("Unknown option to convert to button index");
} }
} }

Wyświetl plik

@ -104,6 +104,10 @@ enum Genesys_Option
OPT_POWER_SW, OPT_POWER_SW,
OPT_EXTRA_SW, OPT_EXTRA_SW,
OPT_TRANSP_SW, OPT_TRANSP_SW,
OPT_PDF1_SW,
OPT_PDF2_SW,
OPT_PDF3_SW,
OPT_PDF4_SW,
OPT_NEED_CALIBRATION_SW, OPT_NEED_CALIBRATION_SW,
OPT_BUTTON_GROUP, OPT_BUTTON_GROUP,
OPT_CALIBRATE, OPT_CALIBRATE,
@ -125,6 +129,10 @@ enum GenesysButtonName : unsigned {
BUTTON_POWER_SW, BUTTON_POWER_SW,
BUTTON_EXTRA_SW, BUTTON_EXTRA_SW,
BUTTON_TRANSP_SW, BUTTON_TRANSP_SW,
BUTTON_PDF1_SW,
BUTTON_PDF2_SW,
BUTTON_PDF3_SW,
BUTTON_PDF4_SW,
NUM_BUTTONS NUM_BUTTONS
}; };

Wyświetl plik

@ -1686,8 +1686,21 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const
s->buttons[BUTTON_TRANSP_SW].write((val & 0x40) == 0); s->buttons[BUTTON_TRANSP_SW].write((val & 0x40) == 0);
s->buttons[BUTTON_SCAN_SW].write((val & 0x08) == 0); s->buttons[BUTTON_SCAN_SW].write((val & 0x08) == 0);
break; break;
case GpioId::CANON_4400F:
case GpioId::CANON_8400F: case GpioId::CANON_8400F:
s->buttons[BUTTON_COPY_SW].write((val & 0x01) == 0);
s->buttons[BUTTON_SCAN_SW].write((val & 0x02) == 0);
s->buttons[BUTTON_FILE_SW].write((val & 0x04) == 0);
s->buttons[BUTTON_EMAIL_SW].write((val & 0x08) == 0);
break;
case GpioId::CANON_4400F:
s->buttons[BUTTON_COPY_SW].write((val & 0x68) == 0x28);
s->buttons[BUTTON_TRANSP_SW].write((val & 0x68) == 0x20);
s->buttons[BUTTON_EMAIL_SW].write((val & 0x68) == 0x08);
s->buttons[BUTTON_PDF1_SW].write((val & 0x68) == 0x00);
s->buttons[BUTTON_PDF2_SW].write((val & 0x68) == 0x60);
s->buttons[BUTTON_PDF3_SW].write((val & 0x68) == 0x48);
s->buttons[BUTTON_PDF4_SW].write((val & 0x68) == 0x40);
break;
default: default:
break; break;
} }

Wyświetl plik

@ -95,7 +95,11 @@
#define GENESYS_HAS_POWER_SW (1 << 6) /**< scanner has power button */ #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_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_EXTRA_SW (1 << 8) /**< scanner has extra function button */
#define GENESYS_HAS_TRANSP_SW (1 << 9) /**< scanner has TRANSPARCY/SCAN_FILM button */ #define GENESYS_HAS_TRANSP_SW (1 << 9) /**< scanner has TRANSPARENCY/SCAN_FILM button */
#define GENESYS_HAS_PDF1_SW (1 << 10) /**< scanner has special PDF button 1 */
#define GENESYS_HAS_PDF2_SW (1 << 11) /**< scanner has special PDF button 2 */
#define GENESYS_HAS_PDF3_SW (1 << 12) /**< scanner has special PDF button 3 */
#define GENESYS_HAS_PDF4_SW (1 << 13) /**< scanner has special PDF button 4 */
/* USB control message values */ /* USB control message values */
#define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN) #define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN)

Wyświetl plik

@ -447,7 +447,9 @@ void genesys_init_usb_device_tables()
ModelFlag::SHADING_REPARK | ModelFlag::SHADING_REPARK |
ModelFlag::UTA_NO_SECONDARY_MOTOR; ModelFlag::UTA_NO_SECONDARY_MOTOR;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; model.buttons = GENESYS_HAS_TRANSP_SW | GENESYS_HAS_EMAIL_SW
| GENESYS_HAS_COPY_SW | GENESYS_HAS_PDF1_SW | GENESYS_HAS_PDF2_SW
| GENESYS_HAS_PDF3_SW | GENESYS_HAS_PDF4_SW;
model.search_lines = 100; model.search_lines = 100;
s_usb_devices->emplace_back(0x04a9, 0x2228, model); s_usb_devices->emplace_back(0x04a9, 0x2228, model);
@ -517,7 +519,7 @@ void genesys_init_usb_device_tables()
ModelFlag::DARK_CALIBRATION | ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA | ModelFlag::CUSTOM_GAMMA |
ModelFlag::SHADING_REPARK; ModelFlag::SHADING_REPARK;
model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW;
model.search_lines = 100; model.search_lines = 100;
s_usb_devices->emplace_back(0x04a9, 0x221e, model); s_usb_devices->emplace_back(0x04a9, 0x221e, model);