blob: 2bdc82752473c4b5bc4615848c9f88634e6ef1b5 [file] [log] [blame]
Paul Cercueil2cb884a2015-11-30 15:01:25 +01001/*
2 * libiio - Library for interfacing industrial I/O (IIO) devices
3 *
4 * Copyright (C) 2015 Analog Devices, Inc.
5 * Author: Paul Cercueil <paul.cercueil@analog.com>
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 */
18
19#ifndef _IIOD_CLIENT_H
20#define _IIOD_CLIENT_H
21
Matt Fornero81f04a52017-11-30 14:36:37 -050022#include "iio-private.h"
Paul Cercueil2cb884a2015-11-30 15:01:25 +010023
24struct iio_mutex;
25struct iiod_client;
26struct iio_context_pdata;
27
28struct iiod_client_ops {
29 ssize_t (*write)(struct iio_context_pdata *pdata,
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020030 void *desc, const char *src, size_t len);
Paul Cercueil2cb884a2015-11-30 15:01:25 +010031 ssize_t (*read)(struct iio_context_pdata *pdata,
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020032 void *desc, char *dst, size_t len);
Paul Cercueil2cb884a2015-11-30 15:01:25 +010033 ssize_t (*read_line)(struct iio_context_pdata *pdata,
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020034 void *desc, char *dst, size_t len);
Paul Cercueil2cb884a2015-11-30 15:01:25 +010035};
36
37struct iiod_client * iiod_client_new(struct iio_context_pdata *pdata,
38 struct iio_mutex *lock, const struct iiod_client_ops *ops);
39void iiod_client_destroy(struct iiod_client *client);
40
Harvey Yangbc3f48e2019-10-22 11:17:28 +080041int iiod_client_request_client_id(struct iiod_client *client, void *desc);
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020042int iiod_client_get_version(struct iiod_client *client, void *desc,
Paul Cercueil2cb884a2015-11-30 15:01:25 +010043 unsigned int *major, unsigned int *minor, char *git_tag);
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020044int iiod_client_get_trigger(struct iiod_client *client, void *desc,
Paul Cercueil6a785882015-11-30 16:36:19 +010045 const struct iio_device *dev,
46 const struct iio_device **trigger);
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020047int iiod_client_set_trigger(struct iiod_client *client, void *desc,
Paul Cercueil6a785882015-11-30 16:36:19 +010048 const struct iio_device *dev, const struct iio_device *trigger);
Lars-Peter Clausen7e69ae62016-06-22 10:56:41 +020049int iiod_client_set_kernel_buffers_count(struct iiod_client *client,
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020050 void *desc, const struct iio_device *dev, unsigned int nb_blocks);
Paul Cercueil3ce60382015-12-03 12:28:48 +010051int iiod_client_set_timeout(struct iiod_client *client,
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020052 void *desc, unsigned int timeout);
53ssize_t iiod_client_read_attr(struct iiod_client *client, void *desc,
Paul Cercueil408b9672015-11-30 18:39:31 +010054 const struct iio_device *dev, const struct iio_channel *chn,
Matt Fornero81f04a52017-11-30 14:36:37 -050055 const char *attr, char *dest, size_t len, enum iio_attr_type type);
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020056ssize_t iiod_client_write_attr(struct iiod_client *client, void *desc,
Paul Cercueil408b9672015-11-30 18:39:31 +010057 const struct iio_device *dev, const struct iio_channel *chn,
Matt Fornero81f04a52017-11-30 14:36:37 -050058 const char *attr, const char *src, size_t len, enum iio_attr_type type);
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020059int iiod_client_open_unlocked(struct iiod_client *client, void *desc,
Paul Cercueilba870932015-12-01 18:17:57 +010060 const struct iio_device *dev, size_t samples_count,
61 bool cyclic);
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020062int iiod_client_close_unlocked(struct iiod_client *client, void *desc,
Paul Cercueilba870932015-12-01 18:17:57 +010063 const struct iio_device *dev);
Harvey Yangbc3f48e2019-10-22 11:17:28 +080064int iiod_client_register_client_id(struct iiod_client *client, void *desc,
65 int client_id);
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020066ssize_t iiod_client_read_unlocked(struct iiod_client *client, void *desc,
Paul Cercueil1f75a8f2015-12-02 11:51:14 +010067 const struct iio_device *dev, void *dst, size_t len,
68 uint32_t *mask, size_t words);
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020069ssize_t iiod_client_write_unlocked(struct iiod_client *client, void *desc,
Paul Cercueil90fd85c2015-12-02 17:57:07 +010070 const struct iio_device *dev, const void *src, size_t len);
Paul Cercueil8fd10d22015-12-01 11:15:36 +010071struct iio_context * iiod_client_create_context(
Lars-Peter Clausen2767d4d2016-06-23 14:19:02 +020072 struct iiod_client *client, void *desc);
Paul Cercueil2cb884a2015-11-30 15:01:25 +010073
74#endif /* _IIOD_CLIENT_H */