| /* |
| $License: |
| Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved. |
| See included License.txt for License information. |
| $ |
| */ |
| #ifndef INV_SHAKE_H__ |
| #define INV_SHAKE_H__ |
| |
| #include "mltypes.h" |
| |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* ------------ */ |
| /* - Defines. - */ |
| /* ------------ */ |
| |
| #define STATE_ZERO 0 |
| #define STATE_INIT_1 1 |
| #define STATE_INIT_2 2 |
| #define STATE_DETECT 3 |
| |
| struct t_shake_config_params { |
| long shake_time_min_ms; |
| long shake_time_max_ms; |
| long shake_time_min; |
| long shake_time_max; |
| unsigned char shake_time_set; |
| long shake_time_saved; |
| float shake_deriv_thr; |
| int zero_cross_thr; |
| float accel_delta_min; |
| float accel_delta_max; |
| unsigned char interp_enable; |
| }; |
| |
| struct t_shake_state_params { |
| unsigned char state; |
| float accel_peak_high; |
| float accel_peak_low; |
| float accel_range; |
| int num_zero_cross; |
| short curr_shake_time; |
| int deriv_major_change; |
| int deriv_major_sign; |
| float accel_buffer[200]; |
| float delta_buffer[200]; |
| }; |
| |
| struct t_shake_data_params { |
| float accel_prev; |
| float accel_curr; |
| float delta_prev; |
| float delta_curr; |
| float delta_prev_buffer; |
| }; |
| |
| struct t_shake_results { |
| //unsigned char shake_int; |
| int shake_number; |
| }; |
| |
| struct t_shake_cb { |
| void (*shake_callback)(struct t_shake_results *shake_results); |
| }; |
| |
| |
| /* --------------------- */ |
| /* - Function p-types. - */ |
| /* --------------------- */ |
| inv_error_t inv_enable_shake(void); |
| inv_error_t inv_disable_shake(void); |
| inv_error_t inv_init_shake(void); |
| inv_error_t inv_start_shake(void); |
| int inv_set_shake_cb(void (*callback)(struct t_shake_results *shake_results)); |
| void inv_config_shake_time_params(long sample_time_ms); |
| void inv_set_shake_accel_delta_min(float accel_g); |
| void inv_set_shake_accel_delta_max(float accel_g); |
| void inv_set_shake_zero_cross_thresh(int num_zero_cross); |
| void inv_set_shake_deriv_thresh(float shake_deriv_thresh); |
| void inv_set_shake_time_min_ms(long time_ms); |
| void inv_set_shake_time_max_ms(long time_ms); |
| void inv_enable_shake_data_interpolation(unsigned char en); |
| |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // INV_SHAKE__ |