changelog entry for genesys build 83

merge-requests/1/head
Stphane Voltz 2012-06-01 06:21:14 +02:00
rodzic 72b7da9600
commit 15403160f0
2 zmienionych plików z 69 dodań i 20 usunięć

Wyświetl plik

@ -1,7 +1,7 @@
2012-06-01 Stéphane Voltz <stef.dev@free.fr>
2012-05-31 Stéphane Voltz <stef.dev@free.fr> 2012-05-31 Stéphane Voltz <stef.dev@free.fr>
* doc/descriptions/genesys.desc doc/sane-genesys.man * backend/genesys.c: fix get_device to handle scanner plugging and
doc/descriptions/unsupported.desc: updated Xerox onetouch 2400 status unplugging
to supported
2012-05-29 Stéphane Voltz <stef.dev@free.fr> 2012-05-29 Stéphane Voltz <stef.dev@free.fr>
* backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c

Wyświetl plik

@ -58,7 +58,7 @@
* SANE backend for Genesys Logic GL646/GL841/GL842/GL843/GL847/GL124 based scanners * SANE backend for Genesys Logic GL646/GL841/GL842/GL843/GL847/GL124 based scanners
*/ */
#define BUILD 82 #define BUILD 83
#define BACKEND_NAME genesys #define BACKEND_NAME genesys
#include "genesys.h" #include "genesys.h"
@ -6578,13 +6578,17 @@ sane_exit (void)
SANE_Status SANE_Status
sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
{ {
Genesys_Device *dev; Genesys_Device *dev, *prev;
SANE_Int dev_num; SANE_Status status;
SANE_Int index;
SANE_Int dn;
SANE_Device *sane_device;
DBG (DBG_proc, "sane_get_devices: start: local_only = %s\n", DBG (DBG_proc, "sane_get_devices: start: local_only = %s\n",
local_only == SANE_TRUE ? "true" : "false"); local_only == SANE_TRUE ? "true" : "false");
/* hot-plug case :detection of newly connected scanners */ /* hot-plug case :detection of newly connected scanners */
sanei_usb_init();
probe_genesys_devices (); probe_genesys_devices ();
if (devlist) if (devlist)
@ -6594,11 +6598,16 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
if (!devlist) if (!devlist)
return SANE_STATUS_NO_MEM; return SANE_STATUS_NO_MEM;
dev_num = 0; prev = NULL;
for (dev = first_dev; dev_num < num_devices; dev = dev->next) index = 0;
dev = first_dev;
while(dev!=NULL)
{ {
SANE_Device *sane_device; /* check if device removed */
status = sanei_usb_open (dev->file_name, &dn);
if(status==SANE_STATUS_GOOD)
{
sanei_usb_close(dn);
sane_device = malloc (sizeof (*sane_device)); sane_device = malloc (sizeof (*sane_device));
if (!sane_device) if (!sane_device)
return SANE_STATUS_NO_MEM; return SANE_STATUS_NO_MEM;
@ -6606,9 +6615,49 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
sane_device->vendor = dev->model->vendor; sane_device->vendor = dev->model->vendor;
sane_device->model = dev->model->model; sane_device->model = dev->model->model;
sane_device->type = strdup ("flatbed scanner"); sane_device->type = strdup ("flatbed scanner");
devlist[dev_num++] = sane_device; devlist[index] = sane_device;
index++;
prev=dev;
dev=dev->next;
} }
devlist[dev_num++] = 0; else
{
/* remove device from internal list */
/* case 1 : removed device is first_dev */
if(prev==NULL)
{
/* test for another dev */
if(dev->next==NULL)
{
/* empty the whole list */
free(dev);
first_dev=NULL;
num_devices=0;
dev=NULL;
}
else
{
/* assign new start */
first_dev=dev->next;
num_devices--;
free(dev);
dev=dev->next;
}
}
/* case 2 : removed device is not first_dev */
else
{
/* link previous dev to next dev */
prev->next=dev->next;
free(dev);
num_devices--;
/* next loop */
dev=prev->next;
}
}
}
devlist[index] = 0;
*device_list = devlist; *device_list = devlist;