diff --git a/backend/avision.c b/backend/avision.c index 52b298a6f..33f7b0997 100644 --- a/backend/avision.c +++ b/backend/avision.c @@ -901,7 +901,8 @@ static Avision_HWEntry Avision_Device_List [] = { NULL, NULL, 0x040a, 0x6013, "Kodak", "i1120", - AV_INT_BUTTON | AV_2ND_LINE_INTERLACED | AV_USE_GRAY_FILTER | AV_SOFT_SCALE | AV_FORCE_CALIB | AV_NO_QSCAN_MODE | AV_OVERSCAN_OPTDPI | AV_NO_REAR }, + AV_INT_BUTTON | AV_2ND_LINE_INTERLACED | AV_USE_GRAY_FILTER | AV_SOFT_SCALE | + AV_FORCE_CALIB | AV_NO_QSCAN_MODE | AV_OVERSCAN_OPTDPI | AV_NO_REAR | AV_FASTFEED_ON_CANCEL }, /* comment="duplex sheetfed scanner" */ /* status="basic" */ /* This is a Kodak OEM device manufactured by avision. @@ -6238,6 +6239,8 @@ do_eof (Avision_Scanner *s) static SANE_Status do_cancel (Avision_Scanner* s) { + int status, release_type = 0; + DBG (3, "do_cancel:\n"); s->prepared = s->scanning = SANE_FALSE; @@ -6259,6 +6262,12 @@ do_cancel (Avision_Scanner* s) sanei_thread_invalidate (s->reader_pid); } + if (s->hw->hw->feature_type & AV_FASTFEED_ON_CANCEL) + release_type = 1; + status = release_unit (s, release_type); + if (status != SANE_STATUS_GOOD) + DBG (1, "do_cancel: release_unit failed\n"); + return SANE_STATUS_CANCELLED; } diff --git a/backend/avision.h b/backend/avision.h index df1bf23b2..bda0a1d6e 100644 --- a/backend/avision.h +++ b/backend/avision.h @@ -213,6 +213,9 @@ typedef struct Avision_HWEntry { /* at least Kodak i1120 optical DPI is used for overscan calculation */ #define AV_OVERSCAN_OPTDPI ((uint64_t)1<<38) + /* some scanners support fast feed-out of the sheet when cancelling a running scan */ + #define AV_FASTFEED_ON_CANCEL ((uint64_t)1<<39) + /* maybe more ...*/ uint64_t feature_type;