sane-project-website/old-archive/1999-03/0128.html

386 wiersze
14 KiB
HTML

<!-- received="Sat Mar 13 05:52:40 1999 PST" -->
<!-- sent="Sat, 13 Mar 1999 14:51:22 +0100" -->
<!-- name="Petter Reinholdtsen" -->
<!-- email="pere@hungry.com" -->
<!-- subject="AGFA SnapScan 1236 (patch 2)" -->
<!-- id="199903131351.OAA13320@lee.Cc.Uit.No" -->
<!-- inreplyto="" -->
<title>sane-devel: AGFA SnapScan 1236 (patch 2)</title>
<h1>AGFA SnapScan 1236 (patch 2)</h1>
<b>Petter Reinholdtsen</b> (<a href="mailto:pere@hungry.com"><i>pere@hungry.com</i></a>)<br>
<i>Sat, 13 Mar 1999 14:51:22 +0100</i>
<p>
<ul>
<li> <b>Messages sorted by:</b> <a href="date.html#128">[ date ]</a><a href="index.html#128">[ thread ]</a><a href="subject.html#128">[ subject ]</a><a href="author.html#128">[ author ]</a>
<!-- next="start" -->
<li> <b>Next message:</b> <a href="0129.html">Svend Daugaard Pedersen: "SnapScan backend"</a>
<li> <b>Previous message:</b> <a href="0127.html">Petter Reinholdtsen: "saned documentation patch"</a>
<!-- nextthread="start" -->
<!-- reply="end" -->
</ul>
<!-- body="start" -->
Here is the second take of the SnapScan 1236 driver patch. This is a<br>
small cleanup. 600dpi is tested, so the SnapScap 600 debug message no <br>
longer apply, and I found a small and simple bug in sane_read().<br>
<p>
This backend still fails 'scanimage -T', but I've yet do find the<br>
solution.<br>
<p>
The patch is also available from<br>
&lt;URL:<a href="http://www.student.uit.no/~pere/linux/">http://www.student.uit.no/~pere/linux/</a>&gt;.<br>
<p>
diff -ru /store/store/joseph/sane/src-pre1.01r3/ChangeLog src-pre1.01r3-allarchs/ChangeLog<br>
--- /store/store/joseph/sane/src-pre1.01r3/ChangeLog Fri Mar 5 07:20:00 1999<br>
+++ src-pre1.01r3-allarchs/ChangeLog Sat Mar 13 15:37:48 1999<br>
@@ -1,3 +1,14 @@<br>
+1999-03-10 Petter Reinholdtsen &lt;<a href="mailto:pere@td.org.uit.no">pere@td.org.uit.no</a>&gt;<br>
+<br>
+ * backend/snapscan.c (add_device init_options inquiry<br>
+ sane_snapscan_get_parameters sane_snapscan_start<br>
+ sane_snapscan_set_io_mode sane_snapscan_read) backend/snapscan.h<br>
+ backend/snapscan.desc: Rewrote scanner detection code to loop over<br>
+ array of supported SCSI names. Added AGFA SnapScan 1236 support.<br>
+ It seems to be compatible with SnapScan 600.<br>
+ Make sure to not add the same device more then once to the device<br>
+ list. Bugfix in sane_snapscan_read() triggered on EOF.<br>
+<br>
1999-03-04 David Mosberger-Tang &lt;<a href="mailto:David.Mosberger@acm.org">David.Mosberger@acm.org</a>&gt;<br>
<br>
* backend/canon.c (adjust_hilo_points): Print values of type<br>
diff -ru /store/store/joseph/sane/src-pre1.01r3/backend/snapscan.c src-pre1.01r3-allarchs/backend/snapscan.c<br>
--- /store/store/joseph/sane/src-pre1.01r3/backend/snapscan.c Sun Feb 28 21:34:05 1999<br>
+++ src-pre1.01r3-allarchs/backend/snapscan.c Fri Mar 12 20:17:16 1999<br>
@@ -111,6 +111,8 @@<br>
<br>
/*----- internal scanner operations -----*/<br>
<br>
+#define DEFAULT_DEVICE "/dev/scanner" /* Check this if config is missing */<br>
+<br>
/* hardware configuration byte masks */<br>
<br>
#define HCFG_ADC 0x80 /* AD converter 1 ==&gt; 10bit, 0 ==&gt; 8bit */<br>
@@ -161,7 +163,6 @@<br>
#define DEFAULT_BRX (x_range.max)<br>
#define DEFAULT_BRY (y_range.max)<br>
<br>
-<br>
#ifdef INOPERATIVE<br>
static const SANE_Range percent_range =<br>
{<br>
@@ -339,6 +340,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
po[OPT_MODE].constraint.string_list = names_310;<br>
break;<br>
@@ -370,6 +372,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
po[OPT_PREVIEW_MODE].constraint.string_list = names_310;<br>
break;<br>
@@ -995,6 +998,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
rgb_buf_set_diff (pss,<br>
pss-&gt;buf[INQUIRY_G2R_DIFF],<br>
@@ -1530,6 +1534,15 @@<br>
static SnapScan_Device *first_device = NULL; /* device list head */<br>
static int n_devices = 0; /* the device count */<br>
<br>
+static SANE_Bool<br>
+device_already_in_list(SnapScan_Device *current, SANE_String_Const name)<br>
+{<br>
+ for ( ;NULL != current; current = current-&gt;pnext )<br>
+ if (0 == strcmp(name, current-&gt;dev.name))<br>
+ return SANE_TRUE;<br>
+ return SANE_FALSE;<br>
+}<br>
+<br>
static SANE_Status<br>
add_device (SANE_String_Const name)<br>
{<br>
@@ -1537,10 +1550,16 @@<br>
static const char me[] = "add_device";<br>
SANE_Status status;<br>
SnapScan_Device *pd;<br>
- SnapScan_Model model_num;<br>
+ SnapScan_Model model_num = UNKNOWN;<br>
char vendor[8], model[17];<br>
+ int i, vendor_ok = 0;<br>
<br>
- DBG (DL_CALL_TRACE, "%s\n", me);<br>
+ DBG (DL_CALL_TRACE, "%s(%s)\n", me, name);<br>
+<br>
+ /* Avoid adding the same device more then once */<br>
+ if (device_already_in_list(first_device, name)) {<br>
+ return SANE_STATUS_GOOD;<br>
+ }<br>
<br>
vendor[0] = model[0] = '\0';<br>
<br>
@@ -1561,38 +1580,38 @@<br>
return status;<br>
}<br>
<br>
- if ((strncasecmp (vendor, SNAPSCAN_VENDOR, strlen (SNAPSCAN_VENDOR)) == 0)<br>
- ||<br>
- (strncasecmp (vendor, VUEGO_VENDOR, strlen (VUEGO_VENDOR)) == 0)) /* WG changed */<br>
- {<br>
- /* original SnapScan */<br>
- if (strncasecmp (model, SNAPSCAN_MODEL310,<br>
- strlen (SNAPSCAN_MODEL310)) == 0)<br>
- model_num = SNAPSCAN310;<br>
- else if (strncasecmp (model, SNAPSCAN_MODEL600,<br>
- strlen (SNAPSCAN_MODEL600)) == 0)<br>
- model_num = SNAPSCAN600;<br>
- else if (strncasecmp (model, SNAPSCAN_MODEL300,<br>
- strlen (SNAPSCAN_MODEL300)) == 0)<br>
- model_num = SNAPSCAN300;<br>
- else if (strncasecmp (model, VUEGO_MODEL310S, /* WG changed */<br>
- strlen (VUEGO_MODEL310S)) == 0)<br>
- model_num = VUEGO310S;<br>
- else<br>
+ /* check if this is one of our supported vendors */<br>
+ for (i = 0; i &lt; known_vendors; i++)<br>
+ if (0 == strncasecmp (vendor, vendors[i], strlen(vendors[i])))<br>
+ {<br>
+ vendor_ok = 1;<br>
+ break;<br>
+ }<br>
+ if (!vendor_ok)<br>
+ {<br>
+ DBG (DL_MINOR_ERROR, "%s: \"%s %s\" is not an %s\n",<br>
+ me, vendor, model,<br>
+ "AGFA SnapScan model 300, 310, 600 and 1236"<br>
+ " or VUEGO model 310S"); /* WG changed */<br>
+ sanei_scsi_close (fd);<br>
+ return SANE_STATUS_INVAL;<br>
+ }<br>
+<br>
+ /* Known vendor. Check if it is one of our supported models */<br>
+ for (i = 0; i &lt; known_scanners; i++)<br>
+ {<br>
+ if (0 == strncasecmp (model, scanners[i].scsi_name,<br>
+ strlen(scanners[i].scsi_name)))<br>
{<br>
- DBG (DL_INFO, "%s: sorry, model %s is not supported.\n"<br>
- "Currently supported models are the SnapScan 300 and 310.\n",<br>
- me, model);<br>
- sanei_scsi_close (fd);<br>
- return SANE_STATUS_INVAL;<br>
+ model_num = scanners[i].id;<br>
+ break;<br>
}<br>
}<br>
- else<br>
+ if (UNKNOWN == model_num)<br>
{<br>
- DBG (DL_MINOR_ERROR, "%s: \"%s %s\" is not an %s %s\n",<br>
- me, vendor, model,<br>
- SNAPSCAN_VENDOR,<br>
- "AGFA SnapScan model 300, 310, and 600 or VUEGO model 310S"); /* WG changed */<br>
+ DBG (DL_INFO, "%s: sorry, model %s is not supported.\n"<br>
+ "Currently supported models are the SnapScan 300 and 310.\n",<br>
+ me, model);<br>
sanei_scsi_close (fd);<br>
return SANE_STATUS_INVAL;<br>
}<br>
@@ -1706,10 +1725,10 @@<br>
if (!fp)<br>
{<br>
DBG (DL_INFO,<br>
- "%s: configuration file not found, defaulting to /dev/scanner.\n",<br>
- me);<br>
+ "%s: configuration file not found, defaulting to %s.\n",<br>
+ me, DEFAULT_DEVICE);<br>
/* default to /dev/scanner instead of insisting on config file */<br>
- status = add_device ("/dev/scanner");<br>
+ status = add_device (DEFAULT_DEVICE);<br>
if (status != SANE_STATUS_GOOD)<br>
{<br>
DBG (DL_MINOR_ERROR, "%s: failed to add device \"%s\"\n",<br>
@@ -2673,6 +2692,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
if (!pss-&gt;preview)<br>
{<br>
@@ -2699,6 +2719,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
pss-&gt;lines += line_offset;<br>
p-&gt;lines -= line_offset;<br>
@@ -3114,6 +3135,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
if (SANE_STATUS_GOOD != rgb_buf_init (pss))<br>
return SANE_STATUS_NO_MEM;<br>
@@ -3134,6 +3156,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
rgb_buf_clean (pss);<br>
break;<br>
@@ -3153,6 +3176,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
transfer_data_diff (other_buf, pss);<br>
break;<br>
@@ -3186,6 +3210,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
rgb_buf_clean (pss);<br>
break;<br>
@@ -3231,13 +3256,14 @@<br>
pss-&gt;bytes_per_line / pss-&gt;ms_per_line);<br>
<br>
/* allocate and initialize rgb ring buffer if the device is<br>
- a snapscan 310 or 600 model, in colour mode */<br>
+ a snapscan 310, 600 or 1236 model, in colour mode */<br>
if (colour)<br>
{<br>
switch (pss-&gt;pdev-&gt;model)<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
rgb_buf_init (pss);<br>
break;<br>
@@ -3279,6 +3305,8 @@<br>
DBG (DL_CALL_TRACE, "%s (%p, %p, %ld, %p)\n",<br>
me, (void *) h, (void *) buf, (long) maxlen, (void *) plen);<br>
<br>
+ *plen = 0;<br>
+<br>
if (!pss-&gt;expected_data_len)<br>
{<br>
if (pss-&gt;child &gt; 0)<br>
@@ -3292,8 +3320,6 @@<br>
return SANE_STATUS_EOF;<br>
}<br>
<br>
- *plen = 0;<br>
-<br>
if (pss-&gt;preview)<br>
mode = pss-&gt;preview_mode;<br>
<br>
@@ -3413,6 +3444,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
transferred_bytes = transfer_data_diff (buf, pss);<br>
break;<br>
@@ -3486,6 +3518,7 @@<br>
{<br>
case SNAPSCAN310:<br>
case SNAPSCAN600:<br>
+ case SNAPSCAN1236:<br>
case VUEGO310S: /* WG changed */<br>
rgb_buf_clean (pss);<br>
break;<br>
diff -ru /store/store/joseph/sane/src-pre1.01r3/backend/snapscan.desc src-pre1.01r3-allarchs/backend/snapscan.desc<br>
--- /store/store/joseph/sane/src-pre1.01r3/backend/snapscan.desc Mon Sep 7 09:28:57 1998<br>
+++ src-pre1.01r3-allarchs/backend/snapscan.desc Wed Mar 10 21:14:10 1999<br>
@@ -28,6 +28,8 @@<br>
:comment "Ditto"<br>
:model "SnapScan 600"<br>
:comment "Ditto"<br>
+:model "SnapScan 1236"<br>
+:comment "Ditto"<br>
:mfg "Vuego"<br>
:model "310S"<br>
:comment "Close SnapScan 310 compatible."<br>
diff -ru /store/store/joseph/sane/src-pre1.01r3/backend/snapscan.h src-pre1.01r3-allarchs/backend/snapscan.h<br>
--- /store/store/joseph/sane/src-pre1.01r3/backend/snapscan.h Sun Feb 28 00:59:10 1999<br>
+++ src-pre1.01r3-allarchs/backend/snapscan.h Wed Mar 10 22:19:16 1999<br>
@@ -54,22 +54,41 @@<br>
/* snapscan device field values */<br>
<br>
#define SNAPSCAN_NAME "/dev/sga"<br>
-#define SNAPSCAN_VENDOR "AGFA"<br>
-#define VUEGO_VENDOR "COLOR"<br>
-#define SNAPSCAN_MODEL300 "SnapScan"<br>
-#define SNAPSCAN_MODEL310 "SNAPSCAN 310"<br>
-#define VUEGO_MODEL310S "FlatbedScanner_4"<br>
-#define SNAPSCAN_MODEL600 "SNAPSCAN 600"<br>
#define SNAPSCAN_TYPE "flatbed scanner"<br>
/*#define INOPERATIVE*/<br>
<br>
typedef enum<br>
{<br>
+ UNKNOWN,<br>
SNAPSCAN300, /* the original SnapScan or SnapScan 300 */<br>
SNAPSCAN310, /* the SnapScan 310 */<br>
SNAPSCAN600, /* the SnapScan 600 */<br>
+ SNAPSCAN1236, /* the SnapScan 1236 */<br>
VUEGO310S /* Vuego-Version of SnapScan 310 WG changed */<br>
} SnapScan_Model;<br>
+<br>
+struct SnapScan_Model_desc<br>
+{<br>
+ char *scsi_name;<br>
+ SnapScan_Model id;<br>
+};<br>
+<br>
+static struct SnapScan_Model_desc scanners[] =<br>
+{<br>
+ { "FlatbedScanner_4", VUEGO310S },<br>
+ { "SNAPSCAN 1236", SNAPSCAN1236 },<br>
+ { "SNAPSCAN 310", SNAPSCAN310 },<br>
+ { "SNAPSCAN 600", SNAPSCAN600 },<br>
+ { "SnapScan", SNAPSCAN300 },<br>
+};<br>
+#define known_scanners (sizeof(scanners)/sizeof(struct SnapScan_Model_desc))<br>
+<br>
+static char *vendors[] =<br>
+{<br>
+ "AGFA",<br>
+ "COLOR",<br>
+};<br>
+#define known_vendors (sizeof(vendors)/sizeof(char*))<br>
<br>
typedef enum<br>
{<br>
<p>
<pre>
--
Source code, list archive, and docs: <a href="http://www.mostang.com/sane/">http://www.mostang.com/sane/</a>
To unsubscribe: echo unsubscribe sane-devel | mail <a href="mailto:majordomo@mostang.com">majordomo@mostang.com</a>
</pre>
<!-- body="end" -->
<p>
<ul>
<!-- next="start" -->
<li> <b>Next message:</b> <a href="0129.html">Svend Daugaard Pedersen: "SnapScan backend"</a>
<li> <b>Previous message:</b> <a href="0127.html">Petter Reinholdtsen: "saned documentation patch"</a>
<!-- nextthread="start" -->
<!-- reply="end" -->
</ul>