Updating virtual sensor xml configuration for multiple devices 00/33000/1
authorRamasamy <ram.kannan@samsung.com>
Fri, 2 Jan 2015 04:23:28 +0000 (09:53 +0530)
committerRamasamy <ram.kannan@samsung.com>
Fri, 2 Jan 2015 04:25:31 +0000 (09:55 +0530)
- Updated virtual sensor xml configuration file to support
multiple devices and emulators
- Updated virtual sensor xml parser to support additional
functionality

Change-Id: I647958a6010e7ecebfc282ba72bf61ac6706d5cf

src/shared/cvirtual_sensor_config.cpp
src/shared/cvirtual_sensor_config.h
virtual_sensors.xml.in

index c0d0f0b..a636e87 100755 (executable)
 using std::string;
 using std::stringstream;
 
-#define ROOT_ELEMENT   "VIRTUAL_SENSOR"
-#define TEXT_ELEMENT   "text"
-#define MODEL_ID_ATTR  "id"
-#define DEFAULT_ATTR   "value"
-#define DEFAULT_ATTR1  "value1"
-#define DEFAULT_ATTR2  "value2"
-#define DEFAULT_ATTR3  "value3"
+#define ROOT_ELEMENT           "VIRTUAL_SENSOR"
+#define DEVICE_TYPE_ATTR       "type"
+#define TEXT_ELEMENT           "text"
+#define DEFAULT_ATTR           "value"
+#define DEFAULT_ATTR1          "value1"
+#define DEFAULT_ATTR2          "value2"
+#define DEFAULT_ATTR3          "value3"
 
 cvirtual_sensor_config::cvirtual_sensor_config()
 {
@@ -85,57 +85,78 @@ bool cvirtual_sensor_config::load_config(const string& config_path)
                return false;
        }
 
+       xmlNodePtr device_node_ptr;
        xmlNodePtr virtual_sensor_node_ptr;
        xmlNodePtr element_node_ptr;
        xmlAttrPtr attr_ptr;
        char* prop = NULL;
 
