12#ifndef _TMTC_CONTROL_H_
13#define _TMTC_CONTROL_H_
16#include "configCCSDS.h"
27#ifdef configTMTC_MAX_TC_CHANNELS
28#define TMTC_MAX_TC_CHANNELS configTMTC_MAX_TC_CHANNELS
30#define TMTC_MAX_TC_CHANNELS 1
33#ifdef configTMTC_MAX_TM_CHANNELS
34#define TMTC_MAX_TM_CHANNELS configTMTC_MAX_TM_CHANNELS
36#define TMTC_MAX_TM_CHANNELS 8
39#ifdef configUSE_CLTU_SUPPORT
40#define USE_CLTU_SUPPORT configUSE_CLTU_SUPPORT
42#define USE_CLTU_SUPPORT 0
45#ifdef configTMTC_MAX_SCIDS
46#define TMTC_MAX_SCIDS configTMTC_MAX_SCIDS
48#define TMTC_MAX_SCIDS 2
51#ifdef configFARM_SLIDING_WINDOW_WIDTH
52#define FARM_SLIDING_WINDOW_WIDTH configFARM_SLIDING_WINDOW_WIDTH
54#define FARM_SLIDING_WINDOW_WIDTH 16
65 typedef void (TTfTcCallback)(
void *p_Context,
const uint8_t *pu8_Data,
const uint16_t u16_DataSize);
66 typedef void (TTfTmOcfCallback)(
const uint8_t u8_VirtualChannelID,
void *p_Context,
const uint32_t u32_Ocf);
69 static const uint8_t MaxTcChannels = TMTC_MAX_TC_CHANNELS;
70 static const uint8_t MaxTmChannels = TMTC_MAX_TM_CHANNELS;
74 uint8_t mu8_NumberOfSCIDs;
75 uint16_t mau16_SCIDs[TMTC_MAX_SCIDS];
80 uint8_t mau8_TcSpBuffer[SP_MAX_DATA_SIZE];
81 uint8_t mau8_TfTcBuffer[TC_TF_MAX_SIZE];
82 uint8_t mau8_FrameSeqNumber[MaxTcChannels];
85#if USE_CLTU_SUPPORT == 1
86 uint8_t mau8_CltuBuffer[CLTU_MAX_SIZE];
91 void *p_TfTmOcfContext;
92 TTfTmOcfCallback *p_TfTmOcfCallback;
93 } ma_TmCOP[MaxTmChannels];
102 uint8_t u8_FarmBCounter;
103 uint8_t u8_NextFrameSeqNumber;
104 } ma_COP[MaxTcChannels];
107 uint8_t mau8_TmVCFC[MaxTmChannels];
110 void *mp_TfTcContext;
111 TTfTcCallback *mp_TfTcCallback;
115 uint16_t mu16_ScIdErrorCount;
116 uint16_t mu16_VCFCErrorCount;
117 uint16_t mu16_MCFCErrorCount;
122 TmTcControl(
const uint16_t *pu16_SCIDs = NULL,
const uint8_t u8_NumberOfSCIDs = 0,
123 void *p_TfTcContext = NULL, TTfTcCallback *p_TfTcCallback = NULL,
124 void *p_VC0SpContext = NULL, SpacePacket::TSpCallback *p_VC0SpCallback = NULL);
126 int32_t setSCIDs(
const uint16_t *pu16_SCIDs,
const uint8_t u8_NumberOfSCIDs);
128 int32_t setTcCallback(
void *p_TfTcContext, TTfTcCallback *p_TfTcCallback);
130 int32_t setTmOcfCallback(
const uint8_t u8_VirtualChannelID,
void *p_TfTmContext, TTfTmOcfCallback *p_TfTmOcfCallback);
132 int32_t setTmCallback(
const uint8_t u8_VirtualChannelID,
133 void *p_SpContext, SpacePacket::TSpCallback *p_SpCallback);
135 uint16_t getTmScIdErrorCount(
void);
136 uint16_t getTmMCFCErrorCount(
void);
137 uint16_t getTmVCFCErrorCount(
void);
138 uint16_t getTmSyncErrorCount(
void);
139 uint16_t getTmChecksumErrorCount(
void);
140 uint16_t getTmOverflowErrorCount(
void);
141 void clearErrorCounters(
void);
147 void processTfTm(
const uint8_t *pu8_Data,
const uint16_t u16_DataSize);
149 static void TfTmCallback(
void *p_Context,
const uint16_t u16_SpacecraftID,
const uint8_t u8_VirtualChannelID,
150 const uint8_t u8_MasterChannelFrameCount,
const uint8_t u8_VirtualChannelFrameCount,
151 const bool b_TFSecHdrFlag,
const uint16_t u16_FirstHdrPtr,
152 const uint8_t *pu8_Data,
const uint16_t u16_DataSize,
153 const uint32_t u32_OCF);
156 void _TfTmCallback(
const uint16_t u16_SpacecraftID,
const uint8_t u8_VirtualChannelID,
157 const uint8_t u8_MasterChannelFrameCount,
const uint8_t u8_VirtualChannelFrameCount,
158 const bool b_TFSecHdrFlag,
const uint16_t u16_FirstHdrPtr,
159 const uint8_t *pu8_Data,
const uint16_t u16_DataSize,
160 const uint32_t u32_OCF);
167 int32_t sendTc(
const uint8_t u8_VirtualChannelID,
const bool b_BypassFlag,
const uint16_t u16_APID,
const uint16_t u16_ApidSeqNr,
168 const uint8_t *pu8_Data,
const uint16_t u16_DataSize);
170 int32_t sendInitAD(
const uint8_t u8_VirtualChannelID);
173 void _TfTmCallback(
const bool b_BypassFlag,
const bool b_CtrlCmdFlag,
174 const uint16_t u16_SpacecraftID,
const uint8_t u8_VirtualChannelID,
175 const uint8_t u8_FrameSeqNumber,
176 const uint8_t *pu8_Data,
const uint16_t u16_DataSize);
178 void _createAndSendTf(
const uint8_t u8_VirtualChannelID,
const bool b_BypassFlag,
const bool b_CtrlCmFlag,
const uint8_t *pu8_Data,
const uint16_t u16_DataSize);
Include file of the Communications Link Control Word (CLCW) class.
Include file of the Communications Link Transmission Unit (CLTU) class.
Include file of the Space Packet (SP) class.
Include file of the Transfer Frame (TC) class.
Include file of the Transfer Frame (TM) class.
Class for handling the Space Packets as described in CCSDS 133.0-B-2.
Definition: ccsds_spacepacket.h:59
Class for handling the Transfer Frames for Telemetry as described in CCSDS 132.0-B-2.
Definition: ccsds_transferframe_tm.h:83
Definition: tmtc_control.h:63