Only reset PTME on rate change #716
@ -26,6 +26,11 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
|
|
||||||
- Empty dumps (no TM in time range) will now correctly be completed immediately
|
- Empty dumps (no TM in time range) will now correctly be completed immediately
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
- PTME was always reset on submode changes. The reset will now only be performed if the actual data
|
||||||
|
rate changes.
|
||||||
|
|
||||||
# [v5.1.0] 2023-06-28
|
# [v5.1.0] 2023-06-28
|
||||||
|
|
||||||
- `eive-tmtc` version v5.1.0
|
- `eive-tmtc` version v5.1.0
|
||||||
|
@ -16,9 +16,9 @@ AxiPtmeConfig::AxiPtmeConfig(object_id_t objectId, std::string axiUio, int mapNu
|
|||||||
AxiPtmeConfig::~AxiPtmeConfig() {}
|
AxiPtmeConfig::~AxiPtmeConfig() {}
|
||||||
|
|
||||||
ReturnValue_t AxiPtmeConfig::initialize() {
|
ReturnValue_t AxiPtmeConfig::initialize() {
|
||||||
ReturnValue_t result = returnvalue::OK;
|
|
||||||
UioMapper uioMapper(axiUio, mapNum);
|
UioMapper uioMapper(axiUio, mapNum);
|
||||||
result = uioMapper.getMappedAdress(&baseAddress, UioMapper::Permissions::READ_WRITE);
|
ReturnValue_t result =
|
||||||
|
uioMapper.getMappedAdress(&baseAddress, UioMapper::Permissions::READ_WRITE);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -26,8 +26,7 @@ ReturnValue_t AxiPtmeConfig::initialize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t AxiPtmeConfig::writeCaduRateReg(uint8_t rateVal) {
|
ReturnValue_t AxiPtmeConfig::writeCaduRateReg(uint8_t rateVal) {
|
||||||
ReturnValue_t result = returnvalue::OK;
|
ReturnValue_t result = mutex->lockMutex(timeoutType, mutexTimeout);
|
||||||
result = mutex->lockMutex(timeoutType, mutexTimeout);
|
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
sif::warning << "AxiPtmeConfig::writeCaduRateReg: Failed to lock mutex" << std::endl;
|
sif::warning << "AxiPtmeConfig::writeCaduRateReg: Failed to lock mutex" << std::endl;
|
||||||
return returnvalue::FAILED;
|
return returnvalue::FAILED;
|
||||||
@ -41,6 +40,11 @@ ReturnValue_t AxiPtmeConfig::writeCaduRateReg(uint8_t rateVal) {
|
|||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t AxiPtmeConfig::readCaduRateReg() {
|
||||||
|
MutexGuard mg(mutex);
|
||||||
|
return static_cast<uint8_t>(*(baseAddress + CADU_BITRATE_REG));
|
||||||
|
|||||||
|
}
|
||||||
|
|
||||||
void AxiPtmeConfig::enableTxclockManipulator() {
|
void AxiPtmeConfig::enableTxclockManipulator() {
|
||||||
writeBit(COMMON_CONFIG_REG, true, BitPos::EN_TX_CLK_MANIPULATOR);
|
writeBit(COMMON_CONFIG_REG, true, BitPos::EN_TX_CLK_MANIPULATOR);
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ class AxiPtmeConfig : public SystemObject {
|
|||||||
* frequency of the clock connected to the bit clock input of PTME.
|
* frequency of the clock connected to the bit clock input of PTME.
|
||||||
*/
|
*/
|
||||||
ReturnValue_t writeCaduRateReg(uint8_t rateVal);
|
ReturnValue_t writeCaduRateReg(uint8_t rateVal);
|
||||||
|
uint8_t readCaduRateReg();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Next to functions control the tx clock manipulator component
|
* @brief Next to functions control the tx clock manipulator component
|
||||||
|
@ -26,6 +26,11 @@ ReturnValue_t PtmeConfig::setRate(uint32_t bitRate) {
|
|||||||
return axiPtmeConfig->writeCaduRateReg(static_cast<uint8_t>(rateVal));
|
return axiPtmeConfig->writeCaduRateReg(static_cast<uint8_t>(rateVal));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t PtmeConfig::getRate() {
|
||||||
|
uint8_t rateReg = axiPtmeConfig->readCaduRateReg();
|
||||||
|
return (BIT_CLK_FREQ / (rateReg + 1));
|
||||||
|
}
|
||||||
|
|
||||||
void PtmeConfig::invertTxClock(bool invert) {
|
void PtmeConfig::invertTxClock(bool invert) {
|
||||||
if (invert) {
|
if (invert) {
|
||||||
axiPtmeConfig->enableTxclockInversion();
|
axiPtmeConfig->enableTxclockInversion();
|
||||||
|
@ -32,6 +32,7 @@ class PtmeConfig : public SystemObject {
|
|||||||
* of the CADU clock due to the convolutional code added by the s-Band transceiver.
|
* of the CADU clock due to the convolutional code added by the s-Band transceiver.
|
||||||
*/
|
*/
|
||||||
ReturnValue_t setRate(uint32_t bitRate);
|
ReturnValue_t setRate(uint32_t bitRate);
|
||||||
|
uint32_t getRate();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Will change the time the tx data signal is updated with respect to the tx clock
|
* @brief Will change the time the tx data signal is updated with respect to the tx clock
|
||||||
|
@ -246,7 +246,13 @@ ReturnValue_t CcsdsIpCoreHandler::checkModeCommand(Mode_t mode, Submode_t submod
|
|||||||
void CcsdsIpCoreHandler::startTransition(Mode_t mode, Submode_t submode) {
|
void CcsdsIpCoreHandler::startTransition(Mode_t mode, Submode_t submode) {
|
||||||
triggerEvent(CHANGING_MODE, mode, submode);
|
triggerEvent(CHANGING_MODE, mode, submode);
|
||||||
if (mode == HasModesIF::MODE_ON) {
|
if (mode == HasModesIF::MODE_ON) {
|
||||||
if (this->submode != submode) {
|
uint32_t currentRate = ptmeConfig.getRate();
|
||||||
|
// Check whether the rate actually changes.
|
||||||
|
if ((this->submode != submode) and
|
||||||
|
(((submode == static_cast<Submode_t>(com::CcsdsSubmode::DATARATE_LOW) and
|
||||||
|
(currentRate != RATE_100KBPS))) or
|
||||||
|
((submode == static_cast<Submode_t>(com::CcsdsSubmode::DATARATE_HIGH) and
|
||||||
|
(currentRate != RATE_500KBPS))))) {
|
||||||
initPtmeUpdateAfterXCycles();
|
initPtmeUpdateAfterXCycles();
|
||||||
updateContext.enableTransmitAfterPtmeUpdate = true;
|
updateContext.enableTransmitAfterPtmeUpdate = true;
|
||||||
updateContext.updateClockRate = true;
|
updateContext.updateClockRate = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user
but why
why indeed