写入配置
pugi::xml_document doc;
auto usbLinkLogicConfig = doc.append_child("USBLinkLogicConfig");
for (auto iter = linkLogics.begin(); iter != linkLogics.end(); iter++)
{
auto linkLogic = usbLinkLogicConfig.append_child("LinkLogic");
linkLogic.append_child("LinkName").append_attribute("name").set_value(iter->second->name);
linkLogic.append_child(pugi::node_comment).set_value("condType 触发条件( 1:火警 2:一级预警 3:二级报警 4:三级火警 5:手动报警 6:CO浓度 7:烟雾浓度 8:温度 9:H2浓度 10:VOC浓度 11:开关量输入高 12:开关量输入低)");
linkLogic.append_child(pugi::node_comment).set_value("operator 条件运算符(=:0 >:1 <:2)");
linkLogic.append_child(pugi::node_comment).set_value("condLogic 逻辑符号(null:0 |:1 &:2)");
for (int i = 0; i < 10; i++)
{
auto linkCond = linkLogic.append_child("LinkCond");
linkCond.append_attribute("devTypeId").set_value(static_cast<int>(iter->second->linkCond[i].devTypeId));
}
linkLogic.append_child(pugi::node_comment).set_value("actionType 动作类型(1:开阀 2:关阀 3:闭合JDG 4:断开JDG 5:IO输出高 6:IO输出低)");
for (int i = 0; i < 10; i++)
{
auto linkAction = linkLogic.append_child("LinkAction");
linkAction.append_attribute("devTypeId").set_value(static_cast<int>(iter->second->linkAction[i].devTypeId));
}
}
doc.save_file(m_cfgFilePath.toLocal8Bit().toStdString().c_str());
读取配置
pugi::xml_document doc;
if (!doc.load_file(m_cfgFilePath.toLocal8Bit().toStdString().c_str()))
{
return false;
}
pugi::xml_node root = doc.child("USBLinkLogicConfig");
for (pugi::xml_node linkLogic = root.child("LinkLogic"); linkLogic; linkLogic = linkLogic.next_sibling("LinkLogic"))
{
std::shared_ptr<AlarmLinkLogic> spLinkLogic(new AlarmLinkLogic);
strcpy(spLinkLogic->name, linkLogic.child("LinkName").attribute("name").as_string());
int condSize = 0;
int actionSize = 0;
for (pugi::xml_node condLink = linkLogic.child("LinkCond"); condLink; condLink = condLink.next_sibling("LinkCond"))
{
spLinkLogic->linkCond[condSize].devTypeId = static_cast<DeviceTypeId>(condLink.attribute("devTypeId").as_int());
condSize++;
}
for (pugi::xml_node actionLink = linkLogic.child("LinkAction"); actionLink; actionLink = actionLink.next_sibling("LinkAction"))
{
spLinkLogic->linkAction[actionSize].devTypeId = static_cast<DeviceTypeId>(actionLink.attribute("devTypeId").as_int());
actionSize++;
}
linkLogics.push_back(spLinkLogic);
}