update to backend v1.0.35

merge-requests/1/head
m. allan noah 2006-07-05 22:46:42 +00:00
rodzic f9927937af
commit cdbe31d245
5 zmienionych plików z 303 dodań i 104 usunięć

Wyświetl plik

@ -1,3 +1,9 @@
2006-07-05 m. allan noah <anoah AT pfeiffer DOT edu>
* backend/fujitsu.[ch] backend/fujitsu-scsi.h: backend v1.0.35,
allow double feed detection, minor cleanups
* doc/descriptions/fujitsu.desc: version number update
2006-07-04 m. allan noah <anoah AT pfeiffer DOT edu>
* backend/fujitsu.[ch] backend/fujitsu-scsi.h:

Wyświetl plik

@ -479,15 +479,22 @@ static scsiblk mode_select_bgB = {
#define set_MSEL_bg_back(sb, val) setbitfield(sb + 6, 1, 4, val)
#define set_MSEL_bg_fb(sb, val) setbitfield(sb + 6, 1, 3, val)
/*
static unsigned char mode_select_dfeedC[] = {
static unsigned char mode_select_dfC[] = {
0x00, 0x00, 0x00, 0x00,
0x38, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static scsiblk mode_select_dfeedB = {
mode_select_dfeedC, sizeof (mode_select_dfeedC)
static scsiblk mode_select_dfB = {
mode_select_dfC, sizeof (mode_select_dfC)
};
*/
#define set_MSEL_df_enable(sb, val) setbitfield(sb + 6, 1, 7, val)
#define set_MSEL_df_continue(sb, val) setbitfield(sb + 6, 1, 6, val)
#define set_MSEL_df_thickness(sb, val) setbitfield(sb + 6, 1, 4, val)
#define set_MSEL_df_length(sb, val) setbitfield(sb + 6, 1, 3, val)
#define set_MSEL_df_diff(sb, val) setbitfield(sb + 6, 3, 0, val)
#define MSEL_df_diff_DEFAULT 0
#define MSEL_df_diff_10MM 1
#define MSEL_df_diff_15MM 2
#define MSEL_df_diff_20MM 3
static unsigned char mode_select_dropoutC[] = {
0x00, 0x00, 0x00, 0x00,

Wyświetl plik

@ -47,7 +47,7 @@
- fi-series (M. Allan Noah, Oliver Schirrmeister)
The source code is divided in sections which you can easily find by
search for the tag "@@".
searching for the tag "@@".
Section 1 - Init & static stuff
Section 2 - sane_init, _get_devices, _open & friends
@ -69,24 +69,22 @@
- bugfix. Imprinter didn't print the first time after
switching on the scanner
- bugfix. reader_generic_passthrough ignored the number of bytes
returned by the scanner.
returned by the scanner
V 1.0.4, 2002-09-13, OS
- 3092 support (mgoppold@tbz-pariv.de)
- 3092 support (mgoppold a t tbz-pariv.de)
- tested 4097 support
- changed some functions to receive compressed data
V 1.0.4, 2003-02-13, OS
- fi-4220C support (ron@roncemer.com)
- SCSI over USB support (ron@roncemer.com)
- fi-4220C support (ron a t roncemer.com)
- SCSI over USB support (ron a t roncemer.com)
V 1.0.5, 2003-02-20, OS
- set availability of options THRESHOLD und VARIANCE
- option RIF is available for 3091 und 3092
- option RIF is available for 3091 and 3092
V 1.0.6, 2003-03-04, OS
- renamed some variables
- bugfix: duplex scanning now works when disconnect is enabled
in the scsi controller.
V 1.0.7, 2003-03-10, OS
- displays the offending byte when something is wrong in the
window descriptor block.
- displays the offending byte in the window descriptor block
V 1.0.8, 2003-03-28, OS
- fi-4120C support, MAN
- display information about gamma in vital_product_data
@ -102,23 +100,21 @@
- added code to support color modes of more recent scanners
V 1.0.13 2003-11-07, OS
- Bugfix. If a scanner returned a color image
in format rr...r gg.g bb...b the reader process crashed.
- Bugfix. The option gamma was enabled for
the fi-4120. The result was an 'invalid field in parm list'-error.
in format rr...r gg...g bb...b the reader process crashed
- Bugfix. Disable option gamma was for the fi-4120
V 1.0.14 2003-12-15, OS
- Bugfix: set default threshold range to 0..255 There is a problem
with the M3093 when you are not allows to set the threshold to 0.
with the M3093 when you are not allows to set the threshold to 0
- Bugfix: set the allowable x- and y-DPI values from VPD. Scanning
with x=100 and y=100 dpi with an fi4120 resulted in an image
with 100,75 dpi.
with 100,75 dpi
- Bugfix: Set the default value of gamma to 0x80 for all scanners
that don't have build in gamma patterns.
that don't have built in gamma patterns
- Bugfix: fi-4530 and fi-4210 don't support standard paper size
spezification. Disable this option for these scanners.
V 1.0.15 2003-12-16, OS
- Bugfix: pagewidth and pageheight where disable for the fi-4530C.
- Bugfix: pagewidth and pageheight were disabled for the fi-4530C
V 1.0.16 2004-02-20, OS
- merged the 3092-routines with the 3091-routines.
- merged the 3092-routines with the 3091-routines
- inverted the image in mode color and grayscale
- jpg hardware compression support (fi-4530C)
V 1.0.17 2004-03-04, OS
@ -126,7 +122,7 @@
V 1.0.18 2004-06-02, OS
- bugfix: can read duplex color now
V 1.0.19 2004-06-28, MAN
- 4220 use model code not strcmp (stan@saticed.me.uk)
- 4220 use model code not strcmp (stan a t saticed.me.uk)
V 1.0.20 2004-08-24, OS
- bugfix: 3091 did not work since 15.12.2003
- M4099 supported (bw only)
@ -200,12 +196,15 @@
- run ghs/rs every second instead of every other
V 1.0.32 2006-06-14, MAN
- add 4220C2 usb id
V 1.0.33 2006-06-14, MAN
V 1.0.33 2006-06-14, MAN (SANE v1.0.18)
- add Fi-5900 usb id and init_model section
V 1.0.34 2006-07-04, MAN
- add S500 usb id
- gather more data from inq and vpd
- allow background color setting
V 1.0.35 2006-07-05, MAN
- allow double feed sensor settings
- more consistent naming of global strings
SANE FLOW DIAGRAM
@ -265,7 +264,7 @@
#include "fujitsu.h"
#define DEBUG 1
#define BUILD 33
#define BUILD 35
/* values for SANE_DEBUG_FUJITSU env var:
- errors 5
@ -277,24 +276,32 @@
*/
/* ------------------------------------------------------------------------- */
static const char source_Flatbed[] = "Flatbed";
static const char source_ADFFront[] = "ADF Front";
static const char source_ADFBack[] = "ADF Back";
static const char source_ADFDuplex[] = "ADF Duplex";
static const char string_Flatbed[] = "Flatbed";
static const char string_ADFFront[] = "ADF Front";
static const char string_ADFBack[] = "ADF Back";
static const char string_ADFDuplex[] = "ADF Duplex";
static const char mode_Lineart[] = "Lineart";
static const char mode_Halftone[] = "Halftone";
static const char mode_Grayscale[] = "Gray";
static const char mode_Color_lineart[] = "Color Lineart";
static const char mode_Color_halftone[] = "Color Halftone";
static const char mode_Color[] = "Color";
static const char string_Lineart[] = "Lineart";
static const char string_Halftone[] = "Halftone";
static const char string_Grayscale[] = "Gray";
static const char string_Color[] = "Color";
static const char color_Red[] = "Red";
static const char color_Green[] = "Green";
static const char color_Blue[] = "Blue";
static const char color_Default[] = "Default";
static const char color_White[] = "White";
static const char color_Black[] = "Black";
static const char string_Default[] = "Default";
static const char string_Red[] = "Red";
static const char string_Green[] = "Green";
static const char string_Blue[] = "Blue";
static const char string_White[] = "White";
static const char string_Black[] = "Black";
static const char string_None[] = "None";
static const char string_Thickness[] = "Thickness";
static const char string_Length[] = "Length";
static const char string_Both[] = "Both";
static const char string_10mm[] = "10mm";
static const char string_15mm[] = "15mm";
static const char string_20mm[] = "20mm";
/* Also set via config file. */
static int global_buffer_size = 64 * 1024;
@ -906,11 +913,8 @@ init_vpd (struct fujitsu *s)
s->can_grayscale = get_IN_multilevel (buffer);
DBG (15, " grayscale: %d\n", s->can_grayscale);
s->can_color_monochrome = get_IN_monochrome_rgb(buffer);
DBG (15, " color_monochrome: %d\n", s->can_color_monochrome);
s->can_color_halftone = get_IN_half_tone_rgb(buffer);
DBG (15, " color_halftone: %d\n", s->can_color_halftone);
DBG (15, " color_monochrome: %d\n", get_IN_monochrome_rgb(buffer));
DBG (15, " color_halftone: %d\n", get_IN_half_tone_rgb(buffer));
s->can_color_grayscale = get_IN_multilevel_rgb (buffer);
DBG (15, " color_grayscale: %d\n", s->can_color_grayscale);
@ -1145,6 +1149,7 @@ init_model (struct fujitsu *s)
s->has_back = 0;
s->color_interlace = COLOR_INTERLACE_3091;
s->duplex_interlace = DUPLEX_INTERLACE_3091;
s->has_MS_df = 0;
s->has_MS_dropout = 0;
s->has_SW_dropout = 1;
s->window_vid = 0xc0;
@ -1163,6 +1168,7 @@ init_model (struct fujitsu *s)
s->has_back = s->has_duplex;
s->color_interlace = COLOR_INTERLACE_NONE;
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
s->has_MS_df = 0;
s->has_MS_dropout = 0;
s->has_SW_dropout = 0;
s->window_vid = 0;
@ -1181,6 +1187,7 @@ init_model (struct fujitsu *s)
s->has_back = s->has_duplex;
s->color_interlace = COLOR_INTERLACE_RRGGBB;
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
s->has_MS_df = 1;
s->has_MS_dropout = 1;
s->has_SW_dropout = 0;
s->window_vid = 0;
@ -1200,6 +1207,7 @@ init_model (struct fujitsu *s)
s->has_back = s->has_duplex;
s->color_interlace = COLOR_INTERLACE_BGR;
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
s->has_MS_df = 1;
s->has_MS_dropout = 1;
s->has_SW_dropout = 0;
s->window_vid = 0;
@ -1217,6 +1225,7 @@ init_model (struct fujitsu *s)
s->has_back = s->has_duplex;
s->color_interlace = COLOR_INTERLACE_BGR;
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
s->has_MS_df = 1;
s->has_MS_dropout = 1;
s->has_SW_dropout = 0;
s->window_vid = 0;
@ -1370,16 +1379,16 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
if(option==OPT_SOURCE){
i=0;
if(s->has_flatbed){
s->source_list[i++]=source_Flatbed;
s->source_list[i++]=string_Flatbed;
}
if(s->has_adf){
s->source_list[i++]=source_ADFFront;
s->source_list[i++]=string_ADFFront;
if(s->has_back){
s->source_list[i++]=source_ADFBack;
s->source_list[i++]=string_ADFBack;
}
if(s->has_duplex){
s->source_list[i++]=source_ADFDuplex;
s->source_list[i++]=string_ADFDuplex;
}
}
s->source_list[i]=NULL;
@ -1398,22 +1407,16 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
if(option==OPT_MODE){
i=0;
if(s->can_monochrome){
s->mode_list[i++]=mode_Lineart;
s->mode_list[i++]=string_Lineart;
}
if(s->can_halftone){
s->mode_list[i++]=mode_Halftone;
s->mode_list[i++]=string_Halftone;
}
if(s->can_grayscale){
s->mode_list[i++]=mode_Grayscale;
}
if(s->can_color_monochrome){
s->mode_list[i++]=mode_Color_lineart;
}
if(s->can_color_halftone){
s->mode_list[i++]=mode_Color_halftone;
s->mode_list[i++]=string_Grayscale;
}
if(s->can_color_grayscale){
s->mode_list[i++]=mode_Color;
s->mode_list[i++]=string_Color;
}
s->mode_list[i]=NULL;
@ -1790,11 +1793,54 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->constraint_type = SANE_CONSTRAINT_NONE;
}
/*double feed detection*/
if(option==OPT_DF_DETECT){
s->df_detect_list[0] = string_Default;
s->df_detect_list[1] = string_None;
s->df_detect_list[2] = string_Thickness;
s->df_detect_list[3] = string_Length;
s->df_detect_list[4] = string_Both;
s->df_detect_list[5] = NULL;
opt->name = "dfdetect";
opt->title = "DF detection";
opt->desc = "Enable double feed sensors";
opt->type = SANE_TYPE_STRING;
opt->constraint_type = SANE_CONSTRAINT_STRING_LIST;
opt->constraint.string_list = s->df_detect_list;
opt->size = maxStringSize (opt->constraint.string_list);
if (s->has_MS_df)
opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
else
opt->cap = SANE_CAP_INACTIVE;
}
/*double feed length difference*/
if(option==OPT_DF_DIFF){
s->df_diff_list[0] = string_Default;
s->df_diff_list[1] = string_10mm;
s->df_diff_list[2] = string_15mm;
s->df_diff_list[3] = string_20mm;
s->df_diff_list[4] = NULL;
opt->name = "dfdiff";
opt->title = "DF length difference";
opt->desc = "Difference in page length to trigger double feed sensor";
opt->type = SANE_TYPE_STRING;
opt->constraint_type = SANE_CONSTRAINT_STRING_LIST;
opt->constraint.string_list = s->df_diff_list;
opt->size = maxStringSize (opt->constraint.string_list);
if (s->has_MS_df)
opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
else
opt->cap = SANE_CAP_INACTIVE;
}
/*background color*/
if(option==OPT_BG_COLOR){
s->bg_color_list[0] = color_Default;
s->bg_color_list[1] = color_White;
s->bg_color_list[2] = color_Black;
s->bg_color_list[0] = string_Default;
s->bg_color_list[1] = string_White;
s->bg_color_list[2] = string_Black;
s->bg_color_list[3] = NULL;
opt->name = "bgcolor";
@ -1812,10 +1858,10 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
/*dropout color*/
if(option==OPT_DROPOUT_COLOR){
s->do_color_list[0] = color_Default;
s->do_color_list[1] = color_Red;
s->do_color_list[2] = color_Green;
s->do_color_list[3] = color_Blue;
s->do_color_list[0] = string_Default;
s->do_color_list[1] = string_Red;
s->do_color_list[2] = string_Green;
s->do_color_list[3] = string_Blue;
s->do_color_list[4] = NULL;
opt->name = "dropoutcolor";
@ -2227,16 +2273,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
case OPT_SOURCE:
if(s->source == SOURCE_FLATBED){
strcpy (val, source_Flatbed);
strcpy (val, string_Flatbed);
}
else if(s->source == SOURCE_ADF_FRONT){
strcpy (val, source_ADFFront);
strcpy (val, string_ADFFront);
}
else if(s->source == SOURCE_ADF_BACK){
strcpy (val, source_ADFBack);
strcpy (val, string_ADFBack);
}
else if(s->source == SOURCE_ADF_DUPLEX){
strcpy (val, source_ADFDuplex);
strcpy (val, string_ADFDuplex);
}
else{
DBG(5,"missing option val for source\n");
@ -2245,16 +2291,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
case OPT_MODE:
if(s->mode == MODE_LINEART){
strcpy (val, mode_Lineart);
strcpy (val, string_Lineart);
}
else if(s->mode == MODE_HALFTONE){
strcpy (val, mode_Halftone);
strcpy (val, string_Halftone);
}
else if(s->mode == MODE_GRAYSCALE){
strcpy (val, mode_Grayscale);
strcpy (val, string_Grayscale);
}
else if(s->mode == MODE_COLOR){
strcpy (val, mode_Color);
strcpy (val, string_Color);
}
return SANE_STATUS_GOOD;
@ -2307,16 +2353,53 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
return SANE_STATUS_GOOD;
/* Advanced Group */
case OPT_DF_DETECT:
switch (s->df_detect) {
case DF_DEFAULT:
strcpy (val, string_Default);
break;
case DF_NONE:
strcpy (val, string_None);
break;
case DF_THICKNESS:
strcpy (val, string_Thickness);
break;
case DF_LENGTH:
strcpy (val, string_Length);
break;
case DF_BOTH:
strcpy (val, string_Both);
break;
}
return SANE_STATUS_GOOD;
case OPT_DF_DIFF:
switch (s->df_diff) {
case DF_DEFAULT:
strcpy (val, string_Default);
break;
case DF_10MM:
strcpy (val, string_10mm);
break;
case DF_15MM:
strcpy (val, string_15mm);
break;
case DF_20MM:
strcpy (val, string_20mm);
break;
}
return SANE_STATUS_GOOD;
case OPT_BG_COLOR:
switch (s->bg_color) {
case COLOR_DEFAULT:
strcpy (val, color_Default);
strcpy (val, string_Default);
break;
case COLOR_WHITE:
strcpy (val, color_White);
strcpy (val, string_White);
break;
case COLOR_BLACK:
strcpy (val, color_Black);
strcpy (val, string_Black);
break;
}
return SANE_STATUS_GOOD;
@ -2324,16 +2407,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
case OPT_DROPOUT_COLOR:
switch (s->dropout_color) {
case COLOR_DEFAULT:
strcpy (val, color_Default);
strcpy (val, string_Default);
break;
case COLOR_RED:
strcpy (val, color_Red);
strcpy (val, string_Red);
break;
case COLOR_GREEN:
strcpy (val, color_Green);
strcpy (val, string_Green);
break;
case COLOR_BLUE:
strcpy (val, color_Blue);
strcpy (val, string_Blue);
break;
}
return SANE_STATUS_GOOD;
@ -2498,13 +2581,13 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
/* Mode Group */
case OPT_SOURCE:
if (!strcmp (val, source_ADFFront)) {
if (!strcmp (val, string_ADFFront)) {
tmp = SOURCE_ADF_FRONT;
}
else if (!strcmp (val, source_ADFBack)) {
else if (!strcmp (val, string_ADFBack)) {
tmp = SOURCE_ADF_BACK;
}
else if (!strcmp (val, source_ADFDuplex)) {
else if (!strcmp (val, string_ADFDuplex)) {
tmp = SOURCE_ADF_DUPLEX;
}
else{
@ -2519,13 +2602,13 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
return SANE_STATUS_GOOD;
case OPT_MODE:
if (!strcmp (val, mode_Lineart)) {
if (!strcmp (val, string_Lineart)) {
tmp = MODE_LINEART;
}
else if (!strcmp (val, mode_Halftone)) {
else if (!strcmp (val, string_Halftone)) {
tmp = MODE_HALFTONE;
}
else if (!strcmp (val, mode_Grayscale)) {
else if (!strcmp (val, string_Grayscale)) {
tmp = MODE_GRAYSCALE;
}
else{
@ -2636,23 +2719,47 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
return SANE_STATUS_GOOD;
/* Advanced Group */
case OPT_DF_DETECT:
if (!strcmp(val, string_Default))
s->df_detect = DF_DEFAULT;
else if (!strcmp(val, string_None))
s->df_detect = DF_NONE;
else if (!strcmp(val, string_Thickness))
s->df_detect = DF_THICKNESS;
else if (!strcmp(val, string_Length))
s->df_detect = DF_LENGTH;
else if (!strcmp(val, string_Both))
s->df_detect = DF_BOTH;
return mode_select_df(s);
case OPT_DF_DIFF:
if (!strcmp(val, string_Default))
s->df_diff = DF_DEFAULT;
else if (!strcmp(val, string_10mm))
s->df_diff = DF_10MM;
else if (!strcmp(val, string_15mm))
s->df_diff = DF_15MM;
else if (!strcmp(val, string_20mm))
s->df_diff = DF_20MM;
return mode_select_df(s);
case OPT_BG_COLOR:
if (!strcmp(val, color_Default))
if (!strcmp(val, string_Default))
s->bg_color = COLOR_DEFAULT;
else if (!strcmp(val, color_White))
else if (!strcmp(val, string_White))
s->bg_color = COLOR_WHITE;
else if (!strcmp(val, color_Black))
else if (!strcmp(val, string_Black))
s->bg_color = COLOR_BLACK;
return mode_select_bg(s);
case OPT_DROPOUT_COLOR:
if (!strcmp(val, color_Default))
if (!strcmp(val, string_Default))
s->dropout_color = COLOR_DEFAULT;
else if (!strcmp(val, color_Red))
else if (!strcmp(val, string_Red))
s->dropout_color = COLOR_RED;
else if (!strcmp(val, color_Green))
else if (!strcmp(val, string_Green))
s->dropout_color = COLOR_GREEN;
else if (!strcmp(val, color_Blue))
else if (!strcmp(val, string_Blue))
s->dropout_color = COLOR_BLUE;
if (s->has_MS_dropout)
return mode_select_dropout(s);
@ -2715,7 +2822,7 @@ get_hardware_status (struct fujitsu *s)
DBG (10, "get_hardware_status: start\n");
/* only run this once every couple seconds */
if (s->last_ghs + GHS_TIME < time(NULL)) {
if (s->last_ghs < time(NULL)) {
DBG (15, "get_hardware_status: running\n");
@ -2804,6 +2911,68 @@ get_hardware_status (struct fujitsu *s)
return ret;
}
static SANE_Status
mode_select_df (struct fujitsu *s)
{
int ret;
DBG (10, "mode_select_df: start\n");
set_MSEL_xfer_length (mode_selectB.cmd, mode_select_dfB.size);
/* clear everything for defaults */
if(s->df_detect == DF_DEFAULT){
set_MSEL_df_enable (mode_select_dfB.cmd, 0);
set_MSEL_df_continue (mode_select_dfB.cmd, 0);
set_MSEL_df_thickness (mode_select_dfB.cmd, 0);
set_MSEL_df_length (mode_select_dfB.cmd, 0);
set_MSEL_df_diff (mode_select_dfB.cmd, 0);
}
/* none, still have to enable */
else if(s->df_detect == DF_NONE){
set_MSEL_df_enable (mode_select_dfB.cmd, 1);
set_MSEL_df_continue (mode_select_dfB.cmd, 1);
set_MSEL_df_thickness (mode_select_dfB.cmd, 0);
set_MSEL_df_length (mode_select_dfB.cmd, 0);
set_MSEL_df_diff (mode_select_dfB.cmd, 0);
}
/* thickness only */
else if(s->df_detect == DF_THICKNESS){
set_MSEL_df_enable (mode_select_dfB.cmd, 1);
set_MSEL_df_continue (mode_select_dfB.cmd, 0);
set_MSEL_df_thickness (mode_select_dfB.cmd, 1);
set_MSEL_df_length (mode_select_dfB.cmd, 0);
set_MSEL_df_diff (mode_select_dfB.cmd, 0);
}
/* length only */
else if(s->df_detect == DF_LENGTH){
set_MSEL_df_enable (mode_select_dfB.cmd, 1);
set_MSEL_df_continue (mode_select_dfB.cmd, 0);
set_MSEL_df_thickness (mode_select_dfB.cmd, 0);
set_MSEL_df_length (mode_select_dfB.cmd, 1);
set_MSEL_df_diff (mode_select_dfB.cmd, s->df_diff);
}
/* thickness and length */
else{
set_MSEL_df_enable (mode_select_dfB.cmd, 1);
set_MSEL_df_continue (mode_select_dfB.cmd, 0);
set_MSEL_df_thickness (mode_select_dfB.cmd, 1);
set_MSEL_df_length (mode_select_dfB.cmd, 1);
set_MSEL_df_diff (mode_select_dfB.cmd, s->df_diff);
}
ret = do_cmd (
s, 1, 0,
mode_selectB.cmd, mode_selectB.size,
mode_select_dfB.cmd, mode_select_dfB.size,
NULL, 0
);
DBG (10, "mode_select_df: finish\n");
return ret;
}
static SANE_Status
mode_select_bg (struct fujitsu *s)
{

Wyświetl plik

@ -36,6 +36,8 @@ enum fujitsu_Option
OPT_RIF,
OPT_ADVANCED_GROUP,
OPT_DF_DETECT,
OPT_DF_DIFF,
OPT_BG_COLOR,
OPT_DROPOUT_COLOR,
OPT_SLEEP_TIME,
@ -136,8 +138,6 @@ struct fujitsu
int can_monochrome;
int can_halftone;
int can_grayscale;
int can_color_monochrome;
int can_color_halftone;
int can_color_grayscale;
/* --------------------------------------------------------------------- */
@ -217,14 +217,15 @@ struct fujitsu
/*int has_MS_prepick;
int has_MS_sleep;
int has_MS_background;
int has_MS_multifeed;*/
int has_SW_dropout; /* dropout color specified in set window data */
int has_MS_background;*/
int has_MS_df;
int has_MS_dropout; /* dropout color specified in mode select data */
int has_SW_dropout; /* dropout color specified in set window data */
/*int has_MS_buffered;
int has_MS_paperlen;*/
int reverse_by_mode[6]; /* mode specific */
/* --------------------------------------------------------------------- */
/* changeable SANE_Option structs provide our interface to frontend. */
/* some options require lists of strings or numbers, we keep them here */
@ -258,6 +259,8 @@ struct fujitsu
/*ipc group*/
/*advanced group*/
SANE_String_Const df_detect_list[6];
SANE_String_Const df_diff_list[5];
SANE_String_Const bg_color_list[4];
SANE_String_Const do_color_list[5];
SANE_String_Const lamp_color_list[5];
@ -294,6 +297,8 @@ struct fujitsu
int gamma; /* not currently user settable */
/*advanced group*/
int df_detect;
int df_diff;
int bg_color;
int dropout_color;
int lamp_color;
@ -408,7 +413,17 @@ struct fujitsu
#define DUPLEX_INTERLACE_NONE 0
#define DUPLEX_INTERLACE_3091 1
#define GHS_TIME 0 /* seconds passed before calling GHS */
#define DF_NONE 1
#define DF_THICKNESS 2
#define DF_LENGTH 3
#define DF_BOTH 4
/* these are same as df scsi data to make code easier */
#define DF_DEFAULT 0
#define DF_10MM 1
#define DF_15MM 2
#define DF_20MM 3
/* ------------------------------------------------------------------------- */
#define MM_PER_INCH 25.4
@ -513,6 +528,8 @@ static SANE_Status do_cancel (struct fujitsu *scanner);
static SANE_Status scanner_control (struct fujitsu *s, int function);
static SANE_Status mode_select_df(struct fujitsu *s);
static SANE_Status mode_select_dropout(struct fujitsu *s);
static SANE_Status mode_select_bg(struct fujitsu *s);

Wyświetl plik

@ -11,7 +11,7 @@
:backend "fujitsu" ; name of backend
:url "http://www2.pfeiffer.edu/~anoah/fujitsu/"
:version "1.0.34" ; version of backend
:version "1.0.35" ; version of backend
:manpage "sane-fujitsu" ; name of manpage (if it exists)
:comment "Backend re-written for SANE release 1.0.18, see sane-fujitsu manpage"
:devicetype :scanner ; start of a list of devices....