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