Hello! I'm added button support for gt68xx backend.
Sergey.
diff --git a/backend/genesys.c b/backend/genesys.c
index 7779fce9..b553ab0d 100644
--- a/backend/genesys.c
+++ b/backend/genesys.c
@@ -6088,8 +6088,9 @@ init_options (Genesys_Scanner * s)
s->last_val[OPT_NEED_CALIBRATION_SW].b = 0;
/* button group */
+ s->opt[OPT_BUTTON_GROUP].name = "Buttons";
s->opt[OPT_BUTTON_GROUP].title = SANE_I18N ("Buttons");
- s->opt[OPT_BUTTON_GROUP].desc = "";
+ s->opt[OPT_BUTTON_GROUP].desc = SANE_I18N ("Buttons");
s->opt[OPT_BUTTON_GROUP].type = SANE_TYPE_GROUP;
s->opt[OPT_BUTTON_GROUP].cap = SANE_CAP_ADVANCED;
s->opt[OPT_BUTTON_GROUP].size = 0;
diff --git a/backend/gt68xx.c b/backend/gt68xx.c
index fb3bfb42..fc8cd172 100644
--- a/backend/gt68xx.c
+++ b/backend/gt68xx.c
@@ -114,6 +114,7 @@
#include "gt68xx.h"
#include "gt68xx_high.c"
+#include "gt68xx_low.h"
#include "gt68xx_devices.c"
static SANE_Int num_devices = 0;
@@ -748,6 +749,8 @@ init_options (GT68xx_Scanner * s)
s->opt[OPT_SENSOR_GROUP].title = SANE_TITLE_SENSORS;
s->opt[OPT_SENSOR_GROUP].desc = SANE_DESC_SENSORS;
s->opt[OPT_SENSOR_GROUP].type = SANE_TYPE_GROUP;
+ s->opt[OPT_SENSOR_GROUP].cap = SANE_CAP_ADVANCED;
+ s->opt[OPT_SENSOR_GROUP].size = 0;
s->opt[OPT_SENSOR_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
/* calibration needed */
@@ -762,6 +765,73 @@ init_options (GT68xx_Scanner * s)
s->opt[OPT_NEED_CALIBRATION_SW].cap = SANE_CAP_INACTIVE;
s->val[OPT_NEED_CALIBRATION_SW].b = 0;
+ /* scanner buttons */
+ /* scan button */
+ s->opt[OPT_SCAN_SW].name = SANE_NAME_SCAN;
+ s->opt[OPT_SCAN_SW].title = SANE_TITLE_SCAN;
+ s->opt[OPT_SCAN_SW].desc = SANE_DESC_SCAN;
+ s->opt[OPT_SCAN_SW].type = SANE_TYPE_BOOL;
+ s->opt[OPT_SCAN_SW].unit = SANE_UNIT_NONE;
+ if (s->dev->model->buttons & GT68XX_HAS_SCAN_SW)
+ s->opt[OPT_SCAN_SW].cap = 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;
+
+ /* copy button */
+ s->opt[OPT_COPY_SW].name = SANE_NAME_COPY;
+ s->opt[OPT_COPY_SW].title = SANE_TITLE_COPY;
+ s->opt[OPT_COPY_SW].desc = SANE_DESC_COPY;
+ s->opt[OPT_COPY_SW].type = SANE_TYPE_BOOL;
+ s->opt[OPT_COPY_SW].unit = SANE_UNIT_NONE;
+ if (s->dev->model->buttons & GT68XX_HAS_COPY_SW)
+ s->opt[OPT_COPY_SW].cap =
+ 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;
+
+ /* fax button */
+ s->opt[OPT_FAX_SW].name = SANE_NAME_FAX;
+ s->opt[OPT_FAX_SW].title = SANE_TITLE_FAX;
+ s->opt[OPT_FAX_SW].desc = SANE_DESC_FAX;
+ s->opt[OPT_FAX_SW].type = SANE_TYPE_BOOL;
+ s->opt[OPT_FAX_SW].unit = SANE_UNIT_NONE;
+ if (s->dev->model->buttons & GT68XX_HAS_FAX_SW)
+ s->opt[OPT_FAX_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
+ else
+ s->opt[OPT_FAX_SW].cap = SANE_CAP_INACTIVE;
+ s->val[OPT_FAX_SW].b = 0;
+ s->last_val[OPT_FAX_SW].b = 0;
+
+ /* email button */
+ s->opt[OPT_EMAIL_SW].name = SANE_NAME_EMAIL;
+ s->opt[OPT_EMAIL_SW].title = SANE_TITLE_EMAIL;
+ s->opt[OPT_EMAIL_SW].desc = SANE_DESC_EMAIL;
+ s->opt[OPT_EMAIL_SW].type = SANE_TYPE_BOOL;
+ s->opt[OPT_EMAIL_SW].unit = SANE_UNIT_NONE;
+ if (s->dev->model->buttons & GT68XX_HAS_EMAIL_SW)
+ s->opt[OPT_EMAIL_SW].cap = 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;
+
+ /* extra button */
+ s->opt[OPT_EXTRA_SW].name = "extra";
+ s->opt[OPT_EXTRA_SW].title = "Extra button";
+ s->opt[OPT_EXTRA_SW].desc = "Extra button";
+ s->opt[OPT_EXTRA_SW].type = SANE_TYPE_BOOL;
+ s->opt[OPT_EXTRA_SW].unit = SANE_UNIT_NONE;
+ if (s->dev->model->buttons & GT68XX_HAS_EXTRA_SW)
+ s->opt[OPT_EXTRA_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
+ 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;
+
/* document present sensor */
s->opt[OPT_PAGE_LOADED_SW].name = SANE_NAME_PAGE_LOADED;
s->opt[OPT_PAGE_LOADED_SW].title = SANE_TITLE_PAGE_LOADED;
@@ -776,10 +846,11 @@ init_options (GT68xx_Scanner * s)
s->val[OPT_PAGE_LOADED_SW].b = 0;
/* button group */
- s->opt[OPT_BUTTON_GROUP].name = "Buttons";
- s->opt[OPT_BUTTON_GROUP].title = SANE_I18N ("Buttons");
- s->opt[OPT_BUTTON_GROUP].desc = SANE_I18N ("Buttons");
+ s->opt[OPT_BUTTON_GROUP].title = "Buttons";
+ s->opt[OPT_BUTTON_GROUP].desc = "";
s->opt[OPT_BUTTON_GROUP].type = SANE_TYPE_GROUP;
+ s->opt[OPT_BUTTON_GROUP].cap = SANE_CAP_ADVANCED;
+ s->opt[OPT_BUTTON_GROUP].size = 0;
s->opt[OPT_BUTTON_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
/* calibrate button */
@@ -1715,6 +1786,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
case OPT_PAGE_LOADED_SW:
s->dev->model->command_set->document_present (s->dev, val);
break;
+ /* sensors */
+ case OPT_SCAN_SW:
+ case OPT_COPY_SW:
+ case OPT_FAX_SW:
+ case OPT_EMAIL_SW:
+ case OPT_EXTRA_SW:
+ gt68xx_update_hardware_sensors (s);
+ *(SANE_Bool *) val = s->val[option].b;
+ s->last_val[option].b = *(SANE_Bool *) val;
+ break;
default:
DBG (2, "sane_control_option: can't get unknown option %d\n",
option);
diff --git a/backend/gt68xx_devices.c b/backend/gt68xx_devices.c
index 2df24f6e..f9577e61 100644
--- a/backend/gt68xx_devices.c
+++ b/backend/gt68xx_devices.c
@@ -87,7 +87,8 @@ static GT68xx_Command_Set mustek_gt6816_command_set = {
gt68xx_generic_set_exposure_time,
gt68xx_generic_get_id,
/* gt68xx_generic_move_paper */ NULL,
- /* gt6816_document_present */ NULL
+ /* gt6816_document_present */ NULL,
+ gt6816_get_buttons,
};
static GT68xx_Command_Set mustek_gt6816_sheetfed_command_set = {
@@ -128,7 +129,8 @@ static GT68xx_Command_Set mustek_gt6816_sheetfed_command_set = {
gt68xx_generic_set_exposure_time,
gt68xx_generic_get_id,
gt68xx_generic_move_paper,
- gt6816_document_present
+ gt6816_document_present,
+ NULL, /* get_buttons */
};
static GT68xx_Command_Set mustek_gt6801_command_set = {
@@ -170,7 +172,8 @@ static GT68xx_Command_Set mustek_gt6801_command_set = {
gt68xx_generic_set_exposure_time,
gt68xx_generic_get_id,
/* gt68xx_generic_move_paper */ NULL,
- /* gt6816_document_present */ NULL
+ /* gt6816_document_present */ NULL,
+ /* gt6816_update_hardware_sensors */ NULL
};
static GT68xx_Command_Set plustek_gt6801_command_set = {
@@ -211,7 +214,8 @@ static GT68xx_Command_Set plustek_gt6801_command_set = {
/* set_exposure_time */ NULL,
gt68xx_generic_get_id,
/* gt68xx_generic_move_paper */ NULL,
- /* gt6816_document_present */ NULL
+ /* gt6816_document_present */ NULL,
+ /* gt6816_update_hardware_sensors */ NULL
};
static GT68xx_Model unknown_model = {
@@ -259,7 +263,8 @@ static GT68xx_Model unknown_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_STOP /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_NO_STOP, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Standard values for unknown scanner */
};
@@ -307,7 +312,8 @@ static GT68xx_Model mustek_2400ta_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_SCAN_FROM_HOME /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_SCAN_FROM_HOME, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* flatbed values tested */
};
@@ -356,7 +362,8 @@ static GT68xx_Model mustek_2400taplus_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_USE_OPTICAL_X | GT68XX_FLAG_SCAN_FROM_HOME /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_USE_OPTICAL_X | GT68XX_FLAG_SCAN_FROM_HOME, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Setup and tested */
};
@@ -405,8 +412,9 @@ static GT68xx_Model mustek_2448taplus_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_STOP /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_NO_STOP, /* Which flags are needed for this scanner? */
/* Based on data from Jakub DvoÅák <[email protected]>. */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
static GT68xx_Model mustek_1200ta_model = {
@@ -454,7 +462,8 @@ static GT68xx_Model mustek_1200ta_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- 0 /* Which flags are needed for this scanner? */
+ 0, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Setup for 1200 TA */
};
@@ -503,7 +512,8 @@ static GT68xx_Model mustek_1200cuplus_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_STOP /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_NO_STOP, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_SCAN_SW | GT68XX_HAS_COPY_SW | GT68XX_HAS_FAX_SW | GT68XX_HAS_EMAIL_SW | GT68XX_HAS_EXTRA_SW /* 5 buttons */
/* Tested by Hamersky Robert r.hamersky at utanet.at */
};
@@ -552,7 +562,8 @@ static GT68xx_Model mustek_1200cuplus2_model = {
SANE_FIX (1.5), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_STOP /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_NO_STOP, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_SCAN_SW | GT68XX_HAS_COPY_SW | GT68XX_HAS_FAX_SW | GT68XX_HAS_EMAIL_SW | GT68XX_HAS_EXTRA_SW /* 5 buttons */
/* Tested by hmg */
};
@@ -601,7 +612,8 @@ static GT68xx_Model mustek_2400cuplus_model = {
SANE_FIX (1.5), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_STOP /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_NO_STOP, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Setup and tested */
};
@@ -653,7 +665,8 @@ static GT68xx_Model mustek_1200cu_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- 0 /* Which flags are needed for this scanner? */
+ 0, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Setup and tested */
};
@@ -702,8 +715,9 @@ static GT68xx_Model mustek_scanexpress1200ubplus_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- 0 /* Which flags are needed for this scanner? */
+ 0, /* Which flags are needed for this scanner? */
/* Setup and tested */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
static GT68xx_Model mustek_scanexpress1248ub_model = {
@@ -751,7 +765,8 @@ static GT68xx_Model mustek_scanexpress1248ub_model = {
SANE_FIX (1.5), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_STOP /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_NO_STOP, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* tested by hmg */
};
@@ -801,7 +816,8 @@ static GT68xx_Model artec_ultima2000_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_MIRROR_X | GT68XX_FLAG_MOTOR_HOME | GT68XX_FLAG_OFFSET_INV /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_MIRROR_X | GT68XX_FLAG_MOTOR_HOME | GT68XX_FLAG_OFFSET_INV, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Setup for Cytron TCM MD 9385 */
};
@@ -850,7 +866,8 @@ static GT68xx_Model plustek_opticslim500plus_model = {
SANE_FIX (1.5), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_CALIBRATE /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_NO_CALIBRATE, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
static GT68xx_Model mustek_2400cu_model = {
@@ -898,7 +915,8 @@ static GT68xx_Model mustek_2400cu_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- 0 /* Which flags are needed for this scanner? */
+ 0, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* basically tested, details may need tweaking */
};
@@ -947,7 +965,8 @@ static GT68xx_Model mustek_scanexpress2400usb_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_UNTESTED | GT68XX_FLAG_SE_2400 /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_UNTESTED | GT68XX_FLAG_SE_2400, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* only partly tested, from "Fan Dan" <[email protected]> */
};
@@ -996,7 +1015,8 @@ static GT68xx_Model mustek_a3usb_model = {
SANE_FIX (1.5), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_CIS_LAMP /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_CIS_LAMP, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Tested by hmg. This scanner is a bit strange as it uses a CIS sensor but
it also has a lamp. So the lamp needs to be heated but CIS mode must be
used for scanning and calibration. There is no TA for that scanner */
@@ -1047,7 +1067,8 @@ static GT68xx_Model lexmark_x73_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- 0 /* Which flags are needed for this scanner? */
+ 0, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* When using automatic gain pictures are too dark. Only some ad hoc tests for
lexmark x70 were done so far. WARNING: Don't use the Full scan option
with the above settings, otherwise the sensor may bump at the end of
@@ -1099,7 +1120,8 @@ static GT68xx_Model plustek_op1248u_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* tested */
};
@@ -1149,8 +1171,9 @@ static GT68xx_Model plustek_u16b_model = {
SANE_FALSE, /* Is this a CIS scanner? */
GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_NO_POWER_STATUS |
- GT68XX_FLAG_NO_LINEMODE
+ GT68XX_FLAG_NO_LINEMODE,
/* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Tested with a U16B by Henning Meier-Geinitz. 600 dpi is maximum
vertically. Line mode does not work. That's a hardware/firmware
issue. */
@@ -1201,7 +1224,8 @@ static GT68xx_Model plustek_ops12_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Seems to work */
};
@@ -1250,8 +1274,9 @@ static GT68xx_Model plustek_ops24_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE,
/* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Works (tested by Filip Kaluza). Based on genius Colorpage Vivid 1200 X. */
};
@@ -1302,8 +1327,9 @@ static GT68xx_Model genius_vivid4_model = {
SANE_FALSE, /* Is this a CIS scanner? */
GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_NO_POWER_STATUS |
- GT68XX_FLAG_NO_LINEMODE
+ GT68XX_FLAG_NO_LINEMODE,
/* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* This scanner seems to be very similar to Plustelk U16B and is reported to work. */
};
@@ -1353,7 +1379,8 @@ static GT68xx_Model genius_vivid3x_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Tested to some degree, based on the Plustek OpticPro 1248U */
};
@@ -1402,7 +1429,8 @@ static GT68xx_Model genius_vivid4x_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Is reported to work, copied from 3x, some values from Claudio Filho <[email protected]> */
};
@@ -1451,7 +1479,8 @@ static GT68xx_Model genius_vivid4xe_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* tested a bit */
};
@@ -1500,7 +1529,8 @@ static GT68xx_Model genius_vivid3xe_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* mostly untested, based on the Genius Vivid3x */
};
@@ -1549,8 +1579,9 @@ static GT68xx_Model genius_vivid1200x_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE,
/* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Tested. */
};
@@ -1600,7 +1631,8 @@ static GT68xx_Model genius_vivid1200xe_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_FALSE, /* Is this a CIS scanner? */
- GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE /* Which flags are needed for this scanner? */
+ GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_ALWAYS_LINEMODE, /* Which flags are needed for this scanner? */
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* Tested by hmg */
};
@@ -1650,7 +1682,8 @@ static GT68xx_Model iriscan_express_2_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE
+ GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE,
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
@@ -1699,7 +1732,8 @@ static GT68xx_Model plustek_opticslim_m12_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE
+ GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE,
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
static GT68xx_Model genius_sf600_model = {
@@ -1747,7 +1781,8 @@ static GT68xx_Model genius_sf600_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_UNTESTED | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE | GT68XX_FLAG_NO_STOP
+ GT68XX_FLAG_NO_POWER_STATUS | GT68XX_FLAG_UNTESTED | GT68XX_FLAG_SHEET_FED | GT68XX_FLAG_OFFSET_INV | GT68XX_FLAG_HAS_CALIBRATE | GT68XX_FLAG_NO_STOP,
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
/* Untested but should work according to Ryan Reading <[email protected]>. Based on Plustek M12 */
@@ -1797,7 +1832,8 @@ static GT68xx_Model plustek_opticslim1200_model = {
SANE_FIX (2.0), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- 0
+ 0,
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
static GT68xx_Model plustek_opticslim2400_model = {
@@ -1845,7 +1881,8 @@ static GT68xx_Model plustek_opticslim2400_model = {
SANE_FIX (1.5), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- 0
+ 0,
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
/* By Detlef Gausepohl <[email protected]>. Fixed and tested by hmg. */
};
@@ -1894,7 +1931,8 @@ static GT68xx_Model visioneer_onetouch_7300_model = {
SANE_FIX (1.5), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- 0
+ 0,
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
/* Tested by Jason Novek. Based on Plustek OpticSlim 2400. */
@@ -1947,7 +1985,8 @@ static GT68xx_Model genius_colorpageslim_1200_model = {
SANE_FIX (1.5), /* Default gamma value */
SANE_TRUE, /* Is this a CIS scanner? */
- GT68XX_FLAG_ALWAYS_LINEMODE | GT68XX_FLAG_SE_2400
+ GT68XX_FLAG_ALWAYS_LINEMODE | GT68XX_FLAG_SE_2400,
+ GT68XX_HAS_NO_BUTTONS /* no buttons by default */
};
/* tested by Aleksey Nedorezov <aleksey at nedorezov.com> */
diff --git a/backend/gt68xx_gt6816.c b/backend/gt68xx_gt6816.c
index a7880bdb..9bf796b7 100644
--- a/backend/gt68xx_gt6816.c
+++ b/backend/gt68xx_gt6816.c
@@ -88,6 +88,7 @@ gt6816_download_firmware (GT68xx_Device * dev,
SANE_Byte *block;
SANE_Word addr, bytes_left;
GT68xx_Packet boot_req;
+ GT68xx_Packet pool_start;
SANE_Word block_size = MAX_DOWNLOAD_BLOCK_SIZE;
CHECK_DEV_ACTIVE (dev, "gt6816_download_firmware");
@@ -119,7 +120,9 @@ gt6816_download_firmware (GT68xx_Device * dev,
boot_req[2] = LOBYTE (addr);
boot_req[3] = HIBYTE (addr);
RIE (gt68xx_device_req (dev, boot_req, boot_req));
-
+ pool_start[0] = 0x71;
+ pool_start[1] = 0x01;
+ RIE (gt68xx_device_req (dev, pool_start, pool_start));
return SANE_STATUS_GOOD;
}
@@ -247,7 +250,7 @@ gt6816_document_present (GT68xx_Device * dev, SANE_Bool * present)
req[0] = 0x59;
req[1] = 0x01;
- RIE (gt68xx_device_req (dev, req, req));
+ RIE (gt68xx_device_small_req (dev, req, req));
if (req[0] == 0x00 && req[1] == 0x59)
{
@@ -261,3 +264,23 @@ gt6816_document_present (GT68xx_Device * dev, SANE_Bool * present)
return SANE_STATUS_GOOD;
}
+
+SANE_Status
+gt6816_get_buttons (GT68xx_Device * dev, SANE_Word * b_state)
+{
+ SANE_Status status;
+ GT68xx_Packet req;
+
+ memset (req, 0, sizeof (req));
+ req[0] = 0x74;
+ req[1] = 0x01;
+
+ RIE (gt68xx_device_small_req (dev, req, req));
+
+ if (req[0] == 0x00 && req[1] == 0x74)
+ *b_state = req[2];
+ else
+ return SANE_STATUS_IO_ERROR;
+
+ return SANE_STATUS_GOOD;
+}
diff --git a/backend/gt68xx_gt6816.h b/backend/gt68xx_gt6816.h
index f9418113..b89fa46a 100644
--- a/backend/gt68xx_gt6816.h
+++ b/backend/gt68xx_gt6816.h
@@ -68,5 +68,6 @@ static SANE_Status gt6816_carriage_home (GT68xx_Device * dev);
static SANE_Status gt6816_stop_scan (GT68xx_Device * dev);
static SANE_Status gt6816_document_present (GT68xx_Device * dev, SANE_Bool * present);
+static SANE_Status gt6816_get_buttons (GT68xx_Device * dev, SANE_Word * b_state);
#endif /* not GT68XX_GT6816_H */
diff --git a/backend/gt68xx_high.c b/backend/gt68xx_high.c
index 782b4f36..af5c679f 100644
--- a/backend/gt68xx_high.c
+++ b/backend/gt68xx_high.c
@@ -463,6 +463,35 @@ gt68xx_scanner_wait_for_positioning (GT68xx_Scanner * scanner)
return SANE_STATUS_GOOD;
}
+static SANE_Status
+gt68xx_update_hardware_sensors (GT68xx_Scanner * s)
+{
+ /* do what is needed to get a new set of events, but try to not lose
+ any of them.
+ */
+ SANE_Status status = SANE_STATUS_GOOD;
+ SANE_Word val;
+ uint8_t scan, fax, email, copy, extra;
+ scan=0x10;
+ email=0x08;
+ copy=0x04;
+ extra=0x01;
+ fax=0x02;
+
+ status = gt68xx_device_get_buttons(s->dev, &val);
+ if (status == SANE_STATUS_GOOD)
+ 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_FAX_SW].b == s->last_val[OPT_FAX_SW].b)
+ s->val[OPT_FAX_SW].b = (val & fax) == 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;
+ if (s->val[OPT_EXTRA_SW].b == s->last_val[OPT_EXTRA_SW].b)
+ s->val[OPT_EXTRA_SW].b = (val & extra) == 0;
+ return status;
+}
static SANE_Status
gt68xx_scanner_internal_start_scan (GT68xx_Scanner * scanner)
diff --git a/backend/gt68xx_high.h b/backend/gt68xx_high.h
index da4ab6a6..7fb453f4 100644
--- a/backend/gt68xx_high.h
+++ b/backend/gt68xx_high.h
@@ -231,6 +231,11 @@ enum GT68xx_Option
OPT_SENSOR_GROUP,
OPT_NEED_CALIBRATION_SW, /* signals calibration is needed */
+ OPT_SCAN_SW, /* csan button */
+ OPT_EMAIL_SW, /* email button */
+ OPT_COPY_SW, /* copy button */
+ OPT_FAX_SW, /* fax button */
+ OPT_EXTRA_SW, /* extra button */
OPT_PAGE_LOADED_SW, /* signals that a document is inserted in feeder */
OPT_BUTTON_GROUP,
@@ -260,6 +265,7 @@ struct GT68xx_Scanner
SANE_Bool scanning; /**< We are currently scanning */
SANE_Option_Descriptor opt[NUM_OPTIONS]; /**< Option descriptors */
Option_Value val[NUM_OPTIONS]; /**< Option values */
+ Option_Value last_val[NUM_OPTIONS]; /**< Option values as read by the frontend. used for sensors. */
SANE_Parameters params; /**< SANE Parameters */
SANE_Int line; /**< Current line */
SANE_Int total_bytes; /**< Bytes already transmitted */
@@ -369,6 +375,8 @@ static SANE_Status gt68xx_write_calibration (GT68xx_Scanner * scanner);
*/
static SANE_Status gt68xx_read_calibration (GT68xx_Scanner * scanner);
+static SANE_Status gt68xx_update_hardware_sensors (GT68xx_Scanner * s);
+
#endif /* not GT68XX_HIGH_H */
/* vim: set sw=2 cino=>2se-1sn-1s{s^-1st0(0u0 smarttab expandtab: */
diff --git a/backend/gt68xx_low.c b/backend/gt68xx_low.c
index 3ea45900..6ff0cd4a 100644
--- a/backend/gt68xx_low.c
+++ b/backend/gt68xx_low.c
@@ -1023,6 +1023,16 @@ gt68xx_device_get_id (GT68xx_Device * dev)
return SANE_STATUS_UNSUPPORTED;
}
+SANE_Status
+gt68xx_device_get_buttons (GT68xx_Device * dev, SANE_Word * b_state)
+{
+ CHECK_DEV_ACTIVE (dev, "gt68xx_device_get_buttons");
+ if (dev->model->command_set->get_buttons)
+ return (*dev->model->command_set->get_buttons) (dev, b_state);
+ else
+ return SANE_STATUS_UNSUPPORTED;
+}
+
static void
gt68xx_device_fix_descriptor (GT68xx_Device * dev)
{
diff --git a/backend/gt68xx_low.h b/backend/gt68xx_low.h
index 89bd3657..3b5c0d49 100644
--- a/backend/gt68xx_low.h
+++ b/backend/gt68xx_low.h
@@ -110,11 +110,15 @@
#define GT68XX_FLAG_USE_OPTICAL_X (1 << 10) /* Use optical xdpi for 50 dpi and below */
#define GT68XX_FLAG_ALWAYS_LINEMODE (1 << 11) /* Linemode must be used for any resolution */
#define GT68XX_FLAG_SHEET_FED (1 << 12) /* we have a sheet fed scanner */
-#define GT68XX_FLAG_HAS_CALIBRATE (1 << 13) /* for sheet fed scanners that be calibrated with
- an calibration sheet */
+#define GT68XX_FLAG_HAS_CALIBRATE (1 << 13) /* for sheet fed scanners that be calibrated with an calibration sheet */
#define GT68XX_FLAG_NO_CALIBRATE (1 << 14) /* don't calibrate, because calibration is broken */
-
-
+#define GT68XX_HAS_NO_BUTTONS 0 /**< scanner has no supported button */
+#define GT68XX_HAS_SCAN_SW (1 << 0) /**< scanner has SCAN button */
+#define GT68XX_HAS_COPY_SW (1 << 1) /**< scanner has COPY button */
+#define GT68XX_HAS_FAX_SW (1 << 2) /**< scanner has FAX button */
+#define GT68XX_HAS_EMAIL_SW (1 << 3) /**< scanner has EMAIL button */
+#define GT68XX_HAS_PAGE_LOADED_SW (1 << 4) /**< scanner has paper in detection */
+#define GT68XX_HAS_EXTRA_SW (1 << 5) /**< scanner has extra function button */
/* Forward typedefs */
typedef struct GT68xx_USB_Device_Entry GT68xx_USB_Device_Entry;
@@ -408,6 +412,7 @@ struct GT68xx_Command_Set
SANE_Status (*document_present) (GT68xx_Device * dev,
SANE_Bool *present);
/*@} */
+ SANE_Status (*get_buttons) (GT68xx_Device * dev, SANE_Word * b_state);
};
#define MAX_RESOLUTIONS 12
@@ -489,6 +494,8 @@ struct GT68xx_Model
SANE_Bool is_cis; /* Is this a CIS or CCD scanner? */
SANE_Word flags; /* Which hacks are needed for this scanner? */
+
+ SANE_Word buttons; /* buttons flags */
/*@} */
};
signature.asc
Description: OpenPGP digital signature
-- sane-devel mailing list: [email protected] https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/sane-devel Unsubscribe: Send mail with subject "unsubscribe your_password" to [email protected]
