* doc/descriptions/fujitsu.desc, backend/fujitsu.conf.in,

backend/fujitsu.[ch], backend/fujitsu-scsi.h: backend v79
- add usb ids for several models
- print additional hardware capability bits
- detect front-side endorser
- disable endorser-side controls if only one side installed
- add quirks for fi-6x70
merge-requests/1/head
m. allan noah 2008-10-02 04:03:31 +00:00
rodzic 7274bfc500
commit 48e23ca24e
6 zmienionych plików z 143 dodań i 52 usunięć

Wyświetl plik

@ -1,10 +1,19 @@
2008-10-01 m. allan noah <kitno455 a t gmail d o t com>
* doc/descriptions/fujitsu.desc, backend/fujitsu.conf.in,
backend/fujitsu.[ch], backend/fujitsu-scsi.h: backend v79
- add usb ids for several models
- print additional hardware capability bits
- detect front-side endorser
- disable endorser-side controls if only one side installed
- add quirks for fi-6x70
2008-10-01 m. allan noah <kitno455 a t gmail d o t com>
* backend/epjitsu.[ch]: backend v16:
- split fill_frontback_buffers_S300 into 3 functions
- enable threshold_curve option
- enable threshold-curve option
- add 1-D dynamic binary thresholding code
- remove y-resolution option
- pad 225x200 data to 255x225
- pad 225x200 data to 225x225
2008-10-01 Gerhard Jaeger <gerhard@gjaeger.de>
* doc/descriptions/plustek.desc: Added entry for UT12 devid 0x0013

Wyświetl plik

@ -193,15 +193,18 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes)
#define get_IN_multilevel_rgb(in) getbitfield(in+0x1c, 1, 7)
/* vendor unique section */
#define get_IN_operator_panel(in) getbitfield(in+0x20, 1, 1)
#define get_IN_barcode(in) getbitfield(in+0x20, 1, 2)
#define get_IN_endorser(in) getbitfield(in+0x20, 1, 3)
#define get_IN_duplex(in) getbitfield(in+0x20, 1, 4)
#define get_IN_transparency(in) getbitfield(in+0x20, 1, 5)
#define get_IN_flatbed(in) getbitfield(in+0x20, 1, 6)
#define get_IN_adf(in) getbitfield(in+0x20, 1, 7)
#define get_IN_flatbed(in) getbitfield(in+0x20, 1, 6)
#define get_IN_transparency(in) getbitfield(in+0x20, 1, 5)
#define get_IN_duplex(in) getbitfield(in+0x20, 1, 4)
#define get_IN_endorser_b(in) getbitfield(in+0x20, 1, 3)
#define get_IN_barcode(in) getbitfield(in+0x20, 1, 2)
#define get_IN_operator_panel(in) getbitfield(in+0x20, 1, 1)
#define get_IN_endorser_f(in) getbitfield(in+0x20, 1, 0)
#define get_IN_unused(in) getbitfield(in+0x21, 0x0f, 4)
#define get_IN_adbits(in) getbitfield(in+0x21, 0x0f, 0)
#define get_IN_buffer_bytes(in) getnbyte(in + 0x22, 4)
/*supported scsi commands*/

Wyświetl plik

