sensord: fix the bug related to get sensor all list 73/57773/1
authorkibak.yoon <kibak.yoon@samsung.com>
Fri, 22 Jan 2016 12:54:52 +0000 (21:54 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Fri, 22 Jan 2016 12:54:52 +0000 (21:54 +0900)
there is a problem the way that sensor_raw_map is initialized
using types obtained from sensor plugin.
it changes the order of sensors.

so this patch changes it to the simple and correct way:
  1. get the supported sensor type list
  2. get the sensor list by type and put them to map in order

Change-Id: I09975ef84bb80049caca9a20bdf0d4dd6b164b51
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/server/command_worker.cpp
src/server/sensor_loader.cpp.in
src/server/sensor_loader.h

index 1e1ae3b..cd0b628 100644 (file)
 using std::string;
 using std::vector;
 using std::make_pair;
-using std::set;
 
 command_worker::cmd_handler_t command_worker::m_cmd_handlers[];
 sensor_raw_data_map command_worker::m_sensor_raw_data_map;
 cpacket command_worker::m_sensor_list;
 
-set<unsigned int> priority_list;
+std::set<unsigned int> priority_list;
 
 command_worker::command_worker(const csocket& socket)
 : m_client_id(CLIENT_ID_INVALID)
@@ -141,27 +140,34 @@ void command_worker::get_sensor_list(int permissions, cpacket &sensor_list)
 void command_worker::make_sensor_raw_data_map(void)
 {
        vector<sensor_base *> sensors;
+       vector<sensor_type_t> types;
+       std::vector<sensor_type_t>::iterator it_type;
+       std::vector<sensor_base *>::iterator it_sensor;
        sensor_info info;
        int permission;
 
-       sensors = sensor_loader::get_instance().get_sensors(ALL_SENSOR);
+       types = sensor_loader::get_instance().get_sensor_types();
 
-    std::sort(sensors.begin(), sensors.end());
-    auto last = std::unique(sensors.begin(), sensors.end());
+       it_type = types.begin();
+       while (it_type != types.end()) {
+               sensor_type_t type;
+               type = *it_type;
 
-       auto it_sensor = sensors.begin();
+               sensors = sensor_loader::get_instance().get_sensors(type);
+               it_sensor = sensors.begin();
 
-       while (it_sensor != last) {
-               (*it_sensor)->get_sensor_info(info);
-               permission = (*it_sensor)->get_permission();
+               while (it_sensor != sensors.end()) {
+                       (*it_sensor)->get_sensor_info(info);
+                       permission = (*it_sensor)->get_permission();
 
-               sensor_raw_data_map::iterator it_sensor_raw_data;
-               it_sensor_raw_data = m_sensor_raw_data_map.insert(std::make_pair(permission, raw_data_t()));
+                       sensor_raw_data_map::iterator it_sensor_raw_data;
+                       it_sensor_raw_data = m_sensor_raw_data_map.insert(std::make_pair(permission, raw_data_t()));
 
-               info.get_raw_data(it_sensor_raw_data->second);
-               info.clear();
-
-               ++it_sensor;
+                       info.get_raw_data(it_sensor_raw_data->second);
+                       info.clear();
+                       ++it_sensor;
+               }
+               ++it_type;
        }
 }
 
index 6fd1dfd..897f843 100644 (file)
@@ -252,6 +252,20 @@ sensor_base* sensor_loader::get_sensor(sensor_id_t id)
        return sensors[index];
 }
 
+vector<sensor_type_t> sensor_loader::get_sensor_types(void)
+{
+       vector<sensor_type_t> sensor_types;
+
+       auto it = m_sensors.begin();
+
+       while (it != m_sensors.end()) {
+               sensor_types.push_back((sensor_type_t)(it->first));
+               it = m_sensors.upper_bound(it->first);
+       }
+
+       return sensor_types;
+}
+
 vector<sensor_base *> sensor_loader::get_sensors(sensor_type_t type)
 {
        vector<sensor_base *> sensor_list;
index ae246fd..b0cb1eb 100644 (file)
@@ -59,6 +59,7 @@ public:
        sensor_base* get_sensor(sensor_type_t type);
        sensor_base* get_sensor(sensor_id_t id);
 
+       std::vector<sensor_type_t> get_sensor_types(void);
        std::vector<sensor_base *> get_sensors(sensor_type_t type);
        std::vector<sensor_base *> get_virtual_sensors(void);
 };