ImageCLASS MF5770 grayscale mode and D480 duplex ADF support.

- backend/pixma_imageclass.c: Added duplex ADF scan for Canon ImageCLASS D480
- backend/pixma_mp730.c:
  . Fixed ImageCLASS MF5770 grayscale scanning.
  . Declared ImageCLASS MF5730 and MF5750 (similarity with MF5770).
- doc/descriptions/pixma.desc: Documentation updates.
merge-requests/1/head
Nicolas Martin 2009-06-22 21:31:30 +02:00
rodzic aaa18be7e3
commit a05e6e078b
4 zmienionych plików z 71 dodań i 27 usunięć

Wyświetl plik

@ -1,3 +1,10 @@
2009-06-22 Nicolas Martin <nicols-guest at users.alioth.debian.org>
* backend/pixma_imageclass.c, backend/pixma_mp730.c, doc/descriptions/pixma.desc:
- Added duplex ADF scan for Canon ImageCLASS D480.
- Fixed ImageCLASS MF5770 grayscale scanning.
- Moved ImageCLASS MF5730 and MF5750 to pixma_mp730.c (similarity with MF5770).
- Updated documentation.
2009-06-20 Mattias Ellert <mattias.ellert@fysast.uu.se>
* po/sane-backends.sv.po: Updated Swedish translations.
* backend/hp5400_internal.h, backend/hp5590_cmds.c,

Wyświetl plik

