blob: fce28ae5b5af4ace42e54dcb7914d60d5728b100 [file] [log] [blame]
/**
* @brief Provides helpful file IO wrappers for use with sysfs.
* @details Based on Jonathan Cameron's @e iio_utils.h.
*/
#ifndef _INV_SYSFS_UTILS_H_
#define _INV_SYSFS_UTILS_H_
/**
* struct inv_sysfs_names_s - Files needed by user applications.
* @buffer: Ring buffer attached to FIFO.
* @enable: Turns on HW-to-ring buffer flow.
* @raw_data: Raw data from registers.
* @temperature: Temperature data from register.
* @fifo_rate: FIFO rate/ODR.
* @power_state: Power state (this is a five-star comment).
* @fsr: Full-scale range.
* @lpf: Digital low pass filter.
* @scale: LSBs / dps (or LSBs / Gs).
* @temp_scale: LSBs / degrees C.
* @temp_offset: Offset in LSBs.
*/
struct inv_sysfs_names_s {
//Sysfs for ITG3500 & MPU6050
const char *buffer;
const char *enable;
const char *raw_data; //Raw Gyro data
const char *temperature;
const char *fifo_rate;
const char *power_state;
const char *fsr;
const char *lpf;
const char *scale; //Gyro scale
const char *temp_scale;
const char *temp_offset;
const char *self_test;
//Starting Sysfs available for MPU6050 only
const char *accel_en;
const char *accel_fifo_en;
const char *accel_fs;
const char *clock_source;
const char *early_suspend_en;
const char *firmware_loaded;
const char *gyro_en;
const char *gyro_fifo_en;
const char *key;
const char *raw_accel;
const char *reg_dump;
const char *tap_on;
const char *dmp_firmware;
};
/* File IO. Typically won't be called directly by user application, but they'll
* be here for your enjoyment.
*/
int inv_sysfs_write(char *filename, long data);
int inv_sysfs_read(char *filename, long num_bytes, char *data);
/* Helper APIs to extract specific data. */
int inv_read_buffer(int fd, long *data, long long *timestamp);
int inv_read_raw(const struct inv_sysfs_names_s *names, long *data,
long long *timestamp);
int inv_read_temperature_raw(const struct inv_sysfs_names_s *names, short *data,
long long *timestamp);
int inv_read_fifo_rate(const struct inv_sysfs_names_s *names, short *data);
int inv_read_power_state(const struct inv_sysfs_names_s *names, char *data);
int inv_read_scale(const struct inv_sysfs_names_s *names, float *data);
int inv_read_temp_scale(const struct inv_sysfs_names_s *names, short *data);
int inv_read_temp_offset(const struct inv_sysfs_names_s *names, short *data);
int inv_write_fifo_rate(const struct inv_sysfs_names_s *names, short data);
int inv_write_buffer_enable(const struct inv_sysfs_names_s *names, char data);
int inv_write_power_state(const struct inv_sysfs_names_s *names, char data);
/* Scaled data. */
int inv_read_q16(const struct inv_sysfs_names_s *names, long *data,
long long *timestamp);
int inv_read_temp_q16(const struct inv_sysfs_names_s *names, long *data,
long long *timestamp);
#endif /* #ifndef _INV_SYSFS_UTILS_H_ */