kopia lustrzana https://gitlab.com/sane-project/backends
update to backend v1.0.35
rodzic
f9927937af
commit
cdbe31d245
|
@ -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>
|
2006-07-04 m. allan noah <anoah AT pfeiffer DOT edu>
|
||||||
|
|
||||||
* backend/fujitsu.[ch] backend/fujitsu-scsi.h:
|
* backend/fujitsu.[ch] backend/fujitsu-scsi.h:
|
||||||
|
|
|
@ -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_back(sb, val) setbitfield(sb + 6, 1, 4, val)
|
||||||
#define set_MSEL_bg_fb(sb, val) setbitfield(sb + 6, 1, 3, val)
|
#define set_MSEL_bg_fb(sb, val) setbitfield(sb + 6, 1, 3, val)
|
||||||
|
|
||||||
/*
|
static unsigned char mode_select_dfC[] = {
|
||||||
static unsigned char mode_select_dfeedC[] = {
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x38, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
0x38, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
};
|
};
|
||||||
static scsiblk mode_select_dfeedB = {
|
static scsiblk mode_select_dfB = {
|
||||||
mode_select_dfeedC, sizeof (mode_select_dfeedC)
|
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[] = {
|
static unsigned char mode_select_dropoutC[] = {
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
- fi-series (M. Allan Noah, Oliver Schirrmeister)
|
- fi-series (M. Allan Noah, Oliver Schirrmeister)
|
||||||
|
|
||||||
The source code is divided in sections which you can easily find by
|
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 1 - Init & static stuff
|
||||||
Section 2 - sane_init, _get_devices, _open & friends
|
Section 2 - sane_init, _get_devices, _open & friends
|
||||||
|
@ -69,24 +69,22 @@
|
||||||
- bugfix. Imprinter didn't print the first time after
|
- bugfix. Imprinter didn't print the first time after
|
||||||
switching on the scanner
|
switching on the scanner
|
||||||
- bugfix. reader_generic_passthrough ignored the number of bytes
|
- 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
|
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
|
- tested 4097 support
|
||||||
- changed some functions to receive compressed data
|
- changed some functions to receive compressed data
|
||||||
V 1.0.4, 2003-02-13, OS
|
V 1.0.4, 2003-02-13, OS
|
||||||
- fi-4220C support (ron@roncemer.com)
|
- fi-4220C support (ron a t roncemer.com)
|
||||||
- SCSI over USB support (ron@roncemer.com)
|
- SCSI over USB support (ron a t roncemer.com)
|
||||||
V 1.0.5, 2003-02-20, OS
|
V 1.0.5, 2003-02-20, OS
|
||||||
- set availability of options THRESHOLD und VARIANCE
|
- 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
|
V 1.0.6, 2003-03-04, OS
|
||||||
- renamed some variables
|
- renamed some variables
|
||||||
- bugfix: duplex scanning now works when disconnect is enabled
|
- bugfix: duplex scanning now works when disconnect is enabled
|
||||||
in the scsi controller.
|
|
||||||
V 1.0.7, 2003-03-10, OS
|
V 1.0.7, 2003-03-10, OS
|
||||||
- displays the offending byte when something is wrong in the
|
- displays the offending byte in the window descriptor block
|
||||||
window descriptor block.
|
|
||||||
V 1.0.8, 2003-03-28, OS
|
V 1.0.8, 2003-03-28, OS
|
||||||
- fi-4120C support, MAN
|
- fi-4120C support, MAN
|
||||||
- display information about gamma in vital_product_data
|
- display information about gamma in vital_product_data
|
||||||
|
@ -102,23 +100,21 @@
|
||||||
- added code to support color modes of more recent scanners
|
- added code to support color modes of more recent scanners
|
||||||
V 1.0.13 2003-11-07, OS
|
V 1.0.13 2003-11-07, OS
|
||||||
- Bugfix. If a scanner returned a color image
|
- Bugfix. If a scanner returned a color image
|
||||||
in format rr...r gg.g bb...b the reader process crashed.
|
in format rr...r gg...g bb...b the reader process crashed
|
||||||
- Bugfix. The option gamma was enabled for
|
- Bugfix. Disable option gamma was for the fi-4120
|
||||||
the fi-4120. The result was an 'invalid field in parm list'-error.
|
|
||||||
V 1.0.14 2003-12-15, OS
|
V 1.0.14 2003-12-15, OS
|
||||||
- Bugfix: set default threshold range to 0..255 There is a problem
|
- 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
|
- 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 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
|
- 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
|
- 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
|
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
|
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
|
- inverted the image in mode color and grayscale
|
||||||
- jpg hardware compression support (fi-4530C)
|
- jpg hardware compression support (fi-4530C)
|
||||||
V 1.0.17 2004-03-04, OS
|
V 1.0.17 2004-03-04, OS
|
||||||
|
@ -126,7 +122,7 @@
|
||||||
V 1.0.18 2004-06-02, OS
|
V 1.0.18 2004-06-02, OS
|
||||||
- bugfix: can read duplex color now
|
- bugfix: can read duplex color now
|
||||||
V 1.0.19 2004-06-28, MAN
|
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
|
V 1.0.20 2004-08-24, OS
|
||||||
- bugfix: 3091 did not work since 15.12.2003
|
- bugfix: 3091 did not work since 15.12.2003
|
||||||
- M4099 supported (bw only)
|
- M4099 supported (bw only)
|
||||||
|
@ -200,12 +196,15 @@
|
||||||
- run ghs/rs every second instead of every other
|
- run ghs/rs every second instead of every other
|
||||||
V 1.0.32 2006-06-14, MAN
|
V 1.0.32 2006-06-14, MAN
|
||||||
- add 4220C2 usb id
|
- 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
|
- add Fi-5900 usb id and init_model section
|
||||||
V 1.0.34 2006-07-04, MAN
|
V 1.0.34 2006-07-04, MAN
|
||||||
- add S500 usb id
|
- add S500 usb id
|
||||||
- gather more data from inq and vpd
|
- gather more data from inq and vpd
|
||||||
- allow background color setting
|
- 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
|
SANE FLOW DIAGRAM
|
||||||
|
|
||||||
|
@ -265,7 +264,7 @@
|
||||||
#include "fujitsu.h"
|
#include "fujitsu.h"
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG 1
|
||||||
#define BUILD 33
|
#define BUILD 35
|
||||||
|
|
||||||
/* values for SANE_DEBUG_FUJITSU env var:
|
/* values for SANE_DEBUG_FUJITSU env var:
|
||||||
- errors 5
|
- errors 5
|
||||||
|
@ -277,24 +276,32 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
static const char source_Flatbed[] = "Flatbed";
|
static const char string_Flatbed[] = "Flatbed";
|
||||||
static const char source_ADFFront[] = "ADF Front";
|
static const char string_ADFFront[] = "ADF Front";
|
||||||
static const char source_ADFBack[] = "ADF Back";
|
static const char string_ADFBack[] = "ADF Back";
|
||||||
static const char source_ADFDuplex[] = "ADF Duplex";
|
static const char string_ADFDuplex[] = "ADF Duplex";
|
||||||
|
|
||||||
static const char mode_Lineart[] = "Lineart";
|
static const char string_Lineart[] = "Lineart";
|
||||||
static const char mode_Halftone[] = "Halftone";
|
static const char string_Halftone[] = "Halftone";
|
||||||
static const char mode_Grayscale[] = "Gray";
|
static const char string_Grayscale[] = "Gray";
|
||||||
static const char mode_Color_lineart[] = "Color Lineart";
|
static const char string_Color[] = "Color";
|
||||||
static const char mode_Color_halftone[] = "Color Halftone";
|
|
||||||
static const char mode_Color[] = "Color";
|
|
||||||
|
|
||||||
static const char color_Red[] = "Red";
|
static const char string_Default[] = "Default";
|
||||||
static const char color_Green[] = "Green";
|
|
||||||
static const char color_Blue[] = "Blue";
|
static const char string_Red[] = "Red";
|
||||||
static const char color_Default[] = "Default";
|
static const char string_Green[] = "Green";
|
||||||
static const char color_White[] = "White";
|
static const char string_Blue[] = "Blue";
|
||||||
static const char color_Black[] = "Black";
|
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. */
|
/* Also set via config file. */
|
||||||
static int global_buffer_size = 64 * 1024;
|
static int global_buffer_size = 64 * 1024;
|
||||||
|
@ -906,11 +913,8 @@ init_vpd (struct fujitsu *s)
|
||||||
s->can_grayscale = get_IN_multilevel (buffer);
|
s->can_grayscale = get_IN_multilevel (buffer);
|
||||||
DBG (15, " grayscale: %d\n", s->can_grayscale);
|
DBG (15, " grayscale: %d\n", s->can_grayscale);
|
||||||
|
|
||||||
s->can_color_monochrome = get_IN_monochrome_rgb(buffer);
|
DBG (15, " color_monochrome: %d\n", get_IN_monochrome_rgb(buffer));
|
||||||
DBG (15, " color_monochrome: %d\n", s->can_color_monochrome);
|
DBG (15, " color_halftone: %d\n", get_IN_half_tone_rgb(buffer));
|
||||||
|
|
||||||
s->can_color_halftone = get_IN_half_tone_rgb(buffer);
|
|
||||||
DBG (15, " color_halftone: %d\n", s->can_color_halftone);
|
|
||||||
|
|
||||||
s->can_color_grayscale = get_IN_multilevel_rgb (buffer);
|
s->can_color_grayscale = get_IN_multilevel_rgb (buffer);
|
||||||
DBG (15, " color_grayscale: %d\n", s->can_color_grayscale);
|
DBG (15, " color_grayscale: %d\n", s->can_color_grayscale);
|
||||||
|
@ -1145,6 +1149,7 @@ init_model (struct fujitsu *s)
|
||||||
s->has_back = 0;
|
s->has_back = 0;
|
||||||
s->color_interlace = COLOR_INTERLACE_3091;
|
s->color_interlace = COLOR_INTERLACE_3091;
|
||||||
s->duplex_interlace = DUPLEX_INTERLACE_3091;
|
s->duplex_interlace = DUPLEX_INTERLACE_3091;
|
||||||
|
s->has_MS_df = 0;
|
||||||
s->has_MS_dropout = 0;
|
s->has_MS_dropout = 0;
|
||||||
s->has_SW_dropout = 1;
|
s->has_SW_dropout = 1;
|
||||||
s->window_vid = 0xc0;
|
s->window_vid = 0xc0;
|
||||||
|
@ -1163,6 +1168,7 @@ init_model (struct fujitsu *s)
|
||||||
s->has_back = s->has_duplex;
|
s->has_back = s->has_duplex;
|
||||||
s->color_interlace = COLOR_INTERLACE_NONE;
|
s->color_interlace = COLOR_INTERLACE_NONE;
|
||||||
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
|
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
|
||||||
|
s->has_MS_df = 0;
|
||||||
s->has_MS_dropout = 0;
|
s->has_MS_dropout = 0;
|
||||||
s->has_SW_dropout = 0;
|
s->has_SW_dropout = 0;
|
||||||
s->window_vid = 0;
|
s->window_vid = 0;
|
||||||
|
@ -1181,6 +1187,7 @@ init_model (struct fujitsu *s)
|
||||||
s->has_back = s->has_duplex;
|
s->has_back = s->has_duplex;
|
||||||
s->color_interlace = COLOR_INTERLACE_RRGGBB;
|
s->color_interlace = COLOR_INTERLACE_RRGGBB;
|
||||||
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
|
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
|
||||||
|
s->has_MS_df = 1;
|
||||||
s->has_MS_dropout = 1;
|
s->has_MS_dropout = 1;
|
||||||
s->has_SW_dropout = 0;
|
s->has_SW_dropout = 0;
|
||||||
s->window_vid = 0;
|
s->window_vid = 0;
|
||||||
|
@ -1200,6 +1207,7 @@ init_model (struct fujitsu *s)
|
||||||
s->has_back = s->has_duplex;
|
s->has_back = s->has_duplex;
|
||||||
s->color_interlace = COLOR_INTERLACE_BGR;
|
s->color_interlace = COLOR_INTERLACE_BGR;
|
||||||
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
|
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
|
||||||
|
s->has_MS_df = 1;
|
||||||
s->has_MS_dropout = 1;
|
s->has_MS_dropout = 1;
|
||||||
s->has_SW_dropout = 0;
|
s->has_SW_dropout = 0;
|
||||||
s->window_vid = 0;
|
s->window_vid = 0;
|
||||||
|
@ -1217,6 +1225,7 @@ init_model (struct fujitsu *s)
|
||||||
s->has_back = s->has_duplex;
|
s->has_back = s->has_duplex;
|
||||||
s->color_interlace = COLOR_INTERLACE_BGR;
|
s->color_interlace = COLOR_INTERLACE_BGR;
|
||||||
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
|
s->duplex_interlace = DUPLEX_INTERLACE_NONE;
|
||||||
|
s->has_MS_df = 1;
|
||||||
s->has_MS_dropout = 1;
|
s->has_MS_dropout = 1;
|
||||||
s->has_SW_dropout = 0;
|
s->has_SW_dropout = 0;
|
||||||
s->window_vid = 0;
|
s->window_vid = 0;
|
||||||
|
@ -1370,16 +1379,16 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
|
||||||
if(option==OPT_SOURCE){
|
if(option==OPT_SOURCE){
|
||||||
i=0;
|
i=0;
|
||||||
if(s->has_flatbed){
|
if(s->has_flatbed){
|
||||||
s->source_list[i++]=source_Flatbed;
|
s->source_list[i++]=string_Flatbed;
|
||||||
}
|
}
|
||||||
if(s->has_adf){
|
if(s->has_adf){
|
||||||
s->source_list[i++]=source_ADFFront;
|
s->source_list[i++]=string_ADFFront;
|
||||||
|
|
||||||
if(s->has_back){
|
if(s->has_back){
|
||||||
s->source_list[i++]=source_ADFBack;
|
s->source_list[i++]=string_ADFBack;
|
||||||
}
|
}
|
||||||
if(s->has_duplex){
|
if(s->has_duplex){
|
||||||
s->source_list[i++]=source_ADFDuplex;
|
s->source_list[i++]=string_ADFDuplex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s->source_list[i]=NULL;
|
s->source_list[i]=NULL;
|
||||||
|
@ -1398,22 +1407,16 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
|
||||||
if(option==OPT_MODE){
|
if(option==OPT_MODE){
|
||||||
i=0;
|
i=0;
|
||||||
if(s->can_monochrome){
|
if(s->can_monochrome){
|
||||||
s->mode_list[i++]=mode_Lineart;
|
s->mode_list[i++]=string_Lineart;
|
||||||
}
|
}
|
||||||
if(s->can_halftone){
|
if(s->can_halftone){
|
||||||
s->mode_list[i++]=mode_Halftone;
|
s->mode_list[i++]=string_Halftone;
|
||||||
}
|
}
|
||||||
if(s->can_grayscale){
|
if(s->can_grayscale){
|
||||||
s->mode_list[i++]=mode_Grayscale;
|
s->mode_list[i++]=string_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;
|
|
||||||
}
|
}
|
||||||
if(s->can_color_grayscale){
|
if(s->can_color_grayscale){
|
||||||
s->mode_list[i++]=mode_Color;
|
s->mode_list[i++]=string_Color;
|
||||||
}
|
}
|
||||||
s->mode_list[i]=NULL;
|
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;
|
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*/
|
/*background color*/
|
||||||
if(option==OPT_BG_COLOR){
|
if(option==OPT_BG_COLOR){
|
||||||
s->bg_color_list[0] = color_Default;
|
s->bg_color_list[0] = string_Default;
|
||||||
s->bg_color_list[1] = color_White;
|
s->bg_color_list[1] = string_White;
|
||||||
s->bg_color_list[2] = color_Black;
|
s->bg_color_list[2] = string_Black;
|
||||||
s->bg_color_list[3] = NULL;
|
s->bg_color_list[3] = NULL;
|
||||||
|
|
||||||
opt->name = "bgcolor";
|
opt->name = "bgcolor";
|
||||||
|
@ -1812,10 +1858,10 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
|
||||||
|
|
||||||
/*dropout color*/
|
/*dropout color*/
|
||||||
if(option==OPT_DROPOUT_COLOR){
|
if(option==OPT_DROPOUT_COLOR){
|
||||||
s->do_color_list[0] = color_Default;
|
s->do_color_list[0] = string_Default;
|
||||||
s->do_color_list[1] = color_Red;
|
s->do_color_list[1] = string_Red;
|
||||||
s->do_color_list[2] = color_Green;
|
s->do_color_list[2] = string_Green;
|
||||||
s->do_color_list[3] = color_Blue;
|
s->do_color_list[3] = string_Blue;
|
||||||
s->do_color_list[4] = NULL;
|
s->do_color_list[4] = NULL;
|
||||||
|
|
||||||
opt->name = "dropoutcolor";
|
opt->name = "dropoutcolor";
|
||||||
|
@ -2227,16 +2273,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
||||||
|
|
||||||
case OPT_SOURCE:
|
case OPT_SOURCE:
|
||||||
if(s->source == SOURCE_FLATBED){
|
if(s->source == SOURCE_FLATBED){
|
||||||
strcpy (val, source_Flatbed);
|
strcpy (val, string_Flatbed);
|
||||||
}
|
}
|
||||||
else if(s->source == SOURCE_ADF_FRONT){
|
else if(s->source == SOURCE_ADF_FRONT){
|
||||||
strcpy (val, source_ADFFront);
|
strcpy (val, string_ADFFront);
|
||||||
}
|
}
|
||||||
else if(s->source == SOURCE_ADF_BACK){
|
else if(s->source == SOURCE_ADF_BACK){
|
||||||
strcpy (val, source_ADFBack);
|
strcpy (val, string_ADFBack);
|
||||||
}
|
}
|
||||||
else if(s->source == SOURCE_ADF_DUPLEX){
|
else if(s->source == SOURCE_ADF_DUPLEX){
|
||||||
strcpy (val, source_ADFDuplex);
|
strcpy (val, string_ADFDuplex);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
DBG(5,"missing option val for source\n");
|
DBG(5,"missing option val for source\n");
|
||||||
|
@ -2245,16 +2291,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
||||||
|
|
||||||
case OPT_MODE:
|
case OPT_MODE:
|
||||||
if(s->mode == MODE_LINEART){
|
if(s->mode == MODE_LINEART){
|
||||||
strcpy (val, mode_Lineart);
|
strcpy (val, string_Lineart);
|
||||||
}
|
}
|
||||||
else if(s->mode == MODE_HALFTONE){
|
else if(s->mode == MODE_HALFTONE){
|
||||||
strcpy (val, mode_Halftone);
|
strcpy (val, string_Halftone);
|
||||||
}
|
}
|
||||||
else if(s->mode == MODE_GRAYSCALE){
|
else if(s->mode == MODE_GRAYSCALE){
|
||||||
strcpy (val, mode_Grayscale);
|
strcpy (val, string_Grayscale);
|
||||||
}
|
}
|
||||||
else if(s->mode == MODE_COLOR){
|
else if(s->mode == MODE_COLOR){
|
||||||
strcpy (val, mode_Color);
|
strcpy (val, string_Color);
|
||||||
}
|
}
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
|
||||||
|
@ -2307,16 +2353,53 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
|
||||||
/* Advanced Group */
|
/* 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:
|
case OPT_BG_COLOR:
|
||||||
switch (s->bg_color) {
|
switch (s->bg_color) {
|
||||||
case COLOR_DEFAULT:
|
case COLOR_DEFAULT:
|
||||||
strcpy (val, color_Default);
|
strcpy (val, string_Default);
|
||||||
break;
|
break;
|
||||||
case COLOR_WHITE:
|
case COLOR_WHITE:
|
||||||
strcpy (val, color_White);
|
strcpy (val, string_White);
|
||||||
break;
|
break;
|
||||||
case COLOR_BLACK:
|
case COLOR_BLACK:
|
||||||
strcpy (val, color_Black);
|
strcpy (val, string_Black);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
@ -2324,16 +2407,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
||||||
case OPT_DROPOUT_COLOR:
|
case OPT_DROPOUT_COLOR:
|
||||||
switch (s->dropout_color) {
|
switch (s->dropout_color) {
|
||||||
case COLOR_DEFAULT:
|
case COLOR_DEFAULT:
|
||||||
strcpy (val, color_Default);
|
strcpy (val, string_Default);
|
||||||
break;
|
break;
|
||||||
case COLOR_RED:
|
case COLOR_RED:
|
||||||
strcpy (val, color_Red);
|
strcpy (val, string_Red);
|
||||||
break;
|
break;
|
||||||
case COLOR_GREEN:
|
case COLOR_GREEN:
|
||||||
strcpy (val, color_Green);
|
strcpy (val, string_Green);
|
||||||
break;
|
break;
|
||||||
case COLOR_BLUE:
|
case COLOR_BLUE:
|
||||||
strcpy (val, color_Blue);
|
strcpy (val, string_Blue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
@ -2498,13 +2581,13 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
||||||
|
|
||||||
/* Mode Group */
|
/* Mode Group */
|
||||||
case OPT_SOURCE:
|
case OPT_SOURCE:
|
||||||
if (!strcmp (val, source_ADFFront)) {
|
if (!strcmp (val, string_ADFFront)) {
|
||||||
tmp = SOURCE_ADF_FRONT;
|
tmp = SOURCE_ADF_FRONT;
|
||||||
}
|
}
|
||||||
else if (!strcmp (val, source_ADFBack)) {
|
else if (!strcmp (val, string_ADFBack)) {
|
||||||
tmp = SOURCE_ADF_BACK;
|
tmp = SOURCE_ADF_BACK;
|
||||||
}
|
}
|
||||||
else if (!strcmp (val, source_ADFDuplex)) {
|
else if (!strcmp (val, string_ADFDuplex)) {
|
||||||
tmp = SOURCE_ADF_DUPLEX;
|
tmp = SOURCE_ADF_DUPLEX;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
@ -2519,13 +2602,13 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
|
||||||
case OPT_MODE:
|
case OPT_MODE:
|
||||||
if (!strcmp (val, mode_Lineart)) {
|
if (!strcmp (val, string_Lineart)) {
|
||||||
tmp = MODE_LINEART;
|
tmp = MODE_LINEART;
|
||||||
}
|
}
|
||||||
else if (!strcmp (val, mode_Halftone)) {
|
else if (!strcmp (val, string_Halftone)) {
|
||||||
tmp = MODE_HALFTONE;
|
tmp = MODE_HALFTONE;
|
||||||
}
|
}
|
||||||
else if (!strcmp (val, mode_Grayscale)) {
|
else if (!strcmp (val, string_Grayscale)) {
|
||||||
tmp = MODE_GRAYSCALE;
|
tmp = MODE_GRAYSCALE;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
@ -2636,23 +2719,47 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
|
||||||
/* Advanced Group */
|
/* 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:
|
case OPT_BG_COLOR:
|
||||||
if (!strcmp(val, color_Default))
|
if (!strcmp(val, string_Default))
|
||||||
s->bg_color = COLOR_DEFAULT;
|
s->bg_color = COLOR_DEFAULT;
|
||||||
else if (!strcmp(val, color_White))
|
else if (!strcmp(val, string_White))
|
||||||
s->bg_color = COLOR_WHITE;
|
s->bg_color = COLOR_WHITE;
|
||||||
else if (!strcmp(val, color_Black))
|
else if (!strcmp(val, string_Black))
|
||||||
s->bg_color = COLOR_BLACK;
|
s->bg_color = COLOR_BLACK;
|
||||||
return mode_select_bg(s);
|
return mode_select_bg(s);
|
||||||
|
|
||||||
case OPT_DROPOUT_COLOR:
|
case OPT_DROPOUT_COLOR:
|
||||||
if (!strcmp(val, color_Default))
|
if (!strcmp(val, string_Default))
|
||||||
s->dropout_color = COLOR_DEFAULT;
|
s->dropout_color = COLOR_DEFAULT;
|
||||||
else if (!strcmp(val, color_Red))
|
else if (!strcmp(val, string_Red))
|
||||||
s->dropout_color = COLOR_RED;
|
s->dropout_color = COLOR_RED;
|
||||||
else if (!strcmp(val, color_Green))
|
else if (!strcmp(val, string_Green))
|
||||||
s->dropout_color = COLOR_GREEN;
|
s->dropout_color = COLOR_GREEN;
|
||||||
else if (!strcmp(val, color_Blue))
|
else if (!strcmp(val, string_Blue))
|
||||||
s->dropout_color = COLOR_BLUE;
|
s->dropout_color = COLOR_BLUE;
|
||||||
if (s->has_MS_dropout)
|
if (s->has_MS_dropout)
|
||||||
return mode_select_dropout(s);
|
return mode_select_dropout(s);
|
||||||
|
@ -2715,7 +2822,7 @@ get_hardware_status (struct fujitsu *s)
|
||||||
DBG (10, "get_hardware_status: start\n");
|
DBG (10, "get_hardware_status: start\n");
|
||||||
|
|
||||||
/* only run this once every couple seconds */
|
/* 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");
|
DBG (15, "get_hardware_status: running\n");
|
||||||
|
|
||||||
|
@ -2804,6 +2911,68 @@ get_hardware_status (struct fujitsu *s)
|
||||||
return ret;
|
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
|
static SANE_Status
|
||||||
mode_select_bg (struct fujitsu *s)
|
mode_select_bg (struct fujitsu *s)
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,6 +36,8 @@ enum fujitsu_Option
|
||||||
OPT_RIF,
|
OPT_RIF,
|
||||||
|
|
||||||
OPT_ADVANCED_GROUP,
|
OPT_ADVANCED_GROUP,
|
||||||
|
OPT_DF_DETECT,
|
||||||
|
OPT_DF_DIFF,
|
||||||
OPT_BG_COLOR,
|
OPT_BG_COLOR,
|
||||||
OPT_DROPOUT_COLOR,
|
OPT_DROPOUT_COLOR,
|
||||||
OPT_SLEEP_TIME,
|
OPT_SLEEP_TIME,
|
||||||
|
@ -136,8 +138,6 @@ struct fujitsu
|
||||||
int can_monochrome;
|
int can_monochrome;
|
||||||
int can_halftone;
|
int can_halftone;
|
||||||
int can_grayscale;
|
int can_grayscale;
|
||||||
int can_color_monochrome;
|
|
||||||
int can_color_halftone;
|
|
||||||
int can_color_grayscale;
|
int can_color_grayscale;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
@ -217,14 +217,15 @@ struct fujitsu
|
||||||
|
|
||||||
/*int has_MS_prepick;
|
/*int has_MS_prepick;
|
||||||
int has_MS_sleep;
|
int has_MS_sleep;
|
||||||
int has_MS_background;
|
int has_MS_background;*/
|
||||||
int has_MS_multifeed;*/
|
int has_MS_df;
|
||||||
int has_SW_dropout; /* dropout color specified in set window data */
|
|
||||||
int has_MS_dropout; /* dropout color specified in mode select data */
|
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_buffered;
|
||||||
int has_MS_paperlen;*/
|
int has_MS_paperlen;*/
|
||||||
|
|
||||||
int reverse_by_mode[6]; /* mode specific */
|
int reverse_by_mode[6]; /* mode specific */
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
/* changeable SANE_Option structs provide our interface to frontend. */
|
/* changeable SANE_Option structs provide our interface to frontend. */
|
||||||
/* some options require lists of strings or numbers, we keep them here */
|
/* some options require lists of strings or numbers, we keep them here */
|
||||||
|
@ -258,6 +259,8 @@ struct fujitsu
|
||||||
/*ipc group*/
|
/*ipc group*/
|
||||||
|
|
||||||
/*advanced 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 bg_color_list[4];
|
||||||
SANE_String_Const do_color_list[5];
|
SANE_String_Const do_color_list[5];
|
||||||
SANE_String_Const lamp_color_list[5];
|
SANE_String_Const lamp_color_list[5];
|
||||||
|
@ -294,6 +297,8 @@ struct fujitsu
|
||||||
int gamma; /* not currently user settable */
|
int gamma; /* not currently user settable */
|
||||||
|
|
||||||
/*advanced group*/
|
/*advanced group*/
|
||||||
|
int df_detect;
|
||||||
|
int df_diff;
|
||||||
int bg_color;
|
int bg_color;
|
||||||
int dropout_color;
|
int dropout_color;
|
||||||
int lamp_color;
|
int lamp_color;
|
||||||
|
@ -408,7 +413,17 @@ struct fujitsu
|
||||||
#define DUPLEX_INTERLACE_NONE 0
|
#define DUPLEX_INTERLACE_NONE 0
|
||||||
#define DUPLEX_INTERLACE_3091 1
|
#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
|
#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 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_dropout(struct fujitsu *s);
|
||||||
|
|
||||||
static SANE_Status mode_select_bg(struct fujitsu *s);
|
static SANE_Status mode_select_bg(struct fujitsu *s);
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
:backend "fujitsu" ; name of backend
|
:backend "fujitsu" ; name of backend
|
||||||
:url "http://www2.pfeiffer.edu/~anoah/fujitsu/"
|
: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)
|
:manpage "sane-fujitsu" ; name of manpage (if it exists)
|
||||||
:comment "Backend re-written for SANE release 1.0.18, see sane-fujitsu manpage"
|
:comment "Backend re-written for SANE release 1.0.18, see sane-fujitsu manpage"
|
||||||
:devicetype :scanner ; start of a list of devices....
|
:devicetype :scanner ; start of a list of devices....
|
||||||
|
|
Ładowanie…
Reference in New Issue