8#ifndef __IIO_BACKEND_H__
9#define __IIO_BACKEND_H__
15#define __api __iio_api
17#define __api_export_if(x) ___api_export_if(x)
18#define ___api_export_if(x) ___api_export_if_##x
19#define ___api_export_if_0
20#define ___api_export_if_1 __iio_api_export
39#define inline __inline
40#define iio_sscanf sscanf_s
42#define iio_sscanf sscanf
45#define IIO_ARRAY_SIZE(x) (sizeof(x) ? sizeof(x) / sizeof((x)[0]) : 0)
51typedef unsigned int (*iio_get_ticks_us)(void);
57struct iio_block_pdata;
58struct iio_buffer_pdata;
59struct iio_context_pdata;
60struct iio_device_pdata;
61struct iio_channel_pdata;
62struct iio_event_stream_pdata;
64enum iio_backend_api_ver {
65 IIO_BACKEND_API_V1 = 1,
69 IIO_ATTR_TYPE_DEVICE = 0,
72 IIO_ATTR_TYPE_CHANNEL,
73 IIO_ATTR_TYPE_CONTEXT,
84 union iio_pointer iio;
85 enum iio_attr_type type;
90struct iio_backend_ops {
92 struct iio_scan *ctx,
const char *args);
96 ssize_t (*read_attr)(
const struct iio_attr *attr,
97 char *dst,
size_t len);
98 ssize_t (*write_attr)(
const struct iio_attr *attr,
99 const char *src,
size_t len);
102 int (*set_trigger)(
const struct iio_device *dev,
107 int (*get_version)(
const struct iio_context *ctx,
unsigned int *major,
108 unsigned int *minor,
char git_tag[8]);
110 int (*set_timeout)(
struct iio_context *ctx,
unsigned int timeout);
112 struct iio_buffer_pdata *(*open_buffer)(
const struct iio_device *dev,
114 struct iio_channels_mask *mask);
115 void (*close_buffer)(
struct iio_buffer_pdata *pdata);
116 int (*enable_buffer)(
struct iio_buffer_pdata *pdata,
117 size_t nb_samples,
bool enable,
bool cyclic);
118 void (*cancel_buffer)(
struct iio_buffer_pdata *pdata);
120 ssize_t (*readbuf)(
struct iio_buffer_pdata *pdata,
121 void *dst,
size_t len);
122 ssize_t (*writebuf)(
struct iio_buffer_pdata *pdata,
123 const void *src,
size_t len);
125 struct iio_block_pdata *(*create_block)(
struct iio_buffer_pdata *pdata,
126 size_t size,
void **data);
127 void (*free_block)(
struct iio_block_pdata *pdata);
129 int (*enqueue_block)(
struct iio_block_pdata *pdata,
130 size_t bytes_used,
bool cyclic);
131 int (*dequeue_block)(
struct iio_block_pdata *pdata,
bool nonblock);
133 int (*get_dmabuf_fd)(
struct iio_block_pdata *pdata);
134 int (*disable_cpu_access)(
struct iio_block_pdata *pdata,
bool disable);
136 struct iio_event_stream_pdata *(*open_ev)(
const struct iio_device *dev);
137 void (*close_ev)(
struct iio_event_stream_pdata *pdata);
138 int (*read_ev)(
struct iio_event_stream_pdata *pdata,
143 int (*reg_read)(
const struct iio_device *dev, uint32_t address, uint32_t *value);
144 int (*reg_write)(
const struct iio_device *dev, uint32_t address, uint32_t value);
155 unsigned int api_version;
157 const char *uri_prefix;
158 const struct iio_backend_ops *ops;
159 unsigned int default_timeout_ms;
167extern const struct iio_backend iio_external_backend;
171 const struct iio_backend *backend,
172 const char *description,
unsigned int minor,
173 unsigned int major,
const char *git_tag);
177 const char *
id,
const char *name,
const char *label);
180iio_device_add_channel(
struct iio_device *dev,
long index,
181 const char *
id,
const char *name,
const char *label,
182 bool output,
bool scan_element,
186iio_device_add_buffer(
struct iio_device *dev,
unsigned int idx);
190 const char *key,
const char *value);
193 const char *name,
enum iio_attr_type type);
196iio_buffer_add_attr(
struct iio_buffer *buf,
const char *name);
199iio_buffer_set_direction(
struct iio_buffer *buf,
const char *direction);
203 const char *name,
const char *filename);
205__api
struct iio_context_pdata *
206iio_context_get_pdata(
const struct iio_context *ctx);
209iio_context_set_pdata(
struct iio_context *ctx,
struct iio_context_pdata *data);
211__api
struct iio_device_pdata *
212iio_device_get_pdata(
const struct iio_device *dev);
215iio_device_set_pdata(
struct iio_device *dev,
struct iio_device_pdata *data);
217__api
struct iio_channel_pdata *
218iio_channel_get_pdata(
const struct iio_channel *chn);
221iio_channel_set_pdata(
struct iio_channel *chn,
struct iio_channel_pdata *data);
224iio_scan_add_result(
struct iio_scan *ctx,
const char *desc,
const char *uri);
226#if defined(__MINGW32__)
227# define __iio_printf __attribute__((__format__(gnu_printf, 3, 4)))
228#elif defined(__GNUC__)
229# define __iio_printf __attribute__((__format__(printf, 3, 4)))
234__api __iio_printf ssize_t
235iio_snprintf(
char *buf,
size_t len,
const char *fmt, ...);
236__api
char *iio_strdup(
const char *str);
237__api
size_t iio_strlcpy(
char * __restrict dst,
const char * __restrict src,
size_t dsize);
241 const char *uri,
const struct iio_backend *backend,
242 const char *description,
const char **ctx_attr,
243 const char **ctx_values,
unsigned int nb_ctx_attrs);
251iio_register_get_ticks_us_cb(iio_get_ticks_us cb);
254static inline void *zalloc(
size_t size)
256 return calloc(1, size);
260iio_attr_get_device(
const struct iio_attr *attr)
262 switch (attr->type) {
263 case IIO_ATTR_TYPE_CONTEXT:
265 case IIO_ATTR_TYPE_CHANNEL:
267 case IIO_ATTR_TYPE_BUFFER:
270 return attr->iio.dev;
const struct iio_device * iio_buffer_get_device(const struct iio_buffer *buf)
Retrieve a pointer to the iio_device structure.
Definition buffer.c:50
const struct iio_device * iio_channel_get_device(const struct iio_channel *chn)
Retrieve a pointer to the iio_device structure.
Definition channel.c:708
struct iio_scan * iio_scan(const struct iio_context_params *params, const char *backends)
Scan backends for IIO contexts.
Definition scan.c:21
Structure holding meta-data for an attribute.
Definition iio-backend.h:83
An input or output buffer, used to read or write samples.
Represents an input or output channel of a device.
IIO context creation information.
Definition iio.h:167
Contains the representation of an IIO context.
Represents a device in the IIO context.
Represents a IIO event.
Definition iio.h:1474