last know working cfg for slow downlink
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good

This commit is contained in:
2023-03-27 22:57:01 +02:00
parent 9613d4aa51
commit 534945cfec
4 changed files with 15 additions and 10 deletions

View File

@ -58,7 +58,7 @@ ReturnValue_t PapbVcInterface::pollPapbBusySignal(uint32_t maxPollRetries) const
gpio::Levels papbBusyState = gpio::Levels::LOW;
ReturnValue_t result;
uint32_t busyIdx = 0;
nextDelay.tv_nsec = 1000;
nextDelay.tv_nsec = 0;
while (true) {
/** Check if PAPB interface is ready to receive data */
@ -80,7 +80,9 @@ ReturnValue_t PapbVcInterface::pollPapbBusySignal(uint32_t maxPollRetries) const
// Ignore signal handling here for now.
nanosleep(&nextDelay, &remDelay);
// Adaptive delay.
if (nextDelay.tv_nsec * 2 <= MAX_DELAY_PAPB_POLLING_NS) {
if(nextDelay.tv_nsec == 0) {
nextDelay.tv_nsec = FIRST_NON_NULL_DELAY_NS;
} else if (nextDelay.tv_nsec * 2 <= MAX_DELAY_PAPB_POLLING_NS) {
nextDelay.tv_nsec *= 2;
}
}

View File

@ -76,6 +76,7 @@ class PapbVcInterface : public VirtualChannelIF {
*/
static const int DATA_REG_OFFSET = 256;
static constexpr long int FIRST_NON_NULL_DELAY_NS = 1000;
static constexpr long int MAX_DELAY_PAPB_POLLING_NS = 4000;
LinuxLibgpioIF* gpioComIF = nullptr;
@ -87,7 +88,7 @@ class PapbVcInterface : public VirtualChannelIF {
std::string uioFile;
int mapNum = 0;
mutable struct timespec nextDelay = {.tv_sec = 0, .tv_nsec = 1000};
mutable struct timespec nextDelay = {.tv_sec = 0, .tv_nsec = 0};
mutable struct timespec remDelay;
volatile uint32_t* vcBaseReg = nullptr;