/* | |
$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__ |