gt68xx: added flag to fix stop scan bug

Some scanners (notably the Mustek 1248UB) doesn't like receiving a
STOP scan command when it is not scanning. Flag prevents it my making
sure that START/STOP commands are only ever paired up.
merge-requests/540/head
Ralph Little 2020-10-10 12:01:33 -07:00
rodzic 6886cf6e80
commit 42520aeaa9
4 zmienionych plików z 26 dodań i 13 usunięć

Wyświetl plik

@ -2329,14 +2329,7 @@ sane_cancel (SANE_Handle handle)
/* some scanners don't like this command when cancelling a scan */
sanei_usb_set_timeout (SHORT_TIMEOUT);
gt68xx_device_fix_descriptor (s->dev);
// FIXME: Temporary sticking plaster fix for models that cannot scan after calling this
// function to cancel. [RL]
if (s->dev->model->command_set != &mustek_gt6816_command_set)
{
gt68xx_scanner_stop_scan (s);
}
gt68xx_scanner_stop_scan (s);
sanei_usb_set_timeout (LONG_TIMEOUT);
if (s->dev->model->flags & GT68XX_FLAG_SHEET_FED)

Wyświetl plik

@ -979,9 +979,11 @@ gt68xx_scanner_read_line (GT68xx_Scanner * scanner,
SANE_Status
gt68xx_scanner_stop_scan (GT68xx_Scanner * scanner)
{
gt68xx_line_reader_free (scanner->reader);
scanner->reader = NULL;
if (scanner->reader)
{
gt68xx_line_reader_free (scanner->reader);
scanner->reader = NULL;
}
return gt68xx_device_stop_scan (scanner->dev);
}

Wyświetl plik

@ -176,6 +176,8 @@ gt68xx_device_new (GT68xx_Device ** dev_return)
dev->manual_selection = SANE_FALSE;
dev->scan_started = SANE_FALSE;
#ifdef USE_FORK
dev->shm_channel = NULL;
#endif /* USE_FORK */
@ -626,7 +628,14 @@ gt68xx_device_start_scan (GT68xx_Device * dev)
{
CHECK_DEV_ACTIVE (dev, "gt68xx_device_start_scan");
if (dev->model->command_set->start_scan)
return (*dev->model->command_set->start_scan) (dev);
{
if (!dev->scan_started)
{
dev->scan_started = SANE_TRUE;
return (*dev->model->command_set->start_scan) (dev);
}
return SANE_STATUS_DEVICE_BUSY;
}
else
return SANE_STATUS_UNSUPPORTED;
}
@ -681,7 +690,14 @@ gt68xx_device_stop_scan (GT68xx_Device * dev)
{
CHECK_DEV_ACTIVE (dev, "gt68xx_device_stop_scan");
if (dev->model->command_set->stop_scan)
return (*dev->model->command_set->stop_scan) (dev);
{
if (dev->scan_started)
{
dev->scan_started = SANE_FALSE;
return (*dev->model->command_set->stop_scan) (dev);
}
return SANE_STATUS_GOOD; // Essentially a NOP.
}
else
return SANE_STATUS_UNSUPPORTED;
}

Wyświetl plik

@ -527,6 +527,8 @@ struct GT68xx_Device
size_t read_bytes_left;
SANE_Byte gray_mode_color;
SANE_Bool manual_selection;
SANE_Bool scan_started;
#ifdef USE_FORK
Shm_Channel *shm_channel;
pid_t reader_pid;