Doc update, CCD sensors white lines padding fix, enhance scan area adjustments.

merge-requests/1/head
Nicolas Martin 2008-09-07 19:08:25 +00:00
rodzic a2cb00cdc3
commit 286dbd885d
6 zmienionych plików z 81 dodań i 58 usunięć

Wyświetl plik

@ -1,3 +1,11 @@
2008-09-07 Nicolas Martin <nicols-guest at users.alioth.debian.org>
* backend/pixma_mp150.c backend/pixma_imageclass.c backend/pixma_common.h
doc/sane-pixma.man doc/descriptions/pixma.desc:
- Updated doc for MF4140, MF4150 and MP810
- Remove white lines previously padded to image bottom for CCD sensors
- Modified scan area adjustments to enhance frontend area selection fit
but to be confirmed that it does not bring backward compatibility issues.
2008-08-21 Stéphane Voltz <stef.dev@free.fr> 2008-08-21 Stéphane Voltz <stef.dev@free.fr>
* backend/rts8891.c backend/rts8891_low.c backend/rts8891_low.h * backend/rts8891.c backend/rts8891_low.c backend/rts8891_low.h
backend/rts88xx_lib.c: minor changes for hp4400 support backend/rts88xx_lib.c: minor changes for hp4400 support

Wyświetl plik

@ -76,6 +76,7 @@
#define MIN(x,y) (((x) < (y)) ? (x):(y)) #define MIN(x,y) (((x) < (y)) ? (x):(y))
#define MAX(x,y) (((x) < (y)) ? (y):(x)) #define MAX(x,y) (((x) < (y)) ? (y):(x))
#define ALIGN(x,n) (((x) + (n) - 1) / (n) * (n)) #define ALIGN(x,n) (((x) + (n) - 1) / (n) * (n))
#define ALIGN_INF(x,n) (((x) / (n)) * (n))
struct pixma_io_t; struct pixma_io_t;

Wyświetl plik

