backend version 65, add endorser support, add quirks for fi-4990

merge-requests/1/head
m. allan noah 2008-06-25 02:30:54 +00:00
rodzic 29e8be57e5
commit f3ed5342cc
6 zmienionych plików z 798 dodań i 307 usunięć

Wyświetl plik

@ -1,3 +1,8 @@
2008-06-24 m. allan noah <kitno455 a t gmail d o t com>
* backend/fujitsu.[ch], backend/fujitsu-scsi.h,
doc/descriptions/fujitsu.desc, doc/sane-fujitsu.man:
backend version 65, add endorser support, add quirks for fi-4990
2008-06-24 Julien Blache <jb@jblache.org>
* backend/net.c: do not reload options behind the frontend's back
in sane_control_option; rather return SANE_STATUS_INVAL and warn

Wyświetl plik

@ -84,6 +84,8 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes)
/* ==================================================================== */
/* SCSI commands */
#define set_SCSI_opcode(out, val) out[0]=val
typedef struct
{
unsigned char *cmd;
@ -109,7 +111,7 @@ scsiblk;
#define MODE_SELECT 0x15
#define MODE_SENSE 0x1a
#define SCAN 0x1b
#define IMPRINTER 0xc1
#define ENDORSER 0xc1
#define HW_STATUS 0xc2
#define SCANNER_CONTROL 0xf1
@ -252,7 +254,7 @@ static scsiblk inquiryB = { inquiryC, sizeof (inquiryC) };
/* 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_imprinter(in) getbitfield(in+0x20, 1, 3)
#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)
@ -293,10 +295,10 @@ static scsiblk inquiryB = { inquiryC, sizeof (inquiryC) };
#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)
#define get_IN_has_scanner_ctl(in) getbitfield(in+0x31, 1, 1)
#define get_IN_has_cmd_subwindow(in) getbitfield(in+0x2b, 1, 0)
#define get_IN_has_cmd_endorser(in) getbitfield(in+0x2b, 1, 1)
#define get_IN_has_cmd_hw_status(in) getbitfield(in+0x2b, 1, 2)
#define get_IN_has_cmd_scanner_ctl(in) getbitfield(in+0x31, 1, 1)
#define get_IN_brightness_steps(in) getnbyte(in+0x52, 1)
#define get_IN_threshold_steps(in) getnbyte(in+0x53, 1)
@ -328,12 +330,12 @@ static scsiblk inquiryB = { inquiryC, sizeof (inquiryC) };
#define get_IN_compression_JPG_EXT(in) getbitfield(in+0x5a, 1, 2)
#define get_IN_compression_JPG_INDEP(in) getbitfield(in+0x5a, 1, 1)
#define get_IN_imprinter_mechanical(in) getbitfield(in+0x5c, 1, 7)
#define get_IN_imprinter_stamp(in) getbitfield(in+0x5c, 1, 6)
#define get_IN_imprinter_electrical(in) getbitfield(in+0x5c, 1, 5)
#define get_IN_imprinter_max_id(in) getbitfield(in+0x5c, 0x0f, 0)
#define get_IN_endorser_mechanical(in) getbitfield(in+0x5c, 1, 7)
#define get_IN_endorser_stamp(in) getbitfield(in+0x5c, 1, 6)
#define get_IN_endorser_electrical(in) getbitfield(in+0x5c, 1, 5)
#define get_IN_endorser_max_id(in) getbitfield(in+0x5c, 0x0f, 0)
#define get_IN_imprinter_size(in) getbitfield(in+0x5d, 3, 0)
#define get_IN_endorser_type(in) getbitfield(in+0x5d, 3, 0)
#define get_IN_connection(in) getbitfield(in+0x62, 3, 0)
@ -350,21 +352,15 @@ static scsiblk test_unit_readyB =
{ test_unit_readyC, sizeof (test_unit_readyC) };
/* ==================================================================== */
#if 0
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)
#endif
/* ==================================================================== */
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 */
static scsiblk set_windowB = { set_windowC, sizeof (set_windowC) };
#define SET_WINDOW_code 0x24
#define SET_WINDOW_len 10
#define set_SW_xferlen(sb, len) putnbyte(sb + 0x06, len, 3)
#define SW_header_len 8
#define SW_desc_len 64
/* ==================================================================== */
static unsigned char object_positionC[] =
@ -388,9 +384,9 @@ static scsiblk sendB = {sendC, sizeof (sendC)};
#define S_datatype_halftone_mask 0x02
#define S_datatype_gamma_function 0x03*/
#define S_datatype_lut_data 0x83
/*#define S_datatype_jpg_q_table 0x88
#define S_datatype_imprinter_data 0x90
#define S_EX_datatype_lut 0x01
/*#define S_datatype_jpg_q_table 0x88*/
#define S_datatype_endorser_data 0x90
/*#define S_EX_datatype_lut 0x01
#define S_EX_datatype_shading_data 0xa0
#define S_user_reg_gamma 0xc0
#define S_device_internal_info 0x03
@ -412,63 +408,82 @@ static unsigned char send_lutC[1034];
#define set_S_lut_dsize(sb, val) putnbyte(sb + 6, val, 2)
#define S_lut_data_offset 0x0a
/*
static unsigned char send_imprinterC[] =
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00};
static scsiblk send_imprinterB =
{send_imprinterC, sizeof(send_imprinterC)};
#define set_imprinter_cnt_dir(sb, val) setbitfield(sb + 0x01, 1, 5, val)
#define S_im_dir_inc 0
#define S_im_dir_dec 1
#define set_imprinter_lap24(sb, val) setbitfield(sb + 0x01, 1, 4, val)
#define S_im_ctr_24bit 1
#define S_im_ctr_16bit 0
#define set_imprinter_cstep(sb, val) setbitfield(sb + 0x01, 0x03, 0, val)
#define set_imprinter_uly(sb, val) putnbyte(sb + 0x06, val, 4)
#define set_imprinter_dirs(sb, val) setbitfield(sb + 0x0c, 0x03, 0, val)
#define S_im_dir_left_right 0
#define S_im_dir_top_bottom 1
#define S_im_dir_right_left 2
#define S_im_dir_bottom_top 3
#define set_imprinter_string_length(sb, len) putnbyte(sb + 0x11, len, 1)
#define max_imprinter_string_length 40
*/
/*new style cmd sending code*/
#define SEND_code 0x2a
#define SEND_len 10
/*
static unsigned char gamma_user_LUT_LS1K[512] = { 0x00 };
static scsiblk gamma_user_LUT_LS1K_LS1K =
{ gamma_user_LUT_LS1K, sizeof(gamma_user_LUT_LS1K) };
*/
#define S_e_data_min_len 18 /*minimum 18 bytes no string bytes*/
#define S_e_data_max_len 98 /*maximum 18 bytes plus 80 string bytes*/
#define set_S_endorser_data_id(sb, val) sb[0] = val
#define set_S_endorser_stamp(sb, val) setbitfield(sb + 0x01, 1, 7, val)
#define set_S_endorser_elec(sb, val) setbitfield(sb + 0x01, 1, 6, val)
#define set_S_endorser_decr(sb, val) setbitfield(sb + 0x01, 1, 5, val)
#define S_e_decr_inc 0
#define S_e_decr_dec 1
#define set_S_endorser_lap24(sb, val) setbitfield(sb + 0x01, 1, 4, val)
#define S_e_lap_24bit 1
#define S_e_lap_16bit 0
#define set_S_endorser_ctstep(sb, val) setbitfield(sb + 0x01, 0x03, 0, val)
#define set_S_endorser_ulx(sb, val) putnbyte(sb + 0x02, val, 4)
#define set_S_endorser_uly(sb, val) putnbyte(sb + 0x06, val, 4)
#define set_S_endorser_font(sb, val) sb[0xa] = val
#define S_e_font_horiz 0
#define S_e_font_vert 1
#define S_e_font_horiz_narrow 2
#define set_S_endorser_size(sb, val) sb[0xb] = val
#define set_S_endorser_revs(sb, val) setbitfield(sb + 0x0c, 0x01, 7, val)
#define S_e_revs_fwd 0
#define S_e_revs_rev 1
#define set_S_endorser_bold(sb, val) setbitfield(sb + 0x0c, 0x01, 2, val)
#define set_S_endorser_dirs(sb, val) setbitfield(sb + 0x0c, 0x03, 0, val)
#define S_e_dir_left_right 0
#define S_e_dir_top_bottom 1
#define S_e_dir_right_left 2
#define S_e_dir_bottom_top 3
#define set_S_endorser_string_length(sb, len) sb[0x11] = len
#define set_S_endorser_string(sb,val,len) memcpy(sb+0x12,val,(size_t)len)
/* ==================================================================== */
/*
static unsigned char imprinterC[] =
{ IMPRINTER, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static scsiblk imprinterB = { imprinterC, sizeof (imprinterC) };
#define set_IM_xfer_length(sb, val) putnbyte(sb + 0x7, val, 2)
static unsigned char endorserC[] =
{ ENDORSER, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static scsiblk endorserB = { endorserC, sizeof (endorserC) };
static unsigned char imprinter_descC[] =
#define set_E_xfer_length(sb, val) putnbyte(sb + 0x7, val, 2)
static unsigned char endorser_desc4C[] =
{ 0x00, 0x00, 0x00, 0x00 };
static scsiblk endorser_desc4B = {endorser_desc4C, sizeof(endorser_desc4C) };
static unsigned char endorser_desc6C[] =
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static scsiblk imprinter_descB = {imprinter_descC, sizeof(imprinter_descC) };
*/
/* enable/disable imprinter printing*/
#define set_IMD_enable(sb, val) setbitfield(sb + 0x01, 1, 7, val)
#define IMD_enable 0
#define IMD_disable 1
static scsiblk endorser_desc6B = {endorser_desc6C, sizeof(endorser_desc6C) };
#define set_ED_endorser_data_id(sb, val) sb[0] = val
/* enable/disable endorser printing*/
#define set_ED_stop(sb, val) setbitfield(sb + 0x01, 1, 7, val)
#define ED_start 0
#define ED_stop 1
/* specifies thes side of a document to be printed */
#define set_IMD_side(sb, val) setbitfield(sb + 0x01, 1, 6, val)
#define IMD_front 0
#define IMD_back 1
#define set_ED_side(sb, val) setbitfield(sb + 0x01, 1, 6, val)
#define ED_front 0
#define ED_back 1
/* format of the counter 16/24 bit*/
#define set_IMD_format(sb, val) setbitfield(sb + 0x01, 1, 5, val)
#define IMD_16_bit 0
#define IMD_24_bit 1
#define set_ED_lap24(sb, val) setbitfield(sb + 0x01, 1, 5, val)
#define ED_lap_16bit 0
#define ED_lap_24bit 1
/* initial count */
#define set_IMD_initial_count_16(sb, val) putnbyte(sb + 0x02, val, 2)
#define set_IMD_initial_count_24(sb, val) putnbyte(sb + 0x03, val, 3)
#define set_ED_initial_count_16(sb, val) putnbyte(sb + 0x02, val, 2)
#define set_ED_initial_count_24(sb, val) putnbyte(sb + 0x03, val, 3)
/* ==================================================================== */
@ -574,6 +589,7 @@ static scsiblk mode_select_10byteB = {
#define MSEL_dropout_CUSTOM 12
#define set_MSEL_buff_mode(sb, val) setbitfield(sb + 0x06, 0x03, 6, val)
#define set_MSEL_buff_clear(sb, val) setbitfield(sb + 0x07, 0x03, 6, val)
#define set_MSEL_prepick(sb, val) setbitfield(sb + 0x06, 0x03, 6, val)
@ -627,24 +643,14 @@ static scsiblk hw_statusB = { hw_statusC, sizeof (hw_statusC) };
/* ==================================================================== */
/* We use the same structure for both SET WINDOW and GET WINDOW. */
static unsigned char window_descriptor_headerC[] = {
0x00, 0x00, 0x00,
0x00, 0x00, 0x00, /* reserved */
0x00, 0x00, /* Window Descriptor Length */
};
static scsiblk window_descriptor_headerB=
{ window_descriptor_headerC, sizeof (window_descriptor_headerC) };
#define set_WPDB_wdblen(sb, len) putnbyte(sb + 0x06, len, 2)
/* ==================================================================== */
static unsigned char window_descriptor_blockC[] = {
/* 0x00 - Window Identifier
* 0x00 for 3096
* 0x00 (front) or 0x80 (back) for 3091
*/
0x00,
#define set_WD_wid(sb, val) sb[0] = val
#define WD_wid_front 0x00
#define WD_wid_back 0x80
@ -652,7 +658,6 @@ static unsigned char window_descriptor_blockC[] = {
/* 0x01 - Reserved (bits 7-1), AUTO (bit 0)
* Use 0x00 for 3091, 3096
*/
0x00,
#define set_WD_auto(sb, val) setbitfield(sb + 0x01, 1, 0, val)
#define get_WD_auto(sb) getbitfield(sb + 0x01, 1, 0)
@ -661,7 +666,6 @@ static unsigned char window_descriptor_blockC[] = {
* 3096 suppors 200,240,300,400; or 100-1600 in steps of 4
* if image processiong option installed
*/
0x00, 0x00,
#define set_WD_Xres(sb, val) putnbyte(sb + 0x02, val, 2)
#define get_WD_Xres(sb) getnbyte(sb + 0x02, 2)
@ -671,19 +675,16 @@ static unsigned char window_descriptor_blockC[] = {
* 3096 suppors 200,240,300,400; or 100-1600 in steps of 4
* if image processiong option installed
*/
0x00, 0x00,
#define set_WD_Yres(sb, val) putnbyte(sb + 0x04, val, 2)
#define get_WD_Yres(sb) getnbyte(sb + 0x04, 2)
/* 0x06-0x09 - Upper Left X in 1/1200 inch
*/
0x00, 0x00, 0x00, 0x00,
#define set_WD_ULX(sb, val) putnbyte(sb + 0x06, val, 4)
#define get_WD_ULX(sb) getnbyte(sb + 0x06, 4)
/* 0x0a-0x0d - Upper Left Y in 1/1200 inch
*/
0x00, 0x00, 0x00, 0x00,
#define set_WD_ULY(sb, val) putnbyte(sb + 0x0a, val, 4)
#define get_WD_ULY(sb) getnbyte(sb + 0x0a, 4)
@ -692,7 +693,6 @@ static unsigned char window_descriptor_blockC[] = {
* 3096 left+width max 14592
* also limited to page size, see bytes 0x35ff.
*/
0x00, 0x00, 0x00, 0x00,
#define set_WD_width(sb, val) putnbyte(sb + 0x0e, val, 4)
#define get_WD_width(sb) getnbyte(sb + 0x0e, 4)
@ -701,7 +701,6 @@ static unsigned char window_descriptor_blockC[] = {
* 3096 top+height max 20736, also if left+width>13199,
* top+height has to be less than 19843
*/
0x00, 0x00, 0x00, 0x00,
#define set_WD_length(sb, val) putnbyte(sb + 0x12, val, 4)
#define get_WD_length(sb) getnbyte(sb + 0x12, 4)
@ -711,7 +710,6 @@ static unsigned char window_descriptor_blockC[] = {
..., E0-FF)
* use 0x00 for user defined dither pattern
*/
0x00,
#define set_WD_brightness(sb, val) sb[0x16] = val
#define get_WD_brightness(sb) sb[0x16]
@ -722,7 +720,6 @@ static unsigned char window_descriptor_blockC[] = {
* 3096 0x00 = use "simplified dynamic treshold", otherwise
* same as above but resolution is only 64 steps.
*/
0x00,
#define set_WD_threshold(sb, val) sb[0x17] = val
#define get_WD_threshold(sb) sb[0x17]
@ -730,7 +727,6 @@ static unsigned char window_descriptor_blockC[] = {
* 3091 - not supported, always use 0x00
* 3096 - the same
*/
0x00,
#define set_WD_contrast(sb, val) sb[0x18] = val
#define get_WD_contrast(sb) sb[0x18]
@ -739,7 +735,6 @@ static unsigned char window_descriptor_blockC[] = {
* 0x02 for grayscale, 0x05 for color.
* 3096 - same but minus color.
*/
0x00,
#define set_WD_composition(sb, val) sb[0x19] = val
#define get_WD_composition(sb) sb[0x19]
#define WD_comp_LA 0
@ -753,7 +748,6 @@ static unsigned char window_descriptor_blockC[] = {
* 3091 - use 0x01 for b/w or 0x08 for gray/color
* 3096 - use 0x01 for b/w or 0x08 for gray
*/
0x08,
#define set_WD_bitsperpixel(sb, val) sb[0x1a] = val
#define get_WD_bitsperpixel(sb) sb[0x1a]
@ -768,7 +762,6 @@ static unsigned char window_descriptor_blockC[] = {
* pattern number, three builtin and five downloadable
* supported; higher numbers = error.
*/
0x00, 0x00,
#define set_WD_halftone(sb, val) putnbyte(sb + 0x1b, val, 2)
#define get_WD_halftone(sb) getnbyte(sb + 0x1b, 2)
@ -778,7 +771,6 @@ static unsigned char window_descriptor_blockC[] = {
* 3096: the same; bit 7 must be set for gray and not
* set for b/w.
*/
0x00,
#define set_WD_rif(sb, val) setbitfield(sb + 0x1d, 1, 7, val)
#define get_WD_rif(sb) getbitfield(sb + 0x1d, 1, 7)
@ -786,14 +778,12 @@ static unsigned char window_descriptor_blockC[] = {
* 3091 not supported, use 0x00
* 3096 not supported, use 0x00
*/
0x00, 0x00, /* 0x1e *//* bit ordering */
#define set_WD_bitorder(sb, val) putnbyte(sb + 0x1e, val, 2)
#define get_WD_bitorder(sb) getnbyte(sb + 0x1e, 2)
/* 0x20 - compression type
* not supported on smaller models, use 0x00
*/
0x00,
#define set_WD_compress_type(sb, val) sb[0x20] = val
#define get_WD_compress_type(sb) sb[0x20]
#define WD_cmp_NONE 0
@ -810,19 +800,16 @@ static unsigned char window_descriptor_blockC[] = {
* specify "k" parameter with MR compress,
* or with JPEG- Q param, 0-7
*/
0x00,
#define set_WD_compress_arg(sb, val) sb[0x21] = val
#define get_WD_compress_arg(sb) sb[0x21]
/* 0x22-0x27 - reserved */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0x28 - vendor unique id code, decides meaning of remaining bytes
* 0xc1 = color mode (fi-series)
* 0xc0 = weird mode (M3091 and M3092)
* 0x00 = mono mode (other M-series and fi-series)
*/
0x00,
#define set_WD_vendor_id_code(sb, val) sb[0x28] = val
#define get_WD_vendor_id_code(sb) sb[0x28]
#define WD_VUID_MONO 0x00
@ -830,7 +817,6 @@ static unsigned char window_descriptor_blockC[] = {
#define WD_VUID_COLOR 0xc1
/* 0x29 common gamma */
0x00,
#define set_WD_gamma(sb, val) sb[0x29] = val
#define get_WD_gamma(sb) sb[0x29]
#define WD_gamma_DEFAULT 0
@ -840,8 +826,6 @@ static unsigned char window_descriptor_blockC[] = {
/*==================================================================*/
/* 0x2a-0x34 - vary based on vuid */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00,
/*==================================================================*/
/* vuid 0x00, mono params */
@ -964,9 +948,6 @@ static unsigned char window_descriptor_blockC[] = {
/*==================================================================*/
/* 0x35-0x3d - paper size common to all vuids */
0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
#define set_WD_paper_selection(sb, val) setbitfield(sb + 0x35, 3, 6, val)
#define WD_paper_SEL_UNDEFINED 0
@ -980,7 +961,6 @@ static unsigned char window_descriptor_blockC[] = {
/*==================================================================*/
/* 0x3e-end - vary based on vuid */
0x00, 0x00
/*==================================================================*/
/* vuid 0xc0, 3091/2 - lots more params after 3f */
@ -1004,10 +984,6 @@ static unsigned char window_descriptor_blockC[] = {
#define WD_dtc_selection_SIMPLIFIED 2
/*3f reserved*/
};
static scsiblk window_descriptor_blockB =
{ window_descriptor_blockC, sizeof (window_descriptor_blockC) };
#define max_WDB_size 0xc8
/* ==================================================================== */

Plik diff jest za duży Load Diff

Wyświetl plik

@ -52,6 +52,16 @@ enum fujitsu_Option
OPT_BLUE_OFFSET,
OPT_USE_SWAPFILE,
OPT_ENDORSER_GROUP,
OPT_ENDORSER,
OPT_ENDORSER_BITS,
OPT_ENDORSER_VAL,
OPT_ENDORSER_STEP,
OPT_ENDORSER_Y,
OPT_ENDORSER_FONT,
OPT_ENDORSER_DIR,
OPT_ENDORSER_STRING,
OPT_SENSOR_GROUP,
OPT_TOP,
OPT_A3,
@ -149,7 +159,7 @@ struct fujitsu
/* members in order found in scsi data... */
int has_operator_panel;
int has_barcode;
int has_imprinter;
int has_endorser;
int has_duplex;
int has_transparency;
int has_flatbed;
@ -224,7 +234,8 @@ struct fujitsu
int has_comp_JPG2;
int has_comp_JPG3;
/*FIXME: endorser data? */
/*FIXME: more endorser data? */
int endorser_type;
/*FIXME: barcode data? */
@ -264,6 +275,7 @@ struct fujitsu
int even_scan_line; /* need even number of bytes in a scanline (fi-5900) */
int ghs_in_rs;
int window_gamma;
int endorser_string_len;
int has_vuid_mono; /* mono set window data */
int has_vuid_3091; /* 3091/2 set window data */
@ -329,6 +341,14 @@ struct fujitsu
SANE_Range green_offset_range;
SANE_Range blue_offset_range;
/*endorser group*/
SANE_Range endorser_bits_range;
SANE_Range endorser_val_range;
SANE_Range endorser_step_range;
SANE_Range endorser_y_range;
SANE_String_Const endorser_font_list[6];
SANE_String_Const endorser_dir_list[3];
/* --------------------------------------------------------------------- */
/* changeable vars to hold user input. modified by SANE_Options above */
@ -371,6 +391,16 @@ struct fujitsu
int blue_offset;
int use_temp_file;
/*endorser group*/
int u_endorser;
int u_endorser_bits;
int u_endorser_val;
int u_endorser_step;
int u_endorser_y;
int u_endorser_font;
int u_endorser_dir;
char u_endorser_string[81]; /*max length, plus null byte*/
/* --------------------------------------------------------------------- */
/* values which are derived from setting the options above */
/* the user never directly modifies these */
@ -502,6 +532,20 @@ struct fujitsu
#define DF_LENGTH 3
#define DF_BOTH 4
#define FONT_H 0
#define FONT_HB 1
#define FONT_HN 2
#define FONT_V 3
#define FONT_VB 4
#define DIR_TTB 0
#define DIR_BTT 1
/* endorser type, same as scsi inquiry data */
#define ET_OLD 0
#define ET_30 1
#define ET_40 2
/* ------------------------------------------------------------------------- */
#define MM_PER_INCH 25.4
@ -624,6 +668,8 @@ int get_page_width (struct fujitsu *s);
int get_page_height (struct fujitsu *s);
static SANE_Status send_lut (struct fujitsu *s);
static SANE_Status send_endorser (struct fujitsu *s);
static SANE_Status endorser (struct fujitsu *s);
static SANE_Status set_window (struct fujitsu *s);
/*

Wyświetl plik

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

Wyświetl plik

@ -1,4 +1,4 @@
.TH sane-fujitsu 5 "2007-07-14" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.TH sane-fujitsu 5 "2008-06-24" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.IX sane-fujitsu
.SH NAME
@ -10,7 +10,7 @@ The
library implements a SANE (Scanner Access Now Easy) backend which
provides access to most Fujitsu flatbed and ADF scanners.
This document describes the rewritten backend versions 1.0.21 and greater.
This document describes the rewritten backend, version 21 and greater.
The backend supports lineart, halftone, grayscale, and color
scanning for most USB and SCSI scanners, depending on hardware capabilities.
@ -261,6 +261,18 @@ fi-4220C and basic USB support: Ron Cemer <ron a t roncemer d o t com>
fi-4120, fi-series color support, backend re-write, current maintainer:
m. allan noah: <kitno455 a t gmail d o t com>
JPEG output support funded by:
Archivista GmbH
www.archivista.ch
Endorser support funded by:
O A S Oilfield Accounting Service Ltd
1500, 840 - 7th Avenue S.W.
Calgary, Alberta
T2P 3G2 Canada
1-403-263-2600
www.oas.ca
.SH "SEE ALSO"
sane(7),
sane-scsi(5),