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
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(®isterField, &RegisterField::fieldUpdated, this, &BaseRegister::fieldUpdated);
|
|
_fields.append(registerField);
|
|
}
|
|
|
|
/*************************************************************************************************/
|
|
void BaseRegister::fieldUpdated(quint32 value, quint32 clearMask)
|
|
{
|
|
if(!_isSync)
|
|
{
|
|
read();
|
|
}
|
|
|
|
auto temp = _readValue & clearMask;
|
|
temp |= value;
|
|
}
|
|
|