X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fbeaglelogic%2Fbeaglelogic.h;h=2150032cfa455b1ea5517798962b400e4fa5c703;hb=HEAD;hp=78363c1cb8f58fe1414b77cea387514ffb736f42;hpb=db24496ac8575e917996e7812279987f2141c298;p=libsigrok.git diff --git a/src/hardware/beaglelogic/beaglelogic.h b/src/hardware/beaglelogic/beaglelogic.h index 78363c1c..2150032c 100644 --- a/src/hardware/beaglelogic/beaglelogic.h +++ b/src/hardware/beaglelogic/beaglelogic.h @@ -1,7 +1,7 @@ /* * This file is part of the libsigrok project. * - * Copyright (C) 2014 Kumar Abhishek + * Copyright (C) 2014-2017 Kumar Abhishek * * 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 @@ -21,20 +21,16 @@ #define BEAGLELOGIC_H_ #include - #include #include #include #include - #include - #include /* 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 */ @@ -51,12 +47,14 @@ #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) @@ -94,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); - -SR_PRIV int beaglelogic_get_buffersize(struct dev_context *devc); -SR_PRIV int beaglelogic_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); - -SR_PRIV int beaglelogic_get_sampleunit(struct dev_context *devc); -SR_PRIV int beaglelogic_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); - -/* Start and stop the capture operation */ -SR_PRIV int beaglelogic_start(struct dev_context *devc); -SR_PRIV int beaglelogic_stop(struct dev_context *devc); - -/* Get the last error size */ -SR_PRIV int beaglelogic_getlasterror(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); +struct beaglelogic_ops { + int (*open)(struct dev_context *devc); + int (*close)(struct dev_context *devc); -SR_PRIV int beaglelogic_mmap(struct dev_context *devc); -SR_PRIV int beaglelogic_munmap(struct dev_context *devc); + int (*get_buffersize)(struct dev_context *devc); + int (*set_buffersize)(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); -} + int (*get_samplerate)(struct dev_context *devc); + int (*set_samplerate)(struct dev_context *devc); -SR_PRIV inline int beaglelogic_close(struct dev_context *devc) { - return close(devc->fd); -} + int (*get_sampleunit)(struct dev_context *devc); + int (*set_sampleunit)(struct dev_context *devc); -SR_PRIV inline int beaglelogic_get_buffersize(struct dev_context *devc) { - return ioctl(devc->fd, IOCTL_BL_GET_BUFFER_SIZE, &devc->buffersize); -} + int (*get_triggerflags)(struct dev_context *devc); + int (*set_triggerflags)(struct dev_context *devc); -SR_PRIV inline int beaglelogic_set_buffersize(struct dev_context *devc) { - return ioctl(devc->fd, IOCTL_BL_SET_BUFFER_SIZE, devc->buffersize); -} + /* Start and stop the capture operation */ + int (*start)(struct dev_context *devc); + int (*stop)(struct dev_context *devc); -/* 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; -} + /* Get the last error size */ + int (*get_lasterror)(struct dev_context *devc); -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); -} + /* 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 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