Merge branch 'develop' into eggert/rw-cmd-acs-ctrl
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good

This commit is contained in:
Marius Eggert 2023-02-10 13:23:58 +01:00
commit fc5196f8da
15 changed files with 90 additions and 58 deletions

View File

@ -25,9 +25,26 @@ change warranting a new major release:
## Changed ## Changed
- ActCmds now returns command vectors as integers as required by the actuators
# [v1.26.3] 2023-02-09
eive-tmtc: v2.12.2
## Added
- First version of a TCS controller heater control loop, but
the loop is disabled for now.
## Changed
- Reworked dummy handling for the TCS controller. - Reworked dummy handling for the TCS controller.
- Generator scripts now generate files for hosted and for Q7S build. - Generator scripts now generate files for hosted and for Q7S build.
- ActCmds now returns command vectors as integers as required by the actuators
## Fixed
- GPS Controller: Set fix value to 0 when switching off to allow
`GPS_FIX_CHANGE` to work when switching the GPS back on.
# [v1.26.2] 2023-02-08 # [v1.26.2] 2023-02-08

View File

@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.13)
set(OBSW_VERSION_MAJOR 1) set(OBSW_VERSION_MAJOR 1)
set(OBSW_VERSION_MINOR 26) set(OBSW_VERSION_MINOR 26)
set(OBSW_VERSION_REVISION 2) set(OBSW_VERSION_REVISION 3)
# set(CMAKE_VERBOSE TRUE) # set(CMAKE_VERBOSE TRUE)

View File

@ -9,7 +9,6 @@
#include <objects/systemObjectList.h> #include <objects/systemObjectList.h>
#include "OBSWConfig.h" #include "OBSWConfig.h"
#include "devConf.h"
#include "fsfw/platform.h" #include "fsfw/platform.h"
#include "fsfw_tests/integration/task/TestTask.h" #include "fsfw_tests/integration/task/TestTask.h"
@ -22,30 +21,13 @@
#include "fsfw/osal/common/TcpTmTcServer.h" #include "fsfw/osal/common/TcpTmTcServer.h"
#endif #endif
#include <fsfw/tmtcpacket/pus/tm.h>
#if OBSW_ADD_TEST_CODE == 1 #if OBSW_ADD_TEST_CODE == 1
#include <test/testtasks/TestTask.h> #include <test/testtasks/TestTask.h>
#endif #endif
#include <dummies/AcuDummy.h> #include <dummies/AcuDummy.h>
#include <dummies/BpxDummy.h>
#include <dummies/ComCookieDummy.h>
#include <dummies/ComIFDummy.h>
#include <dummies/CoreControllerDummy.h> #include <dummies/CoreControllerDummy.h>
#include <dummies/GyroAdisDummy.h>
#include <dummies/GyroL3GD20Dummy.h>
#include <dummies/ImtqDummy.h>
#include <dummies/MgmLIS3MDLDummy.h>
#include <dummies/P60DockDummy.h>
#include <dummies/PduDummy.h>
#include <dummies/PlPcduDummy.h>
#include <dummies/RwDummy.h>
#include <dummies/StarTrackerDummy.h>
#include <dummies/SusDummy.h>
#include <dummies/SyrlinksDummy.h>
#include "../dummies/TemperatureSensorInserter.h"
#include "dummies/helpers.h" #include "dummies/helpers.h"
#include "mission/utility/GlobalConfigHandler.h" #include "mission/utility/GlobalConfigHandler.h"

View File

@ -926,7 +926,7 @@ void ObjectFactory::createImtqComponents(PowerSwitchIF* pwrSwitcher) {
I2cCookie* imtqI2cCookie = new I2cCookie(addresses::IMTQ, IMTQ::MAX_REPLY_SIZE, q7s::I2C_PL_EIVE); I2cCookie* imtqI2cCookie = new I2cCookie(addresses::IMTQ, IMTQ::MAX_REPLY_SIZE, q7s::I2C_PL_EIVE);
auto imtqHandler = new ImtqHandler(objects::IMTQ_HANDLER, objects::I2C_COM_IF, imtqI2cCookie, auto imtqHandler = new ImtqHandler(objects::IMTQ_HANDLER, objects::I2C_COM_IF, imtqI2cCookie,
pcdu::Switches::PDU1_CH3_MGT_5V); pcdu::Switches::PDU1_CH3_MGT_5V);
imtqHandler->setThermalStateRequestPoolIds(); imtqHandler->setUpThermalModule(ThermalStateCfg());
imtqHandler->setPowerSwitcher(pwrSwitcher); imtqHandler->setPowerSwitcher(pwrSwitcher);
imtqHandler->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM); imtqHandler->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM);
static_cast<void>(imtqHandler); static_cast<void>(imtqHandler);

