2019-06-04 11:11:33 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2015-02-26 11:49:24 +03:00
# ifndef _IIO_UTILS_H_
# define _IIO_UTILS_H_
2009-08-18 21:06:32 +04:00
/* IIO - useful set of util functionality
*
* Copyright ( c ) 2008 Jonathan Cameron
*/
2010-10-08 15:14:14 +04:00
# include <stdint.h>
2010-05-04 17:43:13 +04:00
2012-06-26 01:12:13 +04:00
/* Made up value to limit allocation sizes */
2017-05-04 15:13:20 +03:00
# define IIO_MAX_NAME_LENGTH 64
2010-05-04 17:43:13 +04:00
2021-02-15 13:40:43 +03:00
# define FORMAT_SCAN_ELEMENTS_DIR "%s / buffer%d"
2021-03-19 16:53:01 +03:00
# define FORMAT_EVENTS_DIR "%s / events"
2010-10-08 15:14:14 +04:00
# define FORMAT_TYPE_FILE "%s_type"
2009-08-18 21:06:32 +04:00
2015-07-13 16:20:11 +03:00
# define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
2015-02-26 11:49:24 +03:00
extern const char * iio_dir ;
2010-10-08 15:14:14 +04:00
/**
* struct iio_channel_info - information about a given channel
* @ name : channel name
* @ generic_name : general name for channel type
* @ scale : scale factor to be applied for conversion to si units
* @ offset : offset to be applied for conversion to si units
* @ index : the channel index in the buffer output
* @ bytes : number of bytes occupied in buffer output
2015-05-31 15:40:16 +03:00
* @ bits_used : number of valid bits of data
* @ shift : amount of bits to shift right data before applying bit mask
2010-10-08 15:14:14 +04:00
* @ mask : a bit mask for the raw output
2015-05-31 15:40:16 +03:00
* @ be : flag if data is big endian
2010-10-08 15:14:14 +04:00
* @ is_signed : is the raw value stored signed
2015-05-31 15:40:16 +03:00
* @ location : data offset for this channel inside the buffer ( in bytes )
2010-10-08 15:14:14 +04:00
* */
struct iio_channel_info {
char * name ;
char * generic_name ;
float scale ;
float offset ;
unsigned index ;
unsigned bytes ;
unsigned bits_used ;
2011-05-18 17:41:19 +04:00
unsigned shift ;
2010-10-08 15:14:14 +04:00
uint64_t mask ;
2011-12-04 23:10:59 +04:00
unsigned be ;
2010-10-08 15:14:14 +04:00
unsigned is_signed ;
unsigned location ;
} ;
2016-04-14 11:26:47 +03:00
static inline int iioutils_check_suffix ( const char * str , const char * suffix )
{
return strlen ( str ) > = strlen ( suffix ) & &
strncmp ( str + strlen ( str ) - strlen ( suffix ) ,
suffix , strlen ( suffix ) ) = = 0 ;
}
2015-02-26 11:49:24 +03:00
int iioutils_break_up_name ( const char * full_name , char * * generic_name ) ;
int iioutils_get_param_float ( float * output , const char * param_name ,
2015-06-10 22:51:20 +03:00
const char * device_dir , const char * name ,
const char * generic_name ) ;
2015-07-24 18:23:29 +03:00
void bsort_channel_array_by_index ( struct iio_channel_info * ci_array , int cnt ) ;
2021-02-15 13:40:43 +03:00
int build_channel_array ( const char * device_dir , int buffer_idx ,
2015-06-10 22:51:20 +03:00
struct iio_channel_info * * ci_array , int * counter ) ;
2015-02-26 11:49:24 +03:00
int find_type_by_name ( const char * name , const char * type ) ;
2015-05-31 15:40:36 +03:00
int write_sysfs_int ( const char * filename , const char * basedir , int val ) ;
int write_sysfs_int_and_verify ( const char * filename , const char * basedir ,
int val ) ;
int write_sysfs_string_and_verify ( const char * filename , const char * basedir ,
const char * val ) ;
int write_sysfs_string ( const char * filename , const char * basedir ,
const char * val ) ;
int read_sysfs_posint ( const char * filename , const char * basedir ) ;
int read_sysfs_float ( const char * filename , const char * basedir , float * val ) ;
2015-02-26 11:49:24 +03:00
int read_sysfs_string ( const char * filename , const char * basedir , char * str ) ;
# endif /* _IIO_UTILS_H_ */