#include <arpa/inet.h>
#endif
#include <glib.h>
-#include "sigrok.h"
-#include "sigrok-internal.h"
+#include "libsigrok.h"
+#include "libsigrok-internal.h"
#include "ols.h"
#ifdef _WIN32
};
/* 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)
{
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;
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)))) {
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,
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;
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;
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;
}
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__);
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;
}
{
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;
int ret;
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;
/* 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) {
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;
.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,
.dev_config_set = hw_dev_config_set,
.dev_acquisition_start = hw_dev_acquisition_start,
.dev_acquisition_stop = hw_dev_acquisition_stop,
+ .instances = NULL,
};