diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b1c6de0..c387a4a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,10 +16,13 @@ will consitute of a breaking change warranting a new major release: # [unreleased] +# [v1.39.1] 2023-03-22 + ## Fixed - Bugfix for STR: Some action commands wrongfully declined. - STR: No normal command handling while a special request like an image upload is active. +- RS485 data line was not enabled when the transmitter was switched on. # [v1.39.0] 2023-03-21 diff --git a/CMakeLists.txt b/CMakeLists.txt index eca97197..8a966ea9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.13) set(OBSW_VERSION_MAJOR 1) set(OBSW_VERSION_MINOR 39) -set(OBSW_VERSION_REVISION 0) +set(OBSW_VERSION_REVISION 1) # set(CMAKE_VERBOSE TRUE) diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index 112b7995..d2d7708a 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -748,10 +748,13 @@ ReturnValue_t ObjectFactory::createCcsdsComponents(CcsdsComponentArgs& args) { gpioCookiePtmeIp->addGpio(gpioIds::VC3_PAPB_BUSY, gpio); gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_EMPTY_SIGNAL_VC3, "PAPB VC3"); gpioCookiePtmeIp->addGpio(gpioIds::VC3_PAPB_EMPTY, gpio); + // Initialise to low and then pull high to do a PTME reset, which puts the PTME in reset + // state. It will be put out of reset in the CCSDS handler initialize function. gpio = new GpiodRegularByLineName(q7s::gpioNames::PTME_RESETN, "PTME RESETN", - gpio::Direction::OUT, gpio::Levels::HIGH); + gpio::Direction::OUT, gpio::Levels::LOW); gpioCookiePtmeIp->addGpio(gpioIds::PTME_RESETN, gpio); gpioChecker(args.gpioComIF.addGpios(gpioCookiePtmeIp), "PTME PAPB VCs"); + // Creating virtual channel interfaces VirtualChannelIF* vc0 = new PapbVcInterface(&args.gpioComIF, gpioIds::VC0_PAPB_BUSY, gpioIds::VC0_PAPB_EMPTY, @@ -777,7 +780,7 @@ ReturnValue_t ObjectFactory::createCcsdsComponents(CcsdsComponentArgs& args) { PtmeGpios gpios; gpios.enableTxClock = gpioIds::RS485_EN_TX_CLOCK; - gpios.enableTxData = gpioIds::RS485_EN_TX_CLOCK; + gpios.enableTxData = gpioIds::RS485_EN_TX_DATA; gpios.ptmeResetn = gpioIds::PTME_RESETN; *args.ipCoreHandler = diff --git a/linux/devices/startracker/ArcsecDatalinkLayer.cpp b/linux/devices/startracker/ArcsecDatalinkLayer.cpp index c7f1144e..bc45d619 100644 --- a/linux/devices/startracker/ArcsecDatalinkLayer.cpp +++ b/linux/devices/startracker/ArcsecDatalinkLayer.cpp @@ -49,7 +49,7 @@ uint8_t ArcsecDatalinkLayer::getReplyFrameType() { return decodedFrame[0]; } const uint8_t* ArcsecDatalinkLayer::getReply() { return &decodedFrame[1]; } -void ArcsecDatalinkLayer::encodeFrame(const uinah uint32_t length) { +void ArcsecDatalinkLayer::encodeFrame(const uint8_t* data, uint32_t length) { arc_transport_encode_body(data, length, encBuffer, &encFrameSize); } diff --git a/mission/tmtc/CcsdsIpCoreHandler.cpp b/mission/tmtc/CcsdsIpCoreHandler.cpp index 85dfbbba..c9493f47 100644 --- a/mission/tmtc/CcsdsIpCoreHandler.cpp +++ b/mission/tmtc/CcsdsIpCoreHandler.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "eive/definitions.h" #include "fsfw/ipc/QueueFactory.h" @@ -38,7 +39,7 @@ ReturnValue_t CcsdsIpCoreHandler::performOperation(uint8_t operationCode) { } ReturnValue_t CcsdsIpCoreHandler::initialize() { - ReturnValue_t result = returnvalue::OK; + AcceptsTelecommandsIF* tcDistributor = ObjectManager::instance()->get(tcDestination); if (tcDistributor == nullptr) { @@ -50,7 +51,7 @@ ReturnValue_t CcsdsIpCoreHandler::initialize() { tcDistributorQueueId = tcDistributor->getRequestQueue(); - result = parameterHelper.initialize(); + ReturnValue_t result = parameterHelper.initialize(); if (result != returnvalue::OK) { return result; } @@ -70,6 +71,7 @@ ReturnValue_t CcsdsIpCoreHandler::initialize() { return ObjectManagerIF::CHILD_INIT_FAILED; } + // This also pulls the PTME out of reset state. if (batPriorityParam == 0) { disablePrioritySelectMode(); } else { @@ -266,7 +268,6 @@ void CcsdsIpCoreHandler::startTransition(Mode_t mode, Submode_t submode) { void CcsdsIpCoreHandler::announceMode(bool recursive) { triggerEvent(MODE_INFO, mode, submode); } void CcsdsIpCoreHandler::disableTransmit() { - ptmeConfig.enableBatPriorityBit(false); #ifndef TE0720_1CFA gpioIF->pullLow(ptmeGpios.enableTxClock); gpioIF->pullLow(ptmeGpios.enableTxData); @@ -296,6 +297,7 @@ void CcsdsIpCoreHandler::enablePrioritySelectMode() { ptmeConfig.enableBatPriorityBit(true); // Reset the PTME gpioIF->pullLow(ptmeGpios.ptmeResetn); + usleep(10); gpioIF->pullHigh(ptmeGpios.ptmeResetn); } @@ -303,6 +305,7 @@ void CcsdsIpCoreHandler::disablePrioritySelectMode() { ptmeConfig.enableBatPriorityBit(false); // Reset the PTME gpioIF->pullLow(ptmeGpios.ptmeResetn); + usleep(10); gpioIF->pullHigh(ptmeGpios.ptmeResetn); }