X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fopenbench-logic-sniffer%2Fprotocol.c;h=ba7828527fc74afd3a96517ce2a9bd820707ad58;hb=b07b42f319488d821d23c3310133872df70987c5;hp=0a9047a3fa6140b75392f73273aab21568dc29ab;hpb=fe9ac252502fbb90badc84367eea75d6ab027686;p=libsigrok.git diff --git a/hardware/openbench-logic-sniffer/protocol.c b/hardware/openbench-logic-sniffer/protocol.c index 0a9047a3..ba782852 100644 --- a/hardware/openbench-logic-sniffer/protocol.c +++ b/hardware/openbench-logic-sniffer/protocol.c @@ -1,5 +1,5 @@ /* - * This file is part of the sigrok project. + * This file is part of the libsigrok project. * * Copyright (C) 2013 Bert Vermeulen * @@ -133,15 +133,19 @@ SR_PRIV struct dev_context *ols_dev_new(void) { struct dev_context *devc; - if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) { + if (!(devc = g_try_malloc(sizeof(struct dev_context)))) { sr_err("Device context malloc failed."); return NULL; } + /* Device-specific settings */ + devc->max_samples = devc->max_samplerate = devc->protocol_version = 0; + + /* Acquisition settings */ + devc->limit_samples = devc->capture_ratio = 0; devc->trigger_at = -1; devc->probe_mask = 0xffffffff; - devc->cur_samplerate = SR_KHZ(200); - devc->serial = NULL; + devc->flag_reg = 0; return devc; } @@ -316,10 +320,10 @@ SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi, SR_PRIV void abort_acquisition(const struct sr_dev_inst *sdi) { struct sr_datafeed_packet packet; - struct dev_context *devc; + struct sr_serial_dev_inst *serial; - devc = sdi->priv; - sr_source_remove(devc->serial->fd); + serial = sdi->conn; + sr_source_remove(serial->fd); /* Terminate session */ packet.type = SR_DF_END; @@ -328,11 +332,12 @@ SR_PRIV void abort_acquisition(const struct sr_dev_inst *sdi) SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data) { + struct drv_context *drvc; + struct dev_context *devc; + struct sr_serial_dev_inst *serial; struct sr_datafeed_packet packet; struct sr_datafeed_logic logic; struct sr_dev_inst *sdi; - struct drv_context *drvc; - struct dev_context *devc; GSList *l; uint32_t sample; int num_channels, offset, i, j; @@ -345,7 +350,8 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data) for (l = drvc->instances; l; l = l->next) { sdi = l->data; devc = sdi->priv; - if (devc->serial->fd == fd) + serial = sdi->conn; + if (serial->fd == fd) break; devc = NULL; } @@ -377,8 +383,8 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data) num_channels++; } - if (revents == G_IO_IN) { - if (serial_read(devc->serial, &byte, 1) != 1) + if (revents == G_IO_IN && devc->num_samples < devc->limit_samples) { + if (serial_read(serial, &byte, 1) != 1) return FALSE; /* Ignore it if we've read enough. */ @@ -500,9 +506,8 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data) } g_free(devc->raw_sample_buf); - serial_flush(devc->serial); + serial_flush(serial); abort_acquisition(sdi); - serial_close(devc->serial); } return TRUE;