6ad991d4939365cbe314919be15170db2014ad9d
[platform/core/system/sensord.git] / include / sensor_hal_types.h
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #ifndef _SENSOR_HAL_TYPES_H_
19 #define _SENSOR_HAL_TYPES_H_
20
21 #include <stdint.h>
22 #include <stdbool.h>
23
24 #define SENSOR_HAL_VERSION(maj, min) \
25                 ((((maj) & 0xFFFF) << 24) | ((min) & 0xFFFF))
26
27 #ifdef __cplusplus
28 extern "C"
29 {
30 #endif /* __cplusplus */
31
32 /*
33  * Sensor Types
34  * These types are used to controll the sensors
35  *
36  * - base unit
37  *   acceleration values : meter per second^2 (m/s^2)
38  *   magnetic values     : micro-Tesla (uT)
39  *   orientation values  : degrees
40  *   gyroscope values    : degree/s
41  *   temperature values  : degrees centigrade
42  *   proximity valeus    : distance
43  *   light values        : lux
44  *   pressure values     : hectopascal (hPa)
45  *   humidity            : relative humidity (%)
46  */
47 typedef enum {
48         SENSOR_DEVICE_UNKNOWN = -2,
49         SENSOR_DEVICE_ALL = -1,
50         SENSOR_DEVICE_ACCELEROMETER,
51         SENSOR_DEVICE_GRAVITY,
52         SENSOR_DEVICE_LINEAR_ACCELERATION,
53         SENSOR_DEVICE_GEOMAGNETIC,
54         SENSOR_DEVICE_ROTATION_VECTOR,
55         SENSOR_DEVICE_ORIENTATION,
56         SENSOR_DEVICE_GYROSCOPE,
57         SENSOR_DEVICE_LIGHT,
58         SENSOR_DEVICE_PROXIMITY,
59         SENSOR_DEVICE_PRESSURE,
60         SENSOR_DEVICE_ULTRAVIOLET,
61         SENSOR_DEVICE_TEMPERATURE,
62         SENSOR_DEVICE_HUMIDITY,
63         SENSOR_DEVICE_HRM,
64         SENSOR_DEVICE_HRM_LED_GREEN,
65         SENSOR_DEVICE_HRM_LED_IR,
66         SENSOR_DEVICE_HRM_LED_RED,
67         SENSOR_DEVICE_GYROSCOPE_UNCAL,
68         SENSOR_DEVICE_GEOMAGNETIC_UNCAL,
69         SENSOR_DEVICE_GYROSCOPE_RV,
70         SENSOR_DEVICE_GEOMAGNETIC_RV,
71
72         SENSOR_DEVICE_HUMAN_PEDOMETER = 0x300,
73         SENSOR_DEVICE_HUMAN_SLEEP_MONITOR,
74         SENSOR_DEVICE_HUMAN_SLEEP_DETECTOR,
75         SENSOR_DEVICE_HUMAN_STRESS_MONITOR,
76
77         SENSOR_DEVICE_EXERCISE_WALKING = 0x400,
78         SENSOR_DEVICE_EXERCISE_RUNNING,
79         SENSOR_DEVICE_EXERCISE_HIKING,
80         SENSOR_DEVICE_EXERCISE_CYCLING,
81         SENSOR_DEVICE_EXERCISE_ELLIPTICAL,
82         SENSOR_DEVICE_EXERCISE_INDOOR_CYCLING,
83         SENSOR_DEVICE_EXERCISE_ROWING,
84         SENSOR_DEVICE_EXERCISE_STEPPER,
85
86         SENSOR_DEVICE_FUSION = 0x900,
87         SENSOR_DEVICE_AUTO_ROTATION,
88         SENSOR_DEVICE_AUTO_BRIGHTNESS,
89
90         SENSOR_DEVICE_GESTURE_MOVEMENT = 0x1200,
91         SENSOR_DEVICE_GESTURE_WRIST_UP,
92         SENSOR_DEVICE_GESTURE_WRIST_DOWN,
93         SENSOR_DEVICE_GESTURE_MOVEMENT_STATE,
94
95         SENSOR_DEVICE_ACTIVITY_TRACKER = 0x1A00,
96         SENSOR_DEVICE_ACTIVITY_LEVEL_MONITOR,
97         SENSOR_DEVICE_GPS_BATCH,
98
99         SENSOR_DEVICE_HRM_CTRL = 0x1A80,
100
101         SENSOR_DEVICE_WEAR_STATUS = 0x2000,
102         SENSOR_DEVICE_WEAR_ON_MONITOR,
103         SENSOR_DEVICE_NO_MOVE_DETECTOR,
104         SENSOR_DEVICE_RESTING_HR,
105         SENSOR_DEVICE_STEP_LEVEL_MONITOR,
106         SENSOR_DEVICE_EXERCISE_STANDALONE,
107         SENSOR_DEVICE_EXERCISE_HR,
108         SENSOR_DEVICE_WORKOUT,
109         SENSOR_DEVICE_CYCLE_MONITOR,
110         SENSOR_DEVICE_STAIR_TRACKER,
111         SENSOR_DEVICE_PRESSURE_INDICATOR,
112         SENSOR_DEVICE_PRESSURE_ALERT,
113         SENSOR_DEVICE_HR_CALORIE,
114
115         SENSOR_DEVICE_CONTEXT = 0x7000,
116         SENSOR_DEVICE_MOTION,
117         SENSOR_DEVICE_PIR,
118         SENSOR_DEVICE_PIR_LONG,
119         SENSOR_DEVICE_DUST,
120         SENSOR_DEVICE_THERMOMETER,
121         SENSOR_DEVICE_PEDOMETER,
122         SENSOR_DEVICE_FLAT,
123         SENSOR_DEVICE_HRM_RAW,
124         SENSOR_DEVICE_TILT,
125         SENSOR_DEVICE_ROTATION_VECTOR_RAW,
126         SENSOR_DEVICE_GSR,
127         SENSOR_DEVICE_SIMSENSE,
128         SENSOR_DEVICE_PPG,
129
130 } sensor_device_type;
131
132 /*
133  * A platform sensor handler is generated based on this handle
134  * This id can be assigned from HAL developer. so it has to be unique in 1 sensor_device.
135  */
136 typedef struct sensor_info_t {
137         uint32_t id;
138         const char *name;
139         sensor_device_type type;
140         unsigned int event_type; // for Internal API
141         const char *model_name;
142         const char *vendor;
143         float min_range;
144         float max_range;
145         float resolution;
146         int min_interval;
147         int max_batch_count;
148         bool wakeup_supported;
149 } sensor_info_t;
150
151 enum sensor_accuracy_t {
152         SENSOR_ACCURACY_UNDEFINED = -1,
153         SENSOR_ACCURACY_BAD = 0,
154         SENSOR_ACCURACY_NORMAL = 1,
155         SENSOR_ACCURACY_GOOD = 2,
156         SENSOR_ACCURACY_VERYGOOD = 3
157 };
158
159 #define SENSOR_DATA_VALUE_SIZE 16
160
161 /* sensor_data_t */
162 typedef struct sensor_data_t {
163         int accuracy;
164         unsigned long long timestamp;
165         int value_count;
166         float values[SENSOR_DATA_VALUE_SIZE];
167 } sensor_data_t;
168
169 #define SENSORHUB_DATA_VALUE_SIZE 4096
170
171 /* sensorhub_data_t */
172 typedef struct sensorhub_data_t {
173         int accuracy;
174         unsigned long long timestamp;
175
176         /*
177          *  Use "value_count" instead of "hub_data_size"
178          *  which is going to be removed soon
179          */
180         union {
181                 int value_count;
182                 int hub_data_size; /* deprecated */
183         };
184
185         /*
186          *  Use "values" instead of "hub_data"
187          *  which is going to be removed soon
188          */
189         union {
190                 char values[SENSORHUB_DATA_VALUE_SIZE];
191                 char hub_data[SENSORHUB_DATA_VALUE_SIZE]; /* deprecated */
192         };
193 } sensorhub_data_t;
194
195 #define SENSOR_PEDOMETER_DATA_DIFFS_SIZE        20
196
197 typedef struct {
198         int accuracy;
199         unsigned long long timestamp;
200         int value_count;        /* value_count == 8 */
201         float values[SENSOR_DATA_VALUE_SIZE];
202         /* values = {step count, walk step count, run step count,
203                      moving distance, calorie burned, last speed,
204                      last stepping frequency (steps per sec),
205                      last step status (walking, running, ...)} */
206         /* Additional data attributes (not in sensor_data_t)*/
207         int diffs_count;
208         struct differences {
209                 int timestamp;
210                 int steps;
211                 int walk_steps;
212                 int run_steps;
213                 int walk_up_steps;
214                 int walk_down_steps;
215                 int run_up_steps;
216                 int run_down_steps;
217                 float distance;
218                 float calories;
219                 float speed;
220         } diffs[SENSOR_PEDOMETER_DATA_DIFFS_SIZE];
221 } sensor_pedometer_data_t;
222
223 #define CONVERT_TYPE_ATTR(type, index) ((type) << 8 | 0x80 | (index))
224
225 enum sensor_attribute {
226         SENSOR_ATTR_ACCELEROMETER_INJECTION = CONVERT_TYPE_ATTR(SENSOR_DEVICE_ACCELEROMETER, 0xFF),
227         SENSOR_ATTR_ACTIVITY = CONVERT_TYPE_ATTR(SENSOR_DEVICE_ACTIVITY_TRACKER, 0x1),
228
229         SENSOR_ATTR_PEDOMETER_HEIGHT = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x1),
230         SENSOR_ATTR_PEDOMETER_WEIGHT = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x2),
231         SENSOR_ATTR_PEDOMETER_GENDER = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x3),
232
233         SENSOR_ATTR_STRESS_MONITOR_AGE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x1),
234
235         SENSOR_ATTR_EXERCISE_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x1),
236         SENSOR_ATTR_EXERCISE_GPS = CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x2),
237         SENSOR_ATTR_EXERCISE_BATCH_INTERVAL = CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x3),
238         SENSOR_ATTR_EXERCISE_PSERVICE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x4),
239
240         SENSOR_ATTR_CYCLE_DURATION = CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x1),
241         SENSOR_ATTR_CYCLE_HOLDING_POSITION = CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x2),
242         SENSOR_ATTR_CYCLE_VELOCITY = CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x3),
243
244         SENSOR_ATTR_WORKOUT_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_WORKOUT, 0x1),
245         SENSOR_ATTR_WORKOUT_DURATION = CONVERT_TYPE_ATTR(SENSOR_DEVICE_WORKOUT, 0x2),
246
247         SENSOR_ATTR_RESTING_HR_OPR_MODE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x1),
248         SENSOR_ATTR_RESTING_HR_MAX_RHR = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x2),
249         SENSOR_ATTR_RESTING_HR_MIN_RHR = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x3),
250         SENSOR_ATTR_RESTING_HR_AVG_RHR = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x4),
251         SENSOR_ATTR_RESTING_HR_HOUR = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x5),
252         SENSOR_ATTR_RESTING_HR_MIN = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x6),
253         SENSOR_ATTR_RESTING_HR_SEC = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x7),
254         SENSOR_ATTR_RESTING_HR_PROPERTY_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x10),
255         SENSOR_ATTR_RESTING_HR_PROPERTY_HR_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x11),
256         SENSOR_ATTR_RESTING_HR_PROPERTY_HR_VALUE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x12),
257         SENSOR_ATTR_RESTING_HR_PROPERTY_DURATION = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x13),
258         SENSOR_ATTR_RESTING_HR_PROPERTY_ACT_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x14),
259         SENSOR_ATTR_RESTING_HR_PROPERTY_ACT_DUR = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x15),
260         SENSOR_ATTR_RESTING_HR_PROPERTY_CONT_DUR = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x16),
261         SENSOR_ATTR_RESTING_HR_DATA_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x20),
262         SENSOR_ATTR_RESTING_HR_DATA_FLUSH = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x21),
263
264         SENSOR_ATTR_EXERCISE_HR_OPR_MODE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x1),
265         SENSOR_ATTR_EXERCISE_HR_ACTIVITY_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x2),
266         SENSOR_ATTR_EXERCISE_HR_BATCH_DUR = CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x3),
267         SENSOR_ATTR_EXERCISE_HR_FLUSH = CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x4),
268
269         SENSOR_ATTR_PRESSURE_INDICATOR_START = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x1),
270         SENSOR_ATTR_PRESSURE_INDICATOR_STOP = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x2),
271         SENSOR_ATTR_PRESSURE_INDICATOR_FLUSH = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x3),
272         SENSOR_ATTR_PRESSURE_INDICATOR_RESTORE_TIME = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x4),
273         SENSOR_ATTR_PRESSURE_INDICATOR_RESTORE_VALUE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x5),
274         SENSOR_ATTR_PRESSURE_INDICATOR_CURRENT_TIME = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x6),
275
276         SENSOR_ATTR_PRESSURE_ALERT_START = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_ALERT, 0x1),
277         SENSOR_ATTR_PRESSURE_ALERT_STOP = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_ALERT, 0x2),
278
279         SENSOR_ATTR_HR_CALORIE_AGE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x1),
280         SENSOR_ATTR_HR_CALORIE_HEIGHT = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x2),
281         SENSOR_ATTR_HR_CALORIE_WEIGHT = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x3),
282         SENSOR_ATTR_HR_CALORIE_GENDER = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x4),
283         SENSOR_ATTR_HR_CALORIE_INST = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x10),
284         SENSOR_ATTR_HR_CALORIE_EXERCISE_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x11),
285         SENSOR_ATTR_HR_CALORIE_TARGET_CAL = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x12),
286         SENSOR_ATTR_HR_CALORIE_MAX_HEARTRATE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x13),
287         SENSOR_ATTR_HR_CALORIE_FLUSH = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x20),
288 };
289
290 enum sensor_activity {
291         SENSOR_ACTIVITY_UNKNOWN = 1,
292         SENSOR_ACTIVITY_STILL = 2,
293         SENSOR_ACTIVITY_WALKING = 4,
294         SENSOR_ACTIVITY_RUNNING = 8,
295         SENSOR_ACTIVITY_IN_VEHICLE = 16,
296         SENSOR_ACTIVITY_ON_BICYCLE = 32,
297 };
298
299 #ifdef __cplusplus
300 }
301 #endif /* __cplusplus */
302
303 #endif /* _SENSOR_HAL_TYPES_H_ */