initial Canonscan 4400F work

- add 4400F to devices
- add settings for 100 dpi scan
merge-requests/1/head
Stphane Voltz 2012-09-23 21:15:39 +02:00
rodzic a7735b57df
commit aa160f50f6
8 zmienionych plików z 210 dodań i 79 usunięć

Wyświetl plik

@ -58,7 +58,7 @@
* SANE backend for Genesys Logic GL646/GL841/GL842/GL843/GL847/GL124 based scanners
*/
#define BUILD 2401
#define BUILD 2402
#define BACKEND_NAME genesys
#include "genesys.h"
@ -925,6 +925,7 @@ genesys_send_offset_and_shading (Genesys_Device * dev, uint8_t * data,
if (dev->settings.scan_mode < 2
&& dev->model->ccd_type != CCD_KVSS080
&& dev->model->ccd_type != CCD_G4050
&& dev->model->ccd_type != CCD_CS4400F
&& dev->model->ccd_type != CCD_DSMOBILE600
&& dev->model->ccd_type != CCD_XP300
&& dev->model->ccd_type != CCD_DP665
@ -981,7 +982,10 @@ sanei_genesys_init_shading_data (Genesys_Device * dev, int pixels_per_line)
/* these models don't need to init shading data due to the use of specific send shading data
function */
if(dev->model->ccd_type==CCD_KVSS080 || dev->model->ccd_type==CCD_G4050 || dev->model->cmd_set->send_shading_data!=NULL)
if (dev->model->ccd_type==CCD_KVSS080
|| dev->model->ccd_type==CCD_G4050
|| dev->model->ccd_type==CCD_CS4400F
|| dev->model->cmd_set->send_shading_data!=NULL)
return SANE_STATUS_GOOD;
DBG (DBG_proc, "sanei_genesys_init_shading_data (pixels_per_line = %d)\n",
@ -1927,7 +1931,9 @@ genesys_dummy_dark_shading (Genesys_Device * dev)
skip = 4;
xend = 68;
}
if(dev->model->ccd_type==CCD_G4050 || dev->model->ccd_type==CCD_KVSS080)
if (dev->model->ccd_type==CCD_G4050
|| dev->model->ccd_type==CCD_CS4400F
|| dev->model->ccd_type==CCD_KVSS080)
{
skip = 2;
xend = dev->sensor.black_pixels;
@ -2909,6 +2915,7 @@ genesys_send_shading_coefficient (Genesys_Device * dev)
break;
case CCD_KVSS080:
case CCD_G4050:
case CCD_CS4400F:
target_code = 0xe000;
o = 0;
compute_coefficients (dev,

Wyświetl plik

@ -36,6 +36,9 @@ usb 0x04a9 0x2213
# Canon LiDE 60
usb 0x04a9 0x221c
# Canon 4400F
usb 0x04a9 0x2228
# Canon LiDE 100
usb 0x04a9 0x1904

Wyświetl plik

@ -554,6 +554,23 @@ static Genesys_Sensor Sensor[] = {
1.0, 1.0, 1.0,
NULL, NULL, NULL}
,
{CCD_CS4400F,
4800,
50*8, /* black_pixels */
58, /* 31 at 600 dpi dummy_pixels 58 at 1200 */
152,
5360*8, /* 5360 max at 600 dpi */
160,
160,
/* 08 09 0a 0b */
{0x00, 0x00, 0x18, 0x69} ,
/* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */
{0x9c, 0x40, 0x9c, 0x40, 0x9c, 0x40, 0x13, 0x0a, 0x10, 0x2a, 0x30, 0x00, 0x00, 0x6b},
/* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */
{0x0a, 0x0d, 0x00, 0x03, 0x06, 0x08, 0x5b, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3f},
1.0, 1.0, 1.0,
NULL, NULL, NULL}
,
/* HP N6310 */
@ -762,6 +779,12 @@ static Genesys_Gpo Gpo[] = {
{0x02, 0x00},
{0x1e, 0x80},
}
/* CanoScan 4400f */
,
{GPO_CS4400F,
{0x01, 0x7f},
{0xff, 0x00},
}
};
static Genesys_Motor Motor[] = {
@ -1395,6 +1418,63 @@ static Genesys_Model hpg4050_model = {
};
static Genesys_Model canon_4400f_model = {
"canon-canoscan-4400f", /* Name */
"Canon", /* Device vendor string */
"Canoscan 4400f", /* Device model name */
GENESYS_GL843,
NULL,
{ 2400, 1200, 600, 400, 300, 200, 150, 100, 0},
{ 2400, 1200, 600, 400, 300, 200, 150, 100, 0},
{16, 8, 0}, /* possible depths in gray mode */
{16, 8, 0}, /* possible depths in color mode */
SANE_FIX (8.0), /* Start of scan area in mm (x) */
SANE_FIX (13.00), /* Start of scan area in mm (y) */
SANE_FIX (217.9), /* Size of scan area in mm (x) 5148 pixels at 600 dpi*/
SANE_FIX (315.0), /* Size of scan area in mm (y) */
SANE_FIX (3.0), /* Start of white strip in mm (y) */
SANE_FIX (0.0), /* Start of black mark in mm (x) */
SANE_FIX (8.0), /* Start of scan area in TA mode in mm (x) */
SANE_FIX (13.00), /* Start of scan area in TA mode in mm (y) */
SANE_FIX (217.9), /* Size of scan area in TA mode in mm (x) */
SANE_FIX (250.0), /* Size of scan area in TA mode in mm (y) */
SANE_FIX (40.0), /* Start of white strip in TA mode in mm (y) */
SANE_FIX (0.0), /* Size of scan area after paper sensor stops
sensing document in mm */
SANE_FIX (0.0), /* Amount of feeding needed to eject document
after finishing scanning in mm */
0, 24, 48, /* RGB CCD Line-distance correction in line number */
/* 0 38 76 OK 1200/2400 */
/* 0 24 48 OK [100,600] dpi */
COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */
SANE_FALSE, /* Is this a CIS scanner? */
SANE_FALSE, /* Is this a sheetfed scanner? */
CCD_CS4400F,
DAC_G4050,
GPO_CS4400F,
MOTOR_G4050,
GENESYS_FLAG_NO_CALIBRATION |
GENESYS_FLAG_LAZY_INIT |
GENESYS_FLAG_OFFSET_CALIBRATION |
GENESYS_FLAG_STAGGERED_LINE |
GENESYS_FLAG_SKIP_WARMUP |
GENESYS_FLAG_DARK_CALIBRATION |
GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW,
100,
100
};
static Genesys_Model canon_lide_100_model = {
"canon-lide-100", /* Name */
"Canon", /* Device vendor string */
@ -2983,6 +3063,7 @@ static Genesys_USB_Device_Entry genesys_usb_device_list[] = {
{0x03f0, 0x1b05, &hp4850c_model},
{0x03f0, 0x4505, &hpg4010_model},
{0x03f0, 0x4605, &hpg4050_model},
{0x03f0, 0x4605, &canon_4400f_model},
/* GL124 devices */
{0x04a9, 0x1909, &canon_lide_110_model},
{0x04a9, 0x190a, &canon_lide_210_model},

Wyświetl plik

@ -744,6 +744,13 @@ gl843_init_registers (Genesys_Device * dev)
SETREG (0x9b, 0x80);
SETREG (0xac, 0x00);
}
if (strcmp (dev->model->name, "canon-canoscan-4400f") == 0)
{
sanei_genesys_set_double(dev->reg,REG_EXPR,0x9c40);
sanei_genesys_set_double(dev->reg,REG_EXPG,0x9c40);
sanei_genesys_set_double(dev->reg,REG_EXPB,0x9c40);
}
/* fine tune upon device description */
dev->reg[reg_0x05].value &= ~REG05_DPIHW;
@ -2323,47 +2330,51 @@ gl843_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg,
dpihw = sanei_genesys_compute_dpihw (dev, dpiset);
/* set up GPIO for scan */
/* KV case */
if (dev->model->gpo_type == GPO_KVSS080)
switch(dev->model->gpo_type)
{
RIE (sanei_genesys_write_register (dev, REGA9, 0x00));
RIE (sanei_genesys_write_register (dev, REGA6, 0xf6));
/* blinking led */
RIE (sanei_genesys_write_register (dev, 0x7e, 0x04));
}
if (dev->model->gpo_type == GPO_G4050)
{
RIE (sanei_genesys_write_register (dev, REGA7, 0xfe));
RIE (sanei_genesys_write_register (dev, REGA8, 0x3e));
RIE (sanei_genesys_write_register (dev, REGA9, 0x06));
switch (dpihw)
{
case 1200:
case 2400:
case 4800:
RIE (sanei_genesys_write_register (dev, REG6C, 0x60));
RIE (sanei_genesys_write_register (dev, REGA6, 0x46));
break;
default: /* 600 dpi case */
RIE (sanei_genesys_write_register (dev, REG6C, 0x20));
RIE (sanei_genesys_write_register (dev, REGA6, 0x44));
}
/* KV case */
case GPO_KVSS080:
RIE (sanei_genesys_write_register (dev, REGA9, 0x00));
RIE (sanei_genesys_write_register (dev, REGA6, 0xf6));
/* blinking led */
RIE (sanei_genesys_write_register (dev, 0x7e, 0x04));
break;
case GPO_G4050:
RIE (sanei_genesys_write_register (dev, REGA7, 0xfe));
RIE (sanei_genesys_write_register (dev, REGA8, 0x3e));
RIE (sanei_genesys_write_register (dev, REGA9, 0x06));
switch (dpihw)
{
case 1200:
case 2400:
case 4800:
RIE (sanei_genesys_write_register (dev, REG6C, 0x60));
RIE (sanei_genesys_write_register (dev, REGA6, 0x46));
break;
default: /* 600 dpi case */
RIE (sanei_genesys_write_register (dev, REG6C, 0x20));
RIE (sanei_genesys_write_register (dev, REGA6, 0x44));
}
/* turn on XPA lamp if XPA is selected and lamp power on*/
r03 = sanei_genesys_read_reg_from_set (reg, REG03);
if ((r03 & REG03_XPASEL) && (r03 & REG03_LAMPPWR))
{
RIE(gl843_xpa_lamp_on(dev));
}
/* turn on XPA lamp if XPA is selected and lamp power on*/
r03 = sanei_genesys_read_reg_from_set (reg, REG03);
if ((r03 & REG03_XPASEL) && (r03 & REG03_LAMPPWR))
{
RIE(gl843_xpa_lamp_on(dev));
}
/* enable XPA lamp motor */
if (r03 & REG03_XPASEL)
{
RIE(gl843_xpa_motor_on(dev));
}
/* enable XPA lamp motor */
if (r03 & REG03_XPASEL)
{
RIE(gl843_xpa_motor_on(dev));
}
/* blinking led */
RIE (sanei_genesys_write_register (dev, REG7E, 0x01));
/* blinking led */
RIE (sanei_genesys_write_register (dev, REG7E, 0x01));
break;
case GPO_CS4400F:
default:
break;
}
/* clear scan and feed count */
@ -3818,7 +3829,7 @@ static SANE_Status
gl843_init_gpio (Genesys_Device * dev)
{
SANE_Status status = SANE_STATUS_GOOD;
int i;
int idx;
DBGSTART;
@ -3826,20 +3837,23 @@ gl843_init_gpio (Genesys_Device * dev)
RIE (sanei_genesys_write_register (dev, REG6F, dev->gpo.enable[1]));
RIE (sanei_genesys_write_register (dev, REG6C, dev->gpo.value[0]));
RIE (sanei_genesys_write_register (dev, REG6D, dev->gpo.value[1]));
if ((strcmp (dev->model->name, "hewlett-packard-scanjet-g4010") == 0)
|| (strcmp (dev->model->name, "hewlett-packard-scanjet-4850c") == 0)
|| (strcmp (dev->model->name, "hewlett-packard-scanjet-g4050") == 0))
idx=0;
while(dev->model->gpo_type != gpios[idx].gpo_type && gpios[idx].gpo_type!=0)
{
i = 0;
idx++;
}
if (gpios[idx].gpo_type!=0)
{
RIE (sanei_genesys_write_register (dev, REGA6, gpios[idx].ra6));
RIE (sanei_genesys_write_register (dev, REGA7, gpios[idx].ra7));
RIE (sanei_genesys_write_register (dev, REGA8, gpios[idx].ra8));
RIE (sanei_genesys_write_register (dev, REGA9, gpios[idx].ra9));
}
else
{
i = 1;
status=SANE_STATUS_INVAL;
}
RIE (sanei_genesys_write_register (dev, REGA6, gpios[i].ra6));
RIE (sanei_genesys_write_register (dev, REGA7, gpios[i].ra7));
RIE (sanei_genesys_write_register (dev, REGA8, gpios[i].ra8));
RIE (sanei_genesys_write_register (dev, REGA9, gpios[i].ra9));
DBGCOMPLETED;
return status;
@ -4057,21 +4071,25 @@ gl843_update_hardware_sensors (Genesys_Scanner * s)
RIE (sanei_genesys_read_register (s->dev, REG6D, &val));
if (s->dev->model->gpo_type == GPO_KVSS080)
switch (s->dev->model->gpo_type)
{
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
s->val[OPT_SCAN_SW].b = (val & 0x04) == 0;
}
else
{
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
s->val[OPT_SCAN_SW].b = (val & 0x01) == 0;
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
s->val[OPT_FILE_SW].b = (val & 0x02) == 0;
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0;
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
s->val[OPT_COPY_SW].b = (val & 0x08) == 0;
case GPO_KVSS080:
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
s->val[OPT_SCAN_SW].b = (val & 0x04) == 0;
break;
case GPO_G4050:
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
s->val[OPT_SCAN_SW].b = (val & 0x01) == 0;
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
s->val[OPT_FILE_SW].b = (val & 0x02) == 0;
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0;
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
s->val[OPT_COPY_SW].b = (val & 0x08) == 0;
break;
case GPO_CS4400F:
default:
break;
}
return status;

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -235,8 +235,8 @@ typedef struct
typedef struct
{
uint8_t gpo_id; /**> id of the gpo description */
uint8_t value[2];
uint8_t enable[2];
uint8_t value[2]; /**> registers 0x6c and 0x6d on gl843 */
uint8_t enable[2]; /**> registers 0x6e and 0x6F on gl843 */
} Genesys_Gpo;
typedef struct
@ -324,6 +324,7 @@ Genesys_Color_Order;
#define CCD_PLUSTEK_3600 20
#define CCD_HP_N6310 21
#define CIS_CANONLIDE700 22
#define CCD_CS4400F 23
#define GPO_UMAX 0
#define GPO_ST12 1
@ -345,6 +346,7 @@ Genesys_Color_Order;
#define GPO_CANONLIDE210 17
#define GPO_HP_N6310 18
#define GPO_CANONLIDE700 19
#define GPO_CS4400F 20
#define MOTOR_UMAX 0
#define MOTOR_5345 1

Wyświetl plik

@ -1,5 +1,5 @@
:backend "genesys"
:version "1.0-62"
:version "1.0-63"
:manpage "sane-genesys"
:comment "Only the USB scanners mentioned below are currently supported."
:url "http://www.meier-geinitz.de/sane/genesys-backend/"
@ -91,14 +91,14 @@
:model "ScanJet G4050"
:interface "USB"
:usbid "0x03f0" "0x4605"
:status :basic
:status :good
:comment "resolution from 100 to 2400 supported, UTA not supported yet"
:model "ScanJet N6310"
:interface "USB"
:usbid "0x03f0" "0x4705"
:status :untested
:comment "Not completed yet to capture the images"
:comment "Not supported yet"
; -----------------------------------------------------------------------------
@ -151,6 +151,12 @@
:status :complete
:comment "GL124 based, resolution from 75 to 2400 dpi"
:model "CanoScan 4400f"
:interface "USB"
:usbid "0x04a9" "0x2228"
:status :unsupported
:comment "GL843 based, to be added to the genesys backend"
:model "CanoScan 5600F"
:interface "USB"
:usbid "0x04a9" "0x1906"

Wyświetl plik

@ -296,7 +296,7 @@
:interface "USB"
:usbid "0x04a9" "0x2215"
:status :unsupported
:comment "GL660+GL646 based."
:comment "GL660+GL646 based, to be added to genesys backend"
:model "CanoScan 4200F"
:url "/unsupported/canon-4200f.html"
@ -310,7 +310,7 @@
:interface "USB"
:usbid "0x04a9" "0x2228"
:status :unsupported
:comment "GL841 based, to be added to genesys backend"
:comment "GL843 based, to be added to genesys backend"
:model "CanoScan 5000F"
:url "/unsupported/canon-5000f.html"