backend version 1.0.62, begin sane 1.1.0 compliance

merge-requests/1/head
m. allan noah 2008-05-21 02:27:14 +00:00
rodzic e91fea4ac1
commit 2016e8f019
5 zmienionych plików z 221 dodań i 24 usunięć

Wyświetl plik

@ -1,3 +1,10 @@
2008-05-20 m. allan noah <kitno455 a t gmail d o t com>
* backend/fujitsu.[ch], backend/fujitsu-scsi.h: v1.0.62,
check for all supported scsi commands, use well-known option
group strings from saneopts.h, rename pagewidth to page-width
to meet sane 1.1.0 spec, same for height, add unused get_window()
* doc/descriptions/fujitsu.desc: increase version to 1.0.62.
2008-05-20 m. allan noah <kitno455 a t gmail d o t com>
* include/sane/sane.h: add SANE_STATUS_WARMING_UP and
SANE_STATUS_HW_LOCKED, remove SANE_CAP_ALWAYS_SETTABLE,

Wyświetl plik

@ -100,6 +100,7 @@ scsiblk;
#define SEND_DIAGNOSTIC 0x1d
#define TEST_UNIT_READY 0x00
#define SET_WINDOW 0x24
#define GET_WINDOW 0x25
#define SET_SUBWINDOW 0xc0
#define OBJECT_POSITION 0x31
#define SEND 0x2a
@ -221,9 +222,38 @@ static scsiblk inquiryB = { inquiryC, sizeof (inquiryC) };
#define get_IN_adbits(in) getbitfield(in+0x21, 0x0f, 0)
#define get_IN_buffer_bytes(in) getnbyte(in + 0x22, 4)
/* more stuff here (std supported commands) */
#define get_IN_has_cmd_msen(in) getbitfield(in+0x29, 1, 7)
/*supported scsi commands*/
#define get_IN_has_cmd_msen(in) getbitfield(in+0x26, 1, 1)
#define get_IN_has_cmd_msel(in) getbitfield(in+0x26, 1, 0)
#define get_IN_has_cmd_lsen(in) getbitfield(in+0x27, 1, 7)
#define get_IN_has_cmd_lsel(in) getbitfield(in+0x27, 1, 6)
#define get_IN_has_cmd_change(in) getbitfield(in+0x27, 1, 5)
#define get_IN_has_cmd_rbuff(in) getbitfield(in+0x27, 1, 4)
#define get_IN_has_cmd_wbuff(in) getbitfield(in+0x27, 1, 3)
#define get_IN_has_cmd_cav(in) getbitfield(in+0x27, 1, 2)
#define get_IN_has_cmd_comp(in) getbitfield(in+0x27, 1, 1)
#define get_IN_has_cmd_gdbs(in) getbitfield(in+0x27, 1, 0)
#define get_IN_has_cmd_op(in) getbitfield(in+0x28, 1, 7)
#define get_IN_has_cmd_send(in) getbitfield(in+0x28, 1, 6)
#define get_IN_has_cmd_read(in) getbitfield(in+0x28, 1, 5)
#define get_IN_has_cmd_gwin(in) getbitfield(in+0x28, 1, 4)
#define get_IN_has_cmd_swin(in) getbitfield(in+0x28, 1, 3)
#define get_IN_has_cmd_sdiag(in) getbitfield(in+0x28, 1, 2)
#define get_IN_has_cmd_rdiag(in) getbitfield(in+0x28, 1, 1)
#define get_IN_has_cmd_scan(in) getbitfield(in+0x28, 1, 0)
#define get_IN_has_cmd_msen6(in) getbitfield(in+0x29, 1, 7)
#define get_IN_has_cmd_copy(in) getbitfield(in+0x29, 1, 6)
#define get_IN_has_cmd_rel(in) getbitfield(in+0x29, 1, 5)
#define get_IN_has_cmd_runit(in) getbitfield(in+0x29, 1, 4)
#define get_IN_has_cmd_msel6(in) getbitfield(in+0x29, 1, 3)
#define get_IN_has_cmd_inq(in) getbitfield(in+0x29, 1, 2)
#define get_IN_has_cmd_rs(in) getbitfield(in+0x29, 1, 1)
#define get_IN_has_cmd_tur(in) getbitfield(in+0x29, 1, 0)
/* more stuff here? (vendor commands) */
#define get_IN_has_subwindow(in) getbitfield(in+0x2b, 1, 0)
#define get_IN_has_endorser(in) getbitfield(in+0x2b, 1, 1)
#define get_IN_has_hw_status(in) getbitfield(in+0x2b, 1, 2)
@ -282,6 +312,14 @@ static scsiblk test_unit_readyB =
/* ==================================================================== */
static unsigned char get_windowC[] =
{ GET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
/* opcode, lun, _____4 X reserved____, transfer length, control byte */
static scsiblk get_windowB = { get_windowC, sizeof (get_windowC) };
#define set_GW_xferlen(sb, len) putnbyte(sb + 0x06, len, 3)
/* ==================================================================== */
static unsigned char set_windowC[] =
{ SET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
/* opcode, lun, _____4 X reserved____, transfer length, control byte */

Wyświetl plik

@ -301,6 +301,11 @@
- add fi-5530C2 usb id
- merge find_scanners into sane_get_devices
- inspect correct bool to enable prepick mode option
V 1.0.62 2008-05-20, MAN
- check for all supported scsi commands
- use well-known option group strings from saneopts.h
- rename pagewidth to page-width, to meet sane 1.1.0, same for height
- add unused get_window()
SANE FLOW DIAGRAM
@ -361,7 +366,7 @@
#include "fujitsu.h"
#define DEBUG 1
#define BUILD 61
#define BUILD 62
/* values for SANE_DEBUG_FUJITSU env var:
- errors 5
@ -1101,10 +1106,88 @@ init_vpd (struct fujitsu *s)
s->buffer_bytes = get_IN_buffer_bytes(buffer);
DBG (15, " buffer bytes: %d\n",s->buffer_bytes);
/* std scsi command support */
/* std scsi command support byte 26*/
s->has_cmd_msen = get_IN_has_cmd_msen(buffer);
DBG (15, " mode_sense cmd: %d\n", s->has_cmd_msen);
s->has_cmd_msel = get_IN_has_cmd_msel(buffer);
DBG (15, " mode_select cmd: %d\n", s->has_cmd_msel);
/* std scsi command support byte 27*/
s->has_cmd_lsen = get_IN_has_cmd_lsen(buffer);
DBG (15, " log_sense cmd: %d\n", s->has_cmd_lsen);
s->has_cmd_lsel = get_IN_has_cmd_lsel(buffer);
DBG (15, " log_select cmd: %d\n", s->has_cmd_lsel);
s->has_cmd_change = get_IN_has_cmd_change(buffer);
DBG (15, " change cmd: %d\n", s->has_cmd_change);
s->has_cmd_rbuff = get_IN_has_cmd_rbuff(buffer);
DBG (15, " read_buffer cmd: %d\n", s->has_cmd_rbuff);
s->has_cmd_wbuff = get_IN_has_cmd_wbuff(buffer);
DBG (15, " write_buffer cmd: %d\n", s->has_cmd_wbuff);
s->has_cmd_cav = get_IN_has_cmd_cav(buffer);
DBG (15, " copy_and_verify cmd: %d\n", s->has_cmd_cav);
s->has_cmd_comp = get_IN_has_cmd_comp(buffer);
DBG (15, " compare cmd: %d\n", s->has_cmd_comp);
s->has_cmd_gdbs = get_IN_has_cmd_gdbs(buffer);
DBG (15, " get_d_b_status cmd: %d\n", s->has_cmd_gdbs);
/* std scsi command support byte 28*/
s->has_cmd_op = get_IN_has_cmd_op(buffer);
DBG (15, " object_pos cmd: %d\n", s->has_cmd_op);
s->has_cmd_send = get_IN_has_cmd_send(buffer);
DBG (15, " send cmd: %d\n", s->has_cmd_send);
s->has_cmd_read = get_IN_has_cmd_read(buffer);
DBG (15, " read cmd: %d\n", s->has_cmd_read);
s->has_cmd_gwin = get_IN_has_cmd_gwin(buffer);
DBG (15, " get_window cmd: %d\n", s->has_cmd_gwin);
s->has_cmd_swin = get_IN_has_cmd_swin(buffer);
DBG (15, " set_window cmd: %d\n", s->has_cmd_swin);
s->has_cmd_sdiag = get_IN_has_cmd_sdiag(buffer);
DBG (15, " send_diag cmd: %d\n", s->has_cmd_sdiag);
s->has_cmd_rdiag = get_IN_has_cmd_rdiag(buffer);
DBG (15, " read_diag cmd: %d\n", s->has_cmd_rdiag);
s->has_cmd_scan = get_IN_has_cmd_scan(buffer);
DBG (15, " scan cmd: %d\n", s->has_cmd_scan);
/* std scsi command support byte 29*/
s->has_cmd_msen6 = get_IN_has_cmd_msen6(buffer);
DBG (15, " mode_sense_6 cmd: %d\n", s->has_cmd_msen6);
s->has_cmd_copy = get_IN_has_cmd_copy(buffer);
DBG (15, " copy cmd: %d\n", s->has_cmd_copy);
s->has_cmd_rel = get_IN_has_cmd_rel(buffer);
DBG (15, " release cmd: %d\n", s->has_cmd_rel);
s->has_cmd_runit = get_IN_has_cmd_runit(buffer);
DBG (15, " reserve_unit cmd: %d\n", s->has_cmd_runit);
s->has_cmd_msel6 = get_IN_has_cmd_msel6(buffer);
DBG (15, " mode_select_6 cmd: %d\n", s->has_cmd_msel6);
s->has_cmd_inq = get_IN_has_cmd_inq(buffer);
DBG (15, " inquiry cmd: %d\n", s->has_cmd_inq);
s->has_cmd_rs = get_IN_has_cmd_rs(buffer);
DBG (15, " request_sense cmd: %d\n", s->has_cmd_rs);
s->has_cmd_tur = get_IN_has_cmd_tur(buffer);
DBG (15, " test_unit_ready cmd: %d\n", s->has_cmd_tur);
/* vendor added scsi command support */
/* FIXME: there are more of these... */
s->has_cmd_subwindow = get_IN_has_subwindow(buffer);
@ -1732,9 +1815,10 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
return NULL;
/* "Mode" group -------------------------------------------------------- */
if(option==OPT_MODE_GROUP){
opt->title = "Scan Mode";
opt->desc = "";
if(option==OPT_STANDARD_GROUP){
opt->name = SANE_NAME_STANDARD;
opt->title = SANE_TITLE_STANDARD;
opt->desc = SANE_DESC_STANDARD;
opt->type = SANE_TYPE_GROUP;
opt->constraint_type = SANE_CONSTRAINT_NONE;
}
@ -1944,8 +2028,9 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
/* "Geometry" group ---------------------------------------------------- */
if(option==OPT_GEOMETRY_GROUP){
opt->title = "Geometry";
opt->desc = "";
opt->name = SANE_NAME_GEOMETRY;
opt->title = SANE_TITLE_GEOMETRY;
opt->desc = SANE_DESC_GEOMETRY;
opt->type = SANE_TYPE_GROUP;
opt->constraint_type = SANE_CONSTRAINT_NONE;
}
@ -2030,9 +2115,9 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
s->paper_x_range.max = SCANNER_UNIT_TO_FIXED_MM(s->max_x);
s->paper_x_range.quant = MM_PER_UNIT_FIX;
opt->name = "pagewidth";
opt->title = "ADF paper width";
opt->desc = "Must be set properly to align scanning window";
opt->name = SANE_NAME_PAGE_WIDTH;
opt->title = SANE_TITLE_PAGE_WIDTH;
opt->desc = SANE_DESC_PAGE_WIDTH;
opt->type = SANE_TYPE_FIXED;
opt->unit = SANE_UNIT_MM;
opt->constraint_type = SANE_CONSTRAINT_RANGE;
@ -2053,9 +2138,9 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
s->paper_y_range.max = SCANNER_UNIT_TO_FIXED_MM(s->max_y);
s->paper_y_range.quant = MM_PER_UNIT_FIX;
opt->name = "pageheight";
opt->title = "ADF paper length";
opt->desc = "Must be set properly to eject pages";
opt->name = SANE_NAME_PAGE_HEIGHT;
opt->title = SANE_TITLE_PAGE_HEIGHT;
opt->desc = SANE_DESC_PAGE_HEIGHT;
opt->type = SANE_TYPE_FIXED;
opt->unit = SANE_UNIT_MM;
opt->constraint_type = SANE_CONSTRAINT_RANGE;
@ -2070,8 +2155,9 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
/* "Enhancement" group ------------------------------------------------- */
if(option==OPT_ENHANCEMENT_GROUP){
opt->title = "Enhancement";
opt->desc = "";
opt->name = SANE_NAME_ENHANCEMENT;
opt->title = SANE_TITLE_ENHANCEMENT;
opt->desc = SANE_DESC_ENHANCEMENT;
opt->type = SANE_TYPE_GROUP;
opt->constraint_type = SANE_CONSTRAINT_NONE;
}
@ -2183,8 +2269,9 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
/* "Advanced" group ------------------------------------------------------ */
if(option==OPT_ADVANCED_GROUP){
opt->title = "Advanced";
opt->desc = "";
opt->name = SANE_NAME_ADVANCED;
opt->title = SANE_TITLE_ADVANCED;
opt->desc = SANE_DESC_ADVANCED;
opt->type = SANE_TYPE_GROUP;
opt->constraint_type = SANE_CONSTRAINT_NONE;
}
@ -2468,8 +2555,9 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
/* "Sensor" group ------------------------------------------------------ */
if(option==OPT_SENSOR_GROUP){
opt->title = "Sensors and Buttons";
opt->desc = "";
opt->name = SANE_NAME_SENSORS;
opt->title = SANE_TITLE_SENSORS;
opt->desc = SANE_DESC_SENSORS;
opt->type = SANE_TYPE_GROUP;
opt->constraint_type = SANE_CONSTRAINT_NONE;
}
@ -4371,6 +4459,42 @@ setup_buffers (struct fujitsu *s)
return ret;
}
/*
* This routine issues a SCSI GET WINDOW command to the scanner
*/
static SANE_Status
get_window (struct fujitsu *s)
{
unsigned char buffer[max_WDB_size];
size_t bufferLen;
SANE_Status ret = SANE_STATUS_GOOD;
DBG (10, "get_window: start\n");
/* The command specifies the number of bytes in the data phase
* the data phase has a header, followed by 1 or 2 window desc blocks
* the header specifies the number of bytes in 1 window desc block
*/
bufferLen = max_WDB_size;
/* cmd has data phase byte count */
set_GW_xferlen(get_windowB.cmd,bufferLen);
ret = do_cmd (
s, 1, 0,
get_windowB.cmd, get_windowB.size,
NULL, 0,
buffer, &bufferLen
);
hexdump(10, "GW: <<", buffer, bufferLen);
DBG (10, "get_window: finish\n");
return ret;
}
/*
* This routine issues a SCSI SET WINDOW command to the scanner, using the
* values currently in the scanner data structure.

Wyświetl plik

@ -15,7 +15,7 @@ enum fujitsu_Option
{
OPT_NUM_OPTS = 0,
OPT_MODE_GROUP,
OPT_STANDARD_GROUP,
OPT_SOURCE, /*fb/adf/front/back/duplex*/
OPT_MODE, /*mono/gray/color*/
OPT_X_RES, /*a range or a list*/
@ -160,8 +160,36 @@ struct fujitsu
int adbits;
int buffer_bytes;
/*FIXME: do we need the std cmd list? */
/*supported scsi commands*/
int has_cmd_msen;
int has_cmd_msel;
int has_cmd_lsen;
int has_cmd_lsel;
int has_cmd_change;
int has_cmd_rbuff;
int has_cmd_wbuff;
int has_cmd_cav;
int has_cmd_comp;
int has_cmd_gdbs;
int has_cmd_op;
int has_cmd_send;
int has_cmd_read;
int has_cmd_gwin;
int has_cmd_swin;
int has_cmd_sdiag;
int has_cmd_rdiag;
int has_cmd_scan;
int has_cmd_msen6;
int has_cmd_copy;
int has_cmd_rel;
int has_cmd_runit;
int has_cmd_msel6;
int has_cmd_inq;
int has_cmd_rs;
int has_cmd_tur;
/*FIXME: there are more vendor cmds? */
int has_cmd_subwindow;

Wyświetl plik

@ -11,7 +11,7 @@
:backend "fujitsu" ; name of backend
:url "http://www.thebility.com/fujitsu/"
:version "1.0.61" ; version of backend
:version "1.0.62" ; 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....