Add sensor APIs related to batch event
[platform/core/system/sensord.git] / src / client / sensor_provider.h
1 /*
2  * sensord
3  *
4  * Copyright (c) 2017 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_PROVIDER_H__
21 #define __SENSOR_PROVIDER_H__
22
23 #include <ipc_client.h>
24 #include <channel.h>
25 #include <channel_handler.h>
26 #include <event_loop.h>
27 #include <sensor_internal.h>
28 #include <sensor_info.h>
29 #include <sensor_types.h>
30 #include <map>
31 #include <atomic>
32
33 namespace sensor {
34
35 class sensor_provider {
36 public:
37         sensor_provider(const char *uri);
38         virtual ~sensor_provider();
39
40         const char *get_uri(void);
41         sensor_info *get_sensor_info(void);
42
43         int connect(void);
44         bool disconnect(void);
45         void restore(void);
46
47         void set_start_cb(sensord_provider_start_cb cb, void *user_data);
48         void set_stop_cb(sensord_provider_stop_cb cb, void *user_data);
49         void set_interval_cb(sensord_provider_interval_changed_cb cb, void *user_data);
50         void set_attribute_str_cb(sensord_provider_attribute_str_cb cb, void *user_data);
51
52         int publish(const sensor_data_t &data);
53         int publish(const sensor_data_t data[], const int count);
54
55 private:
56         class channel_handler;
57
58         bool init(const char *uri);
59         void deinit(void);
60
61         bool is_connected(void);
62
63         int serialize(sensor_info *info, char **bytes);
64         int send_sensor_info(sensor_info *info);
65
66         sensor_info m_sensor;
67
68         ipc::ipc_client *m_client;
69         ipc::channel *m_channel;
70         ipc::event_loop m_loop;
71         channel_handler *m_handler;
72         std::atomic<bool> m_connected;
73 };
74
75 }
76
77 #endif /* __SENSOR_PROVIDER_H__ */