133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall/*
233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall $License:
333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved.
433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    See included License.txt for License information.
533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall $
633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall */
733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#ifndef INV_SHAKE_H__
833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#define INV_SHAKE_H__
933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
1033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#include "mltypes.h"
1133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
1233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
1333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#ifdef __cplusplus
1433ce91b37062fa63af192f5643de93f3beebe854JP Abgrallextern "C" {
1533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#endif
1633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
1733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	/* ------------ */
1833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    /* - Defines. - */
1933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    /* ------------ */
2033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
2133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    #define STATE_ZERO                             0
2233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    #define STATE_INIT_1                           1
2333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    #define STATE_INIT_2                           2
2433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    #define STATE_DETECT                           3
2533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
2633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	struct t_shake_config_params {
2733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		long shake_time_min_ms;
2833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		long shake_time_max_ms;
2933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		long shake_time_min;
3033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        long shake_time_max;
3133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		unsigned char shake_time_set;
3233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		long shake_time_saved;
3333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        float shake_deriv_thr;
3433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        int zero_cross_thr;
3533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        float accel_delta_min;
3633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        float accel_delta_max;
3733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		unsigned char interp_enable;
3833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	};
3933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
4033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	struct t_shake_state_params {
4133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		unsigned char state;
4233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        float accel_peak_high;
4333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        float accel_peak_low;
4433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        float accel_range;
4533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        int num_zero_cross;
4633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        short curr_shake_time;
4733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		int deriv_major_change;
4833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		int deriv_major_sign;
4933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        float accel_buffer[200];
5033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall        float delta_buffer[200];
5133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	};
5233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
5333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	struct t_shake_data_params {
5433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		float accel_prev;
5533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		float accel_curr;
5633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		float delta_prev;
5733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		float delta_curr;
5833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		float delta_prev_buffer;
5933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	};
6033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
6133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	struct t_shake_results {
6233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		//unsigned char shake_int;
6333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall		int shake_number;
6433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	};
6533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
6633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	struct t_shake_cb {
6733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall       void (*shake_callback)(struct t_shake_results *shake_results);
6833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    };
6933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
7033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
7133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    /* --------------------- */
7233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    /* - Function p-types. - */
7333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    /* --------------------- */
7433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	inv_error_t inv_enable_shake(void);
7533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    inv_error_t inv_disable_shake(void);
7633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    inv_error_t inv_init_shake(void);
7733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall    inv_error_t inv_start_shake(void);
7833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	int inv_set_shake_cb(void (*callback)(struct t_shake_results *shake_results));
7933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	void inv_config_shake_time_params(long sample_time_ms);
8033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	void inv_set_shake_accel_delta_min(float accel_g);
8133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	void inv_set_shake_accel_delta_max(float accel_g);
8233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	void inv_set_shake_zero_cross_thresh(int num_zero_cross);
8333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	void inv_set_shake_deriv_thresh(float shake_deriv_thresh);
8433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	void inv_set_shake_time_min_ms(long time_ms);
8533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	void inv_set_shake_time_max_ms(long time_ms);
8633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall	void inv_enable_shake_data_interpolation(unsigned char en);
8733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
8833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
8933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
9033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#ifdef __cplusplus
9133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall}
9233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#endif
9333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall
9433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#endif // INV_SHAKE__