2021-12-03 15:37:49 +01:00
|
|
|
#ifndef FSFW_SRC_FSFW_CFDP_PDU_DEFINITIONS_H_
|
|
|
|
#define FSFW_SRC_FSFW_CFDP_PDU_DEFINITIONS_H_
|
|
|
|
|
|
|
|
#include <fsfw/serialize/SerializeIF.h>
|
2022-02-02 10:29:30 +01:00
|
|
|
|
2021-12-03 15:37:49 +01:00
|
|
|
#include <cstddef>
|
2022-02-02 10:29:30 +01:00
|
|
|
#include <cstdint>
|
|
|
|
|
2021-12-03 15:37:49 +01:00
|
|
|
#include "fsfw/returnvalues/FwClassIds.h"
|
2022-08-16 12:48:22 +02:00
|
|
|
#include "fsfw/returnvalues/returnvalue.h"
|
2021-12-03 15:37:49 +01:00
|
|
|
|
|
|
|
namespace cfdp {
|
|
|
|
|
2022-08-09 18:51:44 +02:00
|
|
|
static constexpr char CFDP_VERSION_2_NAME[] = "CCSDS 727.0-B-5";
|
|
|
|
|
|
|
|
// Second version of the protocol, only this one is supported here
|
|
|
|
static constexpr uint8_t CFDP_VERSION_2 = 0b001;
|
|
|
|
static constexpr uint8_t VERSION_BITS = CFDP_VERSION_2 << 5;
|
2021-12-03 15:37:49 +01:00
|
|
|
|
|
|
|
static constexpr uint8_t CFDP_CLASS_ID = CLASS_ID::CFDP;
|
|
|
|
|
2022-08-22 15:02:16 +02:00
|
|
|
static constexpr ReturnValue_t INVALID_TLV_TYPE = returnvalue::makeCode(CFDP_CLASS_ID, 1);
|
2022-09-08 11:53:06 +02:00
|
|
|
static constexpr ReturnValue_t INVALID_DIRECTIVE_FIELD = returnvalue::makeCode(CFDP_CLASS_ID, 2);
|
2022-08-22 15:02:16 +02:00
|
|
|
static constexpr ReturnValue_t INVALID_PDU_DATAFIELD_LEN = returnvalue::makeCode(CFDP_CLASS_ID, 3);
|
2021-12-03 15:37:49 +01:00
|
|
|
static constexpr ReturnValue_t INVALID_ACK_DIRECTIVE_FIELDS =
|
2022-08-15 20:28:16 +02:00
|
|
|
returnvalue::makeCode(CFDP_CLASS_ID, 4);
|
2021-12-03 15:37:49 +01:00
|
|
|
//! Can not parse options. This can also occur because there are options
|
|
|
|
//! available but the user did not pass a valid options array
|
|
|
|
static constexpr ReturnValue_t METADATA_CANT_PARSE_OPTIONS =
|
2022-08-15 20:28:16 +02:00
|
|
|
returnvalue::makeCode(CFDP_CLASS_ID, 5);
|
2022-08-22 15:02:16 +02:00
|
|
|
static constexpr ReturnValue_t NAK_CANT_PARSE_OPTIONS = returnvalue::makeCode(CFDP_CLASS_ID, 6);
|
2021-12-03 15:37:49 +01:00
|
|
|
static constexpr ReturnValue_t FINISHED_CANT_PARSE_FS_RESPONSES =
|
2022-09-08 11:53:06 +02:00
|
|
|
returnvalue::makeCode(CFDP_CLASS_ID, 7);
|
2021-12-03 15:37:49 +01:00
|
|
|
static constexpr ReturnValue_t FILESTORE_REQUIRES_SECOND_FILE =
|
2022-08-15 20:28:16 +02:00
|
|
|
returnvalue::makeCode(CFDP_CLASS_ID, 8);
|
2021-12-03 15:37:49 +01:00
|
|
|
//! Can not parse filestore response because user did not pass a valid instance
|
|
|
|
//! or remaining size is invalid
|
|
|
|
static constexpr ReturnValue_t FILESTORE_RESPONSE_CANT_PARSE_FS_MESSAGE =
|
2022-08-15 20:28:16 +02:00
|
|
|
returnvalue::makeCode(CFDP_CLASS_ID, 9);
|
2022-09-08 11:53:06 +02:00
|
|
|
static constexpr ReturnValue_t INVALID_PDU_FORMAT = returnvalue::makeCode(CFDP_CLASS_ID, 10);
|
2021-12-03 15:37:49 +01:00
|
|
|
|
|
|
|
//! Checksum types according to the SANA Checksum Types registry
|
|
|
|
//! https://sanaregistry.org/r/checksum_identifiers/
|
2022-09-15 18:41:15 +02:00
|
|
|
enum ChecksumType {
|
2022-02-02 10:29:30 +01:00
|
|
|
// Modular legacy checksum
|
|
|
|
MODULAR = 0,
|
|
|
|
CRC_32_PROXIMITY_1 = 1,
|
|
|
|
CRC_32C = 2,
|
|
|
|
CRC_32 = 3,
|
|
|
|
NULL_CHECKSUM = 15
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
enum PduType : uint8_t { FILE_DIRECTIVE = 0, FILE_DATA = 1 };
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
enum TransmissionMode : uint8_t { ACKNOWLEDGED = 0, UNACKNOWLEDGED = 1 };
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-08-03 13:15:49 +02:00
|
|
|
enum SegmentMetadataFlag : bool { NOT_PRESENT = false, PRESENT = true };
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-08-03 13:15:49 +02:00
|
|
|
enum Direction : uint8_t { TOWARDS_RECEIVER = 0, TOWARDS_SENDER = 1 };
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
enum SegmentationControl : bool {
|
2022-08-03 13:15:49 +02:00
|
|
|
NO_RECORD_BOUNDARIES_PRESERVATION = false,
|
|
|
|
RECORD_BOUNDARIES_PRESERVATION = true
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
enum WidthInBytes : uint8_t {
|
|
|
|
// Only those are supported for now
|
|
|
|
ONE_BYTE = 1,
|
|
|
|
TWO_BYTES = 2,
|
|
|
|
FOUR_BYTES = 4,
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
enum FileDirective : uint8_t {
|
2022-02-02 10:29:30 +01:00
|
|
|
INVALID_DIRECTIVE = 0x0f,
|
2022-09-08 11:53:06 +02:00
|
|
|
// The _DIRECTIVE suffix is mandatory here because of some nameclash!
|
2022-02-02 10:29:30 +01:00
|
|
|
EOF_DIRECTIVE = 0x04,
|
|
|
|
FINISH = 0x05,
|
|
|
|
ACK = 0x06,
|
|
|
|
METADATA = 0x07,
|
|
|
|
NAK = 0x08,
|
|
|
|
PROMPT = 0x09,
|
|
|
|
KEEP_ALIVE = 0x0c
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
enum ConditionCode : uint8_t {
|
2022-02-02 10:29:30 +01:00
|
|
|
NO_CONDITION_FIELD = 0xff,
|
|
|
|
NO_ERROR = 0b0000,
|
|
|
|
POSITIVE_ACK_LIMIT_REACHED = 0b0001,
|
|
|
|
KEEP_ALIVE_LIMIT_REACHED = 0b0010,
|
|
|
|
INVALID_TRANSMISSION_MODE = 0b0011,
|
|
|
|
FILESTORE_REJECTION = 0b0100,
|
|
|
|
FILE_CHECKSUM_FAILURE = 0b0101,
|
|
|
|
FILE_SIZE_ERROR = 0b0110,
|
|
|
|
NAK_LIMIT_REACHED = 0b0111,
|
|
|
|
INACTIVITY_DETECTED = 0b1000,
|
|
|
|
CHECK_LIMIT_REACHED = 0b1010,
|
|
|
|
UNSUPPORTED_CHECKSUM_TYPE = 0b1011,
|
|
|
|
SUSPEND_REQUEST_RECEIVED = 0b1110,
|
|
|
|
CANCEL_REQUEST_RECEIVED = 0b1111
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
enum FaultHandlerCode {
|
2022-08-09 14:05:43 +02:00
|
|
|
RESERVED = 0b0000,
|
|
|
|
NOTICE_OF_CANCELLATION = 0b0001,
|
|
|
|
NOTICE_OF_SUSPENSION = 0b0010,
|
|
|
|
IGNORE_ERROR = 0b0011,
|
|
|
|
ABANDON_TRANSACTION = 0b0100
|
|
|
|
};
|
|
|
|
|
2021-12-03 15:37:49 +01:00
|
|
|
enum AckTransactionStatus {
|
2022-02-02 10:29:30 +01:00
|
|
|
UNDEFINED = 0b00,
|
|
|
|
ACTIVE = 0b01,
|
|
|
|
TERMINATED = 0b10,
|
|
|
|
UNRECOGNIZED = 0b11
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
2022-08-09 21:03:56 +02:00
|
|
|
enum FileDeliveryCode { DATA_COMPLETE = 0, DATA_INCOMPLETE = 1 };
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-08-09 21:03:56 +02:00
|
|
|
enum FileDeliveryStatus {
|
2022-02-02 10:29:30 +01:00
|
|
|
DISCARDED_DELIBERATELY = 0,
|
|
|
|
DISCARDED_FILESTORE_REJECTION = 1,
|
|
|
|
RETAINED_IN_FILESTORE = 2,
|
|
|
|
FILE_STATUS_UNREPORTED = 3
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
2022-08-03 13:15:49 +02:00
|
|
|
enum PromptResponseRequired : uint8_t { PROMPT_NAK = 0, PROMPT_KEEP_ALIVE = 1 };
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
enum TlvType : uint8_t {
|
2022-02-02 10:29:30 +01:00
|
|
|
FILESTORE_REQUEST = 0x00,
|
|
|
|
FILESTORE_RESPONSE = 0x01,
|
|
|
|
MSG_TO_USER = 0x02,
|
|
|
|
FAULT_HANDLER = 0x04,
|
|
|
|
FLOW_LABEL = 0x05,
|
|
|
|
ENTITY_ID = 0x06,
|
|
|
|
INVALID_TLV = 0xff,
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
enum RecordContinuationState {
|
2022-02-02 10:29:30 +01:00
|
|
|
NO_START_NO_END = 0b00,
|
|
|
|
CONTAINS_START_NO_END = 0b01,
|
|
|
|
CONTAINS_END_NO_START = 0b10,
|
|
|
|
CONTAINS_START_AND_END = 0b11
|
2021-12-03 15:37:49 +01:00
|
|
|
};
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
} // namespace cfdp
|
2021-12-03 15:37:49 +01:00
|
|
|
|
|
|
|
#endif /* FSFW_SRC_FSFW_CFDP_PDU_DEFINITIONS_H_ */
|