2021-07-13 20:58:45 +02:00
|
|
|
#include "fsfw/pus/Service9TimeManagement.h"
|
2020-09-16 19:11:50 +02:00
|
|
|
|
2021-07-13 20:58:45 +02:00
|
|
|
#include "fsfw/events/EventManagerIF.h"
|
2022-02-02 10:29:30 +01:00
|
|
|
#include "fsfw/pus/servicepackets/Service9Packets.h"
|
2021-07-13 20:58:45 +02:00
|
|
|
#include "fsfw/serviceinterface/ServiceInterface.h"
|
2022-02-02 10:29:30 +01:00
|
|
|
#include "fsfw/timemanager/CCSDSTime.h"
|
2020-09-16 19:11:50 +02:00
|
|
|
|
2022-08-01 11:00:36 +02:00
|
|
|
Service9TimeManagement::Service9TimeManagement(PsbParams params) : PusServiceBase(params) {
|
|
|
|
params.name = "PUS 9 Time MGMT";
|
|
|
|
}
|
2020-09-16 19:11:50 +02:00
|
|
|
|
2022-07-20 22:21:15 +02:00
|
|
|
Service9TimeManagement::~Service9TimeManagement() = default;
|
2020-09-16 19:11:50 +02:00
|
|
|
|
2022-08-16 01:08:26 +02:00
|
|
|
ReturnValue_t Service9TimeManagement::performService() { return returnvalue::OK; }
|
2020-09-16 19:11:50 +02:00
|
|
|
|
|
|
|
ReturnValue_t Service9TimeManagement::handleRequest(uint8_t subservice) {
|
2022-02-02 10:29:30 +01:00
|
|
|
switch (subservice) {
|
|
|
|
case SUBSERVICE::SET_TIME: {
|
|
|
|
return setTime();
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
return AcceptsTelecommandsIF::INVALID_SUBSERVICE;
|
|
|
|
}
|
2020-09-16 19:11:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t Service9TimeManagement::setTime() {
|
2022-02-02 10:29:30 +01:00
|
|
|
Clock::TimeOfDay_t timeToSet;
|
2022-07-21 11:34:11 +02:00
|
|
|
TimePacket timePacket(currentPacket.getUserData(), currentPacket.getUserDataLen());
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t result =
|
|
|
|
CCSDSTime::convertFromCcsds(&timeToSet, timePacket.getTime(), timePacket.getTimeSize());
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result != returnvalue::OK) {
|
2022-02-02 10:29:30 +01:00
|
|
|
triggerEvent(CLOCK_SET_FAILURE, result, 0);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t formerUptime;
|
|
|
|
Clock::getUptime(&formerUptime);
|
|
|
|
result = Clock::setClock(&timeToSet);
|
|
|
|
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result == returnvalue::OK) {
|
2022-02-02 10:29:30 +01:00
|
|
|
uint32_t newUptime;
|
|
|
|
Clock::getUptime(&newUptime);
|
|
|
|
triggerEvent(CLOCK_SET, newUptime, formerUptime);
|
2022-08-16 01:08:26 +02:00
|
|
|
return returnvalue::OK;
|
2022-02-02 10:29:30 +01:00
|
|
|
} else {
|
|
|
|
triggerEvent(CLOCK_SET_FAILURE, result, 0);
|
2022-08-16 01:08:26 +02:00
|
|
|
return returnvalue::FAILED;
|
2022-02-02 10:29:30 +01:00
|
|
|
}
|
2020-09-16 19:11:50 +02:00
|
|
|
}
|