Compare commits
14
Commits
1f98662ee8
...
f71ce6bd94
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f71ce6bd94 | ||
|
|
c8b0ca74a3 | ||
|
|
1a413e4d06 | ||
|
|
b7a337f821 | ||
|
|
38b7f6b985 | ||
|
|
4457eb8bc1 | ||
|
|
0248c185e4 | ||
|
|
e81be59bbb | ||
|
|
d0aad73ce5 | ||
|
|
c384bf9e9d | ||
|
|
752e9b3081 | ||
|
|
81fdd612ce | ||
|
|
ad3a6be9b1 | ||
|
|
6a680a1291 |
@@ -359,10 +359,8 @@ void ScuTimer_IntrHandler(void *context)
|
||||
xdesc = (struct xil_timer_desc *)(logTmPtr->extra);
|
||||
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
|
||||
{
|
||||
// Update log
|
||||
const HWSTATE *newHwState;
|
||||
newHwState = Phy_RefreshHwSate(phyInstPtr);
|
||||
SysMonitor_UpdateHardwareStatus(newHwState);
|
||||
// Refresh log
|
||||
Phy_RefreshHwSate(phyInstPtr);
|
||||
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -360,10 +360,8 @@ void ScuTimer_IntrHandler(void *context)
|
||||
xdesc = (struct xil_timer_desc *)(logTmPtr->extra);
|
||||
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
|
||||
{
|
||||
// Update log
|
||||
const HWSTATE *newHwState;
|
||||
newHwState = Phy_RefreshHwSate(phyInstPtr);
|
||||
SysMonitor_UpdateHardwareStatus(newHwState);
|
||||
// Refresh log
|
||||
Phy_RefreshHwSate(phyInstPtr);
|
||||
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
|
||||
}
|
||||
else
|
||||
@@ -376,7 +374,7 @@ void ScuTimer_IntrHandler(void *context)
|
||||
/**
|
||||
* @brief Hardware_SwitchFreq
|
||||
*
|
||||
* @param dev
|
||||
* @param devSysMonitor_UpdateHardwareStatus(newHwState);
|
||||
* @param freq
|
||||
*
|
||||
* @return None.
|
||||
|
||||
@@ -115,11 +115,11 @@ static int32_t Service_Packing(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t dst
|
||||
uint32_t dataId;
|
||||
if(L2_GetNodeType(instPtr) == L2_NODE_HEAD)
|
||||
{
|
||||
SysMonitor_GetSendPayloadRaw(buff + L2_MSG_SVC_PAYLOAD, &dataId, PAYLOAD_LEN_FLJ_TX);
|
||||
SysMonitor_GetSendPayload(buff + L2_MSG_SVC_PAYLOAD, &dataId, PAYLOAD_LEN_FLJ_TX);
|
||||
}
|
||||
else
|
||||
{
|
||||
SysMonitor_GetSendPayloadRaw(buff + L2_MSG_SVC_PAYLOAD, &dataId, PAYLOAD_LEN_LJ_TX);
|
||||
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);
|
||||
@@ -290,11 +290,11 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg)
|
||||
{
|
||||
if(L2_GetNodeType(instPtr) == L2_NODE_HEAD)
|
||||
{
|
||||
SysMonitor_UpdateRecvPayloadRaw(msg+L2_MSG_SVC_PAYLOAD, PAYLOAD_LEN_FLJ_RX);
|
||||
SysMonitor_UpdateRecvPayload(msg+L2_MSG_SVC_PAYLOAD, PAYLOAD_LEN_FLJ_RX);
|
||||
}
|
||||
else
|
||||
{
|
||||
SysMonitor_UpdateRecvPayloadRaw(msg+L2_MSG_SVC_PAYLOAD, PAYLOAD_LEN_LJ_RX);
|
||||
SysMonitor_UpdateRecvPayload(msg+L2_MSG_SVC_PAYLOAD, PAYLOAD_LEN_LJ_RX);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -317,18 +317,18 @@ void Phy_UpdateState(PHY_INST *instPtr)
|
||||
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.frac_part * TIME_FRAC_MAX + instPtr->recvFsTime.int_part;
|
||||
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.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.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.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.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;
|
||||
|
||||
@@ -850,14 +850,6 @@ double Phy_GetFreqEst(PHY_INST *instPtr)
|
||||
fineReg = PhyRead(instPtr, FINE_FREQEST);
|
||||
estAbs = fineReg & FINE_FREQEST_VAL_MASK;
|
||||
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
|
||||
coarse = (double)(8 - acqFreqIdx) * (250e3 / 4);
|
||||
@@ -865,6 +857,14 @@ double Phy_GetFreqEst(PHY_INST *instPtr)
|
||||
|
||||
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 : fine;
|
||||
@@ -899,17 +899,17 @@ double Phy_GetCoarseFreqEst(PHY_INST *instPtr)
|
||||
acqFreqIdx = (regValue & COASE_FREQEST_ACQ_MASK) >> COASE_FREQEST_ACQ_SHIFT;
|
||||
syncFreqIdx = (regValue & COASE_FREQEST_SYNC_MASK) >> COASE_FREQEST_SYNC_SHIFT;
|
||||
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
|
||||
freqEst = (double)(8 - acqFreqIdx) * (250e3 / 4);
|
||||
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;
|
||||
}
|
||||
@@ -938,13 +938,13 @@ double Phy_GetFineFreqEst(PHY_INST *instPtr)
|
||||
estAbs = regValue & FINE_FREQEST_VAL_MASK;
|
||||
if (frameType >= L1_200KBPS_5MS_FRAME)
|
||||
{
|
||||
// 1.5M Rc
|
||||
freqEst = 12e6/2048*((double)estAbs)/8192.0;
|
||||
// 12M Rc
|
||||
freqEst = 48e6/2048*((double)estAbs)/8192.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 12M Rc
|
||||
freqEst = 48e6/2048*((double)estAbs)/8192.0;
|
||||
// 1.5M Rc
|
||||
freqEst = 12e6/2048*((double)estAbs)/8192.0;
|
||||
}
|
||||
freqEst = ((regValue & FINE_FREQEST_SIGN_MASK) == FINE_FREQEST_SIGN_NEG) ?
|
||||
-freqEst : freqEst;
|
||||
@@ -1133,53 +1133,59 @@ void Phy_RetrieveRecvData(PHY_INST *instPtr, uint8_t *dataBuff)
|
||||
* @param instPtr a pointer to hopping pattern buffer
|
||||
* @param patternLen a integer indicate the length of hopping pattern.
|
||||
*
|
||||
* @return pointer to new hardware status
|
||||
* @return NONE
|
||||
*
|
||||
******************************************************************************/
|
||||
const HWSTATE* Phy_RefreshHwSate(PHY_INST *instPtr)
|
||||
void Phy_RefreshHwSate(PHY_INST *instPtr)
|
||||
{
|
||||
ASSERT(instPtr != NULL);
|
||||
uint32_t rawData;
|
||||
#ifndef EMULATION
|
||||
float evalData;
|
||||
instPtr->hwSate.isSpOk = true;
|
||||
// -- Update Ps voltage, unit mV
|
||||
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCPINT);
|
||||
evalData = XAdcPs_RawToVoltage(rawData);
|
||||
instPtr->hwSate.spPsVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) evalData/VOLTAGE_LSB;
|
||||
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) evalData/VOLTAGE_LSB;
|
||||
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) evalData/VOLTAGE_LSB;
|
||||
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) evalData/VOLTAGE_LSB;
|
||||
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) evalData/VOLTAGE_LSB;
|
||||
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) evalData/VOLTAGE_LSB;
|
||||
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
|
||||
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_TEMP);
|
||||
evalData = XAdcPs_RawToTemperature(rawData);
|
||||
instPtr->hwSate.spTemp = (evalData > TEMPERATURE_MAX)
|
||||
? INT8_MAX
|
||||
: ((evalData < TEMPERATURE_MIN) ? INT8_MIN : (int8_t) evalData/TEMPERATURE_LSB);
|
||||
// TODO: is OK?
|
||||
instPtr->hwSate.isSpOk = true;
|
||||
: ((evalData < TEMPERATURE_MIN) ? INT8_MIN : (int8_t) round(evalData/TEMPERATURE_LSB));
|
||||
|
||||
#else
|
||||
instPtr->spPsVolt = 0;
|
||||
instPtr->spPsAuxVolt = 0;
|
||||
@@ -1236,5 +1242,5 @@ const HWSTATE* Phy_RefreshHwSate(PHY_INST *instPtr)
|
||||
{
|
||||
instPtr->hwSate.isSpOk = true;
|
||||
}
|
||||
return (&(instPtr->hwSate));
|
||||
SysMonitor_UpdateHardwareStatus(&(instPtr->hwSate));
|
||||
}
|
||||
|
||||
@@ -241,7 +241,7 @@ int32_t Phy_InstInit(PHY_INST **instPtr, PHY_CONFIG *phyConfig);
|
||||
void Phy_Destroy(PHY_INST *instPtr);
|
||||
|
||||
void Phy_UpdateState(PHY_INST *instPtr);
|
||||
const HWSTATE* Phy_RefreshHwSate(PHY_INST *instPtr);
|
||||
void Phy_RefreshHwSate(PHY_INST *instPtr);
|
||||
|
||||
void Phy_Start(PHY_INST *instPtr);
|
||||
void Phy_Halt(PHY_INST *instPtr);
|
||||
|
||||
@@ -482,7 +482,7 @@
|
||||
/**
|
||||
* Register: PHY_DEINTLV_AMPEST
|
||||
*/
|
||||
#define PHY_DEINTLV_AMPEST 0x00000148U
|
||||
#define PHY_DEINTLV_AMPEST 0x0000014CU
|
||||
#define PHY_DEINTLV_AMPEST_SHIFT 0
|
||||
#define PHY_DEINTLV_AMPEST_WIDTH 16
|
||||
#define PHY_DEINTLV_AMPEST_MASK 0x0000FFFFU
|
||||
|
||||
@@ -102,52 +102,6 @@ void SysMonitor_UpdateSysinfo(const SYSINFO *info)
|
||||
sysMonitorInst->sysInfoCtrl.wBusy = BUFF_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update system info by raw data.
|
||||
*/
|
||||
void SysMonitor_UpdateSysinfoRaw(const uint8_t *buff)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get system info.
|
||||
*/
|
||||
@@ -165,60 +119,11 @@ void SysMonitor_GetSysinfo(SYSINFO *info)
|
||||
sysMonitorInst->sysInfoCtrl.rBusy = buffIndex_old;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get system info as raw data.
|
||||
*/
|
||||
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
|
||||
/**
|
||||
* Update send payload by raw data.
|
||||
* Update send payload by.
|
||||
*/
|
||||
void SysMonitor_UpdateSendPayloadRaw(const uint8_t *buff, size_t len)
|
||||
void SysMonitor_UpdateSendPayload(const uint8_t *buff, size_t len)
|
||||
{
|
||||
ASSERT(sysMonitorInst != NULL);
|
||||
uint8_t buffIndx;
|
||||
@@ -231,9 +136,9 @@ void SysMonitor_UpdateSendPayloadRaw(const uint8_t *buff, size_t len)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest send payload as raw data.
|
||||
* Get the latest send payload.
|
||||
*/
|
||||
void SysMonitor_GetSendPayloadRaw(uint8_t *buff, uint32_t *id, size_t len)
|
||||
void SysMonitor_GetSendPayload(uint8_t *buff, uint32_t *id, size_t len)
|
||||
{
|
||||
ASSERT(sysMonitorInst != NULL);
|
||||
uint8_t buffIndx, buffIndex_old;
|
||||
@@ -253,9 +158,9 @@ void SysMonitor_GetSendPayloadRaw(uint8_t *buff, uint32_t *id, size_t len)
|
||||
|
||||
// @Receive Payload
|
||||
/**
|
||||
* Update receive payload by raw data.
|
||||
* Update receive payload.
|
||||
*/
|
||||
void SysMonitor_UpdateRecvPayloadRaw(const uint8_t *buff, size_t len)
|
||||
void SysMonitor_UpdateRecvPayload(const uint8_t *buff, size_t len)
|
||||
{
|
||||
ASSERT(sysMonitorInst != NULL);
|
||||
uint8_t buffIndx;
|
||||
@@ -268,9 +173,9 @@ void SysMonitor_UpdateRecvPayloadRaw(const uint8_t *buff, size_t len)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest receive payload as raw data.
|
||||
* Get the latest receive payload.
|
||||
*/
|
||||
void SysMonitor_GetRecvPayloadRaw(uint8_t *buff, uint32_t *id, size_t len)
|
||||
void SysMonitor_GetRecvPayload(uint8_t *buff, uint32_t *id, size_t len)
|
||||
{
|
||||
ASSERT(sysMonitorInst != NULL);
|
||||
uint8_t buffIndx, buffIndex_old;
|
||||
@@ -320,68 +225,6 @@ void SysMonitor_GetLinklayerLog(LINKLOG *log)
|
||||
sysMonitorInst->linkLogCtrl.rBusy = buffIndex_old;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest link layer log as raw data
|
||||
*/
|
||||
void SysMonitor_GetLinklayerLogRaw(uint8_t *buff)
|
||||
{
|
||||
ASSERT(sysMonitorInst != NULL);
|
||||
uint8_t buffIndx, buffIndex_old;
|
||||
buffIndex_old = sysMonitorInst->linkLogCtrl.rBusy;
|
||||
if (buffIndex_old != BUFF_NONE)
|
||||
buffIndx = buffIndex_old; // Keep it busy
|
||||
else
|
||||
buffIndx = GetReadable(sysMonitorInst->linkLogCtrl);
|
||||
sysMonitorInst->linkLogCtrl.rBusy = buffIndx;
|
||||
|
||||
// Encapsulate log
|
||||
LINKLOG *logEntry = &(sysMonitorInst->linkLog[buffIndx]);
|
||||
|
||||
memcpy(buff, &(logEntry->tuNum), sizeof(logEntry->tuNum));
|
||||
buff += sizeof(logEntry->tuNum);
|
||||
memcpy(buff, &(logEntry->slotNum), sizeof(logEntry->slotNum));
|
||||
buff += sizeof(logEntry->slotNum);
|
||||
memcpy(buff, &(logEntry->nodeType), sizeof(logEntry->nodeType));
|
||||
buff += sizeof(logEntry->nodeType);
|
||||
memcpy(buff, &(logEntry->cxnStatus), sizeof(logEntry->cxnStatus));
|
||||
buff += sizeof(logEntry->cxnStatus);
|
||||
memcpy(buff, &(logEntry->linkStage), sizeof(logEntry->linkStage));
|
||||
buff += sizeof(logEntry->linkStage);
|
||||
memcpy(buff, &(logEntry->recxnCnt), sizeof(logEntry->recxnCnt));
|
||||
buff += sizeof(logEntry->recxnCnt);
|
||||
memcpy(buff, &(logEntry->beamNo), sizeof(logEntry->beamNo));
|
||||
buff += sizeof(logEntry->beamNo);
|
||||
memcpy(buff, &(logEntry->beamAz), sizeof(logEntry->beamAz));
|
||||
buff += sizeof(logEntry->beamAz);
|
||||
memcpy(buff, &(logEntry->beamEl), sizeof(logEntry->beamEl));
|
||||
buff += sizeof(logEntry->beamEl);
|
||||
memcpy(buff, &(logEntry->advTxCnt), sizeof(logEntry->advTxCnt));
|
||||
buff += sizeof(logEntry->advTxCnt);
|
||||
memcpy(buff, &(logEntry->advRecvCnt), sizeof(logEntry->advRecvCnt));
|
||||
buff += sizeof(logEntry->advRecvCnt);
|
||||
memcpy(buff, &(logEntry->advCorrectCnt), sizeof(logEntry->advCorrectCnt));
|
||||
buff += sizeof(logEntry->advCorrectCnt);
|
||||
memcpy(buff, &(logEntry->cfmTxCnt), sizeof(logEntry->cfmTxCnt));
|
||||
buff += sizeof(logEntry->cfmTxCnt);
|
||||
memcpy(buff, &(logEntry->cfmRecvCnt), sizeof(logEntry->cfmRecvCnt));
|
||||
buff += sizeof(logEntry->cfmRecvCnt);
|
||||
memcpy(buff, &(logEntry->cfmCorrectCnt), sizeof(logEntry->cfmCorrectCnt));
|
||||
buff += sizeof(logEntry->cfmCorrectCnt);
|
||||
memcpy(buff, &(logEntry->svcTxCnt), sizeof(logEntry->svcTxCnt));
|
||||
buff += sizeof(logEntry->svcTxCnt);
|
||||
memcpy(buff, &(logEntry->svcRecvCnt), sizeof(logEntry->svcRecvCnt));
|
||||
buff += sizeof(logEntry->svcRecvCnt);
|
||||
memcpy(buff, &(logEntry->svcCorrectCnt), sizeof(logEntry->svcCorrectCnt));
|
||||
buff += sizeof(logEntry->svcCorrectCnt);
|
||||
memcpy(buff, &(logEntry->timeDev), sizeof(logEntry->timeDev));
|
||||
buff += sizeof(logEntry->timeDev);
|
||||
memcpy(buff, &(logEntry->sendId), sizeof(logEntry->sendId));
|
||||
buff += sizeof(logEntry->sendId);
|
||||
memcpy(buff, &(logEntry->recvId), sizeof(logEntry->recvId));
|
||||
|
||||
sysMonitorInst->linkLogCtrl.rBusy = buffIndex_old;
|
||||
}
|
||||
|
||||
// @Physical layer log
|
||||
/**
|
||||
* Update physical layer log
|
||||
@@ -414,55 +257,6 @@ void SysMonitor_GetPhysicalLayerLog(PHYLOG *log)
|
||||
sysMonitorInst->phyLogCtrl.rBusy = buffIndex_old;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest physical layer log as raw data
|
||||
*/
|
||||
void SysMonitor_GetPhysicalLayerLogRaw(uint8_t *buff)
|
||||
{
|
||||
ASSERT(sysMonitorInst != NULL);
|
||||
uint8_t buffIndx, buffIndex_old;
|
||||
buffIndex_old = sysMonitorInst->phyLogCtrl.rBusy;
|
||||
if (buffIndex_old != BUFF_NONE)
|
||||
buffIndx = buffIndex_old; // Keep it busy
|
||||
else
|
||||
buffIndx = GetReadable(sysMonitorInst->phyLogCtrl);
|
||||
sysMonitorInst->phyLogCtrl.rBusy = buffIndx;
|
||||
|
||||
// Encapsulate log
|
||||
PHYLOG *logEntry = &(sysMonitorInst->phyLog[buffIndx]);
|
||||
|
||||
memcpy(buff, &(logEntry->acqCnt), sizeof(logEntry->acqCnt));
|
||||
buff += sizeof(logEntry->acqCnt);
|
||||
memcpy(buff, &(logEntry->fsyncCnt), sizeof(logEntry->fsyncCnt));
|
||||
buff += sizeof(logEntry->fsyncCnt);
|
||||
memcpy(buff, &(logEntry->decodeCnt), sizeof(logEntry->decodeCnt));
|
||||
buff += sizeof(logEntry->decodeCnt);
|
||||
memcpy(buff, &(logEntry->crcCnt), sizeof(logEntry->crcCnt));
|
||||
buff += sizeof(logEntry->crcCnt);
|
||||
memcpy(buff, &(logEntry->doppler), sizeof(logEntry->doppler));
|
||||
buff += sizeof(logEntry->doppler);
|
||||
memcpy(buff, &(logEntry->recvStamp), sizeof(logEntry->recvStamp));
|
||||
buff += sizeof(logEntry->recvStamp);
|
||||
memcpy(buff, &(logEntry->acqPeak), sizeof(logEntry->acqPeak));
|
||||
buff += sizeof(logEntry->acqPeak);
|
||||
memcpy(buff, &(logEntry->acqMean), sizeof(logEntry->acqMean));
|
||||
buff += sizeof(logEntry->acqMean);
|
||||
memcpy(buff, &(logEntry->acqPhase), sizeof(logEntry->acqPhase));
|
||||
buff += sizeof(logEntry->acqPhase);
|
||||
memcpy(buff, &(logEntry->acqFreqCh), sizeof(logEntry->acqFreqCh));
|
||||
buff += sizeof(logEntry->acqFreqCh);
|
||||
memcpy(buff, &(logEntry->fsyncPeak), sizeof(logEntry->fsyncPeak));
|
||||
buff += sizeof(logEntry->fsyncPeak);
|
||||
memcpy(buff, &(logEntry->fsyncMean), sizeof(logEntry->fsyncMean));
|
||||
buff += sizeof(logEntry->fsyncMean);
|
||||
memcpy(buff, &(logEntry->fsyncFreqCh), sizeof(logEntry->fsyncFreqCh));
|
||||
buff += sizeof(logEntry->fsyncFreqCh);
|
||||
memcpy(buff, &(logEntry->deintlvAmpEst), sizeof(logEntry->deintlvAmpEst));
|
||||
buff += sizeof(logEntry->deintlvAmpEst);
|
||||
memcpy(buff, &(logEntry->reserve), sizeof(logEntry->reserve));
|
||||
|
||||
sysMonitorInst->phyLogCtrl.rBusy = buffIndex_old;
|
||||
}
|
||||
|
||||
// @Hardware state
|
||||
/**
|
||||
@@ -496,50 +290,6 @@ void SysMonitor_GetHardwareStatus(HWSTATE *state)
|
||||
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 log
|
||||
HWSTATE *logEntry = &(sysMonitorInst->hwState[buffIndx]);
|
||||
|
||||
memcpy(buff, &(logEntry->spPsVolt), sizeof(logEntry->spPsVolt));
|
||||
buff += sizeof(logEntry->spPsVolt);
|
||||
memcpy(buff, &(logEntry->spPsAuxVolt), sizeof(logEntry->spPsAuxVolt));
|
||||
buff += sizeof(logEntry->spPsAuxVolt);
|
||||
memcpy(buff, &(logEntry->spDdrVolt), sizeof(logEntry->spDdrVolt));
|
||||
buff += sizeof(logEntry->spDdrVolt);
|
||||
memcpy(buff, &(logEntry->spPlVolt), sizeof(logEntry->spPlVolt));
|
||||
buff += sizeof(logEntry->spPlVolt);
|
||||
memcpy(buff, &(logEntry->spPlAuxVolt), sizeof(logEntry->spPlAuxVolt));
|
||||
buff += sizeof(logEntry->spPlAuxVolt);
|
||||
memcpy(buff, &(logEntry->spBramVolt), sizeof(logEntry->spBramVolt));
|
||||
buff += sizeof(logEntry->spBramVolt);
|
||||
memcpy(buff, &(logEntry->spTemp), sizeof(logEntry->spTemp));
|
||||
buff += sizeof(logEntry->spTemp);
|
||||
memcpy(buff, &(logEntry->antVolt), sizeof(logEntry->antVolt));
|
||||
buff += sizeof(logEntry->antVolt);
|
||||
memcpy(buff, &(logEntry->antTemp), sizeof(logEntry->antTemp));
|
||||
buff += sizeof(logEntry->antTemp);
|
||||
memcpy(buff, &(logEntry->antPll), sizeof(logEntry->antPll));
|
||||
buff += sizeof(logEntry->antPll);
|
||||
memcpy(buff, &(logEntry->antMgc0), sizeof(logEntry->antMgc0));
|
||||
buff += sizeof(logEntry->antMgc0);
|
||||
memcpy(buff, &(logEntry->antMgc1), sizeof(logEntry->antMgc1));
|
||||
buff += sizeof(logEntry->antMgc1);
|
||||
|
||||
sysMonitorInst->hwStateCtrl.rBusy = buffIndex_old;
|
||||
}
|
||||
|
||||
// @System log
|
||||
/**
|
||||
@@ -550,18 +300,4 @@ void SysMonitor_GetSyslog(SYSLOG *log)
|
||||
ASSERT(sysMonitorInst != NULL);
|
||||
SysMonitor_GetLinklayerLog(&(log->linkLog));
|
||||
SysMonitor_GetPhysicalLayerLog(&(log->phyLog));
|
||||
SysMonitor_GetHardwareStatus(&(log->hwSate));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest system running log as raw data.
|
||||
*/
|
||||
void SysMonitor_GetSyslogRaw(uint8_t *buff)
|
||||
{
|
||||
ASSERT(sysMonitorInst != NULL);
|
||||
SysMonitor_GetLinklayerLogRaw(buff);
|
||||
buff += SLOTLOG_PACK_LEN;
|
||||
SysMonitor_GetPhysicalLayerLogRaw(buff);
|
||||
buff += SLOTLOG_PACK_LEN;
|
||||
SysMonitor_GetHardwareStatusRaw(buff);
|
||||
}
|
||||
@@ -13,14 +13,28 @@
|
||||
#define DATA_ID_NONE UINT32_MAX
|
||||
#define DATA_ID_TEST 0x02030203
|
||||
|
||||
#define VOLTAGE_LSB 0.05 // volt
|
||||
#define VOLTAGE_MAX 12.75 // volt
|
||||
#define VOLTAGE_LSB 0.01 // volt
|
||||
#define VOLTAGE_MAX 2.55 // volt
|
||||
|
||||
#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
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
// -- unit: ms, 0~604799999
|
||||
uint32_t psBDS;
|
||||
@@ -59,13 +73,7 @@ typedef struct
|
||||
float roll;
|
||||
} SYSINFO;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t dataId;
|
||||
uint8_t data[PAYLOAD_LEN_MAX];
|
||||
} PAYLOAD;
|
||||
|
||||
typedef struct
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
// Network log
|
||||
uint32_t tuNum;
|
||||
@@ -91,7 +99,7 @@ typedef struct
|
||||
uint32_t recvId;
|
||||
} LINKLOG;
|
||||
|
||||
typedef struct
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
uint32_t acqCnt;
|
||||
uint32_t fsyncCnt;
|
||||
@@ -110,9 +118,11 @@ typedef struct
|
||||
uint16_t reserve;
|
||||
} PHYLOG;
|
||||
|
||||
typedef struct
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
// Hardware log
|
||||
// Hardware status
|
||||
bool isSpOk;
|
||||
bool isAntOk;
|
||||
// -- Signal processor status
|
||||
uint8_t spPsVolt;
|
||||
uint8_t spPsAuxVolt;
|
||||
@@ -121,14 +131,13 @@ typedef struct
|
||||
uint8_t spPlAuxVolt;
|
||||
uint8_t spBramVolt;
|
||||
int8_t spTemp;
|
||||
bool isSpOk;
|
||||
// -- Antenna status
|
||||
uint8_t antVolt;
|
||||
uint8_t antTemp;
|
||||
uint8_t antPll;
|
||||
uint8_t antMgc0;
|
||||
uint8_t antMgc1;
|
||||
bool isAntOk;
|
||||
uint8_t dummy;
|
||||
} HWSTATE;
|
||||
|
||||
typedef struct
|
||||
@@ -140,21 +149,25 @@ typedef struct
|
||||
PHYLOG phyLog;
|
||||
|
||||
// Hardware status
|
||||
HWSTATE hwSate;
|
||||
HWSTATE hwState;
|
||||
} SYSLOG;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t dataId;
|
||||
uint8_t data[PAYLOAD_LEN_MAX];
|
||||
} PAYLOAD;
|
||||
|
||||
int32_t SysMonitor_Init(void);
|
||||
void SysMonitor_Destroy(void);
|
||||
|
||||
void SysMonitor_UpdateSysinfo(const SYSINFO *info);
|
||||
void SysMonitor_UpdateSysinfoRaw(const uint8_t *buff);
|
||||
void SysMonitor_GetSysinfo(SYSINFO *info);
|
||||
void SysMonitor_GetSysinfoRaw(uint8_t *buff);
|
||||
|
||||
void SysMonitor_UpdateSendPayloadRaw(const uint8_t *buff, size_t len);
|
||||
void SysMonitor_UpdateRecvPayloadRaw(const uint8_t *buff, size_t len);
|
||||
void SysMonitor_GetSendPayloadRaw(uint8_t *buff, uint32_t *id, size_t len);
|
||||
void SysMonitor_GetRecvPayloadRaw(uint8_t *buff, uint32_t *id, size_t len);
|
||||
void SysMonitor_UpdateSendPayload(const uint8_t *buff, size_t len);
|
||||
void SysMonitor_UpdateRecvPayload(const uint8_t *buff, size_t len);
|
||||
void SysMonitor_GetSendPayload(uint8_t *buff, uint32_t *id, size_t len);
|
||||
void SysMonitor_GetRecvPayload(uint8_t *buff, uint32_t *id, size_t len);
|
||||
|
||||
void SysMonitor_UpdateLinklayerLog(const LINKLOG *log);
|
||||
void SysMonitor_UpdatePhysicalLayerLog(const PHYLOG *log);
|
||||
@@ -162,11 +175,7 @@ void SysMonitor_UpdateHardwareStatus(const HWSTATE *state);
|
||||
void SysMonitor_GetLinklayerLog(LINKLOG *log);
|
||||
void SysMonitor_GetPhysicalLayerLog(PHYLOG *log);
|
||||
void SysMonitor_GetHardwareStatus(HWSTATE *state);
|
||||
void SysMonitor_GetLinklayerLogRaw(uint8_t *buff);
|
||||
void SysMonitor_GetPhysicalLayerLogRaw(uint8_t *buff);
|
||||
void SysMonitor_GetHardwareStatusRaw(uint8_t *buff);
|
||||
|
||||
void SysMonitor_GetSyslog(SYSLOG *log);
|
||||
void SysMonitor_GetSyslogRaw(uint8_t *buff);
|
||||
|
||||
#endif //__SYSTEM_MONITOR_H_
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
#define WD_ST_RET 0x02
|
||||
#define ST_RET_OK 0xAA
|
||||
#define ST_RET_ERROR 0x55
|
||||
|
||||
#define ST_RET_INFO_LEN 13
|
||||
// -- -- Signal processor PS voltage
|
||||
#define WD_SP_PS_VOLT 0x03
|
||||
// -- -- Signal processor PS AUX voltage
|
||||
@@ -166,6 +166,15 @@
|
||||
#define WD_LJ_RM_TEST 0x02
|
||||
#define LJ_RM_TEST_CODE 0x99
|
||||
// -- 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 81
|
||||
#define WD_LJ_HARDWARE_ST 0x91
|
||||
#define WD_LJ_HARDWARE_ST_LEN 13
|
||||
|
||||
#define LJ_RM_TEST_RESP_LEN 158
|
||||
|
||||
|
||||
@@ -229,6 +238,7 @@ int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
||||
(*instPtr)->txQueue = NULL;
|
||||
(*instPtr)->uartInst = NULL;
|
||||
memcpy(&((*instPtr)->config), config, sizeof(SYSBUS_CONFIG));
|
||||
memset(&((*instPtr)->sysLog), 0x00, sizeof(SYSLOG));
|
||||
uartConfig.baseAddr = config->baseAddr;
|
||||
Status = SysbusUart_Init(&((*instPtr)->uartInst), &uartConfig);
|
||||
if (Status != SUCCESS)
|
||||
@@ -289,7 +299,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
{
|
||||
case CMD_SELF_TEST:
|
||||
{
|
||||
const HWSTATE *hwStatsPtr;
|
||||
HWSTATE *hwStatsPtr = &(instPtr->sysLog.hwState);
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
if (sysbusRsp == NULL) {
|
||||
DBG_ERROR("Failed to allocate memory for SELF TEST Response!\n");
|
||||
@@ -300,7 +310,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
memset(sysbusRsp->data, 0x00, ST_RSP_LEN);
|
||||
sysbusRsp->data[WD_CMD] = CMD_SELF_TEST;
|
||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
hwStatsPtr = Phy_RefreshHwSate(linkInstPtr->config.phyInstPtr);
|
||||
SysMonitor_GetHardwareStatus(hwStatsPtr);
|
||||
if (linkInstPtr->isEnable == false)
|
||||
{
|
||||
sysbusRsp->data[WD_ST_RET] = (hwStatsPtr->isSpOk) ? ST_RET_OK : ST_RET_ERROR;
|
||||
@@ -309,19 +319,8 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
{
|
||||
sysbusRsp->data[WD_ST_RET] = (hwStatsPtr->isSpOk && hwStatsPtr->isAntOk) ? ST_RET_OK : ST_RET_ERROR;
|
||||
}
|
||||
sysbusRsp->data[WD_SP_PS_VOLT] = hwStatsPtr->spPsVolt;
|
||||
sysbusRsp->data[WD_SP_PSAUX_VOLT] = hwStatsPtr->spPsAuxVolt;
|
||||
sysbusRsp->data[WD_SP_DDR_VOLT] = hwStatsPtr->spDdrVolt;
|
||||
sysbusRsp->data[WD_SP_PL_VOLT] = hwStatsPtr->spPlVolt;
|
||||
sysbusRsp->data[WD_SP_PLAUX_VOLT] = hwStatsPtr->spPlAuxVolt;
|
||||
sysbusRsp->data[WD_SP_BRAM_VOLT] = hwStatsPtr->spBramVolt;
|
||||
sysbusRsp->data[WD_SP_TEMP] = hwStatsPtr->spTemp;
|
||||
sysbusRsp->data[WD_ANT_VOLT] = hwStatsPtr->antVolt;
|
||||
sysbusRsp->data[WD_ANT_RF_TEMP] = hwStatsPtr->antTemp;
|
||||
sysbusRsp->data[WD_ANT_RF_PLL] = hwStatsPtr->antPll;
|
||||
sysbusRsp->data[WD_ANT_MGC_0] = hwStatsPtr->antMgc0;
|
||||
sysbusRsp->data[WD_ANT_MGC_1] = hwStatsPtr->antMgc1;
|
||||
sysbusRsp->data[WD_ST_DUMMY] = 0; // dummy byte should always be 0
|
||||
// apply status and omit 2 bytes of overhead.
|
||||
memcpy(sysbusRsp->data + WD_SP_PS_VOLT, &(hwStatsPtr->spPlAuxVolt), ST_RET_INFO_LEN);
|
||||
|
||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||
{
|
||||
@@ -378,21 +377,28 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
PHY_INST *phyRef = linkInstPtr->config.phyInstPtr;
|
||||
TMC_INST *tmcRef = linkInstPtr->config.tmcInstPtr;
|
||||
|
||||
if (data[WD_MODE_CMD] == MODE_CMD_HEAD
|
||||
&& L2_GetNodeType(linkInstPtr) != L2_NODE_HEAD)
|
||||
if (data[WD_MODE_CMD] == MODE_CMD_HEAD)
|
||||
{
|
||||
// head node config
|
||||
linkConfig.myType = L2_NODE_HEAD;
|
||||
linkConfig.myId = 1;
|
||||
Linklayer_Reconfig(linkInstPtr, &linkConfig);
|
||||
// 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
|
||||
&& L2_GetNodeType(linkInstPtr) != L2_NODE_MEMBER)
|
||||
|
||||
else if (data[WD_MODE_CMD] == MODE_CMD_MEMBER )
|
||||
{
|
||||
// member node config
|
||||
linkConfig.myType = L2_NODE_MEMBER;
|
||||
linkConfig.myId = 2;
|
||||
Linklayer_Reconfig(linkInstPtr, &linkConfig);
|
||||
// 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
|
||||
{
|
||||
@@ -439,19 +445,19 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
}
|
||||
case CMD_SYS_INFO:
|
||||
{
|
||||
SysMonitor_UpdateSysinfoRaw(data + SYS_INFO_OFFSET);
|
||||
SysMonitor_UpdateSysinfo((SYSINFO *)(data + SYS_INFO_OFFSET));
|
||||
Status = SUCCESS;
|
||||
break;
|
||||
}
|
||||
// TODO
|
||||
case CMD_FLJ_SEND:
|
||||
{
|
||||
SysMonitor_UpdateSendPayloadRaw(data + FLJ_DATA_OFFSET, PAYLOAD_LEN_FLJ_TX); // omit control info
|
||||
SysMonitor_UpdateSendPayload(data + FLJ_DATA_OFFSET, PAYLOAD_LEN_FLJ_TX); // omit control info
|
||||
break;
|
||||
}
|
||||
case CMD_LJ_SEND:
|
||||
{
|
||||
SysMonitor_UpdateSendPayloadRaw(data + LJ_DATA_OFFSET, PAYLOAD_LEN_LJ_TX); // omit control info
|
||||
SysMonitor_UpdateSendPayload(data + LJ_DATA_OFFSET, PAYLOAD_LEN_LJ_TX); // omit control info
|
||||
break;
|
||||
}
|
||||
case CMD_FLJ_POLL:
|
||||
@@ -472,7 +478,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
sysbusRsp->data[WD_CMD] = CMD_FLJ_POLL;
|
||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
uint32_t dataId;
|
||||
SysMonitor_GetRecvPayloadRaw(sysbusRsp->data + FLJ_DATA_OFFSET, &dataId, PAYLOAD_LEN_FLJ_RX); // omit control info
|
||||
SysMonitor_GetRecvPayload(sysbusRsp->data + FLJ_DATA_OFFSET, &dataId, PAYLOAD_LEN_FLJ_RX); // omit control info
|
||||
if (dataId == DATA_ID_NONE)
|
||||
{
|
||||
free(sysbusRsp);
|
||||
@@ -508,7 +514,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
sysbusRsp->data[WD_CMD] = CMD_LJ_POLL;
|
||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
uint32_t dataId;
|
||||
SysMonitor_GetRecvPayloadRaw(sysbusRsp->data + LJ_DATA_OFFSET, &dataId, PAYLOAD_LEN_LJ_RX); // omit control info
|
||||
SysMonitor_GetRecvPayload(sysbusRsp->data + LJ_DATA_OFFSET, &dataId, PAYLOAD_LEN_LJ_RX); // omit control info
|
||||
if (dataId == DATA_ID_NONE)
|
||||
{
|
||||
free(sysbusRsp);
|
||||
@@ -528,6 +534,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
}
|
||||
case CMD_FLJ_RM_TEST:
|
||||
{
|
||||
SYSLOG *sysLogPtr = &(instPtr->sysLog);
|
||||
if (data[WD_FLJ_RM_TEST] != FLJ_RM_TEST_CODE)
|
||||
{
|
||||
DBG_WARNING("SystemBus::Invalid remote test code!\n");
|
||||
@@ -546,6 +553,16 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
sysbusRsp->data[WD_CMD] = CMD_FLJ_RM_TEST;
|
||||
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){
|
||||
free(sysbusRsp);
|
||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
|
||||
@@ -17,10 +17,11 @@
|
||||
#define __SYSTEMBUS_H_
|
||||
|
||||
/***************************** Include Files *********************************/
|
||||
#include "systembus_uart.h" // SystemBus UART driver
|
||||
#include "circ_queue.h"
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "systembus_uart.h" // SystemBus UART driver
|
||||
#include "circ_queue.h"
|
||||
#include "../system_monitor.h"
|
||||
|
||||
/************************** Constant Definitions *****************************/
|
||||
/************************** Data Type Definitions ****************************/
|
||||
@@ -35,6 +36,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
SYSBUS_CONFIG config;
|
||||
SYSLOG sysLog;
|
||||
SYSBUS_UART *uartInst;
|
||||
CIRC_QUEUE *txQueue;
|
||||
CIRC_QUEUE *rxQueue;
|
||||
|
||||
Reference in New Issue
Block a user