blob: bcc81517676d0d39fc49ce5366b7f302176a7b4d [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2005
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * motion_sensor.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This Module is for motion sensor driver.
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 *------------------------------------------------------------------------------
59 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
60 *============================================================================
61 ****************************************************************************/
62
63#ifndef _MOTIONSENSOR_H
64#define _MOTIONSENSOR_H
65
66#define SIN_INTERVAL_NUM 91
67#define SIN_0 0
68#define SIN_1 9
69#define SIN_2 18
70#define SIN_3 27
71#define SIN_4 36
72#define SIN_5 45
73#define SIN_6 53
74#define SIN_7 62
75#define SIN_8 71
76#define SIN_9 80
77#define SIN_10 89
78#define SIN_11 98
79#define SIN_12 106
80#define SIN_13 115
81#define SIN_14 124
82#define SIN_15 132
83#define SIN_16 141
84#define SIN_17 150
85#define SIN_18 158
86#define SIN_19 167
87#define SIN_20 175
88#define SIN_21 183
89#define SIN_22 192
90#define SIN_23 200
91#define SIN_24 208
92#define SIN_25 216
93#define SIN_26 224
94#define SIN_27 232
95#define SIN_28 240
96#define SIN_29 248
97#define SIN_30 256
98#define SIN_31 264
99#define SIN_32 271
100#define SIN_33 279
101#define SIN_34 286
102#define SIN_35 294
103#define SIN_36 301
104#define SIN_37 308
105#define SIN_38 315
106#define SIN_39 322
107#define SIN_40 329
108#define SIN_41 336
109#define SIN_42 342
110#define SIN_43 349
111#define SIN_44 356
112#define SIN_45 362
113#define SIN_46 368
114#define SIN_47 374
115#define SIN_48 380
116#define SIN_49 386
117#define SIN_50 392
118#define SIN_51 398
119#define SIN_52 403
120#define SIN_53 409
121#define SIN_54 414
122#define SIN_55 419
123#define SIN_56 424
124#define SIN_57 429
125#define SIN_58 434
126#define SIN_59 439
127#define SIN_60 443
128#define SIN_61 448
129#define SIN_62 452
130#define SIN_63 456
131#define SIN_64 460
132#define SIN_65 464
133#define SIN_66 468
134#define SIN_67 471
135#define SIN_68 475
136#define SIN_69 478
137#define SIN_70 481
138#define SIN_71 484
139#define SIN_72 487
140#define SIN_73 490
141#define SIN_74 492
142#define SIN_75 494
143#define SIN_76 497
144#define SIN_77 499
145#define SIN_78 501
146#define SIN_79 503
147#define SIN_80 504
148#define SIN_81 506
149#define SIN_82 507
150#define SIN_83 508
151#define SIN_84 509
152#define SIN_85 510
153#define SIN_86 511
154#define SIN_87 511
155#define SIN_88 512
156#define SIN_89 512
157#define SIN_90 512
158
159/* Must be a power of 2. */
160#define MOTION_SENSOR_BUFFER_SIZE 128
161
162typedef enum {
163 BUFF_EMPTY,
164 BUFF_DATA_EXIST,
165 BUFF_FULL
166} Motion_Sensor_BuffState_enum;
167
168typedef struct
169{
170 kal_int16 x_acc;
171 kal_int16 y_acc;
172 kal_int16 z_acc;
173}MotionSensorDataStruct;
174
175typedef struct
176{
177 kal_int16 x_gain;
178 kal_int16 y_gain;
179 kal_int16 z_gain;
180 kal_int16 x_offset;
181 kal_int16 y_offset;
182 kal_int16 z_offset;
183}MotionSensorCaliStruct;
184
185typedef void (*MS_DATA_FUNC)(void *parameter, Motion_Sensor_BuffState_enum state);
186typedef void (*MS_INT_CB_FUNC)(void);
187
188typedef struct
189{
190 MotionSensorCaliStruct cali;
191 MotionSensorDataStruct pre;
192 kal_uint8 sample_period;
193 kal_uint8 gpt_handle;
194 kal_timerid motionsensor_timerid;
195 kal_uint32 acc_offset;
196 kal_uint32 low_g_level;
197 kal_uint32 high_g_level;
198 kal_uint32 low_g_debounce;
199 kal_uint32 high_g_debounce;
200 MS_DATA_FUNC cb_func;
201 MS_INT_CB_FUNC low_g_cb;
202 MS_INT_CB_FUNC high_g_cb;
203 void *para;
204}MotionSensorStruct;
205
206typedef struct
207{
208 MotionSensorDataStruct motion_sensor_data[MOTION_SENSOR_BUFFER_SIZE];
209 kal_uint16 motion_sensor_rindex;
210 kal_uint16 motion_sensor_windex;
211}MotionSensorBufferStruct;
212
213/*customization part*/
214typedef struct {
215 /*ADC*/
216 kal_uint16 x_0g_adc;
217 kal_uint16 x_1g_adc;
218 kal_uint16 x_minus1g_adc;
219 kal_uint16 y_0g_adc;
220 kal_uint16 y_1g_adc;
221 kal_uint16 y_minus1g_adc;
222 kal_uint16 z_0g_adc;
223 kal_uint16 z_1g_adc;
224 kal_uint16 z_minus1g_adc;
225
226 kal_bool int_support;
227 kal_uint8 int_level;
228 kal_uint8 int_chan;
229} MotionSensor_custom_data_struct;
230
231typedef struct {
232 MotionSensor_custom_data_struct * (*ms_get_data)(void);
233 void (*ms_read_adc)(kal_uint16 *x, kal_uint16 *y, kal_uint16 *z);
234 void (*ms_custom_init)(void);
235 void (*ms_power_up)(void);
236 void (*ms_power_down)(void);
237 /*read interrupt*/
238 void (*ms_read_int_status)(kal_bool *low_g, kal_bool *high_g);
239 /*clear interrupt*/
240 void (*ms_clear_int_status)(void);
241 void (*ms_configure_low_g)(kal_uint32 debounce, kal_uint32 threshold);
242 void (*ms_configure_high_g)(kal_uint32 debounce, kal_uint32 threshold);
243}MotionSensor_customize_function_struct;
244
245/*For MMI */
246extern void motion_sensor_complete_cali(void);
247extern void motion_sensor_cancel_cali(void);
248extern void motion_sensor_start_cali(void);
249extern void motion_sensor_read_cali(MotionSensorCaliStruct *cali);
250extern void motion_sensor_set_cali(MotionSensorCaliStruct cali);
251extern kal_bool motion_sensor_power(kal_bool enable);
252extern void motion_sensor_conf_sample_period(kal_uint32 period);
253extern void motion_sensor_flush_buff(void);
254extern void motion_sensor_cb_registration(MS_DATA_FUNC cb_fun, void *para);
255extern void motion_sensor_sample(kal_bool enable);
256extern void motion_sensor_conf_filter(kal_uint32 acc_offset);
257extern kal_bool motion_sensor_get_data(MotionSensorDataStruct *ms_data);
258extern void motion_sensor_int_cb_registration(MS_INT_CB_FUNC low_g_cb_fun, MS_INT_CB_FUNC high_g_cb_fun);
259extern void motion_sensor_int_config(kal_uint32 low_g_level, kal_uint32 high_g_level,
260 kal_uint32 low_g_debounce, kal_uint32 high_g_debounce);
261extern void motion_sensor_int_enable(kal_bool enable);
262
263// MoDIS parser skip start
264// Private APIs
265/*For driver */
266extern void motion_sensor_eint_hisr(void);
267extern kal_bool motion_sensor_filter(MotionSensorDataStruct data);
268extern void motion_sensor_sample_cb(void *parameter);
269extern void motion_sensor_check_cali(kal_int16 x, kal_int16 y, kal_int16 z);
270extern void motion_sensor_init(void);
271extern void motion_sensor_get_acc(MotionSensorDataStruct *acc_data,
272 kal_uint16 x_adc, kal_uint16 y_adc, kal_uint16 z_adc);
273extern void motion_sensor_sample_cb(void *parameter);
274extern void motion_sensor_reset(void);
275#ifdef __MOTION_SENSOR_TILT_SUPPORT__
276extern void motion_sensor_get_tilt(kal_uint16 x, kal_uint16 y, kal_uint16 z);
277extern kal_uint16 motion_sensor_get_angle(kal_uint16 value);
278#endif
279
280// MoDIS parser skip end
281
282#endif
283