Compare commits
78
Commits
246d54755a
...
alpha-0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c45d1e5b8 | ||
|
|
9412f65c3c | ||
|
|
c0ebef41ee | ||
|
|
a2c6ff83f7 | ||
|
|
73b8ee8bc5 | ||
|
|
d8fbdfb8e6 | ||
|
|
ff87644416 | ||
|
|
adcf7200bc | ||
|
|
f71ce6bd94 | ||
|
|
c8b0ca74a3 | ||
|
|
1a413e4d06 | ||
|
|
b7a337f821 | ||
|
|
38b7f6b985 | ||
|
|
4457eb8bc1 | ||
|
|
0248c185e4 | ||
|
|
e81be59bbb | ||
|
|
d0aad73ce5 | ||
|
|
c384bf9e9d | ||
|
|
752e9b3081 | ||
|
|
81fdd612ce | ||
|
|
ad3a6be9b1 | ||
|
|
6a680a1291 | ||
|
|
1f98662ee8 | ||
|
|
73f236bbd3 | ||
|
|
223a772582 | ||
|
|
3a99da8b76 | ||
|
|
d9ce3ae207 | ||
|
|
29d5ec32cb | ||
|
|
45080efd34 | ||
|
|
b5acfcf827 | ||
|
|
bf2a199f79 | ||
|
|
15e0fc2e39 | ||
|
|
bd51428bca | ||
|
|
d15dd7ece5 | ||
|
|
e308a61abc | ||
|
|
b9e055c039 | ||
|
|
2700e7442e | ||
|
|
653483a68e | ||
|
|
d310647fa6 | ||
|
|
d2eee6548f | ||
|
|
28a2767efc | ||
|
|
3dbf893347 | ||
|
|
070face8d3 | ||
|
|
bfa0d40996 | ||
|
|
9fcfcce584 | ||
|
|
f8dec485c5 | ||
|
|
b27bc16ab0 | ||
|
|
99e564476b | ||
|
|
4d5a4ec0da | ||
|
|
2f63058882 | ||
|
|
413c984e85 | ||
|
|
448895866a | ||
|
|
aba91e02b0 | ||
|
|
56d0fd80d0 | ||
|
|
6acd4b1ca0 | ||
|
|
f4175cd7b5 | ||
|
|
678bb7f393 | ||
|
|
085e5cea93 | ||
|
|
3916b18a6f | ||
|
|
74d20c1010 | ||
|
|
25d89b30a1 | ||
|
|
632b1ec636 | ||
|
|
9f75b519e0 | ||
|
|
7e38cf59e2 | ||
|
|
86d089e2b4 | ||
|
|
5cefee63f8 | ||
|
|
1647f4b97c | ||
|
|
1b1790657a | ||
|
|
da212a47e7 | ||
|
|
49e962612e | ||
|
|
64c116dbe0 | ||
|
|
a13ded2a89 | ||
|
|
949d0d7049 | ||
|
|
ec56ec6f6f | ||
|
|
f4f9bd0125 | ||
|
|
06cac2a2ed | ||
|
|
a4106b997c | ||
|
|
3463fab14c |
@@ -51,3 +51,7 @@ modules.order
|
|||||||
Module.symvers
|
Module.symvers
|
||||||
Mkfile.old
|
Mkfile.old
|
||||||
dkms.conf
|
dkms.conf
|
||||||
|
|
||||||
|
# MacOS .DS_Store file
|
||||||
|
**/.DS_Store
|
||||||
|
**/._.DS_Store
|
||||||
@@ -93,9 +93,6 @@
|
|||||||
#if !defined(DATALINK_ENABLE_AUTOTIMESYNC)
|
#if !defined(DATALINK_ENABLE_AUTOTIMESYNC)
|
||||||
#warning To enbale bit error rate test, auto time-sync should be enabled...
|
#warning To enbale bit error rate test, auto time-sync should be enabled...
|
||||||
#endif
|
#endif
|
||||||
#if defined(DATALINK_ENABLE_AUTORECONNECT)
|
|
||||||
#error Do not support auto reconnnect in bit error rate test mode...
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -88,14 +88,14 @@ L2_CONFIG linkConfig = {
|
|||||||
.tmcInstPtr = NULL
|
.tmcInstPtr = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
// static L2_CONFIG linkConfig = {
|
// L2_CONFIG linkConfig = {
|
||||||
// .myType = L2_NODE_MEMBER,
|
// .myType = L2_NODE_MEMBER,
|
||||||
// .clustId = 1,
|
// .clustId = 1,
|
||||||
// .myId = 2,
|
// .myId = 2,
|
||||||
// .headId = 1,
|
// .headId = 1,
|
||||||
// .bkpHeadId = 0,
|
// .bkpHeadId = 0,
|
||||||
// .netScale = 2,
|
// .netScale = 2,
|
||||||
// .phyInstPtr = NULL, // pyhsical layer reference
|
// .phyInstPtr = NULL, // physical layer reference
|
||||||
// .tmcInstPtr = NULL
|
// .tmcInstPtr = NULL
|
||||||
// };
|
// };
|
||||||
|
|
||||||
@@ -359,8 +359,8 @@ void ScuTimer_IntrHandler(void *context)
|
|||||||
xdesc = (struct xil_timer_desc *)(logTmPtr->extra);
|
xdesc = (struct xil_timer_desc *)(logTmPtr->extra);
|
||||||
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
|
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
|
||||||
{
|
{
|
||||||
// Update log
|
// Refresh log
|
||||||
Phy_UpdateHwSate(phyInstPtr);
|
Phy_RefreshHwSate(phyInstPtr);
|
||||||
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
|
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -190,9 +190,6 @@ typedef enum
|
|||||||
#if !defined(DATALINK_ENABLE_AUTOTIMESYNC)
|
#if !defined(DATALINK_ENABLE_AUTOTIMESYNC)
|
||||||
#warning To enbale bit error rate test, auto time-sync should be enabled...
|
#warning To enbale bit error rate test, auto time-sync should be enabled...
|
||||||
#endif
|
#endif
|
||||||
#if defined(DATALINK_ENABLE_AUTORECONNECT)
|
|
||||||
#error Do not support auto reconnnect in bit error rate test mode...
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif //__APP_CONFIG_H_
|
#endif //__APP_CONFIG_H_
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
/* Stringify */
|
/* Stringify */
|
||||||
#define STR(x) #x
|
#define STR(x) #x
|
||||||
|
|
||||||
#define _DEBUG_LEVEL 3
|
// #define _DEBUG_LEVEL 3
|
||||||
|
|
||||||
#if _DEBUG_LEVEL > 0
|
#if _DEBUG_LEVEL > 0
|
||||||
#define DBG_PRINT(...) printf(__VA_ARGS__)
|
#define DBG_PRINT(...) printf(__VA_ARGS__)
|
||||||
|
|||||||
@@ -84,14 +84,14 @@ L2_CONFIG linkConfig = {
|
|||||||
.tmcInstPtr = NULL
|
.tmcInstPtr = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
// static L2_CONFIG linkConfig = {
|
// L2_CONFIG linkConfig = {
|
||||||
// .myType = L2_NODE_MEMBER,
|
// .myType = L2_NODE_MEMBER,
|
||||||
// .clustId = 1,
|
// .clustId = 1,
|
||||||
// .myId = 2,
|
// .myId = 2,
|
||||||
// .headId = 1,
|
// .headId = 1,
|
||||||
// .bkpHeadId = 0,
|
// .bkpHeadId = 0,
|
||||||
// .netScale = 2,
|
// .netScale = 2,
|
||||||
// .phyInstPtr = NULL, // pyhsical layer reference
|
// .phyInstPtr = NULL, // physical layer reference
|
||||||
// .tmcInstPtr = NULL
|
// .tmcInstPtr = NULL
|
||||||
// };
|
// };
|
||||||
|
|
||||||
@@ -360,8 +360,8 @@ void ScuTimer_IntrHandler(void *context)
|
|||||||
xdesc = (struct xil_timer_desc *)(logTmPtr->extra);
|
xdesc = (struct xil_timer_desc *)(logTmPtr->extra);
|
||||||
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
|
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
|
||||||
{
|
{
|
||||||
// Update log
|
// Refresh log
|
||||||
Phy_UpdateHwSate(phyInstPtr);
|
Phy_RefreshHwSate(phyInstPtr);
|
||||||
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
|
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -374,7 +374,7 @@ void ScuTimer_IntrHandler(void *context)
|
|||||||
/**
|
/**
|
||||||
* @brief Hardware_SwitchFreq
|
* @brief Hardware_SwitchFreq
|
||||||
*
|
*
|
||||||
* @param dev
|
* @param devSysMonitor_UpdateHardwareStatus(newHwState);
|
||||||
* @param freq
|
* @param freq
|
||||||
*
|
*
|
||||||
* @return None.
|
* @return None.
|
||||||
@@ -830,7 +830,7 @@ int main(void)
|
|||||||
DBG_PRINT("Physical started...\n");
|
DBG_PRINT("Physical started...\n");
|
||||||
Phy_Start(phyInstPtr);
|
Phy_Start(phyInstPtr);
|
||||||
|
|
||||||
Linklayer_Start(linkInstPtr);
|
// Linklayer_Start(linkInstPtr);
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
@@ -846,7 +846,7 @@ int main(void)
|
|||||||
if (SystemBus_IsRsqPendding(sysbusDescPtr) && (!SystemBus_IsTxBusy(sysbusDescPtr)))
|
if (SystemBus_IsRsqPendding(sysbusDescPtr) && (!SystemBus_IsTxBusy(sysbusDescPtr)))
|
||||||
{
|
{
|
||||||
// FIXME: Required by 12 (CASC)
|
// FIXME: Required by 12 (CASC)
|
||||||
udelay(200);
|
udelay(4000);
|
||||||
Status = SystemBus_MakeResp(sysbusDescPtr);
|
Status = SystemBus_MakeResp(sysbusDescPtr);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -333,7 +333,6 @@ void L2_FrameStateUpdate(L2_INST *instPtr)
|
|||||||
PHY_INST *phyRef = instPtr->config.phyInstPtr;
|
PHY_INST *phyRef = instPtr->config.phyInstPtr;
|
||||||
bool isValid;
|
bool isValid;
|
||||||
L2_FRAME_TYPE recvType = L2_GetLastOptFrameType(instPtr);
|
L2_FRAME_TYPE recvType = L2_GetLastOptFrameType(instPtr);
|
||||||
L2_FRAME_TYPE sendType = L2_GetNextFrameType(instPtr);
|
|
||||||
// Update frame state.
|
// Update frame state.
|
||||||
if (Phy_IsFrameValid(phyRef) == false)
|
if (Phy_IsFrameValid(phyRef) == false)
|
||||||
{
|
{
|
||||||
@@ -347,7 +346,6 @@ void L2_FrameStateUpdate(L2_INST *instPtr)
|
|||||||
instPtr->log.frameRecv++;
|
instPtr->log.frameRecv++;
|
||||||
|
|
||||||
// Update frame state.
|
// Update frame state.
|
||||||
// FIXME: add log
|
|
||||||
switch (recvType)
|
switch (recvType)
|
||||||
{
|
{
|
||||||
case L2_SCAN_FRAME:
|
case L2_SCAN_FRAME:
|
||||||
@@ -385,54 +383,6 @@ void L2_FrameStateUpdate(L2_INST *instPtr)
|
|||||||
L2_DataAvailUpdate(instPtr, false);
|
L2_DataAvailUpdate(instPtr, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging status.
|
|
||||||
// -- send slot status
|
|
||||||
if (instPtr->tor.curr == L2_TOR_RX)
|
|
||||||
{
|
|
||||||
instPtr->rxSlotLog.tuNo = L2_GetCurrentFrameNum(instPtr);
|
|
||||||
instPtr->rxSlotLog.slotNo = L2_GetCurrentSlotNum(instPtr);
|
|
||||||
instPtr->rxSlotLog.frameType = recvType;
|
|
||||||
memset(instPtr->rxSlotLog.payload, 0x00, sizeof(instPtr->rxSlotLog.payload));
|
|
||||||
if (isValid == true)
|
|
||||||
{
|
|
||||||
memcpy(instPtr->rxSlotLog.payload,
|
|
||||||
instPtr->recvPktData,
|
|
||||||
Phy_GetFrameLen(L2_L2frame2L1frame(recvType)));
|
|
||||||
TIME_WORD timeWrod;
|
|
||||||
Phy_GetLastReceivedFrameSyncTimeStamp(phyRef, &timeWrod);
|
|
||||||
instPtr->rxSlotLog.tmStamp = timeWrod.frac_part;
|
|
||||||
instPtr->rxSlotLog.tmStamp += (uint64_t)timeWrod.int_part * TIME_FRAC_MAX;
|
|
||||||
|
|
||||||
// Log time deviation.
|
|
||||||
instPtr->txSlotLog.tmDevi = 0; // TODO:
|
|
||||||
// Log frequency deviation
|
|
||||||
instPtr->rxSlotLog.freqDevi = (uint32_t)Phy_GetFreqEst(phyRef);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
instPtr->rxSlotLog.tmStamp = 0;
|
|
||||||
instPtr->rxSlotLog.tmDevi = 0;
|
|
||||||
instPtr->rxSlotLog.freqDevi = 0;
|
|
||||||
memset(instPtr->rxSlotLog.payload, 0x00, sizeof(instPtr->rxSlotLog.payload));
|
|
||||||
}
|
|
||||||
SysMonitor_UpdateRecvSlotLog(&(instPtr->rxSlotLog));
|
|
||||||
}
|
|
||||||
// -- send slot status
|
|
||||||
if (instPtr->tor.next == L2_TOR_TX)
|
|
||||||
{
|
|
||||||
instPtr->txSlotLog.tuNo = L2_GetCurrentFrameNum(instPtr);
|
|
||||||
instPtr->txSlotLog.slotNo = L2_GetCurrentSlotNum(instPtr);
|
|
||||||
instPtr->txSlotLog.frameType = sendType;
|
|
||||||
memset(instPtr->rxSlotLog.payload, 0x00, sizeof(instPtr->txSlotLog.payload));
|
|
||||||
memcpy(instPtr->txSlotLog.payload,
|
|
||||||
instPtr->sendPktData,
|
|
||||||
Phy_GetFrameLen(L2_L2frame2L1frame(sendType)));
|
|
||||||
instPtr->txSlotLog.tmStamp = 0;
|
|
||||||
instPtr->txSlotLog.tmDevi = 0;
|
|
||||||
instPtr->txSlotLog.freqDevi = 0;
|
|
||||||
SysMonitor_UpdateSendSlotLog(&(instPtr->txSlotLog));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -1276,25 +1226,33 @@ int32_t Linklayer_Proc(L2_INST *instPtr)
|
|||||||
// Check and execute scheduled event.
|
// Check and execute scheduled event.
|
||||||
L2_EventPoolHandler(instPtr);
|
L2_EventPoolHandler(instPtr);
|
||||||
|
|
||||||
PHY_INST* phyRef = instPtr->config.phyInstPtr;
|
|
||||||
TMC_INST* tmcRef = instPtr->config.tmcInstPtr;
|
|
||||||
|
|
||||||
TIME_WORD timeWord;
|
|
||||||
// Update Protocol log
|
|
||||||
instPtr->prtcLog.tmSys = instPtr->frameNum.last * L2_SLOTS_PER_FRAME + instPtr->slotNum.last;
|
|
||||||
instPtr->prtcLog.phySt = 0; // TODO: Update physical state.
|
|
||||||
TimeCtrl_GetCurrentTime(tmcRef, &timeWord);
|
|
||||||
instPtr->prtcLog.tmLocal = timeWord.frac_part; // us
|
|
||||||
instPtr->prtcLog.tmLocal += (uint64_t)timeWord.int_part * TIME_FRAC_MAX; // us
|
|
||||||
instPtr->prtcLog.beamNo = phyRef->beamNo.last;
|
|
||||||
instPtr->prtcLog.beamNo = phyRef->beamWd.last;
|
|
||||||
instPtr->prtcLog.stage = instPtr->mainState;
|
|
||||||
instPtr->prtcLog.recvCnt = instPtr->log.frameRecv;
|
|
||||||
instPtr->prtcLog.recvCorrect = instPtr->log.frameCorrect;
|
|
||||||
SysMonitor_UpdateProtocolLog(&(instPtr->prtcLog));
|
|
||||||
|
|
||||||
|
|
||||||
// Update link layer state.
|
// Update link layer state.
|
||||||
instPtr->mainState = instPtr->nextState;
|
instPtr->mainState = instPtr->nextState;
|
||||||
|
|
||||||
|
instPtr->linkLog.tuNum = instPtr->frameNum.curr;
|
||||||
|
instPtr->linkLog.slotNum = (uint8_t)instPtr->slotNum.curr;
|
||||||
|
instPtr->linkLog.nodeType = (instPtr->config.myType == L2_NODE_HEAD) ? 0xAA : 0xCC;
|
||||||
|
instPtr->linkLog.cxnStatus = (instPtr->cxn2Net) ? 0x11 : 0x00;
|
||||||
|
instPtr->linkLog.linkStage = (instPtr->mainState == L2_INIT_STATE) ? 0x00 : 0x11;
|
||||||
|
// TODO:
|
||||||
|
// instPtr->linkLog.recxnCnt =
|
||||||
|
// instPtr->linkLog.beamNo =
|
||||||
|
// instPtr->linkLog.beamWidth =
|
||||||
|
// instPtr->linkLog.beamAz =
|
||||||
|
// instPtr->linkLog.beamEl =
|
||||||
|
instPtr->linkLog.advTxCnt = (uint16_t)instPtr->log.advTxCnt;
|
||||||
|
instPtr->linkLog.advRecvCnt = (uint16_t)instPtr->log.advRecvCnt;
|
||||||
|
instPtr->linkLog.advCorrectCnt = (uint16_t)instPtr->log.advCorrectCnt;
|
||||||
|
instPtr->linkLog.cfmTxCnt = instPtr->log.cfmTxCnt;
|
||||||
|
instPtr->linkLog.cfmRecvCnt = instPtr->log.cfmRecvCnt;
|
||||||
|
instPtr->linkLog.cfmCorrectCnt = instPtr->log.cfmCorrectCnt;
|
||||||
|
instPtr->linkLog.svcTxCnt = instPtr->log.svcTxCnt;
|
||||||
|
instPtr->linkLog.svcRecvCnt = instPtr->log.svcRecvCnt;
|
||||||
|
instPtr->linkLog.svcCorrectCnt = instPtr->log.svcCorrectCnt;
|
||||||
|
instPtr->linkLog.timeDev = instPtr->log.timeDev;
|
||||||
|
instPtr->linkLog.sendId = instPtr->serviceFSM->txLog.dataId;
|
||||||
|
instPtr->linkLog.recvId = instPtr->serviceFSM->rxLog.dataId;
|
||||||
|
|
||||||
|
SysMonitor_UpdateLinklayerLog(&(instPtr->linkLog));
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ typedef struct
|
|||||||
uint32_t svcTxCnt;
|
uint32_t svcTxCnt;
|
||||||
uint32_t svcRecvCnt;
|
uint32_t svcRecvCnt;
|
||||||
uint32_t svcCorrectCnt;
|
uint32_t svcCorrectCnt;
|
||||||
|
|
||||||
|
int64_t timeDev;
|
||||||
} L2_LOG;
|
} L2_LOG;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@@ -90,9 +92,7 @@ typedef struct
|
|||||||
L2_LOG log;
|
L2_LOG log;
|
||||||
// for system log
|
// for system log
|
||||||
SYSINFO sysInfo;
|
SYSINFO sysInfo;
|
||||||
SLOTLOG txSlotLog;
|
LINKLOG linkLog;
|
||||||
SLOTLOG rxSlotLog;
|
|
||||||
PRTCLLOG prtcLog;
|
|
||||||
} L2_INST;
|
} L2_INST;
|
||||||
|
|
||||||
/************************** Variable Definitions *****************************/
|
/************************** Variable Definitions *****************************/
|
||||||
@@ -166,7 +166,8 @@ L2_FRAME_TYPE L2_GetNextFrameType(L2_INST *instPtr);
|
|||||||
L2_TOR_TYPE L2_GetNextTor(L2_INST *instPtr);
|
L2_TOR_TYPE L2_GetNextTor(L2_INST *instPtr);
|
||||||
|
|
||||||
// Time syncronization
|
// Time syncronization
|
||||||
int32_t L2_TimeAlign(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool relative);
|
int32_t L2_GetTimeDeviation(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool relative, int64_t* timeDev);
|
||||||
|
void L2_TimeAdjust(L2_INST *instPtr, const int64_t *timeDev);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __LINK_LAYER_H_ */
|
#endif /* __LINK_LAYER_H_ */
|
||||||
|
|||||||
@@ -22,6 +22,9 @@
|
|||||||
#include "geometry/coord.h"
|
#include "geometry/coord.h"
|
||||||
#include "geometry/quaternion.h"
|
#include "geometry/quaternion.h"
|
||||||
#include "../phy_layer/phy_layer.h"
|
#include "../phy_layer/phy_layer.h"
|
||||||
|
#ifndef EMULATION
|
||||||
|
#include "../config/app_config.h"
|
||||||
|
#endif
|
||||||
/************************** Constant Definitions *****************************/
|
/************************** Constant Definitions *****************************/
|
||||||
// Common node ID definition
|
// Common node ID definition
|
||||||
#define L2_BROADCAST_ID 0xFF
|
#define L2_BROADCAST_ID 0xFF
|
||||||
@@ -210,6 +213,8 @@ typedef struct
|
|||||||
#ifdef DATALINK_ENABLE_BERTEST
|
#ifdef DATALINK_ENABLE_BERTEST
|
||||||
uint32_t bitTotal;
|
uint32_t bitTotal;
|
||||||
uint32_t bitError;
|
uint32_t bitError;
|
||||||
|
double lossRate;
|
||||||
|
double errorRate;
|
||||||
#endif
|
#endif
|
||||||
} L2_SVC_FSM;
|
} L2_SVC_FSM;
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,9 @@
|
|||||||
#include "link_layer.h"
|
#include "link_layer.h"
|
||||||
#include "link_layer_types.h"
|
#include "link_layer_types.h"
|
||||||
|
|
||||||
|
#define LINKLAYER_INSERT_EXTRGAP
|
||||||
|
|
||||||
|
#ifndef LINKLAYER_INSERT_EXTRGAP
|
||||||
L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
||||||
// SubFrame 0
|
// SubFrame 0
|
||||||
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
@@ -38,6 +41,7 @@ L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
|
||||||
// SubFrame 1
|
// SubFrame 1
|
||||||
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
@@ -59,6 +63,7 @@ L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
|
||||||
// SubFrame 2
|
// SubFrame 2
|
||||||
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
@@ -80,6 +85,7 @@ L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
|
||||||
// SubFrame 3
|
// SubFrame 3
|
||||||
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
@@ -122,6 +128,7 @@ L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
|
||||||
// SubFrame 5
|
// SubFrame 5
|
||||||
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
@@ -143,6 +150,7 @@ L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
|
||||||
// SubFrame 6
|
// SubFrame 6
|
||||||
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
@@ -164,6 +172,7 @@ L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
|
||||||
// SubFrame 7
|
// SubFrame 7
|
||||||
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
@@ -185,6 +194,7 @@ L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
|
||||||
// SubFrame 8
|
// SubFrame 8
|
||||||
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
@@ -206,6 +216,7 @@ L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
|
||||||
// SubFrame 9
|
// SubFrame 9
|
||||||
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
@@ -450,6 +461,451 @@ L2_RTNE_TABLE_ENTRY normalSub[L2_SLOTS_PER_FRAME] = {
|
|||||||
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
};
|
};
|
||||||
|
#else
|
||||||
|
L2_RTNE_TABLE_ENTRY intraScanSubT[L2_SLOTS_PER_FRAME] = {
|
||||||
|
// SubFrame 0
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
|
||||||
|
// SubFrame 1
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
|
||||||
|
// SubFrame 2
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
|
||||||
|
// SubFrame 3
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_SCAN, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_ADVERTISE, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_ADVERTISE, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_ADVERTISE, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_ADVERTISE, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 4
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 5
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 6
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 7
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 8
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 9
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0x01, 0xFF},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_CONFIRM, 0x00, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x01, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x02, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_CONFIRM, 0x03, 0xFF, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
};
|
||||||
|
|
||||||
|
L2_RTNE_TABLE_ENTRY normalSub[L2_SLOTS_PER_FRAME] = {
|
||||||
|
// SubFrame 0
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 1
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 2
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 3
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 4
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 5
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 6
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 7
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 8
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
|
||||||
|
// SubFrame 9
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x01, 0x02},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x01, 0x02},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
{L2_SLOT_SERVICE, 0x00, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x01, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x02, 0x02, 0x01},
|
||||||
|
{L2_SLOT_SERVICE, 0x03, 0x02, 0x01},
|
||||||
|
{L2_SLOT_IDLE, 0x00, 0x00, 0x00},
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
L2_RTNE_TABLE_ENTRY *initTable[L2_INIT_RTNE_PERIOD] =
|
L2_RTNE_TABLE_ENTRY *initTable[L2_INIT_RTNE_PERIOD] =
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -409,9 +409,7 @@ int32_t L2_Scan_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
// Reset node ttl
|
// Reset node ttl
|
||||||
node->ttlCnt = 0;
|
node->ttlCnt = 0;
|
||||||
|
|
||||||
if (L2_isCxn2Net(instPtr) == false)
|
uint32_t netstartTime;
|
||||||
{
|
|
||||||
uint32_t netstartTime, frameNum, slotNum = 0;
|
|
||||||
// Update net start time.
|
// Update net start time.
|
||||||
L2_FrameGetChunk(msg, L2_MSG_ADV_SRC_NETSTART_TIME, L2_MSG_ADV_SRC_NETSTART_TIME_LEN, &netstartTime);
|
L2_FrameGetChunk(msg, L2_MSG_ADV_SRC_NETSTART_TIME, L2_MSG_ADV_SRC_NETSTART_TIME_LEN, &netstartTime);
|
||||||
L2_EVENT netSetupDoneEvent = {
|
L2_EVENT netSetupDoneEvent = {
|
||||||
@@ -419,12 +417,20 @@ int32_t L2_Scan_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
.msg = &netstartTime};
|
.msg = &netstartTime};
|
||||||
AssertL2Event(instPtr, &netSetupDoneEvent);
|
AssertL2Event(instPtr, &netSetupDoneEvent);
|
||||||
|
|
||||||
// Time sync.
|
// Calculate time deviation
|
||||||
|
uint32_t frameNum, slotNum = 0;
|
||||||
L2_FrameGetChunk(msg, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &frameNum);
|
L2_FrameGetChunk(msg, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &frameNum);
|
||||||
L2_FrameGetChunk(msg, L2_MSG_SLOT_NUM, L2_MSG_SLOT_NUM_LEN, &slotNum);
|
L2_FrameGetChunk(msg, L2_MSG_SLOT_NUM, L2_MSG_SLOT_NUM_LEN, &slotNum);
|
||||||
// TODO: Check
|
Status = L2_GetTimeDeviation(instPtr, frameNum, slotNum, true, &(instPtr->log.timeDev));
|
||||||
L2_TimeAlign(instPtr, frameNum, slotNum, true);
|
if (Status != SUCCESS)
|
||||||
|
{
|
||||||
|
DBG_ERROR("Failed to compute time deviation.\n")
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Time sync.
|
||||||
|
L2_TimeAdjust(instPtr, &(instPtr->log.timeDev));
|
||||||
|
|
||||||
// trigger flag
|
// trigger flag
|
||||||
AdvRecvStateUpdate(scanFsmPtr, true);
|
AdvRecvStateUpdate(scanFsmPtr, true);
|
||||||
Status = SUCCESS;
|
Status = SUCCESS;
|
||||||
@@ -465,6 +471,17 @@ int32_t L2_Scan_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
// Reset node ttl
|
// Reset node ttl
|
||||||
node->ttlCnt = 0;
|
node->ttlCnt = 0;
|
||||||
|
|
||||||
|
// Calculate time deviation
|
||||||
|
uint32_t frameNum, slotNum = 0;
|
||||||
|
L2_FrameGetChunk(msg, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &frameNum);
|
||||||
|
L2_FrameGetChunk(msg, L2_MSG_SLOT_NUM, L2_MSG_SLOT_NUM_LEN, &slotNum);
|
||||||
|
Status = L2_GetTimeDeviation(instPtr, frameNum, slotNum, true, &(instPtr->log.timeDev));
|
||||||
|
if (Status != SUCCESS)
|
||||||
|
{
|
||||||
|
DBG_ERROR("Failed to compute time deviation.\n")
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD)
|
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD)
|
||||||
{
|
{
|
||||||
// check if net setup finished.
|
// check if net setup finished.
|
||||||
@@ -501,6 +518,8 @@ int32_t L2_Scan_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
l2Event.msg = &newState;
|
l2Event.msg = &newState;
|
||||||
AssertL2Event(instPtr, &l2Event);
|
AssertL2Event(instPtr, &l2Event);
|
||||||
}
|
}
|
||||||
|
// Time sync.
|
||||||
|
L2_TimeAdjust(instPtr, &(instPtr->log.timeDev));
|
||||||
}
|
}
|
||||||
Status = SUCCESS;
|
Status = SUCCESS;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -112,27 +112,27 @@ static int32_t Service_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst
|
|||||||
L2_FrameInsertChunk(buff, L2_MSG_SVC_SRC_SPEEDY, L2_MSG_SVC_SRC_SPEEDY_LEN, &(instPtr->sysInfo.vY));
|
L2_FrameInsertChunk(buff, L2_MSG_SVC_SRC_SPEEDY, L2_MSG_SVC_SRC_SPEEDY_LEN, &(instPtr->sysInfo.vY));
|
||||||
L2_FrameInsertChunk(buff, L2_MSG_SVC_SRC_SPEEDZ, L2_MSG_SVC_SRC_SPEEDZ_LEN, &(instPtr->sysInfo.vZ));
|
L2_FrameInsertChunk(buff, L2_MSG_SVC_SRC_SPEEDZ, L2_MSG_SVC_SRC_SPEEDZ_LEN, &(instPtr->sysInfo.vZ));
|
||||||
|
|
||||||
// uint32_t dataId;
|
|
||||||
// if(L2_GetNodeType(instPtr) == L2_NODE_HEAD)
|
|
||||||
// {
|
|
||||||
// SysMonitor_GetSendPayloadFLJRaw(buff+L2_MSG_SVC_PAYLOAD, &dataId);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// SysMonitor_GetSendPayloadLJRaw(buff+L2_MSG_SVC_PAYLOAD, &dataId);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD_ID, L2_MSG_SVC_PAYLOAD_ID_LEN, &dataId);
|
|
||||||
// if (dataId == DATA_ID_NONE)
|
|
||||||
// {
|
|
||||||
// L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD, L2_MSG_SVC_PAYLOAD_LEN, testData);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// packing payload
|
|
||||||
uint32_t dataId;
|
uint32_t dataId;
|
||||||
dataId = DATA_ID_NONE;
|
if(L2_GetNodeType(instPtr) == L2_NODE_HEAD)
|
||||||
|
{
|
||||||
|
SysMonitor_GetSendPayload(buff + L2_MSG_SVC_PAYLOAD, &dataId, PAYLOAD_LEN_FLJ_TX);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SysMonitor_GetSendPayload(buff + L2_MSG_SVC_PAYLOAD, &dataId, PAYLOAD_LEN_LJ_TX);
|
||||||
|
}
|
||||||
|
|
||||||
L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD_ID, L2_MSG_SVC_PAYLOAD_ID_LEN, &dataId);
|
L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD_ID, L2_MSG_SVC_PAYLOAD_ID_LEN, &dataId);
|
||||||
|
if (dataId == DATA_ID_NONE)
|
||||||
|
{
|
||||||
L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD, L2_MSG_SVC_PAYLOAD_LEN, testData);
|
L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD, L2_MSG_SVC_PAYLOAD_LEN, testData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// // packing payload
|
||||||
|
// uint32_t dataId;
|
||||||
|
// dataId = DATA_ID_TEST;
|
||||||
|
// L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD_ID, L2_MSG_SVC_PAYLOAD_ID_LEN, &dataId);
|
||||||
|
// L2_FrameInsertChunk(buff, L2_MSG_SVC_PAYLOAD, L2_MSG_SVC_PAYLOAD_LEN, testData);
|
||||||
|
|
||||||
|
|
||||||
Status = L2_CrcAppend(buff, L2_SVC_PACK_LEN - L2_MSG_SVC_CRC_LEN, L2_MSG_SVC_CRC, L2_CRC16_1021);
|
Status = L2_CrcAppend(buff, L2_SVC_PACK_LEN - L2_MSG_SVC_CRC_LEN, L2_MSG_SVC_CRC, L2_CRC16_1021);
|
||||||
@@ -141,6 +141,9 @@ static int32_t Service_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst
|
|||||||
DBG_ERROR("Fail to append CRC...\n");
|
DBG_ERROR("Fail to append CRC...\n");
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memcpy(instPtr->serviceFSM->txLog.data, buff, L2_SVC_PACK_LEN);
|
||||||
|
instPtr->serviceFSM->txLog.dataId = dataId;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -227,8 +230,8 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
{
|
{
|
||||||
ASSERT(instPtr != NULL);
|
ASSERT(instPtr != NULL);
|
||||||
ASSERT(msg != NULL);
|
ASSERT(msg != NULL);
|
||||||
#ifndef DATALINK_ENABLE_BERTEST
|
|
||||||
int32_t Status;
|
int32_t Status;
|
||||||
|
#ifndef DATALINK_ENABLE_BERTEST
|
||||||
uint8_t frameType;
|
uint8_t frameType;
|
||||||
L2_FrameGetChunk(msg, L2_MSG_TYPE, L2_MSG_TYPE_LEN, &frameType);
|
L2_FrameGetChunk(msg, L2_MSG_TYPE, L2_MSG_TYPE_LEN, &frameType);
|
||||||
switch (frameType)
|
switch (frameType)
|
||||||
@@ -269,6 +272,17 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
// Reset node ttl
|
// Reset node ttl
|
||||||
node->ttlCnt = 0;
|
node->ttlCnt = 0;
|
||||||
|
|
||||||
|
// Calculate time deviation
|
||||||
|
uint32_t frameNum, slotNum = 0;
|
||||||
|
L2_FrameGetChunk(msg, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &frameNum);
|
||||||
|
L2_FrameGetChunk(msg, L2_MSG_SLOT_NUM, L2_MSG_SLOT_NUM_LEN, &slotNum);
|
||||||
|
Status = L2_GetTimeDeviation(instPtr, frameNum, slotNum, true, &(instPtr->log.timeDev));
|
||||||
|
if (Status != SUCCESS)
|
||||||
|
{
|
||||||
|
DBG_ERROR("Failed to compute time deviation.\n")
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t dataId;
|
uint32_t dataId;
|
||||||
L2_FrameGetChunk(msg, L2_MSG_SVC_PAYLOAD_ID, L2_MSG_SVC_PAYLOAD_ID_LEN, &dataId);
|
L2_FrameGetChunk(msg, L2_MSG_SVC_PAYLOAD_ID, L2_MSG_SVC_PAYLOAD_ID_LEN, &dataId);
|
||||||
|
|
||||||
@@ -276,22 +290,24 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
{
|
{
|
||||||
if(L2_GetNodeType(instPtr) == L2_NODE_HEAD)
|
if(L2_GetNodeType(instPtr) == L2_NODE_HEAD)
|
||||||
{
|
{
|
||||||
SysMonitor_UpdateRecvPayloadFLJRaw(msg+L2_MSG_SVC_PAYLOAD);
|
SysMonitor_UpdateRecvPayload(msg+L2_MSG_SVC_PAYLOAD, PAYLOAD_LEN_FLJ_RX);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SysMonitor_UpdateRecvPayloadLJRaw(msg+L2_MSG_SVC_PAYLOAD);
|
SysMonitor_UpdateRecvPayload(msg+L2_MSG_SVC_PAYLOAD, PAYLOAD_LEN_LJ_RX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Logging
|
||||||
|
memcpy(instPtr->serviceFSM->rxLog.data, msg, L2_SVC_PACK_LEN);
|
||||||
|
instPtr->serviceFSM->rxLog.dataId = dataId;
|
||||||
|
|
||||||
#ifdef DATALINK_ENABLE_AUTOTIMESYNC
|
#ifdef DATALINK_ENABLE_AUTOTIMESYNC
|
||||||
// Implement a auto time sync.
|
// Implement a auto time sync.
|
||||||
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD)
|
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD)
|
||||||
{
|
{
|
||||||
uint32_t frameNum, slotNum;
|
// Time sync.
|
||||||
L2_FrameGetChunk(msg, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &frameNum);
|
L2_TimeAdjust(instPtr, &(instPtr->log.timeDev));
|
||||||
L2_FrameGetChunk(msg, L2_MSG_SLOT_NUM, L2_MSG_SLOT_NUM_LEN, &slotNum);
|
|
||||||
L2_TimeAlign(instPtr, frameNum, slotNum, true);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
@@ -303,22 +319,31 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
|||||||
return Status;
|
return Status;
|
||||||
#else
|
#else
|
||||||
uint32_t errorBits = 0;
|
uint32_t errorBits = 0;
|
||||||
for (int i = 0; i < SVC_PACK_LEN; i++)
|
for (int i = 0; i < L2_SVC_PACK_LEN; i++)
|
||||||
{
|
{
|
||||||
errorBits += count_ones(msg[i] ^ testData[i]);
|
errorBits += count_ones(msg[i] ^ testData[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
instPtr->serviceFsm.bitError += errorBits;
|
instPtr->serviceFSM->bitError += errorBits;
|
||||||
instPtr->serviceFsm.bitTotal += SVC_PACK_LEN * 8;
|
instPtr->serviceFSM->bitTotal += L2_SVC_PACK_LEN * 8;
|
||||||
|
|
||||||
|
// Calculate time deviation
|
||||||
|
uint32_t frameNum, slotNum = 0;
|
||||||
|
L2_FrameGetChunk(msg, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &frameNum);
|
||||||
|
L2_FrameGetChunk(msg, L2_MSG_SLOT_NUM, L2_MSG_SLOT_NUM_LEN, &slotNum);
|
||||||
|
Status = L2_GetTimeDeviation(instPtr, frameNum, slotNum, true, &(instPtr->log.timeDev));
|
||||||
|
if (Status != SUCCESS)
|
||||||
|
{
|
||||||
|
DBG_ERROR("Failed to compute time deviation.\n")
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
// Implement a auto time sync.
|
// Implement a auto time sync.
|
||||||
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD)
|
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD)
|
||||||
{
|
{
|
||||||
uint32_t frameNum, slotNum;
|
// Time sync.
|
||||||
L2_FrameGetChunk(msg, L2_MSG_FRAME_NUM, L2_MSG_FRAME_NUM_LEN, &frameNum);
|
L2_TimeAdjust(instPtr, &(instPtr->log.timeDev));
|
||||||
L2_FrameGetChunk(msg, L2_MSG_SLOT_NUM, L2_MSG_SLOT_NUM_LEN, &slotNum);
|
|
||||||
L2_TimeAlign(instPtr, frameNum, slotNum, true);
|
|
||||||
}
|
}
|
||||||
|
return SUCCESS;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,7 +391,7 @@ int32_t L2_Service_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntr
|
|||||||
// Packing service data
|
// Packing service data
|
||||||
Service_Packing(instPtr, L2_SVC_FRAME, rtneEntry->dst);
|
Service_Packing(instPtr, L2_SVC_FRAME, rtneEntry->dst);
|
||||||
#else
|
#else
|
||||||
memcpy(instPtr->sendPktData, testData, SVC_PACK_LEN);
|
memcpy(instPtr->sendPktData, testData, L2_SVC_PACK_LEN);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
// FIXME: Steer antenna to point to destination.
|
// FIXME: Steer antenna to point to destination.
|
||||||
@@ -380,12 +405,11 @@ int32_t L2_Service_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntr
|
|||||||
}
|
}
|
||||||
#ifdef DATALINK_ENABLE_BERTEST
|
#ifdef DATALINK_ENABLE_BERTEST
|
||||||
uint32_t pktLoss;
|
uint32_t pktLoss;
|
||||||
double errorRate, lossRate;
|
|
||||||
pktLoss = instPtr->log.svcRecvCnt - instPtr->log.svcCorrectCnt;
|
pktLoss = instPtr->log.svcRecvCnt - instPtr->log.svcCorrectCnt;
|
||||||
lossRate = (instPtr->log.svcRecvCnt == 0) ? 0 : (double)pktLoss / (double)instPtr->serviceFsm.pktRecv;
|
instPtr->serviceFSM->lossRate = (instPtr->log.svcRecvCnt == 0) ? 0 : (double)pktLoss / (double)instPtr->serviceFSM->pktRecv;
|
||||||
errorRate = (instPtr->serviceFsm.bitTotal == 0) ? 0 : (double)instPtr->serviceFsm.bitError / (double)instPtr->serviceFsm.bitTotal;
|
instPtr->serviceFSM->errorRate = (instPtr->serviceFSM->bitTotal == 0) ? 0 : (double)instPtr->serviceFSM->bitError / (double)instPtr->serviceFSM->bitTotal;
|
||||||
DBG_PRINT("Packet Loss Rate -- Total: %lu, Loss: %lu.\n", instPtr->serviceFsm.pktRecv, pktLoss);
|
DBG_PRINT("Packet Loss Rate -- Total: %lu, Loss: %lu.\n", instPtr->serviceFSM->pktRecv, pktLoss);
|
||||||
DBG_PRINT("Bit Error Rate -- Total:%lu, Error:%lu.\n", instPtr->serviceFsm.bitTotal, instPtr->serviceFsm.bitError);
|
DBG_PRINT("Bit Error Rate -- Total:%lu, Error:%lu.\n", instPtr->serviceFSM->bitTotal, instPtr->serviceFSM->bitError);
|
||||||
#endif
|
#endif
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,20 +32,22 @@
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**
|
/**
|
||||||
* @brief a slot alignment, base on physical layer information.
|
* @brief Get time deviation to the specified frame and slot number.
|
||||||
*
|
*
|
||||||
* @param instPtr a pointer to linklayer layer instance
|
* @param instPtr a pointer to linklayer layer instance
|
||||||
* @param frameNum
|
* @param frameNum
|
||||||
* @param slotNum
|
* @param slotNum
|
||||||
|
* @param relative
|
||||||
|
* @param timeDev
|
||||||
*
|
*
|
||||||
* @return SUCCESS Initialize successfully.
|
* @return SUCCESS
|
||||||
* FAILURE Initialization failed, allocate memory fail or initial
|
* EIGNORE there is no received frame
|
||||||
* bram controller fail.
|
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
// TODO: Check
|
int32_t L2_GetTimeDeviation(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool relative, int64_t *timeDev)
|
||||||
int32_t L2_TimeAlign(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool relative)
|
|
||||||
{
|
{
|
||||||
|
ASSERT(instPtr != NULL);
|
||||||
|
ASSERT(timeDev != NULL);
|
||||||
L1_FRAME_TYPE lastRecvdFrame;
|
L1_FRAME_TYPE lastRecvdFrame;
|
||||||
lastRecvdFrame = Phy_GetLastRecvFrameType(instPtr->config.phyInstPtr);
|
lastRecvdFrame = Phy_GetLastRecvFrameType(instPtr->config.phyInstPtr);
|
||||||
if (lastRecvdFrame == L1_NONE_FRAME)
|
if (lastRecvdFrame == L1_NONE_FRAME)
|
||||||
@@ -57,8 +59,7 @@ int32_t L2_TimeAlign(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool
|
|||||||
DBG_INFO("Starting TimeAlign operation...\n");
|
DBG_INFO("Starting TimeAlign operation...\n");
|
||||||
// read nextSendTime from physical layer
|
// read nextSendTime from physical layer
|
||||||
uint64_t currTime, expectTime;
|
uint64_t currTime, expectTime;
|
||||||
int64_t timeDiff;
|
TIME_WORD timeStamp;
|
||||||
TIME_WORD timeStamp, slotTimerAdjmet;
|
|
||||||
expectTime = ((uint64_t)(frameNum * L2_SLOTS_PER_FRAME + slotNum)) * TIME_FRAC_MAX;
|
expectTime = ((uint64_t)(frameNum * L2_SLOTS_PER_FRAME + slotNum)) * TIME_FRAC_MAX;
|
||||||
expectTime += Phy_GetTimeComp(lastRecvdFrame);
|
expectTime += Phy_GetTimeComp(lastRecvdFrame);
|
||||||
|
|
||||||
@@ -71,10 +72,27 @@ int32_t L2_TimeAlign(L2_INST *instPtr, uint32_t frameNum, uint32_t slotNum, bool
|
|||||||
currTime = (uint64_t)timeStamp.frac_part;
|
currTime = (uint64_t)timeStamp.frac_part;
|
||||||
currTime += ((uint64_t)timeStamp.int_part) * TIME_FRAC_MAX;
|
currTime += ((uint64_t)timeStamp.int_part) * TIME_FRAC_MAX;
|
||||||
|
|
||||||
timeDiff = (int64_t)(expectTime - currTime);
|
*timeDev = (int64_t)(expectTime - currTime);
|
||||||
|
|
||||||
slotTimerAdjmet.int_part = (uint32_t)(timeDiff / TIME_FRAC_MAX);
|
|
||||||
slotTimerAdjmet.frac_part = (uint32_t)(timeDiff % TIME_FRAC_MAX);
|
|
||||||
TimeCtrl_TimeAdjust(instPtr->config.tmcInstPtr, &slotTimerAdjmet, TM_ADJ_ADD);
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**
|
||||||
|
* @brief Implement time adjustment by applying time deviation.
|
||||||
|
*
|
||||||
|
* @param instPtr a pointer to linklayer layer instance
|
||||||
|
* @param timeDev
|
||||||
|
*
|
||||||
|
* @return NONE
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
void L2_TimeAdjust(L2_INST *instPtr, const int64_t *timeDev)
|
||||||
|
{
|
||||||
|
ASSERT(instPtr != NULL);
|
||||||
|
ASSERT(timeDev != NULL);
|
||||||
|
TIME_WORD slotTimerAdjmet;
|
||||||
|
slotTimerAdjmet.int_part = (uint32_t)(*timeDev / TIME_FRAC_MAX);
|
||||||
|
slotTimerAdjmet.frac_part = (uint32_t)(*timeDev % TIME_FRAC_MAX);
|
||||||
|
TimeCtrl_TimeAdjust(instPtr->config.tmcInstPtr, &slotTimerAdjmet, TM_ADJ_ADD);
|
||||||
|
}
|
||||||
@@ -245,7 +245,7 @@ void Phy_AntConfigInit(PHY_ANT_CONFIG *antConfig)
|
|||||||
void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode)
|
void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode)
|
||||||
{
|
{
|
||||||
ASSERT(instPtr != NULL);
|
ASSERT(instPtr != NULL);
|
||||||
uint8_t config = instPtr->antConfig.antMode & (~ANT_MODE_BEAM_MASK);
|
uint8_t config = instPtr->antConfig.antMode & ANT_MODE_BEAM_MASK;
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case PHY_ANT_MODE_SILENT:
|
case PHY_ANT_MODE_SILENT:
|
||||||
@@ -259,8 +259,9 @@ void Phy_AntConfigMode(PHY_INST *instPtr, PHY_ANT_MODE mode)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG_ERROR("Unknown antenna mode: %" PRIu8 ", remain previous mode.\n", mode);
|
DBG_ERROR("Unknown antenna mode: %" PRIu8 ", remain previous mode.\n", mode);
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
instPtr->antConfig.antMode = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo)
|
int32_t Phy_SetBeamNo(PHY_INST *instPtr, int32_t beamNo)
|
||||||
|
|||||||
@@ -311,6 +311,28 @@ void Phy_UpdateState(PHY_INST *instPtr)
|
|||||||
instPtr->recvSlotTime.frac_part = PhyRead(instPtr, TM_TARGET_L);
|
instPtr->recvSlotTime.frac_part = PhyRead(instPtr, TM_TARGET_L);
|
||||||
instPtr->recvFsTime.int_part = PhyRead(instPtr, FSTIME_H);
|
instPtr->recvFsTime.int_part = PhyRead(instPtr, FSTIME_H);
|
||||||
instPtr->recvFsTime.frac_part = PhyRead(instPtr, FSTIME_L);
|
instPtr->recvFsTime.frac_part = PhyRead(instPtr, FSTIME_L);
|
||||||
|
|
||||||
|
instPtr->phyLog.acqCnt = PhyRead(instPtr, PHY_ACQ_CNT);
|
||||||
|
instPtr->phyLog.fsyncCnt = PhyRead(instPtr, PHY_FRAME_SYNC_CNT);
|
||||||
|
instPtr->phyLog.decodeCnt = PhyRead(instPtr, PHY_DECODE_CNT);
|
||||||
|
instPtr->phyLog.crcCnt = PhyRead(instPtr, PHY_CRC_OK_CNT);
|
||||||
|
instPtr->phyLog.doppler = Phy_GetFreqEst(instPtr);
|
||||||
|
instPtr->phyLog.recvStamp = (uint64_t)instPtr->recvFsTime.int_part * TIME_FRAC_MAX + instPtr->recvFsTime.frac_part;
|
||||||
|
instPtr->phyLog.acqPeak = PhyRead(instPtr, PHY_ACQ_PEAK_L);
|
||||||
|
instPtr->phyLog.acqPeak |= ((uint64_t)PhyRead(instPtr, PHY_ACQ_PEAK_H)) << 32;
|
||||||
|
instPtr->phyLog.acqMean = PhyRead(instPtr, PHY_ACQ_MEAN_L);
|
||||||
|
instPtr->phyLog.acqMean |= ((uint64_t)PhyRead(instPtr, PHY_ACQ_MEAN_H)) << 32;
|
||||||
|
instPtr->phyLog.acqPhase = (PhyRead(instPtr, PHY_ACQ_FREQEST) & PHY_ACQ_FREQEST_PHASE_MASK) >> PHY_ACQ_FREQEST_PHASE_SHIFT;
|
||||||
|
instPtr->phyLog.acqFreqCh = (PhyRead(instPtr, PHY_ACQ_FREQEST) & PHY_ACQ_FREQEST_CHANNEL_MASK) >> PHY_ACQ_FREQEST_CHANNEL_SHIFT;
|
||||||
|
instPtr->phyLog.fsyncPeak = PhyRead(instPtr, PHY_FRAME_SYNC_PEAK_L);
|
||||||
|
instPtr->phyLog.fsyncPeak |= ((uint64_t)PhyRead(instPtr, PHY_FRAME_SYNC_PEAK_H)) << 32;
|
||||||
|
instPtr->phyLog.fsyncMean = PhyRead(instPtr, PHY_FRAME_SYNC_MEAN_L);
|
||||||
|
instPtr->phyLog.fsyncMean |= ((uint64_t)PhyRead(instPtr, PHY_FRAME_SYNC_MEAN_H)) << 32;
|
||||||
|
instPtr->phyLog.fsyncFreqCh = (PhyRead(instPtr, PHY_FRAME_SYNC_FREQEST) & PHY_FRAME_SYNC_FREQEST_CHANNEL_MASK) >> PHY_FRAME_SYNC_FREQEST_CHANNEL_SHIFT;
|
||||||
|
instPtr->phyLog.deintlvAmpEst = PhyRead(instPtr, PHY_DEINTLV_AMPEST) & PHY_DEINTLV_AMPEST_MASK;
|
||||||
|
instPtr->phyLog.reserve = 0;
|
||||||
|
|
||||||
|
SysMonitor_UpdatePhysicalLayerLog(&(instPtr->phyLog));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -357,6 +379,7 @@ int32_t Phy_InstInit(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
memset(&((*instPtr)->beamNo), (int32_t)L1_INIT_ANT_NO, sizeof(PHY_RCD));
|
memset(&((*instPtr)->beamNo), (int32_t)L1_INIT_ANT_NO, sizeof(PHY_RCD));
|
||||||
memset(&((*instPtr)->beamWd), (int32_t)L1_INIT_ANT_WD, sizeof(PHY_RCD));
|
memset(&((*instPtr)->beamWd), (int32_t)L1_INIT_ANT_WD, sizeof(PHY_RCD));
|
||||||
memset(&((*instPtr)->hwSate), 0x00, sizeof(HWSTATE));
|
memset(&((*instPtr)->hwSate), 0x00, sizeof(HWSTATE));
|
||||||
|
memset(&((*instPtr)->phyLog), 0x00, sizeof(PHYLOG));
|
||||||
|
|
||||||
#ifndef EMULATION
|
#ifndef EMULATION
|
||||||
XBram_Config *bramConfigPtr;
|
XBram_Config *bramConfigPtr;
|
||||||
@@ -827,14 +850,6 @@ double Phy_GetFreqEst(PHY_INST *instPtr)
|
|||||||
fineReg = PhyRead(instPtr, FINE_FREQEST);
|
fineReg = PhyRead(instPtr, FINE_FREQEST);
|
||||||
estAbs = fineReg & FINE_FREQEST_VAL_MASK;
|
estAbs = fineReg & FINE_FREQEST_VAL_MASK;
|
||||||
if (frameType >= L1_200KBPS_5MS_FRAME)
|
if (frameType >= L1_200KBPS_5MS_FRAME)
|
||||||
{
|
|
||||||
// 1.5M Rc
|
|
||||||
coarse = (double)(80 - acqFreqIdx) * (31.25e3 / 4);
|
|
||||||
coarse += (double)syncFreqIdx * 1.5e6 / 64 / 128;
|
|
||||||
|
|
||||||
fine = 12e6/2048*((double)estAbs)/8192.0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// 12M Rc
|
// 12M Rc
|
||||||
coarse = (double)(8 - acqFreqIdx) * (250e3 / 4);
|
coarse = (double)(8 - acqFreqIdx) * (250e3 / 4);
|
||||||
@@ -842,6 +857,14 @@ double Phy_GetFreqEst(PHY_INST *instPtr)
|
|||||||
|
|
||||||
fine = 48e6/2048*((double)estAbs)/8192.0;
|
fine = 48e6/2048*((double)estAbs)/8192.0;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 1.5M Rc
|
||||||
|
coarse = (double)(80 - acqFreqIdx) * (31.25e3 / 4);
|
||||||
|
coarse += (double)syncFreqIdx * 1.5e6 / 64 / 128;
|
||||||
|
|
||||||
|
fine = 12e6/2048*((double)estAbs)/8192.0;
|
||||||
|
}
|
||||||
|
|
||||||
fine = ((fineReg & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ?
|
fine = ((fineReg & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ?
|
||||||
-fine : fine;
|
-fine : fine;
|
||||||
@@ -876,17 +899,17 @@ double Phy_GetCoarseFreqEst(PHY_INST *instPtr)
|
|||||||
acqFreqIdx = (regValue & COASE_FREQEST_ACQ_MASK) >> COASE_FREQEST_ACQ_SHIFT;
|
acqFreqIdx = (regValue & COASE_FREQEST_ACQ_MASK) >> COASE_FREQEST_ACQ_SHIFT;
|
||||||
syncFreqIdx = (regValue & COASE_FREQEST_SYNC_MASK) >> COASE_FREQEST_SYNC_SHIFT;
|
syncFreqIdx = (regValue & COASE_FREQEST_SYNC_MASK) >> COASE_FREQEST_SYNC_SHIFT;
|
||||||
if (frameType >= L1_200KBPS_5MS_FRAME)
|
if (frameType >= L1_200KBPS_5MS_FRAME)
|
||||||
{
|
|
||||||
// 1.5M Rc
|
|
||||||
freqEst = (double)(80 - acqFreqIdx) * (31.25e3 / 4);
|
|
||||||
freqEst += (double)syncFreqIdx * 1.5e6 / 64 / 128;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// 12M Rc
|
// 12M Rc
|
||||||
freqEst = (double)(8 - acqFreqIdx) * (250e3 / 4);
|
freqEst = (double)(8 - acqFreqIdx) * (250e3 / 4);
|
||||||
freqEst += (double)syncFreqIdx * 12e6 / 64 / 128;
|
freqEst += (double)syncFreqIdx * 12e6 / 64 / 128;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 1.5M Rc
|
||||||
|
freqEst = (double)(80 - acqFreqIdx) * (31.25e3 / 4);
|
||||||
|
freqEst += (double)syncFreqIdx * 1.5e6 / 64 / 128;
|
||||||
|
}
|
||||||
|
|
||||||
return freqEst;
|
return freqEst;
|
||||||
}
|
}
|
||||||
@@ -915,13 +938,13 @@ double Phy_GetFineFreqEst(PHY_INST *instPtr)
|
|||||||
estAbs = regValue & FINE_FREQEST_VAL_MASK;
|
estAbs = regValue & FINE_FREQEST_VAL_MASK;
|
||||||
if (frameType >= L1_200KBPS_5MS_FRAME)
|
if (frameType >= L1_200KBPS_5MS_FRAME)
|
||||||
{
|
{
|
||||||
// 1.5M Rc
|
// 12M Rc
|
||||||
freqEst = 12e6/2048*((double)estAbs)/8192.0;
|
freqEst = 48e6/2048*((double)estAbs)/8192.0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 12M Rc
|
// 1.5M Rc
|
||||||
freqEst = 48e6/2048*((double)estAbs)/8192.0;
|
freqEst = 12e6/2048*((double)estAbs)/8192.0;
|
||||||
}
|
}
|
||||||
freqEst = ((regValue & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ?
|
freqEst = ((regValue & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ?
|
||||||
-freqEst : freqEst;
|
-freqEst : freqEst;
|
||||||
@@ -1110,64 +1133,114 @@ void Phy_RetrieveRecvData(PHY_INST *instPtr, uint8_t *dataBuff)
|
|||||||
* @param instPtr a pointer to hopping pattern buffer
|
* @param instPtr a pointer to hopping pattern buffer
|
||||||
* @param patternLen a integer indicate the length of hopping pattern.
|
* @param patternLen a integer indicate the length of hopping pattern.
|
||||||
*
|
*
|
||||||
* @return SUCCESS
|
* @return NONE
|
||||||
* FAILURE pattern length exceeds maximum length.
|
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void Phy_UpdateHwSate(PHY_INST *instPtr)
|
void Phy_RefreshHwSate(PHY_INST *instPtr)
|
||||||
{
|
{
|
||||||
ASSERT(instPtr != NULL);
|
ASSERT(instPtr != NULL);
|
||||||
uint32_t rawData;
|
uint32_t rawData;
|
||||||
#ifndef EMULATION
|
#ifndef EMULATION
|
||||||
// -- Update Chip voltage, unit mV
|
float evalData;
|
||||||
|
instPtr->hwSate.isSpOk = true;
|
||||||
|
// -- Update Ps voltage, unit mV
|
||||||
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCPINT);
|
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCPINT);
|
||||||
instPtr->hwSate.spVolt = (uint16_t)(XAdcPs_RawToVoltage(rawData) * 1000);
|
evalData = XAdcPs_RawToVoltage(rawData);
|
||||||
|
instPtr->hwSate.spPsVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) round(evalData/VOLTAGE_LSB);
|
||||||
|
instPtr->hwSate.isSpOk = instPtr->hwSate.isSpOk && IS_PS_VALID(evalData);
|
||||||
|
|
||||||
|
// -- Update Ps aux voltage, unit mV
|
||||||
|
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCPAUX);
|
||||||
|
evalData = XAdcPs_RawToVoltage(rawData);
|
||||||
|
instPtr->hwSate.spPsAuxVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) round(evalData/VOLTAGE_LSB);
|
||||||
|
instPtr->hwSate.isSpOk = instPtr->hwSate.isSpOk && IS_PSAUX_VALID(evalData);
|
||||||
|
|
||||||
|
// -- Update DDR voltage, unit mV
|
||||||
|
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCPDRO);
|
||||||
|
evalData = XAdcPs_RawToVoltage(rawData);
|
||||||
|
instPtr->hwSate.spDdrVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) round(evalData/VOLTAGE_LSB);
|
||||||
|
instPtr->hwSate.isSpOk = instPtr->hwSate.isSpOk && IS_DDR_VALID(evalData);
|
||||||
|
|
||||||
|
// -- Update PL voltage, unit mV
|
||||||
|
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCINT);
|
||||||
|
evalData = XAdcPs_RawToVoltage(rawData);
|
||||||
|
instPtr->hwSate.spPlVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) round(evalData/VOLTAGE_LSB);
|
||||||
|
instPtr->hwSate.isSpOk = instPtr->hwSate.isSpOk && IS_PL_VALID(evalData);
|
||||||
|
|
||||||
|
// -- Update PL aux voltage, unit mV
|
||||||
|
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCAUX);
|
||||||
|
evalData = XAdcPs_RawToVoltage(rawData);
|
||||||
|
instPtr->hwSate.spPlAuxVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) round(evalData/VOLTAGE_LSB);
|
||||||
|
instPtr->hwSate.isSpOk = instPtr->hwSate.isSpOk && IS_PLAUX_VALID(evalData);
|
||||||
|
|
||||||
|
// -- Update Bram voltage, unit mV
|
||||||
|
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VBRAM);
|
||||||
|
evalData = XAdcPs_RawToVoltage(rawData);
|
||||||
|
instPtr->hwSate.spBramVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) round(evalData/VOLTAGE_LSB);
|
||||||
|
instPtr->hwSate.isSpOk = instPtr->hwSate.isSpOk && IS_BRAM_VALID(evalData);
|
||||||
|
|
||||||
// -- Update Chip temperature, unit 0.01 deg
|
// -- Update Chip temperature, unit 0.01 deg
|
||||||
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_TEMP);
|
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_TEMP);
|
||||||
instPtr->hwSate.spTemp = (uint16_t)(XAdcPs_RawToTemperature(rawData) * 100);
|
evalData = XAdcPs_RawToTemperature(rawData);
|
||||||
|
instPtr->hwSate.spTemp = (evalData > TEMPERATURE_MAX)
|
||||||
|
? INT8_MAX
|
||||||
|
: ((evalData < TEMPERATURE_MIN) ? INT8_MIN : (int8_t) round(evalData/TEMPERATURE_LSB));
|
||||||
|
|
||||||
// FIXME: Chip status determine.
|
|
||||||
instPtr->hwSate.chipSt = 0;
|
|
||||||
#else
|
#else
|
||||||
instPtr->hwSate.spVolt = 0;
|
instPtr->spPsVolt = 0;
|
||||||
instPtr->hwSate.spTemp = 0;
|
instPtr->spPsAuxVolt = 0;
|
||||||
instPtr->hwSate.chipSt = 0;
|
instPtr->spDdrVolt = 0;
|
||||||
|
instPtr->spPlVolt = 0;
|
||||||
|
instPtr->spPlAuxVolt = 0;
|
||||||
|
instPtr->spBramVolt = 0;
|
||||||
|
instPtr->spTemp = 0;
|
||||||
|
instPtr->isSpOk = true;
|
||||||
#endif
|
#endif
|
||||||
/*** Voltage and Status ***/
|
/*** Voltage and Status ***/
|
||||||
rawData = PhyRead(instPtr, ANT_STATUS);
|
rawData = PhyRead(instPtr, ANT_STATUS);
|
||||||
// -- Update Antenna Status Code: 0xAA - normal, 0x55 - error
|
|
||||||
instPtr->hwSate.antSt = ((rawData & ANT_STATUS_CODE_MASK) == 0) ? 0xAA : 0x55;
|
|
||||||
// -- Update Antenna Voltage Status: 1 - normal, 0 - error
|
// -- Update Antenna Voltage Status: 1 - normal, 0 - error
|
||||||
// [0] - ANT voltage status
|
// [0] - ANT voltage status
|
||||||
// [2] - RF voltage status
|
// [2] - RF voltage status
|
||||||
// [4] - NIL voltage status
|
// [4] - NIL voltage status
|
||||||
instPtr->hwSate.antVolt = (rawData & ANT_STATUS_ANT_VOLT_MASK) ? 0x01 : 0x00;
|
// [6] - Antenna status
|
||||||
instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_RF_VOLT_MASK) ? 0x04 : 0x00;
|
instPtr->hwSate.antVolt = ((rawData & ANT_STATUS_ANT_VOLT_MASK) == ANT_STATUS_ANT_VOLT_OK) ? 0x01 : 0x00;
|
||||||
instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_NIL_VOLT_MASK) ? 0x10 : 0x00;
|
instPtr->hwSate.antVolt |= ((rawData & ANT_STATUS_RF_VOLT_MASK) == ANT_STATUS_RF_VOLT_OK) ? 0x04 : 0x00;
|
||||||
|
instPtr->hwSate.antVolt |= ((rawData & ANT_STATUS_NIL_VOLT_MASK) == ANT_STATUS_NIL_VOLT_OK) ? 0x10 : 0x00;
|
||||||
|
instPtr->hwSate.antVolt |= ((rawData & ANT_STATUS_CODE_MASK) == ANT_STATUS_CODE_OK) ? 0x40 : 0x00;
|
||||||
|
|
||||||
/*** Temperature and Lock Status ***/
|
/*** Temperature and Lock Status ***/
|
||||||
rawData = PhyRead(instPtr, RF_STATUS);
|
rawData = PhyRead(instPtr, ANT_RF_STATUS);
|
||||||
//-- Update Antenna Temperature (signed 8bit integer, 1 centigrade per LSB)
|
//-- Update Antenna Temperature (signed 8bit integer, 1 centigrade per LSB)
|
||||||
instPtr->hwSate.antTemp = (uint8_t)(rawData & RF_STATUS_TEMP_MASK);
|
instPtr->hwSate.antTemp = (uint8_t)(rawData & ANT_RF_STATUS_TEMP_MASK);
|
||||||
// -- Update Antenna PLL Lock Status: 1 - normal, 0 - error
|
// -- Update Antenna PLL Lock Status: 1 - normal, 0 - error
|
||||||
// [0] - BASEBAND lock status
|
// [0] - BASEBAND lock status
|
||||||
// [2] - PLLA lock status
|
// [2] - PLLA lock status
|
||||||
// [4] - PLLB lock status
|
// [4] - PLLB lock status
|
||||||
instPtr->hwSate.antPll = (rawData & RF_STATUS_BDLOCK_MASK) ? 0x01 : 0x00;
|
instPtr->hwSate.antPll = ((rawData & ANT_RF_STATUS_BBLOCK_MASK) == ANT_RF_STATUS_BBLOCK_OK) ? 0x01 : 0x00;
|
||||||
instPtr->hwSate.antPll |= (rawData & RF_STATUS_PLLA_MASK) ? 0x04 : 0x00;
|
instPtr->hwSate.antPll |= ((rawData & ANT_RF_STATUS_PLLA_MASK) == ANT_RF_STATUS_PLLA_OK) ? 0x04 : 0x00;
|
||||||
instPtr->hwSate.antPll |= (rawData & RF_STATUS_PLLB_MASK) ? 0x10 : 0x00;
|
instPtr->hwSate.antPll |= ((rawData & ANT_RF_STATUS_PLLB_MASK) == ANT_RF_STATUS_PLLB_OK) ? 0x10 : 0x00;
|
||||||
|
|
||||||
/*** MGCs ***/
|
/*** MGCs ***/
|
||||||
rawData = PhyRead(instPtr, RF_MGC);
|
rawData = PhyRead(instPtr, ANT_RF_MGC);
|
||||||
// -- Update Antenna MGC (0~15 dB)
|
// -- Update Antenna MGC (0~15 dB)
|
||||||
// [3:0] - Channel 1 MGC
|
// [3:0] - Channel 1 MGC
|
||||||
// [7:4] - Channel 2 MGC
|
// [7:4] - Channel 2 MGC
|
||||||
// [11:8] - Channel 3 MGC
|
// [11:8] - Channel 3 MGC
|
||||||
// [15:12] - Channel 4 MGC
|
// [15:12] - Channel 4 MGC
|
||||||
instPtr->hwSate.antMgc = (rawData & RF_MGC_CH1_MASK);
|
instPtr->hwSate.antMgc0 = (rawData & ANT_RF_MGC_CH1_MASK);
|
||||||
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH2_MASK) >> 4;
|
instPtr->hwSate.antMgc0 |= (rawData & ANT_RF_MGC_CH2_MASK) >> 4;
|
||||||
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH3_MASK) >> 8;
|
instPtr->hwSate.antMgc1 = (rawData & ANT_RF_MGC_CH3_MASK) >> 16;
|
||||||
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH4_MASK) >> 12;
|
instPtr->hwSate.antMgc1 |= (rawData & ANT_RF_MGC_CH4_MASK) >> 24;
|
||||||
|
|
||||||
|
// Determin if antenna is ok.
|
||||||
|
if(instPtr->hwSate.antVolt != 0x55 //01010101
|
||||||
|
||instPtr->hwSate.antPll != 0x15) // 00010101
|
||||||
|
{
|
||||||
|
instPtr->hwSate.isSpOk = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
instPtr->hwSate.isSpOk = true;
|
||||||
|
}
|
||||||
SysMonitor_UpdateHardwareStatus(&(instPtr->hwSate));
|
SysMonitor_UpdateHardwareStatus(&(instPtr->hwSate));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -218,6 +218,7 @@ typedef struct
|
|||||||
XAdcPs hwXadc;
|
XAdcPs hwXadc;
|
||||||
#endif
|
#endif
|
||||||
HWSTATE hwSate;
|
HWSTATE hwSate;
|
||||||
|
PHYLOG phyLog;
|
||||||
} PHY_INST;
|
} PHY_INST;
|
||||||
|
|
||||||
/************************** Variable Definitions *****************************/
|
/************************** Variable Definitions *****************************/
|
||||||
@@ -240,7 +241,7 @@ int32_t Phy_InstInit(PHY_INST **instPtr, PHY_CONFIG *phyConfig);
|
|||||||
void Phy_Destroy(PHY_INST *instPtr);
|
void Phy_Destroy(PHY_INST *instPtr);
|
||||||
|
|
||||||
void Phy_UpdateState(PHY_INST *instPtr);
|
void Phy_UpdateState(PHY_INST *instPtr);
|
||||||
void Phy_UpdateHwSate(PHY_INST *instPtr);
|
void Phy_RefreshHwSate(PHY_INST *instPtr);
|
||||||
|
|
||||||
void Phy_Start(PHY_INST *instPtr);
|
void Phy_Start(PHY_INST *instPtr);
|
||||||
void Phy_Halt(PHY_INST *instPtr);
|
void Phy_Halt(PHY_INST *instPtr);
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
/**
|
/**
|
||||||
* Register: PHY_MAIN_CTRL
|
* Register: PHY_MAIN_CTRL
|
||||||
*/
|
*/
|
||||||
#define PHY_MAIN_CTRL 0X00000000U
|
#define PHY_MAIN_CTRL 0x00000000U
|
||||||
#define PHY_MAIN_CTRL_EN_SHIFT 0
|
#define PHY_MAIN_CTRL_EN_SHIFT 0
|
||||||
#define PHY_MAIN_CTRL_EN_WIDTH 1
|
#define PHY_MAIN_CTRL_EN_WIDTH 1
|
||||||
#define PHY_MAIN_CTRL_EN_MASK 0x00000001U
|
#define PHY_MAIN_CTRL_EN_MASK 0x00000001U
|
||||||
@@ -275,21 +275,28 @@
|
|||||||
#define BEAM_AXIS_AZ_MASK 0xFFFF0000U
|
#define BEAM_AXIS_AZ_MASK 0xFFFF0000U
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register: ANT_STATUS_0
|
* Register: ANT_STATUS
|
||||||
*/
|
*/
|
||||||
#define ANT_STATUS 0x00000100U
|
#define ANT_STATUS 0x00000100U
|
||||||
#define ANT_STATUS_CODE_SHIFT 0
|
#define ANT_STATUS_ANT_VOLT_SHIFT 0
|
||||||
#define ANT_STATUS_CODE_WIDTH 8
|
|
||||||
#define ANT_STATUS_CODE_MASK 0x000000FFU
|
|
||||||
#define ANT_STATUS_NIL_VOLT_SHIFT 8
|
|
||||||
#define ANT_STATUS_NIL_VOLT_WIDTH 8
|
|
||||||
#define ANT_STATUS_NIL_VOLT_MASK 0x0000FF00U
|
|
||||||
#define ANT_STATUS_RF_VOLT_SHIFT 16
|
|
||||||
#define ANT_STATUS_RF_VOLT_WIDTH 8
|
|
||||||
#define ANT_STATUS_RF_VOLT_MASK 0x00FF0000U
|
|
||||||
#define ANT_STATUS_ANT_VOLT_SHIFT 24
|
|
||||||
#define ANT_STATUS_ANT_VOLT_WIDTH 8
|
#define ANT_STATUS_ANT_VOLT_WIDTH 8
|
||||||
#define ANT_STATUS_ANT_VOLT_MASK 0xFF000000U
|
#define ANT_STATUS_ANT_VOLT_MASK 0x000000FFU
|
||||||
|
#define ANT_STATUS_ANT_VOLT_OK 0x00000001U
|
||||||
|
|
||||||
|
#define ANT_STATUS_RF_VOLT_SHIFT 8
|
||||||
|
#define ANT_STATUS_RF_VOLT_WIDTH 8
|
||||||
|
#define ANT_STATUS_RF_VOLT_MASK 0x0000FF00U
|
||||||
|
#define ANT_STATUS_RF_VOLT_OK 0x00000100U
|
||||||
|
|
||||||
|
#define ANT_STATUS_NIL_VOLT_SHIFT 16
|
||||||
|
#define ANT_STATUS_NIL_VOLT_WIDTH 8
|
||||||
|
#define ANT_STATUS_NIL_VOLT_MASK 0x00FF0000U
|
||||||
|
#define ANT_STATUS_NIL_VOLT_OK 0x00010000U
|
||||||
|
|
||||||
|
#define ANT_STATUS_CODE_SHIFT 24
|
||||||
|
#define ANT_STATUS_CODE_WIDTH 8
|
||||||
|
#define ANT_STATUS_CODE_MASK 0xFF000000U
|
||||||
|
#define ANT_STATUS_CODE_OK 0x00000000U
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register: ANT_FRAME_CNT
|
* Register: ANT_FRAME_CNT
|
||||||
@@ -300,45 +307,184 @@
|
|||||||
#define ANT_FRAME_CNT_MASK 0xFFFFFFFFU
|
#define ANT_FRAME_CNT_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register: RF_STATUS
|
* Register: ANT_RF_STATUS
|
||||||
*/
|
*/
|
||||||
#define RF_STATUS 0x00000108U
|
#define ANT_RF_STATUS 0x00000108U
|
||||||
#define RF_STATUS_TEMP_SHIFT 0
|
#define ANT_RF_STATUS_TEMP_SHIFT 0
|
||||||
#define RF_STATUS_TEMP_WIDTH 8
|
#define ANT_RF_STATUS_TEMP_WIDTH 8
|
||||||
#define RF_STATUS_TEMP_MASK 0x000000FFU
|
#define ANT_RF_STATUS_TEMP_MASK 0x000000FFU
|
||||||
#define RF_STATUS_BDLOCK_SHIFT 8
|
|
||||||
#define RF_STATUS_BDLOCK_WIDTH 8
|
#define ANT_RF_STATUS_BBLOCK_SHIFT 8
|
||||||
#define RF_STATUS_BDLOCK_MASK 0x0000FF00U
|
#define ANT_RF_STATUS_BBLOCK_WIDTH 8
|
||||||
#define RF_STATUS_PLLA_SHIFT 16
|
#define ANT_RF_STATUS_BBLOCK_MASK 0x0000FF00U
|
||||||
#define RF_STATUS_PLLA_WIDTH 8
|
#define ANT_RF_STATUS_BBLOCK_OK 0x00000100U
|
||||||
#define RF_STATUS_PLLA_MASK 0x00FF0000U
|
|
||||||
#define RF_STATUS_PLLB_SHIFT 24
|
#define ANT_RF_STATUS_PLLA_SHIFT 16
|
||||||
#define RF_STATUS_PLLB_WIDTH 8
|
#define ANT_RF_STATUS_PLLA_WIDTH 8
|
||||||
#define RF_STATUS_PLLB_MASK 0xFF000000U
|
#define ANT_RF_STATUS_PLLA_MASK 0x00FF0000U
|
||||||
|
#define ANT_RF_STATUS_PLLA_OK 0x00010000U
|
||||||
|
|
||||||
|
#define ANT_RF_STATUS_PLLB_SHIFT 24
|
||||||
|
#define ANT_RF_STATUS_PLLB_WIDTH 8
|
||||||
|
#define ANT_RF_STATUS_PLLB_MASK 0xFF000000U
|
||||||
|
#define ANT_RF_STATUS_PLLB_OK 0x01000000U
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register: RF_MGC
|
* Register: ANT_RF_MGC
|
||||||
*/
|
*/
|
||||||
#define RF_MGC 0x0000010CU
|
#define ANT_RF_MGC 0x0000010CU
|
||||||
#define RF_MGC_CH1_SHIFT 0
|
#define ANT_RF_MGC_CH1_SHIFT 0
|
||||||
#define RF_MGC_CH1_WIDTH 4
|
#define ANT_RF_MGC_CH1_WIDTH 4
|
||||||
#define RF_MGC_CH1_MASK 0x0000000FU
|
#define ANT_RF_MGC_CH1_MASK 0x0000000FU
|
||||||
#define RF_MGC_CH2_SHIFT 8
|
#define ANT_RF_MGC_CH2_SHIFT 8
|
||||||
#define RF_MGC_CH2_WIDTH 4
|
#define ANT_RF_MGC_CH2_WIDTH 4
|
||||||
#define RF_MGC_CH2_MASK 0x00000F00U
|
#define ANT_RF_MGC_CH2_MASK 0x00000F00U
|
||||||
#define RF_MGC_CH3_SHIFT 16
|
#define ANT_RF_MGC_CH3_SHIFT 16
|
||||||
#define RF_MGC_CH3_WIDTH 4
|
#define ANT_RF_MGC_CH3_WIDTH 4
|
||||||
#define RF_MGC_CH3_MASK 0x000F0000U
|
#define ANT_RF_MGC_CH3_MASK 0x000F0000U
|
||||||
#define RF_MGC_CH4_SHIFT 24
|
#define ANT_RF_MGC_CH4_SHIFT 24
|
||||||
#define RF_MGC_CH4_WIDTH 4
|
#define ANT_RF_MGC_CH4_WIDTH 4
|
||||||
#define RF_MGC_CH4_MASK 0x0F000000U
|
#define ANT_RF_MGC_CH4_MASK 0x0F000000U
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register: RF_FRAME_CNT
|
* Register: ANT_RF_FRAME_CNT
|
||||||
*/
|
*/
|
||||||
#define RF_FRAME_CNT 0x00000110U
|
#define ANT_RF_FRAME_CNT 0x00000110U
|
||||||
#define RF_FRAME_CNT_SHIFT 0
|
#define ANT_RF_FRAME_CNT_SHIFT 0
|
||||||
#define RF_FRAME_CNT_WIDTH 32
|
#define ANT_RF_FRAME_CNT_WIDTH 32
|
||||||
#define RF_FRAME_CNT_MASK 0xFFFFFFFFU
|
#define ANT_RF_FRAME_CNT_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_ACQ_CNT
|
||||||
|
*/
|
||||||
|
#define PHY_ACQ_CNT 0x00000114U
|
||||||
|
#define PHY_ACQ_CNT_SHIFT 0
|
||||||
|
#define PHY_ACQ_CNT_WIDTH 32
|
||||||
|
#define PHY_ACQ_CNT_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_FRAME_SYNC_CNT
|
||||||
|
*/
|
||||||
|
#define PHY_FRAME_SYNC_CNT 0x00000118U
|
||||||
|
#define PHY_FRAME_SYNC_CNT_SHIFT 0
|
||||||
|
#define PHY_FRAME_SYNC_CNT_WIDTH 32
|
||||||
|
#define PHY_FRAME_SYNC_CNT_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_DECODE_CNT
|
||||||
|
*/
|
||||||
|
#define PHY_DECODE_CNT 0x0000011CU
|
||||||
|
#define PHY_DECODE_CNT_SHIFT 0
|
||||||
|
#define PHY_DECODE_CNT_WIDTH 32
|
||||||
|
#define PHY_DECODE_CNT_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_CRC_OK_CNT
|
||||||
|
*/
|
||||||
|
#define PHY_CRC_OK_CNT 0x00000120U
|
||||||
|
#define PHY_CRC_OK_CNT_SHIFT 0
|
||||||
|
#define PHY_CRC_OK_CNT_WIDTH 32
|
||||||
|
#define PHY_CRC_OK_CNT_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_ACQ_PEAK_H
|
||||||
|
*/
|
||||||
|
#define PHY_ACQ_PEAK_H 0x00000124U
|
||||||
|
#define PHY_ACQ_PEAK_H_SHIFT 0
|
||||||
|
#define PHY_ACQ_PEAK_H_WIDTH 32
|
||||||
|
#define PHY_ACQ_PEAK_H_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_ACQ_PEAK_L
|
||||||
|
*/
|
||||||
|
#define PHY_ACQ_PEAK_L 0x00000128U
|
||||||
|
#define PHY_ACQ_PEAK_L_SHIFT 0
|
||||||
|
#define PHY_ACQ_PEAK_L_WIDTH 32
|
||||||
|
#define PHY_ACQ_PEAK_L_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_ACQ_MEAN_H
|
||||||
|
*/
|
||||||
|
#define PHY_ACQ_MEAN_H 0x0000012CU
|
||||||
|
#define PHY_ACQ_MEAN_H_SHIFT 0
|
||||||
|
#define PHY_ACQ_MEAN_H_WIDTH 32
|
||||||
|
#define PHY_ACQ_MEAN_H_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_ACQ_MEAN_L
|
||||||
|
*/
|
||||||
|
#define PHY_ACQ_MEAN_L 0x00000130U
|
||||||
|
#define PHY_ACQ_MEAN_L_SHIFT 0
|
||||||
|
#define PHY_ACQ_MEAN_L_WIDTH 32
|
||||||
|
#define PHY_ACQ_MEAN_L_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_ACQ_FREQEST
|
||||||
|
*/
|
||||||
|
#define PHY_ACQ_FREQEST 0x00000134U
|
||||||
|
#define PHY_ACQ_FREQEST_SHIFT 0
|
||||||
|
#define PHY_ACQ_FREQEST_WIDTH 32
|
||||||
|
#define PHY_ACQ_FREQEST_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
#define PHY_ACQ_FREQEST_PHASE_SHIFT 0
|
||||||
|
#define PHY_ACQ_FREQEST_PHASE_WIDTH 8
|
||||||
|
#define PHY_ACQ_FREQEST_PHASE_MASK 0x000000FFU
|
||||||
|
#define PHY_ACQ_FREQEST_CHANNEL_SHIFT 8
|
||||||
|
#define PHY_ACQ_FREQEST_CHANNEL_WIDTH 8
|
||||||
|
#define PHY_ACQ_FREQEST_CHANNEL_MASK 0x0000FF00U
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_FRAME_SYNC_PEAK_H
|
||||||
|
*/
|
||||||
|
#define PHY_FRAME_SYNC_PEAK_H 0x00000138U
|
||||||
|
#define PHY_FRAME_SYNC_PEAK_H_SHIFT 0
|
||||||
|
#define PHY_FRAME_SYNC_PEAK_H_WIDTH 32
|
||||||
|
#define PHY_FRAME_SYNC_PEAK_H_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_FRAME_SYNC_PEAK_L
|
||||||
|
*/
|
||||||
|
#define PHY_FRAME_SYNC_PEAK_L 0x0000013CU
|
||||||
|
#define PHY_FRAME_SYNC_PEAK_L_SHIFT 0
|
||||||
|
#define PHY_FRAME_SYNC_PEAK_L_WIDTH 32
|
||||||
|
#define PHY_FRAME_SYNC_PEAK_L_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_FRAME_SYNC_MEAN_H
|
||||||
|
*/
|
||||||
|
#define PHY_FRAME_SYNC_MEAN_H 0x00000140U
|
||||||
|
#define PHY_FRAME_SYNC_MEAN_H_SHIFT 0
|
||||||
|
#define PHY_FRAME_SYNC_MEAN_H_WIDTH 32
|
||||||
|
#define PHY_FRAME_SYNC_MEAN_H_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_FRAME_SYNC_MEAN_L
|
||||||
|
*/
|
||||||
|
#define PHY_FRAME_SYNC_MEAN_L 0x00000144U
|
||||||
|
#define PHY_FRAME_SYNC_MEAN_L_SHIFT 0
|
||||||
|
#define PHY_FRAME_SYNC_MEAN_L_WIDTH 32
|
||||||
|
#define PHY_FRAME_SYNC_MEAN_L_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_FRAME_SYNC_FREQEST
|
||||||
|
*/
|
||||||
|
#define PHY_FRAME_SYNC_FREQEST 0x00000148U
|
||||||
|
#define PHY_FRAME_SYNC_FREQEST_SHIFT 0
|
||||||
|
#define PHY_FRAME_SYNC_FREQEST_WIDTH 32
|
||||||
|
#define PHY_FRAME_SYNC_FREQEST_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
#define PHY_FRAME_SYNC_FREQEST_CHANNEL_SHIFT 0
|
||||||
|
#define PHY_FRAME_SYNC_FREQEST_CHANNEL_WIDTH 8
|
||||||
|
#define PHY_FRAME_SYNC_FREQEST_CHANNEL_MASK 0x000000FFU
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register: PHY_DEINTLV_AMPEST
|
||||||
|
*/
|
||||||
|
#define PHY_DEINTLV_AMPEST 0x0000014CU
|
||||||
|
#define PHY_DEINTLV_AMPEST_SHIFT 0
|
||||||
|
#define PHY_DEINTLV_AMPEST_WIDTH 16
|
||||||
|
#define PHY_DEINTLV_AMPEST_MASK 0x0000FFFFU
|
||||||
|
|
||||||
#endif /* PHY_REG_H_ */
|
#endif /* PHY_REG_H_ */
|
||||||
|
|||||||
@@ -23,18 +23,16 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
PINGPONG recvPLCtrl;
|
PINGPONG recvCtrl;
|
||||||
PAYLOAD recvPL[2];
|
PAYLOAD recv[2];
|
||||||
PINGPONG sendPLCtrl;
|
PINGPONG sendCtrl;
|
||||||
PAYLOAD sendPL[2];
|
PAYLOAD send[2];
|
||||||
PINGPONG sysInfoCtrl;
|
PINGPONG sysInfoCtrl;
|
||||||
SYSINFO sysInfo[2];
|
SYSINFO sysInfo[2];
|
||||||
PINGPONG sendLogCtrl;
|
PINGPONG linkLogCtrl;
|
||||||
SLOTLOG sendLog[2];
|
LINKLOG linkLog[2];
|
||||||
PINGPONG recvLogCtrl;
|
PINGPONG phyLogCtrl;
|
||||||
SLOTLOG recvLog[2];
|
PHYLOG phyLog[2];
|
||||||
PINGPONG protocolLogCtrl;
|
|
||||||
PRTCLLOG protocolLog[2];
|
|
||||||
PINGPONG hwStateCtrl;
|
PINGPONG hwStateCtrl;
|
||||||
HWSTATE hwState[2];
|
HWSTATE hwState[2];
|
||||||
} SYSMONITOR;
|
} SYSMONITOR;
|
||||||
@@ -70,13 +68,17 @@ int32_t SysMonitor_Init(void)
|
|||||||
{
|
{
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
memset(&(sysMonitorInst->recvPLCtrl), BUFF_NONE, sizeof(PINGPONG));
|
memset(&(sysMonitorInst->recvCtrl), BUFF_NONE, sizeof(PINGPONG));
|
||||||
memset(&(sysMonitorInst->sendPLCtrl), BUFF_NONE, sizeof(PINGPONG));
|
memset(&(sysMonitorInst->sendCtrl), BUFF_NONE, sizeof(PINGPONG));
|
||||||
memset(&(sysMonitorInst->sysInfoCtrl), BUFF_NONE, sizeof(PINGPONG));
|
memset(&(sysMonitorInst->sysInfoCtrl), BUFF_NONE, sizeof(PINGPONG));
|
||||||
memset(&(sysMonitorInst->sendLogCtrl), BUFF_NONE, sizeof(PINGPONG));
|
memset(&(sysMonitorInst->linkLogCtrl), BUFF_NONE, sizeof(PINGPONG));
|
||||||
memset(&(sysMonitorInst->recvLogCtrl), BUFF_NONE, sizeof(PINGPONG));
|
memset(&(sysMonitorInst->phyLogCtrl), BUFF_NONE, sizeof(PINGPONG));
|
||||||
memset(&(sysMonitorInst->protocolLogCtrl), BUFF_NONE, sizeof(PINGPONG));
|
|
||||||
memset(&(sysMonitorInst->hwStateCtrl), BUFF_NONE, sizeof(PINGPONG));
|
memset(&(sysMonitorInst->hwStateCtrl), BUFF_NONE, sizeof(PINGPONG));
|
||||||
|
|
||||||
|
sysMonitorInst->recv[0].dataId = DATA_ID_NONE;
|
||||||
|
sysMonitorInst->recv[1].dataId = DATA_ID_NONE;
|
||||||
|
sysMonitorInst->send[0].dataId = DATA_ID_NONE;
|
||||||
|
sysMonitorInst->send[1].dataId = DATA_ID_NONE;
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +89,10 @@ void SysMonitor_Destroy(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// @System Info
|
// @System Info
|
||||||
void SysMonitor_UpdateSysinfo(SYSINFO *info)
|
/**
|
||||||
|
* Update system info.
|
||||||
|
*/
|
||||||
|
void SysMonitor_UpdateSysinfo(const SYSINFO *info)
|
||||||
{
|
{
|
||||||
uint8_t buffIndx;
|
uint8_t buffIndx;
|
||||||
buffIndx = GetWritable(sysMonitorInst->sysInfoCtrl);
|
buffIndx = GetWritable(sysMonitorInst->sysInfoCtrl);
|
||||||
@@ -97,49 +102,9 @@ void SysMonitor_UpdateSysinfo(SYSINFO *info)
|
|||||||
sysMonitorInst->sysInfoCtrl.wBusy = BUFF_NONE;
|
sysMonitorInst->sysInfoCtrl.wBusy = BUFF_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SysMonitor_UpdateSysinfoRaw(uint8_t *buff)
|
/**
|
||||||
{
|
* Get system info.
|
||||||
ASSERT(sysMonitorInst != NULL);
|
*/
|
||||||
uint8_t buffIndx;
|
|
||||||
buffIndx = GetWritable(sysMonitorInst->sysInfoCtrl);
|
|
||||||
sysMonitorInst->sysInfoCtrl.wBusy = buffIndx;
|
|
||||||
// Decapsulate Systeminfo
|
|
||||||
SYSINFO *infoEntry = &(sysMonitorInst->sysInfo[buffIndx]);
|
|
||||||
memcpy(&(infoEntry->psBDS), buff, sizeof(infoEntry->psBDS));
|
|
||||||
buff += sizeof(infoEntry->psBDS);
|
|
||||||
memcpy(&(infoEntry->pBDS), buff, sizeof(infoEntry->pBDS));
|
|
||||||
buff += sizeof(infoEntry->pBDS);
|
|
||||||
memcpy(&(infoEntry->psGPS), buff, sizeof(infoEntry->psGPS));
|
|
||||||
buff += sizeof(infoEntry->psGPS);
|
|
||||||
memcpy(&(infoEntry->pGPS), buff, sizeof(infoEntry->pGPS));
|
|
||||||
buff += sizeof(infoEntry->pGPS);
|
|
||||||
memcpy(&(infoEntry->tmInd), buff, sizeof(infoEntry->tmInd));
|
|
||||||
buff += sizeof(infoEntry->tmInd);
|
|
||||||
memcpy(&(infoEntry->tmFly), buff, sizeof(infoEntry->tmFly));
|
|
||||||
buff += sizeof(infoEntry->tmFly);
|
|
||||||
memcpy(&(infoEntry->stFly), buff, sizeof(infoEntry->stFly));
|
|
||||||
buff += sizeof(infoEntry->stFly);
|
|
||||||
memcpy(&(infoEntry->posX), buff, sizeof(infoEntry->posX));
|
|
||||||
buff += sizeof(infoEntry->posX);
|
|
||||||
memcpy(&(infoEntry->posY), buff, sizeof(infoEntry->posY));
|
|
||||||
buff += sizeof(infoEntry->posY);
|
|
||||||
memcpy(&(infoEntry->posZ), buff, sizeof(infoEntry->posZ));
|
|
||||||
buff += sizeof(infoEntry->posZ);
|
|
||||||
memcpy(&(infoEntry->vX), buff, sizeof(infoEntry->vX));
|
|
||||||
buff += sizeof(infoEntry->vX);
|
|
||||||
memcpy(&(infoEntry->vY), buff, sizeof(infoEntry->vY));
|
|
||||||
buff += sizeof(infoEntry->vY);
|
|
||||||
memcpy(&(infoEntry->vZ), buff, sizeof(infoEntry->vZ));
|
|
||||||
buff += sizeof(infoEntry->vZ);
|
|
||||||
memcpy(&(infoEntry->pitch), buff, sizeof(infoEntry->pitch));
|
|
||||||
buff += sizeof(infoEntry->pitch);
|
|
||||||
memcpy(&(infoEntry->yaw), buff, sizeof(infoEntry->yaw));
|
|
||||||
buff += sizeof(infoEntry->yaw);
|
|
||||||
memcpy(&(infoEntry->roll), buff, sizeof(infoEntry->roll));
|
|
||||||
sysMonitorInst->sysInfoCtrl.latest = buffIndx;
|
|
||||||
sysMonitorInst->sysInfoCtrl.wBusy = BUFF_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SysMonitor_GetSysinfo(SYSINFO *info)
|
void SysMonitor_GetSysinfo(SYSINFO *info)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
@@ -154,395 +119,150 @@ void SysMonitor_GetSysinfo(SYSINFO *info)
|
|||||||
sysMonitorInst->sysInfoCtrl.rBusy = buffIndex_old;
|
sysMonitorInst->sysInfoCtrl.rBusy = buffIndex_old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SysMonitor_GetSysinfoRaw(uint8_t *buff)
|
|
||||||
{
|
|
||||||
uint8_t buffIndx, buffIndex_old;
|
|
||||||
buffIndex_old = sysMonitorInst->sysInfoCtrl.rBusy;
|
|
||||||
if (buffIndex_old != BUFF_NONE)
|
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
|
||||||
else
|
|
||||||
buffIndx = GetReadable(sysMonitorInst->sysInfoCtrl);
|
|
||||||
sysMonitorInst->sysInfoCtrl.rBusy = buffIndx;
|
|
||||||
|
|
||||||
// Encapsulate Systeminfo
|
|
||||||
SYSINFO *infoEntry = &(sysMonitorInst->sysInfo[buffIndx]);
|
|
||||||
memcpy(buff, &(infoEntry->psBDS), sizeof(infoEntry->psBDS));
|
|
||||||
buff += sizeof(infoEntry->psBDS);
|
|
||||||
memcpy(buff, &(infoEntry->pBDS), sizeof(infoEntry->pBDS));
|
|
||||||
buff += sizeof(infoEntry->pBDS);
|
|
||||||
memcpy(buff, &(infoEntry->psGPS), sizeof(infoEntry->psGPS));
|
|
||||||
buff += sizeof(infoEntry->psGPS);
|
|
||||||
memcpy(buff, &(infoEntry->pGPS), sizeof(infoEntry->pGPS));
|
|
||||||
buff += sizeof(infoEntry->pGPS);
|
|
||||||
memcpy(buff, &(infoEntry->tmInd), sizeof(infoEntry->tmInd));
|
|
||||||
buff += sizeof(infoEntry->tmInd);
|
|
||||||
memcpy(buff, &(infoEntry->tmFly), sizeof(infoEntry->tmFly));
|
|
||||||
buff += sizeof(infoEntry->tmFly);
|
|
||||||
memcpy(buff, &(infoEntry->stFly), sizeof(infoEntry->stFly));
|
|
||||||
buff += sizeof(infoEntry->stFly);
|
|
||||||
memcpy(buff, &(infoEntry->posX), sizeof(infoEntry->posX));
|
|
||||||
buff += sizeof(infoEntry->posX);
|
|
||||||
memcpy(buff, &(infoEntry->posY), sizeof(infoEntry->posY));
|
|
||||||
buff += sizeof(infoEntry->posY);
|
|
||||||
memcpy(buff, &(infoEntry->posZ), sizeof(infoEntry->posZ));
|
|
||||||
buff += sizeof(infoEntry->posZ);
|
|
||||||
memcpy(buff, &(infoEntry->vX), sizeof(infoEntry->vX));
|
|
||||||
buff += sizeof(infoEntry->vX);
|
|
||||||
memcpy(buff, &(infoEntry->vY), sizeof(infoEntry->vY));
|
|
||||||
buff += sizeof(infoEntry->vY);
|
|
||||||
memcpy(buff, &(infoEntry->vZ), sizeof(infoEntry->vZ));
|
|
||||||
buff += sizeof(infoEntry->vZ);
|
|
||||||
memcpy(buff, &(infoEntry->pitch), sizeof(infoEntry->pitch));
|
|
||||||
buff += sizeof(infoEntry->pitch);
|
|
||||||
memcpy(buff, &(infoEntry->yaw), sizeof(infoEntry->yaw));
|
|
||||||
buff += sizeof(infoEntry->yaw);
|
|
||||||
memcpy(buff, &(infoEntry->roll), sizeof(infoEntry->roll));
|
|
||||||
sysMonitorInst->sysInfoCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
|
||||||
// @Send Payload
|
// @Send Payload
|
||||||
/**
|
/**
|
||||||
* Update send FLJ payload by raw data.
|
* Update send payload by.
|
||||||
*/
|
*/
|
||||||
void SysMonitor_UpdateSendPayloadFLJRaw(uint8_t *buff)
|
void SysMonitor_UpdateSendPayload(const uint8_t *buff, size_t len)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx;
|
uint8_t buffIndx;
|
||||||
buffIndx = GetWritable(sysMonitorInst->sendPLCtrl);
|
buffIndx = GetWritable(sysMonitorInst->sendCtrl);
|
||||||
sysMonitorInst->sendPLCtrl.wBusy = buffIndx;
|
sysMonitorInst->sendCtrl.wBusy = buffIndx;
|
||||||
memcpy(sysMonitorInst->sendPL[buffIndx].data_flj, buff, sizeof(uint8_t) * PAYLOAD_FLJ);
|
memcpy(sysMonitorInst->send[buffIndx].data, buff, len);
|
||||||
sysMonitorInst->sendPL[buffIndx].dataId_flj++;
|
sysMonitorInst->send[buffIndx].dataId++;
|
||||||
sysMonitorInst->sendPLCtrl.latest = buffIndx;
|
sysMonitorInst->sendCtrl.latest = buffIndx;
|
||||||
sysMonitorInst->sendPLCtrl.wBusy = BUFF_NONE;
|
sysMonitorInst->sendCtrl.wBusy = BUFF_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get send FLJ payload as raw data.
|
* Get the latest send payload.
|
||||||
*/
|
*/
|
||||||
void SysMonitor_GetSendPayloadFLJRaw(uint8_t *buff, uint32_t *id)
|
void SysMonitor_GetSendPayload(uint8_t *buff, uint32_t *id, size_t len)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx, buffIndex_old;
|
uint8_t buffIndx, buffIndex_old;
|
||||||
buffIndex_old = sysMonitorInst->sendPLCtrl.rBusy;
|
buffIndex_old = sysMonitorInst->sendCtrl.rBusy;
|
||||||
if (buffIndex_old != BUFF_NONE)
|
if (buffIndex_old != BUFF_NONE)
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
buffIndx = buffIndex_old; // Keep it busy
|
||||||
else
|
else
|
||||||
buffIndx = GetReadable(sysMonitorInst->sendPLCtrl);
|
buffIndx = GetReadable(sysMonitorInst->sendCtrl);
|
||||||
sysMonitorInst->sendPLCtrl.rBusy = buffIndx;
|
sysMonitorInst->sendCtrl.rBusy = buffIndx;
|
||||||
if (sysMonitorInst->sendPL[buffIndx].dataId_flj != DATA_ID_NONE)
|
if (sysMonitorInst->send[buffIndx].dataId != DATA_ID_NONE)
|
||||||
{
|
{
|
||||||
memcpy(buff, sysMonitorInst->sendPL[buffIndx].data_flj, sizeof(uint8_t) * PAYLOAD_FLJ);
|
memcpy(buff, sysMonitorInst->send[buffIndx].data, len);
|
||||||
}
|
}
|
||||||
*id = sysMonitorInst->sendPL[buffIndx].dataId_flj;
|
*id = sysMonitorInst->send[buffIndx].dataId;
|
||||||
sysMonitorInst->sendPLCtrl.rBusy = buffIndex_old;
|
sysMonitorInst->sendCtrl.rBusy = buffIndex_old;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update LJ send payload by raw data.
|
|
||||||
*/
|
|
||||||
void SysMonitor_UpdateSendPayloadLJRaw(uint8_t *buff)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx;
|
|
||||||
buffIndx = GetWritable(sysMonitorInst->sendPLCtrl);
|
|
||||||
sysMonitorInst->sendPLCtrl.wBusy = buffIndx;
|
|
||||||
memcpy(sysMonitorInst->sendPL[buffIndx].data_lj, buff, sizeof(uint8_t) * PAYLOAD_LJ);
|
|
||||||
sysMonitorInst->sendPL[buffIndx].dataId_lj++;
|
|
||||||
sysMonitorInst->sendPLCtrl.latest = buffIndx;
|
|
||||||
sysMonitorInst->sendPLCtrl.wBusy = BUFF_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get send LJ payload as raw data.
|
|
||||||
*/
|
|
||||||
void SysMonitor_GetSendPayloadLJRaw(uint8_t *buff, uint32_t *id)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx, buffIndex_old;
|
|
||||||
buffIndex_old = sysMonitorInst->sendPLCtrl.rBusy;
|
|
||||||
if (buffIndex_old != BUFF_NONE)
|
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
|
||||||
else
|
|
||||||
buffIndx = GetReadable(sysMonitorInst->sendPLCtrl);
|
|
||||||
sysMonitorInst->sendPLCtrl.rBusy = buffIndx;
|
|
||||||
if (sysMonitorInst->sendPL[buffIndx].dataId_lj != DATA_ID_NONE)
|
|
||||||
{
|
|
||||||
memcpy(buff, sysMonitorInst->sendPL[buffIndx].data_lj, sizeof(uint8_t) * PAYLOAD_LJ);
|
|
||||||
}
|
|
||||||
*id = sysMonitorInst->sendPL[buffIndx].dataId_lj;
|
|
||||||
sysMonitorInst->sendPLCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Receive Payload
|
// @Receive Payload
|
||||||
/**
|
/**
|
||||||
* Update receive FLJ payload by raw data.
|
* Update receive payload.
|
||||||
*/
|
*/
|
||||||
void SysMonitor_UpdateRecvPayloadFLJRaw(uint8_t *buff)
|
void SysMonitor_UpdateRecvPayload(const uint8_t *buff, size_t len)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx;
|
uint8_t buffIndx;
|
||||||
buffIndx = GetWritable(sysMonitorInst->recvPLCtrl);
|
buffIndx = GetWritable(sysMonitorInst->recvCtrl);
|
||||||
sysMonitorInst->recvPLCtrl.wBusy = buffIndx;
|
sysMonitorInst->recvCtrl.wBusy = buffIndx;
|
||||||
memcpy(sysMonitorInst->recvPL[buffIndx].data_flj, buff, sizeof(uint8_t) * PAYLOAD_FLJ);
|
memcpy(sysMonitorInst->recv[buffIndx].data, buff, len);
|
||||||
sysMonitorInst->recvPL[buffIndx].dataId_flj++;
|
sysMonitorInst->recv[buffIndx].dataId++;
|
||||||
sysMonitorInst->recvPLCtrl.latest = buffIndx;
|
sysMonitorInst->recvCtrl.latest = buffIndx;
|
||||||
sysMonitorInst->recvPLCtrl.wBusy = BUFF_NONE;
|
sysMonitorInst->recvCtrl.wBusy = BUFF_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get send FLJ payload as raw data.
|
* Get the latest receive payload.
|
||||||
*/
|
*/
|
||||||
void SysMonitor_GetRecvPayloadFLJRaw(uint8_t *buff, uint32_t *id)
|
void SysMonitor_GetRecvPayload(uint8_t *buff, uint32_t *id, size_t len)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx, buffIndex_old;
|
uint8_t buffIndx, buffIndex_old;
|
||||||
buffIndex_old = sysMonitorInst->recvPLCtrl.rBusy;
|
buffIndex_old = sysMonitorInst->recvCtrl.rBusy;
|
||||||
if (buffIndex_old != BUFF_NONE)
|
if (buffIndex_old != BUFF_NONE)
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
buffIndx = buffIndex_old; // Keep it busy
|
||||||
else
|
else
|
||||||
buffIndx = GetReadable(sysMonitorInst->recvPLCtrl);
|
buffIndx = GetReadable(sysMonitorInst->recvCtrl);
|
||||||
sysMonitorInst->recvPLCtrl.rBusy = buffIndx;
|
sysMonitorInst->recvCtrl.rBusy = buffIndx;
|
||||||
if (sysMonitorInst->recvPL[buffIndx].dataId_flj != DATA_ID_NONE)
|
if (sysMonitorInst->recv[buffIndx].dataId != DATA_ID_NONE)
|
||||||
{
|
{
|
||||||
memcpy(buff, sysMonitorInst->recvPL[buffIndx].data_flj, sizeof(uint8_t) * PAYLOAD_FLJ);
|
memcpy(buff, sysMonitorInst->recv[buffIndx].data, len);
|
||||||
}
|
}
|
||||||
*id = sysMonitorInst->recvPL[buffIndx].dataId_flj;
|
*id = sysMonitorInst->recv[buffIndx].dataId;
|
||||||
sysMonitorInst->recvPLCtrl.rBusy = buffIndex_old;
|
sysMonitorInst->recvCtrl.rBusy = buffIndex_old;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Link layer log
|
||||||
/**
|
/**
|
||||||
* Update receive LJ payload by raw data.
|
* Update link layer log
|
||||||
*/
|
*/
|
||||||
void SysMonitor_UpdateRecvPayloadLJRaw(uint8_t *buff)
|
void SysMonitor_UpdateLinklayerLog(const LINKLOG *log)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx;
|
uint8_t buffIndx;
|
||||||
buffIndx = GetWritable(sysMonitorInst->recvPLCtrl);
|
buffIndx = GetWritable(sysMonitorInst->linkLogCtrl);
|
||||||
sysMonitorInst->recvPLCtrl.wBusy = buffIndx;
|
sysMonitorInst->linkLogCtrl.wBusy = buffIndx;
|
||||||
memcpy(sysMonitorInst->recvPL[buffIndx].data_lj, buff, sizeof(uint8_t) * PAYLOAD_LJ);
|
memcpy(&(sysMonitorInst->linkLog[buffIndx]), log, sizeof(LINKLOG));
|
||||||
sysMonitorInst->recvPL[buffIndx].dataId_lj++;
|
sysMonitorInst->linkLogCtrl.latest = buffIndx;
|
||||||
sysMonitorInst->recvPLCtrl.latest = buffIndx;
|
sysMonitorInst->linkLogCtrl.wBusy = BUFF_NONE;
|
||||||
sysMonitorInst->recvPLCtrl.wBusy = BUFF_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get send LJ payload as raw data.
|
* Get the latest link layer log
|
||||||
*/
|
*/
|
||||||
void SysMonitor_GetRecvPayloadLJRaw(uint8_t *buff, uint32_t *id)
|
void SysMonitor_GetLinklayerLog(LINKLOG *log)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx, buffIndex_old;
|
uint8_t buffIndx, buffIndex_old;
|
||||||
buffIndex_old = sysMonitorInst->recvPLCtrl.rBusy;
|
buffIndex_old = sysMonitorInst->linkLogCtrl.rBusy;
|
||||||
if (buffIndex_old != BUFF_NONE)
|
if (buffIndex_old != BUFF_NONE)
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
buffIndx = buffIndex_old; // Keep it busy
|
||||||
else
|
else
|
||||||
buffIndx = GetReadable(sysMonitorInst->recvPLCtrl);
|
buffIndx = GetReadable(sysMonitorInst->linkLogCtrl);
|
||||||
sysMonitorInst->recvPLCtrl.rBusy = buffIndx;
|
sysMonitorInst->linkLogCtrl.rBusy = buffIndx;
|
||||||
if (sysMonitorInst->recvPL[buffIndx].dataId_lj != DATA_ID_NONE)
|
memcpy(log, &(sysMonitorInst->linkLog[buffIndx]), sizeof(LINKLOG));
|
||||||
{
|
sysMonitorInst->linkLogCtrl.rBusy = buffIndex_old;
|
||||||
memcpy(buff, sysMonitorInst->recvPL[buffIndx].data_lj, sizeof(uint8_t) * PAYLOAD_LJ);
|
|
||||||
}
|
|
||||||
*id = sysMonitorInst->recvPL[buffIndx].dataId_lj;
|
|
||||||
sysMonitorInst->recvPLCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Send Slot log
|
// @Physical layer log
|
||||||
/**
|
/**
|
||||||
* Log send slot information
|
* Update physical layer log
|
||||||
*/
|
*/
|
||||||
void SysMonitor_UpdateSendSlotLog(SLOTLOG *log)
|
void SysMonitor_UpdatePhysicalLayerLog(const PHYLOG *log)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx;
|
uint8_t buffIndx;
|
||||||
buffIndx = GetWritable(sysMonitorInst->sendLogCtrl);
|
buffIndx = GetWritable(sysMonitorInst->phyLogCtrl);
|
||||||
sysMonitorInst->sendLogCtrl.wBusy = buffIndx;
|
sysMonitorInst->phyLogCtrl.wBusy = buffIndx;
|
||||||
memcpy(&(sysMonitorInst->sendLog[buffIndx]), log, sizeof(SLOTLOG));
|
memcpy(&(sysMonitorInst->phyLog[buffIndx]), log, sizeof(PHYLOG));
|
||||||
sysMonitorInst->sendLogCtrl.latest = buffIndx;
|
sysMonitorInst->phyLogCtrl.latest = buffIndx;
|
||||||
sysMonitorInst->sendLogCtrl.wBusy = BUFF_NONE;
|
sysMonitorInst->phyLogCtrl.wBusy = BUFF_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the latest send slot log
|
* Get the latest physical layer log
|
||||||
*/
|
*/
|
||||||
void SysMonitor_GetSendSlotLog(SLOTLOG *log)
|
void SysMonitor_GetPhysicalLayerLog(PHYLOG *log)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx, buffIndex_old;
|
uint8_t buffIndx, buffIndex_old;
|
||||||
buffIndex_old = sysMonitorInst->sendLogCtrl.rBusy;
|
buffIndex_old = sysMonitorInst->phyLogCtrl.rBusy;
|
||||||
if (buffIndex_old != BUFF_NONE)
|
if (buffIndex_old != BUFF_NONE)
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
buffIndx = buffIndex_old; // Keep it busy
|
||||||
else
|
else
|
||||||
buffIndx = GetReadable(sysMonitorInst->sendLogCtrl);
|
buffIndx = GetReadable(sysMonitorInst->phyLogCtrl);
|
||||||
sysMonitorInst->sendLogCtrl.rBusy = buffIndx;
|
sysMonitorInst->phyLogCtrl.rBusy = buffIndx;
|
||||||
memcpy(log, &(sysMonitorInst->sendLog[buffIndx]), sizeof(SLOTLOG));
|
memcpy(log, &(sysMonitorInst->phyLog[buffIndx]), sizeof(PHYLOG));
|
||||||
sysMonitorInst->sendLogCtrl.rBusy = buffIndex_old;
|
sysMonitorInst->phyLogCtrl.rBusy = buffIndex_old;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the latest send slot log as raw data
|
|
||||||
*/
|
|
||||||
void SysMonitor_GetSendSlotLogRaw(uint8_t *buff)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx, buffIndex_old;
|
|
||||||
buffIndex_old = sysMonitorInst->sendLogCtrl.rBusy;
|
|
||||||
if (buffIndex_old != BUFF_NONE)
|
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
|
||||||
else
|
|
||||||
buffIndx = GetReadable(sysMonitorInst->sendLogCtrl);
|
|
||||||
sysMonitorInst->sendLogCtrl.rBusy = buffIndx;
|
|
||||||
|
|
||||||
// Encapsulate log
|
|
||||||
SLOTLOG *logEntry = &(sysMonitorInst->sendLog[buffIndx]);
|
|
||||||
memcpy(buff, &(logEntry->tuNo), sizeof(logEntry->tuNo));
|
|
||||||
buff += sizeof(logEntry->tuNo);
|
|
||||||
memcpy(buff, &(logEntry->slotNo), sizeof(logEntry->slotNo));
|
|
||||||
buff += sizeof(logEntry->slotNo);
|
|
||||||
memcpy(buff, &(logEntry->frameType), sizeof(logEntry->frameType));
|
|
||||||
buff += sizeof(logEntry->frameType);
|
|
||||||
memcpy(buff, &(logEntry->payload), sizeof(logEntry->payload));
|
|
||||||
buff += sizeof(logEntry->payload);
|
|
||||||
memcpy(buff, &(logEntry->tmStamp), sizeof(logEntry->tmStamp));
|
|
||||||
buff += sizeof(logEntry->tmStamp);
|
|
||||||
memcpy(buff, &(logEntry->tmDevi), sizeof(logEntry->tmDevi));
|
|
||||||
buff += sizeof(logEntry->tmDevi);
|
|
||||||
memcpy(buff, &(logEntry->freqDevi), sizeof(logEntry->freqDevi));
|
|
||||||
sysMonitorInst->sendLogCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Receive Slot log
|
|
||||||
/**
|
|
||||||
* Log receive slot information
|
|
||||||
*/
|
|
||||||
void SysMonitor_UpdateRecvSlotLog(SLOTLOG *log)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx;
|
|
||||||
buffIndx = GetWritable(sysMonitorInst->recvLogCtrl);
|
|
||||||
sysMonitorInst->recvLogCtrl.wBusy = buffIndx;
|
|
||||||
memcpy(&(sysMonitorInst->recvLog[buffIndx]), log, sizeof(SLOTLOG));
|
|
||||||
sysMonitorInst->recvLogCtrl.latest = buffIndx;
|
|
||||||
sysMonitorInst->recvLogCtrl.wBusy = BUFF_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the latest receive slot information
|
|
||||||
*/
|
|
||||||
void SysMonitor_GetRecvSlotLog(SLOTLOG *log)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx, buffIndex_old;
|
|
||||||
buffIndex_old = sysMonitorInst->recvLogCtrl.rBusy;
|
|
||||||
if (buffIndex_old != BUFF_NONE)
|
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
|
||||||
else
|
|
||||||
buffIndx = GetReadable(sysMonitorInst->recvLogCtrl);
|
|
||||||
sysMonitorInst->recvLogCtrl.rBusy = buffIndx;
|
|
||||||
memcpy(log, &(sysMonitorInst->recvLog[buffIndx]), sizeof(SLOTLOG));
|
|
||||||
sysMonitorInst->recvLogCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the latest receive slot information as raw data
|
|
||||||
*/
|
|
||||||
void SysMonitor_GetRecvSlotLogRaw(uint8_t *buff)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx, buffIndex_old;
|
|
||||||
buffIndex_old = sysMonitorInst->recvLogCtrl.rBusy;
|
|
||||||
if (buffIndex_old != BUFF_NONE)
|
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
|
||||||
else
|
|
||||||
buffIndx = GetReadable(sysMonitorInst->recvLogCtrl);
|
|
||||||
sysMonitorInst->recvLogCtrl.rBusy = buffIndx;
|
|
||||||
|
|
||||||
// Encapsulate log
|
|
||||||
SLOTLOG *logEntry = &(sysMonitorInst->recvLog[buffIndx]);
|
|
||||||
memcpy(buff, &(logEntry->tuNo), sizeof(logEntry->tuNo));
|
|
||||||
buff += sizeof(logEntry->tuNo);
|
|
||||||
memcpy(buff, &(logEntry->slotNo), sizeof(logEntry->slotNo));
|
|
||||||
buff += sizeof(logEntry->slotNo);
|
|
||||||
memcpy(buff, &(logEntry->frameType), sizeof(logEntry->frameType));
|
|
||||||
buff += sizeof(logEntry->frameType);
|
|
||||||
memcpy(buff, &(logEntry->payload), sizeof(logEntry->payload));
|
|
||||||
buff += sizeof(logEntry->payload);
|
|
||||||
memcpy(buff, &(logEntry->tmStamp), sizeof(logEntry->tmStamp));
|
|
||||||
buff += sizeof(logEntry->tmStamp);
|
|
||||||
memcpy(buff, &(logEntry->tmDevi), sizeof(logEntry->tmDevi));
|
|
||||||
buff += sizeof(logEntry->tmDevi);
|
|
||||||
memcpy(buff, &(logEntry->freqDevi), sizeof(logEntry->freqDevi));
|
|
||||||
sysMonitorInst->recvLogCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Protocol log
|
|
||||||
/**
|
|
||||||
* Log protocol running status.
|
|
||||||
*/
|
|
||||||
void SysMonitor_UpdateProtocolLog(PRTCLLOG *log)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx;
|
|
||||||
buffIndx = GetWritable(sysMonitorInst->protocolLogCtrl);
|
|
||||||
sysMonitorInst->protocolLogCtrl.wBusy = buffIndx;
|
|
||||||
memcpy(&(sysMonitorInst->protocolLog[buffIndx]), log, sizeof(PRTCLLOG));
|
|
||||||
sysMonitorInst->protocolLogCtrl.latest = buffIndx;
|
|
||||||
sysMonitorInst->protocolLogCtrl.wBusy = BUFF_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the protocol running log.
|
|
||||||
*/
|
|
||||||
void SysMonitor_GetProtocolLog(PRTCLLOG *log)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx, buffIndex_old;
|
|
||||||
buffIndex_old = sysMonitorInst->protocolLogCtrl.rBusy;
|
|
||||||
if (buffIndex_old != BUFF_NONE)
|
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
|
||||||
else
|
|
||||||
buffIndx = GetReadable(sysMonitorInst->protocolLogCtrl);
|
|
||||||
sysMonitorInst->protocolLogCtrl.rBusy = buffIndx;
|
|
||||||
memcpy(log, &(sysMonitorInst->protocolLog[buffIndx]), sizeof(PRTCLLOG));
|
|
||||||
sysMonitorInst->protocolLogCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the protocol running log as raw data.
|
|
||||||
*/
|
|
||||||
void SysMonitor_GetProtocolLogRaw(uint8_t *buff)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx, buffIndex_old;
|
|
||||||
buffIndex_old = sysMonitorInst->protocolLogCtrl.rBusy;
|
|
||||||
if (buffIndex_old != BUFF_NONE)
|
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
|
||||||
else
|
|
||||||
buffIndx = GetReadable(sysMonitorInst->protocolLogCtrl);
|
|
||||||
sysMonitorInst->protocolLogCtrl.rBusy = buffIndx;
|
|
||||||
|
|
||||||
// Encapsulate log
|
|
||||||
PRTCLLOG *logEntry = &(sysMonitorInst->protocolLog[buffIndx]);
|
|
||||||
memcpy(buff, &(logEntry->tmSys), sizeof(logEntry->tmSys));
|
|
||||||
buff += sizeof(logEntry->tmSys);
|
|
||||||
memcpy(buff, &(logEntry->phySt), sizeof(logEntry->phySt));
|
|
||||||
buff += sizeof(logEntry->phySt);
|
|
||||||
memcpy(buff, &(logEntry->tmLocal), sizeof(logEntry->tmLocal));
|
|
||||||
buff += sizeof(logEntry->tmLocal);
|
|
||||||
memcpy(buff, &(logEntry->beamNo), sizeof(logEntry->beamNo));
|
|
||||||
buff += sizeof(logEntry->beamNo);
|
|
||||||
memcpy(buff, &(logEntry->beamWidth), sizeof(logEntry->beamWidth));
|
|
||||||
buff += sizeof(logEntry->beamWidth);
|
|
||||||
memcpy(buff, &(logEntry->stage), sizeof(logEntry->stage));
|
|
||||||
buff += sizeof(logEntry->stage);
|
|
||||||
memcpy(buff, &(logEntry->recvCnt), sizeof(logEntry->recvCnt));
|
|
||||||
buff += sizeof(logEntry->recvCnt);
|
|
||||||
sysMonitorInst->protocolLogCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Hardware state
|
// @Hardware state
|
||||||
/**
|
/**
|
||||||
* Log hardware running status.
|
* Log hardware running status.
|
||||||
*/
|
*/
|
||||||
void SysMonitor_UpdateHardwareStatus(HWSTATE *state)
|
void SysMonitor_UpdateHardwareStatus(const HWSTATE *state)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
uint8_t buffIndx;
|
uint8_t buffIndx;
|
||||||
@@ -570,39 +290,6 @@ void SysMonitor_GetHardwareStatus(HWSTATE *state)
|
|||||||
sysMonitorInst->hwStateCtrl.rBusy = buffIndex_old;
|
sysMonitorInst->hwStateCtrl.rBusy = buffIndex_old;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the latest hardware running status as raw data.
|
|
||||||
*/
|
|
||||||
void SysMonitor_GetHardwareStatusRaw(uint8_t *buff)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
uint8_t buffIndx, buffIndex_old;
|
|
||||||
buffIndex_old = sysMonitorInst->hwStateCtrl.rBusy;
|
|
||||||
if (buffIndex_old != BUFF_NONE)
|
|
||||||
buffIndx = buffIndex_old; // Keep it busy
|
|
||||||
else
|
|
||||||
buffIndx = GetReadable(sysMonitorInst->hwStateCtrl);
|
|
||||||
sysMonitorInst->hwStateCtrl.rBusy = buffIndx;
|
|
||||||
|
|
||||||
// Encapsulate state
|
|
||||||
HWSTATE *stateEntry = &(sysMonitorInst->hwState[buffIndx]);
|
|
||||||
memcpy(buff, &(stateEntry->spVolt), sizeof(stateEntry->spVolt));
|
|
||||||
buff += sizeof(stateEntry->spVolt);
|
|
||||||
memcpy(buff, &(stateEntry->spTemp), sizeof(stateEntry->spTemp));
|
|
||||||
buff += sizeof(stateEntry->spTemp);
|
|
||||||
memcpy(buff, &(stateEntry->chipSt), sizeof(stateEntry->chipSt));
|
|
||||||
buff += sizeof(stateEntry->chipSt);
|
|
||||||
memcpy(buff, &(stateEntry->antVolt), sizeof(stateEntry->antVolt));
|
|
||||||
buff += sizeof(stateEntry->antVolt);
|
|
||||||
memcpy(buff, &(stateEntry->antTemp), sizeof(stateEntry->antTemp));
|
|
||||||
buff += sizeof(stateEntry->antTemp);
|
|
||||||
memcpy(buff, &(stateEntry->antPll), sizeof(stateEntry->antPll));
|
|
||||||
buff += sizeof(stateEntry->antPll);
|
|
||||||
memcpy(buff, &(stateEntry->antMgc), sizeof(stateEntry->antMgc));
|
|
||||||
buff += sizeof(stateEntry->antMgc);
|
|
||||||
memcpy(buff, &(stateEntry->antSt), sizeof(stateEntry->antSt));
|
|
||||||
sysMonitorInst->hwStateCtrl.rBusy = buffIndex_old;
|
|
||||||
}
|
|
||||||
|
|
||||||
// @System log
|
// @System log
|
||||||
/**
|
/**
|
||||||
@@ -611,23 +298,7 @@ void SysMonitor_GetHardwareStatusRaw(uint8_t *buff)
|
|||||||
void SysMonitor_GetSyslog(SYSLOG *log)
|
void SysMonitor_GetSyslog(SYSLOG *log)
|
||||||
{
|
{
|
||||||
ASSERT(sysMonitorInst != NULL);
|
ASSERT(sysMonitorInst != NULL);
|
||||||
SysMonitor_GetSendSlotLog(&(log->sendLog));
|
SysMonitor_GetLinklayerLog(&(log->linkLog));
|
||||||
SysMonitor_GetRecvSlotLog(&(log->recvLog));
|
SysMonitor_GetPhysicalLayerLog(&(log->phyLog));
|
||||||
SysMonitor_GetProtocolLog(&(log->protocolLog));
|
SysMonitor_GetHardwareStatus(&(log->hwState));
|
||||||
SysMonitor_GetHardwareStatus(&(log->hwSate));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the latest system running log as raw data.
|
|
||||||
*/
|
|
||||||
void SysMonitor_GetSyslogRaw(uint8_t *buff)
|
|
||||||
{
|
|
||||||
ASSERT(sysMonitorInst != NULL);
|
|
||||||
SysMonitor_GetSendSlotLogRaw(buff);
|
|
||||||
buff += SLOTLOG_PACK_LEN;
|
|
||||||
SysMonitor_GetRecvSlotLogRaw(buff);
|
|
||||||
buff += SLOTLOG_PACK_LEN;
|
|
||||||
SysMonitor_GetProtocolLogRaw(buff);
|
|
||||||
buff += PRTCLLOG_PACK_ELN;
|
|
||||||
SysMonitor_GetHardwareStatusRaw(buff);
|
|
||||||
}
|
}
|
||||||
@@ -4,18 +4,37 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define PAYLOAD_FLJ 78
|
#define PAYLOAD_LEN_MAX 256
|
||||||
#define PAYLOAD_LJ 168
|
#define PAYLOAD_LEN_FLJ_RX 168
|
||||||
|
#define PAYLOAD_LEN_FLJ_TX 66
|
||||||
|
#define PAYLOAD_LEN_LJ_RX 66
|
||||||
|
#define PAYLOAD_LEN_LJ_TX 168
|
||||||
|
|
||||||
#define DATA_ID_NONE UINT32_MAX
|
#define DATA_ID_NONE UINT32_MAX
|
||||||
|
#define DATA_ID_TEST 0x02030203
|
||||||
|
|
||||||
typedef struct
|
#define VOLTAGE_LSB 0.01 // volt
|
||||||
{
|
#define VOLTAGE_MAX 2.55 // volt
|
||||||
// FIXME: To Complete
|
|
||||||
uint8_t dummy;
|
|
||||||
} SYSCONFIG;
|
|
||||||
|
|
||||||
typedef struct
|
#define VOLT_PS_STD 1.0
|
||||||
|
#define VOLT_PSAUX_STD 1.8
|
||||||
|
#define VOLT_DDR_STD 1.5
|
||||||
|
#define VOLT_PL_STD 1.0
|
||||||
|
#define VOLT_PLAUX_STD 1.8
|
||||||
|
#define VOLT_BRAM_STD 1.0
|
||||||
|
|
||||||
|
#define IS_PS_VALID(x) (x <= 0.95 && x >= 1.05)
|
||||||
|
#define IS_PSAUX_VALID(x) (x <= 1.89 && x >= 1.71)
|
||||||
|
#define IS_DDR_VALID(x) (x <= 1.14 && x >= 1.89)
|
||||||
|
#define IS_PL_VALID(x) (x <= 0.97 && x >= 1.03)
|
||||||
|
#define IS_PLAUX_VALID(x) (x <= 1.89 && x >= 1.71)
|
||||||
|
#define IS_BRAM_VALID(x) (x <= 0.97 && x >= 1.03)
|
||||||
|
|
||||||
|
#define TEMPERATURE_LSB 1.0 // Celsius degree
|
||||||
|
#define TEMPERATURE_MAX 127.0 // Celsius degree
|
||||||
|
#define TEMPERATURE_MIN -128.0 // Celsius degree
|
||||||
|
|
||||||
|
typedef struct __attribute__((packed))
|
||||||
{
|
{
|
||||||
// -- unit: ms, 0~604799999
|
// -- unit: ms, 0~604799999
|
||||||
uint32_t psBDS;
|
uint32_t psBDS;
|
||||||
@@ -54,107 +73,110 @@ typedef struct
|
|||||||
float roll;
|
float roll;
|
||||||
} SYSINFO;
|
} SYSINFO;
|
||||||
|
|
||||||
typedef struct
|
typedef struct __attribute__((packed))
|
||||||
{
|
|
||||||
uint32_t dataId_lj;
|
|
||||||
uint8_t data_lj[PAYLOAD_LJ];
|
|
||||||
uint32_t dataId_flj;
|
|
||||||
uint8_t data_flj[PAYLOAD_FLJ];
|
|
||||||
} PAYLOAD;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
{
|
||||||
// Network log
|
// Network log
|
||||||
uint32_t tuNo;
|
uint32_t tuNum;
|
||||||
uint8_t slotNo;
|
uint8_t slotNum;
|
||||||
uint8_t frameType;
|
uint8_t nodeType;
|
||||||
// Payload
|
uint8_t cxnStatus;
|
||||||
uint8_t payload[256];
|
uint8_t linkStage;
|
||||||
// Time sync info
|
uint32_t recxnCnt;
|
||||||
uint64_t tmStamp;
|
uint8_t beamNo;
|
||||||
uint32_t tmDevi;
|
|
||||||
uint32_t freqDevi;
|
|
||||||
} SLOTLOG;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
// Protocol log
|
|
||||||
// -- System time
|
|
||||||
uint32_t tmSys;
|
|
||||||
// -- Physical layer status
|
|
||||||
uint8_t phySt;
|
|
||||||
// -- Link layer status
|
|
||||||
uint64_t tmLocal;
|
|
||||||
uint16_t beamNo;
|
|
||||||
uint8_t beamWidth;
|
uint8_t beamWidth;
|
||||||
// -- Network layer status
|
uint16_t beamAz;
|
||||||
uint8_t stage;
|
uint16_t beamEl;
|
||||||
uint32_t recvCnt;
|
uint16_t advTxCnt;
|
||||||
uint32_t recvCorrect;
|
uint16_t advRecvCnt;
|
||||||
} PRTCLLOG;
|
uint16_t advCorrectCnt;
|
||||||
|
uint32_t cfmTxCnt;
|
||||||
|
uint32_t cfmRecvCnt;
|
||||||
|
uint32_t cfmCorrectCnt;
|
||||||
|
uint32_t svcTxCnt;
|
||||||
|
uint32_t svcRecvCnt;
|
||||||
|
uint32_t svcCorrectCnt;
|
||||||
|
int64_t timeDev;
|
||||||
|
uint32_t sendId;
|
||||||
|
uint32_t recvId;
|
||||||
|
} LINKLOG;
|
||||||
|
|
||||||
typedef struct
|
typedef struct __attribute__((packed))
|
||||||
{
|
{
|
||||||
// Hardware log
|
uint32_t acqCnt;
|
||||||
|
uint32_t fsyncCnt;
|
||||||
|
uint32_t decodeCnt;
|
||||||
|
uint32_t crcCnt;
|
||||||
|
double doppler;
|
||||||
|
uint64_t recvStamp;
|
||||||
|
uint64_t acqPeak;
|
||||||
|
uint64_t acqMean;
|
||||||
|
uint8_t acqPhase;
|
||||||
|
uint8_t acqFreqCh;
|
||||||
|
uint64_t fsyncPeak;
|
||||||
|
uint64_t fsyncMean;
|
||||||
|
uint8_t fsyncFreqCh;
|
||||||
|
uint16_t deintlvAmpEst;
|
||||||
|
uint16_t reserve;
|
||||||
|
} PHYLOG;
|
||||||
|
|
||||||
|
typedef struct __attribute__((packed))
|
||||||
|
{
|
||||||
|
// Hardware status
|
||||||
|
bool isSpOk;
|
||||||
|
bool isAntOk;
|
||||||
// -- Signal processor status
|
// -- Signal processor status
|
||||||
uint16_t spVolt;
|
uint8_t spPsVolt;
|
||||||
uint16_t spTemp;
|
uint8_t spPsAuxVolt;
|
||||||
uint16_t chipSt;
|
uint8_t spDdrVolt;
|
||||||
|
uint8_t spPlVolt;
|
||||||
|
uint8_t spPlAuxVolt;
|
||||||
|
uint8_t spBramVolt;
|
||||||
|
int8_t spTemp;
|
||||||
// -- Antenna status
|
// -- Antenna status
|
||||||
uint8_t antVolt;
|
uint8_t antVolt;
|
||||||
uint8_t antTemp;
|
uint8_t antTemp;
|
||||||
uint8_t antPll;
|
uint8_t antPll;
|
||||||
uint16_t antMgc;
|
uint8_t antMgc0;
|
||||||
uint8_t antSt;
|
uint8_t antMgc1;
|
||||||
|
uint8_t dummy;
|
||||||
} HWSTATE;
|
} HWSTATE;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
// Send slot log
|
// Link layer log
|
||||||
SLOTLOG sendLog;
|
LINKLOG linkLog;
|
||||||
|
|
||||||
// Receive slot log
|
// Physical layer log
|
||||||
SLOTLOG recvLog;
|
PHYLOG phyLog;
|
||||||
|
|
||||||
// Protocol log
|
|
||||||
PRTCLLOG protocolLog;
|
|
||||||
|
|
||||||
// Hardware status
|
// Hardware status
|
||||||
HWSTATE hwSate;
|
HWSTATE hwState;
|
||||||
} SYSLOG;
|
} SYSLOG;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t dataId;
|
||||||
|
uint8_t data[PAYLOAD_LEN_MAX];
|
||||||
|
} PAYLOAD;
|
||||||
|
|
||||||
int32_t SysMonitor_Init(void);
|
int32_t SysMonitor_Init(void);
|
||||||
void SysMonitor_Destroy(void);
|
void SysMonitor_Destroy(void);
|
||||||
|
|
||||||
void SysMonitor_UpdateSysinfo(SYSINFO *info);
|
void SysMonitor_UpdateSysinfo(const SYSINFO *info);
|
||||||
void SysMonitor_UpdateSysinfoRaw(uint8_t *buff);
|
|
||||||
void SysMonitor_GetSysinfo(SYSINFO *info);
|
void SysMonitor_GetSysinfo(SYSINFO *info);
|
||||||
void SysMonitor_GetSysinfoRaw(uint8_t *buff);
|
|
||||||
|
|
||||||
void SysMonitor_UpdateSendPayloadFLJRaw(uint8_t *buff);
|
void SysMonitor_UpdateSendPayload(const uint8_t *buff, size_t len);
|
||||||
void SysMonitor_UpdateRecvPayloadFLJRaw(uint8_t *buff);
|
void SysMonitor_UpdateRecvPayload(const uint8_t *buff, size_t len);
|
||||||
void SysMonitor_UpdateSendPayloadLJRaw(uint8_t *buff);
|
void SysMonitor_GetSendPayload(uint8_t *buff, uint32_t *id, size_t len);
|
||||||
void SysMonitor_UpdateRecvPayloadLJRaw(uint8_t *buff);
|
void SysMonitor_GetRecvPayload(uint8_t *buff, uint32_t *id, size_t len);
|
||||||
void SysMonitor_GetSendPayloadFLJRaw(uint8_t *buff, uint32_t *id);
|
|
||||||
void SysMonitor_GetRecvPayloadFLJRaw(uint8_t *buff, uint32_t *id);
|
|
||||||
void SysMonitor_GetSendPayloadLJRaw(uint8_t *buff, uint32_t *id);
|
|
||||||
void SysMonitor_GetRecvPayloadLJRaw(uint8_t *buff, uint32_t *id);
|
|
||||||
|
|
||||||
void SysMonitor_UpdateSendSlotLog(SLOTLOG *log);
|
void SysMonitor_UpdateLinklayerLog(const LINKLOG *log);
|
||||||
void SysMonitor_UpdateRecvSlotLog(SLOTLOG *log);
|
void SysMonitor_UpdatePhysicalLayerLog(const PHYLOG *log);
|
||||||
void SysMonitor_UpdateProtocolLog(PRTCLLOG *log);
|
void SysMonitor_UpdateHardwareStatus(const HWSTATE *state);
|
||||||
void SysMonitor_GetSendSlotLog(SLOTLOG *log);
|
void SysMonitor_GetLinklayerLog(LINKLOG *log);
|
||||||
void SysMonitor_GetRecvSlotLog(SLOTLOG *log);
|
void SysMonitor_GetPhysicalLayerLog(PHYLOG *log);
|
||||||
void SysMonitor_GetProtocolLog(PRTCLLOG *log);
|
|
||||||
void SysMonitor_GetSendSlotLogRaw(uint8_t *buff);
|
|
||||||
void SysMonitor_GetRecvSlotLogRaw(uint8_t *buff);
|
|
||||||
void SysMonitor_GetProtocolLogRaw(uint8_t *buff);
|
|
||||||
|
|
||||||
void SysMonitor_UpdateHardwareStatus(HWSTATE *state);
|
|
||||||
void SysMonitor_GetHardwareStatus(HWSTATE *state);
|
void SysMonitor_GetHardwareStatus(HWSTATE *state);
|
||||||
void SysMonitor_GetHardwareStatusRaw(uint8_t *buff);
|
|
||||||
|
|
||||||
void SysMonitor_GetSyslog(SYSLOG *log);
|
void SysMonitor_GetSyslog(SYSLOG *log);
|
||||||
void SysMonitor_GetSyslogRaw(uint8_t *buff);
|
|
||||||
|
|
||||||
#endif //__SYSTEM_MONITOR_H_
|
#endif //__SYSTEM_MONITOR_H_
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
// -- Production type
|
// -- Production type
|
||||||
#define WD_PRD 0x01
|
#define WD_PRD 0x01
|
||||||
#define PRD_DL_K 0xDD
|
#define PRD_DL_K 0xDD
|
||||||
#define PRD_DL_S 0xDE
|
#define PRD_DL_S 0xEE
|
||||||
#define PRD_ALL 0xFF
|
#define PRD_ALL 0xFF
|
||||||
|
|
||||||
// Self-Test
|
// Self-Test
|
||||||
@@ -51,46 +51,51 @@
|
|||||||
#define WD_ST_RET 0x02
|
#define WD_ST_RET 0x02
|
||||||
#define ST_RET_OK 0xAA
|
#define ST_RET_OK 0xAA
|
||||||
#define ST_RET_ERROR 0x55
|
#define ST_RET_ERROR 0x55
|
||||||
// -- -- Signal processor voltage
|
#define ST_RET_INFO_LEN 13
|
||||||
#define WD_SP_VOLT_L 0x03
|
// -- -- Signal processor PS voltage
|
||||||
#define WD_SP_VOLT_H 0x04
|
#define WD_SP_PS_VOLT 0x03
|
||||||
|
// -- -- Signal processor PS AUX voltage
|
||||||
|
#define WD_SP_PSAUX_VOLT 0x04
|
||||||
|
// -- -- Signal processor DDR voltage
|
||||||
|
#define WD_SP_DDR_VOLT 0x05
|
||||||
|
// -- -- Signal processor PL voltage
|
||||||
|
#define WD_SP_PL_VOLT 0x06
|
||||||
|
// -- -- Signal processor PL AUX voltage
|
||||||
|
#define WD_SP_PLAUX_VOLT 0x07
|
||||||
|
// -- -- Signal processor Bram voltage
|
||||||
|
#define WD_SP_BRAM_VOLT 0x08
|
||||||
// -- -- Signal processor temperature
|
// -- -- Signal processor temperature
|
||||||
#define WD_SP_TEMP_L 0x05
|
#define WD_SP_TEMP 0x09
|
||||||
#define WD_SP_TEMP_H 0x06
|
|
||||||
// -- -- Signal processor chip status
|
// -- -- Signal processor antenna voltage status
|
||||||
#define WD_SP_CS_L 0x07
|
#define WD_ANT_VOLT 0x0A
|
||||||
#define WD_SP_CS_H 0x08
|
// -- -- Signal processor antenna RF temperature
|
||||||
// -- -- Signal processor antenna voltage
|
#define WD_ANT_RF_TEMP 0x0B
|
||||||
#define WD_AS_VOLT 0x09
|
|
||||||
// -- -- Signal processor antenna temperature
|
|
||||||
#define WD_AS_TEMP 0x0A
|
|
||||||
// -- -- Signal processor antenna PLL lock status
|
// -- -- Signal processor antenna PLL lock status
|
||||||
#define WD_AS_PLL 0x0B
|
#define WD_ANT_RF_PLL 0x0C
|
||||||
// -- -- Signal processor antenna MGC
|
// -- -- Signal processor antenna MGC
|
||||||
#define WD_AS_MGC_L 0x0C
|
#define WD_ANT_MGC_0 0x0D
|
||||||
#define WD_AS_MGC_H 0x0D
|
#define WD_ANT_MGC_1 0x0E
|
||||||
// -- -- Signal processor antenna status
|
|
||||||
#define WD_AS_ST 0x0E.
|
|
||||||
// -- -- Dummy must be 0x00
|
// -- -- Dummy must be 0x00
|
||||||
#define WD_ST_DUMMY 0x0F
|
#define WD_ST_DUMMY 0x0F
|
||||||
|
|
||||||
// Data Send Test Command
|
// Data Send Test Command
|
||||||
#define CMD_DATA_TEST_A 0xE2
|
#define CMD_DATA_TEST_A 0xE2
|
||||||
// -- Request
|
// -- Request
|
||||||
#define DATA_TEST_REQ_A_LEN 80
|
#define DATA_TEST_REQ_A_LEN 68
|
||||||
// -- -- 78 byte payload
|
// -- -- 68 byte payload
|
||||||
// -- Response
|
// -- Response
|
||||||
#define DATA_TEST_RSP_A_LEN 80
|
#define DATA_TEST_RSP_A_LEN 68
|
||||||
// -- -- 78 byte payload
|
// -- -- 68 byte payload
|
||||||
|
|
||||||
// Data Send Test Command
|
// Data Send Test Command
|
||||||
#define CMD_DATA_TEST_B 0xF2
|
#define CMD_DATA_TEST_B 0xF2
|
||||||
// -- Request
|
// -- Request
|
||||||
#define DATA_TEST_REQ_B_LEN 152
|
#define DATA_TEST_REQ_B_LEN 170
|
||||||
// -- -- 150 byte payload
|
// -- -- 170 byte payload
|
||||||
// -- Response
|
// -- Response
|
||||||
#define DATA_TEST_RSP_B_LEN 152
|
#define DATA_TEST_RSP_B_LEN 170
|
||||||
// -- -- 150 byte payload
|
// -- -- 170 byte payload
|
||||||
|
|
||||||
// Config load
|
// Config load
|
||||||
#define CMD_CONFIG 0xE3
|
#define CMD_CONFIG 0xE3
|
||||||
@@ -135,8 +140,8 @@
|
|||||||
#define WD_FLJ_POLL 0x02
|
#define WD_FLJ_POLL 0x02
|
||||||
#define FLJ_POLL_CODE 0x77
|
#define FLJ_POLL_CODE 0x77
|
||||||
// -- Response
|
// -- Response
|
||||||
#define FLJ_POLL_RESP_LEN 78
|
#define FLJ_POLL_RESP_LEN 170
|
||||||
// -- -- received 78 byte payload
|
// -- -- received 170 byte payload
|
||||||
|
|
||||||
// LJ Poll
|
// LJ Poll
|
||||||
#define CMD_LJ_POLL 0xF5
|
#define CMD_LJ_POLL 0xF5
|
||||||
@@ -144,8 +149,8 @@
|
|||||||
#define WD_LJ_POLL 0x02
|
#define WD_LJ_POLL 0x02
|
||||||
#define LJ_POLL_CODE 0x77
|
#define LJ_POLL_CODE 0x77
|
||||||
// -- Response
|
// -- Response
|
||||||
#define LJ_POLL_RESP_LEN 168
|
#define LJ_POLL_RESP_LEN 68
|
||||||
// -- -- received 156 byte payload
|
// -- -- received 68 byte payload
|
||||||
|
|
||||||
// Remote Test FLJ
|
// Remote Test FLJ
|
||||||
#define CMD_FLJ_RM_TEST 0xE6
|
#define CMD_FLJ_RM_TEST 0xE6
|
||||||
@@ -153,6 +158,15 @@
|
|||||||
#define WD_FLJ_RM_TEST 0x02
|
#define WD_FLJ_RM_TEST 0x02
|
||||||
#define FLJ_RM_TEST_CODE 0x99
|
#define FLJ_RM_TEST_CODE 0x99
|
||||||
// -- Response
|
// -- Response
|
||||||
|
#define WD_FLJ_TIME_STAMP 0x02
|
||||||
|
#define WD_FLJ_TIME_STAMP_LEN 8
|
||||||
|
#define WD_FLJ_LINK_LOG 0x0A
|
||||||
|
#define WD_FLJ_LINK_LOG_LEN 64
|
||||||
|
#define WD_FLJ_PHY_LOG 0x4A
|
||||||
|
#define WD_FLJ_PHY_LOG_LEN 71
|
||||||
|
#define WD_FLJ_HARDWARE_ST 0x91
|
||||||
|
#define WD_FLJ_HARDWARE_ST_LEN 13
|
||||||
|
|
||||||
#define FLJ_RM_TEST_RESP_LEN 158
|
#define FLJ_RM_TEST_RESP_LEN 158
|
||||||
|
|
||||||
// Remote Test LJ
|
// Remote Test LJ
|
||||||
@@ -161,6 +175,15 @@
|
|||||||
#define WD_LJ_RM_TEST 0x02
|
#define WD_LJ_RM_TEST 0x02
|
||||||
#define LJ_RM_TEST_CODE 0x99
|
#define LJ_RM_TEST_CODE 0x99
|
||||||
// -- Response
|
// -- Response
|
||||||
|
#define WD_LJ_TIME_STAMP 0x02
|
||||||
|
#define WD_LJ_TIME_STAMP_LEN 8
|
||||||
|
#define WD_LJ_LINK_LOG 0x0A
|
||||||
|
#define WD_LJ_LINK_LOG_LEN 64
|
||||||
|
#define WD_LJ_PHY_LOG 0x4A
|
||||||
|
#define WD_LJ_PHY_LOG_LEN 71
|
||||||
|
#define WD_LJ_HARDWARE_ST 0x91
|
||||||
|
#define WD_LJ_HARDWARE_ST_LEN 13
|
||||||
|
|
||||||
#define LJ_RM_TEST_RESP_LEN 158
|
#define LJ_RM_TEST_RESP_LEN 158
|
||||||
|
|
||||||
|
|
||||||
@@ -224,6 +247,7 @@ int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
|||||||
(*instPtr)->txQueue = NULL;
|
(*instPtr)->txQueue = NULL;
|
||||||
(*instPtr)->uartInst = NULL;
|
(*instPtr)->uartInst = NULL;
|
||||||
memcpy(&((*instPtr)->config), config, sizeof(SYSBUS_CONFIG));
|
memcpy(&((*instPtr)->config), config, sizeof(SYSBUS_CONFIG));
|
||||||
|
memset(&((*instPtr)->sysLog), 0x00, sizeof(SYSLOG));
|
||||||
uartConfig.baseAddr = config->baseAddr;
|
uartConfig.baseAddr = config->baseAddr;
|
||||||
Status = SysbusUart_Init(&((*instPtr)->uartInst), &uartConfig);
|
Status = SysbusUart_Init(&((*instPtr)->uartInst), &uartConfig);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
@@ -284,6 +308,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
{
|
{
|
||||||
case CMD_SELF_TEST:
|
case CMD_SELF_TEST:
|
||||||
{
|
{
|
||||||
|
HWSTATE *hwStatsPtr = &(instPtr->sysLog.hwState);
|
||||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||||
if (sysbusRsp == NULL) {
|
if (sysbusRsp == NULL) {
|
||||||
DBG_ERROR("Failed to allocate memory for SELF TEST Response!\n");
|
DBG_ERROR("Failed to allocate memory for SELF TEST Response!\n");
|
||||||
@@ -294,9 +319,18 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
memset(sysbusRsp->data, 0x00, ST_RSP_LEN);
|
memset(sysbusRsp->data, 0x00, ST_RSP_LEN);
|
||||||
sysbusRsp->data[WD_CMD] = CMD_SELF_TEST;
|
sysbusRsp->data[WD_CMD] = CMD_SELF_TEST;
|
||||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||||
|
SysMonitor_GetHardwareStatus(hwStatsPtr);
|
||||||
|
if (linkInstPtr->isEnable == false)
|
||||||
|
{
|
||||||
|
sysbusRsp->data[WD_ST_RET] = (hwStatsPtr->isSpOk) ? ST_RET_OK : ST_RET_ERROR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sysbusRsp->data[WD_ST_RET] = (hwStatsPtr->isSpOk && hwStatsPtr->isAntOk) ? ST_RET_OK : ST_RET_ERROR;
|
||||||
|
}
|
||||||
|
// apply status and omit 2 bytes of overhead.
|
||||||
|
memcpy(sysbusRsp->data + WD_SP_PS_VOLT, &(hwStatsPtr->spPsVolt), ST_RET_INFO_LEN);
|
||||||
|
|
||||||
// FIXME: run self-test and insert result
|
|
||||||
sysbusRsp->data[WD_ST_RET] = ST_RET_OK;
|
|
||||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||||
{
|
{
|
||||||
free(sysbusRsp);
|
free(sysbusRsp);
|
||||||
@@ -352,22 +386,54 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
PHY_INST *phyRef = linkInstPtr->config.phyInstPtr;
|
PHY_INST *phyRef = linkInstPtr->config.phyInstPtr;
|
||||||
TMC_INST *tmcRef = linkInstPtr->config.tmcInstPtr;
|
TMC_INST *tmcRef = linkInstPtr->config.tmcInstPtr;
|
||||||
|
|
||||||
|
if (data[WD_MODE_CMD] == MODE_CMD_HEAD)
|
||||||
|
{
|
||||||
|
// omit unnecessary reconfiguration
|
||||||
|
if (L2_GetNodeType(linkInstPtr) != L2_NODE_HEAD)
|
||||||
|
{
|
||||||
|
// head node config
|
||||||
|
linkConfig.myType = L2_NODE_HEAD;
|
||||||
|
linkConfig.myId = 1;
|
||||||
|
Linklayer_Reconfig(linkInstPtr, &linkConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (data[WD_MODE_CMD] == MODE_CMD_MEMBER )
|
||||||
|
{
|
||||||
|
// omit unnecessary reconfiguration
|
||||||
|
if (L2_GetNodeType(linkInstPtr) != L2_NODE_MEMBER)
|
||||||
|
{
|
||||||
|
// member node config
|
||||||
|
linkConfig.myType = L2_NODE_MEMBER;
|
||||||
|
linkConfig.myId = 2;
|
||||||
|
Linklayer_Reconfig(linkInstPtr, &linkConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// FIXME: to confirm
|
||||||
|
// Halt linklayer
|
||||||
|
Linklayer_Halt(linkInstPtr);
|
||||||
|
DBG_ERROR("Unexpected config command 0x%02X:0x%02X",
|
||||||
|
WD_MODE_CMD, data[WD_MODE_CMD]);
|
||||||
|
Status = EPARAM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(data[WD_EN_CMD] == EN_CMD_ON_HIGH_POWER)
|
if(data[WD_EN_CMD] == EN_CMD_ON_HIGH_POWER)
|
||||||
{
|
{
|
||||||
// high power config
|
// high power config
|
||||||
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_HIGH_POWER);
|
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_HIGH_POWER);
|
||||||
Linklayer_Start(linkInstPtr);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(data[WD_EN_CMD] == EN_CMD_ON_LOW_POWER)
|
else if(data[WD_EN_CMD] == EN_CMD_ON_LOW_POWER)
|
||||||
{
|
{
|
||||||
// low power config
|
// low power config
|
||||||
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_LOW_POWER);
|
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_LOW_POWER);
|
||||||
Linklayer_Start(linkInstPtr);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// silence config
|
// silence config
|
||||||
|
// FIXME: confirm
|
||||||
// TODO: better approach?
|
// TODO: better approach?
|
||||||
Linklayer_Halt(linkInstPtr);
|
Linklayer_Halt(linkInstPtr);
|
||||||
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_SILENT);
|
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_SILENT);
|
||||||
@@ -378,52 +444,29 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
{
|
{
|
||||||
DBG_ERROR("Physical set pull time failed, with error code: %" PRId32 ".\n", Status);
|
DBG_ERROR("Physical set pull time failed, with error code: %" PRId32 ".\n", Status);
|
||||||
}
|
}
|
||||||
Phy_SetupNextSlot(phyRef, PHY_TOR_TX, L1_10KBPS_10MS_FRAME, NULL);
|
Phy_SetupNextSlot(phyRef, PHY_TOR_RX, L1_10KBPS_10MS_FRAME, NULL);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data[WD_MODE_CMD] == MODE_CMD_HEAD)
|
|
||||||
{
|
|
||||||
// head node config
|
|
||||||
linkConfig.myType = L2_NODE_HEAD;
|
|
||||||
linkConfig.myId = 1;
|
|
||||||
Linklayer_Reconfig(linkInstPtr, &linkConfig);
|
|
||||||
Linklayer_Start(linkInstPtr);
|
Linklayer_Start(linkInstPtr);
|
||||||
}
|
|
||||||
else if (data[WD_MODE_CMD] == MODE_CMD_MEMBER)
|
|
||||||
{
|
|
||||||
// member node config
|
|
||||||
linkConfig.myType = L2_NODE_MEMBER;
|
|
||||||
linkConfig.myId = 2;
|
|
||||||
Linklayer_Reconfig(linkInstPtr, &linkConfig);
|
|
||||||
Linklayer_Start(linkInstPtr);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// FIXME:
|
|
||||||
// Halt linklayer
|
|
||||||
Linklayer_Halt(linkInstPtr);
|
|
||||||
DBG_ERROR("Unexpected config command 0x%02X:0x%02X",
|
|
||||||
WD_MODE_CMD, data[WD_MODE_CMD]);
|
|
||||||
}
|
|
||||||
_nop_(); // for debug
|
|
||||||
Status = SUCCESS;
|
Status = SUCCESS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_SYS_INFO:
|
case CMD_SYS_INFO:
|
||||||
{
|
{
|
||||||
SysMonitor_UpdateSysinfoRaw(data + SYS_INFO_OFFSET);
|
SysMonitor_UpdateSysinfo((SYSINFO *)(data + SYS_INFO_OFFSET));
|
||||||
Status = SUCCESS;
|
Status = SUCCESS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// TODO
|
// TODO
|
||||||
case CMD_FLJ_SEND:
|
case CMD_FLJ_SEND:
|
||||||
{
|
{
|
||||||
SysMonitor_UpdateSendPayloadFLJRaw(data + FLJ_DATA_OFFSET); // omit control info
|
SysMonitor_UpdateSendPayload(data + FLJ_DATA_OFFSET, PAYLOAD_LEN_FLJ_TX); // omit control info
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_LJ_SEND:
|
case CMD_LJ_SEND:
|
||||||
{
|
{
|
||||||
SysMonitor_UpdateSendPayloadLJRaw(data + LJ_DATA_OFFSET); // omit control info
|
SysMonitor_UpdateSendPayload(data + LJ_DATA_OFFSET, PAYLOAD_LEN_LJ_TX); // omit control info
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_FLJ_POLL:
|
case CMD_FLJ_POLL:
|
||||||
@@ -441,13 +484,16 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sysbusRsp->len = FLJ_POLL_RESP_LEN;
|
sysbusRsp->len = FLJ_POLL_RESP_LEN;
|
||||||
sysbusRsp->data[WD_CMD] = WD_FLJ_POLL;
|
sysbusRsp->data[WD_CMD] = CMD_FLJ_POLL;
|
||||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||||
uint32_t dataId;
|
uint32_t dataId;
|
||||||
SysMonitor_GetRecvPayloadFLJRaw(sysbusRsp->data + FLJ_DATA_OFFSET, &dataId); // omit control info
|
SysMonitor_GetRecvPayload(sysbusRsp->data + FLJ_DATA_OFFSET, &dataId, PAYLOAD_LEN_FLJ_RX); // omit control info
|
||||||
if (dataId == DATA_ID_NONE)
|
if (dataId == DATA_ID_NONE)
|
||||||
{
|
{
|
||||||
memset(sysbusRsp->data + FLJ_DATA_OFFSET, 0xAA, PAYLOAD_FLJ);
|
free(sysbusRsp);
|
||||||
|
DBG_WARNING("SystemBus::no RX data!\n");
|
||||||
|
Status = SUCCESS;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||||
{
|
{
|
||||||
@@ -474,13 +520,16 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sysbusRsp->len = LJ_POLL_RESP_LEN;
|
sysbusRsp->len = LJ_POLL_RESP_LEN;
|
||||||
sysbusRsp->data[WD_CMD] = WD_LJ_POLL;
|
sysbusRsp->data[WD_CMD] = CMD_LJ_POLL;
|
||||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||||
uint32_t dataId;
|
uint32_t dataId;
|
||||||
SysMonitor_GetRecvPayloadLJRaw(sysbusRsp->data + LJ_DATA_OFFSET, &dataId); // omit control info
|
SysMonitor_GetRecvPayload(sysbusRsp->data + LJ_DATA_OFFSET, &dataId, PAYLOAD_LEN_LJ_RX); // omit control info
|
||||||
if (dataId == DATA_ID_NONE)
|
if (dataId == DATA_ID_NONE)
|
||||||
{
|
{
|
||||||
memset(sysbusRsp->data + LJ_DATA_OFFSET, 0xAA, PAYLOAD_LJ);
|
free(sysbusRsp);
|
||||||
|
DBG_WARNING("SystemBus::no RX data!\n");
|
||||||
|
Status = SUCCESS;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||||
{
|
{
|
||||||
@@ -494,6 +543,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
}
|
}
|
||||||
case CMD_FLJ_RM_TEST:
|
case CMD_FLJ_RM_TEST:
|
||||||
{
|
{
|
||||||
|
SYSLOG *sysLogPtr = &(instPtr->sysLog);
|
||||||
if (data[WD_FLJ_RM_TEST] != FLJ_RM_TEST_CODE)
|
if (data[WD_FLJ_RM_TEST] != FLJ_RM_TEST_CODE)
|
||||||
{
|
{
|
||||||
DBG_WARNING("SystemBus::Invalid remote test code!\n");
|
DBG_WARNING("SystemBus::Invalid remote test code!\n");
|
||||||
@@ -512,6 +562,16 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
sysbusRsp->data[WD_CMD] = CMD_FLJ_RM_TEST;
|
sysbusRsp->data[WD_CMD] = CMD_FLJ_RM_TEST;
|
||||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||||
|
|
||||||
|
TIME_WORD tmWord;
|
||||||
|
uint64_t time;
|
||||||
|
TimeCtrl_GetCurrentTime(linkInstPtr->config.tmcInstPtr, &tmWord);
|
||||||
|
time = tmWord.int_part * TIME_FRAC_MAX + tmWord.frac_part;
|
||||||
|
memcpy(sysbusRsp->data + WD_FLJ_TIME_STAMP, &time, WD_FLJ_TIME_STAMP_LEN);
|
||||||
|
SysMonitor_GetSyslog(sysLogPtr);
|
||||||
|
memcpy(sysbusRsp->data + WD_FLJ_LINK_LOG, &(sysLogPtr->linkLog), WD_FLJ_LINK_LOG_LEN);
|
||||||
|
memcpy(sysbusRsp->data + WD_FLJ_PHY_LOG, &(sysLogPtr->phyLog), WD_FLJ_PHY_LOG_LEN);
|
||||||
|
memcpy(sysbusRsp->data + WD_FLJ_HARDWARE_ST, &(sysLogPtr->hwState.spPsVolt), WD_FLJ_HARDWARE_ST_LEN);
|
||||||
|
|
||||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false){
|
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false){
|
||||||
free(sysbusRsp);
|
free(sysbusRsp);
|
||||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||||
@@ -523,6 +583,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
}
|
}
|
||||||
case CMD_LJ_RM_TEST:
|
case CMD_LJ_RM_TEST:
|
||||||
{
|
{
|
||||||
|
SYSLOG *sysLogPtr = &(instPtr->sysLog);
|
||||||
if (data[WD_LJ_RM_TEST] != LJ_RM_TEST_CODE)
|
if (data[WD_LJ_RM_TEST] != LJ_RM_TEST_CODE)
|
||||||
{
|
{
|
||||||
DBG_WARNING("SystemBus::Invalid remote test code!\n");
|
DBG_WARNING("SystemBus::Invalid remote test code!\n");
|
||||||
@@ -541,6 +602,16 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
sysbusRsp->data[WD_CMD] = CMD_LJ_RM_TEST;
|
sysbusRsp->data[WD_CMD] = CMD_LJ_RM_TEST;
|
||||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||||
|
|
||||||
|
TIME_WORD tmWord;
|
||||||
|
uint64_t time;
|
||||||
|
TimeCtrl_GetCurrentTime(linkInstPtr->config.tmcInstPtr, &tmWord);
|
||||||
|
time = tmWord.int_part * TIME_FRAC_MAX + tmWord.frac_part;
|
||||||
|
memcpy(sysbusRsp->data + WD_LJ_TIME_STAMP, &time, WD_LJ_TIME_STAMP_LEN);
|
||||||
|
SysMonitor_GetSyslog(sysLogPtr);
|
||||||
|
memcpy(sysbusRsp->data + WD_LJ_LINK_LOG, &(sysLogPtr->linkLog), WD_LJ_LINK_LOG_LEN);
|
||||||
|
memcpy(sysbusRsp->data + WD_LJ_PHY_LOG, &(sysLogPtr->phyLog), WD_LJ_PHY_LOG_LEN);
|
||||||
|
memcpy(sysbusRsp->data + WD_LJ_HARDWARE_ST, &(sysLogPtr->hwState.spPsVolt), WD_LJ_HARDWARE_ST_LEN);
|
||||||
|
|
||||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false){
|
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false){
|
||||||
free(sysbusRsp);
|
free(sysbusRsp);
|
||||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||||
@@ -560,18 +631,6 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t SystemBus_FLJ_PeriodUpdate(SYSBUS *instPtr)
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
return SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t SystemBus_LJ_PeriodUpdate(SYSBUS *instPtr)
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
return SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**
|
/**
|
||||||
* @brief This function send a repose frame from system bus tx queue.
|
* @brief This function send a repose frame from system bus tx queue.
|
||||||
|
|||||||
@@ -17,10 +17,11 @@
|
|||||||
#define __SYSTEMBUS_H_
|
#define __SYSTEMBUS_H_
|
||||||
|
|
||||||
/***************************** Include Files *********************************/
|
/***************************** Include Files *********************************/
|
||||||
#include "systembus_uart.h" // SystemBus UART driver
|
|
||||||
#include "circ_queue.h"
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include "systembus_uart.h" // SystemBus UART driver
|
||||||
|
#include "circ_queue.h"
|
||||||
|
#include "../system_monitor.h"
|
||||||
|
|
||||||
/************************** Constant Definitions *****************************/
|
/************************** Constant Definitions *****************************/
|
||||||
/************************** Data Type Definitions ****************************/
|
/************************** Data Type Definitions ****************************/
|
||||||
@@ -35,6 +36,7 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
SYSBUS_CONFIG config;
|
SYSBUS_CONFIG config;
|
||||||
|
SYSLOG sysLog;
|
||||||
SYSBUS_UART *uartInst;
|
SYSBUS_UART *uartInst;
|
||||||
CIRC_QUEUE *txQueue;
|
CIRC_QUEUE *txQueue;
|
||||||
CIRC_QUEUE *rxQueue;
|
CIRC_QUEUE *rxQueue;
|
||||||
@@ -47,10 +49,6 @@ typedef struct
|
|||||||
int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config);
|
int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config);
|
||||||
|
|
||||||
int32_t SystemBus_HandleCmd(SYSBUS *instPtr);
|
int32_t SystemBus_HandleCmd(SYSBUS *instPtr);
|
||||||
|
|
||||||
int32_t SystemBus_FLJ_PeriodUpdate(SYSBUS *instPtr);
|
|
||||||
int32_t SystemBus_LJ_PeriodUpdate(SYSBUS *instPtr);
|
|
||||||
|
|
||||||
int32_t SystemBus_MakeResp(SYSBUS *instPtr);
|
int32_t SystemBus_MakeResp(SYSBUS *instPtr);
|
||||||
|
|
||||||
int32_t SystemBus_TxIntrHandler(SYSBUS *instPtr);
|
int32_t SystemBus_TxIntrHandler(SYSBUS *instPtr);
|
||||||
|
|||||||
@@ -56,19 +56,19 @@ clist_new(void)
|
|||||||
|
|
||||||
void clist_clear(clist_t *self)
|
void clist_clear(clist_t *self)
|
||||||
{
|
{
|
||||||
uint32_t len = self->len;
|
|
||||||
clist_node_t *next;
|
clist_node_t *next;
|
||||||
clist_node_t *curr = self->head;
|
clist_node_t *curr = self->head;
|
||||||
|
|
||||||
while (len)
|
while (curr != NULL)
|
||||||
{
|
{
|
||||||
next = curr->next;
|
next = curr->next;
|
||||||
if (self->free)
|
if (self->free)
|
||||||
self->free(curr->val);
|
self->free(curr->val);
|
||||||
LIST_FREE(curr);
|
LIST_FREE(curr);
|
||||||
curr = next;
|
curr = next;
|
||||||
len--;
|
|
||||||
}
|
}
|
||||||
|
self->len = 0;
|
||||||
|
self->head = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user