[PATCH 1/2] Changes to include support for Lexmark X74.
Torsten Houwaart (none)
toho at toho-EP35-DS3.
Tue Nov 23 00:58:52 UTC 2010
---
backend/lexmark.c | 13 +-
backend/lexmark.conf.in | 2 +
backend/lexmark.h | 21 +-
backend/lexmark_low.c | 3802 ++++++++++++++++++++++++++++-----------------
backend/lexmark_models.c | 35 +-
backend/lexmark_sensors.c | 19 +-
6 files changed, 2440 insertions(+), 1452 deletions(-)
diff --git a/backend/lexmark.c b/backend/lexmark.c
index a4b5bba..23aab45 100644
--- a/backend/lexmark.c
+++ b/backend/lexmark.c
@@ -78,6 +78,10 @@ static SANE_Int x1200_dpi_list[] = {
4, 75, 150, 300, 600
};
+static SANE_Int x74_dpi_list[] = {
+ 75, 150, 300, 600
+};
+
static SANE_Range threshold_range = {
SANE_FIX (0.0), /* minimum */
SANE_FIX (100.0), /* maximum */
@@ -103,6 +107,7 @@ static SANE_Range x_range = {
static SANE_Range y_range = {
0, /* minimum */
6848, /* maximum */
+ /* 7032, for X74 */
8 /* quantization */
};
@@ -170,6 +175,9 @@ init_options (Lexmark_Device * dev)
case X1200_USB2_SENSOR:
od->constraint.word_list = x1200_dpi_list;
break;
+ case X74_SENSOR:
+ od->constraint.word_list = x74_dpi_list;
+ break;
}
dev->val[OPT_RESOLUTION].w = 75;
@@ -1111,19 +1119,20 @@ sane_start (SANE_Handle handle)
/* Scan backwards until we find home */
sanei_lexmark_low_search_home_bwd (lexmark_device);
}
-
/* do calibration before offset detection , use sensor max dpi, not motor's one */
resolution = lexmark_device->val[OPT_RESOLUTION].w;
if(resolution > 600)
{
resolution = 600;
}
+
+
sanei_lexmark_low_set_scan_regs (lexmark_device, resolution, 0, SANE_FALSE);
status = sanei_lexmark_low_calibration (lexmark_device);
if (status != SANE_STATUS_GOOD)
{
DBG (1, "sane_start: calibration failed : %s ! \n",
- sane_strstatus (status));
+ sane_strstatus (status));
return status;
}
diff --git a/backend/lexmark.conf.in b/backend/lexmark.conf.in
index 61049e4..c0bf868 100644
--- a/backend/lexmark.conf.in
+++ b/backend/lexmark.conf.in
@@ -4,3 +4,5 @@ usb 0x043d 0x007c
usb 0x043d 0x007d
# Dell A920
usb 0x413c 0x5105
+# X74
+usb 0x43d 0x0060
diff --git a/backend/lexmark.h b/backend/lexmark.h
index 9354e26..6e1fe5e 100644
--- a/backend/lexmark.h
+++ b/backend/lexmark.h
@@ -1,8 +1,8 @@
-/**************************************************************************
+/************************************************************************
lexmark.h - SANE library for Lexmark scanners.
Copyright (C) 2003-2004 Lexmark International, Inc. (original source)
Copyright (C) 2005 Fred Odendaal
- Copyright (C) 2006-2009 Stéphane Voltz <stef.dev at free.fr>
+ Copyright (C) 2006-2009 Stéphane Voltz <stef.dev at free.fr>
This file is part of the SANE package.
@@ -45,7 +45,7 @@
#ifndef LEXMARK_H
#define LEXMARK_H
-#undef DEEP_DEBUG
+#define DEEP_DEBUG
#include "../include/sane/config.h"
@@ -109,6 +109,8 @@ typedef struct Lexmark_Model
SANE_String_Const model;
SANE_Int motor_type;
SANE_Int sensor_type;
+ SANE_Int HomeEdgePoint1;
+ SANE_Int HomeEdgePoint2;
} Lexmark_Model;
/*
@@ -233,12 +235,14 @@ Lexmark_Device;
/* motors and sensors type defines */
#define X1100_MOTOR 1
#define A920_MOTOR 2
+#define X74_MOTOR 3
-#define X1100_B2_SENSOR 3
-#define A920_SENSOR 4
-#define X1100_2C_SENSOR 5
-#define X1200_SENSOR 6 /* X1200 on USB 1.0 */
-#define X1200_USB2_SENSOR 7 /* X1200 on USB 2.0 */
+#define X1100_B2_SENSOR 4
+#define A920_SENSOR 5
+#define X1100_2C_SENSOR 6
+#define X1200_SENSOR 7 /* X1200 on USB 1.0 */
+#define X1200_USB2_SENSOR 8 /* X1200 on USB 2.0 */
+#define X74_SENSOR 9
/* Non-static Function Proto-types (called by lexmark.c) */
SANE_Status sanei_lexmark_low_init (Lexmark_Device * dev);
@@ -248,6 +252,7 @@ void sanei_lexmark_low_close_device (Lexmark_Device * dev);
SANE_Bool sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev);
void sanei_lexmark_low_move_fwd (SANE_Int distance, Lexmark_Device * dev,
SANE_Byte * regs);
+SANE_Bool sanei_lexmark_low_X74_search_home (Lexmark_Device * dev, SANE_Byte * regs);
SANE_Bool sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev);
SANE_Int sanei_lexmark_low_find_start_line (Lexmark_Device * dev);
SANE_Status sanei_lexmark_low_set_scan_regs (Lexmark_Device * dev,
diff --git a/backend/lexmark_low.c b/backend/lexmark_low.c
index 7de3557..bb6de6c 100644
--- a/backend/lexmark_low.c
+++ b/backend/lexmark_low.c
@@ -1,7 +1,7 @@
/* lexmark-low.c: scanner-interface file for low Lexmark scanners.
(C) 2005 Fred Odendaal
- (C) 2006-2009 Stéphane Voltz <stef.dev at free.fr>
+ (C) 2006-2009 Stéphane Voltz <stef.dev at free.fr>
This file is part of the SANE package.
@@ -61,14 +61,9 @@ typedef enum
}
region_type;
-/*
- * all these defines may be move in device specific constant in per model
- * struct if we need it
- */
-#define HomeEdgePoint1 1235
-#define HomeEdgePoint2 1258
#define HomeTolerance 30
+
#define LOBYTE(x) ((uint8_t)((x) & 0xFF))
#define HIBYTE(x) ((uint8_t)((x) >> 8))
@@ -78,7 +73,7 @@ static SANE_Status low_usb_bulk_write (SANE_Int devnum,
static SANE_Status low_usb_bulk_read (SANE_Int devnum,
SANE_Byte * buf, size_t * size);
static SANE_Status low_write_all_regs (SANE_Int devnum, SANE_Byte * regs);
-static SANE_Bool low_is_home_line (unsigned char *buffer);
+static SANE_Bool low_is_home_line (Lexmark_Device * dev, unsigned char *buffer);
static SANE_Status low_get_start_loc (SANE_Int resolution,
SANE_Int * vert_start,
SANE_Int * hor_start,
@@ -483,6 +478,61 @@ sanei_lexmark_low_init (Lexmark_Device * dev)
switch (dev->model.sensor_type)
{
+ case X74_SENSOR:
+ dev->shadow_regs[0x00] = 0x04;
+ dev->shadow_regs[0x01] = 0x43;
+ dev->shadow_regs[0x0b] = 0x70;
+ dev->shadow_regs[0x12] = 0x0f;
+ dev->shadow_regs[0x16] = 0x07;
+ dev->shadow_regs[0x1d] = 0x20;
+ dev->shadow_regs[0x28] = 0xe0;
+ dev->shadow_regs[0x29] = 0xe3;
+ dev->shadow_regs[0x2a] = 0xeb;
+ dev->shadow_regs[0x2b] = 0x0d;
+ dev->shadow_regs[0x2e] = 0x40;
+ dev->shadow_regs[0x2e] = 0x86;
+ dev->shadow_regs[0x2f] = 0x01;
+ dev->shadow_regs[0x30] = 0x48;
+ dev->shadow_regs[0x31] = 0x06;
+ dev->shadow_regs[0x33] = 0x01;
+ dev->shadow_regs[0x34] = 0x50;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x50;
+ dev->shadow_regs[0x37] = 0x01;
+ dev->shadow_regs[0x38] = 0x50;
+ dev->shadow_regs[0x3a] = 0x20;
+ dev->shadow_regs[0x3c] = 0x88;
+ dev->shadow_regs[0x3d] = 0x08;
+ dev->shadow_regs[0x65] = 0x80;
+ dev->shadow_regs[0x66] = 0x64;
+ dev->shadow_regs[0x6c] = 0xc8;
+ dev->shadow_regs[0x72] = 0x1a;
+ dev->shadow_regs[0x74] = 0x23;
+ dev->shadow_regs[0x75] = 0x03;
+ dev->shadow_regs[0x79] = 0x40;
+ dev->shadow_regs[0x7A] = 0x01;
+ dev->shadow_regs[0x8d] = 0x01;
+ dev->shadow_regs[0x8e] = 0x60;
+ dev->shadow_regs[0x8f] = 0x80;
+ dev->shadow_regs[0x93] = 0x02;
+ dev->shadow_regs[0x94] = 0x0e;
+ dev->shadow_regs[0xa3] = 0xcc;
+ dev->shadow_regs[0xa4] = 0x27;
+ dev->shadow_regs[0xa5] = 0x24;
+ dev->shadow_regs[0xc2] = 0x80;
+ dev->shadow_regs[0xc3] = 0x01;
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x0a;
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x0a;
+ dev->shadow_regs[0xe2] = 0x70;
+ dev->shadow_regs[0xe3] = 0x17;
+ dev->shadow_regs[0xf3] = 0xe0;
+ dev->shadow_regs[0xf4] = 0xff;
+ dev->shadow_regs[0xf5] = 0x01;
+ status = SANE_STATUS_GOOD;
+ break;
case X1100_B2_SENSOR:
dev->shadow_regs[0x01] = 0x43;
dev->shadow_regs[0x0b] = 0x70;
@@ -998,7 +1048,7 @@ low_simple_scan (Lexmark_Device * dev, SANE_Byte * regs, int xoffset,
regs[0x60] = LOBYTE (yoffset);
regs[0x61] = HIBYTE (yoffset);
yend = yoffset + lines;
- if (dev->model.motor_type == A920_MOTOR && rts88xx_is_color (regs)
+ if ((dev->model.motor_type == A920_MOTOR || dev->model.motor_type == X74_MOTOR) && rts88xx_is_color (regs)
&& dev->val[OPT_RESOLUTION].w == 600)
yend *= 2;
regs[0x62] = LOBYTE (yend);
@@ -1050,9 +1100,9 @@ low_simple_scan (Lexmark_Device * dev, SANE_Byte * regs, int xoffset,
{
/* this block would deserve to be a function */
status =
- rts88xx_read_data (dev->devnum, needed - read, (*data) + read, &size);
+ rts88xx_read_data (dev->devnum, needed - read, (*data) + read, &size);
if (status != SANE_STATUS_GOOD)
- return status;
+ return status;
read += size;
}
while (read < needed);
@@ -1062,15 +1112,15 @@ low_simple_scan (Lexmark_Device * dev, SANE_Byte * regs, int xoffset,
{
i = 0;
do
- {
- if (rts88xx_read_reg (dev->devnum, 0xb3, ®) != SANE_STATUS_GOOD)
- {
- DBG (5, "low_simple_scan: register read failed ...\n");
- return SANE_STATUS_IO_ERROR;
- }
- usleep (100000);
- i++;
- }
+ {
+ if (rts88xx_read_reg (dev->devnum, 0xb3, ®) != SANE_STATUS_GOOD)
+ {
+ DBG (5, "low_simple_scan: register read failed ...\n");
+ return SANE_STATUS_IO_ERROR;
+ }
+ usleep (100000);
+ i++;
+ }
while ((reg & 0x08) && (i < 100));
if (reg & 0x08)
{
@@ -1137,7 +1187,8 @@ sanei_lexmark_low_open_device (Lexmark_Device * dev)
DBG (2, "sanei_lexmark_low_open_device: initial registers values\n");
for (i = 0; i < 255; i++)
{
- sprintf (msg+i*5, "0x%02x ", shadow_regs[i]);
+ if ((i+1) % 16 == 0) sprintf (msg+i*5, "0x%02x\n", shadow_regs[i]);
+ else sprintf (msg+i*5, "0x%02x ", shadow_regs[i]);
}
DBG (3, "%s\n",msg);
}
@@ -1233,7 +1284,9 @@ low_write_all_regs (SANE_Int devnum, SANE_Byte * regs)
fprintf (stderr, "write_all(0x00,255)=");
for (i = 0; i < 255; i++)
{
- fprintf (stderr, "0x%02x ", regs[i]);
+ if ((i+4)%16 == 0)
+ fprintf (stderr, "\n");
+ fprintf (stderr, "%02x ", regs[i]);
}
fprintf (stderr, "\n");
#endif
@@ -1250,7 +1303,7 @@ low_write_all_regs (SANE_Int devnum, SANE_Byte * regs)
SANE_Bool
-low_is_home_line (unsigned char *buffer)
+low_is_home_line (Lexmark_Device * dev, unsigned char *buffer)
{
/*
This function assumes the buffer has a size of 2500 bytes.It is
@@ -1286,7 +1339,8 @@ low_is_home_line (unsigned char *buffer)
unsigned char min_byte = 0xFF;
unsigned char average;
int i;
-
+ int home_point1;
+ int home_point2;
region_type region;
int transition_counter;
int index1 = 0;
@@ -1376,10 +1430,14 @@ low_is_home_line (unsigned char *buffer)
DBG (15, "low_is_home_line: transitions!=2 (%d)\n", transition_counter);
return SANE_FALSE;
}
+
+
+
/* Check that the 1st index is in range */
- low_range = HomeEdgePoint1 - HomeTolerance;
- high_range = HomeEdgePoint1 + HomeTolerance;
+ home_point1 = dev->model.HomeEdgePoint1;
+ low_range = home_point1 - HomeTolerance;
+ high_range = home_point1 + HomeTolerance;
if ((index1 < low_range) || (index1 > high_range))
{
@@ -1387,13 +1445,15 @@ low_is_home_line (unsigned char *buffer)
return SANE_FALSE;
}
+
/* Check that the 2nd index is in range */
- low_range = HomeEdgePoint2 - HomeTolerance;
- high_range = HomeEdgePoint2 + HomeTolerance;
+ home_point2 = dev->model.HomeEdgePoint2;
+ low_range = home_point2 - HomeTolerance;
+ high_range = home_point2 + HomeTolerance;
if ((index2 < low_range) || (index2 > high_range))
{
- DBG (15, "low_is_home_line: index2=%d out of range\n", index2);
+ DBG (15, "low_is_home_line: index2=%d out of range.\n", index2);
return SANE_FALSE;
}
@@ -1434,6 +1494,10 @@ sanei_lexmark_low_move_fwd (SANE_Int distance, Lexmark_Device * dev,
regs[0x65] = 0x80;
switch (dev->model.sensor_type)
{
+ case X74_SENSOR:
+ rts88xx_set_scan_frequency (regs, 0);
+ regs[0x93] = 0x06;
+ break;
case X1100_B2_SENSOR:
regs[0x8b] = 0x00;
regs[0x8c] = 0x00;
@@ -1488,31 +1552,59 @@ sanei_lexmark_low_move_fwd (SANE_Int distance, Lexmark_Device * dev,
regs[0xb2] = 0x04;
/* Motor enable & Coordinate space denominator */
regs[0xc3] = 0x81;
+ /* Movement direction & step size */
+ regs[0xc6] = 0x09;
/* ? */
regs[0x80] = 0x00;
regs[0x81] = 0x00;
regs[0x82] = 0x00;
regs[0xc5] = 0x0a;
- /* Movement direction & step size */
- regs[0xc6] = 0x09;
- /* step size range2 */
- regs[0xc9] = 0x3b;
- /* ? */
- regs[0xca] = 0x0a;
- /* motor curve stuff */
- regs[0xe0] = 0x00;
- regs[0xe1] = 0x00;
- regs[0xe4] = 0x00;
- regs[0xe5] = 0x00;
- regs[0xe7] = 0x00;
- regs[0xe8] = 0x00;
-
- regs[0xe2] = 0x09;
- regs[0xe3] = 0x1a;
- regs[0xe6] = 0xdc;
- regs[0xe9] = 0x1b;
- regs[0xec] = 0x07;
- regs[0xef] = 0x03;
+
+
+ switch (dev->model.motor_type)
+ {
+ case X1100_MOTOR:
+ case A920_MOTOR:
+ /* step size range2 */
+ regs[0xc9] = 0x3b;
+ /* ? */
+ regs[0xca] = 0x0a;
+ /* motor curve stuff */
+ regs[0xe0] = 0x00;
+ regs[0xe1] = 0x00;
+ regs[0xe4] = 0x00;
+ regs[0xe5] = 0x00;
+ regs[0xe7] = 0x00;
+ regs[0xe8] = 0x00;
+ regs[0xe2] = 0x09;
+ regs[0xe3] = 0x1a;
+ regs[0xe6] = 0xdc;
+ regs[0xe9] = 0x1b;
+ regs[0xec] = 0x07;
+ regs[0xef] = 0x03;
+ break;
+ case X74_MOTOR:
+ regs[0xc5] = 0x41;
+ /* step size range2 */
+ regs[0xc9] = 0x39;
+ /* ? */
+ regs[0xca] = 0x40;
+ /* motor curve stuff */
+ regs[0xe0] = 0x00;
+ regs[0xe1] = 0x00;
+ regs[0xe2] = 0x09;
+ regs[0xe3] = 0x1a;
+ regs[0xe4] = 0x00;
+ regs[0xe5] = 0x00;
+ regs[0xe6] = 0x64;
+ regs[0xe7] = 0x00;
+ regs[0xe8] = 0x00;
+ regs[0xe9] = 0x32;
+ regs[0xec] = 0x0c;
+ regs[0xef] = 0x08;
+ break;
+ }
+
/* prepare for register write */
low_clr_c6 (devnum);
@@ -1546,6 +1638,11 @@ sanei_lexmark_low_move_fwd (SANE_Int distance, Lexmark_Device * dev,
}
#endif
}
+
+ /* this is needed to find the start line properly */
+ if (dev->model.sensor_type == X74_SENSOR)
+ low_stop_mvmt (devnum);
+
DBG (2, "sanei_lexmark_low_move_fwd: end.\n");
}
@@ -1575,6 +1672,22 @@ sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev)
/* set up registers according to the sensor type */
switch (dev->model.sensor_type)
{
+ case X74_SENSOR:
+ dev->shadow_regs[0x2c] = 0x03;
+ dev->shadow_regs[0x2d] = 0x45;
+ dev->shadow_regs[0x2f] = 0x21;
+ dev->shadow_regs[0x30] = 0x48;
+ dev->shadow_regs[0x31] = 0x06;
+ dev->shadow_regs[0x34] = 0x05;
+ dev->shadow_regs[0x35] = 0x05;
+ dev->shadow_regs[0x36] = 0x09;
+ dev->shadow_regs[0x37] = 0x09;
+ dev->shadow_regs[0x38] = 0x0d;
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x75] = 0x00;
+ dev->shadow_regs[0x8b] = 0xff;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
case X1100_B2_SENSOR:
dev->shadow_regs[0x2c] = 0x0f;
dev->shadow_regs[0x2d] = 0x51;
@@ -1585,7 +1698,6 @@ sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev)
dev->shadow_regs[0x37] = 0x08;
dev->shadow_regs[0x38] = 0x0b;
dev->shadow_regs[0x93] = 0x06;
-
break;
case X1100_2C_SENSOR:
dev->shadow_regs[0x2c] = 0x0d;
@@ -1655,7 +1767,6 @@ sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev)
dev->shadow_regs[0x0b] = 0x70;
dev->shadow_regs[0x0c] = 0x28;
dev->shadow_regs[0x0d] = 0xa4;
-
dev->shadow_regs[0x2c] = 0x0d;
dev->shadow_regs[0x2d] = 0x4f;
dev->shadow_regs[0x2f] = 0x21;
@@ -1676,25 +1787,20 @@ sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev)
dev->shadow_regs[0x4c] = 0x05;
dev->shadow_regs[0x4d] = 0x3f;
dev->shadow_regs[0x75] = 0x00;
-
dev->shadow_regs[0x85] = 0x03;
dev->shadow_regs[0x86] = 0x33;
dev->shadow_regs[0x87] = 0x8f;
dev->shadow_regs[0x88] = 0x34;
-
dev->shadow_regs[0x8b] = 0xff;
dev->shadow_regs[0x8e] = 0x60;
dev->shadow_regs[0x8f] = 0x80;
-
dev->shadow_regs[0x91] = 0x59;
dev->shadow_regs[0x92] = 0x10;
dev->shadow_regs[0x93] = 0x06;
-
dev->shadow_regs[0xa3] = 0x0d;
dev->shadow_regs[0xa4] = 0x5e;
dev->shadow_regs[0xa5] = 0x23;
dev->shadow_regs[0xb1] = 0x07;
-
dev->shadow_regs[0xc2] = 0x80;
dev->shadow_regs[0xc5] = 0x00;
dev->shadow_regs[0xca] = 0x00;
@@ -1735,19 +1841,45 @@ sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev)
/* set horizontal resolution */
dev->shadow_regs[0x79] = 0x40;
dev->shadow_regs[0x7a] = 0x02;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x01;
- /* step size range2 */
- dev->shadow_regs[0xc9] = 0x3b;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0x01;
- /* ? */
- dev->shadow_regs[0xe3] = 0x03;
-
/* Motor disable & Coordinate space denominator */
dev->shadow_regs[0xc3] = 0x01;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x01;
-
+ switch (dev->model.motor_type)
+ {
+ case A920_MOTOR:
+ case X1100_MOTOR:
+ /* step size range2 */
+ dev->shadow_regs[0xc9] = 0x3b;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x01;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x03;
+ break;
+ case X74_MOTOR:
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x00;
+ dev->shadow_regs[0xc8] = 0x04;
+ /* step size range2 */
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x00;
+ /* motor curve stuff */
+ dev->shadow_regs[0xe0] = 0x29;
+ dev->shadow_regs[0xe1] = 0x17;
+ dev->shadow_regs[0xe2] = 0x8f;
+ dev->shadow_regs[0xe3] = 0x06;
+ dev->shadow_regs[0xe4] = 0x61;
+ dev->shadow_regs[0xe5] = 0x16;
+ dev->shadow_regs[0xe6] = 0x64;
+ dev->shadow_regs[0xe7] = 0xb5;
+ dev->shadow_regs[0xe8] = 0x08;
+ dev->shadow_regs[0xe9] = 0x32;
+ dev->shadow_regs[0xec] = 0x0c;
+ dev->shadow_regs[0xef] = 0x08;
+ break;
+ }
+
/* Stop the scanner */
low_stop_mvmt (devnum);
@@ -1800,7 +1932,7 @@ sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev)
}
/* check for home position */
- ret_val = low_is_home_line (buffer);
+ ret_val = low_is_home_line (dev, buffer);
if (ret_val)
DBG (2, "sanei_lexmark_low_search_home_fwd: !!!HOME POSITION!!!\n");
@@ -1812,8 +1944,6 @@ sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev)
return ret_val;
}
-
-
SANE_Bool
sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev)
{
@@ -1855,6 +1985,7 @@ sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev)
SANE_Int size_returned;
SANE_Int no_of_buffers;
SANE_Int buffer_limit = 0xF3C;
+
SANE_Int high_byte, mid_byte, low_byte;
SANE_Int home_line_count;
SANE_Bool in_home_region;
@@ -1876,6 +2007,21 @@ sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev)
/* set up registers */
switch (dev->model.sensor_type)
{
+ case X74_SENSOR:
+ dev->shadow_regs[0x2c] = 0x03;
+ dev->shadow_regs[0x2d] = 0x45;
+ dev->shadow_regs[0x34] = 0x09;
+ dev->shadow_regs[0x35] = 0x09;
+ dev->shadow_regs[0x36] = 0x11;
+ dev->shadow_regs[0x37] = 0x11;
+ dev->shadow_regs[0x38] = 0x19;
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ dev->shadow_regs[0x40] = 0x80;
+ /* important for detection of b/w transitions*/
+ dev->shadow_regs[0x75] = 0x00;
+ dev->shadow_regs[0x8b] = 0xff;
+ break;
case X1100_B2_SENSOR:
dev->shadow_regs[0x2c] = 0x0f;
dev->shadow_regs[0x2d] = 0x51;
@@ -1918,6 +2064,7 @@ sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev)
dev->shadow_regs[0x37] = 0x0f;
dev->shadow_regs[0x38] = 0x15;
break;
+
case X1200_USB2_SENSOR:
dev->shadow_regs[0x2c] = 0x0d;
dev->shadow_regs[0x2d] = 0x4f;
@@ -1960,29 +2107,58 @@ sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev)
/* set horizontal resolution */
dev->shadow_regs[0x79] = 0x40;
dev->shadow_regs[0x7a] = 0x02;
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x81;
- /* ? */
- dev->shadow_regs[0xc5] = 0x19;
+
/* Movement direction & step size */
dev->shadow_regs[0xc6] = 0x01;
- /* step size range2 */
- dev->shadow_regs[0xc9] = 0x3a;
- /* ? */
- dev->shadow_regs[0xca] = 0x08;
- /* motor curve stuff */
- dev->shadow_regs[0xe0] = 0xe3;
- dev->shadow_regs[0xe1] = 0x18;
- dev->shadow_regs[0xe2] = 0x03;
- dev->shadow_regs[0xe3] = 0x06;
- dev->shadow_regs[0xe4] = 0x2b;
- dev->shadow_regs[0xe5] = 0x17;
- dev->shadow_regs[0xe6] = 0xdc;
- dev->shadow_regs[0xe7] = 0xb3;
- dev->shadow_regs[0xe8] = 0x07;
- dev->shadow_regs[0xe9] = 0x1b;
- dev->shadow_regs[0xec] = 0x07;
- dev->shadow_regs[0xef] = 0x03;
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x81;
+
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x00;
+ dev->shadow_regs[0xc8] = 0x04;
+ /* step size range2 */
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x00;
+ /* motor curve stuff */
+ dev->shadow_regs[0xe0] = 0x29;
+ dev->shadow_regs[0xe1] = 0x17;
+ dev->shadow_regs[0xe2] = 0x8f;
+ dev->shadow_regs[0xe3] = 0x06;
+ dev->shadow_regs[0xe4] = 0x61;
+ dev->shadow_regs[0xe5] = 0x16;
+ dev->shadow_regs[0xe6] = 0x64;
+ dev->shadow_regs[0xe7] = 0xb5;
+ dev->shadow_regs[0xe8] = 0x08;
+ dev->shadow_regs[0xe9] = 0x32;
+ dev->shadow_regs[0xec] = 0x0c;
+ dev->shadow_regs[0xef] = 0x08;
+ break;
+ case A920_MOTOR:
+ case X1100_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x19;
+ /* step size range2 */
+ dev->shadow_regs[0xc9] = 0x3a;
+ /* ? */
+ dev->shadow_regs[0xca] = 0x08;
+ /* motor curve stuff */
+ dev->shadow_regs[0xe0] = 0xe3;
+ dev->shadow_regs[0xe1] = 0x18;
+ dev->shadow_regs[0xe2] = 0x03;
+ dev->shadow_regs[0xe3] = 0x06;
+ dev->shadow_regs[0xe4] = 0x2b;
+ dev->shadow_regs[0xe5] = 0x17;
+ dev->shadow_regs[0xe6] = 0xdc;
+ dev->shadow_regs[0xe7] = 0xb3;
+ dev->shadow_regs[0xe8] = 0x07;
+ dev->shadow_regs[0xe9] = 0x1b;
+ dev->shadow_regs[0xec] = 0x07;
+ dev->shadow_regs[0xef] = 0x03;
+ break;
+ }
/* Stop the scanner */
low_stop_mvmt (devnum);
@@ -2055,10 +2231,11 @@ sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev)
no_of_buffers = 1;
if (no_of_buffers < 1)
- no_of_buffers = 1;
+ no_of_buffers = 1;
else if (no_of_buffers > 10)
- no_of_buffers = 10;
+ no_of_buffers = 10;
buffer_count = buffer_count + no_of_buffers;
+
size_requested = no_of_buffers * 2500;
/* Tell the scanner to send the data */
@@ -2070,51 +2247,51 @@ sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev)
cmd_size = 4;
status = low_usb_bulk_write (devnum, command5_block, &cmd_size);
if (status != SANE_STATUS_GOOD)
- return SANE_FALSE;
+ return SANE_FALSE;
/* Read it */
cmd_size = size_requested;
status = low_usb_bulk_read (devnum, buffer, &cmd_size);
if (status != SANE_STATUS_GOOD)
- return SANE_FALSE;
+ return SANE_FALSE;
for (i = 0; i < no_of_buffers; i++)
- {
- buffer_start = buffer + (i * 2500);
- /* Reverse order of bytes in words of buffer */
- for (j = 0; j < 2500; j = j + 2)
- {
- temp_byte = *(buffer_start + j);
- *(buffer_start + j) = *(buffer_start + j + 1);
- *(buffer_start + j + 1) = temp_byte;
- }
+ {
+ buffer_start = buffer + (i * 2500);
+ /* Reverse order of bytes in words of buffer */
+ for (j = 0; j < 2500; j = j + 2)
+ {
+ temp_byte = *(buffer_start + j);
+ *(buffer_start + j) = *(buffer_start + j + 1);
+ *(buffer_start + j + 1) = temp_byte;
+ }
#ifdef DEEP_DEBUG
- fwrite (buffer + (i * 2500), 2500, 1, img);
+ fwrite (buffer + (i * 2500), 2500, 1, img);
#endif
- if (low_is_home_line (buffer_start))
- {
- home_line_count++;
- if (home_line_count > 7)
- in_home_region = SANE_TRUE;
- }
- if (in_home_region)
- {
- /* slow down scanning : on purpose backtracking */
- if (home_line_count)
- sleep (1);
- free (buffer);
-#ifdef DEEP_DEBUG
- fflush (img);
- i = ftell (img) / 2500;
- rewind (img);
- DBG (2, "sanei_lexmark_low_search_home_bwd: offset=%d\n", i);
- fprintf (img, "P5\n2500 %03d\n", i);
- fclose (img);
-#endif
- low_stop_mvmt (devnum);
- DBG (2,
- "sanei_lexmark_low_search_home_bwd: in home region, end.\n");
- return SANE_TRUE;
- }
- }
+ if (low_is_home_line (dev, buffer_start))
+ {
+ home_line_count++;
+ if (home_line_count > 7)
+ in_home_region = SANE_TRUE;
+ }
+ if (in_home_region)
+ {
+ /* slow down scanning : on purpose backtracking */
+ if (home_line_count)
+ sleep (1);
+ free (buffer);
+ #ifdef DEEP_DEBUG
+ fflush (img);
+ i = ftell (img) / 2500;
+ rewind (img);
+ DBG (2, "sanei_lexmark_low_search_home_bwd: offset=%d\n", i);
+ fprintf (img, "P5\n2500 %03d\n", i);
+ fclose (img);
+ #endif
+ low_stop_mvmt (devnum);
+ DBG (2,
+ "sanei_lexmark_low_search_home_bwd: in home region, end.\n");
+ return SANE_TRUE;
+ }
+ }
} /* end while (buffer_count > buffer_limit); */
free (buffer);
#ifdef DEEP_DEBUG
@@ -2138,40 +2315,70 @@ low_get_start_loc (SANE_Int resolution, SANE_Int * vert_start,
{
SANE_Int start_600;
+ switch (dev->model.sensor_type)
+ {
+ case X1100_2C_SENSOR:
+ case X1200_USB2_SENSOR:
+ case A920_SENSOR:
+ case X1200_SENSOR:
+ start_600 = 195 - offset;
+ *hor_start = 0x68;
+ break;
+ case X1100_B2_SENSOR:
+ start_600 = 195 - offset;
+ switch (resolution)
+ {
+ case 75: *hor_start = 0x68;
+ break;
+ case 150: *hor_start = 0x68;
+ break;
+ case 300: *hor_start = 0x6a;
+ break;
+ case 600: *hor_start = 0x6b;
+ break;
+ case 1200: *hor_start = 0x6b;
+ break;
+ default:
+ /* If we're here we have an invalid resolution */
+ return SANE_STATUS_INVAL;
+ }
+ break;
+ case X74_SENSOR:
+ start_600 = 268 - offset;
+ switch (resolution)
+ {
+ case 75: *hor_start = 0x48;
+ break;
+ case 150: *hor_start = 0x48;
+ break;
+ case 300: *hor_start = 0x4a;
+ break;
+ case 600: *hor_start = 0x4b;
+ break;
+ default:
+ /* If we're here we have an invalid resolution */
+ return SANE_STATUS_INVAL;
+ }
+ break;
+ }
/* Calculate vertical start distance at 600dpi */
- start_600 = 195 - offset;
-
switch (resolution)
{
- case 75:
- *vert_start = start_600 / 8;
- *hor_start = 0x68;
+ case 75: *vert_start = start_600 / 8;
break;
- case 150:
- *vert_start = start_600 / 4;
- *hor_start = 0x68;
+ case 150: *vert_start = start_600 / 4;
break;
- case 300:
- *vert_start = start_600 / 2;
- *hor_start = 0x6a;
+ case 300: *vert_start = start_600 / 2;
break;
- case 600:
- *vert_start = start_600;
- *hor_start = 0x6b;
+ case 600: *vert_start = start_600;
break;
- case 1200:
- *vert_start = start_600 * 2;
- *hor_start = 0x6b;
+ case 1200: *vert_start = start_600 * 2;
break;
default:
/* If we're here we have an invalid resolution */
return SANE_STATUS_INVAL;
}
- /* maybe left margin could be autodetected */
- if (dev->model.sensor_type != X1100_B2_SENSOR)
- *hor_start = 0x68;
-
return SANE_STATUS_GOOD;
}
@@ -2191,7 +2398,7 @@ low_set_scan_area (SANE_Int res,
SANE_Int hor_start = 0;
SANE_Int vert_end;
SANE_Int hor_end;
-
+
status = low_get_start_loc (res, &vert_start, &hor_start, offset, dev);
/* convert pixel height to vertical location coordinates */
@@ -2214,10 +2421,10 @@ low_set_scan_area (SANE_Int res,
regs[0x63] = HIBYTE (vert_end);
/* convert pixel width to horizontal location coordinates */
- hor_end = hor_start + brx;
- /* set horizontal start position registers */
+ hor_end = hor_start + brx;
hor_start += tlx;
+
regs[0x66] = LOBYTE (hor_start);
regs[0x67] = HIBYTE (hor_start);
/* set horizontal end position registers */
@@ -2300,9 +2507,21 @@ sanei_lexmark_low_find_start_line (Lexmark_Device * dev)
DBG (2, "sanei_lexmark_low_find_start_line:\n");
+
/* set up registers */
switch (dev->model.sensor_type)
{
+ case X74_SENSOR:
+ dev->shadow_regs[0x2c] = 0x04;
+ dev->shadow_regs[0x2d] = 0x46;
+ dev->shadow_regs[0x34] = 0x05;
+ dev->shadow_regs[0x35] = 0x05;
+ dev->shadow_regs[0x36] = 0x0b;
+ dev->shadow_regs[0x37] = 0x0b;
+ dev->shadow_regs[0x38] = 0x11;
+ dev->shadow_regs[0x40] = 0x40;
+ rts88xx_set_gain (dev->shadow_regs, 6, 6, 6);
+ break;
case X1100_B2_SENSOR:
dev->shadow_regs[0x2c] = 0x0f;
dev->shadow_regs[0x2d] = 0x51;
@@ -2416,29 +2635,80 @@ sanei_lexmark_low_find_start_line (Lexmark_Device * dev)
/* set for ? */
/* Motor enable & Coordinate space denominator */
dev->shadow_regs[0xc3] = 0x81;
- /* set for ? */
- dev->shadow_regs[0xc5] = 0x22;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x09;
- /* step size range2 */
- dev->shadow_regs[0xc9] = 0x3b;
- /* set for ? */
- dev->shadow_regs[0xca] = 0x1f;
- dev->shadow_regs[0xe0] = 0xf7;
- dev->shadow_regs[0xe1] = 0x16;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0x87;
- /* ? */
- dev->shadow_regs[0xe3] = 0x13;
- dev->shadow_regs[0xe4] = 0x1b;
- dev->shadow_regs[0xe5] = 0x16;
- dev->shadow_regs[0xe6] = 0xdc;
- dev->shadow_regs[0xe7] = 0x00;
- dev->shadow_regs[0xe8] = 0x00;
- dev->shadow_regs[0xe9] = 0x1b;
- dev->shadow_regs[0xec] = 0x07;
- dev->shadow_regs[0xef] = 0x03;
+
+
+
+
+ switch (dev->model.motor_type)
+ {
+ case X1100_MOTOR:
+ case A920_MOTOR:
+ /* set for ? */
+ dev->shadow_regs[0xc5] = 0x22;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+ /* step size range2 */
+ dev->shadow_regs[0xc9] = 0x3b;
+ /* set for ? */
+ dev->shadow_regs[0xca] = 0x1f;
+ dev->shadow_regs[0xe0] = 0xf7;
+ dev->shadow_regs[0xe1] = 0x16;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x87;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x13;
+ dev->shadow_regs[0xe4] = 0x1b;
+ dev->shadow_regs[0xe5] = 0x16;
+ dev->shadow_regs[0xe6] = 0xdc;
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ dev->shadow_regs[0xe9] = 0x1b;
+ dev->shadow_regs[0xec] = 0x07;
+ dev->shadow_regs[0xef] = 0x03;
+ break;
+ case X74_MOTOR:
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x22;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x0b;
+
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x1f;
+
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x2f;
+ dev->shadow_regs[0xe1] = 0x11;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x9f;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x0f;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0xcb;
+
+ dev->shadow_regs[0xe5] = 0x10;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x64;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x32;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x0c;
+ /* bounds of movement range4 -only for 75dpi grayscale */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x08;
+ break;
+ }
+
+
/* Stop the scanner */
low_stop_mvmt (dev->devnum);
@@ -2528,34 +2798,49 @@ sanei_lexmark_low_find_start_line (Lexmark_Device * dev)
*(buffer + i) = 0x00;
}
+#ifdef DEEP_DEBUG
+ fdbg = fopen ("find_start_after.pnm", "wb");
+ if (fdbg != NULL)
+ {
+ fprintf (fdbg, "P5\n%d %d\n255\n", 88, 59);
+ fwrite (buffer, 5192, 1, fdbg);
+ fclose (fdbg);
+ }
+#endif
+
/* Go through 59 lines */
for (j = 0; j < 59; j++)
{
blackByteCounter = 0;
/* Go through 88 bytes per line */
for (i = 0; i < 88; i++)
- {
- /* Is byte black? */
- if (*(buffer + (j * 88) + i) == 0)
- {
- blackByteCounter++;
- }
- } /* end for line */
+ {
+ /* Is byte black? */
+ if (*(buffer + (j * 88) + i) == 0)
+ {
+ blackByteCounter++;
+ }
+ } /* end for line */
if (blackByteCounter > 0)
- {
- /* This was a black line */
- blackLineCount++;
- whiteLineCount = 0;
- }
+ {
+ /* This was a black line */
+ blackLineCount++;
+ whiteLineCount = 0;
+ }
else
- {
- /* This is a white line */
- whiteLineCount++;
- blackLineCount = 0;
- }
+ {
+ /* This is a white line */
+ whiteLineCount++;
+ blackLineCount = 0;
+ }
} /* end for buffer */
free (buffer);
+ /* Stop the scanner.
+ This is needed to get the right distance to the scanning area */
+ if (dev->model.sensor_type == X74_SENSOR)
+ low_stop_mvmt (dev->devnum);
+
DBG (2, "sanei_lexmark_low_find_start_line: end.\n");
return whiteLineCount;
}
@@ -2580,6 +2865,10 @@ sanei_lexmark_low_set_scan_regs (Lexmark_Device * dev, SANE_Int resolution,
/* set up registers */
switch (dev->model.sensor_type)
{
+ case X74_SENSOR:
+ dev->shadow_regs[0x2c] = 0x03;
+ dev->shadow_regs[0x2d] = 0x45;
+ break;
case X1100_B2_SENSOR:
dev->shadow_regs[0x2c] = 0x0f;
dev->shadow_regs[0x2d] = 0x51;
@@ -2608,8 +2897,10 @@ sanei_lexmark_low_set_scan_regs (Lexmark_Device * dev, SANE_Int resolution,
dev->val[OPT_BR_X].w,
dev->val[OPT_BR_Y].w,
offset,
- dev->model.motor_type == A920_MOTOR && isColourScan
- && (resolution == 600), dev->shadow_regs, dev);
+ (dev->model.motor_type == A920_MOTOR || dev->model.motor_type == X74_MOTOR)
+ && isColourScan
+ && (resolution == 600),
+ dev->shadow_regs, dev);
/* may be we could use a sensor descriptor that would held the max horiz dpi */
if (dev->val[OPT_RESOLUTION].w < 600)
@@ -2623,272 +2914,418 @@ sanei_lexmark_low_set_scan_regs (Lexmark_Device * dev, SANE_Int resolution,
DBG (5, "sanei_lexmark_low_set_scan_regs(): 75 DPI resolution\n");
if (isColourScan)
- {
- /* set colour scan */
- dev->shadow_regs[0x2f] = 0x11;
-
- switch (dev->model.sensor_type)
- {
- case X1100_B2_SENSOR:
- dev->shadow_regs[0x34] = 0x05;
- dev->shadow_regs[0x36] = 0x05;
- dev->shadow_regs[0x38] = 0x05;
-
- dev->shadow_regs[0x80] = 0x0c;
- dev->shadow_regs[0x81] = 0x0c;
- dev->shadow_regs[0x82] = 0x09;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x8c;
- dev->shadow_regs[0x92] = 0x40;
- dev->shadow_regs[0x93] = 0x06;
- break;
-
- case X1100_2C_SENSOR:
- dev->shadow_regs[0x34] = 0x03;
- dev->shadow_regs[0x36] = 0x04;
- dev->shadow_regs[0x38] = 0x03;
-
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x02;
- dev->shadow_regs[0x82] = 0x03;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
-
- case A920_SENSOR:
- dev->shadow_regs[0x34] = 0x02;
- dev->shadow_regs[0x36] = 0x04;
- dev->shadow_regs[0x38] = 0x03;
-
- dev->shadow_regs[0x80] = 0x07;
- dev->shadow_regs[0x81] = 0x0f;
- dev->shadow_regs[0x82] = 0x03;
-
- dev->shadow_regs[0x85] = 0x05;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x44;
-
- dev->shadow_regs[0x91] = 0x60;
- dev->shadow_regs[0x92] = 0x85;
- dev->shadow_regs[0x93] = 0x0e;
- break;
-
- case X1200_SENSOR:
- dev->shadow_regs[0x34] = 0x02;
- dev->shadow_regs[0x36] = 0x03;
- dev->shadow_regs[0x38] = 0x01;
-
- dev->shadow_regs[0x79] = 0x20;
-
- dev->shadow_regs[0x80] = 0x08;
- dev->shadow_regs[0x81] = 0x02;
- dev->shadow_regs[0x82] = 0x0d;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x1e;
- dev->shadow_regs[0x87] = 0x39;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- /* dev->shadow_regs[0x92] = 0x92; */
- dev->shadow_regs[0x93] = 0x06;
- break;
-
- case X1200_USB2_SENSOR:
- dev->shadow_regs[0x34] = 0x04;
- dev->shadow_regs[0x36] = 0x05;
- dev->shadow_regs[0x38] = 0x04;
-
- dev->shadow_regs[0x80] = 0x01;
- dev->shadow_regs[0x81] = 0x0a;
- dev->shadow_regs[0x82] = 0x0b;
- break;
- }
-
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x37] = 0x01;
-
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x83;
- /* ? */
- dev->shadow_regs[0xc5] = 0x0a;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0x2b;
- dev->shadow_regs[0xe1] = 0x0a;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0x7f;
- /* ? */
- dev->shadow_regs[0xe3] = 0x01;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0xbb;
- dev->shadow_regs[0xe5] = 0x09;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0x0e;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0x2b;
- dev->shadow_regs[0xe8] = 0x03;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x05;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0xa0;
- dev->shadow_regs[0xeb] = 0x01;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x01;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x01;
- }
- else
- {
- /* set grayscale scan */
- dev->shadow_regs[0x2f] = 0x21;
- switch (dev->model.sensor_type)
- {
- case X1100_B2_SENSOR:
- dev->shadow_regs[0x34] = 0x02;
- dev->shadow_regs[0x35] = 0x02;
- dev->shadow_regs[0x36] = 0x04;
- dev->shadow_regs[0x37] = 0x04;
- dev->shadow_regs[0x38] = 0x06;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case X1100_2C_SENSOR:
- dev->shadow_regs[0x34] = 0x01;
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x36] = 0x02;
- dev->shadow_regs[0x37] = 0x02;
- dev->shadow_regs[0x38] = 0x03; /* these are half of B2 sensor */
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case A920_SENSOR:
- dev->shadow_regs[0x34] = 0x01;
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x36] = 0x02;
- dev->shadow_regs[0x37] = 0x02;
- dev->shadow_regs[0x38] = 0x03;
-
- dev->shadow_regs[0x85] = 0x0d;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x45;
-
- dev->shadow_regs[0x91] = 0x60;
- dev->shadow_regs[0x92] = 0x8d;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1200_SENSOR:
- dev->shadow_regs[0x34] = 0x01;
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x36] = 0x02;
- dev->shadow_regs[0x37] = 0x02;
- dev->shadow_regs[0x38] = 0x02;
-
- dev->shadow_regs[0x79] = 0x20;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0xff;
- dev->shadow_regs[0x88] = 0x02;
-
- dev->shadow_regs[0x92] = 0x00;
- break;
- case X1200_USB2_SENSOR:
- dev->shadow_regs[0x34] = 0x01;
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x36] = 0x02;
- dev->shadow_regs[0x37] = 0x02;
- dev->shadow_regs[0x38] = 0x02;
-
- dev->shadow_regs[0x79] = 0x20;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0xff;
- dev->shadow_regs[0x88] = 0x02;
-
- dev->shadow_regs[0x92] = 0x00;
- break;
- }
-
- /* set ? only for colour? */
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x00;
- dev->shadow_regs[0x82] = 0x00;
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x81;
- /* ? */
- dev->shadow_regs[0xc5] = 0x10;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0x4d;
- dev->shadow_regs[0xe1] = 0x1c;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0x71;
- /* ? */
- dev->shadow_regs[0xe3] = 0x02;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x6d;
- dev->shadow_regs[0xe5] = 0x15;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0xdc;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0xad;
- dev->shadow_regs[0xe8] = 0x07;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x1b;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0xe1;
- dev->shadow_regs[0xeb] = 0x03;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x07;
- /* bounds of movement range4 -only for 75dpi grayscale */
- dev->shadow_regs[0xed] = 0xc2;
- dev->shadow_regs[0xee] = 0x02;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x03;
- }
+ {
+ switch (dev->model.sensor_type)
+ {
+ case X74_SENSOR:
+
+ dev->shadow_regs[0x34] = 0x04;
+ dev->shadow_regs[0x36] = 0x03;
+ dev->shadow_regs[0x38] = 0x03;
+
+ dev->shadow_regs[0x79] = 0x08;
+
+ dev->shadow_regs[0x80] = 0x0d;
+ dev->shadow_regs[0x81] = 0x0e;
+ dev->shadow_regs[0x82] = 0x02;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;;
+
+ break;
+
+ case X1100_B2_SENSOR:
+ dev->shadow_regs[0x34] = 0x05;
+ dev->shadow_regs[0x36] = 0x05;
+ dev->shadow_regs[0x38] = 0x05;
+
+ dev->shadow_regs[0x80] = 0x0c;
+ dev->shadow_regs[0x81] = 0x0c;
+ dev->shadow_regs[0x82] = 0x09;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x8c;
+ dev->shadow_regs[0x92] = 0x40;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+
+ case X1100_2C_SENSOR:
+ dev->shadow_regs[0x34] = 0x03;
+ dev->shadow_regs[0x36] = 0x04;
+ dev->shadow_regs[0x38] = 0x03;
+
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x02;
+ dev->shadow_regs[0x82] = 0x03;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+
+ case A920_SENSOR:
+ dev->shadow_regs[0x34] = 0x02;
+ dev->shadow_regs[0x36] = 0x04;
+ dev->shadow_regs[0x38] = 0x03;
+
+ dev->shadow_regs[0x80] = 0x07;
+ dev->shadow_regs[0x81] = 0x0f;
+ dev->shadow_regs[0x82] = 0x03;
+
+ dev->shadow_regs[0x85] = 0x05;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x44;
+
+ dev->shadow_regs[0x91] = 0x60;
+ dev->shadow_regs[0x92] = 0x85;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+
+ case X1200_SENSOR:
+ dev->shadow_regs[0x34] = 0x02;
+ dev->shadow_regs[0x36] = 0x03;
+ dev->shadow_regs[0x38] = 0x01;
+
+ dev->shadow_regs[0x79] = 0x20;
+
+ dev->shadow_regs[0x80] = 0x08;
+ dev->shadow_regs[0x81] = 0x02;
+ dev->shadow_regs[0x82] = 0x0d;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x1e;
+ dev->shadow_regs[0x87] = 0x39;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ /* dev->shadow_regs[0x92] = 0x92; */
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+
+ case X1200_USB2_SENSOR:
+ dev->shadow_regs[0x34] = 0x04;
+ dev->shadow_regs[0x36] = 0x05;
+ dev->shadow_regs[0x38] = 0x04;
+
+ dev->shadow_regs[0x80] = 0x01;
+ dev->shadow_regs[0x81] = 0x0a;
+ dev->shadow_regs[0x82] = 0x0b;
+ break;
+ }
+
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ dev->shadow_regs[0xc2] = 0x80;
+ /* ? */
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x0c;
+ dev->shadow_regs[0xc6] = 0x0b;
+
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x01;
+
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x1b;
+ dev->shadow_regs[0xe1] = 0x0a;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x4f;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x01;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0xb3;
+
+ dev->shadow_regs[0xe5] = 0x09;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0d;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0xe5;
+ dev->shadow_regs[0xe8] = 0x02;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0xa0;
+ dev->shadow_regs[0xeb] = 0x01;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* bounds of movement range4 */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ break;
+ case A920_MOTOR:
+ case X1100_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x0a;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x2b;
+ dev->shadow_regs[0xe1] = 0x0a;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x7f;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x01;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0xbb;
+ dev->shadow_regs[0xe5] = 0x09;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0e;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x2b;
+ dev->shadow_regs[0xe8] = 0x03;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0xa0;
+ dev->shadow_regs[0xeb] = 0x01;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ break;
+ }
+
+ /* set colour scan */
+ dev->shadow_regs[0x2f] = 0x11;
+
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x37] = 0x01;
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x83;
+ }
+ else /* 75 dpi gray */
+ {
+ switch (dev->model.sensor_type)
+ {
+ case X74_SENSOR:
+
+ dev->shadow_regs[0x34] = 0x01;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x02;
+ dev->shadow_regs[0x37] = 0x02;
+ dev->shadow_regs[0x38] = 0x03;
+ dev->shadow_regs[0x39] = 0x0f;
+
+ dev->shadow_regs[0x40] = 0x80;
+
+ dev->shadow_regs[0x79] = 0x08;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x8c] = 0x02;
+ dev->shadow_regs[0x8d] = 0x01;
+ dev->shadow_regs[0x8e] = 0x60;
+ dev->shadow_regs[0x8f] = 0x80;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+
+ break;
+
+ case X1100_B2_SENSOR:
+ dev->shadow_regs[0x34] = 0x02;
+ dev->shadow_regs[0x35] = 0x02;
+ dev->shadow_regs[0x36] = 0x04;
+ dev->shadow_regs[0x37] = 0x04;
+ dev->shadow_regs[0x38] = 0x06;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_2C_SENSOR:
+ dev->shadow_regs[0x34] = 0x01;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x02;
+ dev->shadow_regs[0x37] = 0x02;
+ dev->shadow_regs[0x38] = 0x03; /* these are half of B2 sensor */
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case A920_SENSOR:
+ dev->shadow_regs[0x34] = 0x01;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x02;
+ dev->shadow_regs[0x37] = 0x02;
+ dev->shadow_regs[0x38] = 0x03;
+
+ dev->shadow_regs[0x85] = 0x0d;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x45;
+
+ dev->shadow_regs[0x91] = 0x60;
+ dev->shadow_regs[0x92] = 0x8d;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1200_SENSOR:
+ dev->shadow_regs[0x34] = 0x01;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x02;
+ dev->shadow_regs[0x37] = 0x02;
+ dev->shadow_regs[0x38] = 0x02;
+
+ dev->shadow_regs[0x79] = 0x20;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0xff;
+ dev->shadow_regs[0x88] = 0x02;
+
+ dev->shadow_regs[0x92] = 0x00;
+ break;
+ case X1200_USB2_SENSOR:
+ dev->shadow_regs[0x34] = 0x01;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x02;
+ dev->shadow_regs[0x37] = 0x02;
+ dev->shadow_regs[0x38] = 0x02;
+
+ dev->shadow_regs[0x79] = 0x20;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0xff;
+ dev->shadow_regs[0x88] = 0x02;
+
+ dev->shadow_regs[0x92] = 0x00;
+ break;
+ }
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x0a;
+ dev->shadow_regs[0xc6] = 0x0b;
+
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x01;
+
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x07;
+ dev->shadow_regs[0xe1] = 0x18;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0xe7;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x03;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0xe7;
+ dev->shadow_regs[0xe5] = 0x14;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x64;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0xcb;
+ dev->shadow_regs[0xe8] = 0x08;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x32;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0xe3;
+ dev->shadow_regs[0xeb] = 0x04;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x0c;
+ /* bounds of movement range4 */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x08;
+ break;
+ case A920_MOTOR:
+ case X1100_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x10;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+
+ dev->shadow_regs[0xc9] = 0x3b;
+ dev->shadow_regs[0xca] = 0x01;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x4d;
+ dev->shadow_regs[0xe1] = 0x1c;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x71;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x02;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x6d;
+ dev->shadow_regs[0xe5] = 0x15;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0xdc;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0xad;
+ dev->shadow_regs[0xe8] = 0x07;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x1b;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0xe1;
+ dev->shadow_regs[0xeb] = 0x03;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x07;
+ /* bounds of movement range4 -only for 75dpi grayscale */
+ dev->shadow_regs[0xed] = 0xc2;
+ dev->shadow_regs[0xee] = 0x02;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x03;
+ break;
+ }
+
+ /* set grayscale scan */
+ dev->shadow_regs[0x2f] = 0x21;
+
+ /* set ? only for colour? */
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x00;
+ dev->shadow_regs[0x82] = 0x00;
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x81;
+
+ }
/* set motor resolution divisor */
dev->shadow_regs[0x39] = 0x0f;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x09;
-
- dev->shadow_regs[0xc9] = 0x3b;
- dev->shadow_regs[0xca] = 0x01;
/* set # of head moves per CIS read */
rts88xx_set_scan_frequency (dev->shadow_regs, 1);
+
/* set horizontal resolution */
if (dev->model.sensor_type != X1200_SENSOR)
- dev->shadow_regs[0x79] = 0x08;
+ dev->shadow_regs[0x79] = 0x08;
+
}
/* 150dpi x 150dpi */
@@ -2897,293 +3334,438 @@ sanei_lexmark_low_set_scan_regs (Lexmark_Device * dev, SANE_Int resolution,
DBG (5, "sanei_lexmark_low_set_scan_regs(): 150 DPI resolution\n");
if (isColourScan)
- {
- /* set colour scan */
- dev->shadow_regs[0x2f] = 0x11;
- switch (dev->model.sensor_type)
- {
- case X1100_B2_SENSOR:
- dev->shadow_regs[0x34] = 0x0b;
- dev->shadow_regs[0x36] = 0x0b;
- dev->shadow_regs[0x38] = 0x0a;
-
- dev->shadow_regs[0x80] = 0x05;
- dev->shadow_regs[0x81] = 0x05;
- dev->shadow_regs[0x82] = 0x0a;
-
- dev->shadow_regs[0x85] = 0x83;
- dev->shadow_regs[0x86] = 0x7e;
- dev->shadow_regs[0x87] = 0xad;
- dev->shadow_regs[0x88] = 0x35;
-
- dev->shadow_regs[0x91] = 0xfe;
- dev->shadow_regs[0x92] = 0xdf;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1100_2C_SENSOR:
- dev->shadow_regs[0x34] = 0x05;
- dev->shadow_regs[0x36] = 0x07;
- dev->shadow_regs[0x38] = 0x05;
-
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x02;
- dev->shadow_regs[0x82] = 0x06;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case A920_SENSOR:
- dev->shadow_regs[0x34] = 0x03;
- dev->shadow_regs[0x36] = 0x08;
- dev->shadow_regs[0x38] = 0x05;
-
- dev->shadow_regs[0x80] = 0x0e;
- dev->shadow_regs[0x81] = 0x07;
- dev->shadow_regs[0x82] = 0x02;
-
- dev->shadow_regs[0x85] = 0x05;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x04;
-
- dev->shadow_regs[0x91] = 0xe0;
- dev->shadow_regs[0x92] = 0x85;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1200_SENSOR:
- dev->shadow_regs[0x34] = 0x04;
- dev->shadow_regs[0x36] = 0x05;
- dev->shadow_regs[0x38] = 0x02;
- /* data compression
- dev->shadow_regs[0x40] = 0x90;
- dev->shadow_regs[0x50] = 0x20; */
- /* no data compression */
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x79] = 0x20;
-
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x07;
- dev->shadow_regs[0x82] = 0x0b;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x1e;
- dev->shadow_regs[0x87] = 0x39;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x92] = 0x92;
-
- break;
- case X1200_USB2_SENSOR:
- dev->shadow_regs[0x34] = 0x04;
- dev->shadow_regs[0x36] = 0x05;
- dev->shadow_regs[0x38] = 0x02;
-
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x79] = 0x20;
-
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x07;
- dev->shadow_regs[0x82] = 0x0b;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x1e;
- dev->shadow_regs[0x87] = 0x39;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x92] = 0x92;
- break;
- }
- /* set ? */
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x37] = 0x01;
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x83;
- /* ? */
- dev->shadow_regs[0xc5] = 0x0e;
- /* ? */
- dev->shadow_regs[0xc9] = 0x3a;
- dev->shadow_regs[0xca] = 0x03;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0x61;
- dev->shadow_regs[0xe1] = 0x0a;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0xed;
- /* ? */
- dev->shadow_regs[0xe3] = 0x02;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x29;
- dev->shadow_regs[0xe5] = 0x0a;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0x0e;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0x29;
- dev->shadow_regs[0xe8] = 0x03;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x05;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0x00;
- dev->shadow_regs[0xeb] = 0x00;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x01;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x01;
-
- }
+ {
+
+ switch (dev->model.sensor_type)
+ {
+ case X74_SENSOR:
+ dev->shadow_regs[0x34] = 0x08;
+ dev->shadow_regs[0x36] = 0x06;
+ dev->shadow_regs[0x38] = 0x05;
+ dev->shadow_regs[0x39] = 0x07;
+
+ /* resolution divisor */
+ dev->shadow_regs[0x79] = 0x08;
+
+ dev->shadow_regs[0x80] = 0x0a;
+ dev->shadow_regs[0x81] = 0x0c;
+ dev->shadow_regs[0x82] = 0x04;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_B2_SENSOR:
+ dev->shadow_regs[0x34] = 0x0b;
+ dev->shadow_regs[0x36] = 0x0b;
+ dev->shadow_regs[0x38] = 0x0a;
+
+ dev->shadow_regs[0x80] = 0x05;
+ dev->shadow_regs[0x81] = 0x05;
+ dev->shadow_regs[0x82] = 0x0a;
+
+ dev->shadow_regs[0x85] = 0x83;
+ dev->shadow_regs[0x86] = 0x7e;
+ dev->shadow_regs[0x87] = 0xad;
+ dev->shadow_regs[0x88] = 0x35;
+
+ dev->shadow_regs[0x91] = 0xfe;
+ dev->shadow_regs[0x92] = 0xdf;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1100_2C_SENSOR:
+ dev->shadow_regs[0x34] = 0x05;
+ dev->shadow_regs[0x36] = 0x07;
+ dev->shadow_regs[0x38] = 0x05;
+
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x02;
+ dev->shadow_regs[0x82] = 0x06;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case A920_SENSOR:
+ dev->shadow_regs[0x34] = 0x03;
+ dev->shadow_regs[0x36] = 0x08;
+ dev->shadow_regs[0x38] = 0x05;
+
+ dev->shadow_regs[0x80] = 0x0e;
+ dev->shadow_regs[0x81] = 0x07;
+ dev->shadow_regs[0x82] = 0x02;
+
+ dev->shadow_regs[0x85] = 0x05;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x04;
+
+ dev->shadow_regs[0x91] = 0xe0;
+ dev->shadow_regs[0x92] = 0x85;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1200_SENSOR:
+ dev->shadow_regs[0x34] = 0x04;
+ dev->shadow_regs[0x36] = 0x05;
+ dev->shadow_regs[0x38] = 0x02;
+ /* data compression
+ dev->shadow_regs[0x40] = 0x90;
+ dev->shadow_regs[0x50] = 0x20; */
+ /* no data compression */
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x79] = 0x20;
+
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x07;
+ dev->shadow_regs[0x82] = 0x0b;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x1e;
+ dev->shadow_regs[0x87] = 0x39;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x92] = 0x92;
+
+ break;
+ case X1200_USB2_SENSOR:
+ dev->shadow_regs[0x34] = 0x04;
+ dev->shadow_regs[0x36] = 0x05;
+ dev->shadow_regs[0x38] = 0x02;
+
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x79] = 0x20;
+
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x07;
+ dev->shadow_regs[0x82] = 0x0b;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x1e;
+ dev->shadow_regs[0x87] = 0x39;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x92] = 0x92;
+ break;
+ } /* switch */
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ dev->shadow_regs[0xc2] = 0x80;
+ /* ? */
+ dev->shadow_regs[0xc4] = 0x20;
+
+ dev->shadow_regs[0xc5] = 0x0e;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x0b;
+ dev->shadow_regs[0xc7] = 0x00;
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x03;
+
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x41;
+ dev->shadow_regs[0xe1] = 0x09;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x89;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x02;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x0d;
+
+ dev->shadow_regs[0xe5] = 0x09;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0d;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0xe8;
+ dev->shadow_regs[0xe8] = 0x02;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* bounds of movement range4 */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ break;
+ case X1100_MOTOR:
+ case A920_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x0e;
+ /* ? */
+ dev->shadow_regs[0xc9] = 0x3a;
+ dev->shadow_regs[0xca] = 0x03;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x61;
+ dev->shadow_regs[0xe1] = 0x0a;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0xed;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x02;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x29;
+ dev->shadow_regs[0xe5] = 0x0a;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0e;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x29;
+ dev->shadow_regs[0xe8] = 0x03;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ break;
+ }
+ /* set colour scan */
+ dev->shadow_regs[0x2f] = 0x11;
+
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x37] = 0x01;
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x83;
+
+ } /* if (isColourScan) */
else
- {
- /* set grayscale scan */
- dev->shadow_regs[0x2f] = 0x21;
- switch (dev->model.sensor_type)
- {
- case X1100_B2_SENSOR:
- dev->shadow_regs[0x34] = 0x04;
- dev->shadow_regs[0x35] = 0x04;
- dev->shadow_regs[0x36] = 0x07;
- dev->shadow_regs[0x37] = 0x07;
- dev->shadow_regs[0x38] = 0x0a;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case X1100_2C_SENSOR:
- dev->shadow_regs[0x34] = 0x02;
- dev->shadow_regs[0x35] = 0x02;
- dev->shadow_regs[0x36] = 0x04;
- dev->shadow_regs[0x37] = 0x04;
- dev->shadow_regs[0x38] = 0x05;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case A920_SENSOR:
- dev->shadow_regs[0x34] = 0x02;
- dev->shadow_regs[0x35] = 0x02;
- dev->shadow_regs[0x36] = 0x04;
- dev->shadow_regs[0x37] = 0x04;
- dev->shadow_regs[0x38] = 0x05;
-
- dev->shadow_regs[0x85] = 0x0d;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x45;
-
- dev->shadow_regs[0x91] = 0x60;
- dev->shadow_regs[0x92] = 0x8d;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1200_SENSOR:
- dev->shadow_regs[0x34] = 0x01;
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x36] = 0x02;
- dev->shadow_regs[0x37] = 0x02;
- dev->shadow_regs[0x38] = 0x03;
-
- /* dev->shadow_regs[0x40] = 0x90;
- dev->shadow_regs[0x50] = 0x20; */
- /* no data compression */
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x79] = 0x20;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0xff;
- dev->shadow_regs[0x88] = 0x02;
-
- dev->shadow_regs[0x92] = 0x92;
- break;
- case X1200_USB2_SENSOR:
- dev->shadow_regs[0x34] = 0x01;
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x36] = 0x02;
- dev->shadow_regs[0x37] = 0x02;
- dev->shadow_regs[0x38] = 0x03;
-
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x79] = 0x20;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0xff;
- dev->shadow_regs[0x88] = 0x02;
-
- dev->shadow_regs[0x92] = 0x92;
- break;
- }
-
- /* set ? only for colour? */
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x00;
- dev->shadow_regs[0x82] = 0x00;
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x81;
- /* ? */
- dev->shadow_regs[0xc5] = 0x16;
- /* ? */
- dev->shadow_regs[0xc9] = 0x3b;
- dev->shadow_regs[0xca] = 0x01;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0xdd;
- dev->shadow_regs[0xe1] = 0x18;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0x01;
- /* ? */
- dev->shadow_regs[0xe3] = 0x03;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x6d;
- dev->shadow_regs[0xe5] = 0x15;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0xdc;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0xad;
- dev->shadow_regs[0xe8] = 0x07;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x1b;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0xe1;
- dev->shadow_regs[0xeb] = 0x03;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x07;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x03;
- }
-
- /* set motor resolution divisor */
- dev->shadow_regs[0x39] = 0x07;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x09;
-
- /* set # of head moves per CIS read */
+ {
+ switch (dev->model.sensor_type)
+ {
+ case X74_SENSOR:
+
+ dev->shadow_regs[0x34] = 0x02;
+ dev->shadow_regs[0x35] = 0x02;
+ dev->shadow_regs[0x36] = 0x04;
+ dev->shadow_regs[0x37] = 0x04;
+ dev->shadow_regs[0x38] = 0x06;
+ dev->shadow_regs[0x39] = 0x07;
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0x40] = 0x40;
+
+ /* resolution divisor */
+ dev->shadow_regs[0x79] = 0x08;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_B2_SENSOR:
+ dev->shadow_regs[0x34] = 0x04;
+ dev->shadow_regs[0x35] = 0x04;
+ dev->shadow_regs[0x36] = 0x07;
+ dev->shadow_regs[0x37] = 0x07;
+ dev->shadow_regs[0x38] = 0x0a;
+
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_2C_SENSOR:
+ dev->shadow_regs[0x34] = 0x02;
+ dev->shadow_regs[0x35] = 0x02;
+ dev->shadow_regs[0x36] = 0x04;
+ dev->shadow_regs[0x37] = 0x04;
+ dev->shadow_regs[0x38] = 0x05;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case A920_SENSOR:
+ dev->shadow_regs[0x34] = 0x02;
+ dev->shadow_regs[0x35] = 0x02;
+ dev->shadow_regs[0x36] = 0x04;
+ dev->shadow_regs[0x37] = 0x04;
+ dev->shadow_regs[0x38] = 0x05;
+
+ dev->shadow_regs[0x85] = 0x0d;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x45;
+
+ dev->shadow_regs[0x91] = 0x60;
+ dev->shadow_regs[0x92] = 0x8d;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1200_SENSOR:
+ dev->shadow_regs[0x34] = 0x01;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x02;
+ dev->shadow_regs[0x37] = 0x02;
+ dev->shadow_regs[0x38] = 0x03;
+
+ /* dev->shadow_regs[0x40] = 0x90;
+ dev->shadow_regs[0x50] = 0x20; */
+ /* no data compression */
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x79] = 0x20;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0xff;
+ dev->shadow_regs[0x88] = 0x02;
+
+ dev->shadow_regs[0x92] = 0x92;
+ break;
+ case X1200_USB2_SENSOR:
+ dev->shadow_regs[0x34] = 0x01;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x02;
+ dev->shadow_regs[0x37] = 0x02;
+ dev->shadow_regs[0x38] = 0x03;
+
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x79] = 0x20;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0xff;
+ dev->shadow_regs[0x88] = 0x02;
+
+ dev->shadow_regs[0x92] = 0x92;
+ break;
+ } /* switch */
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x14;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x0b;
+
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x01;
+
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x09;
+ dev->shadow_regs[0xe1] = 0x18;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0xe9;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x03;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x79;
+
+ dev->shadow_regs[0xe5] = 0x16;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x64;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0xcd;
+ dev->shadow_regs[0xe8] = 0x08;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x32;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0xe5;
+ dev->shadow_regs[0xeb] = 0x04;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x0c;
+ /* bounds of movement range4 */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x08;
+ break;
+ case X1100_MOTOR:
+ case A920_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x16;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+ /* ? */
+ dev->shadow_regs[0xc9] = 0x3b;
+ dev->shadow_regs[0xca] = 0x01;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0xdd;
+ dev->shadow_regs[0xe1] = 0x18;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x01;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x03;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x6d;
+ dev->shadow_regs[0xe5] = 0x15;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0xdc;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0xad;
+ dev->shadow_regs[0xe8] = 0x07;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x1b;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0xe1;
+ dev->shadow_regs[0xeb] = 0x03;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x07;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x03;
+ break;
+ }
+
+ /* set grayscale scan */
+ dev->shadow_regs[0x2f] = 0x21;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x07;
+ /* set ? only for colour? */
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x00;
+ dev->shadow_regs[0x82] = 0x00;
+
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x81;
+ }/* else (greyscale) */
+
+
+
+
+ /* set # of head moves per CIS read */
rts88xx_set_scan_frequency (dev->shadow_regs, 1);
/* hum, horizontal resolution different for X1200 ? */
- if (dev->model.sensor_type != X1200_SENSOR)
- dev->shadow_regs[0x79] = 0x20;
+ /* if (dev->model.sensor_type != X1200_SENSOR)
+ dev->shadow_regs[0x79] = 0x20;*/
+
}
/*300dpi x 300dpi */
@@ -3192,693 +3774,1004 @@ sanei_lexmark_low_set_scan_regs (Lexmark_Device * dev, SANE_Int resolution,
DBG (5, "sanei_lexmark_low_set_scan_regs(): 300 DPI resolution\n");
if (isColourScan)
- {
- /* set colour scan */
- dev->shadow_regs[0x2f] = 0x11;
-
- switch (dev->model.sensor_type)
- {
- case X1100_B2_SENSOR:
- dev->shadow_regs[0x34] = 0x15;
- dev->shadow_regs[0x36] = 0x15;
- dev->shadow_regs[0x38] = 0x14;
-
- dev->shadow_regs[0x80] = 0x0a;
- dev->shadow_regs[0x81] = 0x0a;
- dev->shadow_regs[0x82] = 0x06;
-
- dev->shadow_regs[0x85] = 0x83;
- dev->shadow_regs[0x86] = 0x7e;
- dev->shadow_regs[0x87] = 0xad;
- dev->shadow_regs[0x88] = 0x35;
-
- dev->shadow_regs[0x91] = 0xfe;
- dev->shadow_regs[0x92] = 0xdf;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1100_2C_SENSOR:
- dev->shadow_regs[0x34] = 0x08;
- dev->shadow_regs[0x36] = 0x0d;
- dev->shadow_regs[0x38] = 0x09;
-
- dev->shadow_regs[0x80] = 0x0e;
- dev->shadow_regs[0x81] = 0x04;
- dev->shadow_regs[0x82] = 0x0a;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case A920_SENSOR:
- dev->shadow_regs[0x34] = 0x06;
- dev->shadow_regs[0x36] = 0x10;
- dev->shadow_regs[0x38] = 0x09;
-
- dev->shadow_regs[0x80] = 0x0c;
- dev->shadow_regs[0x81] = 0x02;
- dev->shadow_regs[0x82] = 0x04;
-
- dev->shadow_regs[0x85] = 0x05;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x04;
-
- dev->shadow_regs[0x91] = 0xe0;
- dev->shadow_regs[0x92] = 0x85;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1200_SENSOR:
- dev->shadow_regs[0x34] = 0x07;
- dev->shadow_regs[0x36] = 0x09;
- dev->shadow_regs[0x38] = 0x04;
-
- /* data compression
- dev->shadow_regs[0x40] = 0x90;
- dev->shadow_regs[0x50] = 0x20; */
- /* no data compression */
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x0e;
- dev->shadow_regs[0x82] = 0x06;
- break;
- case X1200_USB2_SENSOR:
- dev->shadow_regs[0x34] = 0x07;
- dev->shadow_regs[0x36] = 0x09;
- dev->shadow_regs[0x38] = 0x04;
-
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x0e;
- dev->shadow_regs[0x82] = 0x06;
- break;
- }
-
- /* set ? */
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x37] = 0x01;
- /* set motor resolution divisor */
- dev->shadow_regs[0x39] = 0x03;
- /* set ? */
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x83;
- /* ? */
- dev->shadow_regs[0xc5] = 0x17;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x09;
- /* ? */
- dev->shadow_regs[0xc9] = 0x3a;
- dev->shadow_regs[0xca] = 0x0a;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0x75;
- dev->shadow_regs[0xe1] = 0x0a;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0xdd;
- /* ? */
- dev->shadow_regs[0xe3] = 0x05;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x59;
- dev->shadow_regs[0xe5] = 0x0a;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0x0e;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0x00;
- dev->shadow_regs[0xe8] = 0x00;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x05;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0x00;
- dev->shadow_regs[0xeb] = 0x00;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x01;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x01;
- }
- else
- {
- /* set grayscale scan */
- dev->shadow_regs[0x2f] = 0x21;
- /* set ? */
- switch (dev->model.sensor_type)
- {
- case X1100_B2_SENSOR:
- dev->shadow_regs[0x34] = 0x08;
- dev->shadow_regs[0x35] = 0x08;
- dev->shadow_regs[0x36] = 0x0f;
- dev->shadow_regs[0x37] = 0x0f;
- dev->shadow_regs[0x38] = 0x16;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case X1100_2C_SENSOR:
- dev->shadow_regs[0x34] = 0x04;
- dev->shadow_regs[0x35] = 0x04;
- dev->shadow_regs[0x36] = 0x07;
- dev->shadow_regs[0x37] = 0x07;
- dev->shadow_regs[0x38] = 0x0a;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case A920_SENSOR:
- dev->shadow_regs[0x34] = 0x03;
- dev->shadow_regs[0x35] = 0x03;
- dev->shadow_regs[0x36] = 0x06;
- dev->shadow_regs[0x37] = 0x06;
- dev->shadow_regs[0x38] = 0x09;
-
- dev->shadow_regs[0x85] = 0x05;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x04;
-
- dev->shadow_regs[0x91] = 0xe0;
- dev->shadow_regs[0x92] = 0x85;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1200_SENSOR:
- dev->shadow_regs[0x34] = 0x02;
- dev->shadow_regs[0x35] = 0x02;
- dev->shadow_regs[0x36] = 0x04;
- dev->shadow_regs[0x37] = 0x04;
- dev->shadow_regs[0x38] = 0x06;
- break;
- case X1200_USB2_SENSOR:
- dev->shadow_regs[0x34] = 0x02;
- dev->shadow_regs[0x35] = 0x02;
- dev->shadow_regs[0x36] = 0x04;
- dev->shadow_regs[0x37] = 0x04;
- dev->shadow_regs[0x38] = 0x06;
- break;
- }
-
- /* set motor resolution divisor */
- dev->shadow_regs[0x39] = 0x03;
- /* set ? only for colour? */
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x00;
- dev->shadow_regs[0x82] = 0x00;
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x81;
- /* ? */
- dev->shadow_regs[0xc5] = 0x19;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x09;
- /* ? */
- dev->shadow_regs[0xc9] = 0x3a;
- dev->shadow_regs[0xca] = 0x08;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0xe3;
- dev->shadow_regs[0xe1] = 0x18;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0x03;
- /* ? */
- dev->shadow_regs[0xe3] = 0x06;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x2b;
- dev->shadow_regs[0xe5] = 0x17;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0xdc;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0xb3;
- dev->shadow_regs[0xe8] = 0x07;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x1b;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0x00;
- dev->shadow_regs[0xeb] = 0x00;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x07;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x03;
- }
+ {
+
+ switch (dev->model.sensor_type)
+ {
+ case X74_SENSOR:
+ dev->shadow_regs[0x34] = 0x08;
+ dev->shadow_regs[0x36] = 0x06;
+ dev->shadow_regs[0x38] = 0x05;
+ dev->shadow_regs[0x39] = 0x07;
+
+ dev->shadow_regs[0x80] = 0x08;
+ dev->shadow_regs[0x81] = 0x0a;
+ dev->shadow_regs[0x82] = 0x03;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_B2_SENSOR:
+ dev->shadow_regs[0x34] = 0x15;
+ dev->shadow_regs[0x36] = 0x15;
+ dev->shadow_regs[0x38] = 0x14;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x03;
+
+ dev->shadow_regs[0x80] = 0x0a;
+ dev->shadow_regs[0x81] = 0x0a;
+ dev->shadow_regs[0x82] = 0x06;
+
+ dev->shadow_regs[0x85] = 0x83;
+ dev->shadow_regs[0x86] = 0x7e;
+ dev->shadow_regs[0x87] = 0xad;
+ dev->shadow_regs[0x88] = 0x35;
+
+ dev->shadow_regs[0x91] = 0xfe;
+ dev->shadow_regs[0x92] = 0xdf;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1100_2C_SENSOR:
+ dev->shadow_regs[0x34] = 0x08;
+ dev->shadow_regs[0x36] = 0x0d;
+ dev->shadow_regs[0x38] = 0x09;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x03;
+
+ dev->shadow_regs[0x80] = 0x0e;
+ dev->shadow_regs[0x81] = 0x04;
+ dev->shadow_regs[0x82] = 0x0a;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case A920_SENSOR:
+ dev->shadow_regs[0x34] = 0x06;
+ dev->shadow_regs[0x36] = 0x10;
+ dev->shadow_regs[0x38] = 0x09;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x03;
+
+ dev->shadow_regs[0x80] = 0x0c;
+ dev->shadow_regs[0x81] = 0x02;
+ dev->shadow_regs[0x82] = 0x04;
+
+ dev->shadow_regs[0x85] = 0x05;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x04;
+
+ dev->shadow_regs[0x91] = 0xe0;
+ dev->shadow_regs[0x92] = 0x85;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1200_SENSOR:
+ dev->shadow_regs[0x34] = 0x07;
+ dev->shadow_regs[0x36] = 0x09;
+ dev->shadow_regs[0x38] = 0x04;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x03;
+
+ /* data compression
+ dev->shadow_regs[0x40] = 0x90;
+ dev->shadow_regs[0x50] = 0x20; */
+ /* no data compression */
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x0e;
+ dev->shadow_regs[0x82] = 0x06;
+ break;
+ case X1200_USB2_SENSOR:
+ dev->shadow_regs[0x34] = 0x07;
+ dev->shadow_regs[0x36] = 0x09;
+ dev->shadow_regs[0x38] = 0x04;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x03;
+
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x0e;
+ dev->shadow_regs[0x82] = 0x06;
+ break;
+ }
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x12;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x0f;
+
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x5d;
+ dev->shadow_regs[0xe1] = 0x05;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0xed;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x02;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x29;
+ dev->shadow_regs[0xe5] = 0x05;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0d;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* bounds of movement range4 -only for 75dpi grayscale */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ break;
+ case A920_MOTOR:
+ case X1100_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x17;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+ /* ? */
+ dev->shadow_regs[0xc9] = 0x3a;
+ dev->shadow_regs[0xca] = 0x0a;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x75;
+ dev->shadow_regs[0xe1] = 0x0a;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0xdd;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x05;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x59;
+ dev->shadow_regs[0xe5] = 0x0a;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0e;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ break;
+ }
+
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x37] = 0x01;
+
+ /* set colour scan */
+ dev->shadow_regs[0x2f] = 0x11;
+
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x83;
+
+ }
+ else /* greyscale */
+ {
+
+ switch (dev->model.sensor_type)
+ {
+ case X74_SENSOR:
+ dev->shadow_regs[0x34] = 0x04;
+ dev->shadow_regs[0x35] = 0x04;
+ dev->shadow_regs[0x36] = 0x08;
+ dev->shadow_regs[0x37] = 0x08;
+ dev->shadow_regs[0x38] = 0x0c;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_B2_SENSOR:
+ dev->shadow_regs[0x34] = 0x08;
+ dev->shadow_regs[0x35] = 0x08;
+ dev->shadow_regs[0x36] = 0x0f;
+ dev->shadow_regs[0x37] = 0x0f;
+ dev->shadow_regs[0x38] = 0x16;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_2C_SENSOR:
+ dev->shadow_regs[0x34] = 0x04;
+ dev->shadow_regs[0x35] = 0x04;
+ dev->shadow_regs[0x36] = 0x07;
+ dev->shadow_regs[0x37] = 0x07;
+ dev->shadow_regs[0x38] = 0x0a;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case A920_SENSOR:
+ dev->shadow_regs[0x34] = 0x03;
+ dev->shadow_regs[0x35] = 0x03;
+ dev->shadow_regs[0x36] = 0x06;
+ dev->shadow_regs[0x37] = 0x06;
+ dev->shadow_regs[0x38] = 0x09;
+
+ dev->shadow_regs[0x85] = 0x05;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x04;
+
+ dev->shadow_regs[0x91] = 0xe0;
+ dev->shadow_regs[0x92] = 0x85;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1200_SENSOR:
+ dev->shadow_regs[0x34] = 0x02;
+ dev->shadow_regs[0x35] = 0x02;
+ dev->shadow_regs[0x36] = 0x04;
+ dev->shadow_regs[0x37] = 0x04;
+ dev->shadow_regs[0x38] = 0x06;
+ break;
+ case X1200_USB2_SENSOR:
+ dev->shadow_regs[0x34] = 0x02;
+ dev->shadow_regs[0x35] = 0x02;
+ dev->shadow_regs[0x36] = 0x04;
+ dev->shadow_regs[0x37] = 0x04;
+ dev->shadow_regs[0x38] = 0x06;
+ break;
+ }
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x1c;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x0b;
+
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x05;
+
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x29;
+ dev->shadow_regs[0xe1] = 0x17;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x8f;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x06;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x61;
+
+ dev->shadow_regs[0xe5] = 0x16;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x64;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0xb5;
+ dev->shadow_regs[0xe8] = 0x08;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x32;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x0c;
+ /* bounds of movement range4 -only for 75dpi grayscale */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x08;
+ break;
+ case A920_MOTOR:
+ case X1100_MOTOR:
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x19;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+ /* ? */
+ dev->shadow_regs[0xc9] = 0x3a;
+ dev->shadow_regs[0xca] = 0x08;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0xe3;
+ dev->shadow_regs[0xe1] = 0x18;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x03;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x06;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x2b;
+ dev->shadow_regs[0xe5] = 0x17;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0xdc;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0xb3;
+ dev->shadow_regs[0xe8] = 0x07;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x1b;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x07;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x03;
+ break;
+ } /* switch motortype */
+ /* set grayscale scan */
+ dev->shadow_regs[0x2f] = 0x21;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x03;
+
+ /* set ? only for colour? */
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x00;
+ dev->shadow_regs[0x82] = 0x00;
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x81;
+
+
+ } /* else (gray)*/
/* set # of head moves per CIS read */
rts88xx_set_scan_frequency (dev->shadow_regs, 1);
/* set horizontal resolution */
dev->shadow_regs[0x79] = 0x20;
- }
+ }
/* 600dpi x 600dpi */
if (resolution == 600)
{
DBG (5, "sanei_lexmark_low_set_scan_regs(): 600 DPI resolution\n");
+
+
if (isColourScan)
- {
- /* set colour scan */
- dev->shadow_regs[0x2f] = 0x11;
- /* set ? */
- switch (dev->model.sensor_type)
- {
- case X1100_B2_SENSOR:
- dev->shadow_regs[0x34] = 0x15;
- dev->shadow_regs[0x36] = 0x15;
- dev->shadow_regs[0x38] = 0x14;
-
- dev->shadow_regs[0x80] = 0x02;
- dev->shadow_regs[0x81] = 0x02;
- dev->shadow_regs[0x82] = 0x08;
-
- dev->shadow_regs[0x85] = 0x83;
- dev->shadow_regs[0x86] = 0x7e;
- dev->shadow_regs[0x87] = 0xad;
- dev->shadow_regs[0x88] = 0x35;
-
- dev->shadow_regs[0x91] = 0xfe;
- dev->shadow_regs[0x92] = 0xdf;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1100_2C_SENSOR:
- dev->shadow_regs[0x34] = 0x08;
- dev->shadow_regs[0x36] = 0x0d;
- dev->shadow_regs[0x38] = 0x09;
-
- dev->shadow_regs[0x80] = 0x0e;
- dev->shadow_regs[0x81] = 0x02;
- dev->shadow_regs[0x82] = 0x0a;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case A920_SENSOR:
- dev->shadow_regs[0x34] = 0x06;
- dev->shadow_regs[0x36] = 0x0f;
- dev->shadow_regs[0x38] = 0x09;
-
- dev->shadow_regs[0x79] = 0x40;
-
- dev->shadow_regs[0x80] = 0x0e;
- dev->shadow_regs[0x81] = 0x0e;
- dev->shadow_regs[0x82] = 0x00;
-
- dev->shadow_regs[0x85] = 0x05;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x04;
-
- dev->shadow_regs[0x91] = 0x60;
- dev->shadow_regs[0x92] = 0x85;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1200_SENSOR:
- dev->shadow_regs[0x34] = 0x07;
- dev->shadow_regs[0x36] = 0x0a;
- dev->shadow_regs[0x38] = 0x04;
-
- /* data compression
- dev->shadow_regs[0x40] = 0x90;
- dev->shadow_regs[0x50] = 0x20; */
-
- /* no data compression */
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x80] = 0x02;
- dev->shadow_regs[0x81] = 0x00;
- dev->shadow_regs[0x82] = 0x06;
- break;
- case X1200_USB2_SENSOR:
- dev->shadow_regs[0x34] = 0x0d;
- dev->shadow_regs[0x36] = 0x13;
- dev->shadow_regs[0x38] = 0x10;
-
- dev->shadow_regs[0x80] = 0x04;
- dev->shadow_regs[0x81] = 0x0e;
- dev->shadow_regs[0x82] = 0x08;
-
- dev->shadow_regs[0x85] = 0x02;
- dev->shadow_regs[0x86] = 0x3b;
- dev->shadow_regs[0x87] = 0x0f;
- dev->shadow_regs[0x88] = 0x24;
-
- dev->shadow_regs[0x91] = 0x19;
- dev->shadow_regs[0x92] = 0x30;
- dev->shadow_regs[0x93] = 0x0e;
- dev->shadow_regs[0xc5] = 0x17;
- dev->shadow_regs[0xc6] = 0x09;
- dev->shadow_regs[0xca] = 0x0a;
- break;
- }
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x37] = 0x01;
-
- /* set motor resolution divisor */
- dev->shadow_regs[0x39] = 0x03;
- /* set # of head moves per CIS read */
- rts88xx_set_scan_frequency (dev->shadow_regs, 2);
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x86;
- /* ? */
- dev->shadow_regs[0xc5] = 0x27;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x0c;
- /* ? */
- dev->shadow_regs[0xc9] = 0x3a;
- dev->shadow_regs[0xca] = 0x1a;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0x57;
- dev->shadow_regs[0xe1] = 0x0a;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0xbf;
- /* ? */
- dev->shadow_regs[0xe3] = 0x05;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x3b;
- dev->shadow_regs[0xe5] = 0x0a;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0x0e;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0x00;
- dev->shadow_regs[0xe8] = 0x00;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x05;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0x00;
- dev->shadow_regs[0xeb] = 0x00;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x01;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x01;
- }
+ {
+ /* 600 dpi color doesn't work for X74 yet */
+ if (dev->model.sensor_type == X74_SENSOR)
+ return SANE_STATUS_INVAL;
+
+ switch (dev->model.sensor_type)
+ {
+ case X74_SENSOR:
+ dev->shadow_regs[0x34] = 0x10;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x0c;
+ dev->shadow_regs[0x37] = 0x01;
+ dev->shadow_regs[0x38] = 0x09;
+
+ dev->shadow_regs[0x80] = 0x02;
+ dev->shadow_regs[0x81] = 0x08;
+ dev->shadow_regs[0x82] = 0x08;
+
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+
+ /*dev->shadow_regs[0x34] = 0x08;
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x36] = 0x06;
+ dev->shadow_regs[0x37] = 0x01;
+ dev->shadow_regs[0x38] = 0x05;
+
+
+ dev->shadow_regs[0x80] = 0x09;
+ dev->shadow_regs[0x81] = 0x0c;
+ dev->shadow_regs[0x82] = 0x04;
+
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;*/
+
+
+
+ case X1100_B2_SENSOR:
+ dev->shadow_regs[0x34] = 0x15;
+ dev->shadow_regs[0x36] = 0x15;
+ dev->shadow_regs[0x38] = 0x14;
+
+ dev->shadow_regs[0x80] = 0x02;
+ dev->shadow_regs[0x81] = 0x02;
+ dev->shadow_regs[0x82] = 0x08;
+
+ dev->shadow_regs[0x85] = 0x83;
+ dev->shadow_regs[0x86] = 0x7e;
+ dev->shadow_regs[0x87] = 0xad;
+ dev->shadow_regs[0x88] = 0x35;
+
+ dev->shadow_regs[0x91] = 0xfe;
+ dev->shadow_regs[0x92] = 0xdf;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1100_2C_SENSOR:
+ dev->shadow_regs[0x34] = 0x08;
+ dev->shadow_regs[0x36] = 0x0d;
+ dev->shadow_regs[0x38] = 0x09;
+
+ dev->shadow_regs[0x80] = 0x0e;
+ dev->shadow_regs[0x81] = 0x02;
+ dev->shadow_regs[0x82] = 0x0a;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case A920_SENSOR:
+ dev->shadow_regs[0x34] = 0x06;
+ dev->shadow_regs[0x36] = 0x0f;
+ dev->shadow_regs[0x38] = 0x09;
+
+ dev->shadow_regs[0x79] = 0x40;
+
+ dev->shadow_regs[0x80] = 0x0e;
+ dev->shadow_regs[0x81] = 0x0e;
+ dev->shadow_regs[0x82] = 0x00;
+
+ dev->shadow_regs[0x85] = 0x05;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x04;
+
+ dev->shadow_regs[0x91] = 0x60;
+ dev->shadow_regs[0x92] = 0x85;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1200_SENSOR:
+ dev->shadow_regs[0x34] = 0x07;
+ dev->shadow_regs[0x36] = 0x0a;
+ dev->shadow_regs[0x38] = 0x04;
+
+ /* data compression
+ dev->shadow_regs[0x40] = 0x90;
+ dev->shadow_regs[0x50] = 0x20; */
+
+ /* no data compression */
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x80] = 0x02;
+ dev->shadow_regs[0x81] = 0x00;
+ dev->shadow_regs[0x82] = 0x06;
+ break;
+ case X1200_USB2_SENSOR:
+ dev->shadow_regs[0x34] = 0x0d;
+ dev->shadow_regs[0x36] = 0x13;
+ dev->shadow_regs[0x38] = 0x10;
+
+ dev->shadow_regs[0x80] = 0x04;
+ dev->shadow_regs[0x81] = 0x0e;
+ dev->shadow_regs[0x82] = 0x08;
+
+ dev->shadow_regs[0x85] = 0x02;
+ dev->shadow_regs[0x86] = 0x3b;
+ dev->shadow_regs[0x87] = 0x0f;
+ dev->shadow_regs[0x88] = 0x24;
+
+ dev->shadow_regs[0x91] = 0x19;
+ dev->shadow_regs[0x92] = 0x30;
+ dev->shadow_regs[0x93] = 0x0e;
+ dev->shadow_regs[0xc5] = 0x17;
+ dev->shadow_regs[0xc6] = 0x09;
+ dev->shadow_regs[0xca] = 0x0a;
+ break;
+ }
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x81;
+ /* ? */
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x21;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x20;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x00;
+ dev->shadow_regs[0xe1] = 0x00;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0xbf;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x05;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x00;
+ dev->shadow_regs[0xe5] = 0x00;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0d;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* bounds of movement range4 -only for 75dpi grayscale */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ break;
+ case A920_MOTOR:
+ case X1100_MOTOR:
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x86;
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x27;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x0c;
+ /* ? */
+ dev->shadow_regs[0xc9] = 0x3a;
+ dev->shadow_regs[0xca] = 0x1a;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x57;
+ dev->shadow_regs[0xe1] = 0x0a;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0xbf;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x05;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x3b;
+ dev->shadow_regs[0xe5] = 0x0a;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0e;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ break;
+ }
+ /* set colour scan */
+ dev->shadow_regs[0x2f] = 0x11;
+
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x37] = 0x01;
+
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x03;
+ /* set # of head moves per CIS read */
+ rts88xx_set_scan_frequency (dev->shadow_regs, 2);
+
+
+ }
else
- {
- /* set grayscale scan */
- dev->shadow_regs[0x2f] = 0x21;
- switch (dev->model.sensor_type)
- {
- case X1100_B2_SENSOR:
- dev->shadow_regs[0x34] = 0x11;
- dev->shadow_regs[0x35] = 0x11;
- dev->shadow_regs[0x36] = 0x21;
- dev->shadow_regs[0x37] = 0x21;
- dev->shadow_regs[0x38] = 0x31;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case X1100_2C_SENSOR:
- dev->shadow_regs[0x34] = 0x07;
- dev->shadow_regs[0x35] = 0x07;
- dev->shadow_regs[0x36] = 0x0d;
- dev->shadow_regs[0x37] = 0x0d;
- dev->shadow_regs[0x38] = 0x13;
-
- dev->shadow_regs[0x85] = 0x20;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
-
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- break;
- case A920_SENSOR:
- dev->shadow_regs[0x34] = 0x05;
- dev->shadow_regs[0x35] = 0x05;
- dev->shadow_regs[0x36] = 0x0b;
- dev->shadow_regs[0x37] = 0x0b;
- dev->shadow_regs[0x38] = 0x11;
-
- dev->shadow_regs[0x85] = 0x05;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x04;
-
- dev->shadow_regs[0x91] = 0xe0;
- dev->shadow_regs[0x92] = 0x85;
- dev->shadow_regs[0x93] = 0x0e;
- break;
- case X1200_SENSOR:
- dev->shadow_regs[0x34] = 0x03;
- dev->shadow_regs[0x35] = 0x03;
- dev->shadow_regs[0x36] = 0x07;
- dev->shadow_regs[0x37] = 0x07;
- dev->shadow_regs[0x38] = 0x0b;
-
- /* data compression
- dev->shadow_regs[0x40] = 0x90;
- dev->shadow_regs[0x50] = 0x20; */
- /* no data compression */
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0xff;
- dev->shadow_regs[0x88] = 0x02;
-
- dev->shadow_regs[0x92] = 0x00;
-
- break;
- case X1200_USB2_SENSOR:
- dev->shadow_regs[0x34] = 0x03;
- dev->shadow_regs[0x35] = 0x03;
- dev->shadow_regs[0x36] = 0x07;
- dev->shadow_regs[0x37] = 0x07;
- dev->shadow_regs[0x38] = 0x0b;
-
- dev->shadow_regs[0x40] = 0x80;
- dev->shadow_regs[0x50] = 0x00;
-
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0xff;
- dev->shadow_regs[0x88] = 0x02;
-
- dev->shadow_regs[0x92] = 0x00;
- break;
- }
- /* set motor resolution divisor */
- dev->shadow_regs[0x39] = 0x01;
- /* set # of head moves per CIS read */
- rts88xx_set_scan_frequency (dev->shadow_regs, 1);
-
- /* set ? only for colour? */
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x00;
- dev->shadow_regs[0x82] = 0x00;
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x81;
- /* ? */
- dev->shadow_regs[0xc5] = 0x22;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x09;
- /* ? */
- dev->shadow_regs[0xc9] = 0x3b;
- dev->shadow_regs[0xca] = 0x1f;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0xf7;
- dev->shadow_regs[0xe1] = 0x16;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0x87;
- /* ? */
- dev->shadow_regs[0xe3] = 0x13;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x1b;
- dev->shadow_regs[0xe5] = 0x16;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0xdc;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0x00;
- dev->shadow_regs[0xe8] = 0x00;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x1b;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0x00;
- dev->shadow_regs[0xeb] = 0x00;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x07;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x03;
- }
+ {
+ switch (dev->model.sensor_type)
+ {
+ case X74_SENSOR:
+ dev->shadow_regs[0x2c] = 0x04;
+ dev->shadow_regs[0x2d] = 0x46;
+ dev->shadow_regs[0x34] = 0x05;
+ dev->shadow_regs[0x35] = 0x05;
+ dev->shadow_regs[0x36] = 0x0b;
+ dev->shadow_regs[0x37] = 0x0b;
+ dev->shadow_regs[0x38] = 0x11;
+ dev->shadow_regs[0x40] = 0x40;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_B2_SENSOR:
+ dev->shadow_regs[0x34] = 0x11;
+ dev->shadow_regs[0x35] = 0x11;
+ dev->shadow_regs[0x36] = 0x21;
+ dev->shadow_regs[0x37] = 0x21;
+ dev->shadow_regs[0x38] = 0x31;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case X1100_2C_SENSOR:
+ dev->shadow_regs[0x34] = 0x07;
+ dev->shadow_regs[0x35] = 0x07;
+ dev->shadow_regs[0x36] = 0x0d;
+ dev->shadow_regs[0x37] = 0x0d;
+ dev->shadow_regs[0x38] = 0x13;
+
+ dev->shadow_regs[0x85] = 0x20;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ break;
+ case A920_SENSOR:
+ dev->shadow_regs[0x34] = 0x05;
+ dev->shadow_regs[0x35] = 0x05;
+ dev->shadow_regs[0x36] = 0x0b;
+ dev->shadow_regs[0x37] = 0x0b;
+ dev->shadow_regs[0x38] = 0x11;
+
+ dev->shadow_regs[0x85] = 0x05;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x04;
+
+ dev->shadow_regs[0x91] = 0xe0;
+ dev->shadow_regs[0x92] = 0x85;
+ dev->shadow_regs[0x93] = 0x0e;
+ break;
+ case X1200_SENSOR:
+ dev->shadow_regs[0x34] = 0x03;
+ dev->shadow_regs[0x35] = 0x03;
+ dev->shadow_regs[0x36] = 0x07;
+ dev->shadow_regs[0x37] = 0x07;
+ dev->shadow_regs[0x38] = 0x0b;
+
+ /* data compression
+ dev->shadow_regs[0x40] = 0x90;
+ dev->shadow_regs[0x50] = 0x20; */
+ /* no data compression */
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0xff;
+ dev->shadow_regs[0x88] = 0x02;
+
+ dev->shadow_regs[0x92] = 0x00;
+
+ break;
+ case X1200_USB2_SENSOR:
+ dev->shadow_regs[0x34] = 0x03;
+ dev->shadow_regs[0x35] = 0x03;
+ dev->shadow_regs[0x36] = 0x07;
+ dev->shadow_regs[0x37] = 0x07;
+ dev->shadow_regs[0x38] = 0x0b;
+
+ dev->shadow_regs[0x40] = 0x80;
+ dev->shadow_regs[0x50] = 0x00;
+
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0xff;
+ dev->shadow_regs[0x88] = 0x02;
+
+ dev->shadow_regs[0x92] = 0x00;
+ break;
+ }
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ /* set # of head moves per CIS read */
+ rts88xx_set_scan_frequency (dev->shadow_regs, 1);
+ /* ? */
+ dev->shadow_regs[0xc4] = 0x20;
+ dev->shadow_regs[0xc5] = 0x22;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x0b;
+
+ dev->shadow_regs[0xc8] = 0x04;
+ dev->shadow_regs[0xc9] = 0x39;
+ dev->shadow_regs[0xca] = 0x1f;
+
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x2f;
+ dev->shadow_regs[0xe1] = 0x11;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x9f;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x0f;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0xcb;
+
+ dev->shadow_regs[0xe5] = 0x10;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x64;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x32;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x0c;
+ /* bounds of movement range4 -only for 75dpi grayscale */
+ dev->shadow_regs[0xed] = 0x00;
+ dev->shadow_regs[0xee] = 0x00;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x08;
+ break;
+ case X1100_MOTOR:
+ case A920_MOTOR:
+ /* set ? only for colour? */
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x00;
+ dev->shadow_regs[0x82] = 0x00;
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x22;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+ /* ? */
+ dev->shadow_regs[0xc9] = 0x3b;
+ dev->shadow_regs[0xca] = 0x1f;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0xf7;
+ dev->shadow_regs[0xe1] = 0x16;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x87;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x13;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x1b;
+ dev->shadow_regs[0xe5] = 0x16;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0xdc;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x1b;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x07;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x03;
+ break;
+ }
+
+ /* set grayscale scan */
+ dev->shadow_regs[0x2f] = 0x21;
+
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x01;
+
+ /* set # of head moves per CIS read */
+ rts88xx_set_scan_frequency (dev->shadow_regs, 1);
+
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x81;
+ } /* else (grayscale) */
/* set horizontal resolution */
dev->shadow_regs[0x79] = 0x40;
+
}
/*600dpi x 1200dpi */
if (resolution == 1200)
{
DBG (5, "sanei_lexmark_low_set_scan_regs(): 1200 DPI resolution\n");
- if (isColourScan)
- {
- /* set colour scan */
- dev->shadow_regs[0x2f] = 0x11;
- /* set motor resolution divisor */
- dev->shadow_regs[0x39] = 0x01;
- /* set # of head moves per CIS read */
- rts88xx_set_scan_frequency (dev->shadow_regs, 2);
-
- if (dev->model.sensor_type == X1100_B2_SENSOR)
- {
- /* set ? */
- dev->shadow_regs[0x34] = 0x29;
- dev->shadow_regs[0x36] = 0x29;
- dev->shadow_regs[0x38] = 0x28;
- /* set ? */
- dev->shadow_regs[0x80] = 0x04;
- dev->shadow_regs[0x81] = 0x04;
- dev->shadow_regs[0x82] = 0x08;
- dev->shadow_regs[0x85] = 0x83;
- dev->shadow_regs[0x86] = 0x7e;
- dev->shadow_regs[0x87] = 0xad;
- dev->shadow_regs[0x88] = 0x35;
- dev->shadow_regs[0x91] = 0xfe;
- dev->shadow_regs[0x92] = 0xdf;
- }
- else
- { /* A920 case */
- dev->shadow_regs[0x34] = 0x0c;
- dev->shadow_regs[0x36] = 0x1e;
- dev->shadow_regs[0x38] = 0x10;
-
- dev->shadow_regs[0x80] = 0x0c;
- dev->shadow_regs[0x81] = 0x08;
- dev->shadow_regs[0x82] = 0x0c;
-
- dev->shadow_regs[0x85] = 0x05;
- dev->shadow_regs[0x86] = 0x14;
- dev->shadow_regs[0x87] = 0x06;
- dev->shadow_regs[0x88] = 0x04;
-
- dev->shadow_regs[0x91] = 0x60;
- dev->shadow_regs[0x92] = 0x85;
- }
+ /* 1200 dpi doesn't work for X74 yet */
+ if (dev->model.sensor_type == X74_SENSOR)
+ return SANE_STATUS_INVAL;
- dev->shadow_regs[0x35] = 0x01;
- dev->shadow_regs[0x37] = 0x01;
- /* set motor resolution divisor */
- dev->shadow_regs[0x39] = 0x01;
- dev->shadow_regs[0x93] = 0x0e;
-
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x86;
- /* ? */
- dev->shadow_regs[0xc5] = 0x41;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x0c;
- /* ? */
- dev->shadow_regs[0xc9] = 0x3a;
- dev->shadow_regs[0xca] = 0x40;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0x00;
- dev->shadow_regs[0xe1] = 0x00;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0x85;
- /* ? */
- dev->shadow_regs[0xe3] = 0x0b;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x00;
- dev->shadow_regs[0xe5] = 0x00;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0x0e;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0x00;
- dev->shadow_regs[0xe8] = 0x00;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x05;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0x00;
- dev->shadow_regs[0xeb] = 0x00;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x01;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x01;
- }
+ if (isColourScan)
+ {
+ /* set colour scan */
+ dev->shadow_regs[0x2f] = 0x11;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x01;
+ /* set # of head moves per CIS read */
+ rts88xx_set_scan_frequency (dev->shadow_regs, 2);
+
+ if (dev->model.sensor_type == X1100_B2_SENSOR)
+ {
+ /* set ? */
+ dev->shadow_regs[0x34] = 0x29;
+ dev->shadow_regs[0x36] = 0x29;
+ dev->shadow_regs[0x38] = 0x28;
+ /* set ? */
+ dev->shadow_regs[0x80] = 0x04;
+ dev->shadow_regs[0x81] = 0x04;
+ dev->shadow_regs[0x82] = 0x08;
+ dev->shadow_regs[0x85] = 0x83;
+ dev->shadow_regs[0x86] = 0x7e;
+ dev->shadow_regs[0x87] = 0xad;
+ dev->shadow_regs[0x88] = 0x35;
+ dev->shadow_regs[0x91] = 0xfe;
+ dev->shadow_regs[0x92] = 0xdf;
+ }
+ else
+ { /* A920 case */
+ dev->shadow_regs[0x34] = 0x0c;
+ dev->shadow_regs[0x36] = 0x1e;
+ dev->shadow_regs[0x38] = 0x10;
+
+ dev->shadow_regs[0x80] = 0x0c;
+ dev->shadow_regs[0x81] = 0x08;
+ dev->shadow_regs[0x82] = 0x0c;
+
+ dev->shadow_regs[0x85] = 0x05;
+ dev->shadow_regs[0x86] = 0x14;
+ dev->shadow_regs[0x87] = 0x06;
+ dev->shadow_regs[0x88] = 0x04;
+
+ dev->shadow_regs[0x91] = 0x60;
+ dev->shadow_regs[0x92] = 0x85;
+ }
+
+ dev->shadow_regs[0x35] = 0x01;
+ dev->shadow_regs[0x37] = 0x01;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x01;
+ dev->shadow_regs[0x93] = 0x0e;
+
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x86;
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x41;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x0c;
+ /* ? */
+ dev->shadow_regs[0xc9] = 0x3a;
+ dev->shadow_regs[0xca] = 0x40;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x00;
+ dev->shadow_regs[0xe1] = 0x00;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0x85;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x0b;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x00;
+ dev->shadow_regs[0xe5] = 0x00;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0x0e;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x05;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x01;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x01;
+ }
else
- {
- /* set grayscale scan */
- dev->shadow_regs[0x2f] = 0x21;
- /* set ? */
- dev->shadow_regs[0x34] = 0x22;
- dev->shadow_regs[0x35] = 0x22;
- dev->shadow_regs[0x36] = 0x42;
- dev->shadow_regs[0x37] = 0x42;
- dev->shadow_regs[0x38] = 0x62;
- /* set motor resolution divisor */
- dev->shadow_regs[0x39] = 0x01;
- /* set # of head moves per CIS read */
- rts88xx_set_scan_frequency (dev->shadow_regs, 0);
-
- /* set ? only for colour? */
- dev->shadow_regs[0x80] = 0x00;
- dev->shadow_regs[0x81] = 0x00;
- dev->shadow_regs[0x82] = 0x00;
- dev->shadow_regs[0x85] = 0x00;
- dev->shadow_regs[0x86] = 0x00;
- dev->shadow_regs[0x87] = 0x00;
- dev->shadow_regs[0x88] = 0x00;
- dev->shadow_regs[0x91] = 0x00;
- dev->shadow_regs[0x92] = 0x00;
- dev->shadow_regs[0x93] = 0x06;
- /* Motor enable & Coordinate space denominator */
- dev->shadow_regs[0xc3] = 0x81;
- /* ? */
- dev->shadow_regs[0xc5] = 0x41;
- /* Movement direction & step size */
- dev->shadow_regs[0xc6] = 0x09;
- /* ? */
- dev->shadow_regs[0xc9] = 0x3a;
- dev->shadow_regs[0xca] = 0x40;
- /* bounds of movement range0 */
- dev->shadow_regs[0xe0] = 0x00;
- dev->shadow_regs[0xe1] = 0x00;
- /* step size range0 */
- dev->shadow_regs[0xe2] = 0xc7;
- /* ? */
- dev->shadow_regs[0xe3] = 0x29;
- /* bounds of movement range1 */
- dev->shadow_regs[0xe4] = 0x00;
- dev->shadow_regs[0xe5] = 0x00;
- /* step size range1 */
- dev->shadow_regs[0xe6] = 0xdc;
- /* bounds of movement range2 */
- dev->shadow_regs[0xe7] = 0x00;
- dev->shadow_regs[0xe8] = 0x00;
- /* step size range2 */
- dev->shadow_regs[0xe9] = 0x1b;
- /* bounds of movement range3 */
- dev->shadow_regs[0xea] = 0x00;
- dev->shadow_regs[0xeb] = 0x00;
- /* step size range3 */
- dev->shadow_regs[0xec] = 0x07;
- /* step size range4 */
- dev->shadow_regs[0xef] = 0x03;
- }
+ {
+ /* set grayscale scan */
+ dev->shadow_regs[0x2f] = 0x21;
+ /* set ? */
+ dev->shadow_regs[0x34] = 0x22;
+ dev->shadow_regs[0x35] = 0x22;
+ dev->shadow_regs[0x36] = 0x42;
+ dev->shadow_regs[0x37] = 0x42;
+ dev->shadow_regs[0x38] = 0x62;
+ /* set motor resolution divisor */
+ dev->shadow_regs[0x39] = 0x01;
+ /* set # of head moves per CIS read */
+ rts88xx_set_scan_frequency (dev->shadow_regs, 0);
+
+ /* set ? only for colour? */
+ dev->shadow_regs[0x80] = 0x00;
+ dev->shadow_regs[0x81] = 0x00;
+ dev->shadow_regs[0x82] = 0x00;
+ dev->shadow_regs[0x85] = 0x00;
+ dev->shadow_regs[0x86] = 0x00;
+ dev->shadow_regs[0x87] = 0x00;
+ dev->shadow_regs[0x88] = 0x00;
+ dev->shadow_regs[0x91] = 0x00;
+ dev->shadow_regs[0x92] = 0x00;
+ dev->shadow_regs[0x93] = 0x06;
+ /* Motor enable & Coordinate space denominator */
+ dev->shadow_regs[0xc3] = 0x81;
+ /* ? */
+ dev->shadow_regs[0xc5] = 0x41;
+ /* Movement direction & step size */
+ dev->shadow_regs[0xc6] = 0x09;
+ /* ? */
+ dev->shadow_regs[0xc9] = 0x3a;
+ dev->shadow_regs[0xca] = 0x40;
+ /* bounds of movement range0 */
+ dev->shadow_regs[0xe0] = 0x00;
+ dev->shadow_regs[0xe1] = 0x00;
+ /* step size range0 */
+ dev->shadow_regs[0xe2] = 0xc7;
+ /* ? */
+ dev->shadow_regs[0xe3] = 0x29;
+ /* bounds of movement range1 */
+ dev->shadow_regs[0xe4] = 0x00;
+ dev->shadow_regs[0xe5] = 0x00;
+ /* step size range1 */
+ dev->shadow_regs[0xe6] = 0xdc;
+ /* bounds of movement range2 */
+ dev->shadow_regs[0xe7] = 0x00;
+ dev->shadow_regs[0xe8] = 0x00;
+ /* step size range2 */
+ dev->shadow_regs[0xe9] = 0x1b;
+ /* bounds of movement range3 */
+ dev->shadow_regs[0xea] = 0x00;
+ dev->shadow_regs[0xeb] = 0x00;
+ /* step size range3 */
+ dev->shadow_regs[0xec] = 0x07;
+ /* step size range4 */
+ dev->shadow_regs[0xef] = 0x03;
+ }
/* set horizontal resolution */
dev->shadow_regs[0x79] = 0x40;
@@ -4213,6 +5106,10 @@ low_rewind (Lexmark_Device * dev, SANE_Byte * regs)
else
new_location += 420;
+ if (dev->model.sensor_type == X74_SENSOR)
+ new_location += 150;
+
+
location = new_location - 1;
DBG (2, "low_rewind: %d=>new_location=%d\n", dev->val[OPT_BR_Y].w,
new_location);
@@ -4234,24 +5131,50 @@ low_rewind (Lexmark_Device * dev, SANE_Byte * regs)
regs[0x62] = LOBYTE (new_location);
regs[0x63] = HIBYTE (new_location);
-/* set regs for rewind */
- regs[0x79] = 0x40;
- regs[0xb2] = 0x04;
- regs[0xc3] = 0x81;
- regs[0xc6] = 0x01;
- regs[0xc9] = 0x3b;
- regs[0xe0] = 0x2b;
- regs[0xe1] = 0x17;
- regs[0xe2] = 0xe7;
- regs[0xe3] = 0x03;
- regs[0xe6] = 0xdc;
- regs[0xe7] = 0xb3;
- regs[0xe8] = 0x07;
- regs[0xe9] = 0x1b;
- regs[0xea] = 0x00;
- regs[0xeb] = 0x00;
- regs[0xec] = 0x07;
- regs[0xef] = 0x03;
+ switch (dev->model.motor_type)
+ {
+ case X74_MOTOR:
+ regs[0xc3] = 0x81;
+ regs[0xc6] = 0x03;
+ regs[0xc9] = 0x39;
+ regs[0xe0] = 0x81;
+ regs[0xe1] = 0x16;
+ regs[0xe2] = 0xe1;
+ regs[0xe3] = 0x04;
+ regs[0xe4] = 0xe7;
+ regs[0xe5] = 0x14;
+ regs[0xe6] = 0x64;
+ regs[0xe7] = 0xd5;
+ regs[0xe8] = 0x08;
+ regs[0xe9] = 0x32;
+ regs[0xea] = 0xed;
+ regs[0xeb] = 0x04;
+ regs[0xec] = 0x0c;
+ regs[0xef] = 0x08;
+ break;
+ case X1100_MOTOR:
+ case A920_MOTOR:
+ /* set regs for rewind */
+ regs[0x79] = 0x40;
+ regs[0xb2] = 0x04;
+ regs[0xc3] = 0x81;
+ regs[0xc6] = 0x01;
+ regs[0xc9] = 0x3b;
+ regs[0xe0] = 0x2b;
+ regs[0xe1] = 0x17;
+ regs[0xe2] = 0xe7;
+ regs[0xe3] = 0x03;
+ regs[0xe6] = 0xdc;
+ regs[0xe7] = 0xb3;
+ regs[0xe8] = 0x07;
+ regs[0xe9] = 0x1b;
+ regs[0xea] = 0x00;
+ regs[0xeb] = 0x00;
+ regs[0xec] = 0x07;
+ regs[0xef] = 0x03;
+ break;
+ }
+
/* starts scan */
low_start_scan (dev->devnum, regs);
@@ -4751,6 +5674,7 @@ sanei_lexmark_low_gain_calibration (Lexmark_Device * dev)
ex = regs[0x6d] * 256 + regs[0x6c];
pixels = (ex - sx) / regs[0x7a];
+
/* set up inital gains */
red = 6;
green = 6;
@@ -4777,13 +5701,12 @@ sanei_lexmark_low_gain_calibration (Lexmark_Device * dev)
{
status = low_simple_scan (dev, regs, sx, pixels, yoffset, lines, &data);
if (status != SANE_STATUS_GOOD)
- {
- DBG (1,
- "sanei_lexmark_low_gain_calibration: low_simple_scan failed!\n");
- if (data != NULL)
- free (data);
- return status;
- }
+ {
+ DBG (1, "sanei_lexmark_low_gain_calibration: low_simple_scan failed!\n");
+ if (data != NULL)
+ free (data);
+ return status;
+ }
#ifdef DEEP_DEBUG
sprintf (title, "gain%02d.pnm", i);
write_pnm_file (title, pixels, lines, rts88xx_is_color (regs), data);
@@ -4791,12 +5714,12 @@ sanei_lexmark_low_gain_calibration (Lexmark_Device * dev)
average = average_area (regs, data, pixels, lines, &ra, &ga, &ba);
free (data);
if (ra < dev->sensor->red_gain_target)
- red++;
+ red++;
if (ga < dev->sensor->green_gain_target
|| (dev->sensor->gray_gain_target && !rts88xx_is_color (regs)))
- green++;
+ green++;
if (ba < dev->sensor->blue_gain_target)
- blue++;
+ blue++;
rts88xx_set_gain (regs, red, green, blue);
i++;
}
@@ -4804,8 +5727,7 @@ sanei_lexmark_low_gain_calibration (Lexmark_Device * dev)
dev->gain.green = green;
dev->gain.blue = blue;
dev->gain.gray = green;
- DBG (7,
- "sanei_lexmark_low_gain_calibration: gain=(0x%02x,0x%02x,0x%02x).\n",
+ DBG (7, "sanei_lexmark_low_gain_calibration: gain=(0x%02x,0x%02x,0x%02x).\n",
dev->gain.red, dev->gain.green, dev->gain.blue);
DBG (2, "sanei_lexmark_low_gain_calibration: end.\n");
return status;
@@ -4830,7 +5752,9 @@ sanei_lexmark_low_shading_calibration (Lexmark_Device * dev)
/* enough 75 dpi lines to "go off" home position dot,
and include shading area */
int lines = 4 + 4;
- int yoffset = 1;
+ int lineoffset = 1;
+ int linetotal = lines + lineoffset;
+ int yoffset;
int x, y;
float rtarget, btarget, gtarget;
@@ -4842,8 +5766,11 @@ sanei_lexmark_low_shading_calibration (Lexmark_Device * dev)
/* allocate memory for scan */
sx = regs[0x67] * 256 + regs[0x66];
ex = regs[0x6d] * 256 + regs[0x6c];
+
+
DBG (7, "startx=%d, endx=%d, coef=%d, r2f=0x%02x\n",
sx, ex, regs[0x7a], regs[0x2f]);
+
pixels = (ex - sx) / regs[0x7a];
if (rts88xx_is_color (regs))
bpl = 3 * pixels;
@@ -4852,6 +5779,8 @@ sanei_lexmark_low_shading_calibration (Lexmark_Device * dev)
/* adjust the target area to the scanning resolution */
lines = (8 * lines) / regs[0x7a];
+ lineoffset = (8 * lineoffset) / regs[0x7a];
+ linetotal = (8 * linetotal) / regs[0x7a];
data = (SANE_Byte *) malloc (bpl * lines);
DBG (7, "pixels=%d, lines=%d, size=%d\n", pixels, lines, bpl * lines);
@@ -4878,13 +5807,12 @@ sanei_lexmark_low_shading_calibration (Lexmark_Device * dev)
regs[0xc3] = regs[0xc3] | 0x80;
/* execute scan */
- status = low_simple_scan (dev, regs, sx, pixels, yoffset, lines, &data);
+ status = low_simple_scan (dev, regs, sx, pixels, lineoffset, lines, &data);
if (status != SANE_STATUS_GOOD)
{
- DBG (1,
- "sanei_lexmark_low_shading_calibration: low_simple_scan failed!\n");
+ DBG (1,"sanei_lexmark_low_shading_calibration: low_simple_scan failed!\n");
if (data != NULL)
- free (data);
+ free (data);
return status;
}
@@ -4986,6 +5914,9 @@ sanei_lexmark_low_shading_calibration (Lexmark_Device * dev)
/* do the scan backward to go back to start position */
regs[0xc6] &= 0xF7;
lines = (8 * 8) / regs[0x7a];
+ /* it shoud use linetotal to account for the lineoffset */
+ if (dev->model.sensor_type == X74_SENSOR)
+ lines = linetotal;
/* execute scan */
status = low_simple_scan (dev, regs, sx, pixels, 1, lines, &data);
@@ -5010,6 +5941,8 @@ sanei_lexmark_low_shading_calibration (Lexmark_Device * dev)
SANE_Status
sanei_lexmark_low_calibration (Lexmark_Device * dev)
{
+ DBG (2, "sanei_lexmark_low_calibration: start.\n");
+
SANE_Status status;
status = sanei_lexmark_low_offset_calibration (dev);
@@ -5063,6 +5996,7 @@ sanei_lexmark_low_calibration (Lexmark_Device * dev)
}
status = sanei_lexmark_low_shading_calibration (dev);
+
if (status != SANE_STATUS_GOOD)
return status;
diff --git a/backend/lexmark_models.c b/backend/lexmark_models.c
index fec3776..b078107 100644
--- a/backend/lexmark_models.c
+++ b/backend/lexmark_models.c
@@ -49,8 +49,10 @@ static Lexmark_Model model_list[] = {
"Lexmark X1100", /* name */
"Lexmark", /* vendor */
"X1100/rev. B2", /* model */
- X1100_MOTOR, /* X1100 series has 2 sensors */
- X1100_B2_SENSOR},
+ /* X1100 series has 2 sensors */
+ X1100_B2_SENSOR,
+ 1235, /* first x-coordinate of Home Point */
+ 1258}, /* second x-coordinate of Home Point */
{
0x043d, /* vendor id */
0x007c, /* product id */
@@ -60,7 +62,9 @@ static Lexmark_Model model_list[] = {
"X1100/rev. 2C", /* model */
A920_MOTOR, /* X1100 series has 2 sensors, 2C or B2. It
is detected at sane_open() */
- X1100_2C_SENSOR},
+ X1100_2C_SENSOR,
+ 1235, /* first x-coordinate of Home Point */
+ 1258}, /* second x-coordinate of Home Point */
{
0x413c, /* vendor id */
0x5105, /* product id */
@@ -69,7 +73,9 @@ static Lexmark_Model model_list[] = {
"Dell", /* vendor */
"A920", /* model */
A920_MOTOR,
- A920_SENSOR},
+ A920_SENSOR,
+ 1235, /* first x-coordinate of Home Point */
+ 1258}, /* second x-coordinate of Home Point */
{
0x043d, /* vendor id */
0x007d, /* product id */
@@ -78,7 +84,9 @@ static Lexmark_Model model_list[] = {
"Lexmark", /* vendor */
"X1200/USB1.1", /* model */
A920_MOTOR,
- X1200_SENSOR},
+ X1200_SENSOR,
+ 1235, /* first x-coordinate of Home Point */
+ 1258}, /* second x-coordinate of Home Point */
{
0x043d, /* vendor id */
0x007d, /* product id */
@@ -87,7 +95,20 @@ static Lexmark_Model model_list[] = {
"Lexmark", /* vendor */
"X1200/USB2.0", /* model */
A920_MOTOR,
- X1200_USB2_SENSOR},
+ X1200_USB2_SENSOR,
+ 1235, /* first x-coordinate of Home Point */
+ 1258}, /* second x-coordinate of Home Point */
+ {
+ 0x043d, /* vendor id */
+ 0x0060, /* product id */
+ 0x00, /* submodel id */
+ "Lexmark X74", /* name */
+ "Lexmark", /* vendor */
+ "X74", /* model */
+ X74_MOTOR,
+ X74_SENSOR,
+ 1222, /* first x-coordinate of Home Point */
+ 1322}, /* second x-coordinate of Home Point */
{ /* termination model, must be last */
- 0, 0, 0, NULL, NULL, NULL, 0, 0}
+ 0, 0, 0, NULL, NULL, NULL, 0, 0, 0, 0}
}; /* end models description */
diff --git a/backend/lexmark_sensors.c b/backend/lexmark_sensors.c
index c661dd0..b2f6805 100644
--- a/backend/lexmark_sensors.c
+++ b/backend/lexmark_sensors.c
@@ -1,6 +1,6 @@
/* sane - Scanner Access Now Easy.
- Copyright (C) 2006-2007 Stéphane Voltz <stef.dev at free.fr>
+ Copyright (C) 2006-2007 Stéphane Voltz <stef.dev at free.fr>
This file is part of the SANE package.
@@ -117,6 +117,23 @@ static Lexmark_Sensor sensor_list[] = {
/* offset and gain fallback */
0x70, 13
},
+ {
+ X74_SENSOR,
+ /* start x TDONE, end x and target average for offset calibration */
+ /*36,68,12,*/
+ 20,52,12,
+ /* usable pixel sensor startx */
+ /*104,*/
+ 104,
+ /* default gain */
+ 10,
+ /* gain calibration target */
+ 130, 145, 150, 145,
+ /* gain calibration target */
+ 260, 260, 260, 260,
+ /* offset and gain fallback */
+ 0x70, 13
+ },
/* termination list sensor, must be last */
{0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
--
1.7.1
More information about the sane-devel
mailing list