#ifndef CCSDS_H_INCLUDED #define CCSDS_H_INCLUDED #define CCSDS_TELEMETRY_HEADER_LENGTH 16+4 #define CCSDS_TELECOMMAND_HEADER_LENGTH 10+4 #define CCSDS_TELECOMMAND_MAX_PACKET_LENGTH 248 #define CCSDS_PROCESS_ID 11 #define CCSDS_PACKET_CATEGORY 12 #define CCSDS_ERR_PID -1 #define CCSDS_ERR_CAT -2 #define CCSDS_ERR_LENGTH -3 #define CCSDS_ERR_TYPE -4 #define CCSDS_ERR_SUBTYPE -5 #define CCSDS_ERR_SRC -6 #define CCSDS_ERR_CRC -7 #define CCSDS_TM_VALID 1 struct ccsdsTelemetrySourcePacketHeader_str { unsigned char targetLogicalAddress; unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; unsigned char packetID[2]; unsigned char packetSequenceControl[2]; unsigned char packetLength[2]; unsigned char dataFieldHeader[10]; }; typedef struct ccsdsTelemetrySourcePacketHeader_str ccsdsTelemetrySourcePacketHeader_t; struct ccsdsTelecommandSourcePacketHeader_str { unsigned char targetLogicalAddress; unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; unsigned char packetID[2]; unsigned char packetSequenceControl[2]; unsigned char packetLength[2]; unsigned char dataFieldHeader[4]; }; typedef struct ccsdsTelemetrySourcePacketHeader_str ccsdsTelecommandSourcePacketHeader_t; // initialize the ccsds telemetry header ccsdsTelemetrySourcePacketHeader_t ccsdsTelemetryHeader; #define INIT_CCSDS_TELEMETRY_HEADER ccsdsTelemetryHeader.targetLogicalAddress = 0x21; \ ccsdsTelemetryHeader.protocolIdentifier = 0x02; \ ccsdsTelemetryHeader.reserved = 0x00; \ ccsdsTelemetryHeader.userApplication = 0x00; \ ccsdsTelemetryHeader.packetID[0] = 0x08; \ ccsdsTelemetryHeader.packetID[1] = 0xbc; \ ccsdsTelemetryHeader.packetSequenceControl[0] = 0xc0; \ ccsdsTelemetryHeader.packetSequenceControl[1] = 0x00; \ ccsdsTelemetryHeader.packetLength[0] = 0x00; \ ccsdsTelemetryHeader.packetLength[1] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[0] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[1] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[2] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[3] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[4] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[5] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[6] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[7] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[8] = 0x00; \ ccsdsTelemetryHeader.dataFieldHeader[9] = 0x00; #endif // CCSDS_H_INCLUDED