42 lines
1.4 KiB
C++
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);
|
|
}
|