]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/beaglelogic/beaglelogic.h
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / beaglelogic / beaglelogic.h
index 9015c61035e37787bf38792095ef32884d35f0ee..2150032cfa455b1ea5517798962b400e4fa5c703 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the libsigrok project.
  *
- * Copyright (C) 2014 Kumar Abhishek <abhishek@theembeddedkitchen.net>
+ * Copyright (C) 2014-2017 Kumar Abhishek <abhishek@theembeddedkitchen.net>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,8 +30,7 @@
 
 /* BeagleLogic device node name */
 #define BEAGLELOGIC_DEV_NODE        "/dev/beaglelogic"
-#define BEAGLELOGIC_SYSFS_ATTR(a)   "/sys/devices/virtual/misc/beaglelogic/"\
-                                       __STRING(a)
+#define BEAGLELOGIC_SYSFS_ATTR(a)   "/sys/devices/virtual/misc/beaglelogic/" #a
 
 /* Reproduced verbatim from beaglelogic.h in the kernel tree until the kernel
  * module hits the mainline. Contains the ABI, so DO NOT TOUCH this section */
 #define IOCTL_BL_GET_TRIGGER_FLAGS  _IOR('k', 0x23, uint32_t)
 #define IOCTL_BL_SET_TRIGGER_FLAGS  _IOW('k', 0x23, uint32_t)
 
+#define IOCTL_BL_GET_CUR_INDEX      _IOR('k', 0x24, uint32_t)
 #define IOCTL_BL_CACHE_INVALIDATE    _IO('k', 0x25)
 
 #define IOCTL_BL_GET_BUFFER_SIZE    _IOR('k', 0x26, uint32_t)
 #define IOCTL_BL_SET_BUFFER_SIZE    _IOW('k', 0x26, uint32_t)
 
 #define IOCTL_BL_GET_BUFUNIT_SIZE   _IOR('k', 0x27, uint32_t)
+#define IOCTL_BL_SET_BUFUNIT_SIZE   _IOW('k', 0x27, uint32_t)
 
 #define IOCTL_BL_FILL_TEST_PATTERN   _IO('k', 0x28)
 
