1/*
2 $License:
3    Copyright (C) 2014 InvenSense Corporation, All Rights Reserved.
4 $
5 */
6
7/**
8 *  @brief    Provides helpful file IO wrappers for use with sysfs.
9 *  @details  Based on Jonathan Cameron's @e iio_utils.h.
10 */
11
12#ifndef _INV_SYSFS_UTILS_H_
13#define _INV_SYSFS_UTILS_H_
14
15/**
16 *  struct inv_sysfs_names_s - Files needed by user applications.
17 *  @buffer:		Ring buffer attached to FIFO.
18 *  @enable:		Turns on HW-to-ring buffer flow.
19 *  @raw_data:		Raw data from registers.
20 *  @temperature:	Temperature data from register.
21 *  @fifo_rate:		FIFO rate/ODR.
22 *  @power_state:	Power state (this is a five-star comment).
23 *  @fsr:		Full-scale range.
24 *  @lpf:		Digital low pass filter.
25 *  @scale:		LSBs / dps (or LSBs / Gs).
26 *  @temp_scale:	LSBs / degrees C.
27 *  @temp_offset:	Offset in LSBs.
28 */
29struct inv_sysfs_names_s {
30
31	//Sysfs for ITG3500 & MPU6050
32	const char *buffer;
33	const char *enable;
34	const char *raw_data;		//Raw Gyro data
35	const char *temperature;
36	const char *fifo_rate;
37	const char *power_state;
38	const char *fsr;
39	const char *lpf;
40	const char *scale;			//Gyro scale
41	const char *temp_scale;
42	const char *temp_offset;
43	const char *self_test;
44	//Starting Sysfs available for MPU6050 only
45	const char *accel_en;
46	const char *accel_fifo_en;
47	const char *accel_fs;
48	const char *clock_source;
49	const char *early_suspend_en;
50	const char *firmware_loaded;
51	const char *gyro_en;
52	const char *gyro_fifo_en;
53	const char *key;
54	const char *raw_accel;
55	const char *reg_dump;
56	const char *tap_on;
57	const char *dmp_firmware;
58};
59
60/* File IO. Typically won't be called directly by user application, but they'll
61 * be here for your enjoyment.
62 */
63int inv_sysfs_write(char *filename, long data);
64int inv_sysfs_read(char *filename, long num_bytes, char *data);
65
66/* Helper APIs to extract specific data. */
67int inv_read_buffer(int fd, long *data, long long *timestamp);
68int inv_read_raw(const struct inv_sysfs_names_s *names, long *data,
69		 long long *timestamp);
70int inv_read_temperature_raw(const struct inv_sysfs_names_s *names, short *data,
71			     long long *timestamp);
72int inv_read_fifo_rate(const struct inv_sysfs_names_s *names, short *data);
73int inv_read_power_state(const struct inv_sysfs_names_s *names, char *data);
74int inv_read_scale(const struct inv_sysfs_names_s *names, float *data);
75int inv_read_temp_scale(const struct inv_sysfs_names_s *names, short *data);
76int inv_read_temp_offset(const struct inv_sysfs_names_s *names, short *data);
77int inv_write_fifo_rate(const struct inv_sysfs_names_s *names, short data);
78int inv_write_buffer_enable(const struct inv_sysfs_names_s *names, char data);
79int inv_write_power_state(const struct inv_sysfs_names_s *names, char data);
80
81/* Scaled data. */
82int inv_read_q16(const struct inv_sysfs_names_s *names, long *data,
83                 long long *timestamp);
84int inv_read_temp_q16(const struct inv_sysfs_names_s *names, long *data,
85                      long long *timestamp);
86
87
88#endif  /* #ifndef _INV_SYSFS_UTILS_H_ */
89
90
91