#include "RegisterField.h" /*************************************************************************************************/ quint32 RegisterField::getBitPosition() { auto bitPosition = 0U; auto mask = _mask; while(true) { if((mask & 0x01) == 0x01) { break; } bitPosition++; mask = mask >> 1; } return bitPosition; } /*************************************************************************************************/ quint32 RegisterField::getBitLength() { auto bitlength = 0U; auto mask = _mask >> getBitPosition(); while(true) { if((mask & 0x01) != 0x01) { break; } bitlength++; mask = mask >> 1; } return bitlength; } /*************************************************************************************************/ RegisterField::RegisterField(quint32 mask, bool isSigned) { _mask = mask; _isSigned = isSigned; } /*************************************************************************************************/ void RegisterField::update(quint32 value) { if(_value == value) { return; } _value = value; quint32 temp = 0; temp = (_value << getBitPosition()) & _mask; emit fieldUpdated(_value, ~_mask); } /*************************************************************************************************/ quint32 RegisterField::getRawValue() { return _value; } /*************************************************************************************************/ void RegisterField::ExtractValue(quint32 value) { auto temp = (value >> getBitPosition()) & (_mask >> getBitPosition()); if(_isSigned && ((temp >> (getBitLength() - 1)) & 0x01) == 0x01) { temp |= (~(_mask >> getBitPosition())); } _value = temp; }