summaryrefslogtreecommitdiffstats
path: root/libsensors/sensors.h
blob: b13ea06aab2abed6240594fdf0f0bdabb70b8391 (plain)
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
/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ANDROID_SENSORS_H
#define ANDROID_SENSORS_H

#include <stdint.h>
#include <errno.h>
#include <sys/cdefs.h>
#include <sys/types.h>

#include <linux/input.h>

#include <hardware/hardware.h>
#include <hardware/sensors.h>

__BEGIN_DECLS

/*****************************************************************************/

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))

#define ID_A  (0)
#define ID_M  (1)
#define ID_O  (2)
#define ID_L  (3)
#define ID_P  (4)
#define ID_GY (5)

/*****************************************************************************/

/*
 * The SENSORS Module
 */

/* the CM3663 is a binary proximity sensor that triggers around 6 cm on
 * this hardware */
#define PROXIMITY_THRESHOLD_CM  6.0f

/*****************************************************************************/

#define AKM_DEVICE_NAME     "/dev/akm8975"
#define CM_DEVICE_NAME      "/dev/i2c11" // FIXME Proximity
#define LS_DEVICE_NAME      "/dev/i2c11" // FIXME Lig

/*
    E/Sensors ( 2656): AkmSensor: processing event (type=0, code=0)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=8)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=3)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=4)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=5)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=0)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=1)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=2)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=6)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=7)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=9)
    E/Sensors ( 2656): AkmSensor: processing event (type=0, code=0)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=8)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=3)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=4)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=5)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=0)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=1)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=2)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=6)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=7)
    E/Sensors ( 2656): AkmSensor: processing event (type=2, code=9)
*/

// for akm8975
#define EVENT_TYPE_ACCEL_X          ABS_Y  //1
#define EVENT_TYPE_ACCEL_Y          ABS_X  //0
#define EVENT_TYPE_ACCEL_Z          ABS_Z  //2
//#define EVENT_TYPE_ACCEL_STATUS     ABS_WHEEL //8

#define EVENT_TYPE_YAW              ABS_RX  //3
#define EVENT_TYPE_PITCH            ABS_RY  //4
#define EVENT_TYPE_ROLL             ABS_RZ  //5
#define EVENT_TYPE_ORIENT_STATUS    ABS_WHEEL //8

#define EVENT_TYPE_MAGV_X           ABS_RUDDER  // 6
#define EVENT_TYPE_MAGV_Y           ABS_THROTTLE  // 7
#define EVENT_TYPE_MAGV_Z           ABS_GAS  // 9

#define EVENT_TYPE_TEMPERATURE      ABS_THROTTLE
#define EVENT_TYPE_STEP_COUNT       ABS_GAS
#define EVENT_TYPE_PROXIMITY        ABS_DISTANCE
#define EVENT_TYPE_LIGHT            ABS_MISC

#define EVENT_TYPE_GYRO_X           REL_RX
#define EVENT_TYPE_GYRO_Y           REL_RY
#define EVENT_TYPE_GYRO_Z           REL_RZ

// 90 LSB = 1G for KR3DM
#define LSB                         (90.0f)
#define NUMOFACCDATA                (8.0f)

// conversion of acceleration data to SI units (m/s^2)
#define RANGE_A                     (2*GRAVITY_EARTH)
#define CONVERT_A                   (GRAVITY_EARTH / LSB / NUMOFACCDATA)
#define CONVERT_A_X                 (CONVERT_A)
#define CONVERT_A_Y                 (-CONVERT_A)
#define CONVERT_A_Z                 (-CONVERT_A)

// conversion of magnetic data to uT units
#define CONVERT_M                   (1.0f/16.0f)
#define CONVERT_M_X                 (CONVERT_M)
#define CONVERT_M_Y                 (-CONVERT_M)
#define CONVERT_M_Z                 (CONVERT_M)

/* conversion of orientation data to degree units */
#define CONVERT_O                   (1.0f/64.0f)
#define CONVERT_O_A                 (CONVERT_O)
#define CONVERT_O_P                 (CONVERT_O)
#define CONVERT_O_R                 (CONVERT_O)

// conversion of gyro data to SI units (radian/sec)
#define RANGE_GYRO                  (500.0f*(float)M_PI/180.0f)
#define CONVERT_GYRO                ((70.0f / 4000.0f) * ((float)M_PI / 180.0f))
#define CONVERT_GYRO_X              (CONVERT_GYRO)
#define CONVERT_GYRO_Y              (CONVERT_GYRO)
#define CONVERT_GYRO_Z              (CONVERT_GYRO)

#define SENSOR_STATE_MASK           (0x7FFF)

/*****************************************************************************/

__END_DECLS

#endif  // ANDROID_SENSORS_H