@ -68,6 +68,7 @@
#define CMDBUF_SIZE 512 #define CMDBUF_SIZE 512
#define MF4200_PID 0x26b5 #define MF4200_PID 0x26b5
#define MF4100_PID 0x26a3
/* the following are all untested */ /* the following are all untested */
#define MF5630_PID 0x264e #define MF5630_PID 0x264e
#define MF5650_PID 0x264f #define MF5650_PID 0x264f
@ -78,7 +79,6 @@
#define MF3110_PID 0x2660 #define MF3110_PID 0x2660
#define MF3200_PID 0x2684 #define MF3200_PID 0x2684
#define MF6500_PID 0x2686 #define MF6500_PID 0x2686
#define MF4100_PID 0x26a3
#define MF4600_PID 0x26b0 #define MF4600_PID 0x26b0
#define MF4010_PID 0x26b4 #define MF4010_PID 0x26b4
@ -602,6 +602,7 @@ static const pixma_scan_ops_t pixma_iclass_ops = {
} }
const pixma_config_t pixma_iclass_devices[] = { const pixma_config_t pixma_iclass_devices[] = {
DEV ("Canon imageCLASS MF4270", MF4200_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF4270", MF4200_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS MF4150", MF4100_PID, 600, 640, 877, PIXMA_CAP_ADF),
/* FIXME: the following capabilities all need updating/verifying */ /* FIXME: the following capabilities all need updating/verifying */
DEV ("Canon imageCLASS MF5630", MF5630_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF5630", MF5630_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon laserBase MF5650", MF5650_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon laserBase MF5650", MF5650_PID, 600, 640, 877, PIXMA_CAP_ADF),
@ -612,7 +613,6 @@ const pixma_config_t pixma_iclass_devices[] = {
DEV ("Canon imageCLASS MF3110", MF3110_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF3110", MF3110_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS MF3240", MF3200_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF3240", MF3200_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon MF6500 Series", MF6500_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon MF6500 Series", MF6500_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS MF4150", MF4100_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS MF4690", MF4600_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF4690", MF4600_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS MF4010", MF4010_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF4010", MF4010_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV (NULL, 0, 0, 0, 0, 0) DEV (NULL, 0, 0, 0, 0, 0)

Wyświetl plik

@ -420,12 +420,60 @@ is_scanning_from_adf (pixma_t * s)
return (s->param->source == PIXMA_SOURCE_ADF return (s->param->source == PIXMA_SOURCE_ADF
|| s->param->source == PIXMA_SOURCE_ADFDUP); || s->param->source == PIXMA_SOURCE_ADFDUP);
} }
static unsigned
calc_shifting (pixma_t * s)
{
mp150_t *mp = (mp150_t *) s->subdriver;
unsigned base_shift;
/* If color plane shift (CCD devices), how many pixels shift */
switch (s->cfg->pid)
{
case MP800_PID:
case MP810_PID:
case MP830_PID:
case MP960_PID:
case MP970_PID:
mp->lines_shift = 0;
if (s->param->ydpi > 75)
mp->lines_shift = s->param->ydpi / 50;
break;
default: /* all CIS devices */
mp->lines_shift = 0;
}
base_shift = get_cis_ccd_line_size (s) * mp->lines_shift;
/* If color plane shift, how to apply the shift */
switch (s->cfg->pid)
{
case MP970_PID:
mp->shift[0] = 0;
mp->shift[1] = base_shift;
mp->shift[2] = 2 * base_shift;
break;
case MP800_PID:
case MP810_PID:
case MP830_PID:
case MP960_PID:
default:
mp->shift[0] = 2 * base_shift;
mp->shift[1] = base_shift;
mp->shift[2] = 0;
}
return mp->lines_shift;
}
static int static int
send_scan_param (pixma_t * s) send_scan_param (pixma_t * s)
{ {
mp150_t *mp = (mp150_t *) s->subdriver; mp150_t *mp = (mp150_t *) s->subdriver;
uint8_t *data; uint8_t *data;
unsigned raw_width = calc_raw_width (mp, s->param); unsigned raw_width = calc_raw_width (mp, s->param);
unsigned h = MIN (s->param->h + 2 * calc_shifting (s),
s->cfg->height * s->param->ydpi / 75);
if (mp->generation <= 2) if (mp->generation <= 2)
{ {
@ -435,7 +483,7 @@ send_scan_param (pixma_t * s)
pixma_set_be32 (s->param->x, data + 0x08); pixma_set_be32 (s->param->x, data + 0x08);
pixma_set_be32 (s->param->y, data + 0x0c); pixma_set_be32 (s->param->y, data + 0x0c);
pixma_set_be32 (raw_width, data + 0x10); pixma_set_be32 (raw_width, data + 0x10);
pixma_set_be32 (s->param->h, data + 0x14); pixma_set_be32 (h, data + 0x14);
data[0x18] = ((s->param->channels != 1) || is_ccd_grayscale (s)) ? 0x08 : 0x04; data[0x18] = ((s->param->channels != 1) || is_ccd_grayscale (s)) ? 0x08 : 0x04;
data[0x19] = s->param->depth * ((is_ccd_grayscale (s)) ? 3 : s->param->channels); /* bits per pixel */ data[0x19] = s->param->depth * ((is_ccd_grayscale (s)) ? 3 : s->param->channels); /* bits per pixel */
data[0x20] = 0xff; data[0x20] = 0xff;
@ -455,7 +503,7 @@ send_scan_param (pixma_t * s)
pixma_set_be32 (s->param->x, data + 0x0c); pixma_set_be32 (s->param->x, data + 0x0c);
pixma_set_be32 (s->param->y, data + 0x10); pixma_set_be32 (s->param->y, data + 0x10);
pixma_set_be32 (raw_width, data + 0x14); pixma_set_be32 (raw_width, data + 0x14);
pixma_set_be32 (s->param->h, data + 0x18); pixma_set_be32 (h, data + 0x18);
data[0x1c] = ((s->param->channels != 1) || is_ccd_grayscale (s)) ? 0x08 : 0x04; data[0x1c] = ((s->param->channels != 1) || is_ccd_grayscale (s)) ? 0x08 : 0x04;
data[0x1d] = s->param->depth * ((is_ccd_grayscale (s)) ? 3 : s->param->channels); /* bits per pixel */ data[0x1d] = s->param->depth * ((is_ccd_grayscale (s)) ? 3 : s->param->channels); /* bits per pixel */
data[0x1f] = 0x01; data[0x1f] = 0x01;
@ -752,9 +800,14 @@ mp150_check_param (pixma_t * s, pixma_scan_param_t * sp)
sp->depth = 8; /* MP150 only supports 8 bit per channel. */ sp->depth = 8; /* MP150 only supports 8 bit per channel. */
if (mp->generation >= 2) if (mp->generation >= 2)
{ {
sp->x = ALIGN (sp->x, 32); /* mod 32 and expansion of the X scan limits */
sp->y = ALIGN (sp->y, 32); sp->w += (sp->x) % 32;
sp->w = calc_raw_width (mp, sp); sp->w = calc_raw_width (mp, sp);
sp->x = ALIGN_INF (sp->x, 32);
/* FIXME: TBC, if all gen2 and gen3 devices do not need
* modulo 32 alignment on Y axis. If needed, uncomment next 2 lines */
/* sp->h += (sp->y) % 32;
sp->y = ALIGN_INF (sp->y, 32);*/
} }
sp->line_size = calc_raw_width (mp, sp) * sp->channels; sp->line_size = calc_raw_width (mp, sp) * sp->channels;
return 0; return 0;
@ -965,51 +1018,6 @@ post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib)
return mp->data_left_ofs - sptr; /* # of non processed bytes */ return mp->data_left_ofs - sptr; /* # of non processed bytes */
} }
static unsigned
calc_shifting (pixma_t * s)
{
mp150_t *mp = (mp150_t *) s->subdriver;
unsigned base_shift;
/* If color plane shift (CCD devices), how many pixels shift */
switch (s->cfg->pid)
{
case MP800_PID:
case MP810_PID:
case MP830_PID:
case MP960_PID:
case MP970_PID:
mp->lines_shift = 0;
if (s->param->ydpi > 75)
mp->lines_shift = s->param->ydpi / 50;
break;
default: /* all CIS devices */
mp->lines_shift = 0;
}
base_shift = get_cis_ccd_line_size (s) * mp->lines_shift;
/* If color plane shift, how to apply the shift */
switch (s->cfg->pid)
{
case MP970_PID:
mp->shift[0] = 0;
mp->shift[1] = base_shift;
mp->shift[2] = 2 * base_shift;
break;
case MP800_PID:
case MP810_PID:
case MP830_PID:
case MP960_PID:
default:
mp->shift[0] = 2 * base_shift;
mp->shift[1] = base_shift;
mp->shift[2] = 0;
}
return mp->lines_shift;
}
static int static int
mp150_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib) mp150_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib)
{ {

Wyświetl plik

@ -151,8 +151,8 @@
:model "PIXMA MP810" :model "PIXMA MP810"
:interface "USB" :interface "USB"
:usbid "0x04a9" "0x171a" :usbid "0x04a9" "0x171a"
:status :untested :status :good
:comment "Testers needed!" :comment "All resolutions supported up to 1200 dpi. Vertical lines issue at 2400 and 4800 dpi, can these modes be handled? USB Snoops needed for TPU film scan."
:model "PIXMA MP830" :model "PIXMA MP830"
:interface "USB" :interface "USB"
@ -285,11 +285,17 @@
:status :untested :status :untested
:comment "Testers needed!" :comment "Testers needed!"
:model "imageCLASS MF4140"
:interface "USB"
:usbid "0x04a9" "0x26a3"
:status :good
:comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI)"
:model "imageCLASS MF4150" :model "imageCLASS MF4150"
:interface "USB" :interface "USB"
:usbid "0x04a9" "0x26a3" :usbid "0x04a9" "0x26a3"
:status :untested :status :good
:comment "Same protocol as imageCLASS MF4270? Testers needed!" :comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI)"
:model "imageCLASS MF4270" :model "imageCLASS MF4270"
:interface "USB" :interface "USB"

Wyświetl plik

@ -1,4 +1,4 @@
.TH "sane\-pixma" "5" "14 Jul 2008" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy" .TH "sane\-pixma" "5" "7 Sep 2008" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.IX sane\-pixma .IX sane\-pixma
.SH NAME .SH NAME
sane\-pixma \- SANE backend for Canon PIXMA MP series sane\-pixma \- SANE backend for Canon PIXMA MP series
@ -22,7 +22,7 @@ PIXMA MX300, MX310, MX700
.br .br
MultiPASS MP700, PIXMA MP750 (no grayscale) MultiPASS MP700, PIXMA MP750 (no grayscale)
.br .br
ImageCLASS MF4270 ImageCLASS MF4140, MF4150, MF4270
.RE .RE
.PP .PP
The following models are not well tested and/or the scanner sometimes hangs The following models are not well tested and/or the scanner sometimes hangs
@ -42,7 +42,7 @@ Feedback in the Sane-dev mailing list welcome.
.RS .RS
PIXMA MP740 PIXMA MP740
.br .br
ImageCLASS MF3110, MF3240, MF4150 ImageCLASS MF3110, MF3240
.br .br
ImageCLASS MF5630, MF5650, MF5730, MF5750, MF5770, MF8170c ImageCLASS MF5630, MF5650, MF5730, MF5750, MF5770, MF8170c
.RE .RE