eive-obsw/linux/obc/PtmeRateSetter.cpp
Jakob Meier a56224c339
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good
ptme axi interface
2022-01-24 07:43:14 +01:00

42 lines
1.4 KiB
C++

#include "PtmeRateSetter.h"
#include "fsfw/serviceinterface/ServiceInterface.h"
PtmeRateSetter::PtmeRateSetter(object_id_t objectId, PtmeAxiConfig* ptmeAxiConfig)
: SystemObject(objectId), ptmeAxiConfig(ptmeAxiConfig) {}
PtmeRateSetter::~PtmeRateSetter() {}
ReturnValue_t PtmeRateSetter::initialize() {
if (ptmeAxiConfig == nullptr) {
sif::warning << "PtmeRateSetter::initialize: Invalid PtmeAxiConfig object" << std::endl;
return HasReturnvaluesIF::RETURN_FAILED;
}
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t PtmeRateSetter::setRate(BitRates rate) {
uint8_t rateVal = 0;
switch (rate) {
case RATE_2000KBPS:
rateVal = static_cast<uint8_t>(PtmeConfig::BIT_CLK_FREQ / 2000000 - 1);
break;
case RATE_1000KBPS:
rateVal = static_cast<uint8_t>(PtmeConfig::BIT_CLK_FREQ / 1000000 - 1);
break;
case RATE_500KBPS:
rateVal = static_cast<uint8_t>(PtmeConfig::BIT_CLK_FREQ / 500000 - 1);
break;
case RATE_200KBPS:
rateVal = static_cast<uint8_t>(PtmeConfig::BIT_CLK_FREQ / 200000 - 1);
break;
case RATE_100KBPS:
rateVal = static_cast<uint8_t>(PtmeConfig::BIT_CLK_FREQ / 100000 - 1);
break;
default:
sif::debug << "PtmeRateSetter::setRate: Unknown bit rate" << std::endl;
return HasReturnvaluesIF::RETURN_FAILED;
}
return ptmeAxiConfig->writeCaduRateReg(rateVal);
}