start replacing chained locks #372

Merged
muellerr merged 4 commits from awesome_acs_branch into develop 2023-02-08 17:52:08 +01:00
4 changed files with 103 additions and 52 deletions

View File

@ -17,6 +17,10 @@ change warranting a new major release:
# [unreleased] # [unreleased]
## Changed
- Replaced chained locks for polling new sensor data to the `AcsController`
# [v1.26.1] 2023-02-08 # [v1.26.1] 2023-02-08
- Initialize parameter helper in ACS controller. - Initialize parameter helper in ACS controller.

View File

@ -107,8 +107,6 @@ void AcsController::performControlOperation() {
} }
void AcsController::performSafe() { void AcsController::performSafe() {
ACS::SensorValues sensorValues;
timeval now; timeval now;
Clock::getClock_timeval(&now); Clock::getClock_timeval(&now);
@ -197,8 +195,6 @@ void AcsController::performSafe() {
} }
void AcsController::performDetumble() { void AcsController::performDetumble() {
ACS::SensorValues sensorValues;
timeval now; timeval now;
Clock::getClock_timeval(&now); Clock::getClock_timeval(&now);
@ -258,8 +254,6 @@ void AcsController::performDetumble() {
} }
void AcsController::performPointingCtrl() { void AcsController::performPointingCtrl() {
ACS::SensorValues sensorValues;
timeval now; timeval now;
Clock::getClock_timeval(&now); Clock::getClock_timeval(&now);
@ -721,14 +715,6 @@ void AcsController::copySusData() {
} }
} }
ReturnValue_t AcsController::initialize() {
ReturnValue_t result = parameterHelper.initialize();
if (result != returnvalue::OK) {
return result;
}
return ExtendedControllerBase::initialize();
}
void AcsController::copyGyrData() { void AcsController::copyGyrData() {
ACS::SensorValues sensorValues; ACS::SensorValues sensorValues;
{ {
@ -776,3 +762,11 @@ void AcsController::copyGyrData() {
} }
} }
} }
ReturnValue_t AcsController::initialize() {
ReturnValue_t result = parameterHelper.initialize();
if (result != returnvalue::OK) {
return result;
}
return ExtendedControllerBase::initialize();
}

View File

@ -69,8 +69,10 @@ class AcsController : public ExtendedControllerBase, public ReceivesParameterMes
void modeChanged(Mode_t mode, Submode_t submode); void modeChanged(Mode_t mode, Submode_t submode);
void announceMode(bool recursive); void announceMode(bool recursive);
/* ACS Datasets */ /* ACS Sensor Values */
ACS::SensorValues sensorValues; ACS::SensorValues sensorValues;
/* ACS Datasets */
IMTQ::DipoleActuationSet dipoleSet = IMTQ::DipoleActuationSet(objects::IMTQ_HANDLER); IMTQ::DipoleActuationSet dipoleSet = IMTQ::DipoleActuationSet(objects::IMTQ_HANDLER);
// MGMs // MGMs
acsctrl::MgmDataRaw mgmDataRaw; acsctrl::MgmDataRaw mgmDataRaw;

View File