View File

@ -112,6 +112,8 @@ void ObjectFactory::produce(void* args) {
pcdu::Switches::PDU1_CH5_SOLAR_CELL_EXP_5V); pcdu::Switches::PDU1_CH5_SOLAR_CELL_EXP_5V);
#endif #endif
createAcsController(true); createAcsController(true);
createThermalController(); HeaterHandler* heaterHandler = nullptr;
ObjectFactory::createGenericHeaterComponents(*gpioComIF, *pwrSwitcher, heaterHandler);
createThermalController(*heaterHandler);
satsystem::com::init(); satsystem::com::init();
} }

View File

@ -43,5 +43,5 @@ ReturnValue_t ImtqDummy::initializeLocalDataPool(localpool::DataPool &localDataP
localDataPoolMap.emplace(IMTQ::ACTUATION_CAL_STATUS, new PoolEntry<uint8_t>({0})); localDataPoolMap.emplace(IMTQ::ACTUATION_CAL_STATUS, new PoolEntry<uint8_t>({0}));
localDataPoolMap.emplace(IMTQ::MTM_RAW, new PoolEntry<float>({0.12, 0.76, -0.45}, true)); localDataPoolMap.emplace(IMTQ::MTM_RAW, new PoolEntry<float>({0.12, 0.76, -0.45}, true));
localDataPoolMap.emplace(IMTQ::ACTUATION_RAW_STATUS, new PoolEntry<uint8_t>({0})); localDataPoolMap.emplace(IMTQ::ACTUATION_RAW_STATUS, new PoolEntry<uint8_t>({0}));
return returnvalue::OK; return DeviceHandlerBase::initializeLocalDataPool(localDataPoolMap, poolManager);
} }

View File

