X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fopenbench-logic-sniffer%2Fapi.c;h=ddd33e1482a3e4e2f6c3616bd432d98a7f4f827b;hb=9cfc695ffe5f04622f61acb98ea4ac91c3f4ffc3;hp=4abc929a24b0824673303971afe92cc45b3b2e4f;hpb=41812aca436805b0614f2a8f31cf2f8ce494aea0;p=libsigrok.git diff --git a/src/hardware/openbench-logic-sniffer/api.c b/src/hardware/openbench-logic-sniffer/api.c index 4abc929a..ddd33e14 100644 --- a/src/hardware/openbench-logic-sniffer/api.c +++ b/src/hardware/openbench-logic-sniffer/api.c @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -#include +#include #include "protocol.h" #define SERIALCOMM "115200/8n1" @@ -97,7 +97,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) struct sr_config *src; struct sr_dev_inst *sdi; struct drv_context *drvc; - struct dev_context *devc; struct sr_serial_dev_inst *serial; GSList *l, *devices; int ret; @@ -182,7 +181,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) if (sp_input_waiting(serial->data) != 0) { /* Got metadata. */ sdi = get_metadata(serial); - devc = sdi->priv; } else { /* Not an OLS -- some other board that uses the sump protocol. */ sr_info("Device does not support metadata."); @@ -195,8 +193,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) for (i = 0; i < ARRAY_SIZE(ols_channel_names); i++) sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, ols_channel_names[i]); - devc = ols_dev_new(); - sdi->priv = devc; + sdi->priv = ols_dev_new(); } /* Configure samplerate and divider. */ if (ols_set_samplerate(sdi, DEFAULT_SAMPLERATE) != SR_OK) @@ -294,10 +291,9 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd break; case SR_CONF_CAPTURE_RATIO: devc->capture_ratio = g_variant_get_uint64(data); - if (devc->capture_ratio < 0 || devc->capture_ratio > 100) { - devc->capture_ratio = 0; + if (devc->capture_ratio < 0 || devc->capture_ratio > 100) ret = SR_ERR; - } else + else ret = SR_OK; break; case SR_CONF_EXTERNAL_CLOCK: @@ -577,7 +573,10 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, /* Send header packet to the session bus. */ std_session_send_df_header(cb_data, LOG_PREFIX); - serial_source_add(sdi->session, serial, G_IO_IN, -1, + /* If the device stops sending for longer than it takes to send a byte, + * that means it's finished. But wait at least 100 ms to be safe. + */ + serial_source_add(sdi->session, serial, G_IO_IN, 100, ols_receive_data, cb_data); return SR_OK;