fsfw/src/fsfw/pus/Service9TimeManagement.cpp

50 lines
1.5 KiB
C++
Raw Normal View History

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-02-02 10:29:30 +01:00
Service9TimeManagement::Service9TimeManagement(object_id_t objectId, uint16_t apid,
uint8_t serviceId)
: PusServiceBase(objectId, apid, serviceId) {}
2020-09-16 19:11:50 +02:00
Service9TimeManagement::~Service9TimeManagement() {}
2022-02-02 10:29:30 +01:00
ReturnValue_t Service9TimeManagement::performService() { return RETURN_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-19 18:13:25 +02:00
TimePacket timePacket(currentPacket.getUserData(), currentPacket.getUserDataSize());
2022-02-02 10:29:30 +01:00
ReturnValue_t result =
CCSDSTime::convertFromCcsds(&timeToSet, timePacket.getTime(), timePacket.getTimeSize());
if (result != RETURN_OK) {
triggerEvent(CLOCK_SET_FAILURE, result, 0);
return result;
}
uint32_t formerUptime;
Clock::getUptime(&formerUptime);
result = Clock::setClock(&timeToSet);
if (result == RETURN_OK) {
uint32_t newUptime;
Clock::getUptime(&newUptime);
triggerEvent(CLOCK_SET, newUptime, formerUptime);
return RETURN_OK;
} else {
triggerEvent(CLOCK_SET_FAILURE, result, 0);
return RETURN_FAILED;
}
2020-09-16 19:11:50 +02:00
}