kopia lustrzana https://gitlab.com/sane-project/backends
backend version 64,
use model and serial to build sane.name (idea from Ryan Duryea), allow both serial_name and device_name to sane_open scanner, simulate missing VPD data for M3097G, probe scanner for color interlacing mode instead of hardcoding, other minor cleanupsmerge-requests/1/head
rodzic
1e8ff4c986
commit
ad779e0865
|
@ -1,3 +1,11 @@
|
||||||
|
2008-05-30 m. allan noah <kitno455 a t gmail d o t com>
|
||||||
|
* backend/fujitsu.[ch], backend/fujitsu-scsi.h,
|
||||||
|
doc/descriptions/fujitsu.desc: backend version 64,
|
||||||
|
use model and serial to build sane.name (idea from Ryan Duryea),
|
||||||
|
allow both serial_name and device_name to sane_open scanner,
|
||||||
|
simulate missing VPD data for M3097G, probe scanner for color
|
||||||
|
interlacing mode instead of hardcoding, other minor cleanups
|
||||||
|
|
||||||
2008-05-29 Nicolas Martin <nicols-guest at users.alioth.debian.org>
|
2008-05-29 Nicolas Martin <nicols-guest at users.alioth.debian.org>
|
||||||
* doc/sane-pixma.man: man update.
|
* doc/sane-pixma.man: man update.
|
||||||
* backend/pixma_io_sanei.c: update status types, and take into
|
* backend/pixma_io_sanei.c: update status types, and take into
|
||||||
|
|
|
@ -97,6 +97,7 @@ scsiblk;
|
||||||
#define RELEASE_UNIT 0x17
|
#define RELEASE_UNIT 0x17
|
||||||
#define INQUIRY 0x12
|
#define INQUIRY 0x12
|
||||||
#define REQUEST_SENSE 0x03
|
#define REQUEST_SENSE 0x03
|
||||||
|
#define READ_DIAGNOSTIC 0x1c
|
||||||
#define SEND_DIAGNOSTIC 0x1d
|
#define SEND_DIAGNOSTIC 0x1d
|
||||||
#define TEST_UNIT_READY 0x00
|
#define TEST_UNIT_READY 0x00
|
||||||
#define SET_WINDOW 0x24
|
#define SET_WINDOW 0x24
|
||||||
|
@ -112,17 +113,55 @@ scsiblk;
|
||||||
#define HW_STATUS 0xc2
|
#define HW_STATUS 0xc2
|
||||||
#define SCANNER_CONTROL 0xf1
|
#define SCANNER_CONTROL 0xf1
|
||||||
|
|
||||||
|
|
||||||
/* ==================================================================== */
|
/* ==================================================================== */
|
||||||
/*
|
|
||||||
|
#if 0
|
||||||
static unsigned char reserve_unitC[] =
|
static unsigned char reserve_unitC[] =
|
||||||
{ RESERVE_UNIT, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
{ RESERVE_UNIT, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
static scsiblk reserve_unitB = { reserve_unitC, sizeof (reserve_unitC) };
|
static scsiblk reserve_unitB = { reserve_unitC, sizeof (reserve_unitC) };
|
||||||
|
|
||||||
|
/* ==================================================================== */
|
||||||
|
|
||||||
static unsigned char release_unitC[] =
|
static unsigned char release_unitC[] =
|
||||||
{ RELEASE_UNIT, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
{ RELEASE_UNIT, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
static scsiblk release_unitB = { release_unitC, sizeof (release_unitC) };
|
static scsiblk release_unitB = { release_unitC, sizeof (release_unitC) };
|
||||||
*/
|
#endif
|
||||||
|
|
||||||
|
/* ==================================================================== */
|
||||||
|
|
||||||
|
static unsigned char send_diagnosticC[] =
|
||||||
|
{ SEND_DIAGNOSTIC, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
static scsiblk send_diagnosticB = {send_diagnosticC, sizeof(send_diagnosticC)};
|
||||||
|
|
||||||
|
#define set_SD_slftst(in, val) setbitfield(in + 1, 1, 2, val)
|
||||||
|
#define set_SD_xferlen(in, len) putnbyte(in + 3, len, 2)
|
||||||
|
|
||||||
|
/* for 'FIRST READ DATE \0YMD' */
|
||||||
|
#define set_SD_date_year(in, b) putnbyte(in + 0x11, b, 1)
|
||||||
|
#define set_SD_date_month(in, b) putnbyte(in + 0x12, b, 1)
|
||||||
|
#define set_SD_date_date(in, b) putnbyte(in + 0x13, b, 1)
|
||||||
|
|
||||||
|
/* ==================================================================== */
|
||||||
|
|
||||||
|
static unsigned char read_diagnosticC[] =
|
||||||
|
{ READ_DIAGNOSTIC, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
static scsiblk read_diagnosticB = {read_diagnosticC, sizeof(read_diagnosticC)};
|
||||||
|
|
||||||
|
#define set_RD_xferlen(in, len) putnbyte(in + 3, len, 2)
|
||||||
|
|
||||||
|
/* for 'FIRST READ DATE \0YMD' */
|
||||||
|
#define get_RD_date_status(in) in[0]
|
||||||
|
#define RD_date_stored 0
|
||||||
|
#define RD_date_not_stored 0xff
|
||||||
|
|
||||||
|
/* for 'GET FIRST DATE ' */
|
||||||
|
#define get_RD_date_year(in) in[1]
|
||||||
|
#define get_RD_date_month(in) in[2]
|
||||||
|
#define get_RD_date_date(in) in[3]
|
||||||
|
|
||||||
|
/* for 'GET DEVICE ID ' */
|
||||||
|
#define get_RD_id_serial(in) getnbyte (in, 4)
|
||||||
|
|
||||||
/* ==================================================================== */
|
/* ==================================================================== */
|
||||||
|
|
||||||
static unsigned char scanner_controlC[] =
|
static unsigned char scanner_controlC[] =
|
||||||
|
@ -223,8 +262,8 @@ static scsiblk inquiryB = { inquiryC, sizeof (inquiryC) };
|
||||||
#define get_IN_buffer_bytes(in) getnbyte(in + 0x22, 4)
|
#define get_IN_buffer_bytes(in) getnbyte(in + 0x22, 4)
|
||||||
|
|
||||||
/*supported scsi commands*/
|
/*supported scsi commands*/
|
||||||
#define get_IN_has_cmd_msen(in) getbitfield(in+0x26, 1, 1)
|
#define get_IN_has_cmd_msen10(in) getbitfield(in+0x26, 1, 1)
|
||||||
#define get_IN_has_cmd_msel(in) getbitfield(in+0x26, 1, 0)
|
#define get_IN_has_cmd_msel10(in) getbitfield(in+0x26, 1, 0)
|
||||||
|
|
||||||
#define get_IN_has_cmd_lsen(in) getbitfield(in+0x27, 1, 7)
|
#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_lsel(in) getbitfield(in+0x27, 1, 6)
|
||||||
|
@ -311,13 +350,13 @@ static scsiblk test_unit_readyB =
|
||||||
{ test_unit_readyC, sizeof (test_unit_readyC) };
|
{ test_unit_readyC, sizeof (test_unit_readyC) };
|
||||||
|
|
||||||
/* ==================================================================== */
|
/* ==================================================================== */
|
||||||
|
#if 0
|
||||||
static unsigned char get_windowC[] =
|
static unsigned char get_windowC[] =
|
||||||
{ GET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
|
{ GET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
|
||||||
/* opcode, lun, _____4 X reserved____, transfer length, control byte */
|
/* opcode, lun, _____4 X reserved____, transfer length, control byte */
|
||||||
static scsiblk get_windowB = { get_windowC, sizeof (get_windowC) };
|
static scsiblk get_windowB = { get_windowC, sizeof (get_windowC) };
|
||||||
#define set_GW_xferlen(sb, len) putnbyte(sb + 0x06, len, 3)
|
#define set_GW_xferlen(sb, len) putnbyte(sb + 0x06, len, 3)
|
||||||
|
#endif
|
||||||
/* ==================================================================== */
|
/* ==================================================================== */
|
||||||
|
|
||||||
static unsigned char set_windowC[] =
|
static unsigned char set_windowC[] =
|
||||||
|
@ -340,7 +379,6 @@ static scsiblk object_positionB =
|
||||||
|
|
||||||
/* ==================================================================== */
|
/* ==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
static unsigned char sendC[] =
|
static unsigned char sendC[] =
|
||||||
{SEND, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
{SEND, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||||
static scsiblk sendB = {sendC, sizeof (sendC)};
|
static scsiblk sendB = {sendC, sizeof (sendC)};
|
||||||
|
@ -779,18 +817,19 @@ static unsigned char window_descriptor_blockC[] = {
|
||||||
/* 0x22-0x27 - reserved */
|
/* 0x22-0x27 - reserved */
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
/* 0x28 - vendor id code
|
/* 0x28 - vendor unique id code, decides meaning of remaining bytes
|
||||||
* 3091 - use 0xc0
|
* 0xc1 = color mode (fi-series)
|
||||||
* 3096 - use 0xc0
|
* 0xc0 = weird mode (M3091 and M3092)
|
||||||
|
* 0x00 = mono mode (other M-series and fi-series)
|
||||||
*/
|
*/
|
||||||
0x00,
|
0x00,
|
||||||
#define set_WD_vendor_id_code(sb, val) sb[0x28] = val
|
#define set_WD_vendor_id_code(sb, val) sb[0x28] = val
|
||||||
#define get_WD_vendor_id_code(sb) sb[0x28]
|
#define get_WD_vendor_id_code(sb) sb[0x28]
|
||||||
|
#define WD_VUID_MONO 0x00
|
||||||
|
#define WD_VUID_3091 0xc0
|
||||||
|
#define WD_VUID_COLOR 0xc1
|
||||||
|
|
||||||
/* 0x29 - pattern setting
|
/* 0x29 common gamma */
|
||||||
* 3091 - use 0x00
|
|
||||||
* 3096 - reserved, use 0x00
|
|
||||||
*/
|
|
||||||
0x00,
|
0x00,
|
||||||
#define set_WD_gamma(sb, val) sb[0x29] = val
|
#define set_WD_gamma(sb, val) sb[0x29] = val
|
||||||
#define get_WD_gamma(sb) sb[0x29]
|
#define get_WD_gamma(sb) sb[0x29]
|
||||||
|
@ -799,25 +838,17 @@ static unsigned char window_descriptor_blockC[] = {
|
||||||
#define WD_gamma_SOFT 2
|
#define WD_gamma_SOFT 2
|
||||||
#define WD_gamma_SHARP 3
|
#define WD_gamma_SHARP 3
|
||||||
|
|
||||||
/* 0x2a - outline/scanning order
|
/*==================================================================*/
|
||||||
* 3091 - scanning order. Only 0x00 (line order) supported
|
/* 0x2a-0x34 - vary based on vuid */
|
||||||
* 3096 - outlining. 0x00=off, 0x80=on. 0x80 only permitted
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
* when image processing option fitted.
|
0x00, 0x00, 0x00,
|
||||||
*/
|
|
||||||
0x00,
|
/*==================================================================*/
|
||||||
|
/* vuid 0x00, mono params */
|
||||||
|
|
||||||
#define set_WD_outline(sb, val) sb[0x2a] = val
|
#define set_WD_outline(sb, val) sb[0x2a] = val
|
||||||
#define get_WD_outline(sb) sb[0x2a]
|
#define get_WD_outline(sb) sb[0x2a]
|
||||||
#define set_WD_scanning_order(sb, val) sb[0x2a] = val
|
|
||||||
#define get_WD_scanning_order(sb) sb[0x2a]
|
|
||||||
|
|
||||||
/* 0x2b - emphasis/scanning order argument
|
|
||||||
* 3091 - scanning order argument. Only 0x00 (RGB) supported
|
|
||||||
* 3096 - emphasis. 0x00=off, others only permitted when
|
|
||||||
* image processing option fitted:
|
|
||||||
* 0x2F=low emphasis, 0x4F=medium emphasis,
|
|
||||||
* 0x7F=high emphasis, 0xFF=smoothing
|
|
||||||
*/
|
|
||||||
0x00,
|
|
||||||
#define set_WD_emphasis(sb, val) sb[0x2b] = val
|
#define set_WD_emphasis(sb, val) sb[0x2b] = val
|
||||||
#define get_WD_emphasis(sb) sb[0x2b]
|
#define get_WD_emphasis(sb) sb[0x2b]
|
||||||
#define WD_emphasis_NONE 0x00
|
#define WD_emphasis_NONE 0x00
|
||||||
|
@ -826,41 +857,17 @@ static unsigned char window_descriptor_blockC[] = {
|
||||||
#define WD_emphasis_HIGH 0x50
|
#define WD_emphasis_HIGH 0x50
|
||||||
#define WD_emphasis_SMOOTH 0x80
|
#define WD_emphasis_SMOOTH 0x80
|
||||||
|
|
||||||
/* 0x2c - auto separation
|
|
||||||
* 3091 - reserved, use 0x00
|
|
||||||
* 3096 - auto separation. 0x00=off, 0x80=on. 0x80 only
|
|
||||||
* permitted when image processing option fitted.
|
|
||||||
*/
|
|
||||||
0x00,
|
|
||||||
#define set_WD_auto_sep(sb, val) setbitfield(sb + 0x2c, 1, 7, val)
|
#define set_WD_auto_sep(sb, val) setbitfield(sb + 0x2c, 1, 7, val)
|
||||||
#define get_WD_auto_sep(sb) getbitfield(sb + 0x2c, 1, 7)
|
#define get_WD_auto_sep(sb) getbitfield(sb + 0x2c, 1, 7)
|
||||||
|
|
||||||
/* 0x2d - mirroring/single color
|
|
||||||
* 3091 - determines which color is used in monochrome
|
|
||||||
* scans: 0x00/0x04=G,0x01=B,0x02=R
|
|
||||||
* 3096 - window mirroring. 0x00=off, 0x80=on. 0x80 only
|
|
||||||
* permitted when image processing option fitted.
|
|
||||||
*/
|
|
||||||
0x00,
|
|
||||||
#define set_WD_mirroring(sb, val) setbitfield(sb + 0x2d, 1, 7, val)
|
#define set_WD_mirroring(sb, val) setbitfield(sb + 0x2d, 1, 7, val)
|
||||||
#define get_WD_mirroring(sb) getbitfield(sb + 0x2d, 1, 7)
|
#define get_WD_mirroring(sb) getbitfield(sb + 0x2d, 1, 7)
|
||||||
#define set_WD_lamp_color(sb, val) sb[0x2d] = val
|
|
||||||
#define get_WD_lamp_color(sb) sb[0x2d]
|
|
||||||
#define WD_LAMP_DEFAULT 0x00
|
|
||||||
#define WD_LAMP_BLUE 0x01
|
|
||||||
#define WD_LAMP_RED 0x02
|
|
||||||
#define WD_LAMP_GREEN 0x04
|
|
||||||
|
|
||||||
/* 0x2e - variance/bit padding
|
/*also called Auto-II mode?*/
|
||||||
* 3091 - unsupported, use 0x00
|
|
||||||
* 3096 - variance rate for dynamic treshold. 0x00=default,
|
|
||||||
* 0x1f, 0x3f, ... 0xff = small...large
|
|
||||||
*/
|
|
||||||
0x00,
|
|
||||||
#define set_WD_var_rate_dyn_thresh(sb, val) sb[0x2e] = val
|
#define set_WD_var_rate_dyn_thresh(sb, val) sb[0x2e] = val
|
||||||
#define get_WD_var_rate_dyn_thresh(sb) sb[0x2e]
|
#define get_WD_var_rate_dyn_thresh(sb) sb[0x2e]
|
||||||
|
|
||||||
0x00, /* 0x2f *//* DTC mode */
|
/*also called Auto-I mode?*/
|
||||||
#define set_WD_dtc_threshold_curve(sb, val) setbitfield(sb + 0x2f, 7, 0, val)
|
#define set_WD_dtc_threshold_curve(sb, val) setbitfield(sb + 0x2f, 7, 0, val)
|
||||||
#define get_WD_dtc_threshold_curve(sb) getbitfield(sb + 0x2f, 7, 0)
|
#define get_WD_dtc_threshold_curve(sb) getbitfield(sb + 0x2f, 7, 0)
|
||||||
#define set_WD_gradation(sb, val) setbitfield(sb + 0x2f, 3, 3, val)
|
#define set_WD_gradation(sb, val) setbitfield(sb + 0x2f, 3, 3, val)
|
||||||
|
@ -876,7 +883,6 @@ static unsigned char window_descriptor_blockC[] = {
|
||||||
#define WD_filtering_BALLPOINT 0
|
#define WD_filtering_BALLPOINT 0
|
||||||
#define WD_filtering_ORDINARY 1
|
#define WD_filtering_ORDINARY 1
|
||||||
|
|
||||||
0x00, /* 0x30 *//* DTC mode 2 */
|
|
||||||
#define set_WD_background(sb, val) setbitfield(sb + 0x30, 1, 0, val)
|
#define set_WD_background(sb, val) setbitfield(sb + 0x30, 1, 0, val)
|
||||||
#define get_WD_background(sb) getbitfield(sb + 0x30, 1, 0)
|
#define get_WD_background(sb) getbitfield(sb + 0x30, 1, 0)
|
||||||
#define WD_background_WHITE 0
|
#define WD_background_WHITE 0
|
||||||
|
@ -892,113 +898,112 @@ static unsigned char window_descriptor_blockC[] = {
|
||||||
#define set_WD_noise_removal(sb, val) setbitfield(sb + 0x30, 1, 5, !val)
|
#define set_WD_noise_removal(sb, val) setbitfield(sb + 0x30, 1, 5, !val)
|
||||||
#define get_WD_noise_removal(sb) !getbitfield(sb + 0x30, 1, 5)
|
#define get_WD_noise_removal(sb) !getbitfield(sb + 0x30, 1, 5)
|
||||||
|
|
||||||
0x00, /* 0x31 *//* reserved */
|
/*31 reserved*/
|
||||||
|
|
||||||
|
|
||||||
/* 0x32 - scanning mode/white level follower
|
|
||||||
* 3091 - scan mode 0x00=normal, 0x02=high quality
|
|
||||||
* 3096 - white level follower, 0x00=default,
|
|
||||||
* 0x80 enable (line mode), 0xc0 disable (photo mode)
|
|
||||||
*/
|
|
||||||
0x00,
|
|
||||||
#define set_WD_white_level_follow(sb, val) sb[0x32] = val
|
#define set_WD_white_level_follow(sb, val) sb[0x32] = val
|
||||||
#define get_WD_white_level_follow(sb) sb[0x32]
|
#define get_WD_white_level_follow(sb) sb[0x32]
|
||||||
#define set_WD_quality(sb, val) sb[0x32] = val
|
|
||||||
#define get_WD_quality(sb) sb[0x32]
|
|
||||||
#define WD_white_level_follow_DEFAULT 0x00
|
#define WD_white_level_follow_DEFAULT 0x00
|
||||||
#define WD_white_level_follow_ENABLED 0x80
|
#define WD_white_level_follow_ENABLED 0x80
|
||||||
#define WD_white_level_follow_DISABLED 0xC0
|
#define WD_white_level_follow_DISABLED 0xC0
|
||||||
|
|
||||||
/* 0x33,0x34 - subwindow list
|
|
||||||
* 3091 reserved, use 0x00
|
|
||||||
* 3096 bits 0-3 of byte 34 denote use of subwindows 1...4
|
|
||||||
*/
|
|
||||||
0x00, 0x00,
|
|
||||||
#define set_WD_subwindow_list(sb, val) putnbyte(sb + 0x33, val, 2)
|
#define set_WD_subwindow_list(sb, val) putnbyte(sb + 0x33, val, 2)
|
||||||
#define get_WD_subwindow_list(sb) getnbyte(sb + 0x33, 2)
|
#define get_WD_subwindow_list(sb) getnbyte(sb + 0x33, 2)
|
||||||
|
|
||||||
/* 0x35 - paper size
|
/*==================================================================*/
|
||||||
* 3091 unsupported, always use 0xc0
|
/* vuid 0xc1, color params */
|
||||||
* 3096 if bits 6-7 both set, custom paper size enabled,
|
|
||||||
* bytes 0x36-0x3d used. Otherwise, a number of
|
#define set_WD_scanning_order(sb, val) sb[0x2a] = val
|
||||||
* valid fixed values denote common paper formats.
|
#define get_WD_scanning_order(sb) sb[0x2a]
|
||||||
*/
|
#define WD_SCAN_ORDER_LINE 0
|
||||||
0xC0,
|
#define WD_SCAN_ORDER_DOT 1
|
||||||
|
#define WD_SCAN_ORDER_FACE 2
|
||||||
|
|
||||||
|
#define set_WD_scanning_order_arg(sb, val) sb[0x2b] = val
|
||||||
|
#define get_WD_scanning_order_arg(sb) sb[0x2b]
|
||||||
|
#define WD_SCAN_ARG_RGB 0
|
||||||
|
#define WD_SCAN_ARG_RBG 1
|
||||||
|
#define WD_SCAN_ARG_GRB 2
|
||||||
|
#define WD_SCAN_ARG_GBR 3
|
||||||
|
#define WD_SCAN_ARG_BRG 4
|
||||||
|
#define WD_SCAN_ARG_BGR 5
|
||||||
|
|
||||||
|
/*2c-2d reserved*/
|
||||||
|
|
||||||
|
/*like vuid 00, but in different location*/
|
||||||
|
#define set_WD_c1_emphasis(sb, val) sb[0x2e] = val
|
||||||
|
#define get_WD_c1_emphasis(sb) sb[0x2e]
|
||||||
|
#define set_WD_c1_mirroring(sb, val) setbitfield(sb + 0x2f, 1, 7, val)
|
||||||
|
#define get_WD_c1_mirroring(sb) getbitfield(sb + 0x2f, 1, 7)
|
||||||
|
|
||||||
|
/*30-31 reserved*/
|
||||||
|
|
||||||
|
/*32 reserved for wlf like vuid 00*/
|
||||||
|
|
||||||
|
/*33-34 reserved*/
|
||||||
|
|
||||||
|
/*==================================================================*/
|
||||||
|
/* vuid 0xc0, 3091/2 params */
|
||||||
|
|
||||||
|
/*2a-2b same as vuid 0xc1*/
|
||||||
|
|
||||||
|
#define set_WD_lamp_color(sb, val) sb[0x2d] = val
|
||||||
|
#define get_WD_lamp_color(sb) sb[0x2d]
|
||||||
|
#define WD_LAMP_DEFAULT 0x00
|
||||||
|
#define WD_LAMP_BLUE 0x01
|
||||||
|
#define WD_LAMP_RED 0x02
|
||||||
|
#define WD_LAMP_GREEN 0x04
|
||||||
|
|
||||||
|
/*2e-31 reserved*/
|
||||||
|
|
||||||
|
#define set_WD_quality(sb, val) sb[0x32] = val
|
||||||
|
#define get_WD_quality(sb) sb[0x32]
|
||||||
|
#define WD_QUAL_NORMAL 0x00
|
||||||
|
#define WD_QUAL_HIGH 0x02
|
||||||
|
|
||||||
|
/*33-34 reserved*/
|
||||||
|
|
||||||
|
/*==================================================================*/
|
||||||
|
/* 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 set_WD_paper_selection(sb, val) setbitfield(sb + 0x35, 3, 6, val)
|
||||||
#define WD_paper_SEL_UNDEFINED 0
|
#define WD_paper_SEL_UNDEFINED 0
|
||||||
#define WD_paper_SEL_NON_STANDARD 3
|
#define WD_paper_SEL_NON_STANDARD 3
|
||||||
|
|
||||||
/* we no longer use these, custom size (0xc0) overrides,
|
|
||||||
and more recent scanners only use custom size anyway
|
|
||||||
#define get_WD_paper_selection(sb) getbitfield(sb + 0x35, 3, 6)
|
|
||||||
#define WD_paper_SEL_STANDARD 2
|
|
||||||
|
|
||||||
#define set_WD_paper_orientation(sb, val) setbitfield(sb + 0x35, 1, 4, val)
|
|
||||||
#define get_WD_paper_orientation(sb) getbitfield(sb + 0x35, 1, 4)
|
|
||||||
#define WD_paper_PORTRAIT 0
|
|
||||||
#define WD_paper_LANDSCAPE 1
|
|
||||||
|
|
||||||
#define set_WD_paper_size(sb, val) setbitfield(sb + 0x35, 0x0f, 0, val)
|
|
||||||
#define get_WD_paper_size(sb) getbitfield(sb + 0x35, 0x0f, 0)
|
|
||||||
#define WD_paper_UNDEFINED 0
|
|
||||||
#define WD_paper_A3 3
|
|
||||||
#define WD_paper_A4 4
|
|
||||||
#define WD_paper_A5 5
|
|
||||||
#define WD_paper_DOUBLE 6
|
|
||||||
#define WD_paper_LETTER 7
|
|
||||||
#define WD_paper_B4 12
|
|
||||||
#define WD_paper_B5 13
|
|
||||||
#define WD_paper_LEGAL 15
|
|
||||||
#define WD_paper_CUSTOM 14
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* 0x36-0x39 - custom paper width
|
|
||||||
* 3091 0<w<=10200
|
|
||||||
* 3096 0<w<=14592
|
|
||||||
*/
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
#define set_WD_paper_width_X(sb, val) putnbyte(sb + 0x36, val, 4)
|
#define set_WD_paper_width_X(sb, val) putnbyte(sb + 0x36, val, 4)
|
||||||
#define get_WD_paper_width_X(sb) getnbyte(sb + 0x36, 4)
|
#define get_WD_paper_width_X(sb) getnbyte(sb + 0x36, 4)
|
||||||
|
|
||||||
/* 0x3a-0x3d - custom paper length
|
|
||||||
* 3091 0<w<=16832
|
|
||||||
* 3096 0<w<=20736
|
|
||||||
*/
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
#define set_WD_paper_length_Y(sb, val) putnbyte(sb+0x3a, val, 4)
|
#define set_WD_paper_length_Y(sb, val) putnbyte(sb+0x3a, val, 4)
|
||||||
#define get_WD_paper_length_Y(sb) getnbyte(sb+0x3a, 4)
|
#define get_WD_paper_length_Y(sb) getnbyte(sb+0x3a, 4)
|
||||||
|
|
||||||
0X00, /* 0x3e *//* DTC selection (3091: reserved) */
|
/*==================================================================*/
|
||||||
|
/* 0x3e-end - vary based on vuid */
|
||||||
|
0x00, 0x00
|
||||||
|
|
||||||
|
/*==================================================================*/
|
||||||
|
/* vuid 0xc0, 3091/2 - lots more params after 3f */
|
||||||
|
|
||||||
|
/*3e-3f reserved*/
|
||||||
|
|
||||||
|
/*FIXME: more params here*/
|
||||||
|
|
||||||
|
/*==================================================================*/
|
||||||
|
/* vuid 0xc1, color params - no more */
|
||||||
|
|
||||||
|
/*3e-3f reserved*/
|
||||||
|
|
||||||
|
/*==================================================================*/
|
||||||
|
/* vuid 0x00, mono params only 1 more byte */
|
||||||
|
|
||||||
#define set_WD_dtc_selection(sb, val) setbitfield(sb + 0x3e, 3, 6, val)
|
#define set_WD_dtc_selection(sb, val) setbitfield(sb + 0x3e, 3, 6, val)
|
||||||
#define get_WD_dtc_selection(sb) getbitfield(sb + 0x3e, 3, 6)
|
#define get_WD_dtc_selection(sb) getbitfield(sb + 0x3e, 3, 6)
|
||||||
#define WD_dtc_selection_DEFAULT 0
|
#define WD_dtc_selection_DEFAULT 0
|
||||||
#define WD_dtc_selection_DYNAMIC 1
|
#define WD_dtc_selection_DYNAMIC 1
|
||||||
#define WD_dtc_selection_SIMPLIFIED 2
|
#define WD_dtc_selection_SIMPLIFIED 2
|
||||||
/* - the rest of this is all zeroes, comments from the 3091 docs. */
|
|
||||||
|
|
||||||
0x00, /* 0x3f reserved */
|
/*3f reserved*/
|
||||||
0x00, /* 0x40 intial slice (floating slice parameter) */
|
|
||||||
0x00, /* 0x41 paper color ratio (white level slice ratio) (floating slice parameter) */
|
|
||||||
0x00, /* 0x42 black/white ratio (black/white slice) (floating slice parameter) */
|
|
||||||
0x00, /* 0x43 Up (+UP count setting) (floating slice parameter) */
|
|
||||||
0x00, /* 0x44 Down (+Down count setting) (floating slice parameter) */
|
|
||||||
0x00, /* 0x45 Lower Limit Slice (floating slice parameter) */
|
|
||||||
0x00, /* 0x46 Compensation Line Interval (floating slice parameter) */
|
|
||||||
0x00, /* 0x47 Reserved */
|
|
||||||
0x00, /* 0x48 Error Diffusion upper limit slice (error diffusion parameter) */
|
|
||||||
0x00, /* 0x49 Error Diffusion lower limit slice (error diffusion parameter) */
|
|
||||||
0x00, /* 0x4a Reserved */
|
|
||||||
0x00, /* 0x4b Reserved */
|
|
||||||
0x00, /* 0x4c Enhancement Setting */
|
|
||||||
0x00, /* 0x4d Laplacian Gradient Coefficient (enhancement parameter) */
|
|
||||||
0x00, /* 0x4e Gradient Coefficient (enhancement parameter) */
|
|
||||||
0x00, /* 0x4f Laplacian Slice (enhancement parameter) */
|
|
||||||
0x00, /* 0x50 Gradient Slice (enhancement parameter) */
|
|
||||||
0x00, /* 0x51 Reserved */
|
|
||||||
0x00, /* 0x52 Primary Scan Ratio Compensation */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, /* 0x53 - 0x57 reserved */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58 - 0x5c reserved */
|
|
||||||
0x00, 0x00, 0x00 /* 0x5d - 0x5f reserved */
|
|
||||||
};
|
};
|
||||||
static scsiblk window_descriptor_blockB =
|
static scsiblk window_descriptor_blockB =
|
||||||
{ window_descriptor_blockC, sizeof (window_descriptor_blockC) };
|
{ window_descriptor_blockC, sizeof (window_descriptor_blockC) };
|
||||||
|
|
Plik diff jest za duży
Load Diff
|
@ -83,7 +83,7 @@ struct fujitsu
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
/* immutable values which are set during init of scanner. */
|
/* immutable values which are set during init of scanner. */
|
||||||
struct fujitsu *next;
|
struct fujitsu *next;
|
||||||
char *device_name; /* The name of the scanner device for sane */
|
char device_name[1024]; /* The name of the device from sanei */
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
/* immutable values which are set during reading of config file. */
|
/* immutable values which are set during reading of config file. */
|
||||||
|
@ -93,10 +93,8 @@ struct fujitsu
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
/* immutable values which are set during inquiry probing of the scanner. */
|
/* immutable values which are set during inquiry probing of the scanner. */
|
||||||
/* members in order found in scsi data... */
|
/* members in order found in scsi data... */
|
||||||
SANE_Device sane;
|
|
||||||
|
|
||||||
char vendor_name[9]; /* raw data as returned by SCSI inquiry. */
|
char vendor_name[9]; /* raw data as returned by SCSI inquiry. */
|
||||||
char product_name[17]; /* raw data as returned by SCSI inquiry. */
|
char model_name[17]; /* raw data as returned by SCSI inquiry. */
|
||||||
char version_name[5]; /* raw data as returned by SCSI inquiry. */
|
char version_name[5]; /* raw data as returned by SCSI inquiry. */
|
||||||
|
|
||||||
int color_raster_offset; /* offset between r and b scan line and */
|
int color_raster_offset; /* offset between r and b scan line and */
|
||||||
|
@ -161,8 +159,8 @@ struct fujitsu
|
||||||
int buffer_bytes;
|
int buffer_bytes;
|
||||||
|
|
||||||
/*supported scsi commands*/
|
/*supported scsi commands*/
|
||||||
int has_cmd_msen;
|
int has_cmd_msen10;
|
||||||
int has_cmd_msel;
|
int has_cmd_msel10;
|
||||||
|
|
||||||
int has_cmd_lsen;
|
int has_cmd_lsen;
|
||||||
int has_cmd_lsel;
|
int has_cmd_lsel;
|
||||||
|
@ -264,14 +262,24 @@ struct fujitsu
|
||||||
int color_interlace; /* different models interlace colors differently */
|
int color_interlace; /* different models interlace colors differently */
|
||||||
int duplex_interlace; /* different models interlace sides differently */
|
int duplex_interlace; /* different models interlace sides differently */
|
||||||
int even_scan_line; /* need even number of bytes in a scanline (fi-5900) */
|
int even_scan_line; /* need even number of bytes in a scanline (fi-5900) */
|
||||||
int window_vid; /* some models want different vendor ID in set window */
|
|
||||||
int ghs_in_rs;
|
int ghs_in_rs;
|
||||||
int window_gamma;
|
int window_gamma;
|
||||||
|
|
||||||
int has_SW_dropout; /* dropout color specified in set window data */
|
int has_vuid_mono; /* mono set window data */
|
||||||
|
int has_vuid_3091; /* 3091/2 set window data */
|
||||||
|
int has_vuid_color; /* color set window data */
|
||||||
|
|
||||||
int reverse_by_mode[6]; /* mode specific */
|
int reverse_by_mode[6]; /* mode specific */
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
/* immutable values which are set during serial number probing scanner */
|
||||||
|
char serial_name[28]; /* 16 char model, ':', 10 byte serial, null */
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
/* struct with pointers to device/vendor/model names, and a type value */
|
||||||
|
/* used to inform sane frontend about the device */
|
||||||
|
SANE_Device sane;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
/* 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 */
|
||||||
|
@ -479,10 +487,10 @@ struct fujitsu
|
||||||
#define COLOR_WHITE 1
|
#define COLOR_WHITE 1
|
||||||
#define COLOR_BLACK 2
|
#define COLOR_BLACK 2
|
||||||
|
|
||||||
#define COLOR_INTERLACE_NONE 0
|
#define COLOR_INTERLACE_RGB 0
|
||||||
#define COLOR_INTERLACE_3091 1
|
#define COLOR_INTERLACE_BGR 1
|
||||||
#define COLOR_INTERLACE_BGR 2
|
#define COLOR_INTERLACE_RRGGBB 2
|
||||||
#define COLOR_INTERLACE_RRGGBB 3
|
#define COLOR_INTERLACE_3091 3
|
||||||
|
|
||||||
#define DUPLEX_INTERLACE_ALT 0
|
#define DUPLEX_INTERLACE_ALT 0
|
||||||
#define DUPLEX_INTERLACE_NONE 1
|
#define DUPLEX_INTERLACE_NONE 1
|
||||||
|
@ -568,6 +576,8 @@ static SANE_Status init_ms (struct fujitsu *s);
|
||||||
static SANE_Status init_model (struct fujitsu *s);
|
static SANE_Status init_model (struct fujitsu *s);
|
||||||
static SANE_Status init_user (struct fujitsu *s);
|
static SANE_Status init_user (struct fujitsu *s);
|
||||||
static SANE_Status init_options (struct fujitsu *scanner);
|
static SANE_Status init_options (struct fujitsu *scanner);
|
||||||
|
static SANE_Status init_interlace (struct fujitsu *scanner);
|
||||||
|
static SANE_Status init_serial (struct fujitsu *scanner);
|
||||||
|
|
||||||
static SANE_Status
|
static SANE_Status
|
||||||
do_cmd(struct fujitsu *s, int runRS, int shortTime,
|
do_cmd(struct fujitsu *s, int runRS, int shortTime,
|
||||||
|
@ -617,6 +627,7 @@ static SANE_Status send_lut (struct fujitsu *s);
|
||||||
static SANE_Status set_window (struct fujitsu *s);
|
static SANE_Status set_window (struct fujitsu *s);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
static SANE_Status get_window (struct fujitsu *s);
|
||||||
static SANE_Status get_pixelsize (struct fujitsu *s, int*, int*, int*, int*);
|
static SANE_Status get_pixelsize (struct fujitsu *s, int*, int*, int*, int*);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
:backend "fujitsu" ; name of backend
|
:backend "fujitsu" ; name of backend
|
||||||
:url "http://www.thebility.com/fujitsu/"
|
:url "http://www.thebility.com/fujitsu/"
|
||||||
:version "1.0.62" ; version of backend
|
:version "64" ; 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