1 /* 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 26 extern "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 36 typedef 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 80 struct iio_context; 81 struct iio_device; 82 struct iio_channel; 83 struct iio_buffer; 84 85 struct iio_context_info; 86 struct 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 */ 95 enum 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 */ 138 enum 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 * 1405 * <b>NOTE:</b> This function, coupled with iio_buffer_step and iio_buffer_end, 1406 * 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 */ 1471 struct 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__ */ 1778