2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #ifndef _SENSOR_HAL_TYPES_H_
19 #define _SENSOR_HAL_TYPES_H_
24 #define SENSOR_HAL_VERSION(maj, min) \
25 ((((maj) & 0xFFFF) << 24) | ((min) & 0xFFFF))
30 #endif /* __cplusplus */
34 * These types are used to controll the sensors
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
44 * pressure values : hectopascal (hPa)
45 * humidity : relative humidity (%)
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,
58 SENSOR_DEVICE_PROXIMITY,
59 SENSOR_DEVICE_PRESSURE,
60 SENSOR_DEVICE_ULTRAVIOLET,
61 SENSOR_DEVICE_TEMPERATURE,
62 SENSOR_DEVICE_HUMIDITY,
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,
72 SENSOR_DEVICE_HUMAN_PEDOMETER = 0x300,
73 SENSOR_DEVICE_HUMAN_SLEEP_MONITOR,
74 SENSOR_DEVICE_HUMAN_SLEEP_DETECTOR,
75 SENSOR_DEVICE_HUMAN_STRESS_MONITOR,
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,
86 SENSOR_DEVICE_FUSION = 0x900,
87 SENSOR_DEVICE_AUTO_ROTATION,
88 SENSOR_DEVICE_AUTO_BRIGHTNESS,
90 SENSOR_DEVICE_GESTURE_MOVEMENT = 0x1200,
91 SENSOR_DEVICE_GESTURE_WRIST_UP,
92 SENSOR_DEVICE_GESTURE_WRIST_DOWN,
93 SENSOR_DEVICE_GESTURE_MOVEMENT_STATE,
95 SENSOR_DEVICE_ACTIVITY_TRACKER = 0x1A00,
96 SENSOR_DEVICE_ACTIVITY_LEVEL_MONITOR,
97 SENSOR_DEVICE_GPS_BATCH,
99 SENSOR_DEVICE_HRM_CTRL = 0x1A80,
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,
115 SENSOR_DEVICE_CONTEXT = 0x7000,
116 SENSOR_DEVICE_MOTION,
118 SENSOR_DEVICE_PIR_LONG,
120 SENSOR_DEVICE_THERMOMETER,
121 SENSOR_DEVICE_PEDOMETER,
123 SENSOR_DEVICE_HRM_RAW,
125 SENSOR_DEVICE_ROTATION_VECTOR_RAW,
127 SENSOR_DEVICE_SIMSENSE,
130 } sensor_device_type;
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.
136 typedef struct sensor_info_t {
139 sensor_device_type type;
140 unsigned int event_type; // for Internal API
141 const char *model_name;
148 bool wakeup_supported;
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
159 #define SENSOR_DATA_VALUE_SIZE 16
162 typedef struct sensor_data_t {
164 unsigned long long timestamp;
166 float values[SENSOR_DATA_VALUE_SIZE];
169 #define SENSORHUB_DATA_VALUE_SIZE 4096
171 /* sensorhub_data_t */
172 typedef struct sensorhub_data_t {
174 unsigned long long timestamp;
177 * Use "value_count" instead of "hub_data_size"
178 * which is going to be removed soon
182 int hub_data_size; /* deprecated */
186 * Use "values" instead of "hub_data"
187 * which is going to be removed soon
190 char values[SENSORHUB_DATA_VALUE_SIZE];
191 char hub_data[SENSORHUB_DATA_VALUE_SIZE]; /* deprecated */
195 #define SENSOR_PEDOMETER_DATA_DIFFS_SIZE 20
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)*/
220 } diffs[SENSOR_PEDOMETER_DATA_DIFFS_SIZE];
221 } sensor_pedometer_data_t;
223 #define CONVERT_TYPE_ATTR(type, index) ((type) << 8 | 0x80 | (index))
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),
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),
233 SENSOR_ATTR_STRESS_MONITOR_AGE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x1),
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),
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),
244 SENSOR_ATTR_WORKOUT_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_WORKOUT, 0x1),
245 SENSOR_ATTR_WORKOUT_DURATION = CONVERT_TYPE_ATTR(SENSOR_DEVICE_WORKOUT, 0x2),
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),
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),
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),
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),
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),
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,
301 #endif /* __cplusplus */
303 #endif /* _SENSOR_HAL_TYPES_H_ */