X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fopenbench-logic-sniffer%2Fols.c;h=e98a230f59462780955bfbf7687aba5f15ec695b;hb=dcf03d6dbdba67eb92ee887de1bc72816a3cd01b;hp=05e138e9e93a4a10e01300f3f38231cd42b5afdc;hpb=b7f578bef53ff0e645ca0cae3f9781f577b7367a;p=libsigrok.git diff --git a/hardware/openbench-logic-sniffer/ols.c b/hardware/openbench-logic-sniffer/ols.c index 05e138e9..e98a230f 100644 --- a/hardware/openbench-logic-sniffer/ols.c +++ b/hardware/openbench-logic-sniffer/ols.c @@ -38,8 +38,8 @@ #include #endif #include -#include "sigrok.h" -#include "sigrok-internal.h" +#include "libsigrok.h" +#include "libsigrok-internal.h" #include "ols.h" #ifdef _WIN32 @@ -93,15 +93,15 @@ static const char *probe_names[NUM_PROBES + 1] = { }; /* default supported samplerates, can be overridden by device metadata */ -static struct sr_samplerates samplerates = { +static const struct sr_samplerates samplerates = { SR_HZ(10), SR_MHZ(200), SR_HZ(1), NULL, }; -/* List of struct sr_serial_dev_inst */ -static GSList *dev_insts = NULL; +SR_PRIV struct sr_dev_driver ols_driver_info; +static struct sr_dev_driver *odi = &ols_driver_info; static int send_shortcommand(int fd, uint8_t command) { @@ -131,10 +131,10 @@ static int send_longcommand(int fd, uint8_t command, uint32_t data) return SR_OK; } -static int configure_probes(struct context *ctx, GSList *probes) +static int configure_probes(struct context *ctx, const GSList *probes) { - struct sr_probe *probe; - GSList *l; + const struct sr_probe *probe; + const GSList *l; int probe_bit, stage, i; char *tc; @@ -146,7 +146,7 @@ static int configure_probes(struct context *ctx, GSList *probes) ctx->num_stages = 0; for (l = probes; l; l = l->next) { - probe = (struct sr_probe *)l->data; + probe = (const struct sr_probe *)l->data; if (!probe->enabled) continue; @@ -348,7 +348,15 @@ static struct sr_dev_inst *get_metadata(int fd) return sdi; } -static int hw_init(const char *devinfo) +static int hw_init(void) +{ + + /* Nothing to do. */ + + return SR_OK; +} + +static int hw_scan(void) { struct sr_dev_inst *sdi; struct context *ctx; @@ -359,12 +367,8 @@ static int hw_init(const char *devinfo) final_devcnt = 0; - if (devinfo) - ports = g_slist_append(NULL, g_strdup(devinfo)); - else - /* No specific device given, so scan all serial ports. */ - ports = list_serial_ports(); - + /* Scan all serial ports. */ + ports = list_serial_ports(); num_ports = g_slist_length(ports); if (!(fds = g_try_malloc0(num_ports * sizeof(GPollFD)))) { @@ -398,7 +402,7 @@ static int hw_init(const char *devinfo) fd = serial_open(l->data, O_RDWR | O_NONBLOCK); if (fd != -1) { serial_params[devcnt] = serial_backup_params(fd); - serial_set_params(fd, 115200, 8, 0, 1, 2); + serial_set_params(fd, 115200, 8, SERIAL_PARITY_NONE, 1, 2); ret = SR_OK; for (i = 0; i < 5; i++) { if ((ret = send_shortcommand(fd, @@ -455,7 +459,9 @@ static int hw_init(const char *devinfo) sdi->priv = ctx; } ctx->serial = sr_serial_dev_inst_new(dev_names[i], -1); - dev_insts = g_slist_append(dev_insts, sdi); + odi->instances = g_slist_append(odi->instances, sdi); + devices = g_slist_append(devices, sdi); + final_devcnt++; serial_close(fds[i].fd); fds[i].fd = 0; @@ -487,7 +493,7 @@ static int hw_dev_open(int dev_index) struct sr_dev_inst *sdi; struct context *ctx; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(odi->instances, dev_index))) return SR_ERR; ctx = sdi->priv; @@ -506,7 +512,7 @@ static int hw_dev_close(int dev_index) struct sr_dev_inst *sdi; struct context *ctx; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) { + if (!(sdi = sr_dev_inst_get(odi->instances, dev_index))) { sr_err("ols: %s: sdi was NULL", __func__); return SR_ERR_BUG; } @@ -531,7 +537,7 @@ static int hw_cleanup(void) int ret = SR_OK; /* Properly close and free all devices. */ - for (l = dev_insts; l; l = l->next) { + for (l = odi->instances; l; l = l->next) { if (!(sdi = l->data)) { /* Log error, but continue cleaning up the rest. */ sr_err("ols: %s: sdi was NULL, continuing", __func__); @@ -551,8 +557,8 @@ static int hw_cleanup(void) sr_serial_dev_inst_free(ctx->serial); sr_dev_inst_free(sdi); } - g_slist_free(dev_insts); - dev_insts = NULL; + g_slist_free(odi->instances); + odi->instances = NULL; return ret; } @@ -596,7 +602,7 @@ static int hw_dev_status_get(int dev_index) { struct sr_dev_inst *sdi; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(odi->instances, dev_index))) return SR_ST_NOT_FOUND; return sdi->status; @@ -639,14 +645,14 @@ static int set_samplerate(struct sr_dev_inst *sdi, uint64_t samplerate) return SR_OK; } -static int hw_dev_config_set(int dev_index, int hwcap, void *value) +static int hw_dev_config_set(int dev_index, int hwcap, const void *value) { struct sr_dev_inst *sdi; struct context *ctx; int ret; - uint64_t *tmp_u64; + const uint64_t *tmp_u64; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(odi->instances, dev_index))) return SR_ERR; ctx = sdi->priv; @@ -655,10 +661,10 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value) switch (hwcap) { case SR_HWCAP_SAMPLERATE: - ret = set_samplerate(sdi, *(uint64_t *)value); + ret = set_samplerate(sdi, *(const uint64_t *)value); break; case SR_HWCAP_PROBECONFIG: - ret = configure_probes(ctx, (GSList *)value); + ret = configure_probes(ctx, (const GSList *)value); break; case SR_HWCAP_LIMIT_SAMPLES: tmp_u64 = value; @@ -671,7 +677,7 @@ static int hw_dev_config_set(int dev_index, int hwcap, void *value) ret = SR_OK; break; case SR_HWCAP_CAPTURE_RATIO: - ctx->capture_ratio = *(uint64_t *)value; + ctx->capture_ratio = *(const uint64_t *)value; if (ctx->capture_ratio < 0 || ctx->capture_ratio > 100) { ctx->capture_ratio = 0; ret = SR_ERR; @@ -704,7 +710,7 @@ static int receive_data(int fd, int revents, void *cb_data) /* Find this device's ctx struct by its fd. */ ctx = NULL; - for (l = dev_insts; l; l = l->next) { + for (l = odi->instances; l; l = l->next) { sdi = l->data; ctx = sdi->priv; if (ctx->serial->fd == fd) { @@ -886,7 +892,7 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) int num_channels; int i; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(odi->instances, dev_index))) return SR_ERR; ctx = sdi->priv; @@ -1051,6 +1057,7 @@ SR_PRIV struct sr_dev_driver ols_driver_info = { .api_version = 1, .init = hw_init, .cleanup = hw_cleanup, + .scan = hw_scan, .dev_open = hw_dev_open, .dev_close = hw_dev_close, .dev_info_get = hw_dev_info_get, @@ -1059,4 +1066,5 @@ SR_PRIV struct sr_dev_driver ols_driver_info = { .dev_config_set = hw_dev_config_set, .dev_acquisition_start = hw_dev_acquisition_start, .dev_acquisition_stop = hw_dev_acquisition_stop, + .instances = NULL, };