@@ -91,120 +92,41 @@ enum beaglelogic_sampleunit {
  *     SR_OK or SR_ERR
  */
 
-SR_PRIV int beaglelogic_open_nonblock(struct dev_context *devc);
-SR_PRIV int beaglelogic_close(struct dev_context *devc);
+struct beaglelogic_ops {
+       int (*open)(struct dev_context *devc);
+       int (*close)(struct dev_context *devc);
 
-SR_PRIV int beaglelogic_get_buffersize(struct dev_context *devc);
-SR_PRIV int beaglelogic_set_buffersize(struct dev_context *devc);
+       int (*get_buffersize)(struct dev_context *devc);
+       int (*set_buffersize)(struct dev_context *devc);
 
-SR_PRIV int beaglelogic_get_samplerate(struct dev_context *devc);
-SR_PRIV int beaglelogic_set_samplerate(struct dev_context *devc);
+       int (*get_samplerate)(struct dev_context *devc);
+       int (*set_samplerate)(struct dev_context *devc);
 
-SR_PRIV int beaglelogic_get_sampleunit(struct dev_context *devc);
-SR_PRIV int beaglelogic_set_sampleunit(struct dev_context *devc);
+       int (*get_sampleunit)(struct dev_context *devc);
+       int (*set_sampleunit)(struct dev_context *devc);
 
-SR_PRIV int beaglelogic_get_triggerflags(struct dev_context *devc);
-SR_PRIV int beaglelogic_set_triggerflags(struct dev_context *devc);
+       int (*get_triggerflags)(struct dev_context *devc);
+       int (*set_triggerflags)(struct dev_context *devc);
 
-/* Start and stop the capture operation */
-SR_PRIV int beaglelogic_start(struct dev_context *devc);
-SR_PRIV int beaglelogic_stop(struct dev_context *devc);
+       /* Start and stop the capture operation */
+       int (*start)(struct dev_context *devc);
+       int (*stop)(struct dev_context *devc);
 
-/* Get the last error size */
-SR_PRIV int beaglelogic_getlasterror(struct dev_context *devc);
+       /* Get the last error size */
+       int (*get_lasterror)(struct dev_context *devc);
 
-/* Gets the unit size of the capture buffer (usually 4 or 8 MB) */
-SR_PRIV int beaglelogic_get_bufunitsize(struct dev_context *devc);
+       /* Gets the unit size of the capture buffer (usually 4 or 8 MB) */
+       int (*get_bufunitsize)(struct dev_context *devc);
+       int (*set_bufunitsize)(struct dev_context *devc);
 
-SR_PRIV int beaglelogic_mmap(struct dev_context *devc);
-SR_PRIV int beaglelogic_munmap(struct dev_context *devc);
-
-/* Sources */
-SR_PRIV inline int beaglelogic_open_nonblock(struct dev_context *devc) {
-       devc->fd = open(BEAGLELOGIC_DEV_NODE, O_RDONLY | O_NONBLOCK);
-       return (devc->fd == -1 ? SR_ERR : SR_OK);
-}
-
-SR_PRIV inline int beaglelogic_close(struct dev_context *devc) {
-       return close(devc->fd);
-}
-
-SR_PRIV inline int beaglelogic_get_buffersize(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_GET_BUFFER_SIZE, &devc->buffersize);
-}
-
-SR_PRIV inline int beaglelogic_set_buffersize(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_SET_BUFFER_SIZE, devc->buffersize);
-}
-
-/* This is treated differently as it gets a uint64_t while a uint32_t is read */
-SR_PRIV inline int beaglelogic_get_samplerate(struct dev_context *devc) {
-       uint32_t arg, err;
-       err = ioctl(devc->fd, IOCTL_BL_GET_SAMPLE_RATE, &arg);
-       devc->cur_samplerate = arg;
-       return err;
-}
-
-SR_PRIV inline int beaglelogic_set_samplerate(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_SET_SAMPLE_RATE,
-                       (uint32_t)devc->cur_samplerate);
-}
-
-SR_PRIV inline int beaglelogic_get_sampleunit(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_GET_SAMPLE_UNIT, &devc->sampleunit);
-}
-
-SR_PRIV inline int beaglelogic_set_sampleunit(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_SET_SAMPLE_UNIT, devc->sampleunit);
-}
-
-SR_PRIV inline int beaglelogic_get_triggerflags(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_GET_TRIGGER_FLAGS, &devc->triggerflags);
-}
-
-SR_PRIV inline int beaglelogic_set_triggerflags(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_SET_TRIGGER_FLAGS, devc->triggerflags);
-}
-
-SR_PRIV int beaglelogic_getlasterror(struct dev_context *devc) {
-       int fd;
-       char buf[16];
-       int ret;
-
-       if ((fd = open(BEAGLELOGIC_SYSFS_ATTR(lasterror), O_RDONLY)) == -1)
-               return SR_ERR;
-
-       if ((ret = read(fd, buf, 16)) < 0)
-               return SR_ERR;
-
-       close(fd);
-       devc->last_error = strtoul(buf, NULL, 10);
-
-       return SR_OK;
-}
-
-SR_PRIV inline int beaglelogic_start(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_START);
-}
+       int (*mmap)(struct dev_context *devc);
+       int (*munmap)(struct dev_context *devc);
+};
 
-SR_PRIV inline int beaglelogic_stop(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_STOP);
-}
+SR_PRIV extern const struct beaglelogic_ops beaglelogic_native_ops;
+SR_PRIV extern const struct beaglelogic_ops beaglelogic_tcp_ops;
 
-SR_PRIV int beaglelogic_get_bufunitsize(struct dev_context *devc) {
-       return ioctl(devc->fd, IOCTL_BL_GET_BUFUNIT_SIZE, &devc->bufunitsize);
-}
-
-SR_PRIV int beaglelogic_mmap(struct dev_context *devc) {
-       if (!devc->buffersize)
-               beaglelogic_get_buffersize(devc);
-       devc->sample_buf = mmap(NULL, devc->buffersize,
-                       PROT_READ, MAP_SHARED, devc->fd, 0);
-       return (devc->sample_buf == MAP_FAILED ? -1 : SR_OK);
-}
-
-SR_PRIV int beaglelogic_munmap(struct dev_context *devc) {
-       return munmap(devc->sample_buf, devc->buffersize);
-}
+SR_PRIV int beaglelogic_tcp_detect(struct dev_context *devc);
+SR_PRIV int beaglelogic_tcp_drain(struct dev_context *devc);
 
 #endif