CCSDS
ccsds_spacepacket.h
Go to the documentation of this file.
1
12#ifndef _CCSDS_SPACEPACKET_H_
13#define _CCSDS_SPACEPACKET_H_
14
15/****************************************************************/
16/* SpacePackets according to */
17/* */
18/* - CCSDS 133.0-B-2, - Space Packet Protocol */
19/* https://public.ccsds.org/Pubs/133x0b2e1.pdf */
20/* */
21/* Limitations: */
22/* - CCSDS secondary header format is not supportd */
23/* */
24/****************************************************************/
25
26#include "configCCSDS.h"
27
28#ifdef configSP_MAX_DATA_SIZE
29#define SP_MAX_DATA_SIZE configSP_MAX_DATA_SIZE
30#else
31#define SP_MAX_DATA_SIZE 496
32#endif
33
34
35
36#define SP_HEADER_SIZE 6
37#define SP_MAX_TOTAL_SIZE (SP_HEADER_SIZE+SP_MAX_DATA_SIZE)
38
39
40
41namespace CCSDS
42{
43
59 {
60 public:
61
66 {
67 TM = 0,
68 TC = 1
69 };
70
71
76 {
80 Unsegmented = 0x3
81 };
82
83
100 typedef void (TSpCallback)(void *p_SpContext, const uint8_t u8_PacketType,
101 const uint8_t u8_SequenceFlags, const uint16_t u16_APID,
102 const uint16_t u16_SequenceCount, const bool b_SecHeader,
103 const uint8_t *pu8_PacketData, const uint16_t u16_PacketDataLength);
104
105 private:
106 const static uint8_t SpPacketVersion = 0;
107 const static uint8_t PrimaryHdrSize = SP_HEADER_SIZE;
108
109 uint32_t mu32_Index;
110 uint8_t mu8_PacketVersionNumber;
111 enum PacketType me_PacketType;
112 bool mb_SecHdrFlag;
113 uint16_t mu16_APID;
114 enum SequenceFlags me_SequenceFlags;
115 uint16_t mu16_PacketSequenceCount;
116 uint16_t mu16_PacketDataLength;
117 uint8_t au8_PacketData[SP_MAX_DATA_SIZE];
118
119 bool mb_Overflow;
120 uint16_t mu16_SyncErrorCount;
121 uint16_t mu16_OverflowErrorCount;
122
123 void *mp_SpContext;
124 TSpCallback *mp_SpCallback;
125
126
127 public:
128 SpacePacket(void *p_SpContext = NULL, TSpCallback *mp_SpCallback = NULL);
129
130 void setCallback(void *p_SpContext, TSpCallback *mp_SpCallback);
131
132
133 // SP generation
134 static uint32_t create(uint8_t *pu8_Buffer, const uint32_t u32_BufferSize,
135 const PacketType e_PacketType, const SequenceFlags e_SequenceFlags, const uint16_t u16_APID, const uint16_t u16_SequenceCount,
136 const uint8_t *pu8_PacketData, const uint16_t u16_PacketDataLength); // without secondary header
137
138 static uint32_t create(uint8_t *pu8_Buffer, const uint32_t u32_BufferSize,
139 const PacketType e_PacketType, const SequenceFlags e_SequenceFlags, const uint16_t u16_APID, const uint16_t u16_SequenceCount,
140 const uint8_t *pu8_SecondaryHeaderData, const uint16_t u16_SecondaryHeaderLength,
141 const uint8_t *pu8_PacketData, const uint16_t u16_PacketDataLength);
142
143 static uint32_t createIdle(uint8_t *pu8_Buffer, const uint32_t u32_BufferSize,
144 const uint16_t u16_SequenceCount, const uint16_t u16_TargetPacketSize);
145
146 // sp processing
147 int32_t process(const uint8_t *pu8_Buffer, const uint32_t u32_BufferSize);
148 int32_t reset(void);
149
150 uint16_t getSyncErrorCount(void);
151 uint16_t getOverflowErrorCount(void);
152 void clearErrorCounters(void);
153
154 private:
155 static int32_t _create_primary_header(uint8_t *pu8_Buffer,
156 const PacketType e_PacketType, const SequenceFlags e_SequenceFlags, const uint16_t u16_APID, const uint16_t u16_SequenceCount, const bool b_SecHeader,
157 const uint32_t u32_PacketDataLength);
158 };
159
160}
161
162#endif // _CCSDS_SPACEPACKET_H_
Class for handling the Space Packets as described in CCSDS 133.0-B-2.
Definition: ccsds_spacepacket.h:59
SequenceFlags
Definition: ccsds_spacepacket.h:76
@ LastSegment
Definition: ccsds_spacepacket.h:79
@ FirstSegment
Definition: ccsds_spacepacket.h:78
@ Unsegmented
Definition: ccsds_spacepacket.h:80
@ ContinuationSegment
Definition: ccsds_spacepacket.h:77
int32_t process(const uint8_t *pu8_Buffer, const uint32_t u32_BufferSize)
The given upstream data is parsed for SpacePackets.
Definition: ccsds_spacepacket.cpp:222
static uint32_t create(uint8_t *pu8_Buffer, const uint32_t u32_BufferSize, const PacketType e_PacketType, const SequenceFlags e_SequenceFlags, const uint16_t u16_APID, const uint16_t u16_SequenceCount, const uint8_t *pu8_PacketData, const uint16_t u16_PacketDataLength)
Creates a Space Packet and writes it into the given buffer.
Definition: ccsds_spacepacket.cpp:81
SpacePacket(void *p_SpContext=NULL, TSpCallback *mp_SpCallback=NULL)
Construct a new SpacePacket object.
Definition: ccsds_spacepacket.cpp:31
void() TSpCallback(void *p_SpContext, const uint8_t u8_PacketType, const uint8_t u8_SequenceFlags, const uint16_t u16_APID, const uint16_t u16_SequenceCount, const bool b_SecHeader, const uint8_t *pu8_PacketData, const uint16_t u16_PacketDataLength)
Declaration of the callback which shall be called if a complete space packet was received.
Definition: ccsds_spacepacket.h:100
void setCallback(void *p_SpContext, TSpCallback *mp_SpCallback)
Overwrites the context pointer and callback which were set using the constructor.
Definition: ccsds_spacepacket.cpp:56
uint16_t getOverflowErrorCount(void)
Returns the number of overflow errors.
Definition: ccsds_spacepacket.cpp:311
int32_t reset(void)
Resets the scanning for a space packet.
Definition: ccsds_spacepacket.cpp:199
static uint32_t createIdle(uint8_t *pu8_Buffer, const uint32_t u32_BufferSize, const uint16_t u16_SequenceCount, const uint16_t u16_TargetPacketSize)
Creates an Idle Space Packet and writes into the given buffer.
Definition: ccsds_spacepacket.cpp:160
uint16_t getSyncErrorCount(void)
Returns the number of sync errors.
Definition: ccsds_spacepacket.cpp:292
PacketType
Definition: ccsds_spacepacket.h:66
@ TC
Definition: ccsds_spacepacket.h:68
@ TM
Definition: ccsds_spacepacket.h:67
void clearErrorCounters(void)
Clears all error counters (Sync Error and Overflow Error)
Definition: ccsds_spacepacket.cpp:321