Hello This scanner has a bug, it only reports maximum 3200 dpi back.
Here is a patch there will let this scanner be seen as a 4800 dpi How do I get this patch in the next version of sane backends ? This patch is make from sane-backends-1.0.17 and the the file needed to be patch is backend/epson.c patch ---> --- backend/epson.c 2005-01-10 20:23:08.000000000 +0100 +++ backend_4990/epson_4990.c 2006-03-22 17:56:08.000000000 +0100 @@ -14,6 +14,7 @@ Copyright (C) 2000 Mike Porter <m...@udel.edu> (mjp) Copyright (C) 2003 EPSON KOWA Corporation Copyright (C) 1999-2005 Karl Heinz Kremer <k...@khk.net> + Copyright (C) 2006 Claus Boje <cl...@egehuset.dk> */ #define SANE_EPSON_VERSION "SANE Epson Backend v0.2.45 - 2000-01-09" @@ -59,6 +60,7 @@ If you do not wish that, delete this exception notice. */ /* + 2006-03-12 Added support for perfetion 4990 photo 4800 dpi 2005-01-09 "flaming hack to get USB scanners working without timeouts under linux" submitted by "Steve" (in comment to bug #300830) 2004-12-18 Added USB IDs for CX-4600 and CX-3650 @@ -2478,6 +2480,21 @@ SANE_FIX ((buf[10] << 8 | buf[9]) * 25.4 / dev->dpi_range.max); dev->tpu_y_range.quant = 0; + /* + * Check for Perfection 4990 photo/GT-X800 scanner. + * This scanner only report 3200 dpi back. + * The scanner fysical supports 4800 dpi. + * This is simulated here... + * Futher details read: + * EPSON Programming guide for EPSON Color Image Scanner Perfection 4990 + */ + if (strncmp(&buf[0x1A],"GT-X800",7) == 0) + { + dev->tpu_x_range.max = (dev->tpu_x_range.max/32)*48; + dev->tpu_y_range.max = (dev->tpu_y_range.max/32)*48; + DBG (5, "dpi_range.max %x \n", dev->dpi_range.max); + } + DBG (5, "tpu tlx %f tly %f brx %f bry %f [mm]\n", SANE_UNFIX (dev->tpu_x_range.min), SANE_UNFIX (dev->tpu_y_range.min), @@ -5949,7 +5966,6 @@ /* we need to correct for the difference in size between the EpsonIdentRec and the EpsonHdrRec */ int correction = sizeof (EpsonIdentRec) - sizeof (EpsonHdrRec); - for (n = (count - correction), buf = ident->buf; n; n -= k, buf += k) { switch (*buf) @@ -5982,6 +5998,53 @@ DBG (1, "maximum scan area: x %d y %d\n", x, y); k = 5; + + /* + * Check for Perfection 4990 photo/GT-X800 scanner. + * This scanner only report 3200 dpi back. + * The scanner fysical supports 4800 dpi. + * This is simulated here... + * Futher details read: + * EPSON Programming guide for EPSON Color Image Scanner Perfection 4990 + */ + if (s->hw->cmd->request_extended_status != 0) + { + u_char *buf; + u_char params[2]; + EpsonHdr head; + + params[0] = ESC; + params[1] = s->hw->cmd->request_extended_status; + + if (NULL != (head = (EpsonHdr) command (s, params, 2, &status))) + { + buf = &head->buf[0x1A]; + DBG (1, "product name %x %x %x %x %x %x %x %x \n", buf[0], buf[1],buf[2],buf[3],buf[4], buf[5],buf[6], buf[7] ); + if (strncmp(buf,"GT-X800",7) == 0) + { + int val = 0x12 << 8 | 0xC0; + + s->hw->res_list_size++; + s->hw->res_list = + (SANE_Int *) realloc (s->hw->res_list, + s->hw->res_list_size * sizeof (SANE_Int)); + + if (NULL == s->hw->res_list) + { + DBG (1, "out of memory (line %d)\n", __LINE__); + return SANE_STATUS_NO_MEM; + } + + s->hw->res_list[s->hw->res_list_size - 1] = (SANE_Int) val; + x = (x/32)*48; + y = (y/32)*48; + + DBG (1, "resolution (dpi): %d\n", val); + DBG (1, "maximum scan area GT-X800: x %d y %d\n", x, y); + } + } + } + continue; } default: ---- Claus Boje