📄 g_sensor.c
字号:
#include "kal_release.h"
#include "custom_config.h"
#include "gpio_sw.h"
#include "drv_comm.h"
#ifdef G_SENSOR_SUPPORT
#include "g_sensor.h"
#include "gpt_sw.h"
#include "intrCtrl.h"
#include "eint.h"
#include "MMA7455L_Init.h"
#include "MMA7455L_Turn.h"
#include "MMA7455L_Flip.h"
extern const unsigned char G_SENSOR_NO;
#define G_SENSOR_SAMPLE_PERIOD_FOR_TRUN 5 //50ms
#define G_SENSOR_SAMPLE_PERIOD_FOR_FLIP 1 //50ms
#define X_THRESHOLD 10 //15
#define Y_THRESHOLD 20 //30
#define G_SENSOR_DEBUG 0
GSensorStruct g_sensor_data;
kal_bool g_sensort_tap_inited = KAL_FALSE;
kal_bool g_sensor_sample_inited = KAL_FALSE;
kal_bool accelerometer_state_2 = LEVEL_HIGH;//LEVEL_LOW;
VUINT8 vt_int_count = 0;
kal_bool g_sensor_power(kal_bool enable)
{
if(enable)
{
//motion_sensor_custom_fp->ms_power_up();
g_sensor_sample(KAL_TRUE);
}
else
{
// motion_sensor_custom_fp->ms_power_down();
g_sensor_sample(KAL_FALSE);
//motion_sensor_reset();
}
return KAL_TRUE;
}
void g_sensor_conf_sample_period(kal_uint32 period)
{
g_sensor_data.sample_period=(kal_uint8)period;
}
void g_sensor_conf_sense_func(G_SENSOR_SENSE_FUNC func)
{
g_sensor_data.sense_func=func;
}
void g_sensor_conf_get_report_func(G_SENSOR_GET_REPORT_FUNC func)
{
g_sensor_data.get_report_func=func;
}
void g_sensor_sample_cb(void *para)
{
kal_uint8 report_value = 0;
g_sensor_data.sense_func();
report_value = g_sensor_data.get_report_func();
if (0 != report_value)
{
//g_sensor_data.cb_func(motion_sensor_data.para);
g_sensor_data.cb_func(&report_value);
}
GPTI_StartItem(g_sensor_data.gpt_handle,
g_sensor_data.sample_period,
g_sensor_sample_cb,
NULL);
}
void g_sensor_sample(kal_bool enable)
{
if(enable)/*ON*/
{
if(KAL_FALSE == g_sensor_sample_inited)
{
g_sensor_sample_inited = KAL_TRUE;
GPTI_GetHandle(&g_sensor_data.gpt_handle);
}
GPTI_StartItem(g_sensor_data.gpt_handle,
g_sensor_data.sample_period,
g_sensor_sample_cb,
NULL);
}
else/*OFF*/
{
GPTI_StopItem(g_sensor_data.gpt_handle);
}
}
void g_sensor_cb_registration(G_SENSOR_DATA_FUNC cb_fun, void *para)
{
g_sensor_data.cb_func=cb_fun;
g_sensor_data.para=para;
}
/*
void g_sensor_stop_sample(void)
{
//Flip_Sense();
GPTI_StopItem(g_sensor_data.gpt_handle);
}
*/
void g_sensor_reset(void)
{
return;
}
kal_bool g_sensor_status = KAL_TRUE;
kal_uint8 g_sensor_tap_gpt_handle;
void g_sensor_tap_func(void *para)
{
if(vt_int_count == 2)
{
g_sensor_data.cb_func(NULL);
}
vt_int_count = 0;
g_sensor_status = KAL_TRUE;
GPTI_StopItem(g_sensor_tap_gpt_handle);
}
void g_sensor_eint_hisr(void)
{
VINT16 X_G_SENSOR = 0;
VINT16 Y_G_SENSOR = 0;
VINT16 Z_G_SENSOR = 0;
kal_uint32 savedMask;
MMA745x_Read_RawData(&X_G_SENSOR, &Y_G_SENSOR, &Z_G_SENSOR);
#if G_SENSOR_DEBUG
kal_prompt_trace(MOD_SOC, "x = %d y = %d z = %d",X_G_SENSOR, Y_G_SENSOR, Z_G_SENSOR);
#endif
Tap_Clear_Interrupt();
#if 0
if(abs(X_G_SENSOR) > X_THRESHOLD || abs(Y_G_SENSOR) > Y_THRESHOLD)
return;
#endif
savedMask = SaveAndSetIRQMask();
if(g_sensor_status)
{
//IRQMask(IRQ_GPT_CODE);
//GPTI_GetHandle(&g_sensor_tap_gpt_handle);
GPTI_StartItem(g_sensor_tap_gpt_handle,
100,
g_sensor_tap_func,
NULL);
g_sensor_status = KAL_FALSE;
//IRQUnmask(IRQ_GPT_CODE);
}
//g_sensor_data.cb_func(NULL);
//callback function
vt_int_count++;
if(vt_int_count>=10)
vt_int_count = 0;
//
RestoreIRQMask(savedMask);
}
VUINT8 Tap_get_INT_count(void)
{
return vt_int_count;
}
void Tap_set_INT_count(VUINT8 value)
{
vt_int_count = 0;
}
void g_sensor_int_enable(kal_bool enable)
{
if(enable==KAL_TRUE)
EINT_UnMask(G_SENSOR_NO);
else
EINT_Mask(G_SENSOR_NO);
}
void g_sensor_init_turn(void)
{
MMA7455L_Startup();
g_sensor_conf_sample_period(G_SENSOR_SAMPLE_PERIOD_FOR_TRUN);
g_sensor_conf_sense_func(Turn_Sense);
g_sensor_conf_get_report_func(Turn_Get_report);
}
void g_sensor_init_flip(void)
{
MMA7455L_Startup();
g_sensor_conf_sample_period(G_SENSOR_SAMPLE_PERIOD_FOR_FLIP);
g_sensor_conf_sense_func(Flip_Sense);
g_sensor_conf_get_report_func(Flip_Get_Report);
}
void g_sensor_init_tap(void)
{
extern kal_int32 EINT_SW_Debounce_Modify(kal_uint8 eintno, kal_uint8 debounce_time);
Tap_Init_MMA7455L();
if(!g_sensort_tap_inited)
{
EINT_SW_Debounce_Modify(G_SENSOR_NO, 10);
EINT_Mask(G_SENSOR_NO);
EINT_Registration(G_SENSOR_NO, KAL_TRUE,
accelerometer_state_2,g_sensor_eint_hisr, KAL_TRUE);
g_sensort_tap_inited = KAL_TRUE;
GPTI_GetHandle(&g_sensor_tap_gpt_handle);
}
g_sensor_int_enable(KAL_TRUE);
}
//MMA745x_Test_IIC_Read_and_Write
#endif /* G_SENSOR_SUPPORT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -