1
0
forked from fsfw/fsfw

renormalized line endings

This commit is contained in:
2020-08-28 18:33:29 +02:00
parent 9abd796e6f
commit 1b9c8446b7
381 changed files with 38723 additions and 38723 deletions

View File

@ -1,95 +1,95 @@
#ifndef PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_
#define PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_
#include "../returnvalues/HasReturnvaluesIF.h"
#include "../objectmanager/SystemObjectIF.h"
#include "../parameters/HasParametersIF.h"
#include "../storagemanager/StorageManagerIF.h"
#include "../timemanager/Clock.h"
class TmPacketInformation;
class TmPacketMinimal;
class SpacePacketBase;
class ApidSsc;
class TmStoreBackendIF : public HasParametersIF {
public:
static const uint8_t INTERFACE_ID = CLASS_ID::TM_STORE_BACKEND_IF;
static const ReturnValue_t BUSY = MAKE_RETURN_CODE(1);
static const ReturnValue_t FULL = MAKE_RETURN_CODE(2);
static const ReturnValue_t EMPTY = MAKE_RETURN_CODE(3);
static const ReturnValue_t NULL_REQUESTED = MAKE_RETURN_CODE(4);
static const ReturnValue_t TOO_LARGE = MAKE_RETURN_CODE(5);
static const ReturnValue_t NOT_READY = MAKE_RETURN_CODE(6);
static const ReturnValue_t DUMP_ERROR = MAKE_RETURN_CODE(7);
static const ReturnValue_t CRC_ERROR = MAKE_RETURN_CODE(8);
static const ReturnValue_t TIMEOUT = MAKE_RETURN_CODE(9);
static const ReturnValue_t IDLE_PACKET_FOUND = MAKE_RETURN_CODE(10);
static const ReturnValue_t TELECOMMAND_FOUND = MAKE_RETURN_CODE(11);
static const ReturnValue_t NO_PUS_A_TM = MAKE_RETURN_CODE(12);
static const ReturnValue_t TOO_SMALL = MAKE_RETURN_CODE(13);
static const ReturnValue_t BLOCK_NOT_FOUND = MAKE_RETURN_CODE(14);
static const ReturnValue_t INVALID_REQUEST = MAKE_RETURN_CODE(15);
static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::MEMORY;
static const Event STORE_SEND_WRITE_FAILED = MAKE_EVENT(0, SEVERITY::LOW); //!< Initiating sending data to store failed. Low, par1: returnCode, par2: integer (debug info)
static const Event STORE_WRITE_FAILED = MAKE_EVENT(1, SEVERITY::LOW); //!< Data was sent, but writing failed. Low, par1: returnCode, par2: 0
static const Event STORE_SEND_READ_FAILED = MAKE_EVENT(2, SEVERITY::LOW); //!< Initiating reading data from store failed. Low, par1: returnCode, par2: 0
static const Event STORE_READ_FAILED = MAKE_EVENT(3, SEVERITY::LOW); //!< Data was requested, but access failed. Low, par1: returnCode, par2: 0
static const Event UNEXPECTED_MSG = MAKE_EVENT(4, SEVERITY::LOW); //!< An unexpected TM packet or data message occurred. Low, par1: 0, par2: integer (debug info)
static const Event STORING_FAILED = MAKE_EVENT(5, SEVERITY::LOW); //!< Storing data failed. May simply be a full store. Low, par1: returnCode, par2: integer (sequence count of failed packet).
static const Event TM_DUMP_FAILED = MAKE_EVENT(6, SEVERITY::LOW); //!< Dumping retrieved data failed. Low, par1: returnCode, par2: integer (sequence count of failed packet).
static const Event STORE_INIT_FAILED = MAKE_EVENT(7, SEVERITY::LOW); //!< Corrupted init data or read error. Low, par1: returnCode, par2: integer (debug info)
static const Event STORE_INIT_EMPTY = MAKE_EVENT(8, SEVERITY::INFO); //!< Store was not initialized. Starts empty. Info, parameters both zero.
static const Event STORE_CONTENT_CORRUPTED = MAKE_EVENT(9, SEVERITY::LOW); //!< Data was read out, but it is inconsistent. Low par1: Memory address of corruption, par2: integer (debug info)
static const Event STORE_INITIALIZE = MAKE_EVENT(10, SEVERITY::INFO); //!< Info event indicating the store will be initialized, either at boot or after IOB switch. Info. pars: 0
static const Event INIT_DONE = MAKE_EVENT(11, SEVERITY::INFO); //!< Info event indicating the store was successfully initialized, either at boot or after IOB switch. Info. pars: 0
static const Event DUMP_FINISHED = MAKE_EVENT(12, SEVERITY::INFO); //!< Info event indicating that dumping finished successfully. par1: Number of dumped packets. par2: APID/SSC (16bits each)
static const Event DELETION_FINISHED = MAKE_EVENT(13, SEVERITY::INFO); //!< Info event indicating that deletion finished successfully. par1: Number of deleted packets. par2: APID/SSC (16bits each)
static const Event DELETION_FAILED = MAKE_EVENT(14, SEVERITY::LOW); //!< Info event indicating that something went wrong during deletion. pars: 0
static const Event AUTO_CATALOGS_SENDING_FAILED = MAKE_EVENT(15, SEVERITY::INFO);//!< Info that the a auto catalog report failed
virtual ~TmStoreBackendIF() {}
/**
* What do I need to implement here ?
* @param opCode
* @return
*/
virtual ReturnValue_t performOperation(uint8_t opCode) = 0;
virtual ReturnValue_t initialize() = 0;
/**
* Implement the storage of TM packets to mass memory
* @param tmPacket
* @return
*/
virtual ReturnValue_t storePacket(TmPacketMinimal* tmPacket) = 0;
virtual ReturnValue_t setFetchLimitTime(const timeval* loverLimit, const timeval* upperLimit) = 0;
virtual ReturnValue_t setFetchLimitBlocks(uint32_t startAddress, uint32_t endAddress) = 0;
virtual ReturnValue_t fetchPackets(bool fromBegin = false) = 0;
virtual ReturnValue_t initializeStore(object_id_t dumpTarget) = 0;
virtual ReturnValue_t dumpIndex(store_address_t* storeId) = 0;
/**
* TODO: Adapt for file management system?
* @param startAddress
* @param endAddress
* @return
*/
virtual ReturnValue_t deleteBlocks(uint32_t startAddress, uint32_t endAddress) = 0;
virtual ReturnValue_t deleteTime(const timeval* timeUntil,
uint32_t* deletedPackets) = 0;
virtual void resetStore(bool clearStore, bool resetWrite, bool resetRead) = 0;
virtual bool isReady() = 0;
virtual uint32_t availableData() = 0;
virtual float getPercentageFilled() const = 0;
virtual uint32_t getStoredPacketsCount() const = 0;
virtual TmPacketInformation* getOldestPacket() = 0;
virtual TmPacketInformation* getYoungestPacket() = 0;
virtual float getDataRate() = 0;
};
#endif /* PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_ */
#ifndef PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_
#define PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_
#include "../returnvalues/HasReturnvaluesIF.h"
#include "../objectmanager/SystemObjectIF.h"
#include "../parameters/HasParametersIF.h"
#include "../storagemanager/StorageManagerIF.h"
#include "../timemanager/Clock.h"
class TmPacketInformation;
class TmPacketMinimal;
class SpacePacketBase;
class ApidSsc;
class TmStoreBackendIF : public HasParametersIF {
public:
static const uint8_t INTERFACE_ID = CLASS_ID::TM_STORE_BACKEND_IF;
static const ReturnValue_t BUSY = MAKE_RETURN_CODE(1);
static const ReturnValue_t FULL = MAKE_RETURN_CODE(2);
static const ReturnValue_t EMPTY = MAKE_RETURN_CODE(3);
static const ReturnValue_t NULL_REQUESTED = MAKE_RETURN_CODE(4);
static const ReturnValue_t TOO_LARGE = MAKE_RETURN_CODE(5);
static const ReturnValue_t NOT_READY = MAKE_RETURN_CODE(6);
static const ReturnValue_t DUMP_ERROR = MAKE_RETURN_CODE(7);
static const ReturnValue_t CRC_ERROR = MAKE_RETURN_CODE(8);
static const ReturnValue_t TIMEOUT = MAKE_RETURN_CODE(9);
static const ReturnValue_t IDLE_PACKET_FOUND = MAKE_RETURN_CODE(10);
static const ReturnValue_t TELECOMMAND_FOUND = MAKE_RETURN_CODE(11);
static const ReturnValue_t NO_PUS_A_TM = MAKE_RETURN_CODE(12);
static const ReturnValue_t TOO_SMALL = MAKE_RETURN_CODE(13);
static const ReturnValue_t BLOCK_NOT_FOUND = MAKE_RETURN_CODE(14);
static const ReturnValue_t INVALID_REQUEST = MAKE_RETURN_CODE(15);
static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::MEMORY;
static const Event STORE_SEND_WRITE_FAILED = MAKE_EVENT(0, SEVERITY::LOW); //!< Initiating sending data to store failed. Low, par1: returnCode, par2: integer (debug info)
static const Event STORE_WRITE_FAILED = MAKE_EVENT(1, SEVERITY::LOW); //!< Data was sent, but writing failed. Low, par1: returnCode, par2: 0
static const Event STORE_SEND_READ_FAILED = MAKE_EVENT(2, SEVERITY::LOW); //!< Initiating reading data from store failed. Low, par1: returnCode, par2: 0
static const Event STORE_READ_FAILED = MAKE_EVENT(3, SEVERITY::LOW); //!< Data was requested, but access failed. Low, par1: returnCode, par2: 0
static const Event UNEXPECTED_MSG = MAKE_EVENT(4, SEVERITY::LOW); //!< An unexpected TM packet or data message occurred. Low, par1: 0, par2: integer (debug info)
static const Event STORING_FAILED = MAKE_EVENT(5, SEVERITY::LOW); //!< Storing data failed. May simply be a full store. Low, par1: returnCode, par2: integer (sequence count of failed packet).
static const Event TM_DUMP_FAILED = MAKE_EVENT(6, SEVERITY::LOW); //!< Dumping retrieved data failed. Low, par1: returnCode, par2: integer (sequence count of failed packet).
static const Event STORE_INIT_FAILED = MAKE_EVENT(7, SEVERITY::LOW); //!< Corrupted init data or read error. Low, par1: returnCode, par2: integer (debug info)
static const Event STORE_INIT_EMPTY = MAKE_EVENT(8, SEVERITY::INFO); //!< Store was not initialized. Starts empty. Info, parameters both zero.
static const Event STORE_CONTENT_CORRUPTED = MAKE_EVENT(9, SEVERITY::LOW); //!< Data was read out, but it is inconsistent. Low par1: Memory address of corruption, par2: integer (debug info)
static const Event STORE_INITIALIZE = MAKE_EVENT(10, SEVERITY::INFO); //!< Info event indicating the store will be initialized, either at boot or after IOB switch. Info. pars: 0
static const Event INIT_DONE = MAKE_EVENT(11, SEVERITY::INFO); //!< Info event indicating the store was successfully initialized, either at boot or after IOB switch. Info. pars: 0
static const Event DUMP_FINISHED = MAKE_EVENT(12, SEVERITY::INFO); //!< Info event indicating that dumping finished successfully. par1: Number of dumped packets. par2: APID/SSC (16bits each)
static const Event DELETION_FINISHED = MAKE_EVENT(13, SEVERITY::INFO); //!< Info event indicating that deletion finished successfully. par1: Number of deleted packets. par2: APID/SSC (16bits each)
static const Event DELETION_FAILED = MAKE_EVENT(14, SEVERITY::LOW); //!< Info event indicating that something went wrong during deletion. pars: 0
static const Event AUTO_CATALOGS_SENDING_FAILED = MAKE_EVENT(15, SEVERITY::INFO);//!< Info that the a auto catalog report failed
virtual ~TmStoreBackendIF() {}
/**
* What do I need to implement here ?
* @param opCode
* @return
*/
virtual ReturnValue_t performOperation(uint8_t opCode) = 0;
virtual ReturnValue_t initialize() = 0;
/**
* Implement the storage of TM packets to mass memory
* @param tmPacket
* @return
*/
virtual ReturnValue_t storePacket(TmPacketMinimal* tmPacket) = 0;
virtual ReturnValue_t setFetchLimitTime(const timeval* loverLimit, const timeval* upperLimit) = 0;
virtual ReturnValue_t setFetchLimitBlocks(uint32_t startAddress, uint32_t endAddress) = 0;
virtual ReturnValue_t fetchPackets(bool fromBegin = false) = 0;
virtual ReturnValue_t initializeStore(object_id_t dumpTarget) = 0;
virtual ReturnValue_t dumpIndex(store_address_t* storeId) = 0;
/**
* TODO: Adapt for file management system?
* @param startAddress
* @param endAddress
* @return
*/
virtual ReturnValue_t deleteBlocks(uint32_t startAddress, uint32_t endAddress) = 0;
virtual ReturnValue_t deleteTime(const timeval* timeUntil,
uint32_t* deletedPackets) = 0;
virtual void resetStore(bool clearStore, bool resetWrite, bool resetRead) = 0;
virtual bool isReady() = 0;
virtual uint32_t availableData() = 0;
virtual float getPercentageFilled() const = 0;
virtual uint32_t getStoredPacketsCount() const = 0;
virtual TmPacketInformation* getOldestPacket() = 0;
virtual TmPacketInformation* getYoungestPacket() = 0;
virtual float getDataRate() = 0;
};
#endif /* PLATFORM_TMTCSERVICES_TMSTOREBACKENDIF_H_ */