@ -178,6 +178,7 @@ activate (pixma_t * s, uint8_t x)
{
case MF4200_PID:
case MF4600_PID:
case D480_PID:
return iclass_exec (s, &mf->cb, 1);
break;
case MF4100_PID:
@ -198,11 +199,14 @@ select_source (pixma_t * s)
{
iclass_t *mf = (iclass_t *) s->subdriver;
uint8_t *data = pixma_newcmd (&mf->cb, cmd_select_source, 10, 0);
data[0] = (s->param->source == PIXMA_SOURCE_ADF) ? 2 : 1;
data[0] = (s->param->source == PIXMA_SOURCE_ADF ||
s->param->source == PIXMA_SOURCE_ADFDUP) ? 2 : 1;
data[5] = (s->param->source == PIXMA_SOURCE_ADFDUP) ? 3 : 0;
switch (s->cfg->pid)
{
case MF4200_PID:
case MF4600_PID:
case D480_PID:
return iclass_exec (s, &mf->cb, 0);
break;
case MF4100_PID:
@ -233,6 +237,7 @@ send_scan_param (pixma_t * s)
{
case MF4200_PID:
case MF4600_PID:
case D480_PID:
return iclass_exec (s, &mf->cb, 0);
break;
case MF4100_PID:
@ -308,6 +313,7 @@ read_error_info (pixma_t * s, void *buf, unsigned size)
{
case MF4200_PID:
case MF4600_PID:
case D480_PID:
error = iclass_exec (s, &mf->cb, 0);
break;
case MF4100_PID:
@ -668,7 +674,7 @@ const pixma_config_t pixma_iclass_devices[] = {
DEV ("Canon imageCLASS MF4270", "MF4270", MF4200_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS MF4150", "MF4100", MF4100_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS MF4690", "MF4690", MF4600_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS D480", "D480", D480_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon imageCLASS D480", "D480", D480_PID, 600, 640, 877, PIXMA_CAP_ADFDUP),
/* FIXME: the following capabilities all need updating/verifying */
DEV ("Canon imageCLASS MF5630", "MF5630", MF5630_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEV ("Canon laserBase MF5650", "MF5650", MF5650_PID, 600, 640, 877, PIXMA_CAP_ADF),

Wyświetl plik

@ -62,18 +62,20 @@
#define IMAGE_BLOCK_SIZE (0xc000)
#define CMDBUF_SIZE 512
#define MP730_PID 0x262f
#define MP700_PID 0x2630
#define MP360_PID 0x263c
#define MP370_PID 0x263d
#define MP390_PID 0x263e
#define MP700_PID 0x2630
#define MP740_PID 0x264c /* Untested */
#define MP710_PID 0x264d
#define MP730_PID 0x262f
#define MF5730_PID 0x265d /* Untested */
#define MF5750_PID 0x265e /* Untested */
#define MF5770_PID 0x265f
enum mp730_state_t
{
state_idle,
@ -285,6 +287,8 @@ handle_interrupt (pixma_t * s, int timeout)
case MP360_PID:
case MP370_PID:
case MP390_PID:
case MF5730_PID:
case MF5750_PID:
case MF5770_PID:
if (len != 16)
{
@ -332,6 +336,8 @@ has_ccd_sensor (pixma_t * s)
return (s->cfg->pid == MP360_PID ||
s->cfg->pid == MP370_PID ||
s->cfg->pid == MP390_PID ||
s->cfg->pid == MF5730_PID ||
s->cfg->pid == MF5750_PID ||
s->cfg->pid == MF5770_PID);
}
@ -369,27 +375,47 @@ step1 (pixma_t * s)
return PIXMA_ENO_PAPER;
if (has_ccd_sensor (s))
{
/* MF5770: Wait 10 sec before starting for 1st page only */
if (s->cfg->pid == MF5770_PID && s->param->adf_pageid == 0)
switch (s->cfg->pid)
{
tmo = 10; /* like Windows driver, 10 sec CCD calibration ? */
while (--tmo >= 0)
{
error = handle_interrupt (s, 1000); \
if (s->cancel) \
return PIXMA_ECANCELED; \
if (error != PIXMA_ECANCELED && error < 0) \
return error;
PDBG (pixma_dbg (2, "CCD Calibration ends in %d sec.\n", tmo));
}
case MF5730_PID:
case MF5750_PID:
case MF5770_PID:
/* MF57x0: Wait 10 sec before starting for 1st page only */
if (s->param->adf_pageid == 0)
{
tmo = 10; /* like Windows driver, 10 sec CCD calibration ? */
while (--tmo >= 0)
{
error = handle_interrupt (s, 1000); \
if (s->cancel) \
return PIXMA_ECANCELED; \
if (error != PIXMA_ECANCELED && error < 0) \
return error;
PDBG (pixma_dbg (2, "CCD Calibration ends in %d sec.\n", tmo));
}
}
break;
default:
break;
}
activate (s, 0);
error = calibrate (s);
/* MF5770: calibration returns PIXMA_STATUS_FAILED */
if (s->cfg->pid == MF5770_PID && error == PIXMA_ECANCELED)
error = read_error_info (s, NULL, 0);
switch (s->cfg->pid)
{
case MF5730_PID:
case MF5750_PID:
case MF5770_PID:
/* MF57x0: calibration returns PIXMA_STATUS_FAILED */
if (error == PIXMA_ECANCELED)
error = read_error_info (s, NULL, 0);
break;
default:
break;
}
}
if (error >= 0)
error = activate (s, 0);
@ -582,14 +608,17 @@ mp730_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib)
/* n = number of full lines (rows) we have in the buffer. */
if (n != 0)
{
if (s->param->channels != 1 && s->cfg->pid != MF5770_PID)
if (s->param->channels != 1 &&
s->cfg->pid != MF5730_PID &&
s->cfg->pid != MF5750_PID &&
s->cfg->pid != MF5770_PID)
{
/* color */
/* color, and not an MF57x0 */
pack_rgb (mp->imgbuf, n, mp->raw_width, mp->lbuf);
}
else
{
/* grayscale */
/* grayscale or MF57x0 */
memcpy (mp->lbuf, mp->imgbuf, n * s->param->line_size);
}
block_size = n * s->param->line_size;
@ -690,7 +719,9 @@ const pixma_config_t pixma_mp730_devices[] = {
DEVICE ("Canon MultiPASS MP730", "MP730", MP730_PID, 1200, 637, 868, PIXMA_CAP_ADF),
DEVICE ("Canon MultiPASS MP740", "MP740", MP740_PID, 1200, 637, 868, PIXMA_CAP_ADF),
DEVICE ("Canon imageCLASS MF5770", "MF5770", MF5770_PID, 600, 640, 877, PIXMA_CAP_ADF),
DEVICE ("Canon imageCLASS MF5730", "MF5730", MF5730_PID, 1200, 636, 868, PIXMA_CAP_ADF),
DEVICE ("Canon imageCLASS MF5750", "MF5750", MF5750_PID, 1200, 636, 868, PIXMA_CAP_ADF),
DEVICE ("Canon imageCLASS MF5770", "MF5770", MF5770_PID, 1200, 636, 868, PIXMA_CAP_ADF),
DEVICE (NULL, NULL, 0, 0, 0, 0, 0)
};

Wyświetl plik

@ -241,7 +241,7 @@
:interface "USB Ethernet"
:usbid "0x04a9" "0x172c"
:status :good
:comment "Works in flatbed and ADF simplex. ADF Duplex supported, but no report yet."
:comment "All resolutions supported (up to 2400DPI). Flatbed, ADF simplex and Duplex supported."
:model "PIXMA MX7600"
:interface "USB Ethernet"
@ -301,7 +301,7 @@
:interface "USB"
:usbid "0x04a9" "0x26ed"
:status :good
:comment "All resolutions supported (up to 600DPI)"
:comment "All resolutions supported (up to 600DPI). Flatbed, ADF simplex and Duplex supported."
:model "imageCLASS MF5630"
:interface "USB"
@ -337,7 +337,7 @@
:interface "USB"
:usbid "0x04a9" "0x265f"
:status :good
:comment "All resolutions supported (up to 600DPI) in color. Grayscale not working yet in preview (75 dpi capable ?)."
:comment "All resolutions supported (up to 600DPI)."
:model "imageCLASS MF3110"
:interface "USB"