/*****************************************************************************/ /** * Description: A simplified version of timesync for datalink 814 (Dijian) * * Date: 2021-12-04 16:32 * LastEditors: Fan Hao * LastEditTime: 2022-07-06 16:32 * Revisions: Rev 0.0 * History: * [2022-07-06]: Initial version. * [2021-12-04]: Initial version. * * Copyright(c) 2021 Beijing Institute of Technology. * Lab of Communication and Networking * ******************************************************************************/ #ifndef RTT_H_ #define RTT_H_ /***************************** Include Files *********************************/ #include #include "linklayer814.h" #include "linklayer814_types.h" /************************** Constant Definitions *****************************/ #define MAX_FREQ_EST_NUM 128 // 32bit word #define SVC_FREQ_EST_NUM 512 // byte #define MGMT_FREQ_EST_NUM 512 // byte #define BISAR_FREQ_EST_NUM 480 // byte #define CXR_FREQ 3800000000.0 // Hz #define LIGHT_SPPED_AIR 299702547.0 // m/s #define LIGHT_SPPED_VAC 299792458.0 // m/s #define RCV2FSYNC_CLOCKS 0 // clocks from frame sync time to receive time #define PHYRSP_DELAY_CLOCKS 0// clocks from frame sync time to receive time //#define PHY_SYNCT2FEND_200K 904052L //#define PHY_SYNCT2FEND_200K 924232L #define PHY_SYNCT2FEND_200K 905052L #define RTT_TIME_NONE UINT32_MAX #define RTT_DOPPLER_NONE UINT32_MAX /***************** Macros (Inline Functions) Definitions *********************/ /**************************** Type Definitions *******************************/ // TODO: Multi-node RTT typedef struct { L2_TIME_WORD Tt1; L2_TIME_WORD Tr1; L2_TIME_WORD Tt2; L2_TIME_WORD Tr2; L2_TIME_WORD Tt3; L2_TIME_WORD Tr3; L2_TIME_WORD Tt4; L2_TIME_WORD Tr4; int32_t dopplerR1; int32_t dopplerR2; int32_t dopplerR3; int32_t dopplerR4; L2_TIME_WORD TroundA; L2_TIME_WORD TreplyA; L2_TIME_WORD TroundB; L2_TIME_WORD TreplyB; int32_t rttAdj; } RTT_RECORD; typedef enum { RTT_NONE_STAGE = 0, RTT_REQ1 = 1, RTT_RSP1 = 2, RTT_REQ2 = 3, RTT_RSP2 = 4, // Rtt Stages } L2_RTT_SATGE; typedef struct { L2_RCD rttStatge; bool isR1Valid; bool isR2Valid; bool isR3Valid; bool isR4Valid; RTT_RECORD rttRecord; } L2_RTT_FSM; typedef enum { RTT_NONE = 0, RTT_SEND = 1, RTT_RCV = 2, } L2_RTT_TOR; /************************** Function Prototypes ******************************/ // RTT L2_RTT_SATGE RTT_GetLastStage(L2_RTT_FSM* rttFsmPtr); L2_RTT_SATGE RTT_GetCurrentStage(L2_RTT_FSM* rttFsmPtr); L2_RTT_SATGE RTT_GetNextStage(L2_RTT_FSM* rttFsmPtr); #endif /* RTT_H_ */