4 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #ifndef _SENSOR_HAL_H_
21 #define _SENSOR_HAL_H_
26 #include <sensor_common.h>
28 #define SENSOR_HAL_VERSION(maj,min) \
29 ((((maj) & 0xffff) << 24) | ((min) & 0xffff))
33 * These types are used to controll the sensors
36 * acceleration values : meter per second^2 (m/s^2)
37 * magnetic values : micro-Tesla (uT)
38 * orientation values : degrees
39 * gyroscope values : degree/s
40 * temperature values : degrees centigrade
41 * proximity valeus : distance
43 * pressure values : hectopascal (hPa)
44 * humidity : relative humidity (%)
47 SENSOR_DEVICE_UNKNOWN = -2,
48 SENSOR_DEVICE_ALL = -1,
49 SENSOR_DEVICE_ACCELEROMETER,
50 SENSOR_DEVICE_GRAVITY,
51 SENSOR_DEVICE_LINEAR_ACCELERATION,
52 SENSOR_DEVICE_GEOMAGNETIC,
53 SENSOR_DEVICE_ROTATION_VECTOR,
54 SENSOR_DEVICE_ORIENTATION,
55 SENSOR_DEVICE_GYROSCOPE,
57 SENSOR_DEVICE_PROXIMITY,
58 SENSOR_DEVICE_PRESSURE,
59 SENSOR_DEVICE_ULTRAVIOLET,
60 SENSOR_DEVICE_TEMPERATURE,
61 SENSOR_DEVICE_HUMIDITY,
63 SENSOR_DEVICE_HRM_LED_GREEN,
64 SENSOR_DEVICE_HRM_LED_IR,
65 SENSOR_DEVICE_HRM_LED_RED,
66 SENSOR_DEVICE_GYROSCOPE_UNCAL,
67 SENSOR_DEVICE_GEOMAGNETIC_UNCAL,
68 SENSOR_DEVICE_GYROSCOPE_RV,
69 SENSOR_DEVICE_GEOMAGNETIC_RV,
71 SENSOR_DEVICE_ACTIVITY_STATIONARY = 0x100,
72 SENSOR_DEVICE_ACTIVITY_WALK,
73 SENSOR_DEVICE_ACTIVITY_RUN,
74 SENSOR_DEVICE_ACTIVITY_IN_VEHICLE,
75 SENSOR_DEVICE_ACTIVITY_ON_BICYCLE,
77 SENSOR_DEVICE_GESTURE_MOVEMENT = 0x200,
78 SENSOR_DEVICE_GESTURE_WRIST_UP,
79 SENSOR_DEVICE_GESTURE_WRIST_DOWN,
81 SENSOR_DEVICE_HUMAN_PEDOMETER = 0x300,
82 SENSOR_DEVICE_HUMAN_SLEEP_MONITOR,
84 SENSOR_DEVICE_FUSION = 0x900,
85 SENSOR_DEVICE_AUTO_ROTATION,
87 SENSOR_DEVICE_CONTEXT = 0x1000,
90 SENSOR_DEVICE_PIR_LONG,
92 SENSOR_DEVICE_THERMOMETER,
93 SENSOR_DEVICE_PEDOMETER,
95 SENSOR_DEVICE_HRM_RAW,
97 SENSOR_DEVICE_ROTATION_VECTOR_RAW,
101 * A platform sensor handler is generated based on this handle
102 * ID can be assigned from HAL developer. so it has to be unique in HAL.
104 typedef struct sensor_handle_t {
107 sensor_device_type type;
108 unsigned int event_type; // for Internal API
109 sensor_properties_s properties;
113 * Sensor device interface
114 * 1 HAL must be abstracted from 1 device event node
119 virtual ~sensor_device() {}
121 uint32_t get_hal_version(void)
123 return SENSOR_HAL_VERSION(1, 0);
126 virtual int get_poll_fd(void) = 0;
127 virtual bool get_sensors(std::vector<sensor_handle_t> &sensors) = 0;
129 /* enable/disable sensor device */
130 virtual bool enable(uint32_t id) = 0;
131 virtual bool disable(uint32_t id) = 0;
133 /* set_command or set_option? */
134 virtual bool set_command(uint32_t id, std::string command, std::string value) = 0;
136 /* the belows can be merged to one */
137 virtual bool set_interval(uint32_t id, unsigned long val) = 0;
138 virtual bool set_batch_latency(uint32_t id, unsigned long val) = 0;
140 /* sensor fw read the data when is_data_ready() is true */
141 virtual bool is_data_ready() = 0;
142 virtual bool get_sensor_data(uint32_t id, sensor_data_t &data) = 0;
143 virtual int get_sensor_event(uint32_t id, sensor_event_t **event) = 0;
145 /* TODO: use get_sensors() instead of get_properties() */
146 virtual bool get_properties(uint32_t id, sensor_properties_s &properties) = 0;
148 #endif /* _SENSOR_HAL_H_ */