@ -20,62 +20,113 @@ SensorValues::SensorValues() {}
SensorValues::~SensorValues() {} SensorValues::~SensorValues() {}
ReturnValue_t SensorValues::updateMgm() { ReturnValue_t SensorValues::updateMgm() {
ReturnValue_t result; std::vector<ReturnValue_t> results;
PoolReadGuard pgMgm0(&mgm0Lis3Set), pgMgm1(&mgm1Rm3100Set), pgMgm2(&mgm2Lis3Set),
pgMgm3(&mgm3Rm3100Set), pgImtq(&imtqMgmSet);
result = (pgMgm0.getReadResult() || pgMgm1.getReadResult() || pgMgm2.getReadResult() || {
pgMgm3.getReadResult() || pgImtq.getReadResult()); PoolReadGuard pgMgm(&mgm0Lis3Set);
results.push_back(pgMgm.getReadResult());
}
{
PoolReadGuard pgMgm(&mgm1Rm3100Set);
results.push_back(pgMgm.getReadResult());
}
{
PoolReadGuard pgMgm(&mgm2Lis3Set);
results.push_back(pgMgm.getReadResult());
}
{
PoolReadGuard pgMgm(&mgm3Rm3100Set);
results.push_back(pgMgm.getReadResult());
}
{
PoolReadGuard pgMgm(&imtqMgmSet);
results.push_back(pgMgm.getReadResult());
}
for (const auto& result : results) {
if (result != returnvalue::OK) {
return result; return result;
} }
}
return returnvalue::OK;
}
ReturnValue_t SensorValues::updateSus() { ReturnValue_t SensorValues::updateSus() {
ReturnValue_t result; std::vector<ReturnValue_t> results;
PoolReadGuard pgSus0(&susSets[0]), pgSus1(&susSets[1]), pgSus2(&susSets[2]), pgSus3(&susSets[3]), for (auto& susSet : susSets) {
pgSus4(&susSets[4]), pgSus5(&susSets[5]), pgSus6(&susSets[6]), pgSus7(&susSets[7]), {
pgSus8(&susSets[8]), pgSus9(&susSets[9]), pgSus10(&susSets[10]), pgSus11(&susSets[11]); PoolReadGuard pgSus(&susSet);
results.push_back(pgSus.getReadResult());
result = (pgSus0.getReadResult() || pgSus1.getReadResult() || pgSus2.getReadResult() || }
pgSus3.getReadResult() || pgSus4.getReadResult() || pgSus5.getReadResult() || }
pgSus6.getReadResult() || pgSus7.getReadResult() || pgSus8.getReadResult() || for (const auto& result : results) {
pgSus9.getReadResult() || pgSus10.getReadResult() || pgSus11.getReadResult()); if (result != returnvalue::OK) {
return result; return result;
} }
}
return returnvalue::OK;
}
ReturnValue_t SensorValues::updateGyr() { ReturnValue_t SensorValues::updateGyr() {
ReturnValue_t result; std::vector<ReturnValue_t> results;
PoolReadGuard pgGyr0(&gyr0AdisSet), pgGyr1(&gyr1L3gSet), pgGyr2(&gyr2AdisSet), {
pgGyr3(&gyr3L3gSet); PoolReadGuard pgGyr(&gyr0AdisSet);
results.push_back(pgGyr.getReadResult());
result = (pgGyr0.getReadResult() || pgGyr1.getReadResult() || pgGyr2.getReadResult() || }
pgGyr3.getReadResult()); {
PoolReadGuard pgGyr(&gyr1L3gSet);
results.push_back(pgGyr.getReadResult());
}
{
PoolReadGuard pgGyr(&gyr2AdisSet);
results.push_back(pgGyr.getReadResult());
}
{
PoolReadGuard pgGyr(&gyr3L3gSet);
results.push_back(pgGyr.getReadResult());
}
for (const auto& result : results) {
if (result != returnvalue::OK) {
return result; return result;
} }
}
return returnvalue::OK;
}
ReturnValue_t SensorValues::updateStr() { ReturnValue_t SensorValues::updateStr() {
ReturnValue_t result;
PoolReadGuard pgStr(&strSet); PoolReadGuard pgStr(&strSet);
return pgStr.getReadResult();
result = pgStr.getReadResult();
return result;
} }
ReturnValue_t SensorValues::updateGps() { ReturnValue_t SensorValues::updateGps() {
ReturnValue_t result;
PoolReadGuard pgGps(&gpsSet); PoolReadGuard pgGps(&gpsSet);
return pgGps.getReadResult();
result = pgGps.getReadResult();
return result;
} }
ReturnValue_t SensorValues::updateRw() { ReturnValue_t SensorValues::updateRw() {
ReturnValue_t result; std::vector<ReturnValue_t> results;
PoolReadGuard pgRw1(&rw1Set), pgRw2(&rw2Set), pgRw3(&rw3Set), pgRw4(&rw4Set); {
PoolReadGuard pgRw(&rw1Set);
result = (pgRw1.getReadResult() || pgRw2.getReadResult() || pgRw3.getReadResult() || results.push_back(pgRw.getReadResult());
pgRw4.getReadResult()); }
{
PoolReadGuard pgRw(&rw2Set);
results.push_back(pgRw.getReadResult());
}
{
PoolReadGuard pgRw(&rw3Set);
results.push_back(pgRw.getReadResult());
}
{
PoolReadGuard pgRw(&rw4Set);
results.push_back(pgRw.getReadResult());
}
for (const auto& result : results) {
if (result != returnvalue::OK) {
return result; return result;
} }
}
return returnvalue::OK;
}
ReturnValue_t SensorValues::update() { ReturnValue_t SensorValues::update() {
ReturnValue_t mgmUpdate = updateMgm(); ReturnValue_t mgmUpdate = updateMgm();