diff options
Diffstat (limited to 'libsensors/software/core/mllite/linux/inv_sysfs_utils.c')
-rw-r--r-- | libsensors/software/core/mllite/linux/inv_sysfs_utils.c | 318 |
1 files changed, 0 insertions, 318 deletions
diff --git a/libsensors/software/core/mllite/linux/inv_sysfs_utils.c b/libsensors/software/core/mllite/linux/inv_sysfs_utils.c deleted file mode 100644 index 649b917..0000000 --- a/libsensors/software/core/mllite/linux/inv_sysfs_utils.c +++ /dev/null @@ -1,318 +0,0 @@ -/** - * @brief Provides helpful file IO wrappers for use with sysfs. - * @details Based on Jonathan Cameron's @e iio_utils.h. - */ - -#include <string.h> -#include <stdlib.h> -#include <ctype.h> -#include <stdio.h> -#include <stdint.h> -#include <dirent.h> -#include <errno.h> -#include <unistd.h> -#include "inv_sysfs_utils.h" - -/* General TODO list: - * Select more reasonable string lengths or use fseek and malloc. - */ - -/** - * inv_sysfs_write() - Write an integer to a file. - * @filename: Path to file. - * @data: Value to write to file. - * Returns number of bytes written or a negative error code. - */ -int inv_sysfs_write(char *filename, long data) -{ - FILE *fp; - int count; - - if (!filename) - return -1; - fp = fopen(filename, "w"); - if (!fp) - return -errno; - count = fprintf(fp, "%ld", data); - fclose(fp); - return count; -} - -/** - * inv_sysfs_read() - Read a string from a file. - * @filename: Path to file. - * @num_bytes: Number of bytes to read. - * @data: Data from file. - * Returns number of bytes written or a negative error code. - */ -int inv_sysfs_read(char *filename, long num_bytes, char *data) -{ - FILE *fp; - int count; - - if (!filename) - return -1; - fp = fopen(filename, "r"); - if (!fp) - return -errno; - count = fread(data, 1, num_bytes, fp); - fclose(fp); - return count; -} - -/** - * inv_read_buffer() - Read data from ring buffer. - * @fd: File descriptor for buffer file. - * @data: Data in hardware units. - * @timestamp: Time when data was read from device. Use NULL if unsupported. - * Returns number of bytes written or a negative error code. - */ -int inv_read_buffer(int fd, long *data, long long *timestamp) -{ - char str[35]; - int count; - - count = read(fd, str, sizeof(str)); - if (!count) - return count; - if (!timestamp) - count = sscanf(str, "%ld%ld%ld", &data[0], &data[1], &data[2]); - else - count = sscanf(str, "%ld%ld%ld%lld", &data[0], &data[1], - &data[2], timestamp); - - if (count < (timestamp?4:3)) - return -EAGAIN; - return count; -} - -/** - * inv_read_raw() - Read raw data. - * @names: Names of sysfs files. - * @data: Data in hardware units. - * @timestamp: Time when data was read from device. Use NULL if unsupported. - * Returns number of bytes written or a negative error code. - */ -int inv_read_raw(const struct inv_sysfs_names_s *names, long *data, - long long *timestamp) -{ - char str[40]; - int count; - - count = inv_sysfs_read((char*)names->raw_data, sizeof(str), str); - if (count < 0) - return count; - if (!timestamp) - count = sscanf(str, "%ld%ld%ld", &data[0], &data[1], &data[2]); - else - count = sscanf(str, "%ld%ld%ld%lld", &data[0], &data[1], - &data[2], timestamp); - if (count < (timestamp?4:3)) - return -EAGAIN; - return count; -} - -/** - * inv_read_temperature_raw() - Read temperature. - * @names: Names of sysfs files. - * @data: Data in hardware units. - * @timestamp: Time when data was read from device. - * Returns number of bytes written or a negative error code. - */ -int inv_read_temperature_raw(const struct inv_sysfs_names_s *names, short *data, - long long *timestamp) -{ - char str[25]; - int count; - - count = inv_sysfs_read((char*)names->temperature, sizeof(str), str); - if (count < 0) - return count; - count = sscanf(str, "%hd%lld", &data[0], timestamp); - if (count < 2) - return -EAGAIN; - return count; -} - -/** - * inv_read_fifo_rate() - Read fifo rate. - * @names: Names of sysfs files. - * @data: Fifo rate. - * Returns number of bytes written or a negative error code. - */ -int inv_read_fifo_rate(const struct inv_sysfs_names_s *names, short *data) -{ - char str[8]; - int count; - - count = inv_sysfs_read((char*)names->fifo_rate, sizeof(str), str); - if (count < 0) - return count; - count = sscanf(str, "%hd", data); - if (count < 1) - return -EAGAIN; - return count; -} - -/** - * inv_read_power_state() - Read power state. - * @names: Names of sysfs files. - * @data: 1 if device is on. - * Returns number of bytes written or a negative error code. - */ -int inv_read_power_state(const struct inv_sysfs_names_s *names, char *data) -{ - char str[2]; - int count; - - count = inv_sysfs_read((char*)names->power_state, sizeof(str), str); - if (count < 0) - return count; - count = sscanf(str, "%hd", (short*)data); - if (count < 1) - return -EAGAIN; - return count; -} - -/** - * inv_read_scale() - Read scale. - * @names: Names of sysfs files. - * @data: 1 if device is on. - * Returns number of bytes written or a negative error code. - */ -int inv_read_scale(const struct inv_sysfs_names_s *names, float *data) -{ - char str[5]; - int count; - - count = inv_sysfs_read((char*)names->scale, sizeof(str), str); - if (count < 0) - return count; - count = sscanf(str, "%f", data); - if (count < 1) - return -EAGAIN; - return count; -} - -/** - * inv_read_temp_scale() - Read temperature scale. - * @names: Names of sysfs files. - * @data: 1 if device is on. - * Returns number of bytes written or a negative error code. - */ -int inv_read_temp_scale(const struct inv_sysfs_names_s *names, short *data) -{ - char str[4]; - int count; - - count = inv_sysfs_read((char*)names->temp_scale, sizeof(str), str); - if (count < 0) - return count; - count = sscanf(str, "%hd", data); - if (count < 1) - return -EAGAIN; - return count; -} - -/** - * inv_read_temp_offset() - Read temperature offset. - * @names: Names of sysfs files. - * @data: 1 if device is on. - * Returns number of bytes written or a negative error code. - */ -int inv_read_temp_offset(const struct inv_sysfs_names_s *names, short *data) -{ - char str[4]; - int count; - - count = inv_sysfs_read((char*)names->temp_offset, sizeof(str), str); - if (count < 0) - return count; - count = sscanf(str, "%hd", data); - if (count < 1) - return -EAGAIN; - return count; -} - -/** - * inv_read_q16() - Get data as q16 fixed point. - * @names: Names of sysfs files. - * @data: 1 if device is on. - * @timestamp: Time when data was read from device. - * Returns number of bytes written or a negative error code. - */ -int inv_read_q16(const struct inv_sysfs_names_s *names, long *data, - long long *timestamp) -{ - int count; - short raw[3]; - float scale; - count = inv_read_raw(names, (long*)raw, timestamp); - count += inv_read_scale(names, &scale); - data[0] = (long)(raw[0] * (65536.f / scale)); - data[1] = (long)(raw[1] * (65536.f / scale)); - data[2] = (long)(raw[2] * (65536.f / scale)); - return count; -} - -/** - * inv_read_q16() - Get temperature data as q16 fixed point. - * @names: Names of sysfs files. - * @data: 1 if device is on. - * @timestamp: Time when data was read from device. - * Returns number of bytes read or a negative error code. - */ -int inv_read_temp_q16(const struct inv_sysfs_names_s *names, long *data, - long long *timestamp) -{ - int count = 0; - short raw; - static short scale, offset; - static unsigned char first_read = 1; - - if (first_read) { - count += inv_read_temp_scale(names, &scale); - count += inv_read_temp_offset(names, &offset); - first_read = 0; - } - count += inv_read_temperature_raw(names, &raw, timestamp); - data[0] = (long)((35 + ((float)(raw - offset) / scale)) * 65536.f); - - return count; -} - -/** - * inv_write_fifo_rate() - Write fifo rate. - * @names: Names of sysfs files. - * @data: Fifo rate. - * Returns number of bytes written or a negative error code. - */ -int inv_write_fifo_rate(const struct inv_sysfs_names_s *names, short data) -{ - return inv_sysfs_write((char*)names->fifo_rate, (long)data); -} - -/** - * inv_write_buffer_enable() - Enable/disable buffer in /dev. - * @names: Names of sysfs files. - * @data: Fifo rate. - * Returns number of bytes written or a negative error code. - */ -int inv_write_buffer_enable(const struct inv_sysfs_names_s *names, char data) -{ - return inv_sysfs_write((char*)names->enable, (long)data); -} - -/** - * inv_write_power_state() - Turn device on/off. - * @names: Names of sysfs files. - * @data: 1 to turn on. - * Returns number of bytes written or a negative error code. - */ -int inv_write_power_state(const struct inv_sysfs_names_s *names, char data) -{ - return inv_sysfs_write((char*)names->power_state, (long)data); -} - - - |