2020-12-03 13:00:04 +01:00
|
|
|
#include "LocalPoolObjectBase.h"
|
|
|
|
|
|
|
|
LocalPoolObjectBase::LocalPoolObjectBase(lp_id_t poolId,
|
|
|
|
HasLocalDataPoolIF* hkOwner, DataSetIF* dataSet,
|
|
|
|
pool_rwm_t setReadWriteMode): localPoolId(poolId),
|
|
|
|
readWriteMode(setReadWriteMode) {
|
|
|
|
if(poolId == PoolVariableIF::NO_PARAMETER) {
|
2021-01-03 14:16:52 +01:00
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
2020-12-03 13:00:04 +01:00
|
|
|
sif::warning << "LocalPoolVar<T>::LocalPoolVar: 0 passed as pool ID, "
|
|
|
|
<< "which is the NO_PARAMETER value!" << std::endl;
|
2021-01-03 13:58:18 +01:00
|
|
|
#endif
|
2020-12-03 13:00:04 +01:00
|
|
|
}
|
|
|
|
if(hkOwner == nullptr) {
|
2021-01-03 14:16:52 +01:00
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
2020-12-03 13:00:04 +01:00
|
|
|
sif::error << "LocalPoolVar<T>::LocalPoolVar: The supplied pool "
|
|
|
|
<< "owner is a invalid!" << std::endl;
|
2021-01-03 13:58:18 +01:00
|
|
|
#endif
|
2020-12-03 13:00:04 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
hkManager = hkOwner->getHkManagerHandle();
|
|
|
|
if (dataSet != nullptr) {
|
|
|
|
dataSet->registerVariable(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
LocalPoolObjectBase::LocalPoolObjectBase(object_id_t poolOwner, lp_id_t poolId,
|
|
|
|
DataSetIF *dataSet, pool_rwm_t setReadWriteMode): localPoolId(poolId),
|
|
|
|
readWriteMode(setReadWriteMode) {
|
|
|
|
if(poolId == PoolVariableIF::NO_PARAMETER) {
|
2021-01-03 14:16:52 +01:00
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
2020-12-03 13:00:04 +01:00
|
|
|
sif::warning << "LocalPoolVar<T>::LocalPoolVar: 0 passed as pool ID, "
|
|
|
|
<< "which is the NO_PARAMETER value!" << std::endl;
|
2021-01-03 13:58:18 +01:00
|
|
|
#endif
|
2020-12-03 13:00:04 +01:00
|
|
|
}
|
|
|
|
HasLocalDataPoolIF* hkOwner =
|
|
|
|
objectManager->get<HasLocalDataPoolIF>(poolOwner);
|
|
|
|
if(hkOwner == nullptr) {
|
2021-01-03 14:16:52 +01:00
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
2020-12-03 13:00:04 +01:00
|
|
|
sif::error << "LocalPoolVariable: The supplied pool owner did not "
|
|
|
|
<< "implement the correct interface"
|
|
|
|
<< " HasLocalDataPoolIF!" << std::endl;
|
2021-01-03 13:58:18 +01:00
|
|
|
#endif
|
2020-12-03 13:00:04 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
hkManager = hkOwner->getHkManagerHandle();
|
|
|
|
if(dataSet != nullptr) {
|
|
|
|
dataSet->registerVariable(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pool_rwm_t LocalPoolObjectBase::getReadWriteMode() const {
|
|
|
|
return readWriteMode;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool LocalPoolObjectBase::isValid() const {
|
|
|
|
return valid;
|
|
|
|
}
|
|
|
|
|
|
|
|
void LocalPoolObjectBase::setValid(bool valid) {
|
|
|
|
this->valid = valid;
|
|
|
|
}
|
|
|
|
|
|
|
|
lp_id_t LocalPoolObjectBase::getDataPoolId() const {
|
|
|
|
return localPoolId;
|
|
|
|
}
|
|
|
|
|
|
|
|
void LocalPoolObjectBase::setDataPoolId(lp_id_t poolId) {
|
|
|
|
this->localPoolId = poolId;
|
|
|
|
}
|
|
|
|
|
|
|
|
void LocalPoolObjectBase::setChanged(bool changed) {
|
|
|
|
this->changed = changed;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool LocalPoolObjectBase::hasChanged() const {
|
|
|
|
return changed;
|
|
|
|
}
|
|
|
|
|
|
|
|
void LocalPoolObjectBase::setReadWriteMode(pool_rwm_t newReadWriteMode) {
|
|
|
|
this->readWriteMode = newReadWriteMode;
|
|
|
|
}
|
2021-01-07 20:23:23 +01:00
|
|
|
|
|
|
|
void LocalPoolObjectBase::reportReadCommitError(const char* variableType,
|
|
|
|
ReturnValue_t error, bool read, object_id_t objectId, lp_id_t lpId) {
|
|
|
|
#if FSFW_DISABLE_PRINTOUT == 0
|
|
|
|
const char* type = nullptr;
|
|
|
|
if(read) {
|
|
|
|
type = "read";
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
type = "commit";
|
|
|
|
}
|
|
|
|
|
|
|
|
const char* errMsg = nullptr;
|
|
|
|
if(error == HasLocalDataPoolIF::POOL_ENTRY_NOT_FOUND) {
|
|
|
|
errMsg = "Pool entry not found";
|
|
|
|
}
|
|
|
|
else if(error == HasLocalDataPoolIF::POOL_ENTRY_TYPE_CONFLICT) {
|
|
|
|
errMsg = "Pool entry type conflict";
|
|
|
|
}
|
|
|
|
else if(error == PoolVariableIF::INVALID_READ_WRITE_MODE) {
|
|
|
|
errMsg = "Pool variable wrong read-write mode";
|
|
|
|
}
|
|
|
|
else if(error == PoolVariableIF::INVALID_POOL_ENTRY) {
|
|
|
|
errMsg = "Pool entry invalid";
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
errMsg = "Unknown error code";
|
|
|
|
}
|
|
|
|
|
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
|
|
|
sif::warning << variableType << ": " << type << " call | " << errMsg
|
2021-01-08 02:06:27 +01:00
|
|
|
<< " | Owner: 0x" << std::hex << std::setw(8)
|
|
|
|
<< std::setfill('0') << objectId << std::dec << " LPID: " << lpId
|
|
|
|
<< std::endl;
|
2021-01-07 20:23:23 +01:00
|
|
|
#else
|
2021-01-08 02:06:27 +01:00
|
|
|
fsfw::printWarning("%s: %s call | %s | Owner: 0x%08x LPID: %lu\n",
|
|
|
|
variableType, type, errMsg, objectId, lpId);
|
2021-01-07 20:23:23 +01:00
|
|
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
|
|
|
#endif /* FSFW_DISABLE_PRINTOUT == 0 */
|
|
|
|
}
|