diff --git a/backend/canon-sane.c b/backend/canon-sane.c index 85f2c407c..79ce0bac5 100644 --- a/backend/canon-sane.c +++ b/backend/canon-sane.c @@ -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); diff --git a/backend/canon.c b/backend/canon.c index cf45d4218..96a5fe90c 100644 --- a/backend/canon.c +++ b/backend/canon.c @@ -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 */ diff --git a/backend/canon.h b/backend/canon.h index b8ccabb67..34f527b99 100644 --- a/backend/canon.h +++ b/backend/canon.h @@ -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)) diff --git a/doc/descriptions/canon.desc b/doc/descriptions/canon.desc index 8fc51e878..c6db616df 100644 --- a/doc/descriptions/canon.desc +++ b/doc/descriptions/canon.desc @@ -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/"