forked from 0xha0/datalink_repo
103 lines
2.6 KiB
C
103 lines
2.6 KiB
C
/*****************************************************************************/
|
|
/**
|
|
* 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 <stdint.h>
|
|
#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_ */
|