new scanner Canon CanoScan 9000F Mark II

merge-requests/1/head
Rolf Bensch 2013-06-10 21:23:19 +02:00
rodzic 000bb7f137
commit acb4c5b2b5
3 zmienionych plików z 34 dodań i 18 usunięć

Wyświetl plik

@ -122,6 +122,9 @@
/* 2011 new device (untested) */
#define MG8200_PID 0x1756 /* CCD */
/* 2013 new device */
#define CS9000F_MII_PID 0x190d
/* Generation 4 XML messages that encapsulates the Pixma protocol messages */
#define XML_START_1 \
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\
@ -584,6 +587,7 @@ static unsigned calc_shifting (pixma_t * s)
break;
case CS9000F_PID: /* CanoScan 9000F at 4800 dpi */
case CS9000F_MII_PID:
if (s->param->xdpi == 4800)
{
if (is_scanning_from_tpu (s))
@ -671,6 +675,7 @@ static unsigned calc_shifting (pixma_t * s)
break;
case CS9000F_PID: /* CanoScan 9000F */
case CS9000F_MII_PID:
mp->color_shift = s->param->ydpi / 30;
mp->shift[1] = mp->color_shift * get_cis_ccd_line_size (s);
mp->shift[0] = 0;
@ -709,6 +714,7 @@ static unsigned calc_shifting (pixma_t * s)
switch (s->cfg->pid)
{
case CS9000F_PID:
case CS9000F_MII_PID:
if (is_color_48 (s) || is_gray_16 (s))
{
mp->color_shift = 5;
@ -890,7 +896,7 @@ static int send_scan_param (pixma_t * s)
data[0x1f] = 0x01; /* for 9000F this appears to be 0x00, not sure if that is because of positives */
if (s->cfg->pid == CS9000F_PID)
if (s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID)
{
data[0x1f] = 0x00;
}
@ -901,7 +907,7 @@ static int send_scan_param (pixma_t * s)
data[0x24] = 0x01;
/* CS8800F & CS9000F addition */
if (s->cfg->pid == CS8800F_PID || s->cfg->pid == CS9000F_PID)
if (s->cfg->pid == CS8800F_PID || s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID)
{
if (is_scanning_from_tpu (s))
{ /* TPU */
@ -924,7 +930,7 @@ static int send_scan_param (pixma_t * s)
if (s->cfg->pid == CS8800F_PID)
data[0x25] = 0x00;
/* CS9000F: 0x01 for TPU */
if (s->cfg->pid == CS9000F_PID)
if (s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID)
data[0x25] = 0x01;
if (s->param->mode == PIXMA_SCAN_MODE_TPUIR)
data[0x25] = 0x00;
@ -937,7 +943,7 @@ static int send_scan_param (pixma_t * s)
if (s->cfg->pid == CS8800F_PID)
data[0x25] = 0x01;
/* CS9000F: 0x00 normally */
if (s->cfg->pid == CS9000F_PID)
if (s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID)
data[0x25] = 0x00;
}
}
@ -1097,7 +1103,7 @@ static int handle_interrupt (pixma_t * s, int timeout)
* tt: target
* poll event with 'scanimage -A'
* */
if (s->cfg->pid == CS9000F_PID)
if (s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID)
/* button no. in buf[1]
* target = button no. */
{
@ -1508,11 +1514,11 @@ static unsigned post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib)
/* Some exceptions to global rules here */
if (s->cfg->pid == MP970_PID || s->cfg->pid == MP990_PID
|| s->cfg->pid == CS8800F_PID || s->cfg->pid == CS9000F_PID)
|| s->cfg->pid == CS8800F_PID || s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID)
n = MIN (n, 4);
/* exception for 9600dpi on Canoscan 9000F */
if ((s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600))
if ((s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID) && (s->param->xdpi == 9600))
{
n = 8;
if (test > 0)
@ -1550,7 +1556,7 @@ static unsigned post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib)
/* have to test if rounding down is OK or not -- currently 0.5 lines is rounded down */
/* note stripe shifts doubled already in definitions */
if ((s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600) && (test > 0))
if ((s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID) && (s->param->xdpi == 9600) && (test > 0))
{
/* using test==2 you can check in GIMP the required offset, and
use the below line (uncommented) and replace XXX with that
@ -1584,7 +1590,7 @@ static unsigned post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib)
c, n, m, s->param->wx, line_size)); */
if (c >= 3)
{
if (((s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600))
if (((s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID) && (s->param->xdpi == 9600))
|| ((s->cfg->pid == MP960_PID) && (s->param->xdpi == 4800))
|| ((s->cfg->pid == MP810_PID) && (s->param->xdpi == 4800)))
{
@ -1594,7 +1600,7 @@ static unsigned post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib)
jumplines * line_size);
}
else if ((s->cfg->pid == CS9000F_PID) /* 9000F: 16 bit flatbed scan at 4800dpi */
else if ((s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID) /* 9000F: 16 bit flatbed scan at 4800dpi */
&& ((s->param->mode == PIXMA_SCAN_MODE_COLOR_48)
|| (s->param->mode == PIXMA_SCAN_MODE_GRAY_16))
&& (s->param->xdpi == 4800)
@ -1615,7 +1621,7 @@ static unsigned post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib)
/*--comment out all between this line and the one below for 9000F tests at 9600dpi or MP960 at 4800dpi ------*/
/* if ( 0 ) */
if ((((s->cfg->pid != CS9000F_PID) || (s->param->xdpi < 9600))
if ((((s->cfg->pid != CS9000F_PID || s->cfg->pid == CS9000F_MII_PID) || (s->param->xdpi < 9600))
&& ((s->cfg->pid != MP960_PID) || (s->param->xdpi < 4800))
&& ((s->cfg->pid != MP810_PID) || (s->param->xdpi < 4800)))
|| (test == 0))
@ -1624,13 +1630,13 @@ static unsigned post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib)
if (!((s->cfg->pid == MP810_PID) && (s->param->xdpi == 4800))
&& !((s->cfg->pid == MP960_PID) && (s->param->xdpi == 4800))
&& !((s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600)))
&& !((s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID) && (s->param->xdpi == 9600)))
{ /* for both flatbed & TPU */
/* PDBG (pixma_dbg (4, "*post_process_image_data***** reordering pixels normal n = %i *****\n", n)); */
reorder_pixels (mp->linebuf, sptr, c, n, m, s->param->wx, line_size);
}
if ((s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600))
if ((s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID) && (s->param->xdpi == 9600))
{
/* PDBG (pixma_dbg (4, "*post_process_image_data***** cs900f_initial_reorder_pixels n = %i *****\n", n)); */
/* this combines pixels from 8 images 2px at a time from left to right: 1122334455667788... */
@ -1655,7 +1661,7 @@ static unsigned post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib)
/* comment: MP970, CS8800F, CS9000F specific reordering for 4800 dpi */
if ((s->cfg->pid == MP970_PID || s->cfg->pid == CS8800F_PID
|| s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 4800))
|| s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID) && (s->param->xdpi == 4800))
{
/*PDBG (pixma_dbg (4, "*post_process_image_data***** mp970_reordering pixels n = %i *****\n", n)); */
mp970_reorder_pixels (mp->linebuf, sptr, c, s->param->wx, line_size);
@ -1736,7 +1742,7 @@ static int mp810_open (pixma_t * s)
if (s->cfg->pid == CS8800F_PID)
mp->generation = 3;
if (s->cfg->pid == CS9000F_PID)
if (s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID)
mp->generation = 4;
/* TPU info data setup */
@ -1844,6 +1850,7 @@ static int mp810_check_param (pixma_t * s, pixma_scan_param_t * sp)
max_y = MIN (740, s->cfg->height);
break;
case CS9000F_PID:
case CS9000F_MII_PID:
fixed_offset_y = 146;
max_y = MIN (740, s->cfg->height);
break;
@ -1936,7 +1943,7 @@ static int mp810_check_param (pixma_t * s, pixma_scan_param_t * sp)
else if (sp->source == PIXMA_SOURCE_TPU && sp->mode == PIXMA_SCAN_MODE_TPUIR)
/* TPUIR mode: max scan res is 2400 dpi */
k = sp->xdpi / MIN (sp->xdpi, 2400);
else if (sp->source == PIXMA_SOURCE_TPU && s->cfg->pid == CS9000F_PID)
else if (sp->source == PIXMA_SOURCE_TPU && (s->cfg->pid == CS9000F_PID || s->cfg->pid == CS9000F_MII_PID))
/* CS9000F in TPU mode */
k = sp->xdpi / MIN (sp->xdpi, 9600);
else
@ -2321,5 +2328,8 @@ const pixma_config_t pixma_mp810_devices[] =
/* Latest devices (2011) Generation 4 CCD untested */
DEVICE ("Canon PIXMA MG8200", "MG8200", MG8200_PID, 4800, 300, 0, 0, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU),
/* Flatbed scanner (2013) */
DEVICE ("Canoscan 9000F Mark II", "9000FMarkII", CS9000F_MII_PID, 4800, 300, 9600, 600, 2400, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPUIR | PIXMA_CAP_48BIT),
END_OF_DEVICE_LIST
};

Wyświetl plik

@ -840,3 +840,9 @@
:usbid "0x04a9" "0x1908"
:status :complete
:comment "Full flatbed support up to 4800DPI (Note: flatbed does not have 9600DPI capability). Full TPU support (negatives, slides and infrared) up to 9600DPI."
:model "CanoScan 9000F Mark II"
:interface "USB"
:usbid "0x04a9" "0x190d"
:status :complete
:comment "Full flatbed support up to 4800DPI (Note: flatbed does not have 9600DPI capability). Full TPU support (negatives, slides and infrared) up to 9600DPI."

Wyświetl plik

@ -1,4 +1,4 @@
.TH "sane\-pixma" "5" "29 May 2013" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.TH "sane\-pixma" "5" "10 Jun 2013" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.IX sane\-pixma
.SH NAME
sane\-pixma \- SANE backend for Canon Multi-Function Printers and CanoScan Scanners
@ -57,7 +57,7 @@ i-SENSYS MF3010, MF4320d, MF4330d, MF4550d
.br
imageRUNNER 1020/1024/1025
.br
CanoScan 8800F, 9000F
CanoScan 8800F, 9000F, 9000F Mark II
.RE
.PP
The following models are not well tested and/or the scanner sometimes hangs