some bugfixes

This commit is contained in:
Robin Müller 2020-08-08 12:49:20 +02:00
parent a6a1e65607
commit f766398b20
5 changed files with 6 additions and 74 deletions

View File

@ -33,73 +33,5 @@ LocalDataSet::LocalDataSet(object_id_t ownerId,
hkManager = hkOwner->getHkManagerHandle(); hkManager = hkOwner->getHkManagerHandle();
} }
LocalDataSet::~LocalDataSet() { LocalDataSet::~LocalDataSet() {}
}
ReturnValue_t LocalDataSet::lockDataPool(uint32_t timeoutMs) {
MutexIF* mutex = hkManager->getMutexHandle();
return mutex->lockMutex(MutexIF::TimeoutType::WAITING, timeoutMs);
}
ReturnValue_t LocalDataSet::serializeWithValidityBuffer(uint8_t **buffer,
size_t *size, size_t maxSize,
SerializeIF::Endianness streamEndianness) const {
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
uint8_t validityMaskSize = std::ceil(static_cast<float>(fillCount)/8.0);
uint8_t validityMask[validityMaskSize];
uint8_t validBufferIndex = 0;
uint8_t validBufferIndexBit = 0;
for (uint16_t count = 0; count < fillCount; count++) {
if(registeredVariables[count]->isValid()) {
// set validity buffer here.
this->bitSetter(validityMask + validBufferIndex,
validBufferIndexBit);
if(validBufferIndexBit == 7) {
validBufferIndex ++;
validBufferIndexBit = 0;
}
else {
validBufferIndexBit ++;
}
}
result = registeredVariables[count]->serialize(buffer, size, maxSize,
streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
}
// copy validity buffer to end
std::memcpy(*buffer, validityMask, validityMaskSize);
*size += validityMaskSize;
return result;
}
ReturnValue_t LocalDataSet::unlockDataPool() {
MutexIF* mutex = hkManager->getMutexHandle();
return mutex->unlockMutex();
}
ReturnValue_t LocalDataSet::serializeLocalPoolIds(uint8_t** buffer,
size_t* size, size_t maxSize,
SerializeIF::Endianness streamEndianness) const {
for (uint16_t count = 0; count < fillCount; count++) {
lp_id_t currentPoolId = registeredVariables[count]->getDataPoolId();
auto result = SerializeAdapter::serialize(&currentPoolId, buffer,
size, maxSize, streamEndianness);
if(result != HasReturnvaluesIF::RETURN_OK) {
sif::warning << "LocalDataSet::serializeLocalPoolIds: Serialization"
" error!" << std::endl;
return result;
}
}
return HasReturnvaluesIF::RETURN_OK;
}
void LocalDataSet::bitSetter(uint8_t* byte, uint8_t position) const {
if(position > 7) {
sif::debug << "Pool Raw Access: Bit setting invalid position" << std::endl;
return;
}
uint8_t shiftNumber = position + (7 - 2 * position);
*byte |= 1 << shiftNumber;
}

View File

@ -7,7 +7,7 @@ class LocalDataSet: public LocalDataSetBase {
public: public:
LocalDataSet(HasLocalDataPoolIF* hkOwner, const size_t maxSize); LocalDataSet(HasLocalDataPoolIF* hkOwner, const size_t maxSize);
LocalDataSet(object_id_t owner, const size_t maxSize); LocalDataSet(object_id_t owner, const size_t maxSize);
virtual~ LocalDataSet() {}; virtual~ LocalDataSet();
//! Copying forbidden for now. //! Copying forbidden for now.
LocalDataSet(const LocalDataSet&) = delete; LocalDataSet(const LocalDataSet&) = delete;

View File

@ -36,7 +36,7 @@ LocalDataSetBase::~LocalDataSetBase() {
ReturnValue_t LocalDataSetBase::lockDataPool(uint32_t timeoutMs) { ReturnValue_t LocalDataSetBase::lockDataPool(uint32_t timeoutMs) {
MutexIF* mutex = hkManager->getMutexHandle(); MutexIF* mutex = hkManager->getMutexHandle();
return mutex->lockMutex(timeoutMs); return mutex->lockMutex(MutexIF::TimeoutType::WAITING, timeoutMs);
} }
ReturnValue_t LocalDataSetBase::serializeWithValidityBuffer(uint8_t **buffer, ReturnValue_t LocalDataSetBase::serializeWithValidityBuffer(uint8_t **buffer,

View File

@ -8,7 +8,7 @@ SharedLocalDataSet::SharedLocalDataSet(object_id_t objectId, object_id_t owner,
} }
ReturnValue_t SharedLocalDataSet::lockDataset(dur_millis_t mutexTimeout) { ReturnValue_t SharedLocalDataSet::lockDataset(dur_millis_t mutexTimeout) {
return datasetLock->lockMutex(mutexTimeout); return datasetLock->lockMutex(MutexIF::TimeoutType::WAITING, mutexTimeout);
} }
ReturnValue_t SharedLocalDataSet::unlockDataset() { ReturnValue_t SharedLocalDataSet::unlockDataset() {

View File

@ -1,6 +1,6 @@
#ifndef FRAMEWORK_DATAPOOLLOCAL_STATICLOCALDATASET_H_ #ifndef FRAMEWORK_DATAPOOLLOCAL_STATICLOCALDATASET_H_
#define FRAMEWORK_DATAPOOLLOCAL_STATICLOCALDATASET_H_ #define FRAMEWORK_DATAPOOLLOCAL_STATICLOCALDATASET_H_
#include <framework/datapool/PoolDataSetBase.h> #include <framework/datapoollocal/LocalPoolDataSetBase.h>
#include <framework/objectmanager/SystemObjectIF.h> #include <framework/objectmanager/SystemObjectIF.h>
#include <array> #include <array>
@ -20,7 +20,7 @@ public:
LocalDataSetBase(owner, poolVarList.data(), NUM_VARIABLES) { LocalDataSetBase(owner, poolVarList.data(), NUM_VARIABLES) {
} }
virtual~ StaticLocalDataSet(); virtual~ StaticLocalDataSet() {};
private: private:
std::array<PoolVariableIF*, NUM_VARIABLES> poolVarList; std::array<PoolVariableIF*, NUM_VARIABLES> poolVarList;
}; };