sensord: enable sensor-test
[platform/core/system/sensord.git] / src / shared / sensor_hal.h
1 /*
2  * libsensord-share
3  *
4  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19
20 #ifndef _SENSOR_HAL_H_
21 #define _SENSOR_HAL_H_
22
23 #include <stdint.h>
24 #include <stdbool.h>
25
26 #define SENSOR_HAL_VERSION(maj,min) \
27                         ((((maj) & 0xffff) << 24) | ((min) & 0xffff))
28
29 #ifdef __cplusplus
30 extern "C"
31 {
32 #endif /* __cplusplus */
33
34 /*
35  * Sensor Types
36  * These types are used to controll the sensors
37  *
38  * - base unit
39  *   acceleration values : meter per second^2 (m/s^2)
40  *   magnetic values     : micro-Tesla (uT)
41  *   orientation values  : degrees
42  *   gyroscope values    : degree/s
43  *   temperature values  : degrees centigrade
44  *   proximity valeus    : distance
45  *   light values        : lux
46  *   pressure values     : hectopascal (hPa)
47  *   humidity            : relative humidity (%)
48  */
49 typedef enum {
50         SENSOR_DEVICE_UNKNOWN = -2,
51         SENSOR_DEVICE_ALL = -1,
52         SENSOR_DEVICE_ACCELEROMETER,
53         SENSOR_DEVICE_GRAVITY,
54         SENSOR_DEVICE_LINEAR_ACCELERATION,
55         SENSOR_DEVICE_GEOMAGNETIC,
56         SENSOR_DEVICE_ROTATION_VECTOR,
57         SENSOR_DEVICE_ORIENTATION,
58         SENSOR_DEVICE_GYROSCOPE,
59         SENSOR_DEVICE_LIGHT,
60         SENSOR_DEVICE_PROXIMITY,
61         SENSOR_DEVICE_PRESSURE,
62         SENSOR_DEVICE_ULTRAVIOLET,
63         SENSOR_DEVICE_TEMPERATURE,
64         SENSOR_DEVICE_HUMIDITY,
65         SENSOR_DEVICE_HRM,
66         SENSOR_DEVICE_HRM_LED_GREEN,
67         SENSOR_DEVICE_HRM_LED_IR,
68         SENSOR_DEVICE_HRM_LED_RED,
69         SENSOR_DEVICE_GYROSCOPE_UNCAL,
70         SENSOR_DEVICE_GEOMAGNETIC_UNCAL,
71         SENSOR_DEVICE_GYROSCOPE_RV,
72         SENSOR_DEVICE_GEOMAGNETIC_RV,
73
74         SENSOR_DEVICE_ACTIVITY_STATIONARY = 0x100,
75         SENSOR_DEVICE_ACTIVITY_WALK,
76         SENSOR_DEVICE_ACTIVITY_RUN,
77         SENSOR_DEVICE_ACTIVITY_IN_VEHICLE,
78         SENSOR_DEVICE_ACTIVITY_ON_BICYCLE,
79
80         SENSOR_DEVICE_GESTURE_MOVEMENT = 0x200,
81         SENSOR_DEVICE_GESTURE_WRIST_UP,
82         SENSOR_DEVICE_GESTURE_WRIST_DOWN,
83
84         SENSOR_DEVICE_HUMAN_PEDOMETER = 0x300,
85         SENSOR_DEVICE_HUMAN_SLEEP_MONITOR,
86
87         SENSOR_DEVICE_FUSION = 0x900,
88         SENSOR_DEVICE_AUTO_ROTATION,
89
90         SENSOR_DEVICE_CONTEXT = 0x1000,
91         SENSOR_DEVICE_MOTION,
92         SENSOR_DEVICE_PIR,
93         SENSOR_DEVICE_PIR_LONG,
94         SENSOR_DEVICE_DUST,
95         SENSOR_DEVICE_THERMOMETER,
96         SENSOR_DEVICE_PEDOMETER,
97         SENSOR_DEVICE_FLAT,
98         SENSOR_DEVICE_HRM_RAW,
99         SENSOR_DEVICE_TILT,
100         SENSOR_DEVICE_ROTATION_VECTOR_RAW,
101 } sensor_device_type;
102
103 typedef struct sensor_info_t {
104         const char *model_name;
105         const char *vendor;
106         float min_range;
107         float max_range;
108         float resolution;
109         int min_interval;
110         int max_batch_count;
111         bool wakeup_supported;
112 } sensor_info_t;
113
114 /*
115  * A platform sensor handler is generated based on this handle
116  * ID can be assigned from HAL developer. so it has to be unique in HAL.
117  */
118 typedef struct sensor_handle_t {
119         uint16_t id;
120         const char *name;
121         sensor_device_type type;
122         unsigned int event_type; // for Internal API
123         sensor_info_t info;
124 } sensor_handle_t;
125
126 enum sensor_accuracy_t {
127         SENSOR_ACCURACY_UNDEFINED = -1,
128         SENSOR_ACCURACY_BAD = 0,
129         SENSOR_ACCURACY_NORMAL =1,
130         SENSOR_ACCURACY_GOOD = 2,
131         SENSOR_ACCURACY_VERYGOOD = 3
132 };
133
134 #define SENSOR_DATA_VALUE_SIZE 16
135
136 /* sensor_data_t */
137 typedef struct sensor_data_t {
138         int accuracy;
139         unsigned long long timestamp;
140         int value_count;
141         float values[SENSOR_DATA_VALUE_SIZE];
142 } sensor_data_t;
143
144 #ifdef __cplusplus
145 }
146 #endif /* __cplusplus */
147
148 #ifdef __cplusplus
149 /*
150  * Create devices
151  */
152 typedef void *sensor_device_t;
153 typedef int (*create_t)(sensor_device_t **devices);
154
155 /*
156  * Sensor device interface
157  * 1 device must be abstracted from 1 device event node
158  */
159 class sensor_device
160 {
161 public:
162         virtual ~sensor_device() {}
163
164         uint32_t get_hal_version(void)
165         {
166                 return SENSOR_HAL_VERSION(1, 0);
167         }
168
169         virtual int get_poll_fd(void) = 0;
170         virtual int get_sensors(const sensor_handle_t **sensors) = 0;
171
172         virtual bool enable(uint16_t id) = 0;
173         virtual bool disable(uint16_t id) = 0;
174
175         virtual bool set_interval(uint16_t id, unsigned long val) = 0;
176         virtual bool set_batch_latency(uint16_t id, unsigned long val) = 0;
177         virtual bool set_attribute(uint16_t id, int32_t attribute, int32_t value) = 0;
178
179         virtual int read_fd(uint16_t **ids) = 0;
180         virtual int get_data(uint16_t id, sensor_data_t **data, int *length) = 0;
181
182         virtual bool flush(uint16_t id) = 0;
183 };
184 #endif /* __cplusplus */
185
186 #endif /* _SENSOR_HAL_H_ */