Fixed problem with 1200UB sensor detection. Started work on 1200 USB.

New version: 1.0-7.
Henning Meier-Geinitz <henning@meier-geinitz.de>
DEVEL_2_0_BRANCH-1
Henning Geinitz 2001-10-07 11:29:34 +00:00
rodzic deeea5d96b
commit 07484eae82
10 zmienionych plików z 448 dodań i 32 usunięć

Wyświetl plik

@ -45,7 +45,7 @@
This file implements a SANE backend for Mustek 1200UB flatbed scanners. */
#define BUILD 6
#define BUILD 7
#include "../include/sane/config.h"
@ -495,6 +495,9 @@ attach (SANE_String_Const devname, Mustek_Usb_Device ** devp,
case MT_1200CU_PLUS:
dev->sane.model = "1200 CU Plus";
break;
case MT_1200USB:
dev->sane.model = "1200 USB";
break;
case MT_1200UB:
dev->sane.model = "1200 UB";
break;

Wyświetl plik

@ -4,6 +4,9 @@
# Autodetect 1200 UB and Trust Compact Scan USB 19200
usb 0x055f 0x0006
# Autodetect 1200 USB
usb 0x055f 0x0003
# Autodetect 1200 CU
usb 0x055f 0x0001

Wyświetl plik

@ -1,6 +1,6 @@
:backend "mustek_usb"
:status :new
:version "1.0-6"
:version "1.0-7"
:manpage "sane-mustek_usb"
:url "http://www.meier-geinitz.de/sane/"

Wyświetl plik

@ -846,6 +846,7 @@ usb_high_scan_init (Mustek_Usb_Device * dev)
dev->mono_calibrator = NULL;
dev->is_cis_detected = SANE_FALSE;
dev->is_sensor_detected = SANE_FALSE;
RIE(usb_low_init (&dev->chip));
@ -1264,27 +1265,111 @@ usb_high_scan_suggest_parameters (Mustek_Usb_Device * dev, SANE_Word dpi,
SANE_Status
usb_high_scan_detect_sensor (Mustek_Usb_Device *dev)
{
if (dev->is_sensor_detected)
{
DBG (5, "usb_high_scan_detect_sensor: sensor already detected\n");
return SANE_STATUS_GOOD;
}
dev->is_sensor_detected = SANE_TRUE;
switch (dev->chip->scanner_type)
{
case MT_600CU:
dev->chip->sensor = ST_CANON300;
dev->chip->motor = MT_600;
DBG (5, "usb_high_scan_detect_sensor: sensor=Canon 300 dpi, motor="
dev->is_cis_detected = SANE_TRUE;
DBG (4, "usb_high_scan_detect_sensor: sensor=Canon 300 dpi, motor="
"600 dpi\n");
break;
case MT_1200USB:
dev->chip->sensor = ST_NEC600;
dev->chip->motor = MT_1200;
DBG (4, "usb_high_scan_detect_sensor: sensor=Canon 600 dpi, motor="
"1200 dpi\n");
break;
case MT_1200UB:
dev->chip->sensor = ST_CANON600;
dev->chip->motor = MT_1200;
DBG (5, "usb_high_scan_detect_sensor: sensor=Canon 600 dpi, motor="
"1200 dpi\n");
break;
case MT_1200CU:
case MT_1200CU_PLUS:
dev->chip->sensor = ST_CANON300600;
dev->chip->motor = MT_1200;
DBG (5, "usb_high_scan_detect_sensor: sensor=Canon 300/600 dpi, motor="
"1200 dpi\n");
break;
case MT_1200CU: /* need to check if it's a 300600 or 600 dpi sensor */
{
SANE_Byte *buffer;
static SANE_Word l_temp = 0, r_temp = 0;
SANE_Int i;
SANE_Status status;
SANE_Word lines_left;
dev->chip->motor = MT_1200;
dev->is_cis_detected = SANE_TRUE;
buffer = NULL;
l_temp = 0;
r_temp = 0;
buffer = (SANE_Byte *) malloc (dev->init_bytes_per_strip);
if (!buffer)
return SANE_STATUS_NO_MEM;
for (i = 0; i < 5400; i++)
buffer[i] = 0xaa;
dev->scan_mode = GRAY8EXT;
dev->x_dpi = 600;
dev->y_dpi = 1200;
dev->width = 5400;
RIE(usb_low_open (dev->chip, dev->device_name));
dev->is_opened = SANE_TRUE;
RIE(usb_high_scan_init_asic (dev, ST_CANON600));
RIE(usb_low_turn_peripheral_power (dev->chip, SANE_TRUE));
RIE(usb_low_enable_motor (dev->chip, SANE_TRUE));/* Enable Motor */
RIE(usb_low_turn_lamp_power (dev->chip, SANE_TRUE));
RIE(usb_low_invert_image (dev->chip, SANE_FALSE));
RIE(usb_low_set_image_dpi (dev->chip, SANE_TRUE, SW_P6P6));
dev->bytes_per_strip = dev->adjust_length_600;
dev->bytes_per_row = 5400;
dev->dummy = 0;
RIE(usb_high_scan_wait_carriage_home (dev));
RIE(usb_high_scan_hardware_calibration (dev));
RIE(usb_high_scan_prepare_scan (dev));
/* Get Data */
RIE(usb_low_start_rowing (dev->chip));
RIE(usb_low_get_row (dev->chip, buffer, &lines_left));
RIE(usb_low_stop_rowing (dev->chip));
/* Calculate */
for (i = 0; i < 256; i++)
l_temp = l_temp + buffer[512 + i];
for (i = 0; i < 256; i++)
r_temp = r_temp + buffer[3500 + i];
l_temp = l_temp / 256;
r_temp = r_temp / 256;
/* 300/600 switch CIS or 600 CIS */
DBG (5, "usb_high_scan_detect_sensor: l_temp=%d, r_temp=%d\n",
l_temp, r_temp);
if (r_temp > 50)
{
dev->chip->sensor = ST_CANON600;
DBG (4, "usb_high_scan_detect_sensor: sensor=Canon 600 dpi, motor="
"1200 dpi\n");
}
else
{
DBG (4, "usb_high_scan_detect_sensor: sensor=Canon 300/600 dpi, "
"motor=1200 dpi\n");
dev->chip->sensor = ST_CANON300600;
}
/* Release Resource */
usb_low_close (dev->chip);
dev->is_opened = SANE_FALSE;
free (buffer);
buffer = NULL;
break;
}
default:
DBG (5, "usb_high_scan_detect_sensor: I don't know this scanner type "
"(%d)\n", dev->chip->scanner_type);
@ -1316,9 +1401,6 @@ usb_high_scan_setup_scan (Mustek_Usb_Device * dev, Colormode color_mode,
DBG (5,"usb_high_scan_setup_scan: !is_prepared\n");
return SANE_STATUS_INVAL;
}
#if 0
RIE(usb_high_scan_detect_sensor (dev));
#endif
RIE(usb_low_open (dev->chip, dev->device_name));
dev->is_opened = SANE_TRUE;
@ -1595,6 +1677,17 @@ usb_high_scan_init_asic (Mustek_Usb_Device * dev, Sensor_Type sensor)
bank_size = BS_16K;
DBG (5, "usb_high_scan_init_asic: sensor is set to CANON600\n");
break;
case ST_NEC600: /* fixme */
ccd_dpi = 32;
select = 224;
adjust = 112;
pin = 18;
motor = 0;
fix_pattern = SANE_FALSE;
ad_timing = 0;
bank_size = BS_16K;
DBG (5, "usb_high_scan_init_asic: sensor is set to NEC600\n");
break;
default:
DBG (5, "usb_high_scan_init_asic: unknown sensor\n");
return SANE_STATUS_INVAL;
@ -2215,9 +2308,18 @@ usb_high_scan_calculate_max_rgb_600_expose (Mustek_Usb_Device * dev,
green_light_up = dev->expose_time - dev->green_rgb_600_power_delay * 64;
blue_light_up = dev->expose_time - dev->blue_rgb_600_power_delay * 64;
max_light_up = MAX (red_light_up, MAX (green_light_up, blue_light_up));
ideal_expose_time
= MAX (MAX (5376, max_light_up),
usb_mid_motor_rgb_capability (dev->chip, dev->y_dpi));
if (dev->chip->sensor == ST_NEC600)
{
ideal_expose_time
= MAX (MAX (5504, max_light_up),
usb_mid_motor_rgb_capability (dev->chip, dev->y_dpi));
}
else
{
ideal_expose_time
= MAX (MAX (5376, max_light_up),
usb_mid_motor_rgb_capability (dev->chip, dev->y_dpi));
}
ideal_expose_time = (ideal_expose_time + 63) / 64 * 64;
*ideal_red_pd = (SANE_Byte) ((ideal_expose_time - red_light_up) / 64);
*ideal_green_pd = (SANE_Byte) ((ideal_expose_time - green_light_up) / 64);
@ -2245,10 +2347,20 @@ usb_high_scan_calculate_max_mono_600_expose (Mustek_Usb_Device * dev,
if (transfer_time > 16000)
transfer_time = 16000;
ideal_expose_time
= MAX (MAX (5376, max_light_up),
MAX (transfer_time, usb_mid_motor_mono_capability
(dev->chip, dev->y_dpi)));
if (dev->chip->sensor == ST_NEC600)
{
ideal_expose_time
= MAX (MAX (5504, max_light_up),
MAX (transfer_time, usb_mid_motor_mono_capability
(dev->chip, dev->y_dpi)));
}
else
{
ideal_expose_time
= MAX (MAX (5376, max_light_up),
MAX (transfer_time, usb_mid_motor_mono_capability
(dev->chip, dev->y_dpi)));
}
ideal_expose_time = (ideal_expose_time + 63) / 64 * 64;
*ideal_red_pd = (SANE_Byte) ((ideal_expose_time) / 64);
*ideal_green_pd = (SANE_Byte) ((ideal_expose_time - max_light_up) / 64);

Wyświetl plik

@ -321,6 +321,7 @@ typedef struct Mustek_Usb_Device
SANE_Char device_name[256];
SANE_Bool is_sensor_detected;
}
Mustek_Usb_Device;

Wyświetl plik

@ -2762,9 +2762,9 @@ usb_low_identify_scanner (SANE_Int fd, Mustek_Type *scanner_type)
case 0x0002:
devtype = MT_600CU;
break;
#if 0
#if 0
case 0x0003:
devtype = MT_1200CU;
devtype = MT_1200USB;
break;
#endif
case 0x0006:
@ -2777,7 +2777,7 @@ usb_low_identify_scanner (SANE_Int fd, Mustek_Type *scanner_type)
if (scanner_type)
*scanner_type = devtype;
DBG (3, "usb_low_identify_scanner: unknown product id: "
"%d\n", devproduct);
"0x%04x\n", devproduct);
return SANE_STATUS_INVAL;
break;
}
@ -2786,7 +2786,7 @@ usb_low_identify_scanner (SANE_Int fd, Mustek_Type *scanner_type)
{
if (scanner_type)
*scanner_type = devtype;
DBG (3, "usb_low_identify_scanner: unknown vendor id: %d\n",
DBG (3, "usb_low_identify_scanner: unknown vendor id: 0x%04d\n",
devvendor);
return SANE_STATUS_INVAL;
}

Wyświetl plik

@ -71,6 +71,7 @@
typedef enum Mustek_Type
{
MT_UNKNOWN = 0,
MT_1200USB,
MT_1200UB,
MT_1200CU,
MT_1200CU_PLUS,
@ -86,7 +87,8 @@ typedef enum Sensor_Type
ST_CANON300=3,
ST_CANON600=4,
ST_TOSHIBA600=5,
ST_CANON300600=6
ST_CANON300600=6,
ST_NEC600=7
}
Sensor_Type;

Wyświetl plik

@ -48,6 +48,231 @@
#include "mustek_usb_mid.h"
#include "mustek_usb_low.c"
/* ------------------ sensor NEC 3797 600 CIS functions ------------------- */
static SANE_Word usb_mid_n600_optical_x_dpi[] =
{ 600, 400, 300, 200, 100, 50, 0 };
SANE_Status
usb_mid_n600_prepare_rgb_600_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_rgb_600_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P6P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_FALSE));
DBG (6, "usb_mid_n600_prepare_rgb_600_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_rgb_400_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_rgb_400_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P4P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_FALSE));
DBG (6, "usb_mid_n600_prepare_rgb_400_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_rgb_300_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_rgb_300_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P3P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_FALSE));
DBG (6, "usb_mid_n600_prepare_rgb_300_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_rgb_200_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_rgb_200_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P2P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_FALSE));
DBG (6, "usb_mid_n600_prepare_rgb_200_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_rgb_100_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_rgb_100_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P1P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_FALSE));
DBG (6, "usb_mid_n600_prepare_rgb_100_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_rgb_50_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_rgb_50_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P1P6));
RIE(usb_low_set_soft_resample (chip, 2));
RIE(usb_low_set_led_light_all (chip, SANE_FALSE));
DBG (6, "usb_mid_n600_prepare_rgb_50_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_mono_600_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_mono_600_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P6P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_TRUE));
DBG (6, "usb_mid_n600_prepare_mono_600_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_mono_400_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_mono_400_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P4P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_TRUE));
DBG (6, "usb_mid_n600_prepare_mono_400_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_mono_300_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_mono_300_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P3P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_TRUE));
DBG (6, "usb_mid_n600_prepare_mono_300_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_mono_200_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_mono_200_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P2P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_TRUE));
DBG (6, "usb_mid_n600_prepare_mono_200_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_mono_100_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_mono_100_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P1P6));
RIE(usb_low_set_soft_resample (chip, 1));
RIE(usb_low_set_led_light_all (chip, SANE_TRUE));
DBG (6, "usb_mid_n600_prepare_mono_100_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_mono_50_dpi (ma1017 * chip)
{
SANE_Status status;
DBG (6, "usb_mid_n600_prepare_mono_50_dpi: start\n");
RIE(usb_low_set_image_dpi (chip, SANE_TRUE, SW_P1P6));
RIE(usb_low_set_soft_resample (chip, 2));
RIE(usb_low_set_led_light_all (chip, SANE_TRUE));
DBG (6, "usb_mid_n600_prepare_mono_50_dpi: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_rgb (ma1017 * chip, SANE_Word dpi)
{
DBG (6, "usb_mid_n600_prepare_rgb: start\n");
switch (dpi)
{
case 50:
return usb_mid_n600_prepare_rgb_50_dpi (chip);
break;
case 100:
return usb_mid_n600_prepare_rgb_100_dpi (chip);
break;
case 200:
return usb_mid_n600_prepare_rgb_200_dpi (chip);
break;
case 300:
return usb_mid_n600_prepare_rgb_300_dpi (chip);
break;
case 400:
return usb_mid_n600_prepare_rgb_400_dpi (chip);
break;
case 600:
return usb_mid_n600_prepare_rgb_600_dpi (chip);
break;
default:
DBG (3, "usb_mid_n600_prepare_rgb: unmatched dpi: %d\n", dpi);
return SANE_STATUS_INVAL;
break;
}
DBG (6, "usb_mid_n600_prepare_rgb: exit\n");
return SANE_STATUS_GOOD;
}
SANE_Status
usb_mid_n600_prepare_mono (ma1017 * chip, SANE_Word dpi)
{
DBG (6, "usb_mid_n600_prepare_mono: start\n");
switch (dpi)
{
case 50:
return usb_mid_n600_prepare_mono_50_dpi (chip);
break;
case 100:
return usb_mid_n600_prepare_mono_100_dpi (chip);
break;
case 200:
return usb_mid_n600_prepare_mono_200_dpi (chip);
break;
case 300:
return usb_mid_n600_prepare_mono_300_dpi (chip);
break;
case 400:
return usb_mid_n600_prepare_mono_400_dpi (chip);
break;
case 600:
return usb_mid_n600_prepare_mono_600_dpi (chip);
break;
default:
DBG (6, "usb_mid_n600_prepare_mono: unmatched dpi: %d\n", dpi);
return SANE_STATUS_INVAL;
break;
}
return SANE_STATUS_GOOD;
}
/* ---------------------- sensor 600 CIS functions ----------------------- */
@ -761,7 +986,7 @@ usb_mid_sensor_is600_mode (ma1017 * chip, SANE_Word dpi)
chip, dpi);
return SANE_FALSE;
}
else if (chip->sensor == ST_CANON600)
else if ((chip->sensor == ST_CANON600) || (chip->sensor == ST_NEC600))
{
DBG (6, "usb_mid_sensor_is600_mode: chip=%p, dpi=%d, TRUE\n",
chip, dpi);
@ -802,6 +1027,8 @@ usb_mid_sensor_prepare_rgb (ma1017 * chip, SANE_Word dpi)
return usb_mid_c300_prepare_rgb (chip, dpi);
else if (chip->sensor == ST_CANON600)
return usb_mid_c600_prepare_rgb (chip, dpi);
else if (chip->sensor == ST_NEC600)
return usb_mid_n600_prepare_rgb (chip, dpi);
else
return usb_mid_c300600_prepare_rgb (chip, dpi);
@ -815,6 +1042,8 @@ usb_mid_sensor_prepare_mono (ma1017 * chip, SANE_Word dpi)
return usb_mid_c300_prepare_mono (chip, dpi);
else if (chip->sensor == ST_CANON600)
return usb_mid_c600_prepare_mono (chip, dpi);
else if (chip->sensor == ST_NEC600)
return usb_mid_n600_prepare_mono (chip, dpi);
else
return usb_mid_c300600_prepare_mono (chip, dpi);
@ -838,6 +1067,8 @@ usb_mid_sensor_get_dpi (ma1017 *chip, SANE_Word wanted_dpi, SANE_Word *dpi)
dpi_list = usb_mid_c300600_optical_x_dpi;
else if (chip->sensor == ST_CANON600)
dpi_list = usb_mid_c600_optical_x_dpi;
else if (chip->sensor == ST_NEC600)
dpi_list = usb_mid_n600_optical_x_dpi;
else
return SANE_STATUS_INVAL;
@ -1552,7 +1783,10 @@ usb_mid_motor1200_prepare_home (ma1017 * chip)
SANE_Status status;
DBG (6, "usb_mid_motor1200_prepare_home: start\n");
RIE(usb_low_set_motor_movement (chip, SANE_TRUE, SANE_TRUE, SANE_FALSE));
if (chip->sensor == ST_NEC600)
RIE(usb_low_set_motor_movement (chip, SANE_FALSE, SANE_TRUE, SANE_FALSE));
else
RIE(usb_low_set_motor_movement (chip, SANE_TRUE, SANE_TRUE, SANE_FALSE));
/* Make it in 600dpi */
RIE(usb_low_set_io_3 (chip, SANE_TRUE)); /* (IO3) ? High power : Low power */
RIE(usb_low_move_motor_home (chip, SANE_TRUE, SANE_TRUE));
@ -1986,7 +2220,7 @@ usb_mid_motor600_prepare_rgb (ma1017 * chip, SANE_Word dpi)
SANE_Status
usb_mid_motor600_prepare_mono (ma1017 * chip, SANE_Word dpi)
{
DBG (3, "usb_mid_motor600_prepare_mono: start\n");
DBG (6, "usb_mid_motor600_prepare_mono: start\n");
switch (dpi)
{
case 600:

Wyświetl plik

@ -54,6 +54,50 @@
/* ---------------------------------- macros ------------------------------ */
/* ---------------- sensor NEC 600 CCD function declarations -------------- */
static SANE_Status
usb_mid_n600_prepare_rgb (ma1017 * chip, SANE_Word dpi);
static SANE_Status
usb_mid_n600_prepare_mono (ma1017 * chip, SANE_Word dpi);
static SANE_Status
usb_mid_n600_prepare_rgb_600_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_rgb_400_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_rgb_300_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_rgb_200_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_rgb_100_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_rgb_50_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_mono_600_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_mono_400_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_mono_300_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_mono_200_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_mono_100_dpi (ma1017 * chip);
static SANE_Status
usb_mid_n600_prepare_mono_50_dpi (ma1017 * chip);
/* ----------------- sensor 600 CIS function declarations ----------------- */
static SANE_Status

Wyświetl plik

@ -1,5 +1,22 @@
CHANGES for the SANE Mustek USB backend
2001-10-07
* Release of version 1.0-7.
2001-10-07
* usb_low: fixed output if scanner has wrong vendor/product id.
* usb_high: Added the detection of 300&600 sensor again. Mustek seems to
have used both sensors in the Mustek 1200 UB, so we must distinguish them.
* Disabled 1200 USB for release.
2001-09-30
* 1200CU_Plus has Canon600 sensor (fixed).
2001-09-15
* Added functions for sensor nec600 (1200 USB) in mustek_usb_mid.
* Changed init_asic and exposure times for 1200 USB.
2001-09-13
* Release of version 1.0-6.