@ -4,13 +4,14 @@
#include <cmath> #include <cmath>
#include <cstdlib> #include <cstdlib>
#include <utility>
TemperatureSensorInserter::TemperatureSensorInserter(object_id_t objectId, TemperatureSensorInserter::TemperatureSensorInserter(object_id_t objectId,
const Max31865DummyMap& tempSensorDummies_, Max31865DummyMap tempSensorDummies_,
const Tmp1075DummyMap& tempTmpSensorDummies_) Tmp1075DummyMap tempTmpSensorDummies_)
: SystemObject(objects::THERMAL_TEMP_INSERTER), : SystemObject(objects::THERMAL_TEMP_INSERTER),
max31865DummyMap(tempSensorDummies_), max31865DummyMap(std::move(tempSensorDummies_)),
tmp1075DummyMap(tempTmpSensorDummies_) {} tmp1075DummyMap(std::move(tempTmpSensorDummies_)) {}
ReturnValue_t TemperatureSensorInserter::initialize() { ReturnValue_t TemperatureSensorInserter::initialize() {
if (performTest) { if (performTest) {

View File

@ -10,9 +10,8 @@ class TemperatureSensorInserter : public ExecutableObjectIF, public SystemObject
public: public:
using Max31865DummyMap = std::map<object_id_t, Max31865Dummy*>; using Max31865DummyMap = std::map<object_id_t, Max31865Dummy*>;
using Tmp1075DummyMap = std::map<object_id_t, Tmp1075Dummy*>; using Tmp1075DummyMap = std::map<object_id_t, Tmp1075Dummy*>;
explicit TemperatureSensorInserter(object_id_t objectId, explicit TemperatureSensorInserter(object_id_t objectId, Max31865DummyMap tempSensorDummies_,
const Max31865DummyMap& tempSensorDummies_, Tmp1075DummyMap tempTmpSensorDummies_);
const Tmp1075DummyMap& tempTmpSensorDummies_);
ReturnValue_t initialize() override; ReturnValue_t initialize() override;

View File

@ -46,7 +46,8 @@ void dummy::createDummies(DummyCfg cfg, PowerSwitchIF& pwrSwitch) {
if (cfg.addSyrlinksDummies) { if (cfg.addSyrlinksDummies) {
new SyrlinksDummy(objects::SYRLINKS_HANDLER, objects::DUMMY_COM_IF, comCookieDummy); new SyrlinksDummy(objects::SYRLINKS_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
} }
new ImtqDummy(objects::IMTQ_HANDLER, objects::DUMMY_COM_IF, comCookieDummy); auto* imtqDummy = new ImtqDummy(objects::IMTQ_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
imtqDummy->setUpThermalModule(ThermalStateCfg());
if (cfg.addPowerDummies) { if (cfg.addPowerDummies) {
new AcuDummy(objects::ACU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy); new AcuDummy(objects::ACU_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);
new PduDummy(objects::PDU1_HANDLER, objects::DUMMY_COM_IF, comCookieDummy); new PduDummy(objects::PDU1_HANDLER, objects::DUMMY_COM_IF, comCookieDummy);

2
fsfw

@ -1 +1 @@
Subproject commit 6ce80ea6c5b7621876422d2c7614096cbca6f302 Subproject commit 14a92b3d89e37d50ccd46b250826cac293185d68

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="all" type="PythonConfigurationType" factoryName="Python">
<module name="generators" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/gen.py" />
<option name="PARAMETERS" value="all" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -47,6 +47,7 @@ ReturnValue_t GpsHyperionLinuxController::checkModeCommand(Mode_t mode, Submode_
gpsSet.setValidity(false, true); gpsSet.setValidity(false, true);
// There can't be a fix with a device that is off. // There can't be a fix with a device that is off.
triggerEvent(GpsHyperion::GPS_FIX_CHANGE, gpsSet.fixMode.value, 0); triggerEvent(GpsHyperion::GPS_FIX_CHANGE, gpsSet.fixMode.value, 0);
gpsSet.fixMode.value = 0;
oneShotSwitches.reset(); oneShotSwitches.reset();
modeCommanded = false; modeCommanded = false;
} }

View File

@ -21,7 +21,7 @@ ThermalController::ThermalController(object_id_t objectId, HeaterHandler& heater
sensorTemperatures(this), sensorTemperatures(this),
susTemperatures(this), susTemperatures(this),
deviceTemperatures(this), deviceTemperatures(this),
imtqThermalSet(objects::IMTQ_HANDLER), imtqThermalSet(objects::IMTQ_HANDLER, ThermalStateCfg()),
max31865Set0(objects::RTD_0_IC3_PLOC_HEATSPREADER, max31865Set0(objects::RTD_0_IC3_PLOC_HEATSPREADER,
EiveMax31855::RtdCommands::EXCHANGE_SET_ID), EiveMax31855::RtdCommands::EXCHANGE_SET_ID),
max31865Set1(objects::RTD_1_IC4_PLOC_MISSIONBOARD, max31865Set1(objects::RTD_1_IC4_PLOC_MISSIONBOARD,
@ -109,30 +109,7 @@ void ThermalController::performControlOperation() {
deviceTemperatures.commit(); deviceTemperatures.commit();
} }
ctrlCameraBody(); //performThermalModuleCtrl();
ctrlAcsBoard();
ctrlMgt();
ctrlRw();
ctrlStr();
ctrlIfBoard();
ctrlAcsBoard();
ctrlObc();
ctrlObcIfBoard();
ctrlSBandTransceiver();
ctrlPcduP60Board();
ctrlPcduAcu();
ctrlPcduPdu();
ctrlPlPcduBoard();
ctrlPlocMissionBoard();
ctrlPlocProcessingBoard();
ctrlDac();
ctrlDro();
ctrlX8();
ctrlHpa();
ctrlTx();
ctrlMpa();
ctrlScexBoard();
} }
ReturnValue_t ThermalController::initializeLocalDataPool(localpool::DataPool& localDataPoolMap, ReturnValue_t ThermalController::initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
@ -1338,6 +1315,33 @@ void ThermalController::ctrlHpa() {
} }
} }
void ThermalController::performThermalModuleCtrl() {
ctrlCameraBody();
ctrlAcsBoard();
ctrlMgt();
ctrlRw();
ctrlStr();
ctrlIfBoard();
ctrlAcsBoard();
ctrlObc();
ctrlObcIfBoard();
ctrlSBandTransceiver();
ctrlPcduP60Board();
ctrlPcduAcu();
ctrlPcduPdu();
ctrlPlPcduBoard();
ctrlPlocMissionBoard();
ctrlPlocProcessingBoard();
ctrlDac();
ctrlDro();
ctrlX8();
ctrlHpa();
ctrlTx();
ctrlMpa();
ctrlScexBoard();
}
void ThermalController::ctrlScexBoard() { void ThermalController::ctrlScexBoard() {
sensors[0].first = sensorTemperatures.sensor_scex.isValid(); sensors[0].first = sensorTemperatures.sensor_scex.isValid();
sensors[0].second = sensorTemperatures.sensor_scex.value; sensors[0].second = sensorTemperatures.sensor_scex.value;

View File

@ -44,6 +44,7 @@ class ThermalController : public ExtendedControllerBase {
ReturnValue_t initialize() override; ReturnValue_t initialize() override;
protected: protected:
void performThermalModuleCtrl();
ReturnValue_t handleCommandMessage(CommandMessage* message) override; ReturnValue_t handleCommandMessage(CommandMessage* message) override;
void performControlOperation() override; void performControlOperation() override;
ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap, ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,