View File

@ -1,63 +1,63 @@
#ifndef PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_
#define PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_
#include "../returnvalues/HasReturnvaluesIF.h"
#include "../tmstorage/TmStorePackets.h"
#include "../ipc/MessageQueueSenderIF.h"
class TmPacketMinimal;
class SpacePacketBase;
class TmStoreBackendIF;
class TmStoreFrontendIF {
public:
virtual TmStoreBackendIF* getBackend() const = 0;
/**
* What do I need to implement here?
* This is propably used by PUS Service 15 so we should propably check for messages..
* Provide base implementation?
* @param opCode
* @return
*/
virtual ReturnValue_t performOperation(uint8_t opCode) = 0;
/**
* Callback from the back-end to indicate a certain packet was received.
* front-end takes care of discarding/downloading the packet.
* @param packet Pointer to the newly received Space Packet.
* @param address Start address of the packet found
* @param isLastPacket Indicates if no more packets can be fetched.
* @return If more packets shall be fetched, RETURN_OK must be returned.
* Any other code stops fetching packets.
*/
virtual ReturnValue_t packetRetrieved(TmPacketMinimal* packet, uint32_t address) = 0;
virtual void noMorePacketsInStore() = 0;
virtual void handleRetrievalFailed(ReturnValue_t errorCode, uint32_t parameter1 = 0, uint32_t parameter2 = 0) = 0;
/**
* To get the queue where commands shall be sent.
* @return Id of command queue.
*/
virtual MessageQueueId_t getCommandQueue() const = 0;
virtual ReturnValue_t fetchPackets(ApidSsc start, ApidSsc end) = 0;
virtual ReturnValue_t deletePackets(ApidSsc upTo) = 0;
virtual ReturnValue_t checkPacket(SpacePacketBase* tmPacket) = 0;
virtual bool isEnabled() const = 0;
virtual void setEnabled(bool enabled) = 0;
virtual void resetDownlinkedPacketCount() = 0;
virtual ReturnValue_t setDumpTarget(object_id_t dumpTarget) = 0;
static const uint8_t INTERFACE_ID = CLASS_ID::TM_STORE_FRONTEND_IF;
static const ReturnValue_t BUSY = MAKE_RETURN_CODE(1);
static const ReturnValue_t LAST_PACKET_FOUND = MAKE_RETURN_CODE(2);
static const ReturnValue_t STOP_FETCH = MAKE_RETURN_CODE(3);
static const ReturnValue_t TIMEOUT = MAKE_RETURN_CODE(4);
static const ReturnValue_t TM_CHANNEL_FULL = MAKE_RETURN_CODE(5);
static const ReturnValue_t NOT_STORED = MAKE_RETURN_CODE(6);
static const ReturnValue_t ALL_DELETED = MAKE_RETURN_CODE(7);
static const ReturnValue_t INVALID_DATA = MAKE_RETURN_CODE(8);
static const ReturnValue_t NOT_READY = MAKE_RETURN_CODE(9);
virtual ~TmStoreFrontendIF() {
}
};
#endif /* PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_ */
#ifndef PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_
#define PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_
#include "../returnvalues/HasReturnvaluesIF.h"
#include "../tmstorage/TmStorePackets.h"
#include "../ipc/MessageQueueSenderIF.h"
class TmPacketMinimal;
class SpacePacketBase;
class TmStoreBackendIF;
class TmStoreFrontendIF {
public:
virtual TmStoreBackendIF* getBackend() const = 0;
/**
* What do I need to implement here?
* This is propably used by PUS Service 15 so we should propably check for messages..
* Provide base implementation?
* @param opCode
* @return
*/
virtual ReturnValue_t performOperation(uint8_t opCode) = 0;
/**
* Callback from the back-end to indicate a certain packet was received.
* front-end takes care of discarding/downloading the packet.
* @param packet Pointer to the newly received Space Packet.
* @param address Start address of the packet found
* @param isLastPacket Indicates if no more packets can be fetched.
* @return If more packets shall be fetched, RETURN_OK must be returned.
* Any other code stops fetching packets.
*/
virtual ReturnValue_t packetRetrieved(TmPacketMinimal* packet, uint32_t address) = 0;
virtual void noMorePacketsInStore() = 0;
virtual void handleRetrievalFailed(ReturnValue_t errorCode, uint32_t parameter1 = 0, uint32_t parameter2 = 0) = 0;
/**
* To get the queue where commands shall be sent.
* @return Id of command queue.
*/
virtual MessageQueueId_t getCommandQueue() const = 0;
virtual ReturnValue_t fetchPackets(ApidSsc start, ApidSsc end) = 0;
virtual ReturnValue_t deletePackets(ApidSsc upTo) = 0;
virtual ReturnValue_t checkPacket(SpacePacketBase* tmPacket) = 0;
virtual bool isEnabled() const = 0;
virtual void setEnabled(bool enabled) = 0;
virtual void resetDownlinkedPacketCount() = 0;
virtual ReturnValue_t setDumpTarget(object_id_t dumpTarget) = 0;
static const uint8_t INTERFACE_ID = CLASS_ID::TM_STORE_FRONTEND_IF;
static const ReturnValue_t BUSY = MAKE_RETURN_CODE(1);
static const ReturnValue_t LAST_PACKET_FOUND = MAKE_RETURN_CODE(2);
static const ReturnValue_t STOP_FETCH = MAKE_RETURN_CODE(3);
static const ReturnValue_t TIMEOUT = MAKE_RETURN_CODE(4);
static const ReturnValue_t TM_CHANNEL_FULL = MAKE_RETURN_CODE(5);
static const ReturnValue_t NOT_STORED = MAKE_RETURN_CODE(6);
static const ReturnValue_t ALL_DELETED = MAKE_RETURN_CODE(7);
static const ReturnValue_t INVALID_DATA = MAKE_RETURN_CODE(8);
static const ReturnValue_t NOT_READY = MAKE_RETURN_CODE(9);
virtual ~TmStoreFrontendIF() {
}
};
#endif /* PLATFORM_TMTCSERVICES_TMSTOREFRONTENDIF_H_ */

