Merge branch 'mueller/plpcdu-sus-updates' into mueller/master
Some checks failed
EIVE/eive-obsw/pipeline/head There was a failure building this commit
Some checks failed
EIVE/eive-obsw/pipeline/head There was a failure building this commit
This commit is contained in:
commit
af19d40444
16
README.md
16
README.md
@ -441,12 +441,24 @@ Beagle Bone Black for download here
|
|||||||
Download it and unzip it somewhere in the Xilinx installation folder.
|
Download it and unzip it somewhere in the Xilinx installation folder.
|
||||||
You can use the following command if `wget` can be used or for CI/CD:
|
You can use the following command if `wget` can be used or for CI/CD:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/agnJGYeRf6fw2ci/download/cortexa9hf-neon-xiphos-linux-gnueabi.tar.gz
|
wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/SyXpdBBQX32xPgE/download/cortexa9hf-neon-xiphos-linux-gnueabi.tar.gz
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, create a new environmental variables `Q7S_SYSROOT` and set it to the local system root path.
|
Then, create a new environmental variables `Q7S_SYSROOT` and set it to the local system root path.
|
||||||
|
|
||||||
|
### Updating system root for CI
|
||||||
|
|
||||||
|
If the system root is updated, it needs to be manually updated on the buggy file server.
|
||||||
|
If access on `buggy.irs.uni-stuttgart.de` is possible with `ssh` and the rootfs in the cloud
|
||||||
|
[was updated](https://eive-cloud.irs.uni-stuttgart.de/index.php/apps/files/?dir=/EIVE_IRS/Software/rootfs&fileid=831849)
|
||||||
|
as well, you can update the rootfs like this:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd /var/www/eive/tools
|
||||||
|
wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/SyXpdBBQX32xPgE/download/cortexa9hf-neon-xiphos-linux-gnueabi.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
## Setting up UNIX environment for real-time functionalities
|
## Setting up UNIX environment for real-time functionalities
|
||||||
|
|
||||||
Please note that on most UNIX environments (e.g. Ubuntu), the real time functionalities
|
Please note that on most UNIX environments (e.g. Ubuntu), the real time functionalities
|
||||||
|
@ -142,13 +142,13 @@ void Q7STestTask::testDummyParams() {
|
|||||||
param.print();
|
param.print();
|
||||||
|
|
||||||
int test = 0;
|
int test = 0;
|
||||||
result = param.getValue<int>(DummyParameter::DUMMY_KEY_PARAM_1, &test);
|
result = param.getValue<int>(DummyParameter::DUMMY_KEY_PARAM_1, test);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
sif::warning << "Q7STestTask::testDummyParams: Key " << DummyParameter::DUMMY_KEY_PARAM_1
|
sif::warning << "Q7STestTask::testDummyParams: Key " << DummyParameter::DUMMY_KEY_PARAM_1
|
||||||
<< " does not exist" << std::endl;
|
<< " does not exist" << std::endl;
|
||||||
}
|
}
|
||||||
std::string test2;
|
std::string test2;
|
||||||
result = param.getValue<std::string>(DummyParameter::DUMMY_KEY_PARAM_2, &test2);
|
result = param.getValue<std::string>(DummyParameter::DUMMY_KEY_PARAM_2, test2);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
sif::warning << "Q7STestTask::testDummyParams: Key " << DummyParameter::DUMMY_KEY_PARAM_1
|
sif::warning << "Q7STestTask::testDummyParams: Key " << DummyParameter::DUMMY_KEY_PARAM_1
|
||||||
<< " does not exist" << std::endl;
|
<< " does not exist" << std::endl;
|
||||||
|
@ -1169,15 +1169,6 @@ void ObjectFactory::createPlPcduComponents(LinuxLibgpioIF* gpioComIF, SpiComIF*
|
|||||||
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_DRO, consumer, gpio::DIR_OUT,
|
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_DRO, consumer, gpio::DIR_OUT,
|
||||||
gpio::Levels::LOW);
|
gpio::Levels::LOW);
|
||||||
plPcduGpios->addGpio(gpioIds::PLPCDU_ENB_DRO, gpio);
|
plPcduGpios->addGpio(gpioIds::PLPCDU_ENB_DRO, gpio);
|
||||||
consumer = "PLPCDU_ENB_HPA";
|
|
||||||
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_HPA, consumer, gpio::DIR_OUT,
|
|
||||||
gpio::Levels::LOW);
|
|
||||||
plPcduGpios->addGpio(gpioIds::PLPCDU_ENB_HPA, gpio);
|
|
||||||
consumer = "PLPCDU_ENB_MPA";
|
|
||||||
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_MPA, consumer, gpio::DIR_OUT,
|
|
||||||
gpio::Levels::LOW);
|
|
||||||
plPcduGpios->addGpio(gpioIds::PLPCDU_ENB_MPA, gpio);
|
|
||||||
|
|
||||||
consumer = "PLPCDU_ENB_X8";
|
consumer = "PLPCDU_ENB_X8";
|
||||||
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_X8, consumer, gpio::DIR_OUT,
|
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_X8, consumer, gpio::DIR_OUT,
|
||||||
gpio::Levels::LOW);
|
gpio::Levels::LOW);
|
||||||
@ -1186,6 +1177,14 @@ void ObjectFactory::createPlPcduComponents(LinuxLibgpioIF* gpioComIF, SpiComIF*
|
|||||||
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_TX, consumer, gpio::DIR_OUT,
|
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_TX, consumer, gpio::DIR_OUT,
|
||||||
gpio::Levels::LOW);
|
gpio::Levels::LOW);
|
||||||
plPcduGpios->addGpio(gpioIds::PLPCDU_ENB_TX, gpio);
|
plPcduGpios->addGpio(gpioIds::PLPCDU_ENB_TX, gpio);
|
||||||
|
consumer = "PLPCDU_ENB_MPA";
|
||||||
|
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_MPA, consumer, gpio::DIR_OUT,
|
||||||
|
gpio::Levels::LOW);
|
||||||
|
plPcduGpios->addGpio(gpioIds::PLPCDU_ENB_MPA, gpio);
|
||||||
|
consumer = "PLPCDU_ENB_HPA";
|
||||||
|
gpio = new GpiodRegularByLineName(q7s::gpioNames::PL_PCDU_ENABLE_HPA, consumer, gpio::DIR_OUT,
|
||||||
|
gpio::Levels::LOW);
|
||||||
|
plPcduGpios->addGpio(gpioIds::PLPCDU_ENB_HPA, gpio);
|
||||||
|
|
||||||
// Chip select pin is active low
|
// Chip select pin is active low
|
||||||
consumer = "PLPCDU_ADC_CS";
|
consumer = "PLPCDU_ADC_CS";
|
||||||
@ -1197,8 +1196,9 @@ void ObjectFactory::createPlPcduComponents(LinuxLibgpioIF* gpioComIF, SpiComIF*
|
|||||||
q7s::SPI_DEFAULT_DEV, plpcdu::MAX_ADC_REPLY_SIZE,
|
q7s::SPI_DEFAULT_DEV, plpcdu::MAX_ADC_REPLY_SIZE,
|
||||||
spi::DEFAULT_MAX_1227_MODE, spi::DEFAULT_MAX_1227_SPEED);
|
spi::DEFAULT_MAX_1227_MODE, spi::DEFAULT_MAX_1227_SPEED);
|
||||||
// Create device handler components
|
// Create device handler components
|
||||||
auto plPcduHandler = new PayloadPcduHandler(objects::PLPCDU_HANDLER, objects::SPI_COM_IF,
|
auto plPcduHandler =
|
||||||
spiCookie, gpioComIF, false);
|
new PayloadPcduHandler(objects::PLPCDU_HANDLER, objects::SPI_COM_IF, spiCookie, gpioComIF,
|
||||||
|
SdCardManager::instance(), false);
|
||||||
spiCookie->setCallbackMode(PayloadPcduHandler::extConvAsTwoCallback, plPcduHandler);
|
spiCookie->setCallbackMode(PayloadPcduHandler::extConvAsTwoCallback, plPcduHandler);
|
||||||
static_cast<void>(plPcduHandler);
|
static_cast<void>(plPcduHandler);
|
||||||
#if OBSW_TEST_PL_PCDU == 1
|
#if OBSW_TEST_PL_PCDU == 1
|
||||||
|
@ -1517,69 +1517,69 @@ ReturnValue_t StarTrackerHandler::prepareUploadCentroidCommand(const uint8_t* co
|
|||||||
<< " does not exist" << std::endl;
|
<< " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::id, &req.id);
|
result = j.getValue(StarTracker::UploadCentroidKeys::id, req.id);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::id << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::id << " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::pixx, &req.pixx);
|
result = j.getValue(StarTracker::UploadCentroidKeys::pixx, req.pixx);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::pixx << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::pixx << " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::pixy, &req.pixy);
|
result = j.getValue(StarTracker::UploadCentroidKeys::pixy, req.pixy);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::pixy << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::pixy << " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::x_uncorrected, &req.x_uncorrected);
|
result = j.getValue(StarTracker::UploadCentroidKeys::x_uncorrected, req.x_uncorrected);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::x_uncorrected << " does not exist"
|
<< StarTracker::UploadCentroidKeys::x_uncorrected << " does not exist"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::y_uncorrected, &req.y_uncorrected);
|
result = j.getValue(StarTracker::UploadCentroidKeys::y_uncorrected, req.y_uncorrected);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::y_uncorrected << " does not exist"
|
<< StarTracker::UploadCentroidKeys::y_uncorrected << " does not exist"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::x_corrected, &req.x_corrected);
|
result = j.getValue(StarTracker::UploadCentroidKeys::x_corrected, req.x_corrected);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::x_corrected << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::x_corrected << " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::y_corrected, &req.y_corrected);
|
result = j.getValue(StarTracker::UploadCentroidKeys::y_corrected, req.y_corrected);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::y_corrected << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::y_corrected << " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::magnitude, &req.magnitude);
|
result = j.getValue(StarTracker::UploadCentroidKeys::magnitude, req.magnitude);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::magnitude << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::magnitude << " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::cxa, &req.cxa);
|
result = j.getValue(StarTracker::UploadCentroidKeys::cxa, req.cxa);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::cxa << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::cxa << " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::cya, &req.cya);
|
result = j.getValue(StarTracker::UploadCentroidKeys::cya, req.cya);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::cya << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::cya << " does not exist" << std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = j.getValue(StarTracker::UploadCentroidKeys::quality, &req.quality);
|
result = j.getValue(StarTracker::UploadCentroidKeys::quality, req.quality);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
||||||
<< StarTracker::UploadCentroidKeys::quality << " does not exist" << std::endl;
|
<< StarTracker::UploadCentroidKeys::quality << " does not exist" << std::endl;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "SdCardManager.h"
|
#include "SdCardManager.h"
|
||||||
|
|
||||||
|
#include <fsfw/ipc/MutexGuard.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
@ -15,7 +16,9 @@
|
|||||||
|
|
||||||
SdCardManager* SdCardManager::factoryInstance = nullptr;
|
SdCardManager* SdCardManager::factoryInstance = nullptr;
|
||||||
|
|
||||||
SdCardManager::SdCardManager() : SystemObject(objects::SDC_MANAGER), cmdExecutor(256) {}
|
SdCardManager::SdCardManager() : SystemObject(objects::SDC_MANAGER), cmdExecutor(256) {
|
||||||
|
mutex = MutexFactory::instance()->createMutex();
|
||||||
|
}
|
||||||
|
|
||||||
SdCardManager::~SdCardManager() {}
|
SdCardManager::~SdCardManager() {}
|
||||||
|
|
||||||
@ -162,6 +165,7 @@ ReturnValue_t SdCardManager::setSdCardState(sd::SdCard sdCard, bool on) {
|
|||||||
|
|
||||||
ReturnValue_t SdCardManager::getSdCardActiveStatus(SdStatePair& active) {
|
ReturnValue_t SdCardManager::getSdCardActiveStatus(SdStatePair& active) {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
MutexGuard mg(mutex);
|
||||||
if (not filesystem::exists(SD_STATE_FILE)) {
|
if (not filesystem::exists(SD_STATE_FILE)) {
|
||||||
return STATUS_FILE_NEXISTS;
|
return STATUS_FILE_NEXISTS;
|
||||||
}
|
}
|
||||||
@ -366,6 +370,7 @@ ReturnValue_t SdCardManager::updateSdCardStateFile() {
|
|||||||
if (cmdExecutor.getCurrentState() == CommandExecutor::States::PENDING) {
|
if (cmdExecutor.getCurrentState() == CommandExecutor::States::PENDING) {
|
||||||
return CommandExecutor::COMMAND_PENDING;
|
return CommandExecutor::COMMAND_PENDING;
|
||||||
}
|
}
|
||||||
|
MutexGuard mg(mutex);
|
||||||
// Use q7hw utility and pipe the command output into the state file
|
// Use q7hw utility and pipe the command output into the state file
|
||||||
std::string updateCmd = "q7hw sd info all > " + std::string(SD_STATE_FILE);
|
std::string updateCmd = "q7hw sd info all > " + std::string(SD_STATE_FILE);
|
||||||
cmdExecutor.load(updateCmd, blocking, printCmdOutput);
|
cmdExecutor.load(updateCmd, blocking, printCmdOutput);
|
||||||
@ -440,6 +445,7 @@ void SdCardManager::setPrintCommandOutput(bool print) { this->printCmdOutput = p
|
|||||||
bool SdCardManager::isSdCardMounted(sd::SdCard sdCard) {
|
bool SdCardManager::isSdCardMounted(sd::SdCard sdCard) {
|
||||||
SdCardManager::SdStatePair active;
|
SdCardManager::SdStatePair active;
|
||||||
ReturnValue_t result = this->getSdCardActiveStatus(active);
|
ReturnValue_t result = this->getSdCardActiveStatus(active);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
sif::debug << "SdCardManager::isSdCardMounted: Failed to get SD card active state";
|
sif::debug << "SdCardManager::isSdCardMounted: Failed to get SD card active state";
|
||||||
return false;
|
return false;
|
||||||
|
@ -10,11 +10,12 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "definitions.h"
|
|
||||||
#include "events/subsystemIdRanges.h"
|
#include "events/subsystemIdRanges.h"
|
||||||
#include "fsfw/events/Event.h"
|
#include "fsfw/events/Event.h"
|
||||||
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
|
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
|
||||||
#include "fsfw_hal/linux/CommandExecutor.h"
|
#include "fsfw_hal/linux/CommandExecutor.h"
|
||||||
|
#include "mission/memory/SdCardMountedIF.h"
|
||||||
|
#include "mission/memory/definitions.h"
|
||||||
#include "returnvalues/classIds.h"
|
#include "returnvalues/classIds.h"
|
||||||
|
|
||||||
class MutexIF;
|
class MutexIF;
|
||||||
@ -23,10 +24,16 @@ class MutexIF;
|
|||||||
* @brief Manages handling of SD cards like switching them on or off or getting the current
|
* @brief Manages handling of SD cards like switching them on or off or getting the current
|
||||||
* state
|
* state
|
||||||
*/
|
*/
|
||||||
|
<<<<<<< HEAD
|
||||||
class SdCardManager : public SystemObject {
|
class SdCardManager : public SystemObject {
|
||||||
|
=======
|
||||||
|
class SdCardManager : public SystemObject, public SdCardMountedIF {
|
||||||
|
>>>>>>> mueller/plpcdu-sus-updates
|
||||||
friend class SdCardAccess;
|
friend class SdCardAccess;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
using mountInitCb = ReturnValue_t (*)(void* args);
|
||||||
|
|
||||||
enum class Operations { SWITCHING_ON, SWITCHING_OFF, MOUNTING, UNMOUNTING, IDLE };
|
enum class Operations { SWITCHING_ON, SWITCHING_OFF, MOUNTING, UNMOUNTING, IDLE };
|
||||||
|
|
||||||
enum class OpStatus { IDLE, TIMEOUT, ONGOING, SUCCESS, FAIL };
|
enum class OpStatus { IDLE, TIMEOUT, ONGOING, SUCCESS, FAIL };
|
||||||
@ -88,7 +95,7 @@ class SdCardManager : public SystemObject {
|
|||||||
* @param sdCard
|
* @param sdCard
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
ReturnValue_t getPreferredSdCard(sd::SdCard& sdCard) const;
|
ReturnValue_t getPreferredSdCard(sd::SdCard& sdCard) const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Switch on the specified SD card.
|
* Switch on the specified SD card.
|
||||||
@ -170,7 +177,7 @@ class SdCardManager : public SystemObject {
|
|||||||
* @param prefSdCardPtr
|
* @param prefSdCardPtr
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
std::string getCurrentMountPrefix(sd::SdCard prefSdCardPtr = sd::SdCard::NONE);
|
std::string getCurrentMountPrefix(sd::SdCard prefSdCardPtr = sd::SdCard::NONE) override;
|
||||||
|
|
||||||
OpStatus checkCurrentOp(Operations& currentOp);
|
OpStatus checkCurrentOp(Operations& currentOp);
|
||||||
|
|
||||||
@ -183,19 +190,20 @@ class SdCardManager : public SystemObject {
|
|||||||
void setPrintCommandOutput(bool print);
|
void setPrintCommandOutput(bool print);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Checks if an SD card is mounted
|
* @brief Checks if an SD card is mounted.
|
||||||
*
|
*
|
||||||
* @param sdCard The SD card to check
|
* @param sdCard The SD card to check
|
||||||
*
|
*
|
||||||
* @return true if mounted, otherwise false
|
* @return true if mounted, otherwise false
|
||||||
*/
|
*/
|
||||||
bool isSdCardMounted(sd::SdCard sdCard);
|
bool isSdCardMounted(sd::SdCard sdCard) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CommandExecutor cmdExecutor;
|
CommandExecutor cmdExecutor;
|
||||||
Operations currentOp = Operations::IDLE;
|
Operations currentOp = Operations::IDLE;
|
||||||
bool blocking = false;
|
bool blocking = false;
|
||||||
bool printCmdOutput = true;
|
bool printCmdOutput = true;
|
||||||
|
MutexIF* mutex = nullptr;
|
||||||
|
|
||||||
SdCardManager();
|
SdCardManager();
|
||||||
|
|
||||||
|
2
fsfw
2
fsfw
@ -1 +1 @@
|
|||||||
Subproject commit 4747e54c5d71e930125803f875532ee1f79f5054
|
Subproject commit 123f2ff360e71228e1c0c786d80a4c93d7144a2e
|
@ -1,140 +1,153 @@
|
|||||||
2200;STORE_SEND_WRITE_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2200;STORE_SEND_WRITE_FAILED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2201;STORE_WRITE_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2201;STORE_WRITE_FAILED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2202;STORE_SEND_READ_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2202;STORE_SEND_READ_FAILED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2203;STORE_READ_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2203;STORE_READ_FAILED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2204;UNEXPECTED_MSG;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2204;UNEXPECTED_MSG;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2205;STORING_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2205;STORING_FAILED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2206;TM_DUMP_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2206;TM_DUMP_FAILED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2207;STORE_INIT_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2207;STORE_INIT_FAILED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2208;STORE_INIT_EMPTY;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2208;STORE_INIT_EMPTY;INFO;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2209;STORE_CONTENT_CORRUPTED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2209;STORE_CONTENT_CORRUPTED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2210;STORE_INITIALIZE;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2210;STORE_INITIALIZE;INFO;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2211;INIT_DONE;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2211;INIT_DONE;INFO;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2212;DUMP_FINISHED;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2212;DUMP_FINISHED;INFO;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2213;DELETION_FINISHED;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2213;DELETION_FINISHED;INFO;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2214;DELETION_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2214;DELETION_FAILED;LOW;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2215;AUTO_CATALOGS_SENDING_FAILED;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
2215;AUTO_CATALOGS_SENDING_FAILED;INFO;;./fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||||
2600;GET_DATA_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h
|
2600;GET_DATA_FAILED;LOW;;./fsfw/src/fsfw/storagemanager/StorageManagerIF.h
|
||||||
2601;STORE_DATA_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h
|
2601;STORE_DATA_FAILED;LOW;;./fsfw/src/fsfw/storagemanager/StorageManagerIF.h
|
||||||
2800;DEVICE_BUILDING_COMMAND_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2800;DEVICE_BUILDING_COMMAND_FAILED;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2801;DEVICE_SENDING_COMMAND_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2801;DEVICE_SENDING_COMMAND_FAILED;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2802;DEVICE_REQUESTING_REPLY_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2802;DEVICE_REQUESTING_REPLY_FAILED;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2803;DEVICE_READING_REPLY_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2803;DEVICE_READING_REPLY_FAILED;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2804;DEVICE_INTERPRETING_REPLY_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2804;DEVICE_INTERPRETING_REPLY_FAILED;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2805;DEVICE_MISSED_REPLY;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2805;DEVICE_MISSED_REPLY;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2806;DEVICE_UNKNOWN_REPLY;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2806;DEVICE_UNKNOWN_REPLY;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2807;DEVICE_UNREQUESTED_REPLY;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2807;DEVICE_UNREQUESTED_REPLY;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2808;INVALID_DEVICE_COMMAND;LOW;Indicates a SW bug in child class.;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2808;INVALID_DEVICE_COMMAND;LOW;Indicates a SW bug in child class.;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2809;MONITORING_LIMIT_EXCEEDED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2809;MONITORING_LIMIT_EXCEEDED;LOW;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2810;MONITORING_AMBIGUOUS;HIGH;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2810;MONITORING_AMBIGUOUS;HIGH;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
2811;DEVICE_WANTS_HARD_REBOOT;HIGH;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
2811;DEVICE_WANTS_HARD_REBOOT;HIGH;;./fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||||
4201;FUSE_CURRENT_HIGH;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/power/Fuse.h
|
4201;FUSE_CURRENT_HIGH;LOW;;./fsfw/src/fsfw/power/Fuse.h
|
||||||
4202;FUSE_WENT_OFF;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/power/Fuse.h
|
4202;FUSE_WENT_OFF;LOW;;./fsfw/src/fsfw/power/Fuse.h
|
||||||
4204;POWER_ABOVE_HIGH_LIMIT;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/power/Fuse.h
|
4204;POWER_ABOVE_HIGH_LIMIT;LOW;;./fsfw/src/fsfw/power/Fuse.h
|
||||||
4205;POWER_BELOW_LOW_LIMIT;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/power/Fuse.h
|
4205;POWER_BELOW_LOW_LIMIT;LOW;;./fsfw/src/fsfw/power/Fuse.h
|
||||||
4300;SWITCH_WENT_OFF;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/power/PowerSwitchIF.h
|
4300;SWITCH_WENT_OFF;LOW;;./fsfw/src/fsfw/power/PowerSwitchIF.h
|
||||||
5000;HEATER_ON;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/Heater.h
|
5000;HEATER_ON;INFO;;./fsfw/src/fsfw/thermal/Heater.h
|
||||||
5001;HEATER_OFF;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/Heater.h
|
5001;HEATER_OFF;INFO;;./fsfw/src/fsfw/thermal/Heater.h
|
||||||
5002;HEATER_TIMEOUT;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/Heater.h
|
5002;HEATER_TIMEOUT;LOW;;./fsfw/src/fsfw/thermal/Heater.h
|
||||||
5003;HEATER_STAYED_ON;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/Heater.h
|
5003;HEATER_STAYED_ON;LOW;;./fsfw/src/fsfw/thermal/Heater.h
|
||||||
5004;HEATER_STAYED_OFF;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/Heater.h
|
5004;HEATER_STAYED_OFF;LOW;;./fsfw/src/fsfw/thermal/Heater.h
|
||||||
5200;TEMP_SENSOR_HIGH;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
5200;TEMP_SENSOR_HIGH;LOW;;./fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
||||||
5201;TEMP_SENSOR_LOW;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
5201;TEMP_SENSOR_LOW;LOW;;./fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
||||||
5202;TEMP_SENSOR_GRADIENT;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
5202;TEMP_SENSOR_GRADIENT;LOW;;./fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
||||||
5901;COMPONENT_TEMP_LOW;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
5901;COMPONENT_TEMP_LOW;LOW;;./fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||||
5902;COMPONENT_TEMP_HIGH;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
5902;COMPONENT_TEMP_HIGH;LOW;;./fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||||
5903;COMPONENT_TEMP_OOL_LOW;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
5903;COMPONENT_TEMP_OOL_LOW;LOW;;./fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||||
5904;COMPONENT_TEMP_OOL_HIGH;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
5904;COMPONENT_TEMP_OOL_HIGH;LOW;;./fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||||
5905;TEMP_NOT_IN_OP_RANGE;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
5905;TEMP_NOT_IN_OP_RANGE;LOW;;./fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||||
7101;FDIR_CHANGED_STATE;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
7101;FDIR_CHANGED_STATE;INFO;;./fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
||||||
7102;FDIR_STARTS_RECOVERY;MEDIUM;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
7102;FDIR_STARTS_RECOVERY;MEDIUM;;./fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
||||||
7103;FDIR_TURNS_OFF_DEVICE;MEDIUM;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
7103;FDIR_TURNS_OFF_DEVICE;MEDIUM;;./fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
||||||
7201;MONITOR_CHANGED_STATE;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h
|
7201;MONITOR_CHANGED_STATE;LOW;;./fsfw/src/fsfw/monitoring/MonitoringIF.h
|
||||||
7202;VALUE_BELOW_LOW_LIMIT;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h
|
7202;VALUE_BELOW_LOW_LIMIT;LOW;;./fsfw/src/fsfw/monitoring/MonitoringIF.h
|
||||||
7203;VALUE_ABOVE_HIGH_LIMIT;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h
|
7203;VALUE_ABOVE_HIGH_LIMIT;LOW;;./fsfw/src/fsfw/monitoring/MonitoringIF.h
|
||||||
7204;VALUE_OUT_OF_RANGE;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h
|
7204;VALUE_OUT_OF_RANGE;LOW;;./fsfw/src/fsfw/monitoring/MonitoringIF.h
|
||||||
7400;CHANGING_MODE;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
7400;CHANGING_MODE;INFO;;./fsfw/src/fsfw/modes/HasModesIF.h
|
||||||
7401;MODE_INFO;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
7401;MODE_INFO;INFO;;./fsfw/src/fsfw/modes/HasModesIF.h
|
||||||
7402;FALLBACK_FAILED;HIGH;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
7402;FALLBACK_FAILED;HIGH;;./fsfw/src/fsfw/modes/HasModesIF.h
|
||||||
7403;MODE_TRANSITION_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
7403;MODE_TRANSITION_FAILED;LOW;;./fsfw/src/fsfw/modes/HasModesIF.h
|
||||||
7404;CANT_KEEP_MODE;HIGH;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
7404;CANT_KEEP_MODE;HIGH;;./fsfw/src/fsfw/modes/HasModesIF.h
|
||||||
7405;OBJECT_IN_INVALID_MODE;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
7405;OBJECT_IN_INVALID_MODE;LOW;;./fsfw/src/fsfw/modes/HasModesIF.h
|
||||||
7406;FORCING_MODE;MEDIUM;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
7406;FORCING_MODE;MEDIUM;;./fsfw/src/fsfw/modes/HasModesIF.h
|
||||||
7407;MODE_CMD_REJECTED;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
7407;MODE_CMD_REJECTED;LOW;;./fsfw/src/fsfw/modes/HasModesIF.h
|
||||||
7506;HEALTH_INFO;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
7506;HEALTH_INFO;INFO;;./fsfw/src/fsfw/health/HasHealthIF.h
|
||||||
7507;CHILD_CHANGED_HEALTH;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
7507;CHILD_CHANGED_HEALTH;INFO;;./fsfw/src/fsfw/health/HasHealthIF.h
|
||||||
7508;CHILD_PROBLEMS;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
7508;CHILD_PROBLEMS;LOW;;./fsfw/src/fsfw/health/HasHealthIF.h
|
||||||
7509;OVERWRITING_HEALTH;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
7509;OVERWRITING_HEALTH;LOW;;./fsfw/src/fsfw/health/HasHealthIF.h
|
||||||
7510;TRYING_RECOVERY;MEDIUM;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
7510;TRYING_RECOVERY;MEDIUM;;./fsfw/src/fsfw/health/HasHealthIF.h
|
||||||
7511;RECOVERY_STEP;MEDIUM;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
7511;RECOVERY_STEP;MEDIUM;;./fsfw/src/fsfw/health/HasHealthIF.h
|
||||||
7512;RECOVERY_DONE;MEDIUM;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
7512;RECOVERY_DONE;MEDIUM;;./fsfw/src/fsfw/health/HasHealthIF.h
|
||||||
7900;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
7900;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;./fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||||
7901;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
7901;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;./fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||||
7902;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
7902;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;./fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||||
7903;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
7903;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;./fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||||
7905;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
7905;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;./fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||||
8900;CLOCK_SET;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/pus/Service9TimeManagement.h
|
8900;CLOCK_SET;INFO;;./fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||||
8901;CLOCK_SET_FAILURE;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/pus/Service9TimeManagement.h
|
8901;CLOCK_SET_FAILURE;LOW;;./fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||||
9700;TEST;INFO;;/home/rmueller/EIVE/eive-obsw/fsfw/src/fsfw/pus/Service17Test.h
|
9700;TEST;INFO;;./fsfw/src/fsfw/pus/Service17Test.h
|
||||||
10600;CHANGE_OF_SETUP_PARAMETER;LOW;;/home/rmueller/EIVE/eive-obsw/fsfw/hal/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
|
10600;CHANGE_OF_SETUP_PARAMETER;LOW;;./fsfw/hal/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
|
||||||
10900;GPIO_PULL_HIGH_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/HeaterHandler.h
|
10900;GPIO_PULL_HIGH_FAILED;LOW;;./mission/devices/HeaterHandler.h
|
||||||
10901;GPIO_PULL_LOW_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/HeaterHandler.h
|
10901;GPIO_PULL_LOW_FAILED;LOW;;./mission/devices/HeaterHandler.h
|
||||||
10902;SWITCH_ALREADY_ON;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/HeaterHandler.h
|
10902;SWITCH_ALREADY_ON;LOW;;./mission/devices/HeaterHandler.h
|
||||||
10903;SWITCH_ALREADY_OFF;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/HeaterHandler.h
|
10903;SWITCH_ALREADY_OFF;LOW;;./mission/devices/HeaterHandler.h
|
||||||
10904;MAIN_SWITCH_TIMEOUT;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/HeaterHandler.h
|
10904;MAIN_SWITCH_TIMEOUT;LOW;;./mission/devices/HeaterHandler.h
|
||||||
11000;MAIN_SWITCH_ON_TIMEOUT;LOW;;/home/rmueller/EIVE/eive-obsw/linux/devices/SolarArrayDeploymentHandler.h
|
11000;MAIN_SWITCH_ON_TIMEOUT;LOW;;./mission/devices/SolarArrayDeploymentHandler.h
|
||||||
11001;MAIN_SWITCH_OFF_TIMEOUT;LOW;;/home/rmueller/EIVE/eive-obsw/linux/devices/SolarArrayDeploymentHandler.h
|
11001;MAIN_SWITCH_OFF_TIMEOUT;LOW;;./mission/devices/SolarArrayDeploymentHandler.h
|
||||||
11002;DEPLOYMENT_FAILED;HIGH;;/home/rmueller/EIVE/eive-obsw/linux/devices/SolarArrayDeploymentHandler.h
|
11002;DEPLOYMENT_FAILED;HIGH;;./mission/devices/SolarArrayDeploymentHandler.h
|
||||||
11003;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;;/home/rmueller/EIVE/eive-obsw/linux/devices/SolarArrayDeploymentHandler.h
|
11003;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;;./mission/devices/SolarArrayDeploymentHandler.h
|
||||||
11004;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;;/home/rmueller/EIVE/eive-obsw/linux/devices/SolarArrayDeploymentHandler.h
|
11004;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;;./mission/devices/SolarArrayDeploymentHandler.h
|
||||||
11101;MEMORY_READ_RPT_CRC_FAILURE;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/PlocMPSoCHandler.h
|
11101;MEMORY_READ_RPT_CRC_FAILURE;LOW;;./mission/devices/PlocMPSoCHandler.h
|
||||||
11102;ACK_FAILURE;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/PlocMPSoCHandler.h
|
11102;ACK_FAILURE;LOW;;./mission/devices/PlocMPSoCHandler.h
|
||||||
11103;EXE_FAILURE;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/PlocMPSoCHandler.h
|
11103;EXE_FAILURE;LOW;;./mission/devices/PlocMPSoCHandler.h
|
||||||
11104;CRC_FAILURE_EVENT;LOW;;/home/rmueller/EIVE/eive-obsw/mission/devices/PlocMPSoCHandler.h
|
11104;CRC_FAILURE_EVENT;LOW;;./mission/devices/PlocMPSoCHandler.h
|
||||||
11201;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;/home/rmueller/EIVE/eive-obsw/mission/devices/IMTQHandler.h
|
11201;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;./mission/devices/IMTQHandler.h
|
||||||
11202;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;/home/rmueller/EIVE/eive-obsw/mission/devices/IMTQHandler.h
|
11202;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;./mission/devices/IMTQHandler.h
|
||||||
11203;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;/home/rmueller/EIVE/eive-obsw/mission/devices/IMTQHandler.h
|
11203;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;./mission/devices/IMTQHandler.h
|
||||||
11204;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;/home/rmueller/EIVE/eive-obsw/mission/devices/IMTQHandler.h
|
11204;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;./mission/devices/IMTQHandler.h
|
||||||
11205;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;/home/rmueller/EIVE/eive-obsw/mission/devices/IMTQHandler.h
|
11205;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;./mission/devices/IMTQHandler.h
|
||||||
11206;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;/home/rmueller/EIVE/eive-obsw/mission/devices/IMTQHandler.h
|
11206;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;./mission/devices/IMTQHandler.h
|
||||||
11207;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;/home/rmueller/EIVE/eive-obsw/mission/devices/IMTQHandler.h
|
11207;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;./mission/devices/IMTQHandler.h
|
||||||
11208;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;/home/rmueller/EIVE/eive-obsw/mission/devices/IMTQHandler.h
|
11208;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;./mission/devices/IMTQHandler.h
|
||||||
11301;ERROR_STATE;HIGH;Reaction wheel signals an error state;/home/rmueller/EIVE/eive-obsw/mission/devices/RwHandler.h
|
11301;ERROR_STATE;HIGH;Reaction wheel signals an error state;./mission/devices/RwHandler.h
|
||||||
11501;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocSupervisorHandler.h
|
11501;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;./bsp_q7s/devices/PlocSupervisorHandler.h
|
||||||
11502;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocSupervisorHandler.h
|
11502;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;./bsp_q7s/devices/PlocSupervisorHandler.h
|
||||||
11503;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocSupervisorHandler.h
|
11503;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;./bsp_q7s/devices/PlocSupervisorHandler.h
|
||||||
11504;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocSupervisorHandler.h
|
11504;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;./bsp_q7s/devices/PlocSupervisorHandler.h
|
||||||
11600;SANITIZATION_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/bsp_q7s/memory/SdCardManager.h
|
11600;SANITIZATION_FAILED;LOW;;./bsp_q7s/memory/SdCardManager.h
|
||||||
11700;UPDATE_FILE_NOT_EXISTS;LOW;;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocUpdater.h
|
11601;MOUNTED_SD_CARD;INFO;;./bsp_q7s/memory/SdCardManager.h
|
||||||
11701;ACTION_COMMANDING_FAILED;LOW;Failed to send command to supervisor handler P1: Return value of CommandActionHelper::commandAction P2: Action ID of command to send;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocUpdater.h
|
11603;REBOOT_HW;MEDIUM;;./bsp_q7s/core/CoreController.h
|
||||||
11702;UPDATE_AVAILABLE_FAILED;LOW;Supervisor handler replied action message indicating a command execution failure of the update available command;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocUpdater.h
|
11700;UPDATE_FILE_NOT_EXISTS;LOW;;./bsp_q7s/devices/PlocUpdater.h
|
||||||
11703;UPDATE_TRANSFER_FAILED;LOW;Supervisor handler failed to transfer an update space packet. P1: Parameter holds the number of update packets already sent (inclusive the failed packet);/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocUpdater.h
|
11701;ACTION_COMMANDING_FAILED;LOW;Failed to send command to supervisor handler P1: Return value of CommandActionHelper::commandAction P2: Action ID of command to send;./bsp_q7s/devices/PlocUpdater.h
|
||||||
11704;UPDATE_VERIFY_FAILED;LOW;Supervisor failed to execute the update verify command.;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocUpdater.h
|
11702;UPDATE_AVAILABLE_FAILED;LOW;Supervisor handler replied action message indicating a command execution failure of the update available command;./bsp_q7s/devices/PlocUpdater.h
|
||||||
11705;UPDATE_FINISHED;INFO;MPSoC update successful completed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocUpdater.h
|
11703;UPDATE_TRANSFER_FAILED;LOW;Supervisor handler failed to transfer an update space packet. P1: Parameter holds the number of update packets already sent (inclusive the failed packet);./bsp_q7s/devices/PlocUpdater.h
|
||||||
11800;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocMemoryDumper.h
|
11704;UPDATE_VERIFY_FAILED;LOW;Supervisor failed to execute the update verify command.;./bsp_q7s/devices/PlocUpdater.h
|
||||||
11801;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocMemoryDumper.h
|
11705;UPDATE_FINISHED;INFO;MPSoC update successful completed;./bsp_q7s/devices/PlocUpdater.h
|
||||||
11802;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/PlocMemoryDumper.h
|
11800;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;./bsp_q7s/devices/PlocMemoryDumper.h
|
||||||
11901;INVALID_TC_FRAME;HIGH;;/home/rmueller/EIVE/eive-obsw/linux/obc/PdecHandler.h
|
11801;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;./bsp_q7s/devices/PlocMemoryDumper.h
|
||||||
11902;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;/home/rmueller/EIVE/eive-obsw/linux/obc/PdecHandler.h
|
11802;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;./bsp_q7s/devices/PlocMemoryDumper.h
|
||||||
11903;CARRIER_LOCK;INFO;Carrier lock detected;/home/rmueller/EIVE/eive-obsw/linux/obc/PdecHandler.h
|
11901;INVALID_TC_FRAME;HIGH;;./linux/obc/PdecHandler.h
|
||||||
11904;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);/home/rmueller/EIVE/eive-obsw/linux/obc/PdecHandler.h
|
11902;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;./linux/obc/PdecHandler.h
|
||||||
12000;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
11903;CARRIER_LOCK;INFO;Carrier lock detected;./linux/obc/PdecHandler.h
|
||||||
12001;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
11904;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);./linux/obc/PdecHandler.h
|
||||||
12002;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12000;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12003;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12001;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12004;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12002;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12005;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12003;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12006;FLASH_WRITE_FAILED;LOW;Flash write procedure failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12004;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12007;FLASH_READ_FAILED;LOW;Flash read procedure failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12005;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12008;FPGA_DOWNLOAD_SUCCESSFUL;LOW;Download of FPGA image successful;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12006;FLASH_WRITE_FAILED;LOW;Flash write procedure failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12009;FPGA_DOWNLOAD_FAILED;LOW;Download of FPGA image failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12007;FLASH_READ_FAILED;LOW;Flash read procedure failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12010;FPGA_UPLOAD_SUCCESSFUL;LOW;Upload of FPGA image successful;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12008;FPGA_DOWNLOAD_SUCCESSFUL;LOW;Download of FPGA image successful;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12011;FPGA_UPLOAD_FAILED;LOW;Upload of FPGA image failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12009;FPGA_DOWNLOAD_FAILED;LOW;Download of FPGA image failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12012;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12010;FPGA_UPLOAD_SUCCESSFUL;LOW;Upload of FPGA image successful;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12013;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12011;FPGA_UPLOAD_FAILED;LOW;Upload of FPGA image failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12014;STR_HELPER_NO_REPLY;LOW;Star tracker did not send replies (maybe device is powered off) P1: Position of upload or download packet for which no reply was sent;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12012;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12015;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12013;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12016;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12014;STR_HELPER_NO_REPLY;LOW;Star tracker did not send replies (maybe device is powered off) P1: Position of upload or download packet for which no reply was sent;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12017;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12015;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12018;STR_HELPER_SENDING_PACKET_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12016;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
12019;STR_HELPER_REQUESTING_MSG_FAILED;LOW;;/home/rmueller/EIVE/eive-obsw/bsp_q7s/devices/startracker/StrHelper.h
|
12017;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
|
12018;STR_HELPER_SENDING_PACKET_FAILED;LOW;;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
|
12019;STR_HELPER_REQUESTING_MSG_FAILED;LOW;;./bsp_q7s/devices/startracker/StrHelper.h
|
||||||
|
12101;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12102;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12103;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12104;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12105;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12106;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12107;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12108;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12109;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12110;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
12111;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;./mission/devices/PayloadPcduHandler.h
|
||||||
|
|
@ -74,6 +74,7 @@
|
|||||||
0x50000300;TMTC_BRIDGE
|
0x50000300;TMTC_BRIDGE
|
||||||
0x50000400;TMTC_POLLING_TASK
|
0x50000400;TMTC_POLLING_TASK
|
||||||
0x50000500;FILE_SYSTEM_HANDLER
|
0x50000500;FILE_SYSTEM_HANDLER
|
||||||
|
0x50000550;SDC_MANAGER
|
||||||
0x50000600;PTME
|
0x50000600;PTME
|
||||||
0x50000700;PDEC_HANDLER
|
0x50000700;PDEC_HANDLER
|
||||||
0x50000800;CCSDS_HANDLER
|
0x50000800;CCSDS_HANDLER
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -2,9 +2,18 @@ import os
|
|||||||
import enum
|
import enum
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
PATH_VAR_ROOT = Path(os.path.abspath(os.curdir))
|
|
||||||
ROOT_DIR = PATH_VAR_ROOT.absolute()
|
def determine_obsw_root_path() -> str:
|
||||||
OBSW_ROOT_DIR = PATH_VAR_ROOT.parent.absolute()
|
for _ in range(5):
|
||||||
|
if os.path.exists("CMakeLists.txt"):
|
||||||
|
return os.curdir
|
||||||
|
else:
|
||||||
|
os.chdir("..")
|
||||||
|
|
||||||
|
|
||||||
|
PATH_VAR_ROOT = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
ROOT_DIR = PATH_VAR_ROOT
|
||||||
|
OBSW_ROOT_DIR = Path(determine_obsw_root_path())
|
||||||
DATABASE_NAME = "eive_mod.db"
|
DATABASE_NAME = "eive_mod.db"
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,12 +3,17 @@ Event exporter.
|
|||||||
"""
|
"""
|
||||||
import datetime
|
import datetime
|
||||||
import time
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
from fsfwgen.events.event_parser import handle_csv_export, handle_cpp_export, \
|
from fsfwgen.events.event_parser import (
|
||||||
SubsystemDefinitionParser, EventParser
|
handle_csv_export,
|
||||||
|
handle_cpp_export,
|
||||||
|
SubsystemDefinitionParser,
|
||||||
|
EventParser,
|
||||||
|
)
|
||||||
from fsfwgen.parserbase.file_list_parser import FileListParser
|
from fsfwgen.parserbase.file_list_parser import FileListParser
|
||||||
from fsfwgen.utility.printer import PrettyPrinter
|
from fsfwgen.utility.printer import PrettyPrinter
|
||||||
from fsfwgen.utility.file_management import copy_file, move_file
|
from fsfwgen.utility.file_management import copy_file
|
||||||
from fsfwgen.core import get_console_logger
|
from fsfwgen.core import get_console_logger
|
||||||
from definitions import BspType, ROOT_DIR, OBSW_ROOT_DIR
|
from definitions import BspType, ROOT_DIR, OBSW_ROOT_DIR
|
||||||
|
|
||||||
@ -25,15 +30,16 @@ MOVE_CSV_FILE = True
|
|||||||
|
|
||||||
PARSE_HOST_BSP = True
|
PARSE_HOST_BSP = True
|
||||||
|
|
||||||
CPP_FILENAME = f'{__package__}/translateEvents.cpp'
|
# Store these files relative to the events folder
|
||||||
CPP_H_FILENAME = f'{__package__}/translateEvents.h'
|
CPP_FILENAME = f"{os.path.dirname(os.path.realpath(__file__))}/translateEvents.cpp"
|
||||||
|
CPP_H_FILENAME = f"{os.path.dirname(os.path.realpath(__file__))}/translateEvents.h"
|
||||||
|
|
||||||
BSP_SELECT = BspType.BSP_Q7S
|
BSP_SELECT = BspType.BSP_Q7S
|
||||||
|
|
||||||
BSP_DIR_NAME = BSP_SELECT.value
|
BSP_DIR_NAME = BSP_SELECT.value
|
||||||
|
|
||||||
CSV_FILENAME = f"{BSP_SELECT.value}_events.csv"
|
# Store this file in the root of the generators folder
|
||||||
CSV_MOVE_DESTINATION = f'{ROOT_DIR}'
|
CSV_FILENAME = f"{ROOT_DIR}/{BSP_SELECT.value}_events.csv"
|
||||||
|
|
||||||
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
|
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
|
||||||
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/linux/fsfwconfig"
|
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/linux/fsfwconfig"
|
||||||
@ -47,11 +53,15 @@ FILE_SEPARATOR = ";"
|
|||||||
SUBSYSTEM_DEFINITION_DESTINATIONS = [
|
SUBSYSTEM_DEFINITION_DESTINATIONS = [
|
||||||
f"{FSFW_CONFIG_ROOT}/events/subsystemIdRanges.h",
|
f"{FSFW_CONFIG_ROOT}/events/subsystemIdRanges.h",
|
||||||
f"{OBSW_ROOT_DIR}/fsfw/src/fsfw/events/fwSubsystemIdRanges.h",
|
f"{OBSW_ROOT_DIR}/fsfw/src/fsfw/events/fwSubsystemIdRanges.h",
|
||||||
f"{OBSW_ROOT_DIR}/common/config/commonSubsystemIds.h"
|
f"{OBSW_ROOT_DIR}/common/config/commonSubsystemIds.h",
|
||||||
]
|
]
|
||||||
HEADER_DEFINITION_DESTINATIONS = [
|
HEADER_DEFINITION_DESTINATIONS = [
|
||||||
f"{OBSW_ROOT_DIR}/mission/", f"{OBSW_ROOT_DIR}/fsfw/", f"{FSFW_CONFIG_ROOT}",
|
f"{OBSW_ROOT_DIR}/mission/",
|
||||||
f"{OBSW_ROOT_DIR}/test/", f"{OBSW_ROOT_DIR}/bsp_q7s", f"{OBSW_ROOT_DIR}/linux/"
|
f"{OBSW_ROOT_DIR}/fsfw/",
|
||||||
|
f"{FSFW_CONFIG_ROOT}",
|
||||||
|
f"{OBSW_ROOT_DIR}/test/",
|
||||||
|
f"{OBSW_ROOT_DIR}/bsp_q7s",
|
||||||
|
f"{OBSW_ROOT_DIR}/linux/",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -73,11 +83,14 @@ def parse_events(
|
|||||||
)
|
)
|
||||||
if generate_cpp:
|
if generate_cpp:
|
||||||
handle_cpp_export(
|
handle_cpp_export(
|
||||||
event_list=event_list, date_string=DATE_STRING_FULL, file_name=CPP_FILENAME,
|
event_list=event_list,
|
||||||
generate_header=GENERATE_CPP_H, header_file_name=CPP_H_FILENAME
|
date_string=DATE_STRING_FULL,
|
||||||
|
file_name=CPP_FILENAME,
|
||||||
|
generate_header=GENERATE_CPP_H,
|
||||||
|
header_file_name=CPP_H_FILENAME,
|
||||||
)
|
)
|
||||||
if COPY_CPP_FILE:
|
if COPY_CPP_FILE:
|
||||||
LOGGER.info(f'EventParser: Copying file to {CPP_COPY_DESTINATION}')
|
LOGGER.info(f"EventParser: Copying file to {CPP_COPY_DESTINATION}")
|
||||||
copy_file(CPP_FILENAME, CPP_COPY_DESTINATION)
|
copy_file(CPP_FILENAME, CPP_COPY_DESTINATION)
|
||||||
copy_file(CPP_H_FILENAME, CPP_COPY_DESTINATION)
|
copy_file(CPP_H_FILENAME, CPP_COPY_DESTINATION)
|
||||||
|
|
||||||
@ -85,7 +98,7 @@ def parse_events(
|
|||||||
def generate_event_list() -> list:
|
def generate_event_list() -> list:
|
||||||
subsystem_parser = SubsystemDefinitionParser(SUBSYSTEM_DEFINITION_DESTINATIONS)
|
subsystem_parser = SubsystemDefinitionParser(SUBSYSTEM_DEFINITION_DESTINATIONS)
|
||||||
subsystem_table = subsystem_parser.parse_files()
|
subsystem_table = subsystem_parser.parse_files()
|
||||||
LOGGER.info(f'Found {len(subsystem_table)} subsystem definitions.')
|
LOGGER.info(f"Found {len(subsystem_table)} subsystem definitions.")
|
||||||
PrettyPrinter.pprint(subsystem_table)
|
PrettyPrinter.pprint(subsystem_table)
|
||||||
event_header_parser = FileListParser(HEADER_DEFINITION_DESTINATIONS)
|
event_header_parser = FileListParser(HEADER_DEFINITION_DESTINATIONS)
|
||||||
event_headers = event_header_parser.parse_header_files(
|
event_headers = event_header_parser.parse_header_files(
|
||||||
@ -94,8 +107,9 @@ def generate_event_list() -> list:
|
|||||||
# PrettyPrinter.pprint(event_headers)
|
# PrettyPrinter.pprint(event_headers)
|
||||||
# myEventList = parseHeaderFiles(subsystem_table, event_headers)
|
# myEventList = parseHeaderFiles(subsystem_table, event_headers)
|
||||||
event_parser = EventParser(event_headers, subsystem_table)
|
event_parser = EventParser(event_headers, subsystem_table)
|
||||||
|
event_parser.obsw_root_path = OBSW_ROOT_DIR
|
||||||
event_parser.set_moving_window_mode(moving_window_size=7)
|
event_parser.set_moving_window_mode(moving_window_size=7)
|
||||||
event_table = event_parser.parse_files()
|
event_table = event_parser.parse_files()
|
||||||
event_list = sorted(event_table.items())
|
event_list = sorted(event_table.items())
|
||||||
LOGGER.info(f'Found {len(event_list)} entries')
|
LOGGER.info(f"Found {len(event_list)} entries")
|
||||||
return event_list
|
return event_list
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated event translation file. Contains 140 translations.
|
* @brief Auto-generated event translation file. Contains 153 translations.
|
||||||
* @details
|
* @details
|
||||||
* Generated on: 2022-02-03 17:30:40
|
* Generated on: 2022-02-26 13:53:13
|
||||||
*/
|
*/
|
||||||
#include "translateEvents.h"
|
#include "translateEvents.h"
|
||||||
|
|
||||||
@ -112,6 +112,8 @@ const char *SUPV_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE";
|
|||||||
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
||||||
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
||||||
const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED";
|
const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED";
|
||||||
|
const char *MOUNTED_SD_CARD_STRING = "MOUNTED_SD_CARD";
|
||||||
|
const char *REBOOT_HW_STRING = "REBOOT_HW";
|
||||||
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
||||||
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
||||||
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
||||||
@ -145,9 +147,20 @@ const char *POSITION_MISMATCH_STRING = "POSITION_MISMATCH";
|
|||||||
const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS";
|
const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS";
|
||||||
const char *STR_HELPER_SENDING_PACKET_FAILED_STRING = "STR_HELPER_SENDING_PACKET_FAILED";
|
const char *STR_HELPER_SENDING_PACKET_FAILED_STRING = "STR_HELPER_SENDING_PACKET_FAILED";
|
||||||
const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG_FAILED";
|
const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG_FAILED";
|
||||||
|
const char *NEG_V_OUT_OF_BOUNDS_STRING = "NEG_V_OUT_OF_BOUNDS";
|
||||||
|
const char *U_DRO_OUT_OF_BOUNDS_STRING = "U_DRO_OUT_OF_BOUNDS";
|
||||||
|
const char *I_DRO_OUT_OF_BOUNDS_STRING = "I_DRO_OUT_OF_BOUNDS";
|
||||||
|
const char *U_X8_OUT_OF_BOUNDS_STRING = "U_X8_OUT_OF_BOUNDS";
|
||||||
|
const char *I_X8_OUT_OF_BOUNDS_STRING = "I_X8_OUT_OF_BOUNDS";
|
||||||
|
const char *U_TX_OUT_OF_BOUNDS_STRING = "U_TX_OUT_OF_BOUNDS";
|
||||||
|
const char *I_TX_OUT_OF_BOUNDS_STRING = "I_TX_OUT_OF_BOUNDS";
|
||||||
|
const char *U_MPA_OUT_OF_BOUNDS_STRING = "U_MPA_OUT_OF_BOUNDS";
|
||||||
|
const char *I_MPA_OUT_OF_BOUNDS_STRING = "I_MPA_OUT_OF_BOUNDS";
|
||||||
|
const char *U_HPA_OUT_OF_BOUNDS_STRING = "U_HPA_OUT_OF_BOUNDS";
|
||||||
|
const char *I_HPA_OUT_OF_BOUNDS_STRING = "I_HPA_OUT_OF_BOUNDS";
|
||||||
|
|
||||||
const char *translateEvents(Event event) {
|
const char *translateEvents(Event event) {
|
||||||
switch( (event & 0xffff) ) {
|
switch((event & 0xFFFF)) {
|
||||||
case (2200):
|
case (2200):
|
||||||
return STORE_SEND_WRITE_FAILED_STRING;
|
return STORE_SEND_WRITE_FAILED_STRING;
|
||||||
case (2201):
|
case (2201):
|
||||||
@ -362,6 +375,10 @@ const char * translateEvents(Event event) {
|
|||||||
return SUPV_CRC_FAILURE_EVENT_STRING;
|
return SUPV_CRC_FAILURE_EVENT_STRING;
|
||||||
case (11600):
|
case (11600):
|
||||||
return SANITIZATION_FAILED_STRING;
|
return SANITIZATION_FAILED_STRING;
|
||||||
|
case (11601):
|
||||||
|
return MOUNTED_SD_CARD_STRING;
|
||||||
|
case (11603):
|
||||||
|
return REBOOT_HW_STRING;
|
||||||
case (11700):
|
case (11700):
|
||||||
return UPDATE_FILE_NOT_EXISTS_STRING;
|
return UPDATE_FILE_NOT_EXISTS_STRING;
|
||||||
case (11701):
|
case (11701):
|
||||||
@ -428,6 +445,28 @@ const char * translateEvents(Event event) {
|
|||||||
return STR_HELPER_SENDING_PACKET_FAILED_STRING;
|
return STR_HELPER_SENDING_PACKET_FAILED_STRING;
|
||||||
case (12019):
|
case (12019):
|
||||||
return STR_HELPER_REQUESTING_MSG_FAILED_STRING;
|
return STR_HELPER_REQUESTING_MSG_FAILED_STRING;
|
||||||
|
case (12101):
|
||||||
|
return NEG_V_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12102):
|
||||||
|
return U_DRO_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12103):
|
||||||
|
return I_DRO_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12104):
|
||||||
|
return U_X8_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12105):
|
||||||
|
return I_X8_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12106):
|
||||||
|
return U_TX_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12107):
|
||||||
|
return I_TX_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12108):
|
||||||
|
return U_MPA_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12109):
|
||||||
|
return I_MPA_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12110):
|
||||||
|
return U_HPA_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12111):
|
||||||
|
return I_HPA_OUT_OF_BOUNDS_STRING;
|
||||||
default:
|
default:
|
||||||
return "UNKNOWN_EVENT";
|
return "UNKNOWN_EVENT";
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 24fa9a3fe3f5c6157b4c48e867e22bd2d335d18a
|
Subproject commit bd76760052482f6f8fcdd84b88da963e61c9a48c
|
@ -4,26 +4,31 @@ import time
|
|||||||
from objects.objects import parse_objects
|
from objects.objects import parse_objects
|
||||||
from events.event_parser import parse_events
|
from events.event_parser import parse_events
|
||||||
from returnvalues.returnvalues_parser import parse_returnvalues
|
from returnvalues.returnvalues_parser import parse_returnvalues
|
||||||
from fsfwgen.core import return_generic_args_parser, init_printout, get_console_logger, ParserTypes
|
from fsfwgen.core import (
|
||||||
|
return_generic_args_parser,
|
||||||
|
init_printout,
|
||||||
|
get_console_logger,
|
||||||
|
ParserTypes,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
LOGGER = get_console_logger()
|
LOGGER = get_console_logger()
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
init_printout(project_string='EIVE')
|
init_printout(project_string="EIVE")
|
||||||
parser = return_generic_args_parser()
|
parser = return_generic_args_parser()
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
if args.type == 'objects':
|
if args.type == "objects":
|
||||||
LOGGER.info(f'Generating objects data..')
|
LOGGER.info(f"Generating objects data..")
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
parse_objects()
|
parse_objects()
|
||||||
elif args.type == 'events':
|
elif args.type == "events":
|
||||||
LOGGER.info(f'Generating event data')
|
LOGGER.info(f"Generating event data")
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
parse_events()
|
parse_events()
|
||||||
elif args.type == 'returnvalues':
|
elif args.type == "returnvalues":
|
||||||
LOGGER.info('Generating returnvalue data')
|
LOGGER.info("Generating returnvalue data")
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
parse_returnvalues()
|
parse_returnvalues()
|
||||||
pass
|
pass
|
||||||
|
@ -2,13 +2,18 @@
|
|||||||
Object exporter.
|
Object exporter.
|
||||||
"""
|
"""
|
||||||
import datetime
|
import datetime
|
||||||
|
import os
|
||||||
|
|
||||||
from fsfwgen.core import get_console_logger
|
from fsfwgen.core import get_console_logger
|
||||||
from fsfwgen.objects.objects import sql_object_exporter, ObjectDefinitionParser, \
|
from fsfwgen.objects.objects import (
|
||||||
write_translation_file, \
|
sql_object_exporter,
|
||||||
export_object_file, write_translation_header_file
|
ObjectDefinitionParser,
|
||||||
|
write_translation_file,
|
||||||
|
export_object_file,
|
||||||
|
write_translation_header_file,
|
||||||
|
)
|
||||||
from fsfwgen.utility.printer import PrettyPrinter
|
from fsfwgen.utility.printer import PrettyPrinter
|
||||||
from fsfwgen.utility.file_management import copy_file, move_file
|
from fsfwgen.utility.file_management import copy_file
|
||||||
|
|
||||||
from definitions import BspType, DATABASE_NAME, OBSW_ROOT_DIR, ROOT_DIR
|
from definitions import BspType, DATABASE_NAME, OBSW_ROOT_DIR, ROOT_DIR
|
||||||
|
|
||||||
@ -34,16 +39,17 @@ else:
|
|||||||
EXPORT_TO_SQL = True
|
EXPORT_TO_SQL = True
|
||||||
|
|
||||||
CPP_COPY_DESTINATION = f"{FSFW_CONFIG_ROOT}/objects/"
|
CPP_COPY_DESTINATION = f"{FSFW_CONFIG_ROOT}/objects/"
|
||||||
CSV_MOVE_DESTINATION = f"{ROOT_DIR}"
|
CPP_FILENAME = f"{os.path.dirname(os.path.realpath(__file__))}//translateObjects.cpp"
|
||||||
CPP_FILENAME = f'{__package__}/translateObjects.cpp'
|
CPP_H_FILENAME = f"{os.path.dirname(os.path.realpath(__file__))}//translateObjects.h"
|
||||||
CPP_H_FILENAME = f'{__package__}/translateObjects.h'
|
CSV_OBJECT_FILENAME = f"{ROOT_DIR}/{BSP_SELECT.value}_objects.csv"
|
||||||
CSV_OBJECT_FILENAME = f"{BSP_SELECT.value}_objects.csv"
|
|
||||||
FILE_SEPARATOR = ";"
|
FILE_SEPARATOR = ";"
|
||||||
|
|
||||||
|
|
||||||
OBJECTS_PATH = f"{FSFW_CONFIG_ROOT}/objects/systemObjectList.h"
|
OBJECTS_PATH = f"{FSFW_CONFIG_ROOT}/objects/systemObjectList.h"
|
||||||
FRAMEWORK_OBJECT_PATH = f'{OBSW_ROOT_DIR}/fsfw/src/fsfw/objectmanager/frameworkObjects.h'
|
FRAMEWORK_OBJECT_PATH = (
|
||||||
COMMON_OBJECTS_PATH = f'{OBSW_ROOT_DIR}/common/config/commonObjects.h'
|
f"{OBSW_ROOT_DIR}/fsfw/src/fsfw/objectmanager/frameworkObjects.h"
|
||||||
|
)
|
||||||
|
COMMON_OBJECTS_PATH = f"{OBSW_ROOT_DIR}/common/config/commonObjects.h"
|
||||||
OBJECTS_DEFINITIONS = [OBJECTS_PATH, FRAMEWORK_OBJECT_PATH, COMMON_OBJECTS_PATH]
|
OBJECTS_DEFINITIONS = [OBJECTS_PATH, FRAMEWORK_OBJECT_PATH, COMMON_OBJECTS_PATH]
|
||||||
|
|
||||||
SQL_DELETE_OBJECTS_CMD = """
|
SQL_DELETE_OBJECTS_CMD = """
|
||||||
@ -70,35 +76,41 @@ def parse_objects(print_object_list: bool = True):
|
|||||||
subsystem_definitions = object_parser.parse_files()
|
subsystem_definitions = object_parser.parse_files()
|
||||||
# id_subsystem_definitions.update(framework_subsystem_definitions)
|
# id_subsystem_definitions.update(framework_subsystem_definitions)
|
||||||
list_items = sorted(subsystem_definitions.items())
|
list_items = sorted(subsystem_definitions.items())
|
||||||
LOGGER.info(f'ObjectParser: Number of objects: {len(list_items)}')
|
LOGGER.info(f"ObjectParser: Number of objects: {len(list_items)}")
|
||||||
|
|
||||||
if print_object_list:
|
if print_object_list:
|
||||||
PrettyPrinter.pprint(list_items)
|
PrettyPrinter.pprint(list_items)
|
||||||
|
|
||||||
handle_file_export(list_items)
|
handle_file_export(list_items)
|
||||||
if EXPORT_TO_SQL:
|
if EXPORT_TO_SQL:
|
||||||
LOGGER.info('ObjectParser: Exporting to SQL')
|
LOGGER.info("ObjectParser: Exporting to SQL")
|
||||||
sql_object_exporter(
|
sql_object_exporter(
|
||||||
object_table=list_items, delete_cmd=SQL_DELETE_OBJECTS_CMD,
|
object_table=list_items,
|
||||||
|
delete_cmd=SQL_DELETE_OBJECTS_CMD,
|
||||||
insert_cmd=SQL_INSERT_INTO_OBJECTS_CMD,
|
insert_cmd=SQL_INSERT_INTO_OBJECTS_CMD,
|
||||||
create_cmd=SQL_CREATE_OBJECTS_CMD, db_filename=f"{ROOT_DIR}/{DATABASE_NAME}"
|
create_cmd=SQL_CREATE_OBJECTS_CMD,
|
||||||
|
db_filename=f"{ROOT_DIR}/{DATABASE_NAME}",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def handle_file_export(list_items):
|
def handle_file_export(list_items):
|
||||||
if GENERATE_CPP:
|
if GENERATE_CPP:
|
||||||
LOGGER.info('ObjectParser: Generating translation C++ file')
|
LOGGER.info("ObjectParser: Generating C++ translation file")
|
||||||
write_translation_file(
|
write_translation_file(
|
||||||
filename=CPP_FILENAME, list_of_entries=list_items, date_string_full=DATE_STRING_FULL
|
filename=CPP_FILENAME,
|
||||||
|
list_of_entries=list_items,
|
||||||
|
date_string_full=DATE_STRING_FULL,
|
||||||
)
|
)
|
||||||
if COPY_CPP:
|
if COPY_CPP:
|
||||||
print("ObjectParser: Copying object file to " + CPP_COPY_DESTINATION)
|
LOGGER.info("ObjectParser: Copying object file to " + CPP_COPY_DESTINATION)
|
||||||
copy_file(CPP_FILENAME, CPP_COPY_DESTINATION)
|
copy_file(CPP_FILENAME, CPP_COPY_DESTINATION)
|
||||||
if GENERATE_HEADER:
|
if GENERATE_HEADER:
|
||||||
write_translation_header_file(filename=CPP_H_FILENAME)
|
write_translation_header_file(filename=CPP_H_FILENAME)
|
||||||
copy_file(filename=CPP_H_FILENAME, destination=CPP_COPY_DESTINATION)
|
copy_file(filename=CPP_H_FILENAME, destination=CPP_COPY_DESTINATION)
|
||||||
if GENERATE_CSV:
|
if GENERATE_CSV:
|
||||||
print("ObjectParser: Generating text export.")
|
LOGGER.info("ObjectParser: Generating text export")
|
||||||
export_object_file(
|
export_object_file(
|
||||||
filename=CSV_OBJECT_FILENAME, object_list=list_items, file_separator=FILE_SEPARATOR
|
filename=CSV_OBJECT_FILENAME,
|
||||||
|
object_list=list_items,
|
||||||
|
file_separator=FILE_SEPARATOR,
|
||||||
)
|
)
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated object translation file.
|
* @brief Auto-generated object translation file.
|
||||||
* @details
|
* @details
|
||||||
* Contains 111 translations.
|
* Contains 112 translations.
|
||||||
* Generated on: 2022-02-21 17:31:37
|
* Generated on: 2022-02-26 14:03:55
|
||||||
*/
|
*/
|
||||||
#include "translateObjects.h"
|
#include "translateObjects.h"
|
||||||
|
|
||||||
@ -82,6 +82,7 @@ const char *PUS_PACKET_DISTRIBUTOR_STRING = "PUS_PACKET_DISTRIBUTOR";
|
|||||||
const char *TMTC_BRIDGE_STRING = "TMTC_BRIDGE";
|
const char *TMTC_BRIDGE_STRING = "TMTC_BRIDGE";
|
||||||
const char *TMTC_POLLING_TASK_STRING = "TMTC_POLLING_TASK";
|
const char *TMTC_POLLING_TASK_STRING = "TMTC_POLLING_TASK";
|
||||||
const char *FILE_SYSTEM_HANDLER_STRING = "FILE_SYSTEM_HANDLER";
|
const char *FILE_SYSTEM_HANDLER_STRING = "FILE_SYSTEM_HANDLER";
|
||||||
|
const char *SDC_MANAGER_STRING = "SDC_MANAGER";
|
||||||
const char *PTME_STRING = "PTME";
|
const char *PTME_STRING = "PTME";
|
||||||
const char *PDEC_HANDLER_STRING = "PDEC_HANDLER";
|
const char *PDEC_HANDLER_STRING = "PDEC_HANDLER";
|
||||||
const char *CCSDS_HANDLER_STRING = "CCSDS_HANDLER";
|
const char *CCSDS_HANDLER_STRING = "CCSDS_HANDLER";
|
||||||
@ -272,6 +273,8 @@ const char* translateObject(object_id_t object) {
|
|||||||
return TMTC_POLLING_TASK_STRING;
|
return TMTC_POLLING_TASK_STRING;
|
||||||
case 0x50000500:
|
case 0x50000500:
|
||||||
return FILE_SYSTEM_HANDLER_STRING;
|
return FILE_SYSTEM_HANDLER_STRING;
|
||||||
|
case 0x50000550:
|
||||||
|
return SDC_MANAGER_STRING;
|
||||||
case 0x50000600:
|
case 0x50000600:
|
||||||
return PTME_STRING;
|
return PTME_STRING;
|
||||||
case 0x50000700:
|
case 0x50000700:
|
||||||
|
@ -24,33 +24,34 @@ EXPORT_TO_SQL = True
|
|||||||
PRINT_TABLES = True
|
PRINT_TABLES = True
|
||||||
|
|
||||||
|
|
||||||
FILE_SEPARATOR = ';'
|
FILE_SEPARATOR = ";"
|
||||||
MAX_STRING_LENGTH = 32
|
MAX_STRING_LENGTH = 32
|
||||||
|
|
||||||
BSP_SELECT = BspType.BSP_Q7S
|
BSP_SELECT = BspType.BSP_Q7S
|
||||||
BSP_DIR_NAME = BSP_SELECT.value
|
BSP_DIR_NAME = BSP_SELECT.value
|
||||||
CSV_RETVAL_FILENAME = f'{BSP_SELECT.value}_returnvalues.csv'
|
CSV_RETVAL_FILENAME = f"{ROOT_DIR}/{BSP_SELECT.value}_returnvalues.csv"
|
||||||
CSV_MOVE_DESTINATION = f'{ROOT_DIR}'
|
|
||||||
ADD_LINUX_FOLDER = False
|
ADD_LINUX_FOLDER = False
|
||||||
|
|
||||||
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
|
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
|
||||||
FSFW_CONFIG_ROOT = f'{OBSW_ROOT_DIR}/linux/fsfwconfig'
|
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/linux/fsfwconfig"
|
||||||
ADD_LINUX_FOLDER = True
|
ADD_LINUX_FOLDER = True
|
||||||
else:
|
else:
|
||||||
FSFW_CONFIG_ROOT = f'{OBSW_ROOT_DIR}/{BSP_DIR_NAME}/fsfwconfig'
|
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}/fsfwconfig"
|
||||||
BSP_PATH = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}"
|
BSP_PATH = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}"
|
||||||
|
|
||||||
INTERFACE_DEFINITION_FILES = [
|
INTERFACE_DEFINITION_FILES = [
|
||||||
f'{OBSW_ROOT_DIR}/fsfw/src/fsfw/returnvalues/FwClassIds.h',
|
f"{OBSW_ROOT_DIR}/fsfw/src/fsfw/returnvalues/FwClassIds.h",
|
||||||
f'{OBSW_ROOT_DIR}/common/config/commonClassIds.h',
|
f"{OBSW_ROOT_DIR}/common/config/commonClassIds.h",
|
||||||
f'{FSFW_CONFIG_ROOT}/returnvalues/classIds.h'
|
f"{FSFW_CONFIG_ROOT}/returnvalues/classIds.h",
|
||||||
]
|
]
|
||||||
RETURNVALUE_SOURCES = [
|
RETURNVALUE_SOURCES = [
|
||||||
f'{OBSW_ROOT_DIR}/mission/', f'{OBSW_ROOT_DIR}/fsfw/', f'{BSP_PATH}'
|
f"{OBSW_ROOT_DIR}/mission/",
|
||||||
|
f"{OBSW_ROOT_DIR}/fsfw/",
|
||||||
|
f"{BSP_PATH}",
|
||||||
]
|
]
|
||||||
|
|
||||||
if ADD_LINUX_FOLDER:
|
if ADD_LINUX_FOLDER:
|
||||||
RETURNVALUE_SOURCES.append(f'{OBSW_ROOT_DIR}/linux')
|
RETURNVALUE_SOURCES.append(f"{OBSW_ROOT_DIR}/linux")
|
||||||
|
|
||||||
SQL_DELETE_RETURNVALUES_CMD = """
|
SQL_DELETE_RETURNVALUES_CMD = """
|
||||||
DROP TABLE IF EXISTS Returnvalues
|
DROP TABLE IF EXISTS Returnvalues
|
||||||
@ -76,12 +77,16 @@ VALUES(?,?,?,?,?)
|
|||||||
def parse_returnvalues():
|
def parse_returnvalues():
|
||||||
returnvalue_table = generate_returnvalue_table()
|
returnvalue_table = generate_returnvalue_table()
|
||||||
if EXPORT_TO_FILE:
|
if EXPORT_TO_FILE:
|
||||||
ReturnValueParser.export_to_file(CSV_RETVAL_FILENAME, returnvalue_table, FILE_SEPARATOR)
|
ReturnValueParser.export_to_file(
|
||||||
|
CSV_RETVAL_FILENAME, returnvalue_table, FILE_SEPARATOR
|
||||||
|
)
|
||||||
# if MOVE_CSV_FILE:
|
# if MOVE_CSV_FILE:
|
||||||
# move_file(file_name=CSV_RETVAL_FILENAME, destination=CSV_MOVE_DESTINATION)
|
# move_file(file_name=CSV_RETVAL_FILENAME, destination=CSV_MOVE_DESTINATION)
|
||||||
if EXPORT_TO_SQL:
|
if EXPORT_TO_SQL:
|
||||||
LOGGER.info('ReturnvalueParser: Exporting to SQL')
|
LOGGER.info("ReturnvalueParser: Exporting to SQL")
|
||||||
sql_retval_exporter(returnvalue_table, db_filename=f"{ROOT_DIR}/{DATABASE_NAME}")
|
sql_retval_exporter(
|
||||||
|
returnvalue_table, db_filename=f"{ROOT_DIR}/{DATABASE_NAME}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def generate_returnvalue_table():
|
def generate_returnvalue_table():
|
||||||
@ -104,10 +109,8 @@ def sql_retval_exporter(returnvalue_table, db_filename: str):
|
|||||||
sql_writer.open(SQL_CREATE_RETURNVALUES_CMD)
|
sql_writer.open(SQL_CREATE_RETURNVALUES_CMD)
|
||||||
for entry in returnvalue_table.items():
|
for entry in returnvalue_table.items():
|
||||||
sql_writer.write_entries(
|
sql_writer.write_entries(
|
||||||
SQL_INSERT_RETURNVALUES_CMD, (entry[0],
|
SQL_INSERT_RETURNVALUES_CMD,
|
||||||
entry[1][2],
|
(entry[0], entry[1][2], entry[1][4], entry[1][3], entry[1][1]),
|
||||||
entry[1][4],
|
)
|
||||||
entry[1][3],
|
|
||||||
entry[1][1]))
|
|
||||||
sql_writer.commit()
|
sql_writer.commit()
|
||||||
sql_writer.close()
|
sql_writer.close()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated event translation file. Contains 140 translations.
|
* @brief Auto-generated event translation file. Contains 153 translations.
|
||||||
* @details
|
* @details
|
||||||
* Generated on: 2022-02-03 17:30:40
|
* Generated on: 2022-02-26 13:53:13
|
||||||
*/
|
*/
|
||||||
#include "translateEvents.h"
|
#include "translateEvents.h"
|
||||||
|
|
||||||
@ -112,6 +112,8 @@ const char *SUPV_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE";
|
|||||||
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
||||||
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
||||||
const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED";
|
const char *SANITIZATION_FAILED_STRING = "SANITIZATION_FAILED";
|
||||||
|
const char *MOUNTED_SD_CARD_STRING = "MOUNTED_SD_CARD";
|
||||||
|
const char *REBOOT_HW_STRING = "REBOOT_HW";
|
||||||
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
||||||
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
||||||
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
||||||
@ -145,9 +147,20 @@ const char *POSITION_MISMATCH_STRING = "POSITION_MISMATCH";
|
|||||||
const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS";
|
const char *STR_HELPER_FILE_NOT_EXISTS_STRING = "STR_HELPER_FILE_NOT_EXISTS";
|
||||||
const char *STR_HELPER_SENDING_PACKET_FAILED_STRING = "STR_HELPER_SENDING_PACKET_FAILED";
|
const char *STR_HELPER_SENDING_PACKET_FAILED_STRING = "STR_HELPER_SENDING_PACKET_FAILED";
|
||||||
const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG_FAILED";
|
const char *STR_HELPER_REQUESTING_MSG_FAILED_STRING = "STR_HELPER_REQUESTING_MSG_FAILED";
|
||||||
|
const char *NEG_V_OUT_OF_BOUNDS_STRING = "NEG_V_OUT_OF_BOUNDS";
|
||||||
|
const char *U_DRO_OUT_OF_BOUNDS_STRING = "U_DRO_OUT_OF_BOUNDS";
|
||||||
|
const char *I_DRO_OUT_OF_BOUNDS_STRING = "I_DRO_OUT_OF_BOUNDS";
|
||||||
|
const char *U_X8_OUT_OF_BOUNDS_STRING = "U_X8_OUT_OF_BOUNDS";
|
||||||
|
const char *I_X8_OUT_OF_BOUNDS_STRING = "I_X8_OUT_OF_BOUNDS";
|
||||||
|
const char *U_TX_OUT_OF_BOUNDS_STRING = "U_TX_OUT_OF_BOUNDS";
|
||||||
|
const char *I_TX_OUT_OF_BOUNDS_STRING = "I_TX_OUT_OF_BOUNDS";
|
||||||
|
const char *U_MPA_OUT_OF_BOUNDS_STRING = "U_MPA_OUT_OF_BOUNDS";
|
||||||
|
const char *I_MPA_OUT_OF_BOUNDS_STRING = "I_MPA_OUT_OF_BOUNDS";
|
||||||
|
const char *U_HPA_OUT_OF_BOUNDS_STRING = "U_HPA_OUT_OF_BOUNDS";
|
||||||
|
const char *I_HPA_OUT_OF_BOUNDS_STRING = "I_HPA_OUT_OF_BOUNDS";
|
||||||
|
|
||||||
const char *translateEvents(Event event) {
|
const char *translateEvents(Event event) {
|
||||||
switch ((event & 0xffff)) {
|
switch((event & 0xFFFF)) {
|
||||||
case (2200):
|
case (2200):
|
||||||
return STORE_SEND_WRITE_FAILED_STRING;
|
return STORE_SEND_WRITE_FAILED_STRING;
|
||||||
case (2201):
|
case (2201):
|
||||||
@ -362,6 +375,10 @@ const char *translateEvents(Event event) {
|
|||||||
return SUPV_CRC_FAILURE_EVENT_STRING;
|
return SUPV_CRC_FAILURE_EVENT_STRING;
|
||||||
case (11600):
|
case (11600):
|
||||||
return SANITIZATION_FAILED_STRING;
|
return SANITIZATION_FAILED_STRING;
|
||||||
|
case (11601):
|
||||||
|
return MOUNTED_SD_CARD_STRING;
|
||||||
|
case (11603):
|
||||||
|
return REBOOT_HW_STRING;
|
||||||
case (11700):
|
case (11700):
|
||||||
return UPDATE_FILE_NOT_EXISTS_STRING;
|
return UPDATE_FILE_NOT_EXISTS_STRING;
|
||||||
case (11701):
|
case (11701):
|
||||||
@ -428,6 +445,28 @@ const char *translateEvents(Event event) {
|
|||||||
return STR_HELPER_SENDING_PACKET_FAILED_STRING;
|
return STR_HELPER_SENDING_PACKET_FAILED_STRING;
|
||||||
case (12019):
|
case (12019):
|
||||||
return STR_HELPER_REQUESTING_MSG_FAILED_STRING;
|
return STR_HELPER_REQUESTING_MSG_FAILED_STRING;
|
||||||
|
case (12101):
|
||||||
|
return NEG_V_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12102):
|
||||||
|
return U_DRO_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12103):
|
||||||
|
return I_DRO_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12104):
|
||||||
|
return U_X8_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12105):
|
||||||
|
return I_X8_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12106):
|
||||||
|
return U_TX_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12107):
|
||||||
|
return I_TX_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12108):
|
||||||
|
return U_MPA_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12109):
|
||||||
|
return I_MPA_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12110):
|
||||||
|
return U_HPA_OUT_OF_BOUNDS_STRING;
|
||||||
|
case (12111):
|
||||||
|
return I_HPA_OUT_OF_BOUNDS_STRING;
|
||||||
default:
|
default:
|
||||||
return "UNKNOWN_EVENT";
|
return "UNKNOWN_EVENT";
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated object translation file.
|
* @brief Auto-generated object translation file.
|
||||||
* @details
|
* @details
|
||||||
* Contains 111 translations.
|
* Contains 112 translations.
|
||||||
* Generated on: 2022-02-21 17:31:37
|
* Generated on: 2022-02-26 14:03:55
|
||||||
*/
|
*/
|
||||||
#include "translateObjects.h"
|
#include "translateObjects.h"
|
||||||
|
|
||||||
@ -82,6 +82,7 @@ const char *PUS_PACKET_DISTRIBUTOR_STRING = "PUS_PACKET_DISTRIBUTOR";
|
|||||||
const char *TMTC_BRIDGE_STRING = "TMTC_BRIDGE";
|
const char *TMTC_BRIDGE_STRING = "TMTC_BRIDGE";
|
||||||
const char *TMTC_POLLING_TASK_STRING = "TMTC_POLLING_TASK";
|
const char *TMTC_POLLING_TASK_STRING = "TMTC_POLLING_TASK";
|
||||||
const char *FILE_SYSTEM_HANDLER_STRING = "FILE_SYSTEM_HANDLER";
|
const char *FILE_SYSTEM_HANDLER_STRING = "FILE_SYSTEM_HANDLER";
|
||||||
|
const char *SDC_MANAGER_STRING = "SDC_MANAGER";
|
||||||
const char *PTME_STRING = "PTME";
|
const char *PTME_STRING = "PTME";
|
||||||
const char *PDEC_HANDLER_STRING = "PDEC_HANDLER";
|
const char *PDEC_HANDLER_STRING = "PDEC_HANDLER";
|
||||||
const char *CCSDS_HANDLER_STRING = "CCSDS_HANDLER";
|
const char *CCSDS_HANDLER_STRING = "CCSDS_HANDLER";
|
||||||
@ -272,6 +273,8 @@ const char *translateObject(object_id_t object) {
|
|||||||
return TMTC_POLLING_TASK_STRING;
|
return TMTC_POLLING_TASK_STRING;
|
||||||
case 0x50000500:
|
case 0x50000500:
|
||||||
return FILE_SYSTEM_HANDLER_STRING;
|
return FILE_SYSTEM_HANDLER_STRING;
|
||||||
|
case 0x50000550:
|
||||||
|
return SDC_MANAGER_STRING;
|
||||||
case 0x50000600:
|
case 0x50000600:
|
||||||
return PTME_STRING;
|
return PTME_STRING;
|
||||||
case 0x50000700:
|
case 0x50000700:
|
||||||
|
@ -13,11 +13,13 @@
|
|||||||
#include "devices/gpioIds.h"
|
#include "devices/gpioIds.h"
|
||||||
|
|
||||||
PayloadPcduHandler::PayloadPcduHandler(object_id_t objectId, object_id_t comIF, CookieIF* cookie,
|
PayloadPcduHandler::PayloadPcduHandler(object_id_t objectId, object_id_t comIF, CookieIF* cookie,
|
||||||
GpioIF* gpioIF, bool periodicPrintout)
|
GpioIF* gpioIF, SdCardMountedIF* sdcMan,
|
||||||
|
bool periodicPrintout)
|
||||||
: DeviceHandlerBase(objectId, comIF, cookie),
|
: DeviceHandlerBase(objectId, comIF, cookie),
|
||||||
adcSet(this),
|
adcSet(this),
|
||||||
periodicPrintout(periodicPrintout),
|
periodicPrintout(periodicPrintout),
|
||||||
gpioIF(gpioIF) {}
|
gpioIF(gpioIF),
|
||||||
|
sdcMan(sdcMan) {}
|
||||||
|
|
||||||
void PayloadPcduHandler::doStartUp() {
|
void PayloadPcduHandler::doStartUp() {
|
||||||
if ((state != States::PCDU_OFF) and (state != States::ON_TRANS_SSR)) {
|
if ((state != States::PCDU_OFF) and (state != States::ON_TRANS_SSR)) {
|
||||||
@ -35,8 +37,11 @@ void PayloadPcduHandler::doStartUp() {
|
|||||||
// If necessary, check whether a certain amount of time has elapsed
|
// If necessary, check whether a certain amount of time has elapsed
|
||||||
if (transitionOk) {
|
if (transitionOk) {
|
||||||
transitionOk = false;
|
transitionOk = false;
|
||||||
|
state = States::ON_TRANS_ADC_CLOSE_ZERO;
|
||||||
// We are now in ON mode
|
// We are now in ON mode
|
||||||
startTransition(MODE_NORMAL, 0);
|
startTransition(MODE_NORMAL, 0);
|
||||||
|
adcCountdown.setTimeout(50);
|
||||||
|
adcCountdown.resetTimer();
|
||||||
adcState = AdcStates::BOOT_DELAY;
|
adcState = AdcStates::BOOT_DELAY;
|
||||||
// The ADC can now be read. If the values are not close to zero, we should not allow
|
// The ADC can now be read. If the values are not close to zero, we should not allow
|
||||||
// transition
|
// transition
|
||||||
@ -45,13 +50,161 @@ void PayloadPcduHandler::doStartUp() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PayloadPcduHandler::stateMachineToNormal() {
|
||||||
|
using namespace plpcdu;
|
||||||
|
if (adcState == AdcStates::BOOT_DELAY) {
|
||||||
|
if (adcCountdown.hasTimedOut()) {
|
||||||
|
adcState = AdcStates::SEND_SETUP;
|
||||||
|
adcCmdExecuted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (adcState == AdcStates::SEND_SETUP) {
|
||||||
|
if (adcCmdExecuted) {
|
||||||
|
adcState = AdcStates::NORMAL;
|
||||||
|
setMode(MODE_NORMAL, NORMAL_ADC_ONLY);
|
||||||
|
adcCountdown.setTimeout(100);
|
||||||
|
adcCountdown.resetTimer();
|
||||||
|
adcCmdExecuted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (submode == plpcdu::NORMAL_ALL_ON) {
|
||||||
|
if (state == States::ON_TRANS_ADC_CLOSE_ZERO) {
|
||||||
|
if (not commandExecuted) {
|
||||||
|
float waitTime = SSR_TO_DRO_WAIT_TIME;
|
||||||
|
params.getValue(PlPcduParameter::SSR_TO_DRO_WAIT_TIME_K, waitTime);
|
||||||
|
countdown.setTimeout(std::round(waitTime * 1000));
|
||||||
|
countdown.resetTimer();
|
||||||
|
commandExecuted = true;
|
||||||
|
// TODO: For now, skip ADC check
|
||||||
|
transitionOk = true;
|
||||||
|
}
|
||||||
|
// ADC values are ok, 5 seconds have elapsed
|
||||||
|
if (transitionOk and countdown.hasTimedOut()) {
|
||||||
|
state = States::ON_TRANS_DRO;
|
||||||
|
// Now start monitoring for negative voltages instead
|
||||||
|
monMode = MonitoringMode::NEGATIVE;
|
||||||
|
commandExecuted = false;
|
||||||
|
transitionOk = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (state == States::ON_TRANS_DRO) {
|
||||||
|
if (not commandExecuted) {
|
||||||
|
float waitTime = DRO_TO_X8_WAIT_TIME;
|
||||||
|
params.getValue(PlPcduParameter::DRO_TO_X8_WAIT_TIME_K, waitTime);
|
||||||
|
countdown.setTimeout(std::round(waitTime * 1000));
|
||||||
|
countdown.resetTimer();
|
||||||
|
#if OBSW_VERBOSE_LEVEL >= 1
|
||||||
|
sif::info << "Enabling PL PCDU DRO module" << std::endl;
|
||||||
|
#endif
|
||||||
|
// Switch on DRO and start monitoring for negative voltages
|
||||||
|
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_DRO);
|
||||||
|
adcCountdown.setTimeout(100);
|
||||||
|
adcCountdown.resetTimer();
|
||||||
|
commandExecuted = true;
|
||||||
|
}
|
||||||
|
// ADC values are ok, 5 seconds have elapsed
|
||||||
|
if (transitionOk and countdown.hasTimedOut()) {
|
||||||
|
state = States::ON_TRANS_X8;
|
||||||
|
commandExecuted = false;
|
||||||
|
transitionOk = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (state == States::ON_TRANS_X8) {
|
||||||
|
if (not commandExecuted) {
|
||||||
|
float waitTime = X8_TO_TX_WAIT_TIME;
|
||||||
|
params.getValue(PlPcduParameter::X8_TO_TX_WAIT_TIME_K, waitTime);
|
||||||
|
countdown.setTimeout(std::round(waitTime * 1000));
|
||||||
|
countdown.resetTimer();
|
||||||
|
#if OBSW_VERBOSE_LEVEL >= 1
|
||||||
|
sif::info << "Enabling PL PCDU X8 module" << std::endl;
|
||||||
|
#endif
|
||||||
|
// Switch on X8
|
||||||
|
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_X8);
|
||||||
|
adcCountdown.setTimeout(100);
|
||||||
|
adcCountdown.resetTimer();
|
||||||
|
commandExecuted = true;
|
||||||
|
}
|
||||||
|
// ADC values are ok, 5 seconds have elapsed
|
||||||
|
if (transitionOk and countdown.hasTimedOut()) {
|
||||||
|
state = States::ON_TRANS_TX;
|
||||||
|
commandExecuted = false;
|
||||||
|
transitionOk = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (state == States::ON_TRANS_TX) {
|
||||||
|
if (not commandExecuted) {
|
||||||
|
float waitTime = TX_TO_MPA_WAIT_TIME;
|
||||||
|
params.getValue(PlPcduParameter::TX_TO_MPA_WAIT_TIME_K, waitTime);
|
||||||
|
countdown.setTimeout(std::round(waitTime * 1000));
|
||||||
|
countdown.resetTimer();
|
||||||
|
#if OBSW_VERBOSE_LEVEL >= 1
|
||||||
|
sif::info << "Enabling PL PCDU TX module" << std::endl;
|
||||||
|
#endif
|
||||||
|
// Switch on TX
|
||||||
|
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_TX);
|
||||||
|
// Wait for 100 ms before checking ADC values
|
||||||
|
adcCountdown.setTimeout(100);
|
||||||
|
adcCountdown.resetTimer();
|
||||||
|
commandExecuted = true;
|
||||||
|
}
|
||||||
|
// ADC values are ok, 5 seconds have elapsed
|
||||||
|
if (transitionOk and countdown.hasTimedOut()) {
|
||||||
|
state = States::ON_TRANS_MPA;
|
||||||
|
commandExecuted = false;
|
||||||
|
transitionOk = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (state == States::ON_TRANS_MPA) {
|
||||||
|
if (not commandExecuted) {
|
||||||
|
float waitTime = MPA_TO_HPA_WAIT_TIME;
|
||||||
|
params.getValue(PlPcduParameter::MPA_TO_HPA_WAIT_TIME_K, waitTime);
|
||||||
|
countdown.setTimeout(std::round(waitTime * 1000));
|
||||||
|
countdown.resetTimer();
|
||||||
|
#if OBSW_VERBOSE_LEVEL >= 1
|
||||||
|
sif::info << "Enabling PL PCDU MPA module" << std::endl;
|
||||||
|
#endif
|
||||||
|
// Switch on MPA
|
||||||
|
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_MPA);
|
||||||
|
// Wait for 100 ms before checking ADC values
|
||||||
|
adcCountdown.setTimeout(100);
|
||||||
|
adcCountdown.resetTimer();
|
||||||
|
commandExecuted = true;
|
||||||
|
}
|
||||||
|
// ADC values are ok, 5 seconds have elapsed
|
||||||
|
if (transitionOk and countdown.hasTimedOut()) {
|
||||||
|
state = States::ON_TRANS_HPA;
|
||||||
|
commandExecuted = false;
|
||||||
|
transitionOk = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (state == States::ON_TRANS_HPA) {
|
||||||
|
if (not commandExecuted) {
|
||||||
|
// Switch on HPA
|
||||||
|
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_HPA);
|
||||||
|
#if OBSW_VERBOSE_LEVEL >= 1
|
||||||
|
sif::info << "Enabling PL PCDU HPA module" << std::endl;
|
||||||
|
#endif
|
||||||
|
commandExecuted = true;
|
||||||
|
}
|
||||||
|
// ADC values are ok, 5 seconds have elapsed
|
||||||
|
if (transitionOk and countdown.hasTimedOut()) {
|
||||||
|
state = States::PCDU_ON;
|
||||||
|
setMode(MODE_NORMAL, plpcdu::NORMAL_ALL_ON);
|
||||||
|
countdown.resetTimer();
|
||||||
|
commandExecuted = false;
|
||||||
|
transitionOk = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PayloadPcduHandler::doTransition(Mode_t modeFrom, Submode_t subModeFrom) {
|
void PayloadPcduHandler::doTransition(Mode_t modeFrom, Submode_t subModeFrom) {
|
||||||
if (mode == _MODE_TO_NORMAL) {
|
if (mode == _MODE_TO_NORMAL) {
|
||||||
stateMachineToNormal();
|
stateMachineToNormal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PayloadPcduHandler::doShutDown() {}
|
void PayloadPcduHandler::doShutDown() { transitionBackToOff(); }
|
||||||
|
|
||||||
ReturnValue_t PayloadPcduHandler::buildNormalDeviceCommand(DeviceCommandId_t* id) {
|
ReturnValue_t PayloadPcduHandler::buildNormalDeviceCommand(DeviceCommandId_t* id) {
|
||||||
switch (adcState) {
|
switch (adcState) {
|
||||||
@ -75,6 +228,9 @@ ReturnValue_t PayloadPcduHandler::buildTransitionDeviceCommand(DeviceCommandId_t
|
|||||||
*id = plpcdu::SETUP_CMD;
|
*id = plpcdu::SETUP_CMD;
|
||||||
return buildCommandFromCommand(*id, nullptr, 0);
|
return buildCommandFromCommand(*id, nullptr, 0);
|
||||||
}
|
}
|
||||||
|
if (mode == _MODE_TO_NORMAL) {
|
||||||
|
return buildNormalDeviceCommand(id);
|
||||||
|
}
|
||||||
return NOTHING_TO_SEND;
|
return NOTHING_TO_SEND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,6 +306,8 @@ ReturnValue_t PayloadPcduHandler::interpretDeviceReply(DeviceCommandId_t id,
|
|||||||
return pg.getReadResult();
|
return pg.getReadResult();
|
||||||
}
|
}
|
||||||
handleExtConvRead(packet);
|
handleExtConvRead(packet);
|
||||||
|
checkAdcValues();
|
||||||
|
adcSet.setValidity(true, true);
|
||||||
handlePrintout();
|
handlePrintout();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -162,6 +320,8 @@ ReturnValue_t PayloadPcduHandler::interpretDeviceReply(DeviceCommandId_t id,
|
|||||||
uint8_t tempStartIdx = ADC_REPLY_SIZE + TEMP_REPLY_SIZE - 2;
|
uint8_t tempStartIdx = ADC_REPLY_SIZE + TEMP_REPLY_SIZE - 2;
|
||||||
adcSet.tempC.value =
|
adcSet.tempC.value =
|
||||||
max1227::getTemperature(packet[tempStartIdx] << 8 | packet[tempStartIdx + 1]);
|
max1227::getTemperature(packet[tempStartIdx] << 8 | packet[tempStartIdx + 1]);
|
||||||
|
checkAdcValues();
|
||||||
|
adcSet.setValidity(true, true);
|
||||||
handlePrintout();
|
handlePrintout();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -180,7 +340,9 @@ uint32_t PayloadPcduHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo
|
|||||||
ReturnValue_t PayloadPcduHandler::initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
ReturnValue_t PayloadPcduHandler::initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) {
|
LocalDataPoolManager& poolManager) {
|
||||||
localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::CHANNEL_VEC, &channelValues);
|
localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::CHANNEL_VEC, &channelValues);
|
||||||
|
localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::PROCESSED_VEC, &processedValues);
|
||||||
localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::TEMP, &tempC);
|
localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::TEMP, &tempC);
|
||||||
|
poolManager.subscribeForPeriodicPacket(adcSet.getSid(), false, 0.1, true);
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,6 +357,7 @@ void PayloadPcduHandler::handleExtConvRead(const uint8_t* bufStart) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PayloadPcduHandler::handlePrintout() {
|
void PayloadPcduHandler::handlePrintout() {
|
||||||
|
using namespace plpcdu;
|
||||||
if (periodicPrintout) {
|
if (periodicPrintout) {
|
||||||
if (opDivider.checkAndIncrement()) {
|
if (opDivider.checkAndIncrement()) {
|
||||||
sif::info << "PL PCDU ADC hex [" << std::setfill('0') << std::hex;
|
sif::info << "PL PCDU ADC hex [" << std::setfill('0') << std::hex;
|
||||||
@ -205,6 +368,17 @@ void PayloadPcduHandler::handlePrintout() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sif::info << "] | T[C] " << std::dec << adcSet.tempC.value << std::endl;
|
sif::info << "] | T[C] " << std::dec << adcSet.tempC.value << std::endl;
|
||||||
|
sif::info << "Neg V: " << adcSet.processed[U_NEG_V_FB] << std::endl;
|
||||||
|
sif::info << "I HPA [mA]: " << adcSet.processed[I_HPA] << std::endl;
|
||||||
|
sif::info << "U HPA [V]: " << adcSet.processed[U_HPA_DIV_6] << std::endl;
|
||||||
|
sif::info << "I MPA [mA]: " << adcSet.processed[I_MPA] << std::endl;
|
||||||
|
sif::info << "U MPA [V]: " << adcSet.processed[U_MPA_DIV_6] << std::endl;
|
||||||
|
sif::info << "I TX [mA]: " << adcSet.processed[I_TX] << std::endl;
|
||||||
|
sif::info << "U TX [V]: " << adcSet.processed[U_TX_DIV_6] << std::endl;
|
||||||
|
sif::info << "I X8 [mA]: " << adcSet.processed[I_X8] << std::endl;
|
||||||
|
sif::info << "U X8 [V]: " << adcSet.processed[U_X8_DIV_6] << std::endl;
|
||||||
|
sif::info << "I DRO [mA]: " << adcSet.processed[I_DRO] << std::endl;
|
||||||
|
sif::info << "U DRO [V]: " << adcSet.processed[U_DRO_DIV_6] << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,108 +405,154 @@ void PayloadPcduHandler::transitionBackToOff() {
|
|||||||
triggerEvent(TRANSITION_BACK_TO_OFF, static_cast<uint32_t>(currentState));
|
triggerEvent(TRANSITION_BACK_TO_OFF, static_cast<uint32_t>(currentState));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PayloadPcduHandler::stateMachineToNormal() {
|
void PayloadPcduHandler::checkAdcValues() {
|
||||||
if (adcState == AdcStates::BOOT_DELAY) {
|
using namespace plpcdu;
|
||||||
if (adcCountdown.hasTimedOut()) {
|
checkJsonFileInit();
|
||||||
adcState = AdcStates::SEND_SETUP;
|
adcSet.processed[U_BAT_DIV_6] =
|
||||||
adcCmdExecuted = false;
|
static_cast<float>(adcSet.channels[0]) * VOLTAGE_DIV / MAX122X_BIT * MAX122X_VREF;
|
||||||
|
adcSet.processed[U_NEG_V_FB] =
|
||||||
|
V_POS - VOLTAGE_DIV_U_NEG *
|
||||||
|
(V_POS - static_cast<float>(adcSet.channels[1]) / MAX122X_BIT * MAX122X_VREF);
|
||||||
|
adcSet.processed[I_HPA] = static_cast<float>(adcSet.channels[2]) * SCALE_CURRENT_HPA * 1000.0;
|
||||||
|
adcSet.processed[U_HPA_DIV_6] = static_cast<float>(adcSet.channels[3]) * SCALE_VOLTAGE;
|
||||||
|
adcSet.processed[I_MPA] = static_cast<float>(adcSet.channels[4]) * SCALE_CURRENT_MPA * 1000.0;
|
||||||
|
adcSet.processed[U_MPA_DIV_6] = static_cast<float>(adcSet.channels[5]) * SCALE_VOLTAGE;
|
||||||
|
adcSet.processed[I_TX] = static_cast<float>(adcSet.channels[6]) * SCALE_CURRENT_TX * 1000.0;
|
||||||
|
adcSet.processed[U_TX_DIV_6] = static_cast<float>(adcSet.channels[7]) * SCALE_VOLTAGE;
|
||||||
|
adcSet.processed[I_X8] = static_cast<float>(adcSet.channels[8]) * SCALE_CURRENT_X8 * 1000.0;
|
||||||
|
adcSet.processed[U_X8_DIV_6] = static_cast<float>(adcSet.channels[9]) * SCALE_VOLTAGE;
|
||||||
|
adcSet.processed[I_DRO] = static_cast<float>(adcSet.channels[10]) * SCALE_CURRENT_DRO * 1000.0;
|
||||||
|
adcSet.processed[U_DRO_DIV_6] = static_cast<float>(adcSet.channels[11]) * SCALE_VOLTAGE;
|
||||||
|
float lowerBound = 0.0;
|
||||||
|
float upperBound = 0.0;
|
||||||
|
bool adcTransition = false;
|
||||||
|
adcTransition = state == States::ON_TRANS_DRO and adcCountdown.isBusy();
|
||||||
|
// Now check against voltage and current limits, depending on state
|
||||||
|
if (state >= States::ON_TRANS_DRO and not adcTransition) {
|
||||||
|
params.getValue(PlPcduParameter::NEG_V_LOWER_BOUND_K, lowerBound);
|
||||||
|
params.getValue(PlPcduParameter::NEG_V_UPPER_BOUND_K, upperBound);
|
||||||
|
if (not checkVoltage(adcSet.processed[U_NEG_V_FB], lowerBound, upperBound,
|
||||||
|
NEG_V_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
params.getValue(PlPcduParameter::DRO_U_LOWER_BOUND_K, lowerBound);
|
||||||
|
params.getValue(PlPcduParameter::DRO_U_UPPER_BOUND_K, upperBound);
|
||||||
|
if (not checkVoltage(adcSet.processed[U_DRO_DIV_6], lowerBound, upperBound,
|
||||||
|
U_DRO_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
params.getValue(PlPcduParameter::DRO_I_UPPER_BOUND_K, upperBound);
|
||||||
|
if (not checkCurrent(adcSet.processed[I_DRO], upperBound, I_DRO_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (adcState == AdcStates::SEND_SETUP) {
|
adcTransition = state == States::ON_TRANS_X8 and adcCountdown.isBusy();
|
||||||
if (adcCmdExecuted) {
|
if (state >= States::ON_TRANS_X8 and not adcTransition) {
|
||||||
adcState = AdcStates::NORMAL;
|
params.getValue(PlPcduParameter::X8_U_LOWER_BOUND_K, lowerBound);
|
||||||
setMode(MODE_NORMAL, plpcdu::NORMAL_ADC_ONLY);
|
params.getValue(PlPcduParameter::X8_U_UPPER_BOUND_K, upperBound);
|
||||||
adcCmdExecuted = false;
|
if (not checkVoltage(adcSet.processed[U_X8_DIV_6], lowerBound, upperBound,
|
||||||
|
U_X8_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
params.getValue(PlPcduParameter::X8_I_UPPER_BOUND_K, upperBound);
|
||||||
|
if (not checkCurrent(adcSet.processed[I_X8], upperBound, I_X8_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (submode == plpcdu::NORMAL_ALL_ON) {
|
adcTransition = state == States::ON_TRANS_TX and adcCountdown.isBusy();
|
||||||
if (state == States::ON_TRANS_ADC_CLOSE_ZERO) {
|
if (state >= States::ON_TRANS_TX and not adcTransition) {
|
||||||
if (not commandExecuted) {
|
params.getValue(PlPcduParameter::TX_U_LOWER_BOUND_K, lowerBound);
|
||||||
countdown.resetTimer();
|
params.getValue(PlPcduParameter::TX_U_UPPER_BOUND_K, upperBound);
|
||||||
commandExecuted = true;
|
if (not checkVoltage(adcSet.processed[U_TX_DIV_6], lowerBound, upperBound,
|
||||||
|
U_TX_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
// ADC values are ok, 5 seconds have elapsed
|
params.getValue(PlPcduParameter::TX_I_UPPER_BOUND_K, upperBound);
|
||||||
if (transitionOk and countdown.hasTimedOut()) {
|
if (not checkCurrent(adcSet.processed[I_TX], upperBound, I_TX_OUT_OF_BOUNDS)) {
|
||||||
state = States::ON_TRANS_DRO;
|
return;
|
||||||
// Now start monitoring for negative voltages instead
|
}
|
||||||
monMode = MonitoringMode::NEGATIVE;
|
}
|
||||||
countdown.resetTimer();
|
adcTransition = state == States::ON_TRANS_MPA and adcCountdown.isBusy();
|
||||||
commandExecuted = false;
|
if (state >= States::ON_TRANS_MPA and not adcTransition) {
|
||||||
|
params.getValue(PlPcduParameter::MPA_U_LOWER_BOUND_K, lowerBound);
|
||||||
|
params.getValue(PlPcduParameter::MPA_U_UPPER_BOUND_K, upperBound);
|
||||||
|
if (not checkVoltage(adcSet.processed[U_MPA_DIV_6], lowerBound, upperBound,
|
||||||
|
U_MPA_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
params.getValue(PlPcduParameter::MPA_I_UPPER_BOUND_K, upperBound);
|
||||||
|
if (not checkCurrent(adcSet.processed[I_MPA], upperBound, I_MPA_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
adcTransition = state == States::ON_TRANS_HPA and adcCountdown.isBusy();
|
||||||
|
if (state >= States::ON_TRANS_HPA and not adcTransition) {
|
||||||
|
params.getValue(PlPcduParameter::HPA_U_LOWER_BOUND_K, lowerBound);
|
||||||
|
params.getValue(PlPcduParameter::HPA_U_UPPER_BOUND_K, upperBound);
|
||||||
|
if (not checkVoltage(adcSet.processed[U_HPA_DIV_6], lowerBound, upperBound,
|
||||||
|
U_HPA_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
params.getValue(PlPcduParameter::HPA_I_UPPER_BOUND_K, upperBound);
|
||||||
|
if (not checkCurrent(adcSet.processed[I_HPA], upperBound, I_HPA_OUT_OF_BOUNDS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
transitionOk = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PayloadPcduHandler::checkJsonFileInit() {
|
||||||
|
if (not jsonFileInitComplete) {
|
||||||
|
sd::SdCard prefSd;
|
||||||
|
sdcMan->getPreferredSdCard(prefSd);
|
||||||
|
if (sdcMan->isSdCardMounted(prefSd)) {
|
||||||
|
params.initialize(sdcMan->getCurrentMountPrefix(prefSd));
|
||||||
|
jsonFileInitComplete = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PayloadPcduHandler::checkVoltage(float val, float lowerBound, float upperBound, Event event) {
|
||||||
|
bool tooLarge = false;
|
||||||
|
if (val < lowerBound or val > upperBound) {
|
||||||
|
if (val > upperBound) {
|
||||||
|
tooLarge = true;
|
||||||
|
} else {
|
||||||
|
tooLarge = false;
|
||||||
|
}
|
||||||
|
uint32_t p2 = 0;
|
||||||
|
serializeFloat(p2, val);
|
||||||
|
triggerEvent(event, tooLarge, p2);
|
||||||
transitionOk = false;
|
transitionOk = false;
|
||||||
|
transitionBackToOff();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
if (state == States::ON_TRANS_DRO) {
|
|
||||||
if (not commandExecuted) {
|
bool PayloadPcduHandler::checkCurrent(float val, float upperBound, Event event) {
|
||||||
// Switch on DRO and start monitoring for negative voltagea
|
if (val > upperBound) {
|
||||||
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_DRO);
|
uint32_t p2 = 0;
|
||||||
commandExecuted = true;
|
serializeFloat(p2, val);
|
||||||
}
|
triggerEvent(event, true, p2);
|
||||||
// ADC values are ok, 5 seconds have elapsed
|
|
||||||
if (transitionOk and countdown.hasTimedOut()) {
|
|
||||||
state = States::ON_TRANS_X8;
|
|
||||||
countdown.resetTimer();
|
|
||||||
commandExecuted = false;
|
|
||||||
transitionOk = false;
|
transitionOk = false;
|
||||||
|
transitionBackToOff();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
if (state == States::ON_TRANS_X8) {
|
|
||||||
if (not commandExecuted) {
|
ReturnValue_t PayloadPcduHandler::isModeCombinationValid(Mode_t mode, Submode_t submode) {
|
||||||
// Switch on X8
|
if (mode == MODE_NORMAL and submode <= 1) {
|
||||||
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_X8);
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
commandExecuted = true;
|
|
||||||
}
|
|
||||||
// ADC values are ok, 5 seconds have elapsed
|
|
||||||
if (transitionOk and countdown.hasTimedOut()) {
|
|
||||||
state = States::ON_TRANS_TX;
|
|
||||||
countdown.resetTimer();
|
|
||||||
commandExecuted = false;
|
|
||||||
transitionOk = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state == States::ON_TRANS_TX) {
|
|
||||||
if (not commandExecuted) {
|
|
||||||
// Switch on TX
|
|
||||||
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_TX);
|
|
||||||
commandExecuted = true;
|
|
||||||
}
|
|
||||||
// ADC values are ok, 5 seconds have elapsed
|
|
||||||
if (transitionOk and countdown.hasTimedOut()) {
|
|
||||||
state = States::ON_TRANS_MPA;
|
|
||||||
countdown.resetTimer();
|
|
||||||
commandExecuted = false;
|
|
||||||
transitionOk = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state == States::ON_TRANS_MPA) {
|
|
||||||
if (not commandExecuted) {
|
|
||||||
// Switch on MPA
|
|
||||||
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_MPA);
|
|
||||||
commandExecuted = true;
|
|
||||||
}
|
|
||||||
// ADC values are ok, 5 seconds have elapsed
|
|
||||||
if (transitionOk and countdown.hasTimedOut()) {
|
|
||||||
state = States::ON_TRANS_HPA;
|
|
||||||
countdown.resetTimer();
|
|
||||||
commandExecuted = false;
|
|
||||||
transitionOk = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (state == States::ON_TRANS_HPA) {
|
|
||||||
if (not commandExecuted) {
|
|
||||||
// Switch on HPA
|
|
||||||
gpioIF->pullHigh(gpioIds::PLPCDU_ENB_HPA);
|
|
||||||
commandExecuted = true;
|
|
||||||
}
|
|
||||||
// ADC values are ok, 5 seconds have elapsed
|
|
||||||
if (transitionOk and countdown.hasTimedOut()) {
|
|
||||||
state = States::PCDU_ON;
|
|
||||||
setMode(MODE_NORMAL, plpcdu::NORMAL_ALL_ON);
|
|
||||||
countdown.resetTimer();
|
|
||||||
commandExecuted = false;
|
|
||||||
transitionOk = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return DeviceHandlerBase::isModeCombinationValid(mode, submode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReturnValue_t PayloadPcduHandler::serializeFloat(uint32_t& param, float val) {
|
||||||
|
size_t dummy = 0;
|
||||||
|
return SerializeAdapter::serialize(&val, reinterpret_cast<uint8_t*>(¶m), &dummy, 4,
|
||||||
|
SerializeIF::Endianness::NETWORK);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FSFW_OSAL_LINUX
|
#ifdef FSFW_OSAL_LINUX
|
||||||
@ -464,4 +684,5 @@ ReturnValue_t PayloadPcduHandler::transferAsTwo(SpiComIF* comIf, SpiCookie* cook
|
|||||||
}
|
}
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include "fsfw/FSFW.h"
|
#include "fsfw/FSFW.h"
|
||||||
#include "fsfw_hal/common/gpio/GpioIF.h"
|
#include "fsfw_hal/common/gpio/GpioIF.h"
|
||||||
#include "mission/devices/devicedefinitions/payloadPcduDefinitions.h"
|
#include "mission/devices/devicedefinitions/payloadPcduDefinitions.h"
|
||||||
|
#include "mission/memory/SdCardMountedIF.h"
|
||||||
|
|
||||||
#ifdef FSFW_OSAL_LINUX
|
#ifdef FSFW_OSAL_LINUX
|
||||||
class SpiComIF;
|
class SpiComIF;
|
||||||
@ -32,11 +33,34 @@ class SpiCookie;
|
|||||||
class PayloadPcduHandler : public DeviceHandlerBase {
|
class PayloadPcduHandler : public DeviceHandlerBase {
|
||||||
public:
|
public:
|
||||||
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PL_PCDU_HANDLER;
|
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::PL_PCDU_HANDLER;
|
||||||
|
//! [EXPORT] : [COMMENT] Could not transition properly and went back to ALL OFF
|
||||||
static constexpr Event TRANSITION_BACK_TO_OFF =
|
static constexpr Event TRANSITION_BACK_TO_OFF =
|
||||||
event::makeEvent(SUBSYSTEM_ID, 0, severity::MEDIUM);
|
event::makeEvent(SUBSYSTEM_ID, 0, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event NEG_V_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 1, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event U_DRO_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 2, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event I_DRO_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 3, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event U_X8_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 4, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event I_X8_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 5, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event U_TX_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 6, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event I_TX_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 7, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event U_MPA_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 8, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event I_MPA_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 9, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event U_HPA_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 10, severity::MEDIUM);
|
||||||
|
//! [EXPORT] : [COMMENT] P1: 0 -> too low, 1 -> too high P2: Float value
|
||||||
|
static constexpr Event I_HPA_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 11, severity::MEDIUM);
|
||||||
|
|
||||||
PayloadPcduHandler(object_id_t objectId, object_id_t comIF, CookieIF* cookie, GpioIF* gpioIF,
|
PayloadPcduHandler(object_id_t objectId, object_id_t comIF, CookieIF* cookie, GpioIF* gpioIF,
|
||||||
bool periodicPrintout);
|
SdCardMountedIF* sdcMan, bool periodicPrintout);
|
||||||
|
|
||||||
void setToGoToNormalModeImmediately(bool enable);
|
void setToGoToNormalModeImmediately(bool enable);
|
||||||
void enablePeriodicPrintout(bool enable, uint8_t divider);
|
void enablePeriodicPrintout(bool enable, uint8_t divider);
|
||||||
@ -86,13 +110,18 @@ class PayloadPcduHandler : public DeviceHandlerBase {
|
|||||||
bool commandExecuted = false;
|
bool commandExecuted = false;
|
||||||
bool adcCmdExecuted = false;
|
bool adcCmdExecuted = false;
|
||||||
bool periodicPrintout = false;
|
bool periodicPrintout = false;
|
||||||
|
bool jsonFileInitComplete = false;
|
||||||
PeriodicOperationDivider opDivider = PeriodicOperationDivider(5);
|
PeriodicOperationDivider opDivider = PeriodicOperationDivider(5);
|
||||||
uint8_t tempReadDivisor = 1;
|
uint8_t tempReadDivisor = 1;
|
||||||
Countdown countdown = Countdown(5000);
|
Countdown countdown = Countdown(5000);
|
||||||
Countdown adcCountdown = Countdown(50);
|
Countdown adcCountdown = Countdown(50);
|
||||||
GpioIF* gpioIF;
|
GpioIF* gpioIF;
|
||||||
|
SdCardMountedIF* sdcMan;
|
||||||
|
plpcdu::PlPcduParameter params;
|
||||||
|
|
||||||
PoolEntry<uint16_t> channelValues = PoolEntry<uint16_t>({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
|
PoolEntry<uint16_t> channelValues = PoolEntry<uint16_t>({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
|
||||||
|
PoolEntry<float> processedValues =
|
||||||
|
PoolEntry<float>({0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0});
|
||||||
PoolEntry<float> tempC = PoolEntry<float>({0.0});
|
PoolEntry<float> tempC = PoolEntry<float>({0.0});
|
||||||
|
|
||||||
void doTransition(Mode_t modeFrom, Submode_t subModeFrom) override;
|
void doTransition(Mode_t modeFrom, Submode_t subModeFrom) override;
|
||||||
@ -111,10 +140,16 @@ class PayloadPcduHandler : public DeviceHandlerBase {
|
|||||||
uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
|
uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
|
||||||
ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) override;
|
LocalDataPoolManager& poolManager) override;
|
||||||
|
ReturnValue_t isModeCombinationValid(Mode_t mode, Submode_t submode) override;
|
||||||
|
|
||||||
void handleExtConvRead(const uint8_t* bufStart);
|
void handleExtConvRead(const uint8_t* bufStart);
|
||||||
void handlePrintout();
|
void handlePrintout();
|
||||||
|
void checkAdcValues();
|
||||||
|
void checkJsonFileInit();
|
||||||
void stateMachineToNormal();
|
void stateMachineToNormal();
|
||||||
|
bool checkVoltage(float val, float lowerBound, float upperBound, Event event);
|
||||||
|
bool checkCurrent(float val, float upperBound, Event event);
|
||||||
|
ReturnValue_t serializeFloat(uint32_t& param, float val);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* LINUX_DEVICES_PLPCDUHANDLER_H_ */
|
#endif /* LINUX_DEVICES_PLPCDUHANDLER_H_ */
|
||||||
|
@ -5,8 +5,12 @@
|
|||||||
#include <fsfw/devicehandlers/DeviceHandlerIF.h>
|
#include <fsfw/devicehandlers/DeviceHandlerIF.h>
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
#include "OBSWConfig.h"
|
||||||
#include "mission/devices/max1227.h"
|
#include "mission/devices/max1227.h"
|
||||||
|
#include "mission/memory/NVMParameterBase.h"
|
||||||
|
|
||||||
namespace plpcdu {
|
namespace plpcdu {
|
||||||
|
|
||||||
@ -16,7 +20,7 @@ enum PlPcduAdcChannels : uint8_t {
|
|||||||
U_BAT_DIV_6 = 0,
|
U_BAT_DIV_6 = 0,
|
||||||
// According to schematic, will be 2.2158V for Vneg = +0V and 0.2446V for Vneg = -6V
|
// According to schematic, will be 2.2158V for Vneg = +0V and 0.2446V for Vneg = -6V
|
||||||
// Full Forumula: V_neg = V_post - (R1 + R2) / R1 * (V_pos - V_out) with R1 being 27.4k
|
// Full Forumula: V_neg = V_post - (R1 + R2) / R1 * (V_pos - V_out) with R1 being 27.4k
|
||||||
// and R2 being 49.9k
|
// and R2 being 49.9k. FB = Feedback
|
||||||
U_NEG_V_FB = 1,
|
U_NEG_V_FB = 1,
|
||||||
I_HPA = 2,
|
I_HPA = 2,
|
||||||
U_HPA_DIV_6 = 3,
|
U_HPA_DIV_6 = 3,
|
||||||
@ -31,7 +35,7 @@ enum PlPcduAdcChannels : uint8_t {
|
|||||||
NUM_CHANNELS = 12
|
NUM_CHANNELS = 12
|
||||||
};
|
};
|
||||||
|
|
||||||
enum PlPcduPoolIds : uint32_t { CHANNEL_VEC = 0, TEMP = 1 };
|
enum PlPcduPoolIds : uint32_t { CHANNEL_VEC = 0, PROCESSED_VEC = 1, TEMP = 2 };
|
||||||
|
|
||||||
static constexpr size_t MAX_ADC_REPLY_SIZE = 64;
|
static constexpr size_t MAX_ADC_REPLY_SIZE = 64;
|
||||||
|
|
||||||
@ -57,6 +61,62 @@ static constexpr uint8_t CHANNEL_N = CHANNELS_NUM - 1;
|
|||||||
// Store temperature as well
|
// Store temperature as well
|
||||||
static constexpr size_t DATASET_ENTRIES = CHANNELS_NUM + 1;
|
static constexpr size_t DATASET_ENTRIES = CHANNELS_NUM + 1;
|
||||||
|
|
||||||
|
static constexpr uint8_t VOLTAGE_DIV = 6;
|
||||||
|
// 12-bit ADC: 2 to the power of 12 minus 1
|
||||||
|
static constexpr uint16_t MAX122X_BIT = 4095;
|
||||||
|
static constexpr float MAX122X_VREF = 2.5;
|
||||||
|
static constexpr float GAIN_INA169 = 100.0;
|
||||||
|
static constexpr float R_SHUNT_HPA = 0.008;
|
||||||
|
static constexpr float R_SHUNT_MPA = 0.015;
|
||||||
|
static constexpr float R_SHUNT_TX = 0.05;
|
||||||
|
static constexpr float R_SHUNT_X8 = 0.015;
|
||||||
|
static constexpr float R_SHUNT_DRO = 0.022;
|
||||||
|
static constexpr float V_POS = 3.3;
|
||||||
|
static constexpr float VOLTAGE_DIV_U_NEG = (49.9 + 27.4) / 27.4;
|
||||||
|
static constexpr float MAX122X_SCALE = MAX122X_VREF / MAX122X_BIT;
|
||||||
|
static constexpr float SCALE_VOLTAGE = MAX122X_SCALE * VOLTAGE_DIV;
|
||||||
|
static constexpr float SCALE_CURRENT_HPA = MAX122X_SCALE / (GAIN_INA169 * R_SHUNT_HPA);
|
||||||
|
static constexpr float SCALE_CURRENT_MPA = MAX122X_SCALE / (GAIN_INA169 * R_SHUNT_MPA);
|
||||||
|
static constexpr float SCALE_CURRENT_TX = MAX122X_SCALE / (GAIN_INA169 * R_SHUNT_TX);
|
||||||
|
static constexpr float SCALE_CURRENT_X8 = MAX122X_SCALE / (GAIN_INA169 * R_SHUNT_X8);
|
||||||
|
static constexpr float SCALE_CURRENT_DRO = MAX122X_SCALE / (GAIN_INA169 * R_SHUNT_DRO);
|
||||||
|
|
||||||
|
// TODO: Make these configurable parameters using a JSON file
|
||||||
|
// Upper bound of currents in milliamperes [mA]
|
||||||
|
static constexpr double NEG_V_LOWER_BOUND = -6.5;
|
||||||
|
static constexpr double NEG_V_UPPER_BOUND = -2.7;
|
||||||
|
|
||||||
|
static constexpr double DRO_U_LOWER_BOUND = 5.0;
|
||||||
|
static constexpr double DRO_U_UPPER_BOUND = 7.0;
|
||||||
|
static constexpr double DRO_I_UPPER_BOUND = 40.0;
|
||||||
|
|
||||||
|
static constexpr double X8_U_LOWER_BOUND = 2.6;
|
||||||
|
static constexpr double X8_U_UPPER_BOUND = 4.0;
|
||||||
|
static constexpr double X8_I_UPPER_BOUND = 100.0;
|
||||||
|
|
||||||
|
static constexpr double TX_U_LOWER_BOUND = 2.6;
|
||||||
|
static constexpr double TX_U_UPPER_BOUND = 4.0;
|
||||||
|
static constexpr double TX_I_UPPER_BOUND = 250.0;
|
||||||
|
|
||||||
|
static constexpr double MPA_U_LOWER_BOUND = 2.6;
|
||||||
|
static constexpr double MPA_U_UPPER_BOUND = 4.0;
|
||||||
|
static constexpr double MPA_I_UPPER_BOUND = 650.0;
|
||||||
|
|
||||||
|
static constexpr double HPA_U_LOWER_BOUND = 9.4;
|
||||||
|
static constexpr double HPA_U_UPPER_BOUND = 11.0;
|
||||||
|
static constexpr double HPA_I_UPPER_BOUND = 3000.0;
|
||||||
|
|
||||||
|
// Wait time in floating point seconds
|
||||||
|
static constexpr double SSR_TO_DRO_WAIT_TIME = 5.0;
|
||||||
|
static constexpr double DRO_TO_X8_WAIT_TIME = 905.0;
|
||||||
|
static constexpr double X8_TO_TX_WAIT_TIME = 5.0;
|
||||||
|
static constexpr double TX_TO_MPA_WAIT_TIME = 5.0;
|
||||||
|
static constexpr double MPA_TO_HPA_WAIT_TIME = 5.0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current of the processed values is calculated and stored as a milliamperes [mA].
|
||||||
|
* The voltages are stored as Volt values.
|
||||||
|
*/
|
||||||
class PlPcduAdcSet : public StaticLocalDataSet<DATASET_ENTRIES> {
|
class PlPcduAdcSet : public StaticLocalDataSet<DATASET_ENTRIES> {
|
||||||
public:
|
public:
|
||||||
PlPcduAdcSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, ADC_SET_ID) {}
|
PlPcduAdcSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, ADC_SET_ID) {}
|
||||||
@ -64,9 +124,85 @@ class PlPcduAdcSet : public StaticLocalDataSet<DATASET_ENTRIES> {
|
|||||||
PlPcduAdcSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, ADC_SET_ID)) {}
|
PlPcduAdcSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, ADC_SET_ID)) {}
|
||||||
|
|
||||||
lp_vec_t<uint16_t, 12> channels = lp_vec_t<uint16_t, 12>(sid.objectId, CHANNEL_VEC, this);
|
lp_vec_t<uint16_t, 12> channels = lp_vec_t<uint16_t, 12>(sid.objectId, CHANNEL_VEC, this);
|
||||||
|
lp_vec_t<float, 12> processed = lp_vec_t<float, 12>(sid.objectId, PROCESSED_VEC, this);
|
||||||
lp_var_t<float> tempC = lp_var_t<float>(sid.objectId, TEMP, this);
|
lp_var_t<float> tempC = lp_var_t<float>(sid.objectId, TEMP, this);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class PlPcduParameter : public NVMParameterBase {
|
||||||
|
public:
|
||||||
|
static constexpr char SSR_TO_DRO_WAIT_TIME_K[] = "ssrToDroWait";
|
||||||
|
static constexpr char DRO_TO_X8_WAIT_TIME_K[] = "droToX8Wait";
|
||||||
|
static constexpr char X8_TO_TX_WAIT_TIME_K[] = "X8ToTxWait";
|
||||||
|
static constexpr char TX_TO_MPA_WAIT_TIME_K[] = "txToMpaWait";
|
||||||
|
static constexpr char MPA_TO_HPA_WAIT_TIME_K[] = "mpaToHpaWait";
|
||||||
|
|
||||||
|
static constexpr char NEG_V_LOWER_BOUND_K[] = "negVoltLowerBound";
|
||||||
|
static constexpr char NEG_V_UPPER_BOUND_K[] = "negVoltUpperBound";
|
||||||
|
|
||||||
|
static constexpr char DRO_U_LOWER_BOUND_K[] = "droVoltLowerBound";
|
||||||
|
static constexpr char DRO_U_UPPER_BOUND_K[] = "droVoltUpperBound";
|
||||||
|
static constexpr char DRO_I_UPPER_BOUND_K[] = "droCurrUpperBound";
|
||||||
|
|
||||||
|
static constexpr char X8_U_LOWER_BOUND_K[] = "x8VoltLowerBound";
|
||||||
|
static constexpr char X8_U_UPPER_BOUND_K[] = "x8VoltUpperBound";
|
||||||
|
static constexpr char X8_I_UPPER_BOUND_K[] = "x8CurrUpperBound";
|
||||||
|
|
||||||
|
static constexpr char TX_U_LOWER_BOUND_K[] = "txVoltLowerBound";
|
||||||
|
static constexpr char TX_U_UPPER_BOUND_K[] = "txVoltUpperBound";
|
||||||
|
static constexpr char TX_I_UPPER_BOUND_K[] = "txCurrUpperBound";
|
||||||
|
|
||||||
|
static constexpr char MPA_U_LOWER_BOUND_K[] = "mpaVoltLowerBound";
|
||||||
|
static constexpr char MPA_U_UPPER_BOUND_K[] = "mpaVoltUpperBound";
|
||||||
|
static constexpr char MPA_I_UPPER_BOUND_K[] = "mpaCurrUpperBound";
|
||||||
|
|
||||||
|
static constexpr char HPA_U_LOWER_BOUND_K[] = "hpaVoltLowerBound";
|
||||||
|
static constexpr char HPA_U_UPPER_BOUND_K[] = "hpaVoltUpperBound";
|
||||||
|
static constexpr char HPA_I_UPPER_BOUND_K[] = "hpaCurrUpperBound";
|
||||||
|
|
||||||
|
PlPcduParameter() : NVMParameterBase(""), mountPrefix("") {
|
||||||
|
// Initialize with default values
|
||||||
|
insertValue(SSR_TO_DRO_WAIT_TIME_K, SSR_TO_DRO_WAIT_TIME);
|
||||||
|
insertValue(DRO_TO_X8_WAIT_TIME_K, DRO_TO_X8_WAIT_TIME);
|
||||||
|
insertValue(X8_TO_TX_WAIT_TIME_K, X8_TO_TX_WAIT_TIME);
|
||||||
|
insertValue(TX_TO_MPA_WAIT_TIME_K, TX_TO_MPA_WAIT_TIME);
|
||||||
|
insertValue(MPA_TO_HPA_WAIT_TIME_K, MPA_TO_HPA_WAIT_TIME);
|
||||||
|
insertValue(NEG_V_LOWER_BOUND_K, NEG_V_LOWER_BOUND);
|
||||||
|
insertValue(NEG_V_UPPER_BOUND_K, NEG_V_UPPER_BOUND);
|
||||||
|
insertValue(DRO_U_LOWER_BOUND_K, DRO_U_LOWER_BOUND);
|
||||||
|
insertValue(DRO_U_UPPER_BOUND_K, DRO_U_UPPER_BOUND);
|
||||||
|
insertValue(DRO_I_UPPER_BOUND_K, DRO_I_UPPER_BOUND);
|
||||||
|
insertValue(X8_U_LOWER_BOUND_K, X8_U_LOWER_BOUND);
|
||||||
|
insertValue(X8_U_UPPER_BOUND_K, X8_U_UPPER_BOUND);
|
||||||
|
insertValue(X8_I_UPPER_BOUND_K, X8_I_UPPER_BOUND);
|
||||||
|
insertValue(TX_U_LOWER_BOUND_K, TX_U_LOWER_BOUND);
|
||||||
|
insertValue(TX_U_UPPER_BOUND_K, TX_U_UPPER_BOUND);
|
||||||
|
insertValue(TX_I_UPPER_BOUND_K, TX_I_UPPER_BOUND);
|
||||||
|
insertValue(MPA_U_LOWER_BOUND_K, MPA_U_LOWER_BOUND);
|
||||||
|
insertValue(MPA_U_UPPER_BOUND_K, MPA_U_UPPER_BOUND);
|
||||||
|
insertValue(MPA_I_UPPER_BOUND_K, MPA_I_UPPER_BOUND);
|
||||||
|
insertValue(HPA_U_LOWER_BOUND_K, HPA_U_LOWER_BOUND);
|
||||||
|
insertValue(HPA_U_UPPER_BOUND_K, HPA_U_UPPER_BOUND);
|
||||||
|
insertValue(HPA_I_UPPER_BOUND_K, HPA_I_UPPER_BOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t initialize(std::string mountPrefix) {
|
||||||
|
setFullName(mountPrefix + "/conf/plpcdu.json");
|
||||||
|
ReturnValue_t result = readJsonFile();
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
// File does not exist. Create it. Keys and appropriate init values were
|
||||||
|
// specified in constructor
|
||||||
|
#if OBSW_VERBOSE_LEVEL >= 1
|
||||||
|
sif::info << "Creating PL PCDU JSON file at " << getFullName() << std::endl;
|
||||||
|
#endif
|
||||||
|
writeJsonFile();
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string mountPrefix;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace plpcdu
|
} // namespace plpcdu
|
||||||
|
|
||||||
#endif /* LINUX_DEVICES_DEVICEDEFINITIONS_PAYLOADPCDUDEFINITIONS_H_ */
|
#endif /* LINUX_DEVICES_DEVICEDEFINITIONS_PAYLOADPCDUDEFINITIONS_H_ */
|
||||||
|
@ -19,7 +19,7 @@ ReturnValue_t NVMParameterBase::readJsonFile() {
|
|||||||
|
|
||||||
ReturnValue_t NVMParameterBase::writeJsonFile() {
|
ReturnValue_t NVMParameterBase::writeJsonFile() {
|
||||||
std::ofstream o(fullName);
|
std::ofstream o(fullName);
|
||||||
o << std::setw(4) << json;
|
o << std::setw(4) << json << std::endl;
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ class NVMParameterBase : public HasReturnvaluesIF {
|
|||||||
ReturnValue_t setValue(std::string key, T value);
|
ReturnValue_t setValue(std::string key, T value);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
ReturnValue_t getValue(std::string key, T* value) const;
|
ReturnValue_t getValue(std::string key, T& value) const;
|
||||||
|
|
||||||
void printKeys() const;
|
void printKeys() const;
|
||||||
void print() const;
|
void print() const;
|
||||||
@ -67,11 +67,11 @@ inline ReturnValue_t NVMParameterBase::setValue(std::string key, T value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline ReturnValue_t NVMParameterBase::getValue(std::string key, T* value) const {
|
inline ReturnValue_t NVMParameterBase::getValue(std::string key, T& value) const {
|
||||||
if (!json.contains(key)) {
|
if (!json.contains(key)) {
|
||||||
return KEY_NOT_EXISTS;
|
return KEY_NOT_EXISTS;
|
||||||
}
|
}
|
||||||
*value = json[key];
|
value = json[key];
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
mission/memory/SdCardMountedIF.h
Normal file
18
mission/memory/SdCardMountedIF.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef MISSION_MEMORY_SDCARDMOUNTERIF_H_
|
||||||
|
#define MISSION_MEMORY_SDCARDMOUNTERIF_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "definitions.h"
|
||||||
|
|
||||||
|
class SdCardMountedIF {
|
||||||
|
public:
|
||||||
|
virtual ~SdCardMountedIF(){};
|
||||||
|
virtual std::string getCurrentMountPrefix(sd::SdCard prefSdCardPtr = sd::SdCard::NONE) = 0;
|
||||||
|
virtual bool isSdCardMounted(sd::SdCard sdCard) = 0;
|
||||||
|
virtual ReturnValue_t getPreferredSdCard(sd::SdCard& sdCard) const = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* MISSION_MEMORY_SDCARDMOUNTERIF_H_ */
|
2
tmtc
2
tmtc
@ -1 +1 @@
|
|||||||
Subproject commit 7e24589184bb7bbd427c66ed55b3c29bbeba927f
|
Subproject commit 1238df03834b0b9ddbe2a59565de493661f5476e
|
Loading…
Reference in New Issue
Block a user