sensord: specify the appropriate sensor type based on URI 26/128526/5
authorkibak.yoon <kibak.yoon@samsung.com>
Wed, 10 May 2017 09:12:40 +0000 (18:12 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Wed, 10 May 2017 10:23:00 +0000 (19:23 +0900)
Change-Id: I4facc8b3b31ff2f2e19d9ebdefc0bdeea8ae2f8b
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/server/sensor_handler.cpp
src/shared/sensor_utils.cpp
src/shared/sensor_utils.h

index 4f16244..d72cfb8 100644 (file)
@@ -30,6 +30,9 @@ sensor_handler::sensor_handler(const sensor_info &info)
 {
        const char *priv = sensor::utils::get_privilege(m_info.get_uri());
        m_info.set_privilege(priv);
+
+       sensor_type_t type = sensor::utils::get_type(m_info.get_uri());
+       m_info.set_type(type);
 }
 
 bool sensor_handler::has_observer(sensor_observer *ob)
index 1f09e4b..729c53b 100644 (file)
@@ -155,6 +155,45 @@ const char *sensor::utils::get_privilege(std::string uri)
        return "";
 }
 
+static void init_types(std::map<std::string, sensor_type_t> &sensor_types)
+{
+       ret_if(!sensor_types.empty());
+
+       for (auto it = types.begin(); it != types.end(); ++it) {
+               std::string uri(it->second);
+               std::size_t found = uri.find_last_of("/");
+               std::size_t len = uri.length() - (found + 1);
+
+               sensor_types.emplace(uri.substr(found + 1, len), it->first);
+       }
+}
+
+sensor_type_t sensor::utils::get_type(std::string uri)
+{
+       static std::map<std::string, sensor_type_t> sensor_types;
+       init_types(sensor_types);
+
+       std::size_t start = 0;
+       std::size_t end = uri.length();
+       std::size_t size = uri.size();
+
+       for (int i = 0; i < URI_SENSOR_TYPE_INDEX; ++i) {
+               retv_if(start >= uri.length(), UNKNOWN_SENSOR);
+               start = uri.find(URI_DELIMITER, start + 1);
+               retv_if(start == std::string::npos, UNKNOWN_SENSOR);
+       }
+
+       end = uri.find(URI_DELIMITER, start + 1);
+       retv_if(end == std::string::npos, UNKNOWN_SENSOR);
+
+       size = end - (start + 1);
+
+       auto it = sensor_types.find(uri.substr(start + 1, size));
+       retv_if(it == sensor_types.end(), UNKNOWN_SENSOR);
+
+       return it->second;
+}
+
 unsigned long long sensor::utils::get_timestamp(void)
 {
        struct timespec t;
index 8e80f27..3497dc7 100644 (file)
@@ -30,6 +30,7 @@ namespace sensor {
 namespace utils {
        const char *get_uri(sensor_type_t type);
        const char *get_privilege(std::string uri);
+       sensor_type_t get_type(std::string uri);
 
        unsigned long long get_timestamp(void);
        unsigned long long get_timestamp(timeval *t);