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
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation .
*/
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 */
2010-05-04 17:43:13 +04:00
# define IIO_MAX_NAME_LENGTH 30
2011-08-30 15:32:47 +04:00
# define FORMAT_SCAN_ELEMENTS_DIR "%s / scan_elements"
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 ;
} ;
2015-02-26 11:49:24 +03:00
int iioutils_break_up_name ( const char * full_name , char * * generic_name ) ;
2015-06-10 22:51:20 +03:00
int iioutils_get_type ( unsigned * is_signed , unsigned * bytes , unsigned * bits_used ,
unsigned * shift , uint64_t * mask , unsigned * be ,
const char * device_dir , const char * name ,
const char * generic_name ) ;
2015-02-26 11:49:24 +03:00
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-02-26 11:49:24 +03:00
void bsort_channel_array_by_index ( struct iio_channel_info * * ci_array , int cnt ) ;
int build_channel_array ( const char * device_dir ,
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_ */