Changed the initialization sequence to allow multiple transfers.
The DTR line is used to initialize or reset the communication. Toggling this line before each transfer, rather than doing it once at startup, allows to perform multiple transfers in the same session.
This commit is contained in:
parent
16191c0f51
commit
a9d0784a9a
@ -125,19 +125,18 @@ uwatec_memomouse_device_open (device_t **out, const char* name)
|
||||
return DEVICE_STATUS_IO;
|
||||
}
|
||||
|
||||
serial_sleep (200);
|
||||
|
||||
serial_flush (device->port, SERIAL_QUEUE_BOTH);
|
||||
|
||||
// Clear the RTS line and set the DTR line.
|
||||
if (serial_set_dtr (device->port, 1) == -1 ||
|
||||
serial_set_rts (device->port, 0) == -1) {
|
||||
// Clear the RTS and DTR lines.
|
||||
if (serial_set_rts (device->port, 0) == -1 ||
|
||||
serial_set_dtr (device->port, 0) == -1) {
|
||||
WARNING ("Failed to set the DTR/RTS line.");
|
||||
serial_close (device->port);
|
||||
free (device);
|
||||
return DEVICE_STATUS_IO;
|
||||
}
|
||||
|
||||
// Make sure everything is in a sane state.
|
||||
serial_flush (device->port, SERIAL_QUEUE_BOTH);
|
||||
|
||||
*out = (device_t*) device;
|
||||
|
||||
return DEVICE_STATUS_SUCCESS;
|
||||
@ -389,7 +388,7 @@ uwatec_memomouse_read_packet_inner (uwatec_memomouse_device_t *device, unsigned
|
||||
|
||||
|
||||
static device_status_t
|
||||
uwatec_memomouse_dump (uwatec_memomouse_device_t *device, unsigned char *data[], unsigned int *size)
|
||||
uwatec_memomouse_dump_internal (uwatec_memomouse_device_t *device, unsigned char *data[], unsigned int *size)
|
||||
{
|
||||
// Enable progress notifications.
|
||||
device_progress_t progress = DEVICE_PROGRESS_INITIALIZER;
|
||||
@ -491,6 +490,32 @@ uwatec_memomouse_dump (uwatec_memomouse_device_t *device, unsigned char *data[],
|
||||
}
|
||||
|
||||
|
||||
static device_status_t
|
||||
uwatec_memomouse_dump (uwatec_memomouse_device_t *device, unsigned char *data[], unsigned int *size)
|
||||
{
|
||||
// Give the interface some time to notice the DTR
|
||||
// line change from a previous transfer (if any).
|
||||
serial_sleep (500);
|
||||
|
||||
// Set the DTR line.
|
||||
if (serial_set_dtr (device->port, 1) == -1) {
|
||||
WARNING ("Failed to set the RTS line.");
|
||||
return DEVICE_STATUS_IO;
|
||||
}
|
||||
|
||||
// Start the transfer.
|
||||
device_status_t rc = uwatec_memomouse_dump_internal (device, data, size);
|
||||
|
||||
// Clear the DTR line again.
|
||||
if (serial_set_dtr (device->port, 0) == -1) {
|
||||
WARNING ("Failed to set the RTS line.");
|
||||
return DEVICE_STATUS_IO;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static device_status_t
|
||||
uwatec_memomouse_device_dump (device_t *abstract, unsigned char data[], unsigned int size, unsigned int *result)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user