X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fbeaglelogic%2Fbeaglelogic.h;h=2150032cfa455b1ea5517798962b400e4fa5c703;hb=HEAD;hp=96713ba707d9b0a647d2a0cd2a7826c2208969e3;hpb=83bf4762e42a4d4a5c077f48d8f5715c9147d9b8;p=libsigrok.git diff --git a/src/hardware/beaglelogic/beaglelogic.h b/src/hardware/beaglelogic/beaglelogic.h index 96713ba7..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 @@ -47,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) @@ -90,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