QVariant ConfigMap::getValue(const std::string& name, const std::vector<quint16>& array) const { ParameterMap::const_iterator f = findParameter(name); if (f == m_map.end()) return QVariant(QString(QObject::tr("undefined"))); Parameter p = f->second; int index = -1; for (auto interval : m_registersIntervals) if (interval.in(p.m_registerNumber)) { index = p.m_registerNumber - interval.first; break; } assert(index != -1); int ret = array[index]; QString errorDescription; if (!f->second.m_errorDetector.isValid(ret,errorDescription)) { return QVariant(errorDescription); } if (p.m_isBool) { ret = (ret & (1 << p.m_bitNumber)) ? 1 : 0; } if (!p.m_decodeMethod.empty()) ret = decodeWithMethod(ret, p.m_decodeMethod); return QVariant(ret); }
unsigned int ConfigMap::getValue(const std::string& name, const QVector<quint16>& array) const { if (!haveVariableWithName(name)) return -1; Parameter p = m_map.at(name); int index = p.m_registerNumber - ((p.m_isWriteble) ? m_outputRegistersInterval.first : m_inputRegistersInterval.first); qint16 ret = array[index]; if (p.m_isBool) { ret = (ret & (1 << p.m_bitNumber)) ? 1 : 0; } if (!p.m_decodeMethod.empty()) ret = decodeWithMethod(ret, p.m_decodeMethod); return ret; }