149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/** 249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @brief Provides helpful file IO wrappers for use with sysfs. 349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @details Based on Jonathan Cameron's @e iio_utils.h. 449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */ 549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef _INV_SYSFS_UTILS_H_ 749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define _INV_SYSFS_UTILS_H_ 849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/** 1049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * struct inv_sysfs_names_s - Files needed by user applications. 1149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @buffer: Ring buffer attached to FIFO. 1249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @enable: Turns on HW-to-ring buffer flow. 1349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @raw_data: Raw data from registers. 1449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @temperature: Temperature data from register. 1549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @fifo_rate: FIFO rate/ODR. 1649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @power_state: Power state (this is a five-star comment). 1749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @fsr: Full-scale range. 1849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @lpf: Digital low pass filter. 1949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @scale: LSBs / dps (or LSBs / Gs). 2049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @temp_scale: LSBs / degrees C. 2149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @temp_offset: Offset in LSBs. 2249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */ 2349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowstruct inv_sysfs_names_s { 2449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 2549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow //Sysfs for ITG3500 & MPU6050 2649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *buffer; 2749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *enable; 2849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *raw_data; //Raw Gyro data 2949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *temperature; 3049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *fifo_rate; 3149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *power_state; 3249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *fsr; 3349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *lpf; 3449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *scale; //Gyro scale 3549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *temp_scale; 3649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *temp_offset; 3749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *self_test; 3849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow //Starting Sysfs available for MPU6050 only 3949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *accel_en; 4049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *accel_fifo_en; 4149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *accel_fs; 4249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *clock_source; 4349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *early_suspend_en; 4449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *firmware_loaded; 4549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *gyro_en; 4649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *gyro_fifo_en; 4749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *key; 4849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *raw_accel; 4949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *reg_dump; 5049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *tap_on; 5149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *dmp_firmware; 5249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}; 5349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 5449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* File IO. Typically won't be called directly by user application, but they'll 5549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * be here for your enjoyment. 5649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */ 5749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_sysfs_write(char *filename, long data); 5849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_sysfs_read(char *filename, long num_bytes, char *data); 5949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 6049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Helper APIs to extract specific data. */ 6149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_buffer(int fd, long *data, long long *timestamp); 6249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_raw(const struct inv_sysfs_names_s *names, long *data, 6349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long long *timestamp); 6449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_temperature_raw(const struct inv_sysfs_names_s *names, short *data, 6549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long long *timestamp); 6649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_fifo_rate(const struct inv_sysfs_names_s *names, short *data); 6749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_power_state(const struct inv_sysfs_names_s *names, char *data); 6849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_scale(const struct inv_sysfs_names_s *names, float *data); 6949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_temp_scale(const struct inv_sysfs_names_s *names, short *data); 7049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_temp_offset(const struct inv_sysfs_names_s *names, short *data); 7149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_write_fifo_rate(const struct inv_sysfs_names_s *names, short data); 7249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_write_buffer_enable(const struct inv_sysfs_names_s *names, char data); 7349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_write_power_state(const struct inv_sysfs_names_s *names, char data); 7449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 7549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Scaled data. */ 7649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_q16(const struct inv_sysfs_names_s *names, long *data, 7749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long long *timestamp); 7849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_read_temp_q16(const struct inv_sysfs_names_s *names, long *data, 7949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long long *timestamp); 8049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif /* #ifndef _INV_SYSFS_UTILS_H_ */ 8349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 85