From f8f0032d1e50b41b43c8e1bae70f96e42e6d4def Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 3 Aug 2021 11:18:24 +0200 Subject: [PATCH] reboot feature finished --- bsp_q7s/core/CoreController.cpp | 30 ++++++++++++++++++++++++++++-- bsp_q7s/core/CoreController.h | 3 ++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/bsp_q7s/core/CoreController.cpp b/bsp_q7s/core/CoreController.cpp index 72171c65..69c234f5 100644 --- a/bsp_q7s/core/CoreController.cpp +++ b/bsp_q7s/core/CoreController.cpp @@ -159,8 +159,7 @@ ReturnValue_t CoreController::executeAction(ActionId_t actionId, MessageQueueId_ return actionListDirectoryIntoFile(actionId, commandedBy, data, size); } case(REBOOT_OBC): { - return HasReturnvaluesIF::RETURN_OK; - break; + return actionPerformReboot(data, size); } default: { return HasActionsIF::INVALID_ACTION_ID; @@ -457,6 +456,33 @@ void CoreController::initPrint() { #endif } +ReturnValue_t CoreController::actionPerformReboot(const uint8_t *data, size_t size) { + if(size < 1) { + return HasActionsIF::INVALID_PARAMETERS; + } + bool rebootSameBootCopy = data[0]; + if(rebootSameBootCopy) { + int result = std::system("xsc_boot_copy -r"); + if(result != 0) { + utility::handleSystemError(result, "CoreController::executeAction"); + return HasReturnvaluesIF::RETURN_FAILED; + } + return HasActionsIF::EXECUTION_FINISHED; + } + if(size < 3) { + return HasActionsIF::INVALID_PARAMETERS; + } + // The second byte in data is the target chip, the third byte is the target copy + std::string cmdString = "xsc_boot_copy " + std::to_string(data[1]) + + std::to_string(data[2]); + int result = std::system(cmdString.c_str()); + if(result != 0) { + utility::handleSystemError(result, "CoreController::executeAction"); + return HasReturnvaluesIF::RETURN_FAILED; + } + return HasActionsIF::EXECUTION_FINISHED; +} + void CoreController::performWatchdogControlOperation() { // Only perform each fifth iteration if(watchdogFifoFd != 0 and opDivider.checkAndIncrement()) { diff --git a/bsp_q7s/core/CoreController.h b/bsp_q7s/core/CoreController.h index 92b22dd4..4a71e6e7 100644 --- a/bsp_q7s/core/CoreController.h +++ b/bsp_q7s/core/CoreController.h @@ -24,7 +24,7 @@ public: }; static constexpr ActionId_t LIST_DIRECTORY_INTO_FILE = 0; - static constexpr ActionId_t REBOOT_OBC = 1; + static constexpr ActionId_t REBOOT_OBC = 32; static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::CORE; @@ -68,6 +68,7 @@ private: ReturnValue_t actionListDirectoryIntoFile(ActionId_t actionId, MessageQueueId_t commandedBy, const uint8_t *data, size_t size); + ReturnValue_t actionPerformReboot(const uint8_t *data, size_t size); void initPrint();