@ -382,6 +382,12 @@
- recent model names (fi-6xxx) dont end in 'C'
- simplify flatbed area overrides
- call scanner_control to change source during sane_start
v79 2008-10-01, MAN
- add usb ids for several models
- print additional hardware capability bits
- detect front-side endorser
- disable endorser-side controls if only one side installed
- add quirks for fi-6x70
SANE FLOW DIAGRAM
@ -442,7 +448,7 @@
#include "fujitsu.h"
#define DEBUG 1
#define BUILD 78
#define BUILD 79
/* values for SANE_DEBUG_FUJITSU env var:
- errors 5
@ -676,6 +682,9 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1042'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x1042", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1078'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x1078", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1095'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x1095", attach_one_usb);
@ -694,6 +703,9 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10af'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x10af", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10cf'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x10cf", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e0'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e0", attach_one_usb);
@ -703,6 +715,9 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e2'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e2", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e6'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e6", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e7'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e7", attach_one_usb);
@ -721,6 +736,9 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x114d'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x114d", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x114e'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x114e", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x114f'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x114f", attach_one_usb);
@ -729,6 +747,15 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1155'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x1155", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1174'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x1174", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1176'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x1176", attach_one_usb);
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1178'\n");
sanei_usb_attach_matching_devices("usb 0x04c5 0x1178", attach_one_usb);
}
/*delete missing scanners from list*/
@ -1263,27 +1290,32 @@ init_vpd (struct fujitsu *s)
DBG (15, "vendor options\n");
s->has_operator_panel = get_IN_operator_panel(in);
DBG (15, " operator panel: %d\n", s->has_operator_panel);
s->has_adf = get_IN_adf(in);
DBG (15, " adf: %d\n", s->has_adf);
s->has_barcode = get_IN_barcode(in);
DBG (15, " barcode: %d\n", s->has_barcode);
s->has_flatbed = get_IN_flatbed(in);
DBG (15, " flatbed: %d\n", s->has_flatbed);
s->has_endorser = get_IN_endorser(in);
DBG (15, " endorser: %d\n", s->has_endorser);
s->has_transparency = get_IN_transparency(in);
DBG (15, " transparency: %d\n", s->has_transparency);
s->has_duplex = get_IN_duplex(in);
s->has_back = s->has_duplex;
DBG (15, " duplex: %d\n", s->has_duplex);
s->has_transparency = get_IN_transparency(in);
DBG (15, " transparency: %d\n", s->has_transparency);
s->has_endorser_b = get_IN_endorser_b(in);
DBG (15, " back endorser: %d\n", s->has_endorser_b);
s->has_flatbed = get_IN_flatbed(in);
DBG (15, " flatbed: %d\n", s->has_flatbed);
s->has_barcode = get_IN_barcode(in);
DBG (15, " barcode: %d\n", s->has_barcode);
s->has_adf = get_IN_adf(in);
DBG (15, " adf: %d\n", s->has_adf);
s->has_operator_panel = get_IN_operator_panel(in);
DBG (15, " operator panel: %d\n", s->has_operator_panel);
s->has_endorser_f = get_IN_endorser_f(in);
DBG (15, " front endorser: %d\n", s->has_endorser_f);
DBG (15, " unused caps: %d\n", get_IN_unused(in));
s->adbits = get_IN_adbits(in);
DBG (15, " A/D bits: %d\n",s->adbits);
@ -1900,6 +1932,13 @@ init_model (struct fujitsu *s)
s->max_y_fb = 14173;
}
else if (strstr (s->model_name, "fi-6670")
|| strstr (s->model_name, "fi-6770") ) {
/* weirdness */
s->even_scan_line = 1;
}
DBG (10, "init_model: finish\n");
return SANE_STATUS_GOOD;
@ -1965,6 +2004,9 @@ init_user (struct fujitsu *s)
s->u_endorser_bits=16;
s->u_endorser_step=1;
s->u_endorser_side=ED_back;
if(s->has_endorser_f){
s->u_endorser_side=ED_front;
}
s->u_endorser_dir=DIR_TTB;
strcpy((char *)s->u_endorser_string,"%05ud");
@ -3456,7 +3498,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->constraint_type = SANE_CONSTRAINT_NONE;
/*flaming hack to get scanimage to hide group*/
if (!s->has_endorser)
if ( !(s->has_endorser_f || s->has_endorser_b) )
opt->type = SANE_TYPE_BOOL;
}
@ -3468,7 +3510,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->unit = SANE_UNIT_NONE;
opt->size = sizeof(SANE_Word);
if (s->has_endorser)
if (s->has_endorser_f || s->has_endorser_b)
opt->cap= SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
else
opt->cap = SANE_CAP_INACTIVE;
@ -3485,7 +3527,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->size = sizeof(SANE_Word);
/*old type cant do this?*/
if (s->has_endorser && s->endorser_type != ET_OLD){
if ((s->has_endorser_f || s->has_endorser_b) && s->endorser_type != ET_OLD){
opt->cap=SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
if(!s->u_endorser)
opt->cap |= SANE_CAP_INACTIVE;
@ -3509,7 +3551,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->unit = SANE_UNIT_NONE;
opt->size = sizeof(SANE_Word);
if (s->has_endorser){
if (s->has_endorser_f || s->has_endorser_b){
opt->cap=SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
if(!s->u_endorser)
opt->cap |= SANE_CAP_INACTIVE;
@ -3533,7 +3575,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->unit = SANE_UNIT_NONE;
opt->size = sizeof(SANE_Word);
if (s->has_endorser){
if (s->has_endorser_f || s->has_endorser_b){
opt->cap=SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
if(!s->u_endorser)
opt->cap |= SANE_CAP_INACTIVE;
@ -3557,7 +3599,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->unit = SANE_UNIT_MM;
opt->size = sizeof(SANE_Word);
if (s->has_endorser){
if (s->has_endorser_f || s->has_endorser_b){
opt->cap=SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
if(!s->u_endorser)
opt->cap |= SANE_CAP_INACTIVE;
@ -3583,7 +3625,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->unit = SANE_UNIT_NONE;
/*only newest can do this?*/
if (s->has_endorser && s->endorser_type == ET_40){
if ((s->has_endorser_f || s->has_endorser_b) && s->endorser_type == ET_40){
opt->cap=SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
if(!s->u_endorser)
opt->cap |= SANE_CAP_INACTIVE;
@ -3611,7 +3653,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->type = SANE_TYPE_STRING;
opt->unit = SANE_UNIT_NONE;
if (s->has_endorser){
if (s->has_endorser_f || s->has_endorser_b){
opt->cap=SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
if(!s->u_endorser)
opt->cap |= SANE_CAP_INACTIVE;
@ -3636,7 +3678,8 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->type = SANE_TYPE_STRING;
opt->unit = SANE_UNIT_NONE;
if (s->has_endorser){
/* only show if both endorsers are installed */
if (s->has_endorser_f && s->has_endorser_b){
opt->cap=SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
if(!s->u_endorser)
opt->cap |= SANE_CAP_INACTIVE;
@ -3662,7 +3705,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->unit = SANE_UNIT_NONE;
opt->size = s->endorser_string_len + 1;
if (s->has_endorser){
if (s->has_endorser_f || s->has_endorser_b){
opt->cap=SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED;
if(!s->u_endorser)
opt->cap |= SANE_CAP_INACTIVE;
@ -3844,7 +3887,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->desc = "Imprinter ink running low";
opt->type = SANE_TYPE_BOOL;
opt->unit = SANE_UNIT_NONE;
if (s->has_cmd_hw_status && s->has_endorser)
if (s->has_cmd_hw_status && (s->has_endorser_f || s->has_endorser_b))
opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
else
opt->cap = SANE_CAP_INACTIVE;
@ -3892,7 +3935,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
opt->desc = "Imprinter ink level";
opt->type = SANE_TYPE_INT;
opt->unit = SANE_UNIT_NONE;
if (s->has_cmd_hw_status && s->has_endorser)
if (s->has_cmd_hw_status && (s->has_endorser_f || s->has_endorser_b))
opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
else
opt->cap = SANE_CAP_INACTIVE;
@ -5945,7 +5988,7 @@ endorser(struct fujitsu *s)
memset(out,0,outLen);
if (s->has_endorser) {
if (s->has_endorser_f || s->has_endorser_b){
set_ED_endorser_data_id(out,0);
if(s->u_endorser){

Wyświetl plik

@ -27,11 +27,16 @@ scsi FUJITSU
usb 0x04c5 0x1041
usb 0x04c5 0x1042
#fi-4530C
usb 0x04c5 0x1078
#fi-5750C
usb 0x04c5 0x1095
#fi-5110xxx
#fi-5110eox/2
usb 0x04c5 0x1096
#fi-5110C
usb 0x04c5 0x1097
#fi-5650C
@ -41,6 +46,9 @@ usb 0x04c5 0x10ad
usb 0x04c5 0x10ae
usb 0x04c5 0x10af
#fi-4340C
usb 0x04c5 0x10cf
#fi-5x20C
usb 0x04c5 0x10e0
usb 0x04c5 0x10e1
@ -48,6 +56,9 @@ usb 0x04c5 0x10e1
#fi-5530C
usb 0x04c5 0x10e2
#fi-5110eox3
usb 0x04c5 0x10e6
#fi-5900C
usb 0x04c5 0x10e7
@ -66,6 +77,9 @@ usb 0x04c5 0x114a
#fi-6140
usb 0x04c5 0x114d
#fi-6240
usb 0x04c5 0x114e
#fi-6130
usb 0x04c5 0x114f
@ -74,3 +88,12 @@ usb 0x04c5 0x1150
#ScanSnap S510
usb 0x04c5 0x1155
#fi-6770
usb 0x04c5 0x1174
#fi-6670
usb 0x04c5 0x1176
#fi-6750
usb 0x04c5 0x1178

Wyświetl plik

@ -187,13 +187,14 @@ struct fujitsu
/* --------------------------------------------------------------------- */
/* immutable values which are set during vndr VPD probing of the scanner */
/* members in order found in scsi data... */
int has_operator_panel;
int has_barcode;
int has_endorser;
int has_duplex;
int has_transparency;
int has_flatbed;
int has_adf;
int has_flatbed;
int has_transparency;
int has_duplex;
int has_endorser_b;
int has_barcode;
int has_operator_panel;
int has_endorser_f;
int adbits;
int buffer_bytes;

Wyświetl plik

@ -11,7 +11,7 @@
:backend "fujitsu" ; name of backend
:url "http://www.thebility.com/fujitsu/"
:version "78" ; version of backend
:version "79" ; version of backend
:manpage "sane-fujitsu" ; name of manpage (if it exists)
:comment "Backend updated for SANE release 1.1.0, see sane-fujitsu manpage"
:devicetype :scanner ; start of a list of devices....
@ -60,15 +60,16 @@
:status :complete
:comment "small, recent, discontinued, usb 2.0"
:model "fi-5110EOX"
:model "fi-5110EOX/2"
:interface "USB"
:status :complete
:usbid "0x04c5" "0x1096"
:comment "small, recent, discontinued, no TWAIN driver"
:model "fi-5110EOX2"
:model "fi-5110EOX3"
:interface "USB"
:status :complete
:usbid "0x04c5" "0x10e6"
:comment "small, recent, discontinued, no TWAIN driver"
:model "fi-5110EOXM"
@ -199,6 +200,7 @@
:model "fi-4530C"
:interface "SCSI USB"
:status :complete
:usbid "0x04c5" "0x1078"
:comment "medium, recent, discontinued"
:model "fi-4640S"
@ -215,6 +217,7 @@
; CURRENT MODELS, MEDIUM
:model "fi-4340C"
:interface "SCSI USB"
:usbid "0x04c5" "0x10cf"
:status :complete
:comment "medium, current"
@ -239,6 +242,7 @@
:model "fi-6240"
:interface "SCSI USB"
:status :complete
:usbid "0x04c5" "0x114f"
:comment "medium, current"
;==================================================
@ -316,21 +320,29 @@
:model "fi-5750C"
:interface "SCSI USB"
:usbid "0x04c5" "0x1095"
:status :good
:comment "big, current, might need flatbed max area override"
:status :complete
:comment "big, current"
:model "fi-5900C"
:interface "SCSI USB"
:usbid "0x04c5" "0x10e7"
:status :good
:comment "big, current, possibly some multi-feed options unsupported"
:status :complete
:comment "big, current"
:model "fi-6750"
:interface "SCSI USB"
:status :untested
:usbid "0x04c5" "0x1178"
:comment "Unreleased lighter duty version of fi-6770?"
:model "fi-6670"
:interface "SCSI USB"
:status :untested
:comment "big, current, faster version of fi-5650C?"
:status :good
:usbid "0x04c5" "0x1176"
:comment "big, current, might have usb power suspend problems?"
:model "fi-6770"
:interface "SCSI USB"
:status :untested
:comment "big, current, faster version of fi-5750C?"
:status :good
:usbid "0x04c5" "0x1174"
:comment "big, current, might have usb power suspend problems?"