mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-11 03:21:29 +00:00
Implemented serial_set_break for FTDI
Setting break is required to wake up Cochran DCs (it doesn't make sense to me, but it's needed). Signed-off-by: John Van Ostrand <john@vanostrand.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
166eb17ac2
commit
866a25f90e
1 changed files with 15 additions and 4 deletions
|
@ -69,6 +69,9 @@ typedef struct ftdi_serial_t {
|
||||||
int halfduplex;
|
int halfduplex;
|
||||||
unsigned int baudrate;
|
unsigned int baudrate;
|
||||||
unsigned int nbits;
|
unsigned int nbits;
|
||||||
|
unsigned int databits;
|
||||||
|
unsigned int stopbits;
|
||||||
|
unsigned int parity;
|
||||||
} ftdi_serial_t;
|
} ftdi_serial_t;
|
||||||
|
|
||||||
static dc_status_t serial_ftdi_get_received (dc_custom_io_t *io, size_t *value)
|
static dc_status_t serial_ftdi_get_received (dc_custom_io_t *io, size_t *value)
|
||||||
|
@ -172,6 +175,9 @@ static dc_status_t serial_ftdi_open (dc_custom_io_t *io, dc_context_t *context,
|
||||||
device->halfduplex = 0;
|
device->halfduplex = 0;
|
||||||
device->baudrate = 0;
|
device->baudrate = 0;
|
||||||
device->nbits = 0;
|
device->nbits = 0;
|
||||||
|
device->databits = 0;
|
||||||
|
device->stopbits = 0;
|
||||||
|
device->parity = 0;
|
||||||
|
|
||||||
// Initialize device ftdi context
|
// Initialize device ftdi context
|
||||||
INFO(0, "initialize ftdi_ctx");
|
INFO(0, "initialize ftdi_ctx");
|
||||||
|
@ -334,6 +340,9 @@ static dc_status_t serial_ftdi_configure (dc_custom_io_t *io, unsigned int baudr
|
||||||
|
|
||||||
device->baudrate = baudrate;
|
device->baudrate = baudrate;
|
||||||
device->nbits = 1 + databits + stopbits + (parity ? 1 : 0);
|
device->nbits = 1 + databits + stopbits + (parity ? 1 : 0);
|
||||||
|
device->databits = databits;
|
||||||
|
device->stopbits = stopbits;
|
||||||
|
device->parity = parity;
|
||||||
|
|
||||||
return DC_STATUS_SUCCESS;
|
return DC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -535,7 +544,7 @@ static dc_status_t serial_ftdi_send_break (dc_custom_io_t *io)
|
||||||
return DC_STATUS_UNSUPPORTED;
|
return DC_STATUS_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static dc_status_t serial_ftdi_set_break (dc_custom_io_t *io, int level)
|
static dc_status_t serial_ftdi_set_break (dc_custom_io_t *io, unsigned int level)
|
||||||
{
|
{
|
||||||
ftdi_serial_t *device = (ftdi_serial_t*) io->userdata;
|
ftdi_serial_t *device = (ftdi_serial_t*) io->userdata;
|
||||||
|
|
||||||
|
@ -544,7 +553,10 @@ static dc_status_t serial_ftdi_set_break (dc_custom_io_t *io, int level)
|
||||||
|
|
||||||
INFO (device->context, "Break: value=%i", level);
|
INFO (device->context, "Break: value=%i", level);
|
||||||
|
|
||||||
// Not implemented in libftdi yet. Research it further.
|
if (ftdi_set_line_property2(device->ftdi_ctx, device->databits, device->stopbits, device->parity, level)) {
|
||||||
|
ERROR (device->context, "%s", ftdi_get_error_string(device->ftdi_ctx));
|
||||||
|
return DC_STATUS_IO;
|
||||||
|
}
|
||||||
|
|
||||||
return DC_STATUS_UNSUPPORTED;
|
return DC_STATUS_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
@ -598,6 +610,5 @@ dc_custom_io_t serial_ftdi_ops = {
|
||||||
.serial_set_halfduplex = serial_ftdi_set_halfduplex,
|
.serial_set_halfduplex = serial_ftdi_set_halfduplex,
|
||||||
// Can't be done in ftdi?
|
// Can't be done in ftdi?
|
||||||
// only used in vyper2
|
// only used in vyper2
|
||||||
// NULL means NOP
|
.serial_set_break = serial_ftdi_set_break,
|
||||||
.serial_set_break = NULL
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue