vmsalsensor.c
3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include "vmswitch.h"
#ifdef __MRE_SAL_SENSOR__
#include "Fat_fs.h"
#include "SettingDefs.h"
#include "CommonScreens.h"
#include "lcd_sw_rnd.h"
#include "lcd_if.h"
#include "mdi_datatype.h"
#include "mdi_audio.h"
#include "kal_release.h"
#include "SettingProfileEnum.h"
#include "gpiosrvgprot.h"
#include "vmsys.h"
#include "math.h"
#include "vmopt.h"
#include "vmextsensor.h"
#include "vmlog.h"
#include "vm_freescale_MMA7455L.h"
#include "SensorSrvGport.h"
#include "MMI_trc.h"
#ifdef __MMI_MOTION_APP__
static VMINT start_ext_sensor(void);
static VMINT stop_ext_sensor(void);
static VMINT set_numeric_option_ext_sensor(const VMSTR control_name,
VMINT opt_value);
static g_sensor_data_t gData = {0, 0, 0};
static SRV_SENSOR_HANDLE g_s_handle = -1;
static VMINT freeScaleHandle = 0;
static VM_MOTION_SENSITIVE_ENUM motion_sensitive = MOTION_SENSITIVE_HIGH;
#endif
VMINT vm_reg_all_ext_sensors(void)
{
#ifdef __MMI_MOTION_APP__
vm_core_scb_t scb =
{
USE_SENSOR_NAME, start_ext_sensor, stop_ext_sensor,
set_numeric_option_ext_sensor, NULL
};
if (vm_register_ext_sensor(&freeScaleHandle, &scb)
!= VM_EXT_SENSOR_SUCCESS)
{
//vm_log_error("Failed to reg \"%s\" sensor.", USE_SENSOR_NAME);
MMI_TRACE(TRACE_GROUP_5,TRC_MRE_SENSOR_SAL_REG_FAIL,USE_SENSOR_NAME);
return -1;
}
g_s_handle = -1;
motion_sensitive = MOTION_SENSITIVE_HIGH;
#endif
return 0;
}
#ifdef __MMI_MOTION_APP__
#define MTK_ONE_G_VALUE (1000)
void vm_motion_tilt_detail_callback(srv_sensor_type_enum sensor_type, void *sensor_data, void *user_data)
{
srv_sensor_motion_tilt_struct* detail_data = (srv_sensor_motion_tilt_struct*)sensor_data;
if(detail_data == NULL)
{
//add log
return;
}
else
{
gData.x = -((detail_data->acc.x * ONE_G_VALUE) / MTK_ONE_G_VALUE);
gData.y = ((detail_data->acc.y * ONE_G_VALUE) / MTK_ONE_G_VALUE);
gData.z = -((detail_data->acc.y * ONE_G_VALUE) / MTK_ONE_G_VALUE);
vm_notify_data_by_ext_sensor(freeScaleHandle,
&gData, sizeof(g_sensor_data_t));
}
}
static VMINT start_ext_sensor(void)
{
VMINT mtk_gsensor_sensitive = SRV_SENSOR_MOTION_SHAKE_STRONG;
switch (motion_sensitive)
{
case MOTION_SENSITIVE_LOW:
mtk_gsensor_sensitive = SRV_SENSOR_MOTION_SHAKE_WEAK;
break;
case MOTION_SENSITIVE_NORMAL:
mtk_gsensor_sensitive = SRV_SENSOR_MOTION_SHAKE_MEDIUM;
break;
default:
mtk_gsensor_sensitive = SRV_SENSOR_MOTION_SHAKE_STRONG;
break;
}
if (g_s_handle < 0)
{
if ((g_s_handle = srv_sensor_start_listen(SRV_SENSOR_MOTION_TILT,
0, vm_motion_tilt_detail_callback, NULL)) >= 0)
{
return 0;
}
}
return -1;
}
static VMINT stop_ext_sensor(void)
{
if (g_s_handle >= 0)
{
srv_sensor_stop_listen(g_s_handle);
g_s_handle = -1;
return 0;
}
return -1;
}
static VMINT set_numeric_option_ext_sensor(const VMSTR control_name,
VMINT opt_value)
{
if (control_name == NULL || strlen(control_name) == 0
|| strcmp(control_name, MOTION_SENSITIVE) != 0
|| opt_value < MOTION_SENSITIVE_LOW
|| opt_value > MOTION_SENSITIVE_HIGH)
{
return -1;
}
motion_sensitive = opt_value;
return 0;
}
#endif
#endif