kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Simplify sensor handling
rodzic
f901462f99
commit
3f184b795f
|
@ -5671,8 +5671,6 @@ init_options (Genesys_Scanner * s)
|
|||
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
|
||||
else
|
||||
s->opt[OPT_SCAN_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_SCAN_SW].b = 0;
|
||||
s->last_val[OPT_SCAN_SW].b = 0;
|
||||
|
||||
/* SANE_NAME_FILE is not for buttons */
|
||||
s->opt[OPT_FILE_SW].name = "file";
|
||||
|
@ -5685,8 +5683,6 @@ init_options (Genesys_Scanner * s)
|
|||
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
|
||||
else
|
||||
s->opt[OPT_FILE_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_FILE_SW].b = 0;
|
||||
s->last_val[OPT_FILE_SW].b = 0;
|
||||
|
||||
s->opt[OPT_EMAIL_SW].name = SANE_NAME_EMAIL;
|
||||
s->opt[OPT_EMAIL_SW].title = SANE_TITLE_EMAIL;
|
||||
|
@ -5698,8 +5694,6 @@ init_options (Genesys_Scanner * s)
|
|||
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
|
||||
else
|
||||
s->opt[OPT_EMAIL_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_EMAIL_SW].b = 0;
|
||||
s->last_val[OPT_EMAIL_SW].b = 0;
|
||||
|
||||
s->opt[OPT_COPY_SW].name = SANE_NAME_COPY;
|
||||
s->opt[OPT_COPY_SW].title = SANE_TITLE_COPY;
|
||||
|
@ -5711,8 +5705,6 @@ init_options (Genesys_Scanner * s)
|
|||
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
|
||||
else
|
||||
s->opt[OPT_COPY_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_COPY_SW].b = 0;
|
||||
s->last_val[OPT_COPY_SW].b = 0;
|
||||
|
||||
s->opt[OPT_PAGE_LOADED_SW].name = SANE_NAME_PAGE_LOADED;
|
||||
s->opt[OPT_PAGE_LOADED_SW].title = SANE_TITLE_PAGE_LOADED;
|
||||
|
@ -5724,8 +5716,6 @@ init_options (Genesys_Scanner * s)
|
|||
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
|
||||
else
|
||||
s->opt[OPT_PAGE_LOADED_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_PAGE_LOADED_SW].b = 0;
|
||||
s->last_val[OPT_PAGE_LOADED_SW].b = 0;
|
||||
|
||||
/* OCR button */
|
||||
s->opt[OPT_OCR_SW].name = "ocr";
|
||||
|
@ -5738,8 +5728,6 @@ init_options (Genesys_Scanner * s)
|
|||
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
|
||||
else
|
||||
s->opt[OPT_OCR_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_OCR_SW].b = 0;
|
||||
s->last_val[OPT_OCR_SW].b = 0;
|
||||
|
||||
/* power button */
|
||||
s->opt[OPT_POWER_SW].name = "power";
|
||||
|
@ -5752,8 +5740,6 @@ init_options (Genesys_Scanner * s)
|
|||
SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
|
||||
else
|
||||
s->opt[OPT_POWER_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_POWER_SW].b = 0;
|
||||
s->last_val[OPT_POWER_SW].b = 0;
|
||||
|
||||
/* extra button */
|
||||
s->opt[OPT_EXTRA_SW].name = "extra";
|
||||
|
@ -5767,7 +5753,6 @@ init_options (Genesys_Scanner * s)
|
|||
else
|
||||
s->opt[OPT_EXTRA_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_EXTRA_SW].b = 0;
|
||||
s->last_val[OPT_EXTRA_SW].b = 0;
|
||||
|
||||
/* calibration needed */
|
||||
s->opt[OPT_NEED_CALIBRATION_SW].name = "need-calibration";
|
||||
|
@ -5781,7 +5766,6 @@ init_options (Genesys_Scanner * s)
|
|||
else
|
||||
s->opt[OPT_NEED_CALIBRATION_SW].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_NEED_CALIBRATION_SW].b = 0;
|
||||
s->last_val[OPT_NEED_CALIBRATION_SW].b = 0;
|
||||
|
||||
/* button group */
|
||||
s->opt[OPT_BUTTON_GROUP].title = SANE_I18N ("Buttons");
|
||||
|
@ -5805,7 +5789,6 @@ init_options (Genesys_Scanner * s)
|
|||
else
|
||||
s->opt[OPT_CALIBRATE].cap = SANE_CAP_INACTIVE;
|
||||
s->val[OPT_CALIBRATE].b = 0;
|
||||
s->last_val[OPT_CALIBRATE].b = 0;
|
||||
|
||||
/* clear calibration cache button */
|
||||
s->opt[OPT_CLEAR_CALIBRATION].name = "clear-calibration";
|
||||
|
@ -5818,7 +5801,6 @@ init_options (Genesys_Scanner * s)
|
|||
s->opt[OPT_CLEAR_CALIBRATION].cap =
|
||||
SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED;
|
||||
s->val[OPT_CLEAR_CALIBRATION].b = 0;
|
||||
s->last_val[OPT_CLEAR_CALIBRATION].b = 0;
|
||||
|
||||
/* force calibration cache button */
|
||||
s->opt[OPT_FORCE_CALIBRATION].name = "force-calibration";
|
||||
|
@ -5831,7 +5813,6 @@ init_options (Genesys_Scanner * s)
|
|||
s->opt[OPT_FORCE_CALIBRATION].cap =
|
||||
SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED;
|
||||
s->val[OPT_FORCE_CALIBRATION].b = 0;
|
||||
s->last_val[OPT_FORCE_CALIBRATION].b = 0;
|
||||
|
||||
RIE (calc_parameters (s));
|
||||
|
||||
|
@ -6762,8 +6743,7 @@ get_option_value (Genesys_Scanner * s, int option, void *val)
|
|||
case OPT_POWER_SW:
|
||||
case OPT_EXTRA_SW:
|
||||
RIE (s->dev->model->cmd_set->update_hardware_sensors (s));
|
||||
*(SANE_Bool *) val = s->val[option].b;
|
||||
s->last_val[option].b = *(SANE_Bool *) val;
|
||||
*(SANE_Bool *) val = s->buttons[genesys_option_to_button(option)].read();
|
||||
break;
|
||||
case OPT_NEED_CALIBRATION_SW:
|
||||
/* scanner needs calibration for current mode unless a matching
|
||||
|
@ -7633,3 +7613,18 @@ sane_get_select_fd(SANE_Handle handle, SANE_Int * fd)
|
|||
return sane_get_select_fd_impl(handle, fd);
|
||||
});
|
||||
}
|
||||
|
||||
GenesysButtonName genesys_option_to_button(int option)
|
||||
{
|
||||
switch (option) {
|
||||
case OPT_SCAN_SW: return BUTTON_SCAN_SW;
|
||||
case OPT_FILE_SW: return BUTTON_FILE_SW;
|
||||
case OPT_EMAIL_SW: return BUTTON_EMAIL_SW;
|
||||
case OPT_COPY_SW: return BUTTON_COPY_SW;
|
||||
case OPT_PAGE_LOADED_SW: return BUTTON_PAGE_LOADED_SW;
|
||||
case OPT_OCR_SW: return BUTTON_OCR_SW;
|
||||
case OPT_POWER_SW: return BUTTON_POWER_SW;
|
||||
case OPT_EXTRA_SW: return BUTTON_EXTRA_SW;
|
||||
default: throw std::runtime_error("Unknown option to convert to button index");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#endif
|
||||
|
||||
#include "genesys_low.h"
|
||||
#include <queue>
|
||||
|
||||
#ifndef PATH_MAX
|
||||
# define PATH_MAX 1024
|
||||
|
@ -145,6 +146,45 @@ enum Genesys_Option
|
|||
NUM_OPTIONS
|
||||
};
|
||||
|
||||
enum GenesysButtonName : unsigned {
|
||||
BUTTON_SCAN_SW = 0,
|
||||
BUTTON_FILE_SW,
|
||||
BUTTON_EMAIL_SW,
|
||||
BUTTON_COPY_SW,
|
||||
BUTTON_PAGE_LOADED_SW,
|
||||
BUTTON_OCR_SW,
|
||||
BUTTON_POWER_SW,
|
||||
BUTTON_EXTRA_SW,
|
||||
NUM_BUTTONS
|
||||
};
|
||||
|
||||
GenesysButtonName genesys_option_to_button(int option);
|
||||
|
||||
class GenesysButton {
|
||||
public:
|
||||
void write(bool value)
|
||||
{
|
||||
if (value == value_) {
|
||||
return;
|
||||
}
|
||||
values_to_read_.push(value);
|
||||
value_ = value;
|
||||
}
|
||||
|
||||
bool read()
|
||||
{
|
||||
if (values_to_read_.empty()) {
|
||||
return value_;
|
||||
}
|
||||
bool ret = values_to_read_.front();
|
||||
values_to_read_.pop();
|
||||
return ret;
|
||||
}
|
||||
|
||||
private:
|
||||
bool value_ = false;
|
||||
std::queue<bool> values_to_read_;
|
||||
};
|
||||
|
||||
/** Scanner object. Should have better be called Session than Scanner
|
||||
*/
|
||||
|
@ -166,8 +206,10 @@ struct Genesys_Scanner
|
|||
SANE_Option_Descriptor opt[NUM_OPTIONS];
|
||||
// Option values
|
||||
Option_Value val[NUM_OPTIONS];
|
||||
// Option values as read by the frontend. used for sensors.
|
||||
Option_Value last_val[NUM_OPTIONS];
|
||||
|
||||
// Button states
|
||||
GenesysButton buttons[NUM_BUTTONS];
|
||||
|
||||
// SANE Parameters
|
||||
SANE_Parameters params = {};
|
||||
SANE_Int bpp_list[5] = {};
|
||||
|
|
|
@ -3574,27 +3574,18 @@ gl124_update_hardware_sensors (Genesys_Scanner * s)
|
|||
if((s->dev->model->gpo_type == GPO_CANONLIDE110)
|
||||
||(s->dev->model->gpo_type == GPO_CANONLIDE120))
|
||||
{
|
||||
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
|
||||
s->val[OPT_SCAN_SW].b = (val & 0x01) == 0;
|
||||
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
|
||||
s->val[OPT_FILE_SW].b = (val & 0x08) == 0;
|
||||
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
|
||||
s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0;
|
||||
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
|
||||
s->val[OPT_COPY_SW].b = (val & 0x02) == 0;
|
||||
s->buttons[BUTTON_SCAN_SW].write((val & 0x01) == 0);
|
||||
s->buttons[BUTTON_FILE_SW].write((val & 0x08) == 0);
|
||||
s->buttons[BUTTON_EMAIL_SW].write((val & 0x04) == 0);
|
||||
s->buttons[BUTTON_COPY_SW].write((val & 0x02) == 0);
|
||||
}
|
||||
else
|
||||
{ /* LiDE 210 case */
|
||||
if (s->val[OPT_EXTRA_SW].b == s->last_val[OPT_EXTRA_SW].b)
|
||||
s->val[OPT_EXTRA_SW].b = (val & 0x01) == 0;
|
||||
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
|
||||
s->val[OPT_SCAN_SW].b = (val & 0x02) == 0;
|
||||
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
|
||||
s->val[OPT_COPY_SW].b = (val & 0x04) == 0;
|
||||
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
|
||||
s->val[OPT_EMAIL_SW].b = (val & 0x08) == 0;
|
||||
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
|
||||
s->val[OPT_FILE_SW].b = (val & 0x10) == 0;
|
||||
s->buttons[BUTTON_EXTRA_SW].write((val & 0x01) == 0);
|
||||
s->buttons[BUTTON_SCAN_SW].write((val & 0x02) == 0);
|
||||
s->buttons[BUTTON_COPY_SW].write((val & 0x04) == 0);
|
||||
s->buttons[BUTTON_EMAIL_SW].write((val & 0x08) == 0);
|
||||
s->buttons[BUTTON_FILE_SW].write((val & 0x10) == 0);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -4556,7 +4556,7 @@ simple_move (Genesys_Device * dev, SANE_Int distance)
|
|||
|
||||
/**
|
||||
* update the status of the required sensor in the scanner session
|
||||
* the last_val fileds are used to make events 'sticky'
|
||||
* the button fileds are used to make events 'sticky'
|
||||
*/
|
||||
static SANE_Status
|
||||
gl646_update_hardware_sensors (Genesys_Scanner * session)
|
||||
|
@ -4576,109 +4576,90 @@ gl646_update_hardware_sensors (Genesys_Scanner * session)
|
|||
}
|
||||
DBG(DBG_io, "%s: GPIO=0x%02x\n", __func__, value);
|
||||
|
||||
/* scan button */
|
||||
if ((dev->model->buttons & GENESYS_HAS_SCAN_SW)
|
||||
&& session->val[OPT_SCAN_SW].b == session->last_val[OPT_SCAN_SW].b)
|
||||
{
|
||||
switch (dev->model->gpo_type)
|
||||
{
|
||||
// scan button
|
||||
if (dev->model->buttons & GENESYS_HAS_SCAN_SW) {
|
||||
switch (dev->model->gpo_type) {
|
||||
case GPO_XP200:
|
||||
session->val[OPT_SCAN_SW].b = ((value & 0x02) != 0);
|
||||
break;
|
||||
session->buttons[BUTTON_SCAN_SW].write((value & 0x02) != 0);
|
||||
break;
|
||||
case GPO_5345:
|
||||
session->val[OPT_SCAN_SW].b = (value == 0x16);
|
||||
break;
|
||||
session->buttons[BUTTON_SCAN_SW].write(value == 0x16);
|
||||
break;
|
||||
case GPO_HP2300:
|
||||
session->val[OPT_SCAN_SW].b = (value == 0x6c);
|
||||
break;
|
||||
session->buttons[BUTTON_SCAN_SW].write(value == 0x6c);
|
||||
break;
|
||||
case GPO_HP3670:
|
||||
case GPO_HP2400:
|
||||
session->val[OPT_SCAN_SW].b = ((value & 0x20) == 0);
|
||||
break;
|
||||
session->buttons[BUTTON_SCAN_SW].write((value & 0x20) == 0);
|
||||
break;
|
||||
default:
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/* email button */
|
||||
if ((dev->model->buttons & GENESYS_HAS_EMAIL_SW)
|
||||
&& session->val[OPT_EMAIL_SW].b == session->last_val[OPT_EMAIL_SW].b)
|
||||
{
|
||||
switch (dev->model->gpo_type)
|
||||
{
|
||||
// email button
|
||||
if (dev->model->buttons & GENESYS_HAS_EMAIL_SW) {
|
||||
switch (dev->model->gpo_type) {
|
||||
case GPO_5345:
|
||||
session->val[OPT_EMAIL_SW].b = (value == 0x12);
|
||||
break;
|
||||
session->buttons[BUTTON_EMAIL_SW].write(value == 0x12);
|
||||
break;
|
||||
case GPO_HP3670:
|
||||
case GPO_HP2400:
|
||||
session->val[OPT_EMAIL_SW].b = ((value & 0x08) == 0);
|
||||
break;
|
||||
session->buttons[BUTTON_EMAIL_SW].write((value & 0x08) == 0);
|
||||
break;
|
||||
default:
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/* copy button */
|
||||
if ((dev->model->buttons & GENESYS_HAS_COPY_SW)
|
||||
&& session->val[OPT_COPY_SW].b == session->last_val[OPT_COPY_SW].b)
|
||||
{
|
||||
switch (dev->model->gpo_type)
|
||||
{
|
||||
// copy button
|
||||
if (dev->model->buttons & GENESYS_HAS_COPY_SW) {
|
||||
switch (dev->model->gpo_type) {
|
||||
case GPO_5345:
|
||||
session->val[OPT_COPY_SW].b = (value == 0x11);
|
||||
break;
|
||||
session->buttons[BUTTON_COPY_SW].write(value == 0x11);
|
||||
break;
|
||||
case GPO_HP2300:
|
||||
session->val[OPT_COPY_SW].b = (value == 0x5c);
|
||||
break;
|
||||
session->buttons[BUTTON_COPY_SW].write(value == 0x5c);
|
||||
break;
|
||||
case GPO_HP3670:
|
||||
case GPO_HP2400:
|
||||
session->val[OPT_COPY_SW].b = ((value & 0x10) == 0);
|
||||
break;
|
||||
session->buttons[BUTTON_COPY_SW].write((value & 0x10) == 0);
|
||||
break;
|
||||
default:
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/* power button */
|
||||
if ((dev->model->buttons & GENESYS_HAS_POWER_SW)
|
||||
&& session->val[OPT_POWER_SW].b == session->last_val[OPT_POWER_SW].b)
|
||||
{
|
||||
switch (dev->model->gpo_type)
|
||||
{
|
||||
// power button
|
||||
if (dev->model->buttons & GENESYS_HAS_POWER_SW) {
|
||||
switch (dev->model->gpo_type) {
|
||||
case GPO_5345:
|
||||
session->val[OPT_POWER_SW].b = (value == 0x14);
|
||||
break;
|
||||
session->buttons[BUTTON_POWER_SW].write(value == 0x14);
|
||||
break;
|
||||
default:
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/* ocr button */
|
||||
if ((dev->model->buttons & GENESYS_HAS_OCR_SW)
|
||||
&& session->val[OPT_OCR_SW].b == session->last_val[OPT_OCR_SW].b)
|
||||
{
|
||||
switch (dev->model->gpo_type)
|
||||
{
|
||||
// ocr button
|
||||
if (dev->model->buttons & GENESYS_HAS_OCR_SW) {
|
||||
switch (dev->model->gpo_type) {
|
||||
case GPO_5345:
|
||||
session->val[OPT_OCR_SW].b = (value == 0x13);
|
||||
break;
|
||||
session->buttons[BUTTON_OCR_SW].write(value == 0x13);
|
||||
break;
|
||||
default:
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/* document detection */
|
||||
if ((dev->model->buttons & GENESYS_HAS_PAGE_LOADED_SW)
|
||||
&& session->val[OPT_PAGE_LOADED_SW].b ==
|
||||
session->last_val[OPT_PAGE_LOADED_SW].b)
|
||||
{
|
||||
switch (dev->model->gpo_type)
|
||||
{
|
||||
// document detection
|
||||
if (dev->model->buttons & GENESYS_HAS_PAGE_LOADED_SW) {
|
||||
switch (dev->model->gpo_type) {
|
||||
case GPO_XP200:
|
||||
session->val[OPT_PAGE_LOADED_SW].b = ((value & 0x04) != 0);
|
||||
break;
|
||||
session->buttons[BUTTON_PAGE_LOADED_SW].write((value & 0x04) != 0);
|
||||
break;
|
||||
default:
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
return SANE_STATUS_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5201,28 +5201,21 @@ gl841_update_hardware_sensors (Genesys_Scanner * s)
|
|||
if (s->dev->model->gpo_type == GPO_CANONLIDE35
|
||||
|| s->dev->model->gpo_type == GPO_CANONLIDE80)
|
||||
{
|
||||
RIE(sanei_genesys_read_register(s->dev, REG6D, &val));
|
||||
|
||||
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
|
||||
s->val[OPT_SCAN_SW].b = (val & 0x01) == 0;
|
||||
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
|
||||
s->val[OPT_FILE_SW].b = (val & 0x02) == 0;
|
||||
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
|
||||
s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0;
|
||||
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
|
||||
s->val[OPT_COPY_SW].b = (val & 0x08) == 0;
|
||||
RIE(sanei_genesys_read_register(s->dev, REG6D, &val));
|
||||
s->buttons[BUTTON_SCAN_SW].write((val & 0x01) == 0);
|
||||
s->buttons[BUTTON_FILE_SW].write((val & 0x02) == 0);
|
||||
s->buttons[BUTTON_EMAIL_SW].write((val & 0x04) == 0);
|
||||
s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0);
|
||||
}
|
||||
|
||||
if (s->dev->model->gpo_type == GPO_XP300 ||
|
||||
s->dev->model->gpo_type == GPO_DP665 ||
|
||||
s->dev->model->gpo_type == GPO_DP685)
|
||||
{
|
||||
RIE(sanei_genesys_read_register(s->dev, REG6D, &val));
|
||||
RIE(sanei_genesys_read_register(s->dev, REG6D, &val));
|
||||
|
||||
if (s->val[OPT_PAGE_LOADED_SW].b == s->last_val[OPT_PAGE_LOADED_SW].b)
|
||||
s->val[OPT_PAGE_LOADED_SW].b = (val & 0x01) == 0;
|
||||
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
|
||||
s->val[OPT_SCAN_SW].b = (val & 0x02) == 0;
|
||||
s->buttons[BUTTON_PAGE_LOADED_SW].write((val & 0x01) == 0);
|
||||
s->buttons[BUTTON_SCAN_SW].write((val & 0x02) == 0);
|
||||
}
|
||||
|
||||
return status;
|
||||
|
|
|
@ -4011,24 +4011,19 @@ gl843_update_hardware_sensors (Genesys_Scanner * s)
|
|||
|
||||
switch (s->dev->model->gpo_type)
|
||||
{
|
||||
case GPO_KVSS080:
|
||||
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
|
||||
s->val[OPT_SCAN_SW].b = (val & 0x04) == 0;
|
||||
break;
|
||||
case GPO_G4050:
|
||||
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
|
||||
s->val[OPT_SCAN_SW].b = (val & 0x01) == 0;
|
||||
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
|
||||
s->val[OPT_FILE_SW].b = (val & 0x02) == 0;
|
||||
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
|
||||
s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0;
|
||||
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
|
||||
s->val[OPT_COPY_SW].b = (val & 0x08) == 0;
|
||||
break;
|
||||
case GPO_CS4400F:
|
||||
case GPO_CS8400F:
|
||||
default:
|
||||
break;
|
||||
case GPO_KVSS080:
|
||||
s->buttons[BUTTON_SCAN_SW].write((val & 0x04) == 0);
|
||||
break;
|
||||
case GPO_G4050:
|
||||
s->buttons[BUTTON_SCAN_SW].write((val & 0x01) == 0);
|
||||
s->buttons[BUTTON_FILE_SW].write((val & 0x02) == 0);
|
||||
s->buttons[BUTTON_EMAIL_SW].write((val & 0x04) == 0);
|
||||
s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0);
|
||||
break;
|
||||
case GPO_CS4400F:
|
||||
case GPO_CS8400F:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return status;
|
||||
|
|
|
@ -2726,14 +2726,10 @@ gl846_update_hardware_sensors (Genesys_Scanner * s)
|
|||
}
|
||||
RIE (sanei_genesys_read_register (s->dev, REG6D, &val));
|
||||
|
||||
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
|
||||
s->val[OPT_SCAN_SW].b = (val & scan) == 0;
|
||||
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
|
||||
s->val[OPT_FILE_SW].b = (val & file) == 0;
|
||||
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
|
||||
s->val[OPT_EMAIL_SW].b = (val & email) == 0;
|
||||
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
|
||||
s->val[OPT_COPY_SW].b = (val & copy) == 0;
|
||||
s->buttons[BUTTON_SCAN_SW].write((val & scan) == 0);
|
||||
s->buttons[BUTTON_FILE_SW].write((val & file) == 0);
|
||||
s->buttons[BUTTON_EMAIL_SW].write((val & email) == 0);
|
||||
s->buttons[BUTTON_COPY_SW].write((val & copy) == 0);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -2832,14 +2832,10 @@ gl847_update_hardware_sensors (Genesys_Scanner * s)
|
|||
}
|
||||
RIE (sanei_genesys_read_register (s->dev, REG6D, &val));
|
||||
|
||||
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
|
||||
s->val[OPT_SCAN_SW].b = (val & scan) == 0;
|
||||
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
|
||||
s->val[OPT_FILE_SW].b = (val & file) == 0;
|
||||
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
|
||||
s->val[OPT_EMAIL_SW].b = (val & email) == 0;
|
||||
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
|
||||
s->val[OPT_COPY_SW].b = (val & copy) == 0;
|
||||
s->buttons[BUTTON_SCAN_SW].write((val & scan) == 0);
|
||||
s->buttons[BUTTON_FILE_SW].write((val & file) == 0);
|
||||
s->buttons[BUTTON_EMAIL_SW].write((val & email) == 0);
|
||||
s->buttons[BUTTON_COPY_SW].write((val & copy) == 0);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -983,13 +983,7 @@ typedef struct Genesys_Command_Set
|
|||
SANE_Status (*bulk_read_data) (Genesys_Device * dev, uint8_t addr,
|
||||
uint8_t * data, size_t len);
|
||||
|
||||
/* Updates hardware sensor information in Genesys_Scanner.val[].
|
||||
If possible, just get information for given option.
|
||||
The sensor state in Genesys_Scanner.val[] should be merged with the
|
||||
new sensor state, using the information that was last read by the frontend
|
||||
in Genesys_Scanner.last_val[], in such a way that a button up/down
|
||||
relative to Genesys_Scanner.last_val[] is not lost.
|
||||
*/
|
||||
// Updates hardware sensor information in Genesys_Scanner.val[].
|
||||
SANE_Status (*update_hardware_sensors) (struct Genesys_Scanner * s);
|
||||
|
||||
/* functions for sheetfed scanners */
|
||||
|
|
Ładowanie…
Reference in New Issue