8#ifndef __IIO_BACKEND_H__
9#define __IIO_BACKEND_H__
14#define __api __iio_api
16#define __api_export_if(x) ___api_export_if(x)
17#define ___api_export_if(x) ___api_export_if_##x
18#define ___api_export_if_0
19#define ___api_export_if_1 __iio_api_export
38#define inline __inline
39#define iio_sscanf sscanf_s
41#define iio_sscanf sscanf
44#define IIO_ARRAY_SIZE(x) (sizeof(x) ? sizeof(x) / sizeof((x)[0]) : 0)
51typedef uint64_t (*iio_get_ticks_us)(void);
57struct iio_block_pdata;
58struct iio_buffer_pdata;
59struct iio_context_pdata;
60struct iio_device_pdata;
61struct iio_scan_element;
62struct iio_channel_pdata;
63struct iio_event_stream_pdata;
65enum iio_backend_api_ver {
66 IIO_BACKEND_API_V1 = 1,
70 IIO_ATTR_TYPE_DEVICE = 0,
72 IIO_ATTR_TYPE_DEVICE_EVENT,
74 IIO_ATTR_TYPE_CHANNEL,
75 IIO_ATTR_TYPE_CHANNEL_EVENT,
76 IIO_ATTR_TYPE_CONTEXT,
79#define CHN_ATTRLIST_IDX(type) (type - IIO_ATTR_TYPE_CHANNEL)
90 enum iio_attr_type type;
100 ssize_t (*read_attr)(
const struct iio_attr *attr,
char *dst,
size_t len);
101 ssize_t (*write_attr)(
const struct iio_attr *attr,
const char *src,
size_t len);
108 int (*get_version)(
const struct iio_context *ctx,
unsigned int *major,
unsigned int *minor,
109 unsigned int *patch,
char git_tag[8]);
111 int (*set_timeout)(
struct iio_context *ctx,
int timeout);
113 struct iio_buffer_pdata *(*open_buffer)(
const struct iio_device *dev,
unsigned int idx,
114 struct iio_channels_mask *mask);
115 void (*close_buffer)(
struct iio_buffer_pdata *pdata);
116 int (*enable_buffer)(
struct iio_buffer_pdata *pdata,
size_t nb_samples,
bool enable,
118 void (*cancel_buffer)(
struct iio_buffer_pdata *pdata);
120 ssize_t (*readbuf)(
struct iio_buffer_pdata *pdata,
void *dst,
size_t len);
121 ssize_t (*writebuf)(
struct iio_buffer_pdata *pdata,
const void *src,
size_t len);
123 struct iio_block_pdata *(*create_block)(
124 struct iio_buffer_pdata *pdata,
size_t size,
void **data);
125 void (*free_block)(
struct iio_block_pdata *pdata);
127 int (*enqueue_block)(
struct iio_block_pdata *pdata,
size_t bytes_used,
bool cyclic);
128 int (*dequeue_block)(
struct iio_block_pdata *pdata,
bool nonblock);
130 int (*get_dmabuf_fd)(
struct iio_block_pdata *pdata);
131 int (*disable_cpu_access)(
struct iio_block_pdata *pdata,
bool disable);
133 struct iio_event_stream_pdata *(*open_ev)(
const struct iio_device *dev);
134 void (*close_ev)(
struct iio_event_stream_pdata *pdata);
135 int (*read_ev)(
struct iio_event_stream_pdata *pdata,
struct iio_event *out_event,
139 int (*reg_read)(
const struct iio_device *dev, uint32_t address, uint32_t *value);
140 int (*reg_write)(
const struct iio_device *dev, uint32_t address, uint32_t value);
143 int (*refresh_format)(
const struct iio_channel *chn);
157 unsigned int api_version;
159 const char *uri_prefix;
161 unsigned int default_timeout_ms;
169extern const struct iio_backend iio_external_backend;
172 const struct iio_backend *backend,
const char *description,
unsigned int major,
173 unsigned int minor,
unsigned int patch,
const char *git_tag);
175__api
struct iio_device *iio_context_add_device(
176 struct iio_context *ctx,
const char *
id,
const char *name,
const char *label);
179 const char *name,
const char *label,
bool output,
bool scan_element,
184__api
int iio_context_add_attr(
struct iio_context *ctx,
const char *key,
const char *value);
185__api
int iio_device_add_attr(
struct iio_device *dev,
const char *name,
enum iio_attr_type type);
187__api
int iio_buffer_add_attr(
struct iio_buffer *buf,
const char *name);
189__api
void iio_buffer_set_direction(
struct iio_buffer *buf,
const char *direction);
191__api
int iio_buffer_add_scan_element(
194__api
int iio_parse_format_string(
const char *fmt_str,
struct iio_data_format *fmt);
196__api
int iio_channel_add_attr(
struct iio_channel *chn,
const char *name,
enum iio_attr_type type,
197 const char *filename);
199__api
struct iio_context_pdata *iio_context_get_pdata(
const struct iio_context *ctx);
201__api
void iio_context_set_pdata(
struct iio_context *ctx,
struct iio_context_pdata *data);
203__api
struct iio_device_pdata *iio_device_get_pdata(
const struct iio_device *dev);
205__api
void iio_device_set_pdata(
struct iio_device *dev,
struct iio_device_pdata *data);
207__api
struct iio_channel_pdata *iio_channel_get_pdata(
const struct iio_channel *chn);
209__api
void iio_channel_set_pdata(
struct iio_channel *chn,
struct iio_channel_pdata *data);
211__api
int iio_scan_add_result(
struct iio_scan *ctx,
const char *desc,
const char *uri);
213#if defined(__MINGW32__)
214#define __iio_printf __attribute__((__format__(gnu_printf, 3, 4)))
215#elif defined(__GNUC__)
216#define __iio_printf __attribute__((__format__(printf, 3, 4)))
221__api __iio_printf ssize_t iio_snprintf(
char *buf,
size_t len,
const char *fmt, ...);
222__api
char *iio_strdup(
const char *str);
223__api
size_t iio_strlcpy(
char *__restrict dst,
const char *__restrict src,
size_t dsize);
224__api FILE *iio_fopen(
const char *path,
const char *mode);
227 const char *uri,
const struct iio_backend *backend,
const char *description,
228 const char **ctx_attr,
const char **ctx_values,
unsigned int nb_ctx_attrs);
235__api
void iio_register_get_ticks_us_cb(iio_get_ticks_us cb);
238static inline void *zalloc(
size_t size)
240 return calloc(1, size);
243static inline const struct iio_device *iio_attr_get_device(
const struct iio_attr *attr)
245 switch (attr->type) {
246 case IIO_ATTR_TYPE_CONTEXT:
248 case IIO_ATTR_TYPE_CHANNEL:
249 case IIO_ATTR_TYPE_CHANNEL_EVENT:
251 case IIO_ATTR_TYPE_BUFFER:
254 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.
const struct iio_device * iio_channel_get_device(const struct iio_channel *chn)
Retrieve a pointer to the iio_device structure.
Structure holding meta-data for an attribute.
Definition iio-backend.h:88
Definition iio-backend.h:95
Definition iio-backend.h:156
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:173
Contains the representation of an IIO context.
Represents a device in the IIO context.
Represents a IIO event.
Definition iio.h:1437
Structure holding scanning information.
Definition iio-backend.h:81