View File

@ -1,165 +1,165 @@
#include "../objectmanager/ObjectManagerIF.h"
#include "../tmstorage/TmStoreMessage.h"
TmStoreMessage::~TmStoreMessage() {
}
TmStoreMessage::TmStoreMessage() {
}
ReturnValue_t TmStoreMessage::setEnableStoringMessage(CommandMessage* cmd,
bool setEnabled) {
cmd->setCommand(ENABLE_STORING);
cmd->setParameter(setEnabled);
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t TmStoreMessage::setDeleteContentMessage(CommandMessage* cmd,
ApidSsc upTo) {
cmd->setCommand(DELETE_STORE_CONTENT);
cmd->setParameter((upTo.apid<<16) + upTo.ssc);
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t TmStoreMessage::setDownlinkContentMessage(CommandMessage* cmd,
ApidSsc fromPacket,
ApidSsc toPacket) {
cmd->setCommand(DOWNLINK_STORE_CONTENT);
cmd->setParameter((fromPacket.apid<<16) + fromPacket.ssc);
cmd->setParameter2((toPacket.apid<<16) + toPacket.ssc);
return HasReturnvaluesIF::RETURN_OK;
}
ApidSsc TmStoreMessage::getPacketId1(CommandMessage* cmd) {
ApidSsc temp;
temp.apid = (cmd->getParameter() >> 16) & 0xFFFF;
temp.ssc = cmd->getParameter() & 0xFFFF;
return temp;
}
ApidSsc TmStoreMessage::getPacketId2(CommandMessage* cmd) {
ApidSsc temp;
temp.apid = (cmd->getParameter2() >> 16) & 0xFFFF;
temp.ssc = cmd->getParameter2() & 0xFFFF;
return temp;
}
bool TmStoreMessage::getEnableStoring(CommandMessage* cmd) {
return (bool)cmd->getParameter();
}
void TmStoreMessage::setChangeSelectionDefinitionMessage(
CommandMessage* cmd, bool addDefinition, store_address_t store_id) {
cmd->setCommand(CHANGE_SELECTION_DEFINITION);
cmd->setParameter(addDefinition);
cmd->setParameter2(store_id.raw);
}
void TmStoreMessage::clear(CommandMessage* cmd) {
switch(cmd->getCommand()) {
case SELECTION_DEFINITION_REPORT:
case STORE_CATALOGUE_REPORT:
case CHANGE_SELECTION_DEFINITION:
case INDEX_REPORT:
case DELETE_STORE_CONTENT_TIME:
case DOWNLINK_STORE_CONTENT_TIME: {
StorageManagerIF *ipcStore = objectManager->get<StorageManagerIF>(
objects::IPC_STORE);
if (ipcStore != NULL) {
ipcStore->deleteData(getStoreId(cmd));
}
}
/* NO BREAK falls through*/
case DELETE_STORE_CONTENT_BLOCKS:
case DOWNLINK_STORE_CONTENT_BLOCKS:
case REPORT_INDEX_REQUEST:
cmd->setCommand(CommandMessage::UNKNOWN_COMMAND);
cmd->setParameter(0);
cmd->setParameter2(0);
break;
default:
break;
}
}
store_address_t TmStoreMessage::getStoreId(const CommandMessage* cmd) {
store_address_t temp;
temp.raw = cmd->getParameter2();
return temp;
}
bool TmStoreMessage::getAddToSelection(CommandMessage* cmd) {
return (bool)cmd->getParameter();
}
ReturnValue_t TmStoreMessage::setReportSelectionDefinitionMessage(
CommandMessage* cmd) {
cmd->setCommand(REPORT_SELECTION_DEFINITION);
return HasReturnvaluesIF::RETURN_OK;
}
void TmStoreMessage::setSelectionDefinitionReportMessage(
CommandMessage* cmd, store_address_t storeId) {
cmd->setCommand(SELECTION_DEFINITION_REPORT);
cmd->setParameter2(storeId.raw);
}
ReturnValue_t TmStoreMessage::setReportStoreCatalogueMessage(
CommandMessage* cmd) {
cmd->setCommand(REPORT_STORE_CATALOGUE);
return HasReturnvaluesIF::RETURN_OK;
}
void TmStoreMessage::setStoreCatalogueReportMessage(CommandMessage* cmd, object_id_t objectId,
store_address_t storeId) {
cmd->setCommand(STORE_CATALOGUE_REPORT);
cmd->setParameter(objectId);
cmd->setParameter2(storeId.raw);
}
object_id_t TmStoreMessage::getObjectId(CommandMessage* cmd) {
return cmd->getParameter();
}
void TmStoreMessage::setDownlinkContentTimeMessage(CommandMessage* cmd,
store_address_t storeId) {
cmd->setCommand(DOWNLINK_STORE_CONTENT_TIME);
cmd->setParameter2(storeId.raw);
}
uint32_t TmStoreMessage::getAddressLow(CommandMessage* cmd){
return cmd->getParameter();
}
uint32_t TmStoreMessage::getAddressHigh(CommandMessage* cmd){
return cmd->getParameter2();
}
void TmStoreMessage::setDeleteContentTimeMessage(CommandMessage* cmd,
store_address_t storeId) {
cmd->setCommand(DELETE_STORE_CONTENT_TIME);
cmd->setParameter2(storeId.raw);
}
ReturnValue_t TmStoreMessage::setDeleteBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh){
cmd->setCommand(DELETE_STORE_CONTENT_BLOCKS);
cmd->setParameter(addressLow);
cmd->setParameter2(addressHigh);
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t TmStoreMessage::setDownlinkBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh){
cmd->setCommand(DOWNLINK_STORE_CONTENT_BLOCKS);
cmd->setParameter(addressLow);
cmd->setParameter2(addressHigh);
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t TmStoreMessage::setIndexRequestMessage(CommandMessage* cmd){
cmd->setCommand(REPORT_INDEX_REQUEST);
return HasReturnvaluesIF::RETURN_OK;
}
void TmStoreMessage::setIndexReportMessage(CommandMessage* cmd, store_address_t storeId){
cmd->setCommand(INDEX_REPORT);
cmd->setParameter2(storeId.raw);
}
#include "../objectmanager/ObjectManagerIF.h"
#include "../tmstorage/TmStoreMessage.h"
TmStoreMessage::~TmStoreMessage() {
}
TmStoreMessage::TmStoreMessage() {
}
ReturnValue_t TmStoreMessage::setEnableStoringMessage(CommandMessage* cmd,
bool setEnabled) {
cmd->setCommand(ENABLE_STORING);
cmd->setParameter(setEnabled);
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t TmStoreMessage::setDeleteContentMessage(CommandMessage* cmd,
ApidSsc upTo) {
cmd->setCommand(DELETE_STORE_CONTENT);
cmd->setParameter((upTo.apid<<16) + upTo.ssc);
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t TmStoreMessage::setDownlinkContentMessage(CommandMessage* cmd,
ApidSsc fromPacket,
ApidSsc toPacket) {
cmd->setCommand(DOWNLINK_STORE_CONTENT);
cmd->setParameter((fromPacket.apid<<16) + fromPacket.ssc);
cmd->setParameter2((toPacket.apid<<16) + toPacket.ssc);
return HasReturnvaluesIF::RETURN_OK;
}
ApidSsc TmStoreMessage::getPacketId1(CommandMessage* cmd) {
ApidSsc temp;
temp.apid = (cmd->getParameter() >> 16) & 0xFFFF;
temp.ssc = cmd->getParameter() & 0xFFFF;
return temp;
}
ApidSsc TmStoreMessage::getPacketId2(CommandMessage* cmd) {
ApidSsc temp;
temp.apid = (cmd->getParameter2() >> 16) & 0xFFFF;
temp.ssc = cmd->getParameter2() & 0xFFFF;
return temp;
}
bool TmStoreMessage::getEnableStoring(CommandMessage* cmd) {
return (bool)cmd->getParameter();
}
void TmStoreMessage::setChangeSelectionDefinitionMessage(
CommandMessage* cmd, bool addDefinition, store_address_t store_id) {
cmd->setCommand(CHANGE_SELECTION_DEFINITION);
cmd->setParameter(addDefinition);
cmd->setParameter2(store_id.raw);
}
void TmStoreMessage::clear(CommandMessage* cmd) {
switch(cmd->getCommand()) {
case SELECTION_DEFINITION_REPORT:
case STORE_CATALOGUE_REPORT:
case CHANGE_SELECTION_DEFINITION:
case INDEX_REPORT:
case DELETE_STORE_CONTENT_TIME:
case DOWNLINK_STORE_CONTENT_TIME: {
StorageManagerIF *ipcStore = objectManager->get<StorageManagerIF>(
objects::IPC_STORE);
if (ipcStore != NULL) {
ipcStore->deleteData(getStoreId(cmd));
}
}
/* NO BREAK falls through*/
case DELETE_STORE_CONTENT_BLOCKS:
case DOWNLINK_STORE_CONTENT_BLOCKS:
case REPORT_INDEX_REQUEST:
cmd->setCommand(CommandMessage::UNKNOWN_COMMAND);
cmd->setParameter(0);
cmd->setParameter2(0);
break;
default:
break;
}
}
store_address_t TmStoreMessage::getStoreId(const CommandMessage* cmd) {
store_address_t temp;
temp.raw = cmd->getParameter2();
return temp;
}
bool TmStoreMessage::getAddToSelection(CommandMessage* cmd) {
return (bool)cmd->getParameter();
}
ReturnValue_t TmStoreMessage::setReportSelectionDefinitionMessage(
CommandMessage* cmd) {
cmd->setCommand(REPORT_SELECTION_DEFINITION);
return HasReturnvaluesIF::RETURN_OK;
}
void TmStoreMessage::setSelectionDefinitionReportMessage(
CommandMessage* cmd, store_address_t storeId) {
cmd->setCommand(SELECTION_DEFINITION_REPORT);
cmd->setParameter2(storeId.raw);
}
ReturnValue_t TmStoreMessage::setReportStoreCatalogueMessage(
CommandMessage* cmd) {
cmd->setCommand(REPORT_STORE_CATALOGUE);
return HasReturnvaluesIF::RETURN_OK;
}
void TmStoreMessage::setStoreCatalogueReportMessage(CommandMessage* cmd, object_id_t objectId,
store_address_t storeId) {
cmd->setCommand(STORE_CATALOGUE_REPORT);
cmd->setParameter(objectId);
cmd->setParameter2(storeId.raw);
}
object_id_t TmStoreMessage::getObjectId(CommandMessage* cmd) {
return cmd->getParameter();
}
void TmStoreMessage::setDownlinkContentTimeMessage(CommandMessage* cmd,
store_address_t storeId) {
cmd->setCommand(DOWNLINK_STORE_CONTENT_TIME);
cmd->setParameter2(storeId.raw);
}
uint32_t TmStoreMessage::getAddressLow(CommandMessage* cmd){
return cmd->getParameter();
}
uint32_t TmStoreMessage::getAddressHigh(CommandMessage* cmd){
return cmd->getParameter2();
}
void TmStoreMessage::setDeleteContentTimeMessage(CommandMessage* cmd,
store_address_t storeId) {
cmd->setCommand(DELETE_STORE_CONTENT_TIME);
cmd->setParameter2(storeId.raw);
}
ReturnValue_t TmStoreMessage::setDeleteBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh){
cmd->setCommand(DELETE_STORE_CONTENT_BLOCKS);
cmd->setParameter(addressLow);
cmd->setParameter2(addressHigh);
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t TmStoreMessage::setDownlinkBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh){
cmd->setCommand(DOWNLINK_STORE_CONTENT_BLOCKS);
cmd->setParameter(addressLow);
cmd->setParameter2(addressHigh);
return HasReturnvaluesIF::RETURN_OK;
}
ReturnValue_t TmStoreMessage::setIndexRequestMessage(CommandMessage* cmd){
cmd->setCommand(REPORT_INDEX_REQUEST);
return HasReturnvaluesIF::RETURN_OK;
}
void TmStoreMessage::setIndexReportMessage(CommandMessage* cmd, store_address_t storeId){
cmd->setCommand(INDEX_REPORT);
cmd->setParameter2(storeId.raw);
}

View File

@ -1,63 +1,63 @@
#ifndef FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_
#define FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_
#include "../ipc/CommandMessage.h"
#include "../storagemanager/StorageManagerIF.h"
#include "../tmstorage/TmStorePackets.h"
#include "../objectmanager/SystemObjectIF.h"
class TmStoreMessage {
public:
static ReturnValue_t setEnableStoringMessage(CommandMessage* cmd,
bool setEnabled);
static ReturnValue_t setDeleteContentMessage(CommandMessage* cmd,
ApidSsc upTo);
static ReturnValue_t setDownlinkContentMessage(CommandMessage* cmd,
ApidSsc fromPacket, ApidSsc toPacket);
static void setChangeSelectionDefinitionMessage(CommandMessage* cmd,
bool addDefinition, store_address_t store_id);
static ReturnValue_t setReportSelectionDefinitionMessage(
CommandMessage* cmd);
static void setSelectionDefinitionReportMessage(CommandMessage* cmd,
store_address_t storeId);
static ReturnValue_t setReportStoreCatalogueMessage(CommandMessage* cmd);
static void setStoreCatalogueReportMessage(CommandMessage* cmd, object_id_t objectId,
store_address_t storeId);
static void setDownlinkContentTimeMessage(CommandMessage* cmd,
store_address_t storeId);
static void setIndexReportMessage(CommandMessage* cmd, store_address_t storeId);
static ReturnValue_t setDeleteBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh);
static ReturnValue_t setDownlinkBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh);
static ReturnValue_t setIndexRequestMessage(CommandMessage* cmd);
static void setDeleteContentTimeMessage(CommandMessage* cmd,
store_address_t storeId);
static void clear(CommandMessage* cmd);
static object_id_t getObjectId(CommandMessage* cmd);
static ApidSsc getPacketId1(CommandMessage* cmd);
static ApidSsc getPacketId2(CommandMessage* cmd);
static bool getEnableStoring(CommandMessage* cmd);
static bool getAddToSelection(CommandMessage* cmd);
static uint32_t getAddressLow(CommandMessage* cmd);
static uint32_t getAddressHigh(CommandMessage* cmd);
static store_address_t getStoreId(const CommandMessage* cmd);
virtual ~TmStoreMessage();
static const uint8_t MESSAGE_ID = messagetypes::TM_STORE;
static const Command_t ENABLE_STORING = MAKE_COMMAND_ID(1);
static const Command_t DELETE_STORE_CONTENT = MAKE_COMMAND_ID(2);
static const Command_t DOWNLINK_STORE_CONTENT = MAKE_COMMAND_ID(3);
static const Command_t CHANGE_SELECTION_DEFINITION = MAKE_COMMAND_ID(4);
static const Command_t REPORT_SELECTION_DEFINITION = MAKE_COMMAND_ID(5);
static const Command_t SELECTION_DEFINITION_REPORT = MAKE_COMMAND_ID(6);
static const Command_t REPORT_STORE_CATALOGUE = MAKE_COMMAND_ID(7);
static const Command_t STORE_CATALOGUE_REPORT = MAKE_COMMAND_ID(8);
static const Command_t DOWNLINK_STORE_CONTENT_TIME = MAKE_COMMAND_ID(9);
static const Command_t DELETE_STORE_CONTENT_TIME = MAKE_COMMAND_ID(10);
static const Command_t DELETE_STORE_CONTENT_BLOCKS = MAKE_COMMAND_ID(11);
static const Command_t DOWNLINK_STORE_CONTENT_BLOCKS = MAKE_COMMAND_ID(12);
static const Command_t REPORT_INDEX_REQUEST = MAKE_COMMAND_ID(13);
static const Command_t INDEX_REPORT = MAKE_COMMAND_ID(14);
private:
TmStoreMessage();
};
#endif /* FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_ */
#ifndef FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_
#define FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_
#include "../ipc/CommandMessage.h"
#include "../storagemanager/StorageManagerIF.h"
#include "../tmstorage/TmStorePackets.h"
#include "../objectmanager/SystemObjectIF.h"
class TmStoreMessage {
public:
static ReturnValue_t setEnableStoringMessage(CommandMessage* cmd,
bool setEnabled);
static ReturnValue_t setDeleteContentMessage(CommandMessage* cmd,
ApidSsc upTo);
static ReturnValue_t setDownlinkContentMessage(CommandMessage* cmd,
ApidSsc fromPacket, ApidSsc toPacket);
static void setChangeSelectionDefinitionMessage(CommandMessage* cmd,
bool addDefinition, store_address_t store_id);
static ReturnValue_t setReportSelectionDefinitionMessage(
CommandMessage* cmd);
static void setSelectionDefinitionReportMessage(CommandMessage* cmd,
store_address_t storeId);
static ReturnValue_t setReportStoreCatalogueMessage(CommandMessage* cmd);
static void setStoreCatalogueReportMessage(CommandMessage* cmd, object_id_t objectId,
store_address_t storeId);
static void setDownlinkContentTimeMessage(CommandMessage* cmd,
store_address_t storeId);
static void setIndexReportMessage(CommandMessage* cmd, store_address_t storeId);
static ReturnValue_t setDeleteBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh);
static ReturnValue_t setDownlinkBlocksMessage(CommandMessage* cmd, uint32_t addressLow, uint32_t addressHigh);
static ReturnValue_t setIndexRequestMessage(CommandMessage* cmd);
static void setDeleteContentTimeMessage(CommandMessage* cmd,
store_address_t storeId);
static void clear(CommandMessage* cmd);
static object_id_t getObjectId(CommandMessage* cmd);
static ApidSsc getPacketId1(CommandMessage* cmd);
static ApidSsc getPacketId2(CommandMessage* cmd);
static bool getEnableStoring(CommandMessage* cmd);
static bool getAddToSelection(CommandMessage* cmd);
static uint32_t getAddressLow(CommandMessage* cmd);
static uint32_t getAddressHigh(CommandMessage* cmd);
static store_address_t getStoreId(const CommandMessage* cmd);
virtual ~TmStoreMessage();
static const uint8_t MESSAGE_ID = messagetypes::TM_STORE;
static const Command_t ENABLE_STORING = MAKE_COMMAND_ID(1);
static const Command_t DELETE_STORE_CONTENT = MAKE_COMMAND_ID(2);
static const Command_t DOWNLINK_STORE_CONTENT = MAKE_COMMAND_ID(3);
static const Command_t CHANGE_SELECTION_DEFINITION = MAKE_COMMAND_ID(4);
static const Command_t REPORT_SELECTION_DEFINITION = MAKE_COMMAND_ID(5);
static const Command_t SELECTION_DEFINITION_REPORT = MAKE_COMMAND_ID(6);
static const Command_t REPORT_STORE_CATALOGUE = MAKE_COMMAND_ID(7);
static const Command_t STORE_CATALOGUE_REPORT = MAKE_COMMAND_ID(8);
static const Command_t DOWNLINK_STORE_CONTENT_TIME = MAKE_COMMAND_ID(9);
static const Command_t DELETE_STORE_CONTENT_TIME = MAKE_COMMAND_ID(10);
static const Command_t DELETE_STORE_CONTENT_BLOCKS = MAKE_COMMAND_ID(11);
static const Command_t DOWNLINK_STORE_CONTENT_BLOCKS = MAKE_COMMAND_ID(12);
static const Command_t REPORT_INDEX_REQUEST = MAKE_COMMAND_ID(13);
static const Command_t INDEX_REPORT = MAKE_COMMAND_ID(14);
private:
TmStoreMessage();
};
#endif /* FRAMEWORK_TMSTORAGE_TMSTOREMESSAGE_H_ */

