107 lines
3.5 KiB
C++
107 lines
3.5 KiB
C++
// **************************************************************************
|
|
//
|
|
// (C) Copyright 2009 Swiss SIMTEC AG
|
|
//
|
|
// **************************************************************************
|
|
//
|
|
// $HeadURL$
|
|
// $LastChangedBy$
|
|
// $LastChangedDate$
|
|
// $LastChangedRevision$
|
|
//
|
|
// **************************************************************************
|
|
|
|
#include "LogViewXdrType.hpp"
|
|
|
|
namespace N_LogView
|
|
{
|
|
|
|
// ---------------------------------------------------------------
|
|
LogViewXdrType::LogViewXdrType(const QString& a_name, const QString& a_type, const uint16_t a_arraySize, const uint16_t a_dynArrayOffset, const E_ElementKind a_kind)
|
|
: LogViewXdrElement(a_name, a_kind, "LogViewXdrElement")
|
|
, m_Type(a_type)
|
|
, m_ArraySize(a_arraySize)
|
|
, m_MaxArraySize(a_dynArrayOffset)
|
|
, m_FirstBit(-1)
|
|
, m_LastBit(-1)
|
|
, m_IsLast(true)
|
|
{
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------
|
|
LogViewXdrType::LogViewXdrType(const QString& a_name, const QString& a_type, const uint16_t a_arraySize, const uint16_t a_dynArrayOffset, const E_ElementKind a_kind, const int16_t a_firstBit, const int16_t a_lastBit, const bool a_isLast)
|
|
: LogViewXdrElement(a_name, a_kind, "LogViewXdrType")
|
|
, m_Type(a_type)
|
|
, m_ArraySize(a_arraySize)
|
|
, m_MaxArraySize(a_dynArrayOffset)
|
|
, m_FirstBit(a_firstBit)
|
|
, m_LastBit(a_lastBit)
|
|
, m_IsLast(a_isLast)
|
|
{
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------
|
|
void LogViewXdrType::dump() const
|
|
{
|
|
INFO_LOG(m_logger) << "Element[" << getName()
|
|
<< "]: kind=" << getKindName()
|
|
<< " type=" << getType()
|
|
<< " arraySize=" << getArraySize()
|
|
<< " maxArraySize=" << getMaxArraySize()
|
|
<< " firstBit=" << m_FirstBit
|
|
<< " lastBit=" << m_LastBit
|
|
<< " isLast=" << m_IsLast;
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------
|
|
const QString& LogViewXdrType::getType() const
|
|
{
|
|
return m_Type;
|
|
}
|
|
|
|
// ---------------------------------------------------------------
|
|
// 0 => opaque
|
|
// 1 => normal (scalar) element
|
|
// >1 => array
|
|
// ---------------------------------------------------------------
|
|
uint16_t LogViewXdrType::getArraySize() const
|
|
{
|
|
return m_ArraySize;
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------
|
|
bool LogViewXdrType::maskValue(uint32_t& a_value, const uint16_t a_size, QString& a_tooltip) const
|
|
{
|
|
// INFO_LOG(m_logger) << "firstBit=" << m_FirstBit << " lastBit=" << m_LastBit << " isLast=" << m_IsLast;
|
|
if (m_FirstBit != -1 && m_LastBit != -1)
|
|
{
|
|
DEBUG_LOG(m_logger) << "MaskValue for Element " << m_Name
|
|
<< " type: " << m_Type
|
|
<< " size: " << m_ArraySize
|
|
<< " first:last " << m_FirstBit << ":" << m_LastBit
|
|
<< " isLast: " << m_IsLast;
|
|
uint16_t bitshift = (a_size*8)-m_LastBit-1;
|
|
uint32_t mask = (1<<(m_LastBit-m_FirstBit+1))-1;
|
|
// INFO_LOG(m_logger) << "value=" << a_value << " bitshift=" << bitshift << " mask=" << mask;
|
|
a_value = (a_value >> bitshift) & mask;
|
|
// make bold the corresponding bits in the bitfield
|
|
a_tooltip.insert(a_tooltip.length()-(a_size*8)+m_FirstBit, QLatin1String("<b>"));
|
|
a_tooltip.insert(a_tooltip.length()-(a_size*8)+m_LastBit+1, QLatin1String("</b>"));
|
|
return m_IsLast;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------
|
|
uint16_t LogViewXdrType::getMaxArraySize() const
|
|
{
|
|
return m_MaxArraySize;
|
|
}
|
|
|
|
} // namespace N_LogView
|