summaryrefslogtreecommitdiff
path: root/src/iiod/ops.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/iiod/ops.h')
-rw-r--r--src/iiod/ops.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/iiod/ops.h b/src/iiod/ops.h
new file mode 100644
index 0000000..107e2ca
--- /dev/null
+++ b/src/iiod/ops.h
@@ -0,0 +1,129 @@
+/*
+ * libiio - Library for interfacing industrial I/O (IIO) devices
+ *
+ * Copyright (C) 2014 Analog Devices, Inc.
+ * Author: Paul Cercueil <paul.cercueil@analog.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * */
+
+#ifndef __OPS_H__
+#define __OPS_H__
+
+#include "../iio-private.h"
+#include "queue.h"
+
+#include <endian.h>
+#include <errno.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <poll.h>
+#include <sys/socket.h>
+#include <unistd.h>
+
+#if WITH_AIO
+#include <libaio.h>
+#endif
+
+#ifndef __bswap_constant_16
+#define __bswap_constant_16(x) \
+ ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))
+#endif
+
+#ifndef __bswap_constant_32
+#define __bswap_constant_32(x) \
+ ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \
+ (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
+#endif
+
+struct thread_pool;
+extern struct thread_pool *main_thread_pool;
+
+struct parser_pdata {
+ struct iio_context *ctx;
+ bool stop, verbose;
+ int fd_in, fd_out;
+
+ SLIST_HEAD(ParserDataThdHead, ThdEntry) thdlist_head;
+
+ /* Used as temporaries placements by the lexer */
+ struct iio_device *dev;
+ struct iio_channel *chn;
+ bool channel_is_output;
+ bool fd_in_is_socket, fd_out_is_socket;
+#if WITH_AIO
+ io_context_t aio_ctx;
+ int aio_eventfd;
+ pthread_mutex_t aio_mutex;
+#endif
+ struct thread_pool *pool;
+
+ ssize_t (*writefd)(struct parser_pdata *pdata, const void *buf, size_t len);
+ ssize_t (*readfd)(struct parser_pdata *pdata, void *buf, size_t len);
+};
+
+extern bool server_demux; /* Defined in iiod.c */
+
+void interpreter(struct iio_context *ctx, int fd_in, int fd_out, bool verbose,
+ bool is_socket, bool use_aio, struct thread_pool *pool);
+
+int start_usb_daemon(struct iio_context *ctx, const char *ffs,
+ bool debug, bool use_aio, unsigned int nb_pipes,
+ struct thread_pool *pool);
+
+int open_dev(struct parser_pdata *pdata, struct iio_device *dev,
+ size_t samples_count, const char *mask, bool cyclic);
+int close_dev(struct parser_pdata *pdata, struct iio_device *dev);
+
+ssize_t rw_dev(struct parser_pdata *pdata, struct iio_device *dev,
+ unsigned int nb, bool is_write);
+
+ssize_t read_dev_attr(struct parser_pdata *pdata, struct iio_device *dev,
+ const char *attr, enum iio_attr_type type);
+ssize_t write_dev_attr(struct parser_pdata *pdata, struct iio_device *dev,
+ const char *attr, size_t len, enum iio_attr_type type);
+
+ssize_t read_chn_attr(struct parser_pdata *pdata, struct iio_channel *chn,
+ const char *attr);
+ssize_t write_chn_attr(struct parser_pdata *pdata, struct iio_channel *chn,
+ const char *attr, size_t len);
+
+ssize_t get_trigger(struct parser_pdata *pdata, struct iio_device *dev);
+ssize_t set_trigger(struct parser_pdata *pdata,
+ struct iio_device *dev, const char *trig);
+
+int set_timeout(struct parser_pdata *pdata, unsigned int timeout);
+int set_buffers_count(struct parser_pdata *pdata,
+ struct iio_device *dev, long value);
+
+ssize_t read_line(struct parser_pdata *pdata, char *buf, size_t len);
+ssize_t write_all(struct parser_pdata *pdata, const void *src, size_t len);
+
+static __inline__ void output(struct parser_pdata *pdata, const char *text)
+{
+ if (write_all(pdata, text, strlen(text)) <= 0)
+ pdata->stop = true;
+}
+
+static __inline__ int poll_nointr(struct pollfd *pfd, unsigned int num_pfd)
+{
+ int ret;
+
+ do {
+ ret = poll(pfd, num_pfd, -1);
+ } while (ret == -1 && errno == EINTR);
+
+ return ret;
+}
+
+#endif /* __OPS_H__ */