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()
{
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);
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;
}
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;
<?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>