blob: b9d78a0d3ef042ee9d210d21e89a85dd8d75252f [file] [log] [blame]
Enrico Granata19d88802019-04-29 16:28:35 -07001/*
2 * libiio - Library for interfacing industrial I/O (IIO) devices
3 *
4 * Copyright (C) 2014 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/** @file iio.h
20 * @brief Public interface */
21
22#ifndef __IIO_H__
23#define __IIO_H__
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29#include <limits.h>
30#include <stdint.h>
31#include <stdlib.h>
32#include <stddef.h>
33
34#if (defined(_WIN32) || defined(__MBED__))
35#ifndef _SSIZE_T_DEFINED
36typedef ptrdiff_t ssize_t;
37#define _SSIZE_T_DEFINED
38#endif
39#else
40#include <sys/types.h>
41#endif
42
43#if defined(_MSC_VER) && (_MSC_VER < 1800) && !defined(__BOOL_DEFINED)
44#undef bool
45#undef false
46#undef true
47#define bool char
48#define false 0
49#define true 1
50#else
51#include <stdbool.h>
52#endif
53
54#if defined(__GNUC__) && !defined(MATLAB_MEX_FILE) && !defined(MATLAB_LOADLIBRARY)
55#ifndef __cnst
56#define __cnst __attribute__((const))
57#endif
58#ifndef __pure
59#define __pure __attribute__((pure))
60#endif
61#define __notused __attribute__((unused))
62#else
63#define __cnst
64#define __pure
65#define __notused
66#endif
67
68#ifdef _WIN32
69# ifdef LIBIIO_EXPORTS
70# define __api __declspec(dllexport)
71# else
72# define __api __declspec(dllimport)
73# endif
74#elif __GNUC__ >= 4 && !defined(MATLAB_MEX_FILE) && !defined(MATLAB_LOADLIBRARY)
75# define __api __attribute__((visibility ("default")))
76#else
77# define __api
78#endif
79
80struct iio_context;
81struct iio_device;
82struct iio_channel;
83struct iio_buffer;
84
85struct iio_context_info;
86struct iio_scan_context;
87
88/**
89 * @enum iio_chan_type
90 * @brief IIO channel type
91 *
92 * A IIO channel has a type specifying the type of data associated with the
93 * channel.
94 */
95enum iio_chan_type {
96 IIO_VOLTAGE,
97 IIO_CURRENT,
98 IIO_POWER,
99 IIO_ACCEL,
100 IIO_ANGL_VEL,
101 IIO_MAGN,
102 IIO_LIGHT,
103 IIO_INTENSITY,
104 IIO_PROXIMITY,
105 IIO_TEMP,
106 IIO_INCLI,
107 IIO_ROT,
108 IIO_ANGL,
109 IIO_TIMESTAMP,
110 IIO_CAPACITANCE,
111 IIO_ALTVOLTAGE,
112 IIO_CCT,
113 IIO_PRESSURE,
114 IIO_HUMIDITYRELATIVE,
115 IIO_ACTIVITY,
116 IIO_STEPS,
117 IIO_ENERGY,
118 IIO_DISTANCE,
119 IIO_VELOCITY,
120 IIO_CONCENTRATION,
121 IIO_RESISTANCE,
122 IIO_PH,
123 IIO_UVINDEX,
124 IIO_ELECTRICALCONDUCTIVITY,
125 IIO_COUNT,
126 IIO_INDEX,
127 IIO_GRAVITY,
128 IIO_CHAN_TYPE_UNKNOWN = INT_MAX
129};
130
131/**
132 * @enum iio_modifier
133 * @brief IIO channel modifier
134 *
135 * In a addition to a type a IIO channel can optionally have a channel modifier
136 * further specifying the data type of of the channel.
137 */
138enum iio_modifier {
139 IIO_NO_MOD,
140 IIO_MOD_X,
141 IIO_MOD_Y,
142 IIO_MOD_Z,
143 IIO_MOD_X_AND_Y,
144 IIO_MOD_X_AND_Z,
145 IIO_MOD_Y_AND_Z,
146 IIO_MOD_X_AND_Y_AND_Z,
147 IIO_MOD_X_OR_Y,
148 IIO_MOD_X_OR_Z,
149 IIO_MOD_Y_OR_Z,
150 IIO_MOD_X_OR_Y_OR_Z,
151 IIO_MOD_LIGHT_BOTH,
152 IIO_MOD_LIGHT_IR,
153 IIO_MOD_ROOT_SUM_SQUARED_X_Y,
154 IIO_MOD_SUM_SQUARED_X_Y_Z,
155 IIO_MOD_LIGHT_CLEAR,
156 IIO_MOD_LIGHT_RED,
157 IIO_MOD_LIGHT_GREEN,
158 IIO_MOD_LIGHT_BLUE,
159 IIO_MOD_QUATERNION,
160 IIO_MOD_TEMP_AMBIENT,
161 IIO_MOD_TEMP_OBJECT,
162 IIO_MOD_NORTH_MAGN,
163 IIO_MOD_NORTH_TRUE,
164 IIO_MOD_NORTH_MAGN_TILT_COMP,
165 IIO_MOD_NORTH_TRUE_TILT_COMP,
166 IIO_MOD_RUNNING,
167 IIO_MOD_JOGGING,
168 IIO_MOD_WALKING,
169 IIO_MOD_STILL,
170 IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z,
171 IIO_MOD_I,
172 IIO_MOD_Q,
173 IIO_MOD_CO2,
174 IIO_MOD_VOC,
175 IIO_MOD_LIGHT_UV,
176};
177
178/* ---------------------------------------------------------------------------*/
179/* ------------------------- Scan functions ----------------------------------*/
180/** @defgroup Scan Functions for scanning available contexts
181 * @{
182 * @struct iio_scan_context
183 * @brief The scanning context
184 *
185 * @struct iio_context_info
186 * @brief The information related to a discovered context
187 */
188
189
190/** @brief Create a scan context
191 * @param backend A NULL-terminated string containing the backend to use for
192 * scanning. If NULL, all the available backends are used.
193 * @param flags Unused for now. Set to 0.
194 * @return on success, a pointer to a iio_scan_context structure
195 * @return On failure, NULL is returned and errno is set appropriately */
196__api struct iio_scan_context * iio_create_scan_context(
197 const char *backend, unsigned int flags);
198
199
200/** @brief Destroy the given scan context
201 * @param ctx A pointer to an iio_scan_context structure
202 *
203 * <b>NOTE:</b> After that function, the iio_scan_context pointer shall be invalid. */
204__api void iio_scan_context_destroy(struct iio_scan_context *ctx);
205
206
207/** @brief Enumerate available contexts
208 * @param ctx A pointer to an iio_scan_context structure
209 * @param info A pointer to a 'const struct iio_context_info **' typed variable.
210 * The pointed variable will be initialized on success.
211 * @returns On success, the number of contexts found.
212 * @returns On failure, a negative error number.
213 */
214__api ssize_t iio_scan_context_get_info_list(struct iio_scan_context *ctx,
215 struct iio_context_info ***info);
216
217
218/** @brief Free a context info list
219 * @param info A pointer to a 'const struct iio_context_info *' typed variable
220 */
221__api void iio_context_info_list_free(struct iio_context_info **info);
222
223
224/** @brief Get a description of a discovered context
225 * @param info A pointer to an iio_context_info structure
226 * @return A pointer to a static NULL-terminated string
227 */
228__api __pure const char * iio_context_info_get_description(
229 const struct iio_context_info *info);
230
231
232/** @brief Get the URI of a discovered context
233 * @param info A pointer to an iio_context_info structure
234 * @return A pointer to a static NULL-terminated string
235 */
236__api __pure const char * iio_context_info_get_uri(
237 const struct iio_context_info *info);
238
239
240/** @} *//* ------------------------------------------------------------------*/
241/* ------------------------- Top-level functions -----------------------------*/
242/** @defgroup TopLevel Top-level functions
243 * @{ */
244
245
246/** @brief Get the version of the libiio library
247 * @param major A pointer to an unsigned integer (NULL accepted)
248 * @param minor A pointer to an unsigned integer (NULL accepted)
249 * @param git_tag A pointer to a 8-characters buffer (NULL accepted) */
250__api void iio_library_get_version(unsigned int *major,
251 unsigned int *minor, char git_tag[8]);
252
253
254/** @brief Get a string description of an error code
255 * @param err The error code
256 * @param dst A pointer to the memory area where the NULL-terminated string
257 * corresponding to the error message will be stored
258 * @param len The available length of the memory area, in bytes */
259__api void iio_strerror(int err, char *dst, size_t len);
260
261
262/** @brief Check if the specified backend is available
263 * @param backend The name of the backend to query
264 * @return True if the backend is available, false otherwise
265 *
266 * Introduced in version 0.9. */
267__api __cnst bool iio_has_backend(const char *backend);
268
269
270/** @brief Get the number of available backends
271 * @return The number of available backends
272 *
273 * Introduced in version 0.9. */
274__api __cnst unsigned int iio_get_backends_count(void);
275
276
277/** @brief Retrieve the name of a given backend
278 * @param index The index corresponding to the attribute
279 * @return On success, a pointer to a static NULL-terminated string
280 * @return If the index is invalid, NULL is returned
281 *
282 * Introduced in version 0.9. */
283__api __cnst const char * iio_get_backend(unsigned int index);
284
285
286/** @} *//* ------------------------------------------------------------------*/
287/* ------------------------- Context functions -------------------------------*/
288/** @defgroup Context Context
289 * @{
290 * @struct iio_context
291 * @brief Contains the representation of an IIO context */
292
293
294/** @brief Create a context from local or remote IIO devices
295 * @return On success, A pointer to an iio_context structure
296 * @return On failure, NULL is returned and errno is set appropriately
297 *
298 * <b>NOTE:</b> This function will create a network context if the IIOD_REMOTE
299 * environment variable is set to the hostname where the IIOD server runs. If
300 * set to an empty string, the server will be discovered using ZeroConf.
301 * If the environment variable is not set, a local context will be created
302 * instead. */
303__api struct iio_context * iio_create_default_context(void);
304
305
306/** @brief Create a context from local IIO devices (Linux only)
307 * @return On success, A pointer to an iio_context structure
308 * @return On failure, NULL is returned and errno is set appropriately */
309__api struct iio_context * iio_create_local_context(void);
310
311
312/** @brief Create a context from a XML file
313 * @param xml_file Path to the XML file to open
314 * @return On success, A pointer to an iio_context structure
315 * @return On failure, NULL is returned and errno is set appropriately
316 *
317 * <b>NOTE:</b> The format of the XML must comply to the one returned by
318 * iio_context_get_xml. */
319__api struct iio_context * iio_create_xml_context(const char *xml_file);
320
321
322/** @brief Create a context from XML data in memory
323 * @param xml Pointer to the XML data in memory
324 * @param len Length of the XML string in memory (excluding the final \0)
325 * @return On success, A pointer to an iio_context structure
326 * @return On failure, NULL is returned and errno is set appropriately
327 *
328 * <b>NOTE:</b> The format of the XML must comply to the one returned by
329 * iio_context_get_xml */
330__api struct iio_context * iio_create_xml_context_mem(
331 const char *xml, size_t len);
332
333
334/** @brief Create a context from the network
335 * @param host Hostname, IPv4 or IPv6 address where the IIO Daemon is running
336 * @return On success, a pointer to an iio_context structure
337 * @return On failure, NULL is returned and errno is set appropriately */
338__api struct iio_context * iio_create_network_context(const char *host);
339
340
341/** @brief Create a context from a URI description
342 * @param uri A URI describing the context location
343 * @return On success, a pointer to a iio_context structure
344 * @return On failure, NULL is returned and errno is set appropriately */
345__api struct iio_context * iio_create_context_from_uri(const char *uri);
346
347
348/** @brief Duplicate a pre-existing IIO context
349 * @param ctx A pointer to an iio_context structure
350 * @return On success, A pointer to an iio_context structure
351 * @return On failure, NULL is returned and errno is set appropriately */
352__api struct iio_context * iio_context_clone(const struct iio_context *ctx);
353
354
355/** @brief Destroy the given context
356 * @param ctx A pointer to an iio_context structure
357 *
358 * <b>NOTE:</b> After that function, the iio_context pointer shall be invalid. */
359__api void iio_context_destroy(struct iio_context *ctx);
360
361
362/** @brief Get the version of the backend in use
363 * @param ctx A pointer to an iio_context structure
364 * @param major A pointer to an unsigned integer (NULL accepted)
365 * @param minor A pointer to an unsigned integer (NULL accepted)
366 * @param git_tag A pointer to a 8-characters buffer (NULL accepted)
367 * @return On success, 0 is returned
368 * @return On error, a negative errno code is returned */
369__api int iio_context_get_version(const struct iio_context *ctx,
370 unsigned int *major, unsigned int *minor, char git_tag[8]);
371
372
373/** @brief Obtain a XML representation of the given context
374 * @param ctx A pointer to an iio_context structure
375 * @return A pointer to a static NULL-terminated string */
376__api __pure const char * iio_context_get_xml(const struct iio_context *ctx);
377
378
379/** @brief Get the name of the given context
380 * @param ctx A pointer to an iio_context structure
381 * @return A pointer to a static NULL-terminated string
382 *
383 * <b>NOTE:</b>The returned string will be <b><i>local</i></b>,
384 * <b><i>xml</i></b> or <b><i>network</i></b> when the context has been
385 * created with the local, xml and network backends respectively.*/
386__api __pure const char * iio_context_get_name(const struct iio_context *ctx);
387
388
389/** @brief Get a description of the given context
390 * @param ctx A pointer to an iio_context structure
391 * @return A pointer to a static NULL-terminated string
392 *
393 * <b>NOTE:</b>The returned string will contain human-readable information about
394 * the current context. */
395__api __pure const char * iio_context_get_description(
396 const struct iio_context *ctx);
397
398
399/** @brief Get the number of context-specific attributes
400 * @param ctx A pointer to an iio_context structure
401 * @return The number of context-specific attributes
402 *
403 * Introduced in version 0.9. */
404__api __pure unsigned int iio_context_get_attrs_count(
405 const struct iio_context *ctx);
406
407
408/** @brief Retrieve the name and value of a context-specific attribute
409 * @param ctx A pointer to an iio_context structure
410 * @param index The index corresponding to the attribute
411 * @param name A pointer to a const char * pointer (NULL accepted)
412 * @param value A pointer to a const char * pointer (NULL accepted)
413 * @return On success, 0 is returned
414 * @return On error, a negative errno code is returned
415 *
416 * Introduced in version 0.9. */
417__api int iio_context_get_attr(
418 const struct iio_context *ctx, unsigned int index,
419 const char **name, const char **value);
420
421
422/** @brief Retrieve the value of a context-specific attribute
423 * @param ctx A pointer to an iio_context structure
424 * @param name The name of the context attribute to read
425 * @return On success, a pointer to a static NULL-terminated string
426 * @return If the name does not correspond to any attribute, NULL is
427 * returned
428 *
429 * Introduced in version 0.9. */
430__api const char * iio_context_get_attr_value(
431 const struct iio_context *ctx, const char *name);
432
433
434/** @brief Enumerate the devices found in the given context
435 * @param ctx A pointer to an iio_context structure
436 * @return The number of devices found */
437__api __pure unsigned int iio_context_get_devices_count(
438 const struct iio_context *ctx);
439
440
441/** @brief Get the device present at the given index
442 * @param ctx A pointer to an iio_context structure
443 * @param index The index corresponding to the device
444 * @return On success, a pointer to an iio_device structure
445 * @return If the index is invalid, NULL is returned */
446__api __pure struct iio_device * iio_context_get_device(
447 const struct iio_context *ctx, unsigned int index);
448
449
450/** @brief Try to find a device structure by its name of ID
451 * @param ctx A pointer to an iio_context structure
452 * @param name A NULL-terminated string corresponding to the name or the ID of
453 * the device to search for
454 * @return On success, a pointer to an iio_device structure
455 * @return If the name or ID does not correspond to any known device, NULL is
456 * returned */
457__api __pure struct iio_device * iio_context_find_device(
458 const struct iio_context *ctx, const char *name);
459
460
461/** @brief Set a timeout for I/O operations
462 * @param ctx A pointer to an iio_context structure
463 * @param timeout_ms A positive integer representing the time in milliseconds
464 * after which a timeout occurs. A value of 0 is used to specify that no
465 * timeout should occur.
466 * @return On success, 0 is returned
467 * @return On error, a negative errno code is returned */
468__api int iio_context_set_timeout(
469 struct iio_context *ctx, unsigned int timeout_ms);
470
471
472/** @} *//* ------------------------------------------------------------------*/
473/* ------------------------- Device functions --------------------------------*/
474/** @defgroup Device Device
475 * @{
476 * @struct iio_device
477 * @brief Represents a device in the IIO context */
478
479
480/** @brief Retrieve a pointer to the iio_context structure
481 * @param dev A pointer to an iio_device structure
482 * @return A pointer to an iio_context structure */
483__api __pure const struct iio_context * iio_device_get_context(
484 const struct iio_device *dev);
485
486
487/** @brief Retrieve the device ID (e.g. <b><i>iio:device0</i></b>)
488 * @param dev A pointer to an iio_device structure
489 * @return A pointer to a static NULL-terminated string */
490__api __pure const char * iio_device_get_id(const struct iio_device *dev);
491
492
493/** @brief Retrieve the device name (e.g. <b><i>xadc</i></b>)
494 * @param dev A pointer to an iio_device structure
495 * @return A pointer to a static NULL-terminated string
496 *
497 * <b>NOTE:</b> if the device has no name, NULL is returned. */
498__api __pure const char * iio_device_get_name(const struct iio_device *dev);
499
500
501/** @brief Enumerate the channels of the given device
502 * @param dev A pointer to an iio_device structure
503 * @return The number of channels found */
504__api __pure unsigned int iio_device_get_channels_count(
505 const struct iio_device *dev);
506
507
508/** @brief Enumerate the device-specific attributes of the given device
509 * @param dev A pointer to an iio_device structure
510 * @return The number of device-specific attributes found */
511__api __pure unsigned int iio_device_get_attrs_count(
512 const struct iio_device *dev);
513
514/** @brief Enumerate the buffer-specific attributes of the given device
515 * @param dev A pointer to an iio_device structure
516 * @return The number of buffer-specific attributes found */
517__api __pure unsigned int iio_device_get_buffer_attrs_count(
518 const struct iio_device *dev);
519
520/** @brief Get the channel present at the given index
521 * @param dev A pointer to an iio_device structure
522 * @param index The index corresponding to the channel
523 * @return On success, a pointer to an iio_channel structure
524 * @return If the index is invalid, NULL is returned */
525__api __pure struct iio_channel * iio_device_get_channel(
526 const struct iio_device *dev, unsigned int index);
527
528
529/** @brief Get the device-specific attribute present at the given index
530 * @param dev A pointer to an iio_device structure
531 * @param index The index corresponding to the attribute
532 * @return On success, a pointer to a static NULL-terminated string
533 * @return If the index is invalid, NULL is returned */
534__api __pure const char * iio_device_get_attr(
535 const struct iio_device *dev, unsigned int index);
536
537/** @brief Get the buffer-specific attribute present at the given index
538 * @param dev A pointer to an iio_device structure
539 * @param index The index corresponding to the attribute
540 * @return On success, a pointer to a static NULL-terminated string
541 * @return If the index is invalid, NULL is returned */
542__api __pure const char * iio_device_get_buffer_attr(
543 const struct iio_device *dev, unsigned int index);
544
545/** @brief Try to find a channel structure by its name of ID
546 * @param dev A pointer to an iio_device structure
547 * @param name A NULL-terminated string corresponding to the name or the ID of
548 * the channel to search for
549 * @param output True if the searched channel is output, False otherwise
550 * @return On success, a pointer to an iio_channel structure
551 * @return If the name or ID does not correspond to any known channel of the
552 * given device, NULL is returned */
553__api __pure struct iio_channel * iio_device_find_channel(
554 const struct iio_device *dev, const char *name, bool output);
555
556
557/** @brief Try to find a device-specific attribute by its name
558 * @param dev A pointer to an iio_device structure
559 * @param name A NULL-terminated string corresponding to the name of the
560 * attribute
561 * @return On success, a pointer to a static NULL-terminated string
562 * @return If the name does not correspond to any known attribute of the given
563 * device, NULL is returned
564 *
565 * <b>NOTE:</b> This function is useful to detect the presence of an attribute.
566 * It can also be used to retrieve the name of an attribute as a pointer to a
567 * static string from a dynamically allocated string. */
568__api __pure const char * iio_device_find_attr(
569 const struct iio_device *dev, const char *name);
570
571/** @brief Try to find a buffer-specific attribute by its name
572 * @param dev A pointer to an iio_device structure
573 * @param name A NULL-terminated string corresponding to the name of the
574 * attribute
575 * @return On success, a pointer to a static NULL-terminated string
576 * @return If the name does not correspond to any known attribute of the given
577 * device, NULL is returned
578 *
579 * <b>NOTE:</b> This function is useful to detect the presence of an attribute.
580 * It can also be used to retrieve the name of an attribute as a pointer to a
581 * static string from a dynamically allocated string. */
582__api __pure const char * iio_device_find_buffer_attr(
583 const struct iio_device *dev, const char *name);
584
585/** @brief Read the content of the given device-specific attribute
586 * @param dev A pointer to an iio_device structure
587 * @param attr A NULL-terminated string corresponding to the name of the
588 * attribute
589 * @param dst A pointer to the memory area where the NULL-terminated string
590 * corresponding to the value read will be stored
591 * @param len The available length of the memory area, in bytes
592 * @return On success, the number of bytes written to the buffer
593 * @return On error, a negative errno code is returned
594 *
595 * <b>NOTE:</b>By passing NULL as the "attr" argument to iio_device_attr_read,
596 * it is now possible to read all of the attributes of a device.
597 *
598 * The buffer is filled with one block of data per attribute of the device,
599 * by the order they appear in the iio_device structure.
600 *
601 * The first four bytes of one block correspond to a 32-bit signed value in
602 * network order. If negative, it corresponds to the errno code that were
603 * returned when reading the attribute; if positive, it corresponds to the
604 * length of the data read. In that case, the rest of the block contains
605 * the data. */
606 __api ssize_t iio_device_attr_read(const struct iio_device *dev,
607 const char *attr, char *dst, size_t len);
608
609
610/** @brief Read the content of all device-specific attributes
611 * @param dev A pointer to an iio_device structure
612 * @param cb A pointer to a callback function
613 * @param data A pointer that will be passed to the callback function
614 * @return On success, 0 is returned
615 * @return On error, a negative errno code is returned
616 *
617 * <b>NOTE:</b> This function is especially useful when used with the network
618 * backend, as all the device-specific attributes are read in one single
619 * command. */
620__api int iio_device_attr_read_all(struct iio_device *dev,
621 int (*cb)(struct iio_device *dev, const char *attr,
622 const char *value, size_t len, void *d),
623 void *data);
624
625
626/** @brief Read the content of the given device-specific attribute
627 * @param dev A pointer to an iio_device structure
628 * @param attr A NULL-terminated string corresponding to the name of the
629 * attribute
630 * @param val A pointer to a bool variable where the value should be stored
631 * @return On success, 0 is returned
632 * @return On error, a negative errno code is returned */
633__api int iio_device_attr_read_bool(const struct iio_device *dev,
634 const char *attr, bool *val);
635
636
637/** @brief Read the content of the given device-specific attribute
638 * @param dev A pointer to an iio_device structure
639 * @param attr A NULL-terminated string corresponding to the name of the
640 * attribute
641 * @param val A pointer to a long long variable where the value should be stored
642 * @return On success, 0 is returned
643 * @return On error, a negative errno code is returned */
644__api int iio_device_attr_read_longlong(const struct iio_device *dev,
645 const char *attr, long long *val);
646
647
648/** @brief Read the content of the given device-specific attribute
649 * @param dev A pointer to an iio_device structure
650 * @param attr A NULL-terminated string corresponding to the name of the
651 * attribute
652 * @param val A pointer to a double variable where the value should be stored
653 * @return On success, 0 is returned
654 * @return On error, a negative errno code is returned */
655__api int iio_device_attr_read_double(const struct iio_device *dev,
656 const char *attr, double *val);
657
658
659/** @brief Set the value of the given device-specific attribute
660 * @param dev A pointer to an iio_device structure
661 * @param attr A NULL-terminated string corresponding to the name of the
662 * attribute
663 * @param src A NULL-terminated string to set the attribute to
664 * @return On success, the number of bytes written
665 * @return On error, a negative errno code is returned
666 *
667 * <b>NOTE:</b>By passing NULL as the "attr" argument to iio_device_attr_write,
668 * it is now possible to write all of the attributes of a device.
669 *
670 * The buffer must contain one block of data per attribute of the device,
671 * by the order they appear in the iio_device structure.
672 *
673 * The first four bytes of one block correspond to a 32-bit signed value in
674 * network order. If negative, the attribute is not written; if positive,
675 * it corresponds to the length of the data to write. In that case, the rest
676 * of the block must contain the data. */
677__api ssize_t iio_device_attr_write(const struct iio_device *dev,
678 const char *attr, const char *src);
679
680
681/** @brief Set the value of the given device-specific attribute
682 * @param dev A pointer to an iio_device structure
683 * @param attr A NULL-terminated string corresponding to the name of the
684 * attribute
685 * @param src A pointer to the data to be written
686 * @param len The number of bytes that should be written
687 * @return On success, the number of bytes written
688 * @return On error, a negative errno code is returned */
689__api ssize_t iio_device_attr_write_raw(const struct iio_device *dev,
690 const char *attr, const void *src, size_t len);
691
692
693/** @brief Set the values of all device-specific attributes
694 * @param dev A pointer to an iio_device structure
695 * @param cb A pointer to a callback function
696 * @param data A pointer that will be passed to the callback function
697 * @return On success, 0 is returned
698 * @return On error, a negative errno code is returned
699 *
700 * <b>NOTE:</b> This function is especially useful when used with the network
701 * backend, as all the device-specific attributes are written in one single
702 * command. */
703__api int iio_device_attr_write_all(struct iio_device *dev,
704 ssize_t (*cb)(struct iio_device *dev,
705 const char *attr, void *buf, size_t len, void *d),
706 void *data);
707
708
709/** @brief Set the value of the given device-specific attribute
710 * @param dev A pointer to an iio_device structure
711 * @param attr A NULL-terminated string corresponding to the name of the
712 * attribute
713 * @param val A bool value to set the attribute to
714 * @return On success, 0 is returned
715 * @return On error, a negative errno code is returned */
716__api int iio_device_attr_write_bool(const struct iio_device *dev,
717 const char *attr, bool val);
718
719
720/** @brief Set the value of the given device-specific attribute
721 * @param dev A pointer to an iio_device structure
722 * @param attr A NULL-terminated string corresponding to the name of the
723 * attribute
724 * @param val A long long value to set the attribute to
725 * @return On success, 0 is returned
726 * @return On error, a negative errno code is returned */
727__api int iio_device_attr_write_longlong(const struct iio_device *dev,
728 const char *attr, long long val);
729
730
731/** @brief Set the value of the given device-specific attribute
732 * @param dev A pointer to an iio_device structure
733 * @param attr A NULL-terminated string corresponding to the name of the
734 * attribute
735 * @param val A double value to set the attribute to
736 * @return On success, 0 is returned
737 * @return On error, a negative errno code is returned */
738__api int iio_device_attr_write_double(const struct iio_device *dev,
739 const char *attr, double val);
740
741/** @brief Read the content of the given buffer-specific attribute
742 * @param dev A pointer to an iio_device structure
743 * @param attr A NULL-terminated string corresponding to the name of the
744 * attribute
745 * @param dst A pointer to the memory area where the NULL-terminated string
746 * corresponding to the value read will be stored
747 * @param len The available length of the memory area, in bytes
748 * @return On success, the number of bytes written to the buffer
749 * @return On error, a negative errno code is returned
750 *
751 * <b>NOTE:</b>By passing NULL as the "attr" argument to
752 * iio_device_buffer_attr_read, it is now possible to read all of the attributes
753 * of a device.
754 *
755 * The buffer is filled with one block of data per attribute of the buffer,
756 * by the order they appear in the iio_device structure.
757 *
758 * The first four bytes of one block correspond to a 32-bit signed value in
759 * network order. If negative, it corresponds to the errno code that were
760 * returned when reading the attribute; if positive, it corresponds to the
761 * length of the data read. In that case, the rest of the block contains
762 * the data. */
763 __api ssize_t iio_device_buffer_attr_read(const struct iio_device *dev,
764 const char *attr, char *dst, size_t len);
765
766/** @brief Read the content of all buffer-specific attributes
767 * @param dev A pointer to an iio_device structure
768 * @param cb A pointer to a callback function
769 * @param data A pointer that will be passed to the callback function
770 * @return On success, 0 is returned
771 * @return On error, a negative errno code is returned
772 *
773 * <b>NOTE:</b> This function is especially useful when used with the network
774 * backend, as all the buffer-specific attributes are read in one single
775 * command. */
776__api int iio_device_buffer_attr_read_all(struct iio_device *dev,
777 int (*cb)(struct iio_device *dev, const char *attr,
778 const char *value, size_t len, void *d),
779 void *data);
780
781
782/** @brief Read the content of the given buffer-specific attribute
783 * @param dev A pointer to an iio_device structure
784 * @param attr A NULL-terminated string corresponding to the name of the
785 * attribute
786 * @param val A pointer to a bool variable where the value should be stored
787 * @return On success, 0 is returned
788 * @return On error, a negative errno code is returned */
789__api int iio_device_buffer_attr_read_bool(const struct iio_device *dev,
790 const char *attr, bool *val);
791
792
793/** @brief Read the content of the given buffer-specific attribute
794 * @param dev A pointer to an iio_device structure
795 * @param attr A NULL-terminated string corresponding to the name of the
796 * attribute
797 * @param val A pointer to a long long variable where the value should be stored
798 * @return On success, 0 is returned
799 * @return On error, a negative errno code is returned */
800__api int iio_device_buffer_attr_read_longlong(const struct iio_device *dev,
801 const char *attr, long long *val);
802
803
804/** @brief Read the content of the given buffer-specific attribute
805 * @param dev A pointer to an iio_device structure
806 * @param attr A NULL-terminated string corresponding to the name of the
807 * attribute
808 * @param val A pointer to a double variable where the value should be stored
809 * @return On success, 0 is returned
810 * @return On error, a negative errno code is returned */
811__api int iio_device_buffer_attr_read_double(const struct iio_device *dev,
812 const char *attr, double *val);
813
814
815/** @brief Set the value of the given buffer-specific attribute
816 * @param dev A pointer to an iio_device structure
817 * @param attr A NULL-terminated string corresponding to the name of the
818 * attribute
819 * @param src A NULL-terminated string to set the attribute to
820 * @return On success, the number of bytes written
821 * @return On error, a negative errno code is returned
822 *
823 * <b>NOTE:</b>By passing NULL as the "attr" argument to
824 * iio_device_buffer_attr_write, it is now possible to write all of the
825 * attributes of a device.
826 *
827 * The buffer must contain one block of data per attribute of the buffer,
828 * by the order they appear in the iio_device structure.
829 *
830 * The first four bytes of one block correspond to a 32-bit signed value in
831 * network order. If negative, the attribute is not written; if positive,
832 * it corresponds to the length of the data to write. In that case, the rest
833 * of the block must contain the data. */
834__api ssize_t iio_device_buffer_attr_write(const struct iio_device *dev,
835 const char *attr, const char *src);
836
837
838/** @brief Set the value of the given buffer-specific attribute
839 * @param dev A pointer to an iio_device structure
840 * @param attr A NULL-terminated string corresponding to the name of the
841 * attribute
842 * @param src A pointer to the data to be written
843 * @param len The number of bytes that should be written
844 * @return On success, the number of bytes written
845 * @return On error, a negative errno code is returned */
846__api ssize_t iio_device_buffer_attr_write_raw(const struct iio_device *dev,
847 const char *attr, const void *src, size_t len);
848
849
850/** @brief Set the values of all buffer-specific attributes
851 * @param dev A pointer to an iio_device structure
852 * @param cb A pointer to a callback function
853 * @param data A pointer that will be passed to the callback function
854 * @return On success, 0 is returned
855 * @return On error, a negative errno code is returned
856 *
857 * <b>NOTE:</b> This function is especially useful when used with the network
858 * backend, as all the buffer-specific attributes are written in one single
859 * command. */
860__api int iio_device_buffer_attr_write_all(struct iio_device *dev,
861 ssize_t (*cb)(struct iio_device *dev,
862 const char *attr, void *buf, size_t len, void *d),
863 void *data);
864
865
866/** @brief Set the value of the given buffer-specific attribute
867 * @param dev A pointer to an iio_device structure
868 * @param attr A NULL-terminated string corresponding to the name of the
869 * attribute
870 * @param val A bool value to set the attribute to
871 * @return On success, 0 is returned
872 * @return On error, a negative errno code is returned */
873__api int iio_device_buffer_attr_write_bool(const struct iio_device *dev,
874 const char *attr, bool val);
875
876
877/** @brief Set the value of the given buffer-specific attribute
878 * @param dev A pointer to an iio_device structure
879 * @param attr A NULL-terminated string corresponding to the name of the
880 * attribute
881 * @param val A long long value to set the attribute to
882 * @return On success, 0 is returned
883 * @return On error, a negative errno code is returned */
884__api int iio_device_buffer_attr_write_longlong(const struct iio_device *dev,
885 const char *attr, long long val);
886
887
888/** @brief Set the value of the given buffer-specific attribute
889 * @param dev A pointer to an iio_device structure
890 * @param attr A NULL-terminated string corresponding to the name of the
891 * attribute
892 * @param val A double value to set the attribute to
893 * @return On success, 0 is returned
894 * @return On error, a negative errno code is returned */
895__api int iio_device_buffer_attr_write_double(const struct iio_device *dev,
896 const char *attr, double val);
897
898
899/** @brief Associate a pointer to an iio_device structure
900 * @param dev A pointer to an iio_device structure
901 * @param data The pointer to be associated */
902__api void iio_device_set_data(struct iio_device *dev, void *data);
903
904
905/** @brief Retrieve a previously associated pointer of an iio_device structure
906 * @param dev A pointer to an iio_device structure
907 * @return The pointer previously associated if present, or NULL */
908__api void * iio_device_get_data(const struct iio_device *dev);
909
910
911/** @brief Retrieve the trigger of a given device
912 * @param dev A pointer to an iio_device structure
913 * @param trigger a pointer to a pointer of an iio_device structure. The pointed
914 * pointer will be set to the address of the iio_device structure corresponding
915 * to the associated trigger device.
916 * @return On success, 0 is returned
917 * @return On error, a negative errno code is returned */
918__api int iio_device_get_trigger(const struct iio_device *dev,
919 const struct iio_device **trigger);
920
921
922/** @brief Associate a trigger to a given device
923 * @param dev A pointer to an iio_device structure
924 * @param trigger a pointer to the iio_device structure corresponding to the
925 * trigger that should be associated.
926 * @return On success, 0 is returned
927 * @return On error, a negative errno code is returned */
928__api int iio_device_set_trigger(const struct iio_device *dev,
929 const struct iio_device *trigger);
930
931
932/** @brief Return True if the given device is a trigger
933 * @param dev A pointer to an iio_device structure
934 * @return True if the device is a trigger, False otherwise */
935__api __pure bool iio_device_is_trigger(const struct iio_device *dev);
936
937/**
938 * @brief Configure the number of kernel buffers for a device
939 *
940 * This function allows to change the number of buffers on kernel side.
941 * @param dev A pointer to an iio_device structure
942 * @param nb_buffers The number of buffers
943 * @return On success, 0 is returned
944 * @return On error, a negative errno code is returned */
945__api int iio_device_set_kernel_buffers_count(const struct iio_device *dev,
946 unsigned int nb_buffers);
947
948/** @} *//* ------------------------------------------------------------------*/
949/* ------------------------- Channel functions -------------------------------*/
950/** @defgroup Channel Channel
951 * @{
952 * @struct iio_channel
953 * @brief Represents an input or output channel of a device */
954
955
956/** @brief Retrieve a pointer to the iio_device structure
957 * @param chn A pointer to an iio_channel structure
958 * @return A pointer to an iio_device structure */
959__api __pure const struct iio_device * iio_channel_get_device(
960 const struct iio_channel *chn);
961
962
963/** @brief Retrieve the channel ID (e.g. <b><i>voltage0</i></b>)
964 * @param chn A pointer to an iio_channel structure
965 * @return A pointer to a static NULL-terminated string */
966__api __pure const char * iio_channel_get_id(const struct iio_channel *chn);
967
968
969/** @brief Retrieve the channel name (e.g. <b><i>vccint</i></b>)
970 * @param chn A pointer to an iio_channel structure
971 * @return A pointer to a static NULL-terminated string
972 *
973 * <b>NOTE:</b> if the channel has no name, NULL is returned. */
974__api __pure const char * iio_channel_get_name(const struct iio_channel *chn);
975
976
977/** @brief Return True if the given channel is an output channel
978 * @param chn A pointer to an iio_channel structure
979 * @return True if the channel is an output channel, False otherwise */
980__api __pure bool iio_channel_is_output(const struct iio_channel *chn);
981
982
983/** @brief Return True if the given channel is a scan element
984 * @param chn A pointer to an iio_channel structure
985 * @return True if the channel is a scan element, False otherwise
986 *
987 * <b>NOTE:</b> a channel that is a scan element is a channel that can
988 * generate samples (for an input channel) or receive samples (for an output
989 * channel) after being enabled. */
990__api __pure bool iio_channel_is_scan_element(const struct iio_channel *chn);
991
992
993/** @brief Enumerate the channel-specific attributes of the given channel
994 * @param chn A pointer to an iio_channel structure
995 * @return The number of channel-specific attributes found */
996__api __pure unsigned int iio_channel_get_attrs_count(
997 const struct iio_channel *chn);
998
999
1000/** @brief Get the channel-specific attribute present at the given index
1001 * @param chn A pointer to an iio_channel structure
1002 * @param index The index corresponding to the attribute
1003 * @return On success, a pointer to a static NULL-terminated string
1004 * @return If the index is invalid, NULL is returned */
1005__api __pure const char * iio_channel_get_attr(
1006 const struct iio_channel *chn, unsigned int index);
1007
1008
1009/** @brief Try to find a channel-specific attribute by its name
1010 * @param chn A pointer to an iio_channel structure
1011 * @param name A NULL-terminated string corresponding to the name of the
1012 * attribute
1013 * @return On success, a pointer to a static NULL-terminated string
1014 * @return If the name does not correspond to any known attribute of the given
1015 * channel, NULL is returned
1016 *
1017 * <b>NOTE:</b> This function is useful to detect the presence of an attribute.
1018 * It can also be used to retrieve the name of an attribute as a pointer to a
1019 * static string from a dynamically allocated string. */
1020__api __pure const char * iio_channel_find_attr(
1021 const struct iio_channel *chn, const char *name);
1022
1023
1024/** @brief Retrieve the filename of an attribute
1025 * @param chn A pointer to an iio_channel structure
1026 * @param attr a NULL-terminated string corresponding to the name of the
1027 * attribute
1028 * @return On success, a pointer to a static NULL-terminated string
1029 * @return If the attribute name is unknown, NULL is returned */
1030__api __pure const char * iio_channel_attr_get_filename(
1031 const struct iio_channel *chn, const char *attr);
1032
1033
1034/** @brief Read the content of the given channel-specific attribute
1035 * @param chn A pointer to an iio_channel structure
1036 * @param attr A NULL-terminated string corresponding to the name of the
1037 * attribute
1038 * @param dst A pointer to the memory area where the NULL-terminated string
1039 * corresponding to the value read will be stored
1040 * @param len The available length of the memory area, in bytes
1041 * @return On success, the number of bytes written to the buffer
1042 * @return On error, a negative errno code is returned
1043 *
1044 * <b>NOTE:</b>By passing NULL as the "attr" argument to iio_channel_attr_read,
1045 * it is now possible to read all of the attributes of a channel.
1046 *
1047 * The buffer is filled with one block of data per attribute of the channel,
1048 * by the order they appear in the iio_channel structure.
1049 *
1050 * The first four bytes of one block correspond to a 32-bit signed value in
1051 * network order. If negative, it corresponds to the errno code that were
1052 * returned when reading the attribute; if positive, it corresponds to the
1053 * length of the data read. In that case, the rest of the block contains
1054 * the data. */
1055__api ssize_t iio_channel_attr_read(const struct iio_channel *chn,
1056 const char *attr, char *dst, size_t len);
1057
1058
1059/** @brief Read the content of all channel-specific attributes
1060 * @param chn A pointer to an iio_channel structure
1061 * @param cb A pointer to a callback function
1062 * @param data A pointer that will be passed to the callback function
1063 * @return On success, 0 is returned
1064 * @return On error, a negative errno code is returned
1065 *
1066 * <b>NOTE:</b> This function is especially useful when used with the network
1067 * backend, as all the channel-specific attributes are read in one single
1068 * command. */
1069__api int iio_channel_attr_read_all(struct iio_channel *chn,
1070 int (*cb)(struct iio_channel *chn,
1071 const char *attr, const char *val, size_t len, void *d),
1072 void *data);
1073
1074
1075/** @brief Read the content of the given channel-specific attribute
1076 * @param chn A pointer to an iio_channel structure
1077 * @param attr A NULL-terminated string corresponding to the name of the
1078 * attribute
1079 * @param val A pointer to a bool variable where the value should be stored
1080 * @return On success, 0 is returned
1081 * @return On error, a negative errno code is returned */
1082__api int iio_channel_attr_read_bool(const struct iio_channel *chn,
1083 const char *attr, bool *val);
1084
1085
1086/** @brief Read the content of the given channel-specific attribute
1087 * @param chn A pointer to an iio_channel structure
1088 * @param attr A NULL-terminated string corresponding to the name of the
1089 * attribute
1090 * @param val A pointer to a long long variable where the value should be stored
1091 * @return On success, 0 is returned
1092 * @return On error, a negative errno code is returned */
1093__api int iio_channel_attr_read_longlong(const struct iio_channel *chn,
1094 const char *attr, long long *val);
1095
1096
1097/** @brief Read the content of the given channel-specific attribute
1098 * @param chn A pointer to an iio_channel structure
1099 * @param attr A NULL-terminated string corresponding to the name of the
1100 * attribute
1101 * @param val A pointer to a double variable where the value should be stored
1102 * @return On success, 0 is returned
1103 * @return On error, a negative errno code is returned */
1104__api int iio_channel_attr_read_double(const struct iio_channel *chn,
1105 const char *attr, double *val);
1106
1107
1108/** @brief Set the value of the given channel-specific attribute
1109 * @param chn A pointer to an iio_channel structure
1110 * @param attr A NULL-terminated string corresponding to the name of the
1111 * attribute
1112 * @param src A NULL-terminated string to set the attribute to
1113 * @return On success, the number of bytes written
1114 * @return On error, a negative errno code is returned
1115 *
1116 * <b>NOTE:</b>By passing NULL as the "attr" argument to iio_channel_attr_write,
1117 * it is now possible to write all of the attributes of a channel.
1118 *
1119 * The buffer must contain one block of data per attribute of the channel,
1120 * by the order they appear in the iio_channel structure.
1121 *
1122 * The first four bytes of one block correspond to a 32-bit signed value in
1123 * network order. If negative, the attribute is not written; if positive,
1124 * it corresponds to the length of the data to write. In that case, the rest
1125 * of the block must contain the data. */
1126__api ssize_t iio_channel_attr_write(const struct iio_channel *chn,
1127 const char *attr, const char *src);
1128
1129
1130/** @brief Set the value of the given channel-specific attribute
1131 * @param chn A pointer to an iio_channel structure
1132 * @param attr A NULL-terminated string corresponding to the name of the
1133 * attribute
1134 * @param src A pointer to the data to be written
1135 * @param len The number of bytes that should be written
1136 * @return On success, the number of bytes written
1137 * @return On error, a negative errno code is returned */
1138__api ssize_t iio_channel_attr_write_raw(const struct iio_channel *chn,
1139 const char *attr, const void *src, size_t len);
1140
1141
1142/** @brief Set the values of all channel-specific attributes
1143 * @param chn A pointer to an iio_channel structure
1144 * @param cb A pointer to a callback function
1145 * @param data A pointer that will be passed to the callback function
1146 * @return On success, 0 is returned
1147 * @return On error, a negative errno code is returned
1148 *
1149 * <b>NOTE:</b> This function is especially useful when used with the network
1150 * backend, as all the channel-specific attributes are written in one single
1151 * command. */
1152__api int iio_channel_attr_write_all(struct iio_channel *chn,
1153 ssize_t (*cb)(struct iio_channel *chn,
1154 const char *attr, void *buf, size_t len, void *d),
1155 void *data);
1156
1157
1158/** @brief Set the value of the given channel-specific attribute
1159 * @param chn A pointer to an iio_channel structure
1160 * @param attr A NULL-terminated string corresponding to the name of the
1161 * attribute
1162 * @param val A bool value to set the attribute to
1163 * @return On success, 0 is returned
1164 * @return On error, a negative errno code is returned */
1165__api int iio_channel_attr_write_bool(const struct iio_channel *chn,
1166 const char *attr, bool val);
1167
1168
1169/** @brief Set the value of the given channel-specific attribute
1170 * @param chn A pointer to an iio_channel structure
1171 * @param attr A NULL-terminated string corresponding to the name of the
1172 * attribute
1173 * @param val A long long value to set the attribute to
1174 * @return On success, 0 is returned
1175 * @return On error, a negative errno code is returned */
1176__api int iio_channel_attr_write_longlong(const struct iio_channel *chn,
1177 const char *attr, long long val);
1178
1179
1180/** @brief Set the value of the given channel-specific attribute
1181 * @param chn A pointer to an iio_channel structure
1182 * @param attr A NULL-terminated string corresponding to the name of the
1183 * attribute
1184 * @param val A double value to set the attribute to
1185 * @return On success, 0 is returned
1186 * @return On error, a negative errno code is returned */
1187__api int iio_channel_attr_write_double(const struct iio_channel *chn,
1188 const char *attr, double val);
1189
1190
1191/** @brief Enable the given channel
1192 * @param chn A pointer to an iio_channel structure
1193 *
1194 * <b>NOTE:</b>Before creating an iio_buffer structure with
1195 * iio_device_create_buffer, it is required to enable at least one channel of
1196 * the device to read from. */
1197__api void iio_channel_enable(struct iio_channel *chn);
1198
1199
1200/** @brief Disable the given channel
1201 * @param chn A pointer to an iio_channel structure */
1202__api void iio_channel_disable(struct iio_channel *chn);
1203
1204
1205/** @brief Returns True if the channel is enabled
1206 * @param chn A pointer to an iio_channel structure
1207 * @return True if the channel is enabled, False otherwise */
1208__api bool iio_channel_is_enabled(const struct iio_channel *chn);
1209
1210
1211/** Demultiplex the samples of a given channel
1212 * @param chn A pointer to an iio_channel structure
1213 * @param buffer A pointer to an iio_buffer structure
1214 * @param dst A pointer to the memory area where the demultiplexed data will be
1215 * stored
1216 * @param len The available length of the memory area, in bytes
1217 * @return The size of the demultiplexed data, in bytes */
1218__api size_t iio_channel_read_raw(const struct iio_channel *chn,
1219 struct iio_buffer *buffer, void *dst, size_t len);
1220
1221
1222/** Demultiplex and convert the samples of a given channel
1223 * @param chn A pointer to an iio_channel structure
1224 * @param buffer A pointer to an iio_buffer structure
1225 * @param dst A pointer to the memory area where the converted data will be
1226 * stored
1227 * @param len The available length of the memory area, in bytes
1228 * @return The size of the converted data, in bytes */
1229__api size_t iio_channel_read(const struct iio_channel *chn,
1230 struct iio_buffer *buffer, void *dst, size_t len);
1231
1232
1233/** Multiplex the samples of a given channel
1234 * @param chn A pointer to an iio_channel structure
1235 * @param buffer A pointer to an iio_buffer structure
1236 * @param src A pointer to the memory area where the sequential data will
1237 * be read from
1238 * @param len The length of the memory area, in bytes
1239 * @return The number of bytes actually multiplexed */
1240__api size_t iio_channel_write_raw(const struct iio_channel *chn,
1241 struct iio_buffer *buffer, const void *src, size_t len);
1242
1243
1244/** Convert and multiplex the samples of a given channel
1245 * @param chn A pointer to an iio_channel structure
1246 * @param buffer A pointer to an iio_buffer structure
1247 * @param src A pointer to the memory area where the sequential data will
1248 * be read from
1249 * @param len The length of the memory area, in bytes
1250 * @return The number of bytes actually converted and multiplexed */
1251__api size_t iio_channel_write(const struct iio_channel *chn,
1252 struct iio_buffer *buffer, const void *src, size_t len);
1253
1254
1255/** @brief Associate a pointer to an iio_channel structure
1256 * @param chn A pointer to an iio_channel structure
1257 * @param data The pointer to be associated */
1258__api void iio_channel_set_data(struct iio_channel *chn, void *data);
1259
1260
1261/** @brief Retrieve a previously associated pointer of an iio_channel structure
1262 * @param chn A pointer to an iio_channel structure
1263 * @return The pointer previously associated if present, or NULL */
1264__api void * iio_channel_get_data(const struct iio_channel *chn);
1265
1266
1267/** @brief Get the type of the given channel
1268 * @param chn A pointer to an iio_channel structure
1269 * @return The type of the channel */
1270__api __pure enum iio_chan_type iio_channel_get_type(
1271 const struct iio_channel *chn);
1272
1273
1274/** @brief Get the modifier type of the given channel
1275 * @param chn A pointer to an iio_channel structure
1276 * @return The modifier type of the channel */
1277__api __pure enum iio_modifier iio_channel_get_modifier(
1278 const struct iio_channel *chn);
1279
1280
1281/** @} *//* ------------------------------------------------------------------*/
1282/* ------------------------- Buffer functions --------------------------------*/
1283/** @defgroup Buffer Buffer
1284 * @{
1285 * @struct iio_buffer
1286 * @brief An input or output buffer, used to read or write samples */
1287
1288
1289/** @brief Retrieve a pointer to the iio_device structure
1290 * @param buf A pointer to an iio_buffer structure
1291 * @return A pointer to an iio_device structure */
1292__api __pure const struct iio_device * iio_buffer_get_device(
1293 const struct iio_buffer *buf);
1294
1295
1296/** @brief Create an input or output buffer associated to the given device
1297 * @param dev A pointer to an iio_device structure
1298 * @param samples_count The number of samples that the buffer should contain
1299 * @param cyclic If True, enable cyclic mode
1300 * @return On success, a pointer to an iio_buffer structure
1301 * @return On error, NULL is returned, and errno is set to the error code
1302 *
1303 * <b>NOTE:</b> Channels that have to be written to / read from must be enabled
1304 * before creating the buffer. */
1305__api struct iio_buffer * iio_device_create_buffer(const struct iio_device *dev,
1306 size_t samples_count, bool cyclic);
1307
1308
1309/** @brief Destroy the given buffer
1310 * @param buf A pointer to an iio_buffer structure
1311 *
1312 * <b>NOTE:</b> After that function, the iio_buffer pointer shall be invalid. */
1313__api void iio_buffer_destroy(struct iio_buffer *buf);
1314
1315/** @brief Get a pollable file descriptor
1316 *
1317 * Can be used to know when iio_buffer_refill() or iio_buffer_push() can be
1318 * called
1319 * @param buf A pointer to an iio_buffer structure
1320 * @return On success, valid file descriptor
1321 * @return On error, a negative errno code is returned
1322 */
1323__api int iio_buffer_get_poll_fd(struct iio_buffer *buf);
1324
1325/** @brief Make iio_buffer_refill() and iio_buffer_push() blocking or not
1326 *
1327 * After this function has been called with blocking == false,
1328 * iio_buffer_refill() and iio_buffer_push() will return -EAGAIN if no data is
1329 * ready.
1330 * A device is blocking by default.
1331 * @param buf A pointer to an iio_buffer structure
1332 * @param blocking true if the buffer API should be blocking, else false
1333 * @return On success, 0
1334 * @return On error, a negative errno code is returned
1335 */
1336__api int iio_buffer_set_blocking_mode(struct iio_buffer *buf, bool blocking);
1337
1338
1339/** @brief Fetch more samples from the hardware
1340 * @param buf A pointer to an iio_buffer structure
1341 * @return On success, the number of bytes read is returned
1342 * @return On error, a negative errno code is returned
1343 *
1344 * <b>NOTE:</b> Only valid for input buffers */
1345__api ssize_t iio_buffer_refill(struct iio_buffer *buf);
1346
1347
1348/** @brief Send the samples to the hardware
1349 * @param buf A pointer to an iio_buffer structure
1350 * @return On success, the number of bytes written is returned
1351 * @return On error, a negative errno code is returned
1352 *
1353 * <b>NOTE:</b> Only valid for output buffers */
1354__api ssize_t iio_buffer_push(struct iio_buffer *buf);
1355
1356
1357/** @brief Send a given number of samples to the hardware
1358 * @param buf A pointer to an iio_buffer structure
1359 * @param samples_count The number of samples to submit
1360 * @return On success, the number of bytes written is returned
1361 * @return On error, a negative errno code is returned
1362 *
1363 * <b>NOTE:</b> Only valid for output buffers */
1364__api ssize_t iio_buffer_push_partial(struct iio_buffer *buf,
1365 size_t samples_count);
1366
1367/** @brief Cancel all buffer operations
1368 * @param buf The buffer for which operations should be canceled
1369 *
1370 * This function cancels all outstanding buffer operations previously scheduled.
1371 * This means any pending iio_buffer_push() or iio_buffer_refill() operation
1372 * will abort and return immediately, any further invocations of these functions
1373 * on the same buffer will return immediately with an error.
1374 *
1375 * Usually iio_buffer_push() and iio_buffer_refill() will block until either all
1376 * data has been transferred or a timeout occurs. This can depending on the
1377 * configuration take a significant amount of time. iio_buffer_cancel() is
1378 * useful to bypass these conditions if the buffer operation is supposed to be
1379 * stopped in response to an external event (e.g. user input).
1380 *
1381 * To be able to capture additional data after calling this function the buffer
1382 * should be destroyed and then re-created.
1383 *
1384 * This function can be called multiple times for the same buffer, but all but
1385 * the first invocation will be without additional effect.
1386 *
1387 * This function is thread-safe, but not signal-safe, i.e. it must not be called
1388 * from a signal handler.
1389 */
1390__api void iio_buffer_cancel(struct iio_buffer *buf);
1391
1392
1393/** @brief Get the start address of the buffer
1394 * @param buf A pointer to an iio_buffer structure
1395 * @return A pointer corresponding to the start address of the buffer */
1396__api void * iio_buffer_start(const struct iio_buffer *buf);
1397
1398
1399/** @brief Find the first sample of a channel in a buffer
1400 * @param buf A pointer to an iio_buffer structure
1401 * @param chn A pointer to an iio_channel structure
1402 * @return A pointer to the first sample found, or to the end of the buffer if
1403 * no sample for the given channel is present in the buffer
1404 *
Ryo Hashimoto8fcb4fb2020-02-03 18:17:14 +09001405 * <b>NOTE:</b> This function, coupled with iio_buffer_step and iio_buffer_end,
Enrico Granata19d88802019-04-29 16:28:35 -07001406 * can be used to iterate on all the samples of a given channel present in the
1407 * buffer, doing the following:
1408 *
1409 * @verbatim
1410 for (void *ptr = iio_buffer_first(buffer, chn); ptr < iio_buffer_end(buffer); ptr += iio_buffer_step(buffer)) {
1411 ....
1412 }
1413 @endverbatim */
1414__api void * iio_buffer_first(const struct iio_buffer *buf,
1415 const struct iio_channel *chn);
1416
1417
1418/** @brief Get the step size between two samples of one channel
1419 * @param buf A pointer to an iio_buffer structure
1420 * @return the difference between the addresses of two consecutive samples of
1421 * one same channel */
1422__api ptrdiff_t iio_buffer_step(const struct iio_buffer *buf);
1423
1424
1425/** @brief Get the address that follows the last sample in a buffer
1426 * @param buf A pointer to an iio_buffer structure
1427 * @return A pointer corresponding to the address that follows the last sample
1428 * present in the buffer */
1429__api void * iio_buffer_end(const struct iio_buffer *buf);
1430
1431
1432/** @brief Call the supplied callback for each sample found in a buffer
1433 * @param buf A pointer to an iio_buffer structure
1434 * @param callback A pointer to a function to call for each sample found
1435 * @param data A user-specified pointer that will be passed to the callback
1436 * @return number of bytes processed.
1437 *
1438 * <b>NOTE:</b> The callback receives four arguments:
1439 * * A pointer to the iio_channel structure corresponding to the sample,
1440 * * A pointer to the sample itself,
1441 * * The length of the sample in bytes,
1442 * * The user-specified pointer passed to iio_buffer_foreach_sample. */
1443__api ssize_t iio_buffer_foreach_sample(struct iio_buffer *buf,
1444 ssize_t (*callback)(const struct iio_channel *chn,
1445 void *src, size_t bytes, void *d), void *data);
1446
1447
1448/** @brief Associate a pointer to an iio_buffer structure
1449 * @param buf A pointer to an iio_buffer structure
1450 * @param data The pointer to be associated */
1451__api void iio_buffer_set_data(struct iio_buffer *buf, void *data);
1452
1453
1454/** @brief Retrieve a previously associated pointer of an iio_buffer structure
1455 * @param buf A pointer to an iio_buffer structure
1456 * @return The pointer previously associated if present, or NULL */
1457__api void * iio_buffer_get_data(const struct iio_buffer *buf);
1458
1459
1460/** @} *//* ------------------------------------------------------------------*/
1461/* ------------------------- Low-level functions -----------------------------*/
1462/** @defgroup Debug Debug and low-level functions
1463 * @{
1464 * @struct iio_data_format
1465 * @brief Contains the format of a data sample.
1466 *
1467 * The different fields inform about the correct way to convert one sample from
1468 * its raw format (as read from / generated by the hardware) to its real-world
1469 * value.
1470 */
1471struct iio_data_format {
1472 /** @brief Total length of the sample, in bits */
1473 unsigned int length;
1474
1475 /** @brief Length of valuable data in the sample, in bits */
1476 unsigned int bits;
1477
1478 /** @brief Right-shift to apply when converting sample */
1479 unsigned int shift;
1480
1481 /** @brief Contains True if the sample is signed */
1482 bool is_signed;
1483
1484 /** @brief Contains True if the sample is fully defined, sign extended, etc. */
1485 bool is_fully_defined;
1486
1487 /** @brief Contains True if the sample is in big-endian format */
1488 bool is_be;
1489
1490 /** @brief Contains True if the sample should be scaled when converted */
1491 bool with_scale;
1492
1493 /** @brief Contains the scale to apply if with_scale is set */
1494 double scale;
1495
1496 /** @brief Number of times length repeats (added in v0.8) */
1497 unsigned int repeat;
1498};
1499
1500
1501/** @brief Get the current sample size
1502 * @param dev A pointer to an iio_device structure
1503 * @return On success, the sample size in bytes
1504 * @return On error, a negative errno code is returned
1505 *
1506 * <b>NOTE:</b> The sample size is not constant and will change when channels
1507 * get enabled or disabled. */
1508__api ssize_t iio_device_get_sample_size(const struct iio_device *dev);
1509
1510
1511/** @brief Get the index of the given channel
1512 * @param chn A pointer to an iio_channel structure
1513 * @return On success, the index of the specified channel
1514 * @return On error, a negative errno code is returned */
1515__api __pure long iio_channel_get_index(const struct iio_channel *chn);
1516
1517
1518/** @brief Get a pointer to a channel's data format structure
1519 * @param chn A pointer to an iio_channel structure
1520 * @return A pointer to the channel's iio_data_format structure */
1521__api __cnst const struct iio_data_format * iio_channel_get_data_format(
1522 const struct iio_channel *chn);
1523
1524
1525/** @brief Convert the sample from hardware format to host format
1526 * @param chn A pointer to an iio_channel structure
1527 * @param dst A pointer to the destination buffer where the converted sample
1528 * should be written
1529 * @param src A pointer to the source buffer containing the sample */
1530__api void iio_channel_convert(const struct iio_channel *chn,
1531 void *dst, const void *src);
1532
1533
1534/** @brief Convert the sample from host format to hardware format
1535 * @param chn A pointer to an iio_channel structure
1536 * @param dst A pointer to the destination buffer where the converted sample
1537 * should be written
1538 * @param src A pointer to the source buffer containing the sample */
1539__api void iio_channel_convert_inverse(const struct iio_channel *chn,
1540 void *dst, const void *src);
1541
1542
1543/** @brief Enumerate the debug attributes of the given device
1544 * @param dev A pointer to an iio_device structure
1545 * @return The number of debug attributes found */
1546__api __pure unsigned int iio_device_get_debug_attrs_count(
1547 const struct iio_device *dev);
1548
1549
1550/** @brief Get the debug attribute present at the given index
1551 * @param dev A pointer to an iio_device structure
1552 * @param index The index corresponding to the debug attribute
1553 * @return On success, a pointer to a static NULL-terminated string
1554 * @return If the index is invalid, NULL is returned */
1555__api __pure const char * iio_device_get_debug_attr(
1556 const struct iio_device *dev, unsigned int index);
1557
1558
1559/** @brief Try to find a debug attribute by its name
1560 * @param dev A pointer to an iio_device structure
1561 * @param name A NULL-terminated string corresponding to the name of the
1562 * debug attribute
1563 * @return On success, a pointer to a static NULL-terminated string
1564 * @return If the name does not correspond to any known debug attribute of the
1565 * given device, NULL is returned
1566 *
1567 * <b>NOTE:</b> This function is useful to detect the presence of a debug
1568 * attribute.
1569 * It can also be used to retrieve the name of a debug attribute as a pointer
1570 * to a static string from a dynamically allocated string. */
1571__api __pure const char * iio_device_find_debug_attr(
1572 const struct iio_device *dev, const char *name);
1573
1574
1575/** @brief Read the content of the given debug attribute
1576 * @param dev A pointer to an iio_device structure
1577 * @param attr A NULL-terminated string corresponding to the name of the
1578 * debug attribute
1579 * @param dst A pointer to the memory area where the NULL-terminated string
1580 * corresponding to the value read will be stored
1581 * @param len The available length of the memory area, in bytes
1582 * @return On success, the number of bytes written to the buffer
1583 * @return On error, a negative errno code is returned
1584 *
1585 * <b>NOTE:</b>By passing NULL as the "attr" argument to
1586 * iio_device_debug_attr_read, it is now possible to read all of the debug
1587 * attributes of a device.
1588 *
1589 * The buffer is filled with one block of data per debug attribute of the
1590 * device, by the order they appear in the iio_device structure.
1591 *
1592 * The first four bytes of one block correspond to a 32-bit signed value in
1593 * network order. If negative, it corresponds to the errno code that were
1594 * returned when reading the debug attribute; if positive, it corresponds
1595 * to the length of the data read. In that case, the rest of the block contains
1596 * the data. */
1597__api ssize_t iio_device_debug_attr_read(const struct iio_device *dev,
1598 const char *attr, char *dst, size_t len);
1599
1600
1601/** @brief Read the content of all debug attributes
1602 * @param dev A pointer to an iio_device structure
1603 * @param cb A pointer to a callback function
1604 * @param data A pointer that will be passed to the callback function
1605 * @return On success, 0 is returned
1606 * @return On error, a negative errno code is returned
1607 *
1608 * <b>NOTE:</b> This function is especially useful when used with the network
1609 * backend, as all the debug attributes are read in one single command. */
1610__api int iio_device_debug_attr_read_all(struct iio_device *dev,
1611 int (*cb)(struct iio_device *dev, const char *attr,
1612 const char *value, size_t len, void *d),
1613 void *data);
1614
1615
1616/** @brief Set the value of the given debug attribute
1617 * @param dev A pointer to an iio_device structure
1618 * @param attr A NULL-terminated string corresponding to the name of the
1619 * debug attribute
1620 * @param src A NULL-terminated string to set the debug attribute to
1621 * @return On success, the number of bytes written
1622 * @return On error, a negative errno code is returned
1623 *
1624 * <b>NOTE:</b>By passing NULL as the "attr" argument to
1625 * iio_device_debug_attr_write, it is now possible to write all of the
1626 * debug attributes of a device.
1627 *
1628 * The buffer must contain one block of data per debug attribute of the device,
1629 * by the order they appear in the iio_device structure.
1630 *
1631 * The first four bytes of one block correspond to a 32-bit signed value in
1632 * network order. If negative, the debug attribute is not written; if positive,
1633 * it corresponds to the length of the data to write. In that case, the rest
1634 * of the block must contain the data. */
1635__api ssize_t iio_device_debug_attr_write(const struct iio_device *dev,
1636 const char *attr, const char *src);
1637
1638
1639/** @brief Set the value of the given debug attribute
1640 * @param dev A pointer to an iio_device structure
1641 * @param attr A NULL-terminated string corresponding to the name of the
1642 * debug attribute
1643 * @param src A pointer to the data to be written
1644 * @param len The number of bytes that should be written
1645 * @return On success, the number of bytes written
1646 * @return On error, a negative errno code is returned */
1647__api ssize_t iio_device_debug_attr_write_raw(const struct iio_device *dev,
1648 const char *attr, const void *src, size_t len);
1649
1650
1651/** @brief Set the values of all debug attributes
1652 * @param dev A pointer to an iio_device structure
1653 * @param cb A pointer to a callback function
1654 * @param data A pointer that will be passed to the callback function
1655 * @return On success, 0 is returned
1656 * @return On error, a negative errno code is returned
1657 *
1658 * <b>NOTE:</b> This function is especially useful when used with the network
1659 * backend, as all the debug attributes are written in one single command. */
1660__api int iio_device_debug_attr_write_all(struct iio_device *dev,
1661 ssize_t (*cb)(struct iio_device *dev,
1662 const char *attr, void *buf, size_t len, void *d),
1663 void *data);
1664
1665
1666/** @brief Read the content of the given debug attribute
1667 * @param dev A pointer to an iio_device structure
1668 * @param attr A NULL-terminated string corresponding to the name of the
1669 * debug attribute
1670 * @param val A pointer to a bool variable where the value should be stored
1671 * @return On success, 0 is returned
1672 * @return On error, a negative errno code is returned */
1673__api int iio_device_debug_attr_read_bool(const struct iio_device *dev,
1674 const char *attr, bool *val);
1675
1676
1677/** @brief Read the content of the given debug attribute
1678 * @param dev A pointer to an iio_device structure
1679 * @param attr A NULL-terminated string corresponding to the name of the
1680 * debug attribute
1681 * @param val A pointer to a long long variable where the value should be stored
1682 * @return On success, 0 is returned
1683 * @return On error, a negative errno code is returned */
1684__api int iio_device_debug_attr_read_longlong(const struct iio_device *dev,
1685 const char *attr, long long *val);
1686
1687
1688/** @brief Read the content of the given debug attribute
1689 * @param dev A pointer to an iio_device structure
1690 * @param attr A NULL-terminated string corresponding to the name of the
1691 * debug attribute
1692 * @param val A pointer to a double variable where the value should be stored
1693 * @return On success, 0 is returned
1694 * @return On error, a negative errno code is returned */
1695__api int iio_device_debug_attr_read_double(const struct iio_device *dev,
1696 const char *attr, double *val);
1697
1698
1699/** @brief Set the value of the given debug attribute
1700 * @param dev A pointer to an iio_device structure
1701 * @param attr A NULL-terminated string corresponding to the name of the
1702 * debug attribute
1703 * @param val A bool value to set the debug attribute to
1704 * @return On success, 0 is returned
1705 * @return On error, a negative errno code is returned */
1706__api int iio_device_debug_attr_write_bool(const struct iio_device *dev,
1707 const char *attr, bool val);
1708
1709
1710/** @brief Set the value of the given debug attribute
1711 * @param dev A pointer to an iio_device structure
1712 * @param attr A NULL-terminated string corresponding to the name of the
1713 * debug attribute
1714 * @param val A long long value to set the debug attribute to
1715 * @return On success, 0 is returned
1716 * @return On error, a negative errno code is returned */
1717__api int iio_device_debug_attr_write_longlong(const struct iio_device *dev,
1718 const char *attr, long long val);
1719
1720
1721/** @brief Set the value of the given debug attribute
1722 * @param dev A pointer to an iio_device structure
1723 * @param attr A NULL-terminated string corresponding to the name of the
1724 * debug attribute
1725 * @param val A double value to set the debug attribute to
1726 * @return On success, 0 is returned
1727 * @return On error, a negative errno code is returned */
1728__api int iio_device_debug_attr_write_double(const struct iio_device *dev,
1729 const char *attr, double val);
1730
1731
1732/** @brief Identify the channel or debug attribute corresponding to a filename
1733 * @param dev A pointer to an iio_device structure
1734 * @param filename A NULL-terminated string corresponding to the filename
1735 * @param chn A pointer to a pointer of an iio_channel structure. The pointed
1736 * pointer will be set to the address of the iio_channel structure if the
1737 * filename correspond to the attribute of a channel, or NULL otherwise.
1738 * @param attr A pointer to a NULL-terminated string. The pointer
1739 * pointer will be set to point to the name of the attribute corresponding to
1740 * the filename.
1741 * @return On success, 0 is returned, and *chn and *attr are modified.
1742 * @return On error, a negative errno code is returned. *chn and *attr are not
1743 * modified. */
1744__api int iio_device_identify_filename(const struct iio_device *dev,
1745 const char *filename, struct iio_channel **chn,
1746 const char **attr);
1747
1748
1749/** @brief Set the value of a hardware register
1750 * @param dev A pointer to an iio_device structure
1751 * @param address The address of the register
1752 * @param value The value to set the register to
1753 * @return On success, 0 is returned
1754 * @return On error, a negative errno code is returned */
1755__api int iio_device_reg_write(struct iio_device *dev,
1756 uint32_t address, uint32_t value);
1757
1758
1759/** @brief Get the value of a hardware register
1760 * @param dev A pointer to an iio_device structure
1761 * @param address The address of the register
1762 * @param value A pointer to the variable where the value will be written
1763 * @return On success, 0 is returned
1764 * @return On error, a negative errno code is returned */
1765__api int iio_device_reg_read(struct iio_device *dev,
1766 uint32_t address, uint32_t *value);
1767
1768
1769/** @} */
1770
1771#ifdef __cplusplus
1772}
1773#endif
1774
1775#undef __api
1776
1777#endif /* __IIO_H__ */