View File

@ -1,300 +1,300 @@
#ifndef FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_
#define FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_
#include "../serialize/SerialFixedArrayListAdapter.h"
#include "../serialize/SerializeElement.h"
#include "../serialize/SerialLinkedListAdapter.h"
#include "../serialize/SerialBufferAdapter.h"
#include "../tmtcpacket/pus/TmPacketMinimal.h"
#include "../timemanager/TimeStamperIF.h"
#include "../timemanager/CCSDSTime.h"
#include "../globalfunctions/timevalOperations.h"
class ServiceSubservice: public SerialLinkedListAdapter<SerializeIF> {
public:
SerializeElement<uint8_t> service;
SerialFixedArrayListAdapter<uint8_t, 16> subservices;
LinkedElement<SerializeIF> linkedSubservices;
ServiceSubservice() :
SerialLinkedListAdapter<SerializeIF>(&service), linkedSubservices(
&subservices) {
service.setNext(&linkedSubservices);
}
};
class ApidSsc: public SerializeIF {
public:
ApidSsc() :
apid(SpacePacketBase::LIMIT_APID), ssc(0) {
}
ApidSsc(uint16_t apid, uint16_t ssc) :
apid(apid), ssc(ssc) {
}
uint16_t apid;
uint16_t ssc;
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
size_t maxSize, Endianness streamEndianness) const {
ReturnValue_t result = SerializeAdapter::serialize(&apid,
buffer, size, maxSize, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
return SerializeAdapter::serialize(&ssc, buffer, size,
maxSize, streamEndianness);
}
size_t getSerializedSize() const {
return sizeof(apid) + sizeof(ssc);
}
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
Endianness streamEndianness) {
ReturnValue_t result = SerializeAdapter::deSerialize(&apid,
buffer, size, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
return SerializeAdapter::deSerialize(&ssc, buffer, size,
streamEndianness);
}
};
class ChangeSelectionDefinition: public SerialLinkedListAdapter<SerializeIF> {
public:
SerializeElement<uint16_t> apid;
SerialFixedArrayListAdapter<ServiceSubservice, 16> serviceList;
LinkedElement<SerializeIF> linkedServiceList;
ChangeSelectionDefinition() :
SerialLinkedListAdapter<SerializeIF>(&apid), linkedServiceList(
&serviceList) {
apid.setNext(&linkedServiceList);
}
};
class TmPacketInformation: public SerializeIF {
public:
TmPacketInformation(TmPacketMinimal* packet){
setContent(packet);
}
TmPacketInformation() :apid(
SpacePacketBase::LIMIT_APID), sourceSequenceCount(0), serviceType(
0), serviceSubtype(0), subCounter(0) {
}
void reset() {
apid = SpacePacketBase::LIMIT_APID;
sourceSequenceCount = 0;
serviceType = 0;
serviceSubtype = 0;
subCounter = 0;
memset(rawTimestamp, 0, sizeof(rawTimestamp));
}
void setContent(TmPacketMinimal* packet) {
apid = packet->getAPID();
sourceSequenceCount = packet->getPacketSequenceCount();
serviceType = packet->getService();
serviceSubtype = packet->getSubService();
subCounter = packet->getPacketSubcounter();
memset(rawTimestamp, 0, sizeof(rawTimestamp));
const uint8_t* pField = NULL;
uint32_t size = 0;
ReturnValue_t result = packet->getPacketTimeRaw(&pField, &size);
if (result != HasReturnvaluesIF::RETURN_OK) {
return;
}
if (*pField == CCSDSTime::P_FIELD_CDS_SHORT
&& size <= TimeStamperIF::MISSION_TIMESTAMP_SIZE) {
//Shortcut to avoid converting CDS back and forth.
memcpy(rawTimestamp, pField, size);
return;
}
timeval time = { 0, 0 };
result = packet->getPacketTime(&time);
if (result != HasReturnvaluesIF::RETURN_OK) {
return;
}
CCSDSTime::CDS_short cdsFormat;
result = CCSDSTime::convertToCcsds(&cdsFormat, &time);
if (result != HasReturnvaluesIF::RETURN_OK) {
return;
}
memcpy(rawTimestamp, &cdsFormat, sizeof(cdsFormat));
}
void setContent(TmPacketInformation* content) {
apid = content->apid;
sourceSequenceCount = content->sourceSequenceCount;
serviceType = content->serviceType;
serviceSubtype = content->serviceSubtype;
subCounter = content->subCounter;
memcpy(rawTimestamp, content->rawTimestamp, sizeof(rawTimestamp));
}
bool isValid() const {
return (apid < SpacePacketBase::LIMIT_APID) ? true : false;
}
static void reset(TmPacketInformation* packet){
packet->reset();
}
static bool isOlderThan(const TmPacketInformation* packet, const timeval* cmpTime){
if(packet->isValid()){
timeval packetTime = {0,0};
uint32_t foundlen = 0;
CCSDSTime::convertFromCcsds(&packetTime,&packet->rawTimestamp[0],&foundlen,sizeof(rawTimestamp));
if(packetTime <= *cmpTime){
return true;
}
}
return false;
}
static bool isNewerThan(const TmPacketInformation* packet, const timeval* cmpTime){
if(packet->isValid()){
timeval packetTime = {0,0};
uint32_t foundlen = 0;
CCSDSTime::convertFromCcsds(&packetTime,&packet->rawTimestamp[0],&foundlen,sizeof(rawTimestamp));
if(packetTime >= *cmpTime){
return true;
}
}
return false;
}
static bool isSmallerSSC(const TmPacketInformation* packet,const ApidSsc* compareSSC){
if(packet->isValid()){
if(packet->apid == compareSSC->apid){
if(packet->sourceSequenceCount <= compareSSC->ssc){
return true;
}
}
}
return false;
}
static bool isLargerSSC(const TmPacketInformation* packet,const ApidSsc* compareSSC){
if(packet->isValid()){
if(packet->apid == compareSSC->apid){
if(packet->sourceSequenceCount >= compareSSC->ssc){
return true;
}
}
}
return false;
}
uint16_t getApid() const{
return apid;
}
uint16_t getSsc() const{
return sourceSequenceCount;
}
uint8_t getServiceType() const{
return serviceType;
}
uint8_t getServiceSubtype() const{
return serviceSubtype;
}
uint8_t getSubCounter() const{
return subCounter;
}
timeval getTime() const {
timeval packetTime = {0,0};
uint32_t foundlen = 0;
CCSDSTime::convertFromCcsds(&packetTime,&this->rawTimestamp[0],&foundlen,sizeof(rawTimestamp));
return packetTime;
}
bool operator==(const TmPacketInformation& other) {
//TODO Does not compare Raw Timestamp
return ((apid == other.getApid())
&& (sourceSequenceCount == other.getSsc())
&& (serviceType == other.getServiceType()) && (serviceSubtype =
other.getServiceSubtype()));
}
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
size_t maxSize, Endianness streamEndianness) const {
ReturnValue_t result = SerializeAdapter::serialize(&apid,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
result = SerializeAdapter::serialize(&sourceSequenceCount,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
result = SerializeAdapter::serialize(&serviceType,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
result = SerializeAdapter::serialize(&serviceSubtype,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
result = SerializeAdapter::serialize(&subCounter,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
return adapter.serialize(buffer,size,maxSize,streamEndianness);
}
size_t getSerializedSize() const {
uint32_t size = 0;
size += SerializeAdapter::getSerializedSize(&apid);
size += SerializeAdapter::getSerializedSize(&sourceSequenceCount);
size += SerializeAdapter::getSerializedSize(&serviceType);
size += SerializeAdapter::getSerializedSize(&serviceSubtype);
size += SerializeAdapter::getSerializedSize(&subCounter);
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
size += adapter.getSerializedSize();
return size;
};
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
Endianness streamEndianness) {
ReturnValue_t result = SerializeAdapter::deSerialize(&apid, buffer,
size, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = SerializeAdapter::deSerialize(&sourceSequenceCount, buffer,
size, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = SerializeAdapter::deSerialize(&serviceType, buffer, size,
streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = SerializeAdapter::deSerialize(&serviceSubtype, buffer,
size, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = SerializeAdapter::deSerialize(&subCounter, buffer, size,
streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
return adapter.deSerialize(buffer,size,streamEndianness);
}
private:
uint16_t apid;
uint16_t sourceSequenceCount;
uint8_t serviceType;
uint8_t serviceSubtype;
uint8_t subCounter;
uint8_t rawTimestamp[TimeStamperIF::MISSION_TIMESTAMP_SIZE];
};
#endif /* FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_ */
#ifndef FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_
#define FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_
#include "../serialize/SerialFixedArrayListAdapter.h"
#include "../serialize/SerializeElement.h"
#include "../serialize/SerialLinkedListAdapter.h"
#include "../serialize/SerialBufferAdapter.h"
#include "../tmtcpacket/pus/TmPacketMinimal.h"
#include "../timemanager/TimeStamperIF.h"
#include "../timemanager/CCSDSTime.h"
#include "../globalfunctions/timevalOperations.h"
class ServiceSubservice: public SerialLinkedListAdapter<SerializeIF> {
public:
SerializeElement<uint8_t> service;
SerialFixedArrayListAdapter<uint8_t, 16> subservices;
LinkedElement<SerializeIF> linkedSubservices;
ServiceSubservice() :
SerialLinkedListAdapter<SerializeIF>(&service), linkedSubservices(
&subservices) {
service.setNext(&linkedSubservices);
}
};
class ApidSsc: public SerializeIF {
public:
ApidSsc() :
apid(SpacePacketBase::LIMIT_APID), ssc(0) {
}
ApidSsc(uint16_t apid, uint16_t ssc) :
apid(apid), ssc(ssc) {
}
uint16_t apid;
uint16_t ssc;
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
size_t maxSize, Endianness streamEndianness) const {
ReturnValue_t result = SerializeAdapter::serialize(&apid,
buffer, size, maxSize, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
return SerializeAdapter::serialize(&ssc, buffer, size,
maxSize, streamEndianness);
}
size_t getSerializedSize() const {
return sizeof(apid) + sizeof(ssc);
}
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
Endianness streamEndianness) {
ReturnValue_t result = SerializeAdapter::deSerialize(&apid,
buffer, size, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
return SerializeAdapter::deSerialize(&ssc, buffer, size,
streamEndianness);
}
};
class ChangeSelectionDefinition: public SerialLinkedListAdapter<SerializeIF> {
public:
SerializeElement<uint16_t> apid;
SerialFixedArrayListAdapter<ServiceSubservice, 16> serviceList;
LinkedElement<SerializeIF> linkedServiceList;
ChangeSelectionDefinition() :
SerialLinkedListAdapter<SerializeIF>(&apid), linkedServiceList(
&serviceList) {
apid.setNext(&linkedServiceList);
}
};
class TmPacketInformation: public SerializeIF {
public:
TmPacketInformation(TmPacketMinimal* packet){
setContent(packet);
}
TmPacketInformation() :apid(
SpacePacketBase::LIMIT_APID), sourceSequenceCount(0), serviceType(
0), serviceSubtype(0), subCounter(0) {
}
void reset() {
apid = SpacePacketBase::LIMIT_APID;
sourceSequenceCount = 0;
serviceType = 0;
serviceSubtype = 0;
subCounter = 0;
memset(rawTimestamp, 0, sizeof(rawTimestamp));
}
void setContent(TmPacketMinimal* packet) {
apid = packet->getAPID();
sourceSequenceCount = packet->getPacketSequenceCount();
serviceType = packet->getService();
serviceSubtype = packet->getSubService();
subCounter = packet->getPacketSubcounter();
memset(rawTimestamp, 0, sizeof(rawTimestamp));
const uint8_t* pField = NULL;
uint32_t size = 0;
ReturnValue_t result = packet->getPacketTimeRaw(&pField, &size);
if (result != HasReturnvaluesIF::RETURN_OK) {
return;
}
if (*pField == CCSDSTime::P_FIELD_CDS_SHORT
&& size <= TimeStamperIF::MISSION_TIMESTAMP_SIZE) {
//Shortcut to avoid converting CDS back and forth.
memcpy(rawTimestamp, pField, size);
return;
}
timeval time = { 0, 0 };
result = packet->getPacketTime(&time);
if (result != HasReturnvaluesIF::RETURN_OK) {
return;
}
CCSDSTime::CDS_short cdsFormat;
result = CCSDSTime::convertToCcsds(&cdsFormat, &time);
if (result != HasReturnvaluesIF::RETURN_OK) {
return;
}
memcpy(rawTimestamp, &cdsFormat, sizeof(cdsFormat));
}
void setContent(TmPacketInformation* content) {
apid = content->apid;
sourceSequenceCount = content->sourceSequenceCount;
serviceType = content->serviceType;
serviceSubtype = content->serviceSubtype;
subCounter = content->subCounter;
memcpy(rawTimestamp, content->rawTimestamp, sizeof(rawTimestamp));
}
bool isValid() const {
return (apid < SpacePacketBase::LIMIT_APID) ? true : false;
}
static void reset(TmPacketInformation* packet){
packet->reset();
}
static bool isOlderThan(const TmPacketInformation* packet, const timeval* cmpTime){
if(packet->isValid()){
timeval packetTime = {0,0};
uint32_t foundlen = 0;
CCSDSTime::convertFromCcsds(&packetTime,&packet->rawTimestamp[0],&foundlen,sizeof(rawTimestamp));
if(packetTime <= *cmpTime){
return true;
}
}
return false;
}
static bool isNewerThan(const TmPacketInformation* packet, const timeval* cmpTime){
if(packet->isValid()){
timeval packetTime = {0,0};
uint32_t foundlen = 0;
CCSDSTime::convertFromCcsds(&packetTime,&packet->rawTimestamp[0],&foundlen,sizeof(rawTimestamp));
if(packetTime >= *cmpTime){
return true;
}
}
return false;
}
static bool isSmallerSSC(const TmPacketInformation* packet,const ApidSsc* compareSSC){
if(packet->isValid()){
if(packet->apid == compareSSC->apid){
if(packet->sourceSequenceCount <= compareSSC->ssc){
return true;
}
}
}
return false;
}
static bool isLargerSSC(const TmPacketInformation* packet,const ApidSsc* compareSSC){
if(packet->isValid()){
if(packet->apid == compareSSC->apid){
if(packet->sourceSequenceCount >= compareSSC->ssc){
return true;
}
}
}
return false;
}
uint16_t getApid() const{
return apid;
}
uint16_t getSsc() const{
return sourceSequenceCount;
}
uint8_t getServiceType() const{
return serviceType;
}
uint8_t getServiceSubtype() const{
return serviceSubtype;
}
uint8_t getSubCounter() const{
return subCounter;
}
timeval getTime() const {
timeval packetTime = {0,0};
uint32_t foundlen = 0;
CCSDSTime::convertFromCcsds(&packetTime,&this->rawTimestamp[0],&foundlen,sizeof(rawTimestamp));
return packetTime;
}
bool operator==(const TmPacketInformation& other) {
//TODO Does not compare Raw Timestamp
return ((apid == other.getApid())
&& (sourceSequenceCount == other.getSsc())
&& (serviceType == other.getServiceType()) && (serviceSubtype =
other.getServiceSubtype()));
}
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
size_t maxSize, Endianness streamEndianness) const {
ReturnValue_t result = SerializeAdapter::serialize(&apid,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
result = SerializeAdapter::serialize(&sourceSequenceCount,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
result = SerializeAdapter::serialize(&serviceType,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
result = SerializeAdapter::serialize(&serviceSubtype,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
result = SerializeAdapter::serialize(&subCounter,buffer,size,maxSize,streamEndianness);
if(result!=HasReturnvaluesIF::RETURN_OK){
return result;
}
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
return adapter.serialize(buffer,size,maxSize,streamEndianness);
}
size_t getSerializedSize() const {
uint32_t size = 0;
size += SerializeAdapter::getSerializedSize(&apid);
size += SerializeAdapter::getSerializedSize(&sourceSequenceCount);
size += SerializeAdapter::getSerializedSize(&serviceType);
size += SerializeAdapter::getSerializedSize(&serviceSubtype);
size += SerializeAdapter::getSerializedSize(&subCounter);
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
size += adapter.getSerializedSize();
return size;
};
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
Endianness streamEndianness) {
ReturnValue_t result = SerializeAdapter::deSerialize(&apid, buffer,
size, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = SerializeAdapter::deSerialize(&sourceSequenceCount, buffer,
size, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = SerializeAdapter::deSerialize(&serviceType, buffer, size,
streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = SerializeAdapter::deSerialize(&serviceSubtype, buffer,
size, streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = SerializeAdapter::deSerialize(&subCounter, buffer, size,
streamEndianness);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
return adapter.deSerialize(buffer,size,streamEndianness);
}
private:
uint16_t apid;
uint16_t sourceSequenceCount;
uint8_t serviceType;
uint8_t serviceSubtype;
uint8_t subCounter;
uint8_t rawTimestamp[TimeStamperIF::MISSION_TIMESTAMP_SIZE];
};
#endif /* FRAMEWORK_TMSTORAGE_TMSTOREPACKETS_H_ */