You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

49 lines
1.2 KiB

#include "BaseRegister.h"
BaseRegister::BaseRegister(quint32 bar, quint32 offset, const UltraSoundDevice& usd)
{
this->_bar = bar;
this->_offset = offset;
this->_usd = usd;
_isSync = false;
}
/*************************************************************************************************/
quint32 BaseRegister::read()
{
auto readValue = _usd.readWord(_offset, _bar);
_isSync = true;
for(auto i = 0; i < _fields.length(); i++)
{
_fields[i].ExtractValue(readValue);
}
return readValue;
}
/*************************************************************************************************/
void BaseRegister::write()
{
_usd.writeWord(_offset, _bar, _value);
_isSync = false;
}
/*************************************************************************************************/
void BaseRegister::appendToList(const RegisterField& registerField)
{
connect(&registerField, &RegisterField::fieldUpdated, this, &BaseRegister::fieldUpdated);
_fields.append(registerField);
}
/*************************************************************************************************/
void BaseRegister::fieldUpdated(quint32 value, quint32 clearMask)
{
if(!_isSync)
{
read();
}
auto temp = _readValue & clearMask;
temp |= value;
}