X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fftdi-la%2Fprotocol.c;h=264b4f222eb5714a56a86b909be5a660bc77f9c0;hb=e66d1892d0dd16ed166fc8f13493f95de0607362;hp=0d71bcb374f6126eec83425b0f9575915dfd180f;hpb=f227338297de002d8a76dc5e411dde8743751028;p=libsigrok.git diff --git a/src/hardware/ftdi-la/protocol.c b/src/hardware/ftdi-la/protocol.c index 0d71bcb3..264b4f22 100644 --- a/src/hardware/ftdi-la/protocol.c +++ b/src/hardware/ftdi-la/protocol.c @@ -20,24 +20,41 @@ #include #include "protocol.h" -static void send_samples(struct dev_context *devc, uint64_t samples_to_send) +static void send_samples(struct sr_dev_inst *sdi, uint64_t samples_to_send) { struct sr_datafeed_packet packet; struct sr_datafeed_logic logic; + struct dev_context *devc; sr_spew("Sending %" PRIu64 " samples.", samples_to_send); + devc = sdi->priv; + packet.type = SR_DF_LOGIC; packet.payload = &logic; logic.length = samples_to_send; logic.unitsize = 1; logic.data = devc->data_buf; - sr_session_send(devc->cb_data, &packet); + sr_session_send(sdi, &packet); devc->samples_sent += samples_to_send; devc->bytes_received -= samples_to_send; } +SR_PRIV int ftdi_la_set_samplerate(struct dev_context *devc) +{ + int ret; + + ret = ftdi_set_baudrate(devc->ftdic, + devc->cur_samplerate / devc->desc->samplerate_div); + if (ret < 0) { + sr_err("Failed to set baudrate (%d): %s.", devc->cur_samplerate, + ftdi_get_error_string(devc->ftdic)); + return SR_ERR; + } + return SR_OK; +} + SR_PRIV int ftdi_la_receive_data(int fd, int revents, void *cb_data) { struct sr_dev_inst *sdi; @@ -62,7 +79,7 @@ SR_PRIV int ftdi_la_receive_data(int fd, int revents, void *cb_data) if (bytes_read < 0) { sr_err("Failed to read FTDI data (%d): %s.", bytes_read, ftdi_get_error_string(devc->ftdic)); - sdi->driver->dev_acquisition_stop(sdi, sdi); + sr_dev_acquisition_stop(sdi); return FALSE; } if (bytes_read == 0) { @@ -75,12 +92,12 @@ SR_PRIV int ftdi_la_receive_data(int fd, int revents, void *cb_data) n = devc->samples_sent + devc->bytes_received; if (devc->limit_samples && (n >= devc->limit_samples)) { - send_samples(devc, devc->limit_samples - devc->samples_sent); + send_samples(sdi, devc->limit_samples - devc->samples_sent); sr_info("Requested number of samples reached."); - sdi->driver->dev_acquisition_stop(sdi, cb_data); + sr_dev_acquisition_stop(sdi); return TRUE; } else { - send_samples(devc, devc->bytes_received); + send_samples(sdi, devc->bytes_received); } return TRUE;