Merge "Adding AK8975 geo-sensor info in sensors.xml.in required by geo-plugin" into...
[platform/core/system/sensord.git] / src / shared / csensor_event_dispatcher.h
1 /*
2  * libsensord-share
3  *
4  * Copyright (c) 2014 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_EVENT_DISPATCHER_H_
21 #define _SENSOR_EVENT_DISPATCHER_H_
22
23 #include <sf_common.h>
24 #include <csensor_event_queue.h>
25 #include <cclient_info_manager.h>
26 #include <csocket.h>
27 #include <virtual_sensor.h>
28 #include <vconf.h>
29
30 typedef map<unsigned int, sensor_event_t> event_type_last_event_map;
31 typedef list<virtual_sensor *> virtual_sensors;
32
33 class csensor_event_dispatcher
34 {
35 private:
36         bool m_lcd_on;
37         csocket m_accept_socket;
38         cmutex m_mutex;
39         cmutex m_last_events_mutex;
40         event_type_last_event_map m_last_events;
41         virtual_sensors m_active_virtual_sensors;
42         cmutex m_active_virtual_sensors_mutex;
43
44         csensor_event_dispatcher();
45         ~csensor_event_dispatcher();
46         csensor_event_dispatcher(csensor_event_dispatcher const &) {};
47         csensor_event_dispatcher &operator=(csensor_event_dispatcher const &);
48
49         void accept_connections(void);
50         void accept_event_channel(csocket client_socket);
51
52         void dispatch_event(void);
53         void send_sensor_events(void *events, int event_cnt, bool is_hub_event, event_situation situation);
54         static void situation_watcher(keynode_t *node, void *user_data);
55         bool is_lcd_on(void);
56         static cclient_info_manager &get_client_info_manager(void);
57         static csensor_event_queue &get_event_queue(void);
58
59         bool is_record_event(unsigned int event_type);
60         void put_last_event(unsigned int event_type, const sensor_event_t &event);
61         bool get_last_event(unsigned int event_type, sensor_event_t &event);
62
63         bool has_active_virtual_sensor(virtual_sensor *sensor);
64         virtual_sensors get_active_virtual_sensors(void);
65
66         static bool compare_by_timestamp(const sensor_event_t &a, const sensor_event_t &b);
67         void sort_sensor_events(sensor_event_t *events, unsigned int cnt);
68 public:
69         static csensor_event_dispatcher &get_instance() {
70                 static csensor_event_dispatcher inst;
71                 return inst;
72         }
73
74         bool run(void);
75         void request_last_event(int client_id, const sensor_type_t sensor);
76
77         bool add_active_virtual_sensor(virtual_sensor *sensor);
78         bool delete_active_virtual_sensor(virtual_sensor *sensor);
79 };
80
81 #endif /*_CSENSOR_EVENT_DISPATCHER_H_*/