From 7e6c25901bb8d73cb23d74a13fe03d4eafeb6b8d Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 12 May 2023 09:13:02 +0200 Subject: [PATCH 01/23] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit c137df64ab43e5b20fcf26c8821982fa71e43cff Merge: a919b3d1 4179e8e1 Author: Robin Mueller Date: Fri Apr 28 15:38:52 2023 +0200 Merge remote-tracking branch 'origin/main' into update_ptme_code commit 4179e8e124b3f9f425ac64b7df8b7e7395982dbf Merge: 26f5eff6 51f9d5e1 Author: Robin Müller Date: Fri Apr 28 15:35:54 2023 +0200 Merge pull request 'This bugfix might be super important' (#621) from possible_bugfix_dual_lane_assy into main Reviewed-on: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/621 Reviewed-by: Marius Eggert Reviewed-by: Steffen Gaisser commit 51f9d5e1fe8e71445ec15b833020c4e30b254e72 Merge: a17f57cb 26f5eff6 Author: Robin Müller Date: Fri Apr 28 15:35:10 2023 +0200 Merge branch 'main' into possible_bugfix_dual_lane_assy commit a17f57cbb587f960366baae7059309d18619cdc4 Author: Robin Mueller Date: Fri Apr 28 15:34:45 2023 +0200 changelog commit 26f5eff6d5957e4898f6d5a84200e77b1bd6250c Merge: 4074e084 8a0f13ba Author: Robin Müller Date: Fri Apr 28 15:32:03 2023 +0200 Merge pull request 'More System Modes' (#612) from more-system-modes into main Reviewed-on: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/612 commit 8a0f13bafbb995b724321a3936a674078d01882f Merge: 14baa356 4074e084 Author: Robin Müller Date: Fri Apr 28 15:31:51 2023 +0200 Merge branch 'main' into more-system-modes commit 14baa3563c3dc6499bac49bb83c08ba98bfad171 Author: Robin Mueller Date: Fri Apr 28 15:30:09 2023 +0200 hello commit 7045b6034afdb819f4978f91f697d7f23806ab89 Author: Robin Mueller Date: Fri Apr 28 15:18:47 2023 +0200 changelog commit 37b9615525637294118266910979236127f8a8ce Author: Robin Mueller Date: Fri Apr 28 15:18:16 2023 +0200 changelog commit 4074e0848012042565047726b8c526c6b5809a2c Merge: 862a4f26 38686ac3 Author: Robin Müller Date: Fri Apr 28 15:12:46 2023 +0200 Merge pull request 'Adaption for EM: Add P60 dock without ACU' (#620) from adaption_em_p60_dock_without_acu into main Reviewed-on: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/620 Reviewed-by: Marius Eggert commit 23796345d966787f6f43c1d89b9555413bfe583a Author: Robin Mueller Date: Fri Apr 28 15:04:30 2023 +0200 changelog and stop payload tracking commit b10275ca43f13ee68be013c7ece3b63acf762130 Author: Robin Mueller Date: Fri Apr 28 14:28:05 2023 +0200 changelog commit 383849c5cb62b1543037ab07c904b2725c91be13 Author: Robin Mueller Date: Fri Apr 28 14:25:14 2023 +0200 that is more robust commit c66cef9129586e8708a8f2679ff86b3c9977c5f5 Author: Robin Mueller Date: Fri Apr 28 14:23:21 2023 +0200 changelog commit 02ea8a7298ff14c8acab55b2f693e8593c277624 Author: Robin Mueller Date: Fri Apr 28 14:22:21 2023 +0200 changelog commit 38686ac3f621e50ea76be023520167841d2e2c19 Merge: 189a3126 74d5d709 Author: Robin Mueller Date: Fri Apr 28 14:04:03 2023 +0200 Merge branch 'possible_bugfix_dual_lane_assy' into adaption_em_p60_dock_without_acu commit 74d5d70973b46c70d1483077e71e2820d3ca4ad6 Author: Robin Mueller Date: Fri Apr 28 13:58:08 2023 +0200 this bugfix might be super important commit 48355e82635b071b9347b62f2bd1da636bf4eae5 Merge: 5691fe8e 862a4f26 Author: Robin Müller Date: Fri Apr 28 10:25:50 2023 +0200 Merge branch 'main' into more-system-modes commit 189a312628e561f54491ec238a2d2d5e2f211b57 Merge: a1279428 862a4f26 Author: Robin Mueller Date: Fri Apr 28 10:23:46 2023 +0200 Merge remote-tracking branch 'origin/main' into adaption_em_p60_dock_without_acu commit a12794281bfc2ebb27a02bbc151696023e69a9f0 Author: Robin Mueller Date: Fri Apr 28 10:20:31 2023 +0200 changelog commit fcaabb4e421b5f792ede490b6dd135ce661c9db5 Merge: 6c326489 4aafca64 Author: Robin Mueller Date: Fri Apr 28 10:20:02 2023 +0200 Merge remote-tracking branch 'origin/main' into adaption_em_p60_dock_without_acu commit 6c326489cbc59f2d70993542f05676472ca0102f Author: Robin Mueller Date: Fri Apr 28 10:18:46 2023 +0200 adapt EM SW: GS PCDU added, but use dummy for ACU commit 862a4f268510e04fc3cfb878b5eed9f0f9d62f05 Merge: 4aafca64 2daca272 Author: Robin Müller Date: Fri Apr 28 09:37:55 2023 +0200 Merge pull request 'Host SW bugfixes' (#618) from try_fix_host_obsw into main Reviewed-on: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/618 Reviewed-by: Marius Eggert commit 5691fe8e72a2e3b008d6130f31be32d9d7aee9b7 Merge: 097be17a 4aafca64 Author: meggert Date: Thu Apr 27 15:40:31 2023 +0200 Merge branch 'main' into more-system-modes commit 2daca272f8f0397125349c0f6c193e22d0a26383 Author: Robin Mueller Date: Thu Apr 27 11:29:18 2023 +0200 changelog commit 03762f962020b55188d445ee3dd429b6e1a32135 Author: Robin Mueller Date: Wed Apr 26 17:38:06 2023 +0200 lower live TM handler frequency commit a296f16e5ce9d803ce5db54d9602e396dad7ebce Author: Robin Mueller Date: Wed Apr 26 17:36:38 2023 +0200 host SW works properly again commit 83f07a6e16cbbf5fc4a9ccb2e7d92c3fdffb172b Author: Robin Mueller Date: Wed Apr 26 17:26:32 2023 +0200 configurable event manager queue depth commit 00dab64628a53d2109fceb5f9a4ffc765a72fab6 Merge: 641b8e84 4aafca64 Author: Robin Mueller Date: Wed Apr 26 17:03:35 2023 +0200 Merge remote-tracking branch 'origin/main' into try_fix_host_obsw commit 4aafca64a67589826f1578865c92fa76141e8531 Merge: f271242d 6901eae8 Author: Robin Müller Date: Wed Apr 26 17:03:01 2023 +0200 Merge pull request 'EM adaptions' (#619) from em_adaptions into main Reviewed-on: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/619 commit 6901eae81689981937e7eb49b98886f8c78b727b Merge: 7d630ebc f271242d Author: Robin Mueller Date: Wed Apr 26 17:02:24 2023 +0200 Merge remote-tracking branch 'origin/main' into em_adaptions commit 7d630ebcf3894a9a9896d1c3f05548d5ef230333 Author: Robin Mueller Date: Wed Apr 26 17:00:04 2023 +0200 EM adaptions commit 641b8e847d2b63ad11f28c4a37434a6161443690 Author: Robin Mueller Date: Wed Apr 26 16:41:40 2023 +0200 add back tm funnel handler for hosted build commit 13142686823bedee1a79ae5f851f124968822a54 Author: Robin Mueller Date: Wed Apr 26 16:23:50 2023 +0200 host build requires dedicated live TM task.. commit 4040304ef09a172f9d2bef42547d6b1effb8ca76 Author: Robin Mueller Date: Wed Apr 26 13:15:42 2023 +0200 this is annoying commit a919b3d1645d5c4a6e20903d973ce96424508cae Merge: e22f2a53 9672d6d6 Author: Robin Mueller Date: Wed Apr 26 11:11:30 2023 +0200 Merge remote-tracking branch 'origin/develop' into update_ptme_code commit 9672d6d6cca3ad7369bb4b06fd91a7f17a0f9db9 Author: Robin Mueller Date: Wed Apr 26 11:11:09 2023 +0200 changelog commit e22f2a53ea7388cc5c75c2024953aab293c8d277 Merge: b076e80b 0eb6b7cc Author: Robin Mueller Date: Wed Apr 26 11:05:58 2023 +0200 Merge remote-tracking branch 'origin/develop' into update_ptme_code commit b076e80b44e7ef2b2417def66ec1f1a684cfb228 Author: Robin Mueller Date: Wed Apr 26 11:04:10 2023 +0200 changelog commit 269aa6f7b0006125e9a516f8ecb6cdc32c91cbe5 Author: Robin Mueller Date: Wed Apr 26 11:03:42 2023 +0200 changelog commit caae2b4ba925747aa0ed1e2112582c6deff39d77 Author: Robin Mueller Date: Wed Apr 26 11:02:24 2023 +0200 update PTME code commit 097be17a2900e64021fcbb457c89d6d4756ab697 Author: meggert Date: Wed Apr 19 15:07:21 2023 +0200 added remaining acs modes as system modes --- CHANGELOG.md | 11 +++++++++ bsp_q7s/boardconfig/busConf.h | 6 ++--- bsp_q7s/core/ObjectFactory.cpp | 28 +++++++---------------- common/config/devices/gpioIds.h | 5 ---- linux/ipcore/PapbVcInterface.cpp | 39 +++++++++++++++----------------- linux/ipcore/PapbVcInterface.h | 11 ++++----- 6 files changed, 43 insertions(+), 57 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc320982..45bddbd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,16 @@ will consitute of a breaking change warranting a new major release: # [v2.2.0] to be released +TODO: New firmware package version. + +## Changed + +- Removed PTME busy/ready signals. Those were not used anyway because register reads are used now. + +## Fixed + +- Important bugfixes for PTME. See `q7s-package` CHANGELOG. + # [v2.1.0] to be released ## Changed @@ -49,6 +59,7 @@ will consitute of a breaking change warranting a new major release: # [v2.0.5] 2023-05-11 + - The dual lane assembly transition failed handler started new transitions towards the current mode instead of the target mode. This means that if the dual lane assembly never reached the initial submode (e.g. mode normal and submode dual side), it will transition back to the current mode, diff --git a/bsp_q7s/boardconfig/busConf.h b/bsp_q7s/boardconfig/busConf.h index 4fd15258..304113d2 100644 --- a/bsp_q7s/boardconfig/busConf.h +++ b/bsp_q7s/boardconfig/busConf.h @@ -82,14 +82,12 @@ static constexpr char EN_RW_4[] = "enable_rw_4"; static constexpr char RAD_SENSOR_CHIP_SELECT[] = "rad_sensor_chip_select"; static constexpr char ENABLE_RADFET[] = "enable_radfet"; -static constexpr char PAPB_BUSY_SIGNAL_VC0[] = "papb_busy_signal_vc0"; + static constexpr char PAPB_EMPTY_SIGNAL_VC0[] = "papb_empty_signal_vc0"; -static constexpr char PAPB_BUSY_SIGNAL_VC1[] = "papb_busy_signal_vc1"; static constexpr char PAPB_EMPTY_SIGNAL_VC1[] = "papb_empty_signal_vc1"; -static constexpr char PAPB_BUSY_SIGNAL_VC2[] = "papb_busy_signal_vc2"; static constexpr char PAPB_EMPTY_SIGNAL_VC2[] = "papb_empty_signal_vc2"; -static constexpr char PAPB_BUSY_SIGNAL_VC3[] = "papb_busy_signal_vc3"; static constexpr char PAPB_EMPTY_SIGNAL_VC3[] = "papb_empty_signal_vc3"; + static constexpr char PTME_RESETN[] = "ptme_resetn"; static constexpr char RS485_EN_TX_CLOCK[] = "tx_clock_enable_ltc2872"; diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index 12e9177f..24ea22f8 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -729,20 +729,12 @@ ReturnValue_t ObjectFactory::createCcsdsComponents(CcsdsComponentArgs& args) { // GPIO definitions of signals connected to the virtual channel interfaces of the PTME IP Core GpioCookie* gpioCookiePtmeIp = new GpioCookie; GpiodRegularByLineName* gpio = nullptr; - gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_BUSY_SIGNAL_VC0, "PAPB VC0"); - gpioCookiePtmeIp->addGpio(gpioIds::VC0_PAPB_BUSY, gpio); gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_EMPTY_SIGNAL_VC0, "PAPB VC0"); gpioCookiePtmeIp->addGpio(gpioIds::VC0_PAPB_EMPTY, gpio); - gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_BUSY_SIGNAL_VC1, "PAPB VC1"); - gpioCookiePtmeIp->addGpio(gpioIds::VC1_PAPB_BUSY, gpio); gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_EMPTY_SIGNAL_VC1, "PAPB VC1"); gpioCookiePtmeIp->addGpio(gpioIds::VC1_PAPB_EMPTY, gpio); - gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_BUSY_SIGNAL_VC2, "PAPB VC2"); - gpioCookiePtmeIp->addGpio(gpioIds::VC2_PAPB_BUSY, gpio); gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_EMPTY_SIGNAL_VC2, "PAPB VC2"); gpioCookiePtmeIp->addGpio(gpioIds::VC2_PAPB_EMPTY, gpio); - gpio = new GpiodRegularByLineName(q7s::gpioNames::PAPB_BUSY_SIGNAL_VC3, "PAPB VC3"); - 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); gpio = new GpiodRegularByLineName(q7s::gpioNames::PTME_RESETN, "PTME RESETN", @@ -751,18 +743,14 @@ ReturnValue_t ObjectFactory::createCcsdsComponents(CcsdsComponentArgs& args) { 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, - q7s::UIO_PTME, q7s::uiomapids::PTME_VC0); - VirtualChannelIF* vc1 = - new PapbVcInterface(&args.gpioComIF, gpioIds::VC1_PAPB_BUSY, gpioIds::VC1_PAPB_EMPTY, - q7s::UIO_PTME, q7s::uiomapids::PTME_VC1); - VirtualChannelIF* vc2 = - new PapbVcInterface(&args.gpioComIF, gpioIds::VC2_PAPB_BUSY, gpioIds::VC2_PAPB_EMPTY, - q7s::UIO_PTME, q7s::uiomapids::PTME_VC2); - VirtualChannelIF* vc3 = - new PapbVcInterface(&args.gpioComIF, gpioIds::VC3_PAPB_BUSY, gpioIds::VC3_PAPB_EMPTY, - q7s::UIO_PTME, q7s::uiomapids::PTME_VC3); + VirtualChannelIF* vc0 = new PapbVcInterface(&args.gpioComIF, gpioIds::VC0_PAPB_EMPTY, + q7s::UIO_PTME, q7s::uiomapids::PTME_VC0); + VirtualChannelIF* vc1 = new PapbVcInterface(&args.gpioComIF, gpioIds::VC1_PAPB_EMPTY, + q7s::UIO_PTME, q7s::uiomapids::PTME_VC1); + VirtualChannelIF* vc2 = new PapbVcInterface(&args.gpioComIF, gpioIds::VC2_PAPB_EMPTY, + q7s::UIO_PTME, q7s::uiomapids::PTME_VC2); + VirtualChannelIF* vc3 = new PapbVcInterface(&args.gpioComIF, gpioIds::VC3_PAPB_EMPTY, + q7s::UIO_PTME, q7s::uiomapids::PTME_VC3); // Creating ptme object and adding virtual channel interfaces Ptme* ptme = new Ptme(objects::PTME); ptme->addVcInterface(ccsds::VC0, vc0); diff --git a/common/config/devices/gpioIds.h b/common/config/devices/gpioIds.h index 640f4ead..573327fa 100644 --- a/common/config/devices/gpioIds.h +++ b/common/config/devices/gpioIds.h @@ -93,15 +93,10 @@ enum gpioId_t { EN_RW_CS, SPI_MUX, - VC0_PAPB_EMPTY, - VC0_PAPB_BUSY, VC1_PAPB_EMPTY, - VC1_PAPB_BUSY, VC2_PAPB_EMPTY, - VC2_PAPB_BUSY, VC3_PAPB_EMPTY, - VC3_PAPB_BUSY, PTME_RESETN, PDEC_RESET, diff --git a/linux/ipcore/PapbVcInterface.cpp b/linux/ipcore/PapbVcInterface.cpp index 60968cc6..7a1a89e4 100644 --- a/linux/ipcore/PapbVcInterface.cpp +++ b/linux/ipcore/PapbVcInterface.cpp @@ -7,13 +7,9 @@ #include "fsfw/serviceinterface/ServiceInterface.h" -PapbVcInterface::PapbVcInterface(LinuxLibgpioIF* gpioComIF, gpioId_t papbBusyId, - gpioId_t papbEmptyId, std::string uioFile, int mapNum) - : gpioComIF(gpioComIF), - papbBusyId(papbBusyId), - papbEmptyId(papbEmptyId), - uioFile(std::move(uioFile)), - mapNum(mapNum) {} +PapbVcInterface::PapbVcInterface(LinuxLibgpioIF* gpioComIF, gpioId_t papbEmptyId, + std::string uioFile, int mapNum) + : gpioComIF(gpioComIF), papbEmptyId(papbEmptyId), uioFile(std::move(uioFile)), mapNum(mapNum) {} PapbVcInterface::~PapbVcInterface() {} @@ -99,7 +95,7 @@ void PapbVcInterface::startPacketTransfer(ByteWidthCfg initWidth) { void PapbVcInterface::completePacketTransfer() { *vcBaseReg = CONFIG_END; } ReturnValue_t PapbVcInterface::pollInterfaceReadiness(uint32_t maxPollRetries, - bool checkReadyState) const { + bool checkReadyForPacketState) const { uint32_t busyIdx = 0; nextDelay.tv_nsec = FIRST_DELAY_PAPB_POLLING_NS; @@ -108,13 +104,16 @@ ReturnValue_t PapbVcInterface::pollInterfaceReadiness(uint32_t maxPollRetries, // Bit 5, see PTME ptme_001_01-0-7-r2 Table 31. uint32_t reg = *vcBaseReg; bool busy = (reg >> 5) & 0b1; - bool ready = (reg >> 6) & 0b1; - if (not busy) { + bool readyForPacket = (reg >> 6) & 0b1; + if (checkReadyForPacketState) { + if (not busy and readyForPacket) { + return returnvalue::OK; + } else if (not busy and not readyForPacket) { + return PAPB_BUSY; + } + } else if (not busy) { return returnvalue::OK; } - if (checkReadyState and not ready) { - return PAPB_BUSY; - } busyIdx++; if (busyIdx >= maxPollRetries) { @@ -131,24 +130,22 @@ ReturnValue_t PapbVcInterface::pollInterfaceReadiness(uint32_t maxPollRetries, return returnvalue::OK; } -void PapbVcInterface::isVcInterfaceBufferEmpty() { +bool PapbVcInterface::isVcInterfaceBufferEmpty() { ReturnValue_t result = returnvalue::OK; gpio::Levels papbEmptyState = gpio::Levels::HIGH; result = gpioComIF->readGpio(papbEmptyId, papbEmptyState); if (result != returnvalue::OK) { - sif::warning << "PapbVcInterface::isVcInterfaceBufferEmpty: Failed to read papb empty signal" - << std::endl; - return; + sif::error << "PapbVcInterface::isVcInterfaceBufferEmpty: Failed to read papb empty signal" + << std::endl; + return true; } if (papbEmptyState == gpio::Levels::HIGH) { - sif::debug << "PapbVcInterface::isVcInterfaceBufferEmpty: Buffer is empty" << std::endl; - } else { - sif::debug << "PapbVcInterface::isVcInterfaceBufferEmpty: Buffer is not empty" << std::endl; + return true; } - return; + return false; } bool PapbVcInterface::isBusy() const { return pollInterfaceReadiness(0, true) == PAPB_BUSY; } diff --git a/linux/ipcore/PapbVcInterface.h b/linux/ipcore/PapbVcInterface.h index e54def5d..71dd143b 100644 --- a/linux/ipcore/PapbVcInterface.h +++ b/linux/ipcore/PapbVcInterface.h @@ -30,8 +30,7 @@ class PapbVcInterface : public VirtualChannelIF { * @param uioFile UIO file providing access to the PAPB bus * @param mapNum Map number of UIO map associated with this virtual channel */ - PapbVcInterface(LinuxLibgpioIF* gpioComIF, gpioId_t papbBusyId, gpioId_t papbEmptyId, - std::string uioFile, int mapNum); + PapbVcInterface(LinuxLibgpioIF* gpioComIF, gpioId_t papbEmptyId, std::string uioFile, int mapNum); virtual ~PapbVcInterface(); bool isBusy() const override; @@ -83,9 +82,6 @@ class PapbVcInterface : public VirtualChannelIF { static constexpr long int MAX_DELAY_PAPB_POLLING_NS = 40; LinuxLibgpioIF* gpioComIF = nullptr; - - /** Pulled to low when virtual channel not ready to receive data */ - gpioId_t papbBusyId = gpio::NO_GPIO; /** High when external buffer memory of virtual channel is empty */ gpioId_t papbEmptyId = gpio::NO_GPIO; @@ -120,13 +116,14 @@ class PapbVcInterface : public VirtualChannelIF { * * @return returnvalue::OK when ready to receive data else PAPB_BUSY. */ - inline ReturnValue_t pollInterfaceReadiness(uint32_t maxPollRetries, bool checkReadyState) const; + inline ReturnValue_t pollInterfaceReadiness(uint32_t maxPollRetries, + bool checkReadyForPacketState) const; /** * @brief This function can be used for debugging to check whether there are packets in * the packet buffer of the virtual channel or not. */ - void isVcInterfaceBufferEmpty(); + bool isVcInterfaceBufferEmpty(); /** * @brief This function sends a complete telemetry transfer frame data field (1105 bytes) From 3d7d01d6abc3cce17c9cee2280209aa94fb81d87 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 15 May 2023 16:17:08 +0200 Subject: [PATCH 02/23] bump tmtc --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 0c1bfc6f..280c7243 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 0c1bfc6fd32e66fe0da13bebc4eeb3030ead13a9 +Subproject commit 280c72439effa1b4290dc500dade2c62a9d6e3f7 From a615ed2d21cb7543249ecae2ecb3f7fb84dfd138 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 15 May 2023 16:18:44 +0200 Subject: [PATCH 03/23] bump fsfw --- fsfw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsfw b/fsfw index 5eb9ee8b..4391823f 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 5eb9ee8bc1e6f8640cbea46febd11e4b92241881 +Subproject commit 4391823f01d792bcc078d47b60f7df7624f8cbe4 From 97a7087827e0430085fd5ff398a86a31c6c8dc34 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 15 May 2023 16:45:14 +0200 Subject: [PATCH 04/23] bump tmtc --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 280c7243..5f379bf2 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 280c72439effa1b4290dc500dade2c62a9d6e3f7 +Subproject commit 5f379bf2bb76f5cc65e9ca58036a4b239d8638b8 From 8b467ec69e301690b1087968451bdcd61fb7c8be Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 16 May 2023 11:36:19 +0200 Subject: [PATCH 05/23] dock hk improvements --- mission/power/P60DockHandler.cpp | 4 +++- mission/power/gsDefs.h | 3 ++- tmtc | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/mission/power/P60DockHandler.cpp b/mission/power/P60DockHandler.cpp index d643aef1..77fd9aaf 100644 --- a/mission/power/P60DockHandler.cpp +++ b/mission/power/P60DockHandler.cpp @@ -66,7 +66,7 @@ void P60DockHandler::parseHkTableReply(const uint8_t *packet) { } coreHk.battMode = newBattMode; - auxHk.heaterOn = *(packet + 0x57); + auxHk.heaterForBp4PackOn = *(packet + 0x57); auxHk.converter5VStatus = *(packet + 0x58); for (uint8_t idx = 0; idx < hk::CHNLS_LEN; idx++) { @@ -111,6 +111,8 @@ void P60DockHandler::parseHkTableReply(const uint8_t *packet) { } coreHk.setValidity(true, true); auxHk.setValidity(true, true); + // No BP4 pack, no this is always invalid. + auxHk.heaterForBp4PackOn.setValid(false); } ReturnValue_t P60DockHandler::initializeLocalDataPool(localpool::DataPool &localDataPoolMap, diff --git a/mission/power/gsDefs.h b/mission/power/gsDefs.h index d42cabd2..bbe9911f 100644 --- a/mission/power/gsDefs.h +++ b/mission/power/gsDefs.h @@ -260,7 +260,8 @@ class HkTableDataset : public StaticLocalDataSet<32> { lp_var_t resetcause = lp_var_t(sid.objectId, pool::P60DOCK_RESETCAUSE, this); /** Battery heater control only possible on BP4 packs */ - lp_var_t heaterOn = lp_var_t(sid.objectId, pool::P60DOCK_HEATER_ON, this); + lp_var_t heaterForBp4PackOn = + lp_var_t(sid.objectId, pool::P60DOCK_HEATER_ON, this); lp_var_t converter5VStatus = lp_var_t(sid.objectId, pool::P60DOCK_CONV_5V_ENABLE_STATUS, this); diff --git a/tmtc b/tmtc index 0c1bfc6f..280c7243 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 0c1bfc6fd32e66fe0da13bebc4eeb3030ead13a9 +Subproject commit 280c72439effa1b4290dc500dade2c62a9d6e3f7 From 2543cdf5b7b67ea97af31704a2fff7d241312ba2 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 22 May 2023 11:44:42 +0200 Subject: [PATCH 06/23] changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8841cd0c..3ab6a184 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,12 @@ will consitute of a breaking change warranting a new major release: # [v2.2.0] to be released +- eive-tmtc: v4.0.0 (to be released) + +## Fixed + +- CFDP low level protocol bugfix. Requires fsfw update and tmtc update. + # [v2.1.0] to be released ## Changed From 722247598598a1cdb3a7ee2e8607009ab5c43202 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 23 May 2023 19:18:42 +0200 Subject: [PATCH 07/23] changelog, remove unnecessary logic --- CHANGELOG.md | 3 +++ mission/com/TmStoreTaskBase.cpp | 8 +------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f36fc3aa..4073d7fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,9 @@ TODO: New firmware package version. - Disable missed deadlines per default. Not useful in orbit, and triggers all the time on the EM build after a number of subsequent runs, without any apparent reason (deadlines are not actually missed, thread usage displayed is nominal) +- TM store dumpes will not be cancelled anymore if the transmitter is off. The dump can be cancelled + with an OFF command, and the PTME is perfectly capable of dumping without the transmitter being + on. ## Added diff --git a/mission/com/TmStoreTaskBase.cpp b/mission/com/TmStoreTaskBase.cpp index 6598225d..5efb40bf 100644 --- a/mission/com/TmStoreTaskBase.cpp +++ b/mission/com/TmStoreTaskBase.cpp @@ -39,6 +39,7 @@ bool TmStoreTaskBase::handleOneStore(PersistentTmStoreWithTmQueue& store, } // Dump TMs if (store.getState() == PersistentTmStore::State::DUMPING) { + sif::debug << "handling dump" << std::endl; if (handleOneDump(store, dumpContext, dumpPerformed) != returnvalue::OK) { return result; } @@ -94,13 +95,6 @@ void TmStoreTaskBase::cancelDump(DumpContext& ctx, PersistentTmStore& store, boo ReturnValue_t TmStoreTaskBase::handleOneDump(PersistentTmStoreWithTmQueue& store, DumpContext& dumpContext, bool& dumpPerformed) { ReturnValue_t result = returnvalue::OK; - // The PTME might have been reset an transmitter state change, so there is no point in continuing - // the dump. - // TODO: Will be solved in a cleaner way, this is kind of a hack. - if (not channel.isTxOn()) { - cancelDump(dumpContext, store, false); - return returnvalue::FAILED; - } // It is assumed that the PTME will only be locked for a short period (e.g. to change datarate). if (not channel.isBusy() and not ptmeLocked) { performDump(store, dumpContext, dumpPerformed); From 50327fb6148d25b1e8fb28a692a3cc5e72767b0d Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 23 May 2023 19:44:06 +0200 Subject: [PATCH 08/23] get rid of the printouts and of the delay --- mission/com/PersistentLogTmStoreTask.cpp | 2 +- mission/com/PersistentSingleTmStoreTask.cpp | 2 +- mission/com/TmStoreTaskBase.cpp | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/mission/com/PersistentLogTmStoreTask.cpp b/mission/com/PersistentLogTmStoreTask.cpp index 77f2bb7d..0d47e50f 100644 --- a/mission/com/PersistentLogTmStoreTask.cpp +++ b/mission/com/PersistentLogTmStoreTask.cpp @@ -48,7 +48,7 @@ ReturnValue_t PersistentLogTmStoreTask::performOperation(uint8_t opCode) { } else { // TODO: Would be best to remove this, but not delaying here can lead to evil issues. // Polling the PAPB of the PTME core too often leads to scheuduling issues. - TaskFactory::delayTask(2); + // TaskFactory::delayTask(2); } } } diff --git a/mission/com/PersistentSingleTmStoreTask.cpp b/mission/com/PersistentSingleTmStoreTask.cpp index 1b77365b..2afc8e31 100644 --- a/mission/com/PersistentSingleTmStoreTask.cpp +++ b/mission/com/PersistentSingleTmStoreTask.cpp @@ -30,7 +30,7 @@ ReturnValue_t PersistentSingleTmStoreTask::performOperation(uint8_t opCode) { } else { // TODO: Would be best to remove this, but not delaying here can lead to evil issues. // Polling the PAPB of the PTME core too often leads to scheuduling issues. - TaskFactory::delayTask(2); + // TaskFactory::delayTask(2); } } } diff --git a/mission/com/TmStoreTaskBase.cpp b/mission/com/TmStoreTaskBase.cpp index f7257f23..2158cf2a 100644 --- a/mission/com/TmStoreTaskBase.cpp +++ b/mission/com/TmStoreTaskBase.cpp @@ -39,7 +39,6 @@ bool TmStoreTaskBase::handleOneStore(PersistentTmStoreWithTmQueue& store, } // Dump TMs if (store.getState() == PersistentTmStore::State::DUMPING) { - sif::debug << "handling dump" << std::endl; if (handleOneDump(store, dumpContext, dumpPerformed) != returnvalue::OK) { return result; } From 9c78362ac534b8f665c72b97f4a64a29b5368553 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Sat, 27 May 2023 17:00:41 +0200 Subject: [PATCH 09/23] use read write permissions for uio --- linux/ipcore/PapbVcInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/ipcore/PapbVcInterface.cpp b/linux/ipcore/PapbVcInterface.cpp index 7a1a89e4..bf1f48bb 100644 --- a/linux/ipcore/PapbVcInterface.cpp +++ b/linux/ipcore/PapbVcInterface.cpp @@ -16,7 +16,7 @@ PapbVcInterface::~PapbVcInterface() {} ReturnValue_t PapbVcInterface::initialize() { UioMapper uioMapper(uioFile, mapNum); ReturnValue_t result = uioMapper.getMappedAdress(const_cast(&vcBaseReg), - UioMapper::Permissions::WRITE_ONLY); + UioMapper::Permissions::READ_WRITE); if (result != returnvalue::OK) { return result; } From 9921522ce0c1ec36e2faea7e9584cd7c7390b61b Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 30 May 2023 19:06:59 +0200 Subject: [PATCH 10/23] working, remove some old unrequired code --- mission/com/PersistentLogTmStoreTask.cpp | 6 ------ mission/com/PersistentSingleTmStoreTask.cpp | 6 ------ 2 files changed, 12 deletions(-) diff --git a/mission/com/PersistentLogTmStoreTask.cpp b/mission/com/PersistentLogTmStoreTask.cpp index 0d47e50f..28545457 100644 --- a/mission/com/PersistentLogTmStoreTask.cpp +++ b/mission/com/PersistentLogTmStoreTask.cpp @@ -42,13 +42,7 @@ ReturnValue_t PersistentLogTmStoreTask::performOperation(uint8_t opCode) { if (not someonesBusy) { TaskFactory::delayTask(100); } else if (vcBusyDuringDump) { - // TODO: Might not be necessary - sif::debug << "VC busy, delaying" << std::endl; TaskFactory::delayTask(10); - } else { - // TODO: Would be best to remove this, but not delaying here can lead to evil issues. - // Polling the PAPB of the PTME core too often leads to scheuduling issues. - // TaskFactory::delayTask(2); } } } diff --git a/mission/com/PersistentSingleTmStoreTask.cpp b/mission/com/PersistentSingleTmStoreTask.cpp index 2afc8e31..d6f43289 100644 --- a/mission/com/PersistentSingleTmStoreTask.cpp +++ b/mission/com/PersistentSingleTmStoreTask.cpp @@ -24,13 +24,7 @@ ReturnValue_t PersistentSingleTmStoreTask::performOperation(uint8_t opCode) { if (not busy) { TaskFactory::delayTask(100); } else if (dumpContext.vcBusyDuringDump) { - sif::debug << "VC busy, delaying" << std::endl; - // TODO: Might not be necessary TaskFactory::delayTask(10); - } else { - // TODO: Would be best to remove this, but not delaying here can lead to evil issues. - // Polling the PAPB of the PTME core too often leads to scheuduling issues. - // TaskFactory::delayTask(2); } } } From ddcdc38310b1ea0a2f247cb3472f8a29bf0ec0bc Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 30 May 2023 19:22:23 +0200 Subject: [PATCH 11/23] try to get rid of the nanosleep --- linux/ipcore/PapbVcInterface.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/linux/ipcore/PapbVcInterface.cpp b/linux/ipcore/PapbVcInterface.cpp index bf1f48bb..97eb9954 100644 --- a/linux/ipcore/PapbVcInterface.cpp +++ b/linux/ipcore/PapbVcInterface.cpp @@ -65,12 +65,6 @@ ReturnValue_t PapbVcInterface::write(const uint8_t* data, size_t size) { // idx += 4; // } for (size_t idx = 0; idx < size; idx++) { - // This delay is super-important, DO NOT REMOVE! - // Polling the GPIO or the config register too often messes up the scheduler. - // TODO: Maybe this should not be done like this. It would be better if there was a custom - // FPGA module which can accept packets and then takes care of dumping that packet into - // the PTME. DMA would be an ideal solution for this. - nanosleep(&BETWEEN_POLL_DELAY, &remDelay); if (pollInterfaceReadiness(2, false) == returnvalue::OK) { *(vcBaseReg + DATA_REG_OFFSET) = static_cast(data[idx]); } else { @@ -78,7 +72,6 @@ ReturnValue_t PapbVcInterface::write(const uint8_t* data, size_t size) { return returnvalue::FAILED; } } - nanosleep(&BETWEEN_POLL_DELAY, &remDelay); if (pollInterfaceReadiness(2, false) == returnvalue::OK) { completePacketTransfer(); } else { From 0b06bc4c8b286046190e055876644fe6aa384693 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 31 May 2023 11:52:45 +0200 Subject: [PATCH 12/23] bump major version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eaa2d340..26bcbd80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ # ############################################################################## cmake_minimum_required(VERSION 3.13) -set(OBSW_VERSION_MAJOR 3) +set(OBSW_VERSION_MAJOR 4) set(OBSW_VERSION_MINOR 0) set(OBSW_VERSION_REVISION 0) From 8113a71c79b94ae7b72ff6d5cc4d26715d7ce497 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 31 May 2023 14:15:54 +0200 Subject: [PATCH 13/23] PAPB VC simplification --- linux/ipcore/PapbVcInterface.cpp | 93 ++++++++++++++++---------------- linux/ipcore/PapbVcInterface.h | 3 +- 2 files changed, 47 insertions(+), 49 deletions(-) diff --git a/linux/ipcore/PapbVcInterface.cpp b/linux/ipcore/PapbVcInterface.cpp index 97eb9954..1920e932 100644 --- a/linux/ipcore/PapbVcInterface.cpp +++ b/linux/ipcore/PapbVcInterface.cpp @@ -28,7 +28,7 @@ ReturnValue_t PapbVcInterface::write(const uint8_t* data, size_t size) { if (size < 4) { return returnvalue::FAILED; } - if (pollInterfaceReadiness(0, true) == returnvalue::OK) { + if (not pollReadyForPacket()) { startPacketTransfer(ByteWidthCfg::ONE); } else { return DirectTmSinkIF::IS_BUSY; @@ -65,19 +65,19 @@ ReturnValue_t PapbVcInterface::write(const uint8_t* data, size_t size) { // idx += 4; // } for (size_t idx = 0; idx < size; idx++) { - if (pollInterfaceReadiness(2, false) == returnvalue::OK) { - *(vcBaseReg + DATA_REG_OFFSET) = static_cast(data[idx]); - } else { - abortPacketTransfer(); - return returnvalue::FAILED; - } - } - if (pollInterfaceReadiness(2, false) == returnvalue::OK) { - completePacketTransfer(); - } else { - abortPacketTransfer(); - return returnvalue::FAILED; + // if (pollInterfaceReadiness(2, false) == returnvalue::OK) { + *(vcBaseReg + DATA_REG_OFFSET) = static_cast(data[idx]); + //} else { + // abortPacketTransfer(); + // return returnvalue::FAILED; + //} } + // if (pollInterfaceReadiness(2, false) == returnvalue::OK) { + completePacketTransfer(); + //} else { + // abortPacketTransfer(); + // return returnvalue::FAILED; + //} return returnvalue::OK; } @@ -87,40 +87,39 @@ void PapbVcInterface::startPacketTransfer(ByteWidthCfg initWidth) { void PapbVcInterface::completePacketTransfer() { *vcBaseReg = CONFIG_END; } -ReturnValue_t PapbVcInterface::pollInterfaceReadiness(uint32_t maxPollRetries, - bool checkReadyForPacketState) const { - uint32_t busyIdx = 0; - nextDelay.tv_nsec = FIRST_DELAY_PAPB_POLLING_NS; +bool PapbVcInterface::pollReadyForPacket() const { + // uint32_t busyIdx = 0; + // nextDelay.tv_nsec = FIRST_DELAY_PAPB_POLLING_NS; - while (true) { - // Check if PAPB interface is ready to receive data. Use the configuration register for this. - // Bit 5, see PTME ptme_001_01-0-7-r2 Table 31. - uint32_t reg = *vcBaseReg; - bool busy = (reg >> 5) & 0b1; - bool readyForPacket = (reg >> 6) & 0b1; - if (checkReadyForPacketState) { - if (not busy and readyForPacket) { - return returnvalue::OK; - } else if (not busy and not readyForPacket) { - return PAPB_BUSY; - } - } else if (not busy) { - return returnvalue::OK; - } - - busyIdx++; - if (busyIdx >= maxPollRetries) { - return PAPB_BUSY; - } - - // Ignore signal handling here for now. - nanosleep(&nextDelay, &remDelay); - // Adaptive delay. - if (nextDelay.tv_nsec * 2 <= MAX_DELAY_PAPB_POLLING_NS) { - nextDelay.tv_nsec *= 2; - } - } - return returnvalue::OK; + // while (true) { + // Check if PAPB interface is ready to receive data. Use the configuration register for this. + // Bit 5, see PTME ptme_001_01-0-7-r2 Table 31. + uint32_t reg = *vcBaseReg; + // bool busy = (reg >> 5) & 0b1; + return (reg >> 6) & 0b1; + // if (checkReadyForPacketState) { + // if (not busy and readyForPacket) { + // return returnvalue::OK; + // } else if (not busy and not readyForPacket) { + // return PAPB_BUSY; + // } + // } else if (not busy) { + // return returnvalue::OK; + // } + // + // busyIdx++; + // if (busyIdx >= maxPollRetries) { + // return PAPB_BUSY; + // } + // + // // Ignore signal handling here for now. + // nanosleep(&nextDelay, &remDelay); + // // Adaptive delay. + // if (nextDelay.tv_nsec * 2 <= MAX_DELAY_PAPB_POLLING_NS) { + // nextDelay.tv_nsec *= 2; + // } + // } + // return returnvalue::OK; } bool PapbVcInterface::isVcInterfaceBufferEmpty() { @@ -141,7 +140,7 @@ bool PapbVcInterface::isVcInterfaceBufferEmpty() { return false; } -bool PapbVcInterface::isBusy() const { return pollInterfaceReadiness(0, true) == PAPB_BUSY; } +bool PapbVcInterface::isBusy() const { return not pollReadyForPacket(); } void PapbVcInterface::cancelTransfer() { abortPacketTransfer(); } diff --git a/linux/ipcore/PapbVcInterface.h b/linux/ipcore/PapbVcInterface.h index 71dd143b..ba6063b5 100644 --- a/linux/ipcore/PapbVcInterface.h +++ b/linux/ipcore/PapbVcInterface.h @@ -116,8 +116,7 @@ class PapbVcInterface : public VirtualChannelIF { * * @return returnvalue::OK when ready to receive data else PAPB_BUSY. */ - inline ReturnValue_t pollInterfaceReadiness(uint32_t maxPollRetries, - bool checkReadyForPacketState) const; + inline bool pollReadyForPacket() const; /** * @brief This function can be used for debugging to check whether there are packets in From 442b1c94a62781f8f08f0a2fb1ec21426f09c1dc Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 31 May 2023 15:02:11 +0200 Subject: [PATCH 14/23] small fix --- linux/ipcore/PapbVcInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/ipcore/PapbVcInterface.cpp b/linux/ipcore/PapbVcInterface.cpp index 1920e932..fbc13fc5 100644 --- a/linux/ipcore/PapbVcInterface.cpp +++ b/linux/ipcore/PapbVcInterface.cpp @@ -28,7 +28,7 @@ ReturnValue_t PapbVcInterface::write(const uint8_t* data, size_t size) { if (size < 4) { return returnvalue::FAILED; } - if (not pollReadyForPacket()) { + if (pollReadyForPacket()) { startPacketTransfer(ByteWidthCfg::ONE); } else { return DirectTmSinkIF::IS_BUSY; From 998110dea41ef042681134aec5c49e6de9cfad87 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 31 May 2023 16:10:52 +0200 Subject: [PATCH 15/23] back to somethng simple --- linux/ipcore/PapbVcInterface.cpp | 67 -------------------------------- 1 file changed, 67 deletions(-) diff --git a/linux/ipcore/PapbVcInterface.cpp b/linux/ipcore/PapbVcInterface.cpp index fbc13fc5..404f3653 100644 --- a/linux/ipcore/PapbVcInterface.cpp +++ b/linux/ipcore/PapbVcInterface.cpp @@ -33,51 +33,11 @@ ReturnValue_t PapbVcInterface::write(const uint8_t* data, size_t size) { } else { return DirectTmSinkIF::IS_BUSY; } - // TODO: This should work but does not.. :( - // size_t idx = 0; - // while (idx < size) { - // - // nanosleep(&BETWEEN_POLL_DELAY, &remDelay); - // if ((size - idx) < 4) { - // *vcBaseReg = CONFIG_DATA_INPUT | (size - idx - 1); - // usleep(1); - // } - // if (pollPapbBusySignal(2) == returnvalue::OK) { - // // vcBaseReg + DATA_REG_OFFSET + 3 = static_cast(data + idx); - // // vcBaseReg + DATA_REG_OFFSET + 2 = static_cast(data + idx + 1); - // // vcBaseReg + DATA_REG_OFFSET + 1 = static_cast(data + idx + 2); - // // vcBaseReg + DATA_REG_OFFSET = static_cast(data + idx + 3); - // - // // std::memcpy((vcBaseReg + DATA_REG_OFFSET), data + idx , nextWriteSize); - // *(vcBaseReg + DATA_REG_OFFSET) = *reinterpret_cast(data + idx); - // //uint8_t* byteReg = reinterpret_cast(vcBaseReg + DATA_REG_OFFSET); - // - // //byteReg[0] = data[idx]; - // //byteReg[1] = data[idx]; - // } else { - // abortPacketTransfer(); - // return returnvalue::FAILED; - // } - // // TODO: Change this after the bugfix. Right now, the PAPB ignores the content of the byte - // // width configuration.5 - // // It's okay to increment by a larger amount for the last segment here, loop will be over - // // in any case. - // idx += 4; - // } for (size_t idx = 0; idx < size; idx++) { // if (pollInterfaceReadiness(2, false) == returnvalue::OK) { *(vcBaseReg + DATA_REG_OFFSET) = static_cast(data[idx]); - //} else { - // abortPacketTransfer(); - // return returnvalue::FAILED; - //} } - // if (pollInterfaceReadiness(2, false) == returnvalue::OK) { completePacketTransfer(); - //} else { - // abortPacketTransfer(); - // return returnvalue::FAILED; - //} return returnvalue::OK; } @@ -88,38 +48,11 @@ void PapbVcInterface::startPacketTransfer(ByteWidthCfg initWidth) { void PapbVcInterface::completePacketTransfer() { *vcBaseReg = CONFIG_END; } bool PapbVcInterface::pollReadyForPacket() const { - // uint32_t busyIdx = 0; - // nextDelay.tv_nsec = FIRST_DELAY_PAPB_POLLING_NS; - - // while (true) { // Check if PAPB interface is ready to receive data. Use the configuration register for this. // Bit 5, see PTME ptme_001_01-0-7-r2 Table 31. uint32_t reg = *vcBaseReg; // bool busy = (reg >> 5) & 0b1; return (reg >> 6) & 0b1; - // if (checkReadyForPacketState) { - // if (not busy and readyForPacket) { - // return returnvalue::OK; - // } else if (not busy and not readyForPacket) { - // return PAPB_BUSY; - // } - // } else if (not busy) { - // return returnvalue::OK; - // } - // - // busyIdx++; - // if (busyIdx >= maxPollRetries) { - // return PAPB_BUSY; - // } - // - // // Ignore signal handling here for now. - // nanosleep(&nextDelay, &remDelay); - // // Adaptive delay. - // if (nextDelay.tv_nsec * 2 <= MAX_DELAY_PAPB_POLLING_NS) { - // nextDelay.tv_nsec *= 2; - // } - // } - // return returnvalue::OK; } bool PapbVcInterface::isVcInterfaceBufferEmpty() { From a85b0a4a762c173d942d701e9185237601dd4ed6 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 31 May 2023 16:31:50 +0200 Subject: [PATCH 16/23] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffce15e8..87083265 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ TODO: New firmware package version. ## Changed - Removed PTME busy/ready signals. Those were not used anyway because register reads are used now. +- APB bus access busy checking is not done anymore as this is performed by the bus itself now. # [v3.0.0] to be released From b8064c4a39971b63b445d5b15ea106d71e54146d Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 7 Jun 2023 13:50:11 +0200 Subject: [PATCH 17/23] bump fsfw --- fsfw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsfw b/fsfw index 4391823f..9372b2a5 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 4391823f01d792bcc078d47b60f7df7624f8cbe4 +Subproject commit 9372b2a575aaa3a2c9e93d6e745a4e3fd08d0004 From cf48a187335dbccf1e5b962efaa3ae8e563ec39f Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 9 Jun 2023 18:12:32 +0200 Subject: [PATCH 18/23] bump fsfw --- fsfw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsfw b/fsfw index 9372b2a5..5322de05 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 9372b2a575aaa3a2c9e93d6e745a4e3fd08d0004 +Subproject commit 5322de059916efcf874b10ccc766b46e53d2470b From 8da5f4dd44c98b31a88e0210b7181f59f4a78685 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 15 Jun 2023 08:39:06 +0200 Subject: [PATCH 19/23] add PS I2C resetn --- bsp_q7s/boardconfig/busConf.h | 1 + bsp_q7s/core/ObjectFactory.cpp | 17 +++++++++++++++++ bsp_q7s/core/ObjectFactory.h | 1 + bsp_q7s/em/emObjectFactory.cpp | 1 + bsp_q7s/fmObjectFactory.cpp | 1 + common/config/devices/gpioIds.h | 2 ++ tmtc | 2 +- 7 files changed, 24 insertions(+), 1 deletion(-) diff --git a/bsp_q7s/boardconfig/busConf.h b/bsp_q7s/boardconfig/busConf.h index 304113d2..d5fcd8c3 100644 --- a/bsp_q7s/boardconfig/busConf.h +++ b/bsp_q7s/boardconfig/busConf.h @@ -57,6 +57,7 @@ static constexpr char GYRO_0_ENABLE[] = "enable_gyro_0"; static constexpr char GYRO_2_ENABLE[] = "enable_gyro_2"; static constexpr char GNSS_SELECT[] = "gnss_mux_select"; static constexpr char GNSS_MUX_SELECT[] = "gnss_mux_select"; +static constexpr char PL_I2C_ARESETN[] = "pl_i2c_aresetn"; static constexpr char HEATER_0[] = "heater0"; static constexpr char HEATER_1[] = "heater1"; diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index 6e1bffdf..54084089 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -1013,3 +1014,19 @@ void ObjectFactory::createRadSensorChipSelect(LinuxLibgpioIF* gpioIF) { gpioCookieRadSensor->addGpio(gpioIds::ENABLE_RADFET, gpio); gpioChecker(gpioIF->addGpios(gpioCookieRadSensor), "RAD sensor"); } + +void ObjectFactory::createPlI2cResetGpio(LinuxLibgpioIF* gpioIF) { + using namespace gpio; + if (gpioIF == nullptr) { + return; + } + GpioCookie* gpioI2cResetnCookie = new GpioCookie; + GpiodRegularByLineName* gpioI2cResetn = new GpiodRegularByLineName( + q7s::gpioNames::PL_I2C_ARESETN, "PL_I2C_ARESETN", Direction::OUT, Levels::HIGH); + gpioI2cResetnCookie->addGpio(gpioIds::PL_I2C_ARESETN, gpioI2cResetn); + gpioChecker(gpioIF->addGpios(gpioI2cResetnCookie), "PL I2C ARESETN"); + // Reset I2C explicitely again. + gpioIF->pullLow(gpioIds::PL_I2C_ARESETN); + TaskFactory::delayTask(1); + gpioIF->pullHigh(gpioIds::PL_I2C_ARESETN); +} diff --git a/bsp_q7s/core/ObjectFactory.h b/bsp_q7s/core/ObjectFactory.h index df65e1ae..a2edec4c 100644 --- a/bsp_q7s/core/ObjectFactory.h +++ b/bsp_q7s/core/ObjectFactory.h @@ -78,6 +78,7 @@ ReturnValue_t createCcsdsComponents(CcsdsComponentArgs& args); void createMiscComponents(); void createTestComponents(LinuxLibgpioIF* gpioComIF); +void createPlI2cResetGpio(LinuxLibgpioIF* gpioComIF); void testAcsBrdAss(AcsBoardAssembly* assAss); diff --git a/bsp_q7s/em/emObjectFactory.cpp b/bsp_q7s/em/emObjectFactory.cpp index 5270e887..464b3398 100644 --- a/bsp_q7s/em/emObjectFactory.cpp +++ b/bsp_q7s/em/emObjectFactory.cpp @@ -47,6 +47,7 @@ void ObjectFactory::produce(void* args) { /* Adding gpios for chip select decoding to the gpioComIf */ q7s::gpioCallbacks::initSpiCsDecoder(gpioComIF); gpioCallbacks::disableAllDecoder(gpioComIF); + createPlI2cResetGpio(gpioComIF); // Hardware is usually not connected to EM, so we need to create dummies which replace lower // level components. diff --git a/bsp_q7s/fmObjectFactory.cpp b/bsp_q7s/fmObjectFactory.cpp index 5eeeef59..413e5648 100644 --- a/bsp_q7s/fmObjectFactory.cpp +++ b/bsp_q7s/fmObjectFactory.cpp @@ -45,6 +45,7 @@ void ObjectFactory::produce(void* args) { /* Adding gpios for chip select decoding to the gpioComIf */ q7s::gpioCallbacks::initSpiCsDecoder(gpioComIF); gpioCallbacks::disableAllDecoder(gpioComIF); + createPlI2cResetGpio(gpioComIF); new CoreController(objects::CORE_CONTROLLER, enableHkSets); createPcduComponents(gpioComIF, &pwrSwitcher, enableHkSets); diff --git a/common/config/devices/gpioIds.h b/common/config/devices/gpioIds.h index 573327fa..bed82142 100644 --- a/common/config/devices/gpioIds.h +++ b/common/config/devices/gpioIds.h @@ -77,6 +77,8 @@ enum gpioId_t { CS_RAD_SENSOR, ENABLE_RADFET, + PL_I2C_ARESETN, + PAPB_BUSY_N, PAPB_EMPTY, diff --git a/tmtc b/tmtc index 29fc7a5f..936dcdf3 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 29fc7a5fca197abe44d8bbba6b0db3af2744f01c +Subproject commit 936dcdf334c2258d2256373cd4995b2574202a59 From 40eae48a1a4254adc8a31094296e23163356aa41 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 15 Jun 2023 09:51:34 +0200 Subject: [PATCH 20/23] changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7be5b210..e35ba24d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,11 @@ TODO: New firmware package version. - Removed PTME busy/ready signals. Those were not used anyway because register reads are used now. - APB bus access busy checking is not done anymore as this is performed by the bus itself now. +## Added + +- Added PL I2C reset pin. It is not used for now but could be used for FDIR procedures to restore + the PL I2C. + # [v3.1.1] 2023-06-14 ## Fixed From 456ee156c3964ca655038c1c50409ec423a5f24d Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 15 Jun 2023 10:02:12 +0200 Subject: [PATCH 21/23] finally have a firmware version --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e35ba24d..06b3e38c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ will consitute of a breaking change warranting a new major release: # [v4.0.0] to be released - `eive-tmtc` version v4.0.0 -TODO: New firmware package version. +- `q7s-package` version v3.0.0 ## Fixed From 9c0744ae026107af390e077be2ca7d0008b9ebcb Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Sat, 17 Jun 2023 12:24:54 +0200 Subject: [PATCH 22/23] minor improvements --- fsfw | 2 +- mission/cfdp/CfdpHandler.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fsfw b/fsfw index 0a977ea6..74602d11 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 0a977ea688cd78585aabb9ba511eaf8030452712 +Subproject commit 74602d113c4e61caa30739226c66d02f48c611a4 diff --git a/mission/cfdp/CfdpHandler.cpp b/mission/cfdp/CfdpHandler.cpp index baf501e4..fa35535c 100644 --- a/mission/cfdp/CfdpHandler.cpp +++ b/mission/cfdp/CfdpHandler.cpp @@ -93,7 +93,8 @@ ReturnValue_t CfdpHandler::handleCfdpPacket(TmTcMessage& msg) { return INVALID_PDU_FORMAT; } if (not FileDirectiveReader::checkFileDirective(pduDataField[0])) { - sif::error << "CfdpHandler: Invalid PDU directive field " << pduDataField[0] << std::endl; + sif::error << "CfdpHandler: Invalid PDU directive field " << static_cast(pduDataField[0]) + << std::endl; return INVALID_DIRECTIVE_FIELD; } auto directive = static_cast(pduDataField[0]); From 2d4a3c0ee260657236cc96d542e9b033b4829196 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 21 Jun 2023 19:01:44 +0200 Subject: [PATCH 23/23] new FW info event --- bsp_hosted/fsfwconfig/events/translateEvents.cpp | 7 +++++-- .../fsfwconfig/objects/translateObjects.cpp | 2 +- bsp_q7s/boardconfig/busConf.h | 1 + bsp_q7s/core/CoreController.cpp | 15 +++++++++++++++ bsp_q7s/core/CoreController.h | 2 ++ generators/bsp_hosted_events.csv | 1 + generators/bsp_q7s_events.csv | 1 + generators/events/translateEvents.cpp | 7 +++++-- generators/objects/translateObjects.cpp | 2 +- linux/fsfwconfig/events/translateEvents.cpp | 7 +++++-- linux/fsfwconfig/objects/translateObjects.cpp | 2 +- mission/sysDefs.h | 6 ++++++ tmtc | 2 +- 13 files changed, 45 insertions(+), 10 deletions(-) diff --git a/bsp_hosted/fsfwconfig/events/translateEvents.cpp b/bsp_hosted/fsfwconfig/events/translateEvents.cpp index 9a93fe4c..1500301f 100644 --- a/bsp_hosted/fsfwconfig/events/translateEvents.cpp +++ b/bsp_hosted/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 295 translations. + * @brief Auto-generated event translation file. Contains 296 translations. * @details - * Generated on: 2023-05-17 17:15:34 + * Generated on: 2023-06-21 19:01:02 */ #include "translateEvents.h" @@ -277,6 +277,7 @@ const char *INDIVIDUAL_BOOT_COUNTS_STRING = "INDIVIDUAL_BOOT_COUNTS"; const char *TRYING_I2C_RECOVERY_STRING = "TRYING_I2C_RECOVERY"; const char *I2C_REBOOT_STRING = "I2C_REBOOT"; const char *PDEC_REBOOT_STRING = "PDEC_REBOOT"; +const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO"; const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE"; const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE"; const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING"; @@ -847,6 +848,8 @@ const char *translateEvents(Event event) { return I2C_REBOOT_STRING; case (14012): return PDEC_REBOOT_STRING; + case (14013): + return FIRMWARE_INFO_STRING; case (14100): return NO_VALID_SENSOR_TEMPERATURE_STRING; case (14101): diff --git a/bsp_hosted/fsfwconfig/objects/translateObjects.cpp b/bsp_hosted/fsfwconfig/objects/translateObjects.cpp index 34edfa41..d1d0464c 100644 --- a/bsp_hosted/fsfwconfig/objects/translateObjects.cpp +++ b/bsp_hosted/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 171 translations. - * Generated on: 2023-05-17 17:15:34 + * Generated on: 2023-06-21 19:01:02 */ #include "translateObjects.h" diff --git a/bsp_q7s/boardconfig/busConf.h b/bsp_q7s/boardconfig/busConf.h index d5fcd8c3..146386c4 100644 --- a/bsp_q7s/boardconfig/busConf.h +++ b/bsp_q7s/boardconfig/busConf.h @@ -23,6 +23,7 @@ static constexpr char UART_SCEX_DEV[] = "/dev/scex"; static constexpr char UIO_PDEC_REGISTERS[] = "/dev/uio_pdec_regs"; static constexpr char UIO_PTME[] = "/dev/uio_ptme"; static constexpr char UIO_PDEC_CONFIG_MEMORY[] = "/dev/uio_pdec_cfg_mem"; +static constexpr char UIO_SYS_ROM[] = "/dev/uio_sys_rom"; static constexpr char UIO_PDEC_RAM[] = "/dev/uio_pdec_ram"; static constexpr char UIO_PDEC_IRQ[] = "/dev/uio_pdec_irq"; static constexpr int MAP_ID_PTME_CONFIG = 3; diff --git a/bsp_q7s/core/CoreController.cpp b/bsp_q7s/core/CoreController.cpp index 76460aa5..0128d961 100644 --- a/bsp_q7s/core/CoreController.cpp +++ b/bsp_q7s/core/CoreController.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "commonConfig.h" #include "fsfw/serviceinterface/ServiceInterface.h" @@ -22,6 +23,7 @@ #include #include +#include "bsp_q7s/boardconfig/busConf.h" #include "bsp_q7s/fs/SdCardManager.h" #include "bsp_q7s/memory/scratchApi.h" #include "bsp_q7s/xadc/Xadc.h" @@ -185,6 +187,14 @@ ReturnValue_t CoreController::initialize() { if (result != returnvalue::OK) { sif::warning << "Subscribing for GPS GPS_FIX_CHANGE event failed" << std::endl; } + + UioMapper sysRomMapper(q7s::UIO_SYS_ROM); + result = sysRomMapper.getMappedAdress(&mappedSysRomAddr, UioMapper::Permissions::READ_ONLY); + if (result != returnvalue::OK) { + // TODO: This might be a reason to switch to another image.. + sif::error << "Getting mapped SYS ROM UIO address failed" << std::endl; + return ObjectManager::CHILD_INIT_FAILED; + } return returnvalue::OK; } @@ -223,6 +233,11 @@ ReturnValue_t CoreController::executeAction(ActionId_t actionId, MessageQueueId_ } triggerEvent(VERSION_INFO, p1, p2); + if (mappedSysRomAddr != nullptr) { + uint32_t p1Firmware = *(reinterpret_cast(mappedSysRomAddr)); + uint32_t p2Firmware = *(reinterpret_cast(mappedSysRomAddr) + 1); + triggerEvent(FIRMWARE_INFO, p1Firmware, p2Firmware); + } return HasActionsIF::EXECUTION_FINISHED; } case (ANNOUNCE_BOOT_COUNTS): { diff --git a/bsp_q7s/core/CoreController.h b/bsp_q7s/core/CoreController.h index 05878d6d..6703e398 100644 --- a/bsp_q7s/core/CoreController.h +++ b/bsp_q7s/core/CoreController.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -142,6 +143,7 @@ class CoreController : public ExtendedControllerBase, public ReceivesParameterMe static constexpr bool BLOCKING_SD_INIT = false; + uint32_t* mappedSysRomAddr = nullptr; SdCardManager* sdcMan = nullptr; MessageQueueIF* eventQueue = nullptr; diff --git a/generators/bsp_hosted_events.csv b/generators/bsp_hosted_events.csv index 9dc26e07..17592d1d 100644 --- a/generators/bsp_hosted_events.csv +++ b/generators/bsp_hosted_events.csv @@ -271,6 +271,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 14010;0x36ba;TRYING_I2C_RECOVERY;HIGH;I2C is unavailable. Trying recovery of I2C bus by power cycling all I2C devices.;mission/sysDefs.h 14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h 14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h +14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h 14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h 14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h 14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index 9dc26e07..17592d1d 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -271,6 +271,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 14010;0x36ba;TRYING_I2C_RECOVERY;HIGH;I2C is unavailable. Trying recovery of I2C bus by power cycling all I2C devices.;mission/sysDefs.h 14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h 14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h +14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h 14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h 14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h 14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index 9a93fe4c..1500301f 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 295 translations. + * @brief Auto-generated event translation file. Contains 296 translations. * @details - * Generated on: 2023-05-17 17:15:34 + * Generated on: 2023-06-21 19:01:02 */ #include "translateEvents.h" @@ -277,6 +277,7 @@ const char *INDIVIDUAL_BOOT_COUNTS_STRING = "INDIVIDUAL_BOOT_COUNTS"; const char *TRYING_I2C_RECOVERY_STRING = "TRYING_I2C_RECOVERY"; const char *I2C_REBOOT_STRING = "I2C_REBOOT"; const char *PDEC_REBOOT_STRING = "PDEC_REBOOT"; +const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO"; const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE"; const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE"; const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING"; @@ -847,6 +848,8 @@ const char *translateEvents(Event event) { return I2C_REBOOT_STRING; case (14012): return PDEC_REBOOT_STRING; + case (14013): + return FIRMWARE_INFO_STRING; case (14100): return NO_VALID_SENSOR_TEMPERATURE_STRING; case (14101): diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index eb2125b4..1ecd5e71 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 175 translations. - * Generated on: 2023-05-17 17:15:34 + * Generated on: 2023-06-21 19:01:02 */ #include "translateObjects.h" diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index 9a93fe4c..1500301f 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 295 translations. + * @brief Auto-generated event translation file. Contains 296 translations. * @details - * Generated on: 2023-05-17 17:15:34 + * Generated on: 2023-06-21 19:01:02 */ #include "translateEvents.h" @@ -277,6 +277,7 @@ const char *INDIVIDUAL_BOOT_COUNTS_STRING = "INDIVIDUAL_BOOT_COUNTS"; const char *TRYING_I2C_RECOVERY_STRING = "TRYING_I2C_RECOVERY"; const char *I2C_REBOOT_STRING = "I2C_REBOOT"; const char *PDEC_REBOOT_STRING = "PDEC_REBOOT"; +const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO"; const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE"; const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE"; const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING"; @@ -847,6 +848,8 @@ const char *translateEvents(Event event) { return I2C_REBOOT_STRING; case (14012): return PDEC_REBOOT_STRING; + case (14013): + return FIRMWARE_INFO_STRING; case (14100): return NO_VALID_SENSOR_TEMPERATURE_STRING; case (14101): diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index eb2125b4..1ecd5e71 100644 --- a/linux/fsfwconfig/objects/translateObjects.cpp +++ b/linux/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 175 translations. - * Generated on: 2023-05-17 17:15:34 + * Generated on: 2023-06-21 19:01:02 */ #include "translateObjects.h" diff --git a/mission/sysDefs.h b/mission/sysDefs.h index c84c237f..41c7d43d 100644 --- a/mission/sysDefs.h +++ b/mission/sysDefs.h @@ -44,6 +44,8 @@ static constexpr char VERSION_FILE_NAME[] = "version.txt"; static constexpr char REBOOT_FILE_NAME[] = "reboot.txt"; static constexpr char TIME_FILE_NAME[] = "time_backup.txt"; +static constexpr uint32_t SYS_ROM_BASE_ADDR = 0x80000000; + static constexpr ActionId_t ANNOUNCE_VERSION = 1; static constexpr ActionId_t ANNOUNCE_CURRENT_IMAGE = 2; static constexpr ActionId_t ANNOUNCE_BOOT_COUNTS = 3; @@ -113,6 +115,10 @@ static constexpr Event TRYING_I2C_RECOVERY = event::makeEvent(SUBSYSTEM_ID, 10, static constexpr Event I2C_REBOOT = event::makeEvent(SUBSYSTEM_ID, 11, severity::HIGH); //! [EXPORT] : [COMMENT] PDEC recovery through reset was not possible, performing full reboot. static constexpr Event PDEC_REBOOT = event::makeEvent(SUBSYSTEM_ID, 12, severity::HIGH); +//! [EXPORT] : [COMMENT] Version information of the firmware (not OBSW). +//! P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash +//! P2: First four letters of Git SHA is the last byte of P1 is set. +static constexpr Event FIRMWARE_INFO = event::makeEvent(SUBSYSTEM_ID, 13, severity::INFO); class ListDirectoryCmdBase { public: // TODO: Packet definition for clean deserialization diff --git a/tmtc b/tmtc index 5f44cb96..1bb8bea8 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 5f44cb96be1e5b7f1a49571b6420fa85d6bc847a +Subproject commit 1bb8bea8d92fef2c9ec58ea657b04b56635c16dd