sensor-hal: re-organize build procedure
[platform/adaptation/tm1/sensor-hal-tm1.git] / src / 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 <string>
25 #include <vector>
26 #include <sensor_common.h>
27
28 #define SENSOR_HAL_VERSION(maj,min) \
29                         ((((maj) & 0xffff) << 24) | ((min) & 0xffff))
30
31 /*
32  * Sensor Types
33  * These types are used to controll the sensors
34  *
35  * - base unit
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
42  *   light values        : lux
43  *   pressure values     : hectopascal (hPa)
44  *   humidity            : relative humidity (%)
45  */
46 typedef enum {
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,
56         SENSOR_DEVICE_LIGHT,
57         SENSOR_DEVICE_PROXIMITY,
58         SENSOR_DEVICE_PRESSURE,
59         SENSOR_DEVICE_ULTRAVIOLET,
60         SENSOR_DEVICE_TEMPERATURE,
61         SENSOR_DEVICE_HUMIDITY,
62         SENSOR_DEVICE_HRM,
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,
70
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,
76
77         SENSOR_DEVICE_GESTURE_MOVEMENT = 0x200,
78         SENSOR_DEVICE_GESTURE_WRIST_UP,
79         SENSOR_DEVICE_GESTURE_WRIST_DOWN,
80
81         SENSOR_DEVICE_HUMAN_PEDOMETER = 0x300,
82         SENSOR_DEVICE_HUMAN_SLEEP_MONITOR,
83
84         SENSOR_DEVICE_FUSION = 0x900,
85         SENSOR_DEVICE_AUTO_ROTATION,
86
87         SENSOR_DEVICE_CONTEXT = 0x1000,
88         SENSOR_DEVICE_MOTION,
89         SENSOR_DEVICE_PIR,
90         SENSOR_DEVICE_PIR_LONG,
91         SENSOR_DEVICE_DUST,
92         SENSOR_DEVICE_THERMOMETER,
93         SENSOR_DEVICE_PEDOMETER,
94         SENSOR_DEVICE_FLAT,
95         SENSOR_DEVICE_HRM_RAW,
96         SENSOR_DEVICE_TILT,
97         SENSOR_DEVICE_ROTATION_VECTOR_RAW,
98 } sensor_device_type;
99
100 /*
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.
103  */
104 typedef struct sensor_handle_t {
105         uint32_t id;
106         std::string name;
107         sensor_device_type type;
108         unsigned int event_type; // for Internal API
109         sensor_properties_s properties;
110 } sensor_handle_t;
111
112 /*
113  * Sensor device interface
114  * 1 HAL must be abstracted from 1 device event node
115  */
116 class sensor_device
117 {
118 public:
119         virtual ~sensor_device() {}
120
121         uint32_t get_hal_version(void)
122         {
123                 return SENSOR_HAL_VERSION(1, 0);
124         }
125
126         virtual int get_poll_fd(void) = 0;
127         virtual bool get_sensors(std::vector<sensor_handle_t> &sensors) = 0;
128
129         /* enable/disable sensor device */
130         virtual bool enable(uint32_t id) = 0;
131         virtual bool disable(uint32_t id) = 0;
132
133         /* set_command or set_option? */
134         virtual bool set_command(uint32_t id, std::string command, std::string value) = 0;
135
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;
139
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;
144
145         /* TODO: use get_sensors() instead of get_properties() */
146         virtual bool get_properties(uint32_t id, sensor_properties_s &properties) = 0;
147 };
148 #endif /* _SENSOR_HAL_H_ */