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);
}
Beispiel #2
0
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;
}