-       virtual_sensor_node_ptr = cur->xmlChildrenNode;
-
-       while (virtual_sensor_node_ptr != NULL) {
+       device_node_ptr = cur->xmlChildrenNode;
+       while (device_node_ptr != NULL){
                //skip garbage element, [text]
-               if (!xmlStrcmp(virtual_sensor_node_ptr->name,(const xmlChar *)TEXT_ELEMENT)) {
-                       virtual_sensor_node_ptr = virtual_sensor_node_ptr->next;
+               if (!xmlStrcmp(device_node_ptr->name,(const xmlChar *)TEXT_ELEMENT)) {
+                       device_node_ptr = device_node_ptr->next;
                        continue;
                }
 
-               //insert Model_list to config map
-               m_virtual_sensor_config[(const char*)virtual_sensor_node_ptr->name];
-               DBG("<%s>\n",(const char*)virtual_sensor_node_ptr->name);
 
-               element_node_ptr = virtual_sensor_node_ptr->xmlChildrenNode;
-               while (element_node_ptr != NULL) {
+               string device_type;
+               prop = (char*)xmlGetProp(device_node_ptr,(const xmlChar*)DEVICE_TYPE_ATTR);
+               device_type = prop;
+               free(prop);
+
+               //insert device to device_list
+               m_virtual_sensor_config[device_type];
+               DBG("<type=\"%s\">\n",device_type.c_str());
+
+               virtual_sensor_node_ptr = device_node_ptr->xmlChildrenNode;
+
+               while (virtual_sensor_node_ptr != NULL) {
                        //skip garbage element, [text]
-                       if (!xmlStrcmp(element_node_ptr->name,(const xmlChar *)TEXT_ELEMENT)) {
-                               element_node_ptr = element_node_ptr->next;
+                       if (!xmlStrcmp(virtual_sensor_node_ptr->name,(const xmlChar *)TEXT_ELEMENT)) {
+                               virtual_sensor_node_ptr = virtual_sensor_node_ptr->next;
                                continue;
                        }
 
-                       //insert Element to Model
-                       m_virtual_sensor_config[(const char*)virtual_sensor_node_ptr->name][(const char*)element_node_ptr->name];
-                       DBG("<%s><%s>\n",(const char*)virtual_sensor_node_ptr->name,(const char*)element_node_ptr->name);
+                       m_virtual_sensor_config[device_type][(const char*)virtual_sensor_node_ptr->name];
+                       DBG("<type=\"%s\"><%s>\n",device_type.c_str(),(const char*)virtual_sensor_node_ptr->name);
 
-                       attr_ptr = element_node_ptr->properties;
-                       while (attr_ptr != NULL) {
+                       element_node_ptr = virtual_sensor_node_ptr->xmlChildrenNode;
+                       while (element_node_ptr != NULL) {
+                               //skip garbage element, [text]
+                               if (!xmlStrcmp(element_node_ptr->name,(const xmlChar *)TEXT_ELEMENT)) {
+                                       element_node_ptr = element_node_ptr->next;
+                                       continue;
+                               }
 
-                               string key,value;
-                               key = (char*)attr_ptr->name;
-                               prop = (char*)xmlGetProp(element_node_ptr,attr_ptr->name);
-                               value = prop;
-                               free(prop);
+                               //insert Element to Model
+                               m_virtual_sensor_config[device_type][(const char*)virtual_sensor_node_ptr->name][(const char*)element_node_ptr->name];
+                               DBG("<type=\"%s\"><%s><%s>\n",device_type.c_str(),(const char*)virtual_sensor_node_ptr->name,(const char*)element_node_ptr->name);
+
+                               attr_ptr = element_node_ptr->properties;
+                               while (attr_ptr != NULL) {
+
+                                       string key,value;
+                                       key = (char*)attr_ptr->name;
+                                       prop = (char*)xmlGetProp(element_node_ptr,attr_ptr->name);
+                                       value = prop;
+                                       free(prop);
+
+                                       //insert attribute to Element
+                                       m_virtual_sensor_config[device_type][(const char*)virtual_sensor_node_ptr->name][(const char*)element_node_ptr->name][key]=value;
+                                       DBG("<type=\"%s\"><%s><%s \"%s\"=\"%s\">\n",device_type.c_str(),(const char*)virtual_sensor_node_ptr->name,(const char*)element_node_ptr->name,key.c_str(),value.c_str());
+                                       attr_ptr = attr_ptr->next;
+                               }
 
-                               //insert attribute to Element
-                               m_virtual_sensor_config[(const char*)virtual_sensor_node_ptr->name][(const char*)element_node_ptr->name][key]=value;
-                               DBG("<%s><%s \"%s\"=\"%s\">\n",(const char*)virtual_sensor_node_ptr->name,(const char*)element_node_ptr->name,key.c_str(),value.c_str());
-                               attr_ptr = attr_ptr->next;
-                       }
 
+                               element_node_ptr = element_node_ptr->next;
+                       }
 
-                       element_node_ptr = element_node_ptr->next;
+                       DBG("\n");
+                       virtual_sensor_node_ptr = virtual_sensor_node_ptr->next;
                }
 
-               DBG("\n");
-               virtual_sensor_node_ptr = virtual_sensor_node_ptr->next;
+               device_node_ptr = device_node_ptr->next;
        }
 
        xmlFreeDoc(doc);
@@ -144,10 +165,17 @@ bool cvirtual_sensor_config::load_config(const string& config_path)
 
 bool cvirtual_sensor_config::get(const string& sensor_type, const string& element, const string& attr, string& value)
 {
-       auto it_virtual_sensor_list = m_virtual_sensor_config.find(sensor_type);
+       auto it_device_list = m_virtual_sensor_config.find(m_device_id);
+
+       if (it_device_list == m_virtual_sensor_config.end())    {
+               ERR("There is no <%s> device\n",m_device_id.c_str());
+               return false;
+       }
+
+       auto it_virtual_sensor_list = it_device_list->second.find(sensor_type);
 
-       if (it_virtual_sensor_list == m_virtual_sensor_config.end())    {
-               ERR("There is no <%s> element\n",sensor_type.c_str());
+       if (it_virtual_sensor_list == it_device_list->second.end())     {
+               ERR("There is no <%s> sensor\n",sensor_type.c_str());
                return false;
        }
 
@@ -272,9 +300,14 @@ bool cvirtual_sensor_config::get(const string& sensor_type, const string& elemen
 
 bool cvirtual_sensor_config::is_supported(const string& sensor_type)
 {
-       auto it_virtual_sensor_list = m_virtual_sensor_config.find(sensor_type);
+       auto it_device_list = m_virtual_sensor_config.find(m_device_id);
+
+       if (it_device_list == m_virtual_sensor_config.end())
+               return false;
+
+       auto it_virtual_sensor_list = it_device_list->second.find(sensor_type);
 
-       if (it_virtual_sensor_list == m_virtual_sensor_config.end())
+       if (it_virtual_sensor_list == it_device_list->second.end())
                return false;
 
        return true;
index 7cfbcb6..b3c5f7d 100755 (executable)
@@ -40,7 +40,7 @@ typedef unordered_map<string,Element> Virtual_sensor;
 *              ...
 */
 
-typedef unordered_map<string,Virtual_sensor> Virtual_sensor_config;
+typedef unordered_map<string,Virtual_sensor> virtual_sensor_config;
 /*
 * a Virtual_sensor_config represents virtual_sensors.xml
 * <ORIENTATION/>
@@ -49,6 +49,14 @@ typedef unordered_map<string,Virtual_sensor> Virtual_sensor_config;
 *
 */
 
+typedef unordered_map<string,virtual_sensor_config> virtual_sensor_device_config;
+/*
+* a virtual_sensor_device_config represents virtual_sensors.xml
+* <emulator/>
+* <RD_PQ/>
+*
+*/
+
 class cvirtual_sensor_config : public cconfig
 {
 private:
@@ -58,7 +66,8 @@ private:
 
        bool load_config(const string& config_path);
 
-       Virtual_sensor_config m_virtual_sensor_config;
+       virtual_sensor_device_config m_virtual_sensor_config;
+
 public:
        static cvirtual_sensor_config& get_instance(void);
 
index 680745e..1c20c0d 100644 (file)
 <?xml version="1.0" encoding="utf-8"?>
 <VIRTUAL_SENSOR>
-       <ORIENTATION>
-               <NAME value="ORIENTATION_SENSOR" />
-               <VENDOR value="SAMSUNG" />
-               <RAW_DATA_UNIT value="DEGREES" />
-               <DEFAULT_SAMPLING_TIME value="100" />
-               <ACCEL_STATIC_BIAS value1="0" value2="0" value3="0" />
-               <GYRO_STATIC_BIAS value1="0" value2="0" value3="0" />
-               <GEOMAGNETIC_STATIC_BIAS value1="0" value2="0" value3="0" />
-               <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
-               <GYRO_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
-               <GEOMAGNETIC_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
-               <ACCEL_SCALE value="1" />
-               <GYRO_SCALE value="1146" />
-               <GEOMAGNETIC_SCALE value="1" />
-               <MAGNETIC_ALIGNMENT_FACTOR value="1" />
-               <AZIMUTH_ROTATION_COMPENSATION value="-1" />
-               <PITCH_ROTATION_COMPENSATION value="-1" />
-               <ROLL_ROTATION_COMPENSATION value="-1" />
-       </ORIENTATION>
+       <DEVICE type="Mobile-Emulator">
+               <ORIENTATION>
+                       <NAME value="ORIENTATION_SENSOR" />
+                       <VENDOR value="SAMSUNG" />
+                       <RAW_DATA_UNIT value="DEGREES" />
+                       <DEFAULT_SAMPLING_TIME value="100" />
+                       <ACCEL_STATIC_BIAS value1="0" value2="0" value3="0" />
+                       <GYRO_STATIC_BIAS value1="0" value2="0" value3="0" />
+                       <GEOMAGNETIC_STATIC_BIAS value1="0" value2="0" value3="0" />
+                       <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
+                       <GYRO_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
+                       <GEOMAGNETIC_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
+                       <ACCEL_SCALE value="1" />
+                       <GYRO_SCALE value="1146" />
+                       <GEOMAGNETIC_SCALE value="1" />
+                       <MAGNETIC_ALIGNMENT_FACTOR value="1" />
+                       <AZIMUTH_ROTATION_COMPENSATION value="-1" />
+                       <PITCH_ROTATION_COMPENSATION value="-1" />
+                       <ROLL_ROTATION_COMPENSATION value="-1" />
+               </ORIENTATION>
 
-       <GRAVITY>
-               <NAME value="GRAVITY_SENSOR" />
-               <VENDOR value="SAMSUNG" />
-               <RAW_DATA_UNIT value="M/S^2" />
-               <DEFAULT_SAMPLING_TIME value="100" />
-               <GRAVITY_SIGN_COMPENSATION value1="1" value2="1" value3="1" />
-       </GRAVITY>
+               <GRAVITY>
+                       <NAME value="GRAVITY_SENSOR" />
+                       <VENDOR value="SAMSUNG" />
+                       <RAW_DATA_UNIT value="M/S^2" />
+                       <DEFAULT_SAMPLING_TIME value="100" />
+                       <GRAVITY_SIGN_COMPENSATION value1="-1" value2="-1" value3="-1" />
+               </GRAVITY>
 
-       <LINEAR_ACCEL>
-               <NAME value="LINEAR_ACCEL_SENSOR" />
-               <VENDOR value="SAMSUNG" />
-               <RAW_DATA_UNIT value="M/S^2" />
-               <DEFAULT_SAMPLING_TIME value="100" />
-               <ACCEL_STATIC_BIAS value1="0" value2="0" value3="0" />
-               <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
-               <ACCEL_SCALE value="1" />
-               <LINEAR_ACCEL_SIGN_COMPENSATION value1="1" value2="1" value3="1" />
-       </LINEAR_ACCEL>
+               <LINEAR_ACCEL>
+                       <NAME value="LINEAR_ACCEL_SENSOR" />
+                       <VENDOR value="SAMSUNG" />
+                       <RAW_DATA_UNIT value="M/S^2" />
+                       <DEFAULT_SAMPLING_TIME value="100" />
+                       <ACCEL_STATIC_BIAS value1="0" value2="0" value3="0" />
+                       <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
+                       <ACCEL_SCALE value="1" />
+                       <LINEAR_ACCEL_SIGN_COMPENSATION value1="1" value2="1" value3="1" />
+               </LINEAR_ACCEL>
 
-       <ROTATION_VECTOR>
-               <NAME value="RV_SENSOR" />
-               <VENDOR value="SAMSUNG" />
-               <DEFAULT_SAMPLING_TIME value="100" />
-               <ACCEL_STATIC_BIAS value1="0" value2="0" value3="0" />
-               <GYRO_STATIC_BIAS value1="0" value2="0" value3="0" />
-               <GEOMAGNETIC_STATIC_BIAS value1="0" value2="0" value3="0" />
-               <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
-               <GYRO_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
-               <GEOMAGNETIC_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
-               <ACCEL_SCALE value="1" />
-               <GYRO_SCALE value="1146" />
-               <GEOMAGNETIC_SCALE value="1" />
-               <MAGNETIC_ALIGNMENT_FACTOR value="1" />
-       </ROTATION_VECTOR>
+               <ROTATION_VECTOR>
+                       <NAME value="RV_SENSOR" />
+                       <VENDOR value="SAMSUNG" />
+                       <DEFAULT_SAMPLING_TIME value="100" />
+                       <ACCEL_STATIC_BIAS value1="0" value2="0" value3="0" />
+                       <GYRO_STATIC_BIAS value1="0" value2="0" value3="0" />
+                       <GEOMAGNETIC_STATIC_BIAS value1="0" value2="0" value3="0" />
+                       <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
+                       <GYRO_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
+                       <GEOMAGNETIC_ROTATION_DIRECTION_COMPENSATION value1="-1" value2="-1" value3="-1" />
+                       <ACCEL_SCALE value="1" />
+                       <GYRO_SCALE value="1146" />
+                       <GEOMAGNETIC_SCALE value="1" />
+                       <MAGNETIC_ALIGNMENT_FACTOR value="1" />
+               </ROTATION_VECTOR>
+       </DEVICE>
+       <DEVICE type="Mobile-RD-PQ">
+               <ORIENTATION>
+                       <NAME value="ORIENTATION_SENSOR" />
+                       <VENDOR value="SAMSUNG" />
+                       <RAW_DATA_UNIT value="DEGREES" />
+                       <DEFAULT_SAMPLING_TIME value="100" />
+                       <ACCEL_STATIC_BIAS value1="0.098586" value2="0.18385" value3="0.274" />
+                       <GYRO_STATIC_BIAS value1="-5.3539" value2="0.24325" value3="2.3391" />
+                       <GEOMAGNETIC_STATIC_BIAS value1="0" value2="-37.6" value3="37.6" />
+                       <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
+                       <GYRO_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
+                       <GEOMAGNETIC_ROTATION_DIRECTION_COMPENSATION value1="1" value2="-1" value3="1" />
+                       <ACCEL_SCALE value="1" />
+                       <GYRO_SCALE value="1160" />
+                       <GEOMAGNETIC_SCALE value="1" />
+                       <MAGNETIC_ALIGNMENT_FACTOR value="1" />
+                       <AZIMUTH_ROTATION_COMPENSATION value="1" />
+                       <PITCH_ROTATION_COMPENSATION value="1" />
+                       <ROLL_ROTATION_COMPENSATION value="1" />
+               </ORIENTATION>
+
+               <GRAVITY>
+                       <NAME value="GRAVITY_SENSOR" />
+                       <VENDOR value="SAMSUNG" />
+                       <RAW_DATA_UNIT value="M/S^2" />
+                       <DEFAULT_SAMPLING_TIME value="100" />
+                       <GRAVITY_SIGN_COMPENSATION value1="1" value2="1" value3="1" />
+               </GRAVITY>
+
+               <LINEAR_ACCEL>
+                       <NAME value="LINEAR_ACCEL_SENSOR" />
+                       <VENDOR value="SAMSUNG" />
+                       <RAW_DATA_UNIT value="M/S^2" />
+                       <DEFAULT_SAMPLING_TIME value="100" />
+                       <ACCEL_STATIC_BIAS value1="0" value2="0" value3="0" />
+                       <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
+                       <ACCEL_SCALE value="1" />
+                       <LINEAR_ACCEL_SIGN_COMPENSATION value1="1" value2="1" value3="1" />
+               </LINEAR_ACCEL>
+
+               <ROTATION_VECTOR>
+                       <NAME value="RV_SENSOR" />
+                       <VENDOR value="SAMSUNG" />
+                       <DEFAULT_SAMPLING_TIME value="100" />
+                       <ACCEL_STATIC_BIAS value1="0.098586" value2="0.18385" value3="0.274" />
+                       <GYRO_STATIC_BIAS value1="-5.3539" value2="0.24325" value3="2.3391" />
+                       <GEOMAGNETIC_STATIC_BIAS value1="0" value2="-37.6" value3="37.6" />
+                       <ACCEL_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
+                       <GYRO_ROTATION_DIRECTION_COMPENSATION value1="1" value2="1" value3="1" />
+                       <GEOMAGNETIC_ROTATION_DIRECTION_COMPENSATION value1="1" value2="-1" value3="1" />
+                       <ACCEL_SCALE value="1" />
+                       <GYRO_SCALE value="1160" />
+                       <GEOMAGNETIC_SCALE value="1" />
+                       <MAGNETIC_ALIGNMENT_FACTOR value="1" />
+               </ROTATION_VECTOR>
+       </DEVICE>
 </VIRTUAL_SENSOR>