| /** |
| * @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_ */ |
| |
| |