canon: Add support for Canon IX-4015 scanner

This adds support for Canon IX-4015 scanner. The difference from other scanners
supported by this backend is that it has no highlight and shadow settings - the
corresponding bytes in set_window command must be zero or it will fail.

IX-4015 has optical resolution of 400 dpi, can interpolate up to 800 dpi (color)
or 1200 dpi (grayscale).
merge-requests/1/head
Ondrej Zary 2012-07-20 16:30:23 +02:00 zatwierdzone przez m. allan noah
rodzic 1594aa5a05
commit 8e627110cd
4 zmienionych plików z 41 dodań i 2 usunięć

Wyświetl plik

@ -1404,6 +1404,20 @@ sane_start (SANE_Handle handle)
wbuf[57] = 1;
wbuf[58] = 1;
}
else if (s->hw->info.model == IX4015) /* modification for IX-4015 */
{
wbuf[36] = 0;
wbuf[37] = (s->RIF << 7);
wbuf[57] = 0;
wbuf[58] = 0;
/* no highlight and shadow control */
wbuf[59] = 0;
wbuf[60] = 0;
wbuf[62] = 0;
wbuf[64] = 0;
wbuf[70] = 0;
wbuf[71] = 0;
}
buf_size = sizeof (wbuf);
status = set_window (s->fd, wbuf);

Wyświetl plik

@ -906,6 +906,21 @@ attach (const char *devnam, CANON_Device ** devp)
dev->info.is_filmscanner = SANE_FALSE;
dev->info.has_fixed_resolutions = SANE_TRUE;
}
else if (!strncmp (str, "IX-4015", 7)) /* IX-4015 */
{
dev->info.model = IX4015;
dev->sane.type = SANE_I18N("flatbed scanner");
dev->adf.Status = ADF_STAT_INACTIVE;
dev->tpu.Status = TPU_STAT_INACTIVE;
dev->info.can_focus = SANE_FALSE;
dev->info.can_autoexpose = SANE_TRUE;
dev->info.can_calibrate = SANE_FALSE;
dev->info.can_diagnose = SANE_TRUE;
dev->info.can_eject = SANE_FALSE;
dev->info.can_mirror = SANE_TRUE;
dev->info.is_filmscanner = SANE_FALSE;
dev->info.has_fixed_resolutions = SANE_FALSE;
}
else /* CS300, CS600 */
{
dev->info.model = CS3_600;
@ -1406,8 +1421,8 @@ init_options (CANON_Scanner * s)
s->opt[OPT_BIND_HILO].title = SANE_TITLE_RGB_BIND;
s->opt[OPT_BIND_HILO].desc = SANE_DESC_RGB_BIND;
s->opt[OPT_BIND_HILO].type = SANE_TYPE_BOOL;
s->opt[OPT_BIND_HILO].cap |=
(s->hw->info.model == FB620) ? SANE_CAP_INACTIVE : 0;
s->opt[OPT_BIND_HILO].cap |= (s->hw->info.model == FB620 ||
s->hw->info.model == IX4015) ? SANE_CAP_INACTIVE : 0;
s->val[OPT_BIND_HILO].w = SANE_TRUE;
/* highlight point for red */
@ -1440,6 +1455,8 @@ init_options (CANON_Scanner * s)
s->opt[OPT_HILITE_G].unit = SANE_UNIT_NONE;
s->opt[OPT_HILITE_G].constraint_type = SANE_CONSTRAINT_RANGE;
s->opt[OPT_HILITE_G].constraint.range = &s->hw->info.HiliteG_range;
s->opt[OPT_HILITE_G].cap |=
(s->hw->info.model == IX4015) ? SANE_CAP_INACTIVE : 0;
s->val[OPT_HILITE_G].w = 255;
/* shadow point for green */
@ -1450,6 +1467,8 @@ init_options (CANON_Scanner * s)
s->opt[OPT_SHADOW_G].unit = SANE_UNIT_NONE;
s->opt[OPT_SHADOW_G].constraint_type = SANE_CONSTRAINT_RANGE;
s->opt[OPT_SHADOW_G].constraint.range = &s->hw->info.ShadowG_range;
s->opt[OPT_SHADOW_G].cap |=
(s->hw->info.model == IX4015) ? SANE_CAP_INACTIVE : 0;
s->val[OPT_SHADOW_G].w = 0;
/* highlight point for blue */

Wyświetl plik

@ -97,6 +97,7 @@
#define FB620 2 /* CanoScan FB620S */
#define FS2710 3 /* CanoScan FS2710S */
#define FB1200 4 /* CanoScan FB1200S */
#define IX4015 5 /* IX-4015 */
#ifndef MAX
#define MAX(A,B) (((A) > (B))? (A) : (B))

Wyświetl plik

@ -50,6 +50,11 @@
:comment "1 pass; 36bit film scanner"
:status :good
:model "IX-4015" ; name models for above-specified mfg.
:interface "SCSI"
:comment "1 pass; flatbed scanner"
:status :good
:mfg "Apple" ; name a manufacturer
:url "http://www.apple.com/"