15 Commits
11 changed files with 203 additions and 245 deletions
+3 -1
View File
@@ -360,7 +360,9 @@ void ScuTimer_IntrHandler(void *context)
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
{
// Update log
Phy_UpdateHwSate(phyInstPtr);
const HWSTATE *newHwState;
newHwState = Phy_RefreshHwSate(phyInstPtr);
SysMonitor_UpdateHardwareStatus(newHwState);
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
}
else
+3 -1
View File
@@ -361,7 +361,9 @@ void ScuTimer_IntrHandler(void *context)
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
{
// Update log
Phy_UpdateHwSate(phyInstPtr);
const HWSTATE *newHwState;
newHwState = Phy_RefreshHwSate(phyInstPtr);
SysMonitor_UpdateHardwareStatus(newHwState);
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
}
else
@@ -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_GetSendPayloadFLJRaw(buff + L2_MSG_SVC_PAYLOAD, &dataId);
SysMonitor_GetSendPayloadRaw(buff + L2_MSG_SVC_PAYLOAD, &dataId, PAYLOAD_LEN_FLJ_TX);
}
else
{
SysMonitor_GetSendPayloadLJRaw(buff + L2_MSG_SVC_PAYLOAD, &dataId);
SysMonitor_GetSendPayloadRaw(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);
@@ -276,11 +276,11 @@ int32_t L2_Service_PktHandler(L2_INST *instPtr, uint8_t *msg)
{
if(L2_GetNodeType(instPtr) == L2_NODE_HEAD)
{
SysMonitor_UpdateRecvPayloadFLJRaw(msg+L2_MSG_SVC_PAYLOAD);
SysMonitor_UpdateRecvPayloadRaw(msg+L2_MSG_SVC_PAYLOAD, PAYLOAD_LEN_FLJ_RX);
}
else
{
SysMonitor_UpdateRecvPayloadLJRaw(msg+L2_MSG_SVC_PAYLOAD);
SysMonitor_UpdateRecvPayloadRaw(msg+L2_MSG_SVC_PAYLOAD, PAYLOAD_LEN_LJ_RX);
}
}
@@ -1110,41 +1110,74 @@ 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 SUCCESS
* FAILURE pattern length exceeds maximum length.
* @return pointer to new hardware status
*
******************************************************************************/
void Phy_UpdateHwSate(PHY_INST *instPtr)
const HWSTATE* Phy_RefreshHwSate(PHY_INST *instPtr)
{
ASSERT(instPtr != NULL);
uint32_t rawData;
#ifndef EMULATION
// -- Update Chip voltage, unit mV
float evalData;
// -- Update Ps voltage, unit mV
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) evalData/VOLTAGE_LSB;
// -- 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;
// -- 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;
// -- 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;
// -- 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;
// -- 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;
// -- Update Chip temperature, unit 0.01 deg
rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_TEMP);
instPtr->hwSate.spTemp = (uint16_t)(XAdcPs_RawToTemperature(rawData) * 100);
// FIXME: Chip status determine.
instPtr->hwSate.chipSt = 0;
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;
#else
instPtr->hwSate.spVolt = 0;
instPtr->hwSate.spTemp = 0;
instPtr->hwSate.chipSt = 0;
instPtr->spPsVolt = 0;
instPtr->spPsAuxVolt = 0;
instPtr->spDdrVolt = 0;
instPtr->spPlVolt = 0;
instPtr->spPlAuxVolt = 0;
instPtr->spBramVolt = 0;
instPtr->spTemp = 0;
instPtr->isSpOk = true;
#endif
/*** Voltage and 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
// [0] - ANT voltage status
// [2] - RF voltage status
// [4] - NIL voltage status
instPtr->hwSate.antVolt = (rawData & ANT_STATUS_ANT_VOLT_MASK) ? 0x01 : 0x00;
instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_RF_VOLT_MASK) ? 0x04 : 0x00;
instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_NIL_VOLT_MASK) ? 0x10 : 0x00;
// [6] - Antenna status
instPtr->hwSate.antVolt = (rawData & ANT_STATUS_ANT_VOLT_MASK != 0) ? 0x01 : 0x00;
instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_RF_VOLT_MASK!= 0) ? 0x04 : 0x00;
instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_NIL_VOLT_MASK!= 0) ? 0x10 : 0x00;
instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_CODE_MASK!= 0) ? 0x40 : 0x00;
/*** Temperature and Lock Status ***/
rawData = PhyRead(instPtr, RF_STATUS);
@@ -1165,9 +1198,20 @@ void Phy_UpdateHwSate(PHY_INST *instPtr)
// [7:4] - Channel 2 MGC
// [11:8] - Channel 3 MGC
// [15:12] - Channel 4 MGC
instPtr->hwSate.antMgc = (rawData & RF_MGC_CH1_MASK);
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH2_MASK) >> 4;
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH3_MASK) >> 8;
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH4_MASK) >> 12;
SysMonitor_UpdateHardwareStatus(&(instPtr->hwSate));
instPtr->hwSate.antMgc0 = (rawData & RF_MGC_CH1_MASK);
instPtr->hwSate.antMgc0 |= (rawData & RF_MGC_CH2_MASK) >> 4;
instPtr->hwSate.antMgc1 = (rawData & RF_MGC_CH3_MASK) >> 16;
instPtr->hwSate.antMgc1 |= (rawData & 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;
}
return (&(instPtr->hwSate));
}
@@ -240,7 +240,7 @@ int32_t Phy_InstInit(PHY_INST **instPtr, PHY_CONFIG *phyConfig);
void Phy_Destroy(PHY_INST *instPtr);
void Phy_UpdateState(PHY_INST *instPtr);
void Phy_UpdateHwSate(PHY_INST *instPtr);
const HWSTATE* Phy_RefreshHwSate(PHY_INST *instPtr);
void Phy_Start(PHY_INST *instPtr);
void Phy_Halt(PHY_INST *instPtr);
@@ -33,7 +33,7 @@
/**
* 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_WIDTH 1
#define PHY_MAIN_CTRL_EN_MASK 0x00000001U
+28 -140
View File
@@ -78,14 +78,10 @@ int32_t SysMonitor_Init(void)
memset(&(sysMonitorInst->protocolLogCtrl), BUFF_NONE, sizeof(PINGPONG));
memset(&(sysMonitorInst->hwStateCtrl), BUFF_NONE, sizeof(PINGPONG));
sysMonitorInst->recvPL[0].dataId_flj = DATA_ID_NONE;
sysMonitorInst->recvPL[0].dataId_lj = DATA_ID_NONE;
sysMonitorInst->recvPL[1].dataId_flj = DATA_ID_NONE;
sysMonitorInst->recvPL[1].dataId_lj = DATA_ID_NONE;
sysMonitorInst->sendPL[0].dataId_flj = DATA_ID_NONE;
sysMonitorInst->sendPL[0].dataId_lj = DATA_ID_NONE;
sysMonitorInst->sendPL[1].dataId_flj = DATA_ID_NONE;
sysMonitorInst->sendPL[1].dataId_lj = DATA_ID_NONE;
sysMonitorInst->recvPL[0].dataId = DATA_ID_NONE;
sysMonitorInst->recvPL[1].dataId = DATA_ID_NONE;
sysMonitorInst->sendPL[0].dataId = DATA_ID_NONE;
sysMonitorInst->sendPL[1].dataId = DATA_ID_NONE;
return SUCCESS;
}
@@ -96,7 +92,7 @@ void SysMonitor_Destroy(void)
}
// @System Info
void SysMonitor_UpdateSysinfo(SYSINFO *info)
void SysMonitor_UpdateSysinfo(const SYSINFO *info)
{
uint8_t buffIndx;
buffIndx = GetWritable(sysMonitorInst->sysInfoCtrl);
@@ -106,7 +102,7 @@ void SysMonitor_UpdateSysinfo(SYSINFO *info)
sysMonitorInst->sysInfoCtrl.wBusy = BUFF_NONE;
}
void SysMonitor_UpdateSysinfoRaw(uint8_t *buff)
void SysMonitor_UpdateSysinfoRaw(const uint8_t *buff)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx;
@@ -210,24 +206,24 @@ void SysMonitor_GetSysinfoRaw(uint8_t *buff)
}
// @Send Payload
/**
* Update send FLJ payload by raw data.
* Update send payload by raw data.
*/
void SysMonitor_UpdateSendPayloadFLJRaw(uint8_t *buff)
void SysMonitor_UpdateSendPayloadRaw(const uint8_t *buff, size_t len)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx;
buffIndx = GetWritable(sysMonitorInst->sendPLCtrl);
sysMonitorInst->sendPLCtrl.wBusy = buffIndx;
memcpy(sysMonitorInst->sendPL[buffIndx].data_flj, buff, sizeof(uint8_t) * PAYLOAD_FLJ_TX);
sysMonitorInst->sendPL[buffIndx].dataId_flj++;
memcpy(sysMonitorInst->sendPL[buffIndx].data, buff, len);
sysMonitorInst->sendPL[buffIndx].dataId++;
sysMonitorInst->sendPLCtrl.latest = buffIndx;
sysMonitorInst->sendPLCtrl.wBusy = BUFF_NONE;
}
/**
* Get send FLJ payload as raw data.
* Get send payload as raw data.
*/
void SysMonitor_GetSendPayloadFLJRaw(uint8_t *buff, uint32_t *id)
void SysMonitor_GetSendPayloadRaw(uint8_t *buff, uint32_t *id, size_t len)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx, buffIndex_old;
@@ -237,70 +233,34 @@ void SysMonitor_GetSendPayloadFLJRaw(uint8_t *buff, uint32_t *id)
else
buffIndx = GetReadable(sysMonitorInst->sendPLCtrl);
sysMonitorInst->sendPLCtrl.rBusy = buffIndx;
if (sysMonitorInst->sendPL[buffIndx].dataId_flj != DATA_ID_NONE)
if (sysMonitorInst->sendPL[buffIndx].dataId != DATA_ID_NONE)
{
memcpy(buff, sysMonitorInst->sendPL[buffIndx].data_flj, sizeof(uint8_t) * PAYLOAD_FLJ_TX);
memcpy(buff, sysMonitorInst->sendPL[buffIndx].data, len);
}
*id = sysMonitorInst->sendPL[buffIndx].dataId_flj;
sysMonitorInst->sendPLCtrl.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_TX);
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_TX);
}
*id = sysMonitorInst->sendPL[buffIndx].dataId_lj;
*id = sysMonitorInst->sendPL[buffIndx].dataId;
sysMonitorInst->sendPLCtrl.rBusy = buffIndex_old;
}
// @Receive Payload
/**
* Update receive FLJ payload by raw data.
* Update receive payload by raw data.
*/
void SysMonitor_UpdateRecvPayloadFLJRaw(uint8_t *buff)
void SysMonitor_UpdateRecvPayloadRaw(const uint8_t *buff, size_t len)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx;
buffIndx = GetWritable(sysMonitorInst->recvPLCtrl);
sysMonitorInst->recvPLCtrl.wBusy = buffIndx;
memcpy(sysMonitorInst->recvPL[buffIndx].data_flj, buff, sizeof(uint8_t) * PAYLOAD_FLJ_RX);
sysMonitorInst->recvPL[buffIndx].dataId_flj++;
memcpy(sysMonitorInst->recvPL[buffIndx].data, buff, len);
sysMonitorInst->recvPL[buffIndx].dataId++;
sysMonitorInst->recvPLCtrl.latest = buffIndx;
sysMonitorInst->recvPLCtrl.wBusy = BUFF_NONE;
}
/**
* Get send FLJ payload as raw data.
* Get send payload as raw data.
*/
void SysMonitor_GetRecvPayloadFLJRaw(uint8_t *buff, uint32_t *id)
void SysMonitor_GetRecvPayloadRaw(uint8_t *buff, uint32_t *id, size_t len)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx, buffIndex_old;
@@ -310,47 +270,11 @@ void SysMonitor_GetRecvPayloadFLJRaw(uint8_t *buff, uint32_t *id)
else
buffIndx = GetReadable(sysMonitorInst->recvPLCtrl);
sysMonitorInst->recvPLCtrl.rBusy = buffIndx;
if (sysMonitorInst->recvPL[buffIndx].dataId_flj != DATA_ID_NONE)
if (sysMonitorInst->recvPL[buffIndx].dataId != DATA_ID_NONE)
{
memcpy(buff, sysMonitorInst->recvPL[buffIndx].data_flj, sizeof(uint8_t) * PAYLOAD_FLJ_RX);
memcpy(buff, sysMonitorInst->recvPL[buffIndx].data, len);
}
*id = sysMonitorInst->recvPL[buffIndx].dataId_flj;
sysMonitorInst->recvPLCtrl.rBusy = buffIndex_old;
}
/**
* Update receive LJ payload by raw data.
*/
void SysMonitor_UpdateRecvPayloadLJRaw(uint8_t *buff)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx;
buffIndx = GetWritable(sysMonitorInst->recvPLCtrl);
sysMonitorInst->recvPLCtrl.wBusy = buffIndx;
memcpy(sysMonitorInst->recvPL[buffIndx].data_lj, buff, sizeof(uint8_t) * PAYLOAD_LJ_RX);
sysMonitorInst->recvPL[buffIndx].dataId_lj++;
sysMonitorInst->recvPLCtrl.latest = buffIndx;
sysMonitorInst->recvPLCtrl.wBusy = BUFF_NONE;
}
/**
* Get send LJ payload as raw data.
*/
void SysMonitor_GetRecvPayloadLJRaw(uint8_t *buff, uint32_t *id)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx, buffIndex_old;
buffIndex_old = sysMonitorInst->recvPLCtrl.rBusy;
if (buffIndex_old != BUFF_NONE)
buffIndx = buffIndex_old; // Keep it busy
else
buffIndx = GetReadable(sysMonitorInst->recvPLCtrl);
sysMonitorInst->recvPLCtrl.rBusy = buffIndx;
if (sysMonitorInst->recvPL[buffIndx].dataId_lj != DATA_ID_NONE)
{
memcpy(buff, sysMonitorInst->recvPL[buffIndx].data_lj, sizeof(uint8_t) * PAYLOAD_LJ_RX);
}
*id = sysMonitorInst->recvPL[buffIndx].dataId_lj;
*id = sysMonitorInst->recvPL[buffIndx].dataId;
sysMonitorInst->recvPLCtrl.rBusy = buffIndex_old;
}
@@ -358,7 +282,7 @@ void SysMonitor_GetRecvPayloadLJRaw(uint8_t *buff, uint32_t *id)
/**
* Log send slot information
*/
void SysMonitor_UpdateSendSlotLog(SLOTLOG *log)
void SysMonitor_UpdateSendSlotLog(const SLOTLOG *log)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx;
@@ -422,7 +346,7 @@ void SysMonitor_GetSendSlotLogRaw(uint8_t *buff)
/**
* Log receive slot information
*/
void SysMonitor_UpdateRecvSlotLog(SLOTLOG *log)
void SysMonitor_UpdateRecvSlotLog(const SLOTLOG *log)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx;
@@ -486,7 +410,7 @@ void SysMonitor_GetRecvSlotLogRaw(uint8_t *buff)
/**
* Log protocol running status.
*/
void SysMonitor_UpdateProtocolLog(PRTCLLOG *log)
void SysMonitor_UpdateProtocolLog(const PRTCLLOG *log)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx;
@@ -551,7 +475,7 @@ void SysMonitor_GetProtocolLogRaw(uint8_t *buff)
/**
* Log hardware running status.
*/
void SysMonitor_UpdateHardwareStatus(HWSTATE *state)
void SysMonitor_UpdateHardwareStatus(const HWSTATE *state)
{
ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx;
@@ -579,40 +503,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 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
/**
* Get the latest system running log.
@@ -637,6 +527,4 @@ void SysMonitor_GetSyslogRaw(uint8_t *buff)
SysMonitor_GetRecvSlotLogRaw(buff);
buff += SLOTLOG_PACK_LEN;
SysMonitor_GetProtocolLogRaw(buff);
buff += PRTCLLOG_PACK_ELN;
SysMonitor_GetHardwareStatusRaw(buff);
}
+37 -30
View File
@@ -4,15 +4,23 @@
#include <stdint.h>
#include <stdbool.h>
#define PAYLOAD_LEN 256
#define PAYLOAD_FLJ_RX 168
#define PAYLOAD_FLJ_TX 66
#define PAYLOAD_LJ_RX 66
#define PAYLOAD_LJ_TX 168
#define PAYLOAD_LEN_MAX 256
#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_TEST 0x02030203
#define VOLTAGE_LSB 0.05 // volt
#define VOLTAGE_MAX 12.75 // volt
#define TEMPERATURE_LSB 1.0 // Celsius degree
#define TEMPERATURE_MAX 127.0 // Celsius degree
#define TEMPERATURE_MIN -128.0 // Celsius degree
typedef struct
{
// FIXME: To Complete
@@ -60,10 +68,8 @@ typedef struct
typedef struct
{
uint32_t dataId_lj;
uint8_t data_lj[PAYLOAD_LEN];
uint32_t dataId_flj;
uint8_t data_flj[PAYLOAD_LEN];
uint32_t dataId;
uint8_t data[PAYLOAD_LEN_MAX];
} PAYLOAD;
typedef struct
@@ -73,7 +79,7 @@ typedef struct
uint8_t slotNo;
uint8_t frameType;
// Payload
uint8_t payload[PAYLOAD_LEN];
uint8_t payload[PAYLOAD_LEN_MAX];
// Time sync info
uint64_t tmStamp;
uint32_t tmDevi;
@@ -101,15 +107,21 @@ typedef struct
{
// Hardware log
// -- Signal processor status
uint16_t spVolt;
uint16_t spTemp;
uint8_t chipSt;
uint8_t spPsVolt;
uint8_t spPsAuxVolt;
uint8_t spDdrVolt;
uint8_t spPlVolt;
uint8_t spPlAuxVolt;
uint8_t spBramVolt;
int8_t spTemp;
bool isSpOk;
// -- Antenna status
uint8_t antVolt;
uint8_t antTemp;
uint8_t antPll;
uint16_t antMgc;
uint8_t antSt;
uint8_t antMgc0;
uint8_t antMgc1;
bool isAntOk;
} HWSTATE;
typedef struct
@@ -130,23 +142,19 @@ typedef struct
int32_t SysMonitor_Init(void);
void SysMonitor_Destroy(void);
void SysMonitor_UpdateSysinfo(SYSINFO *info);
void SysMonitor_UpdateSysinfoRaw(uint8_t *buff);
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_UpdateSendPayloadFLJRaw(uint8_t *buff);
void SysMonitor_UpdateRecvPayloadFLJRaw(uint8_t *buff);
void SysMonitor_UpdateSendPayloadLJRaw(uint8_t *buff);
void SysMonitor_UpdateRecvPayloadLJRaw(uint8_t *buff);
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_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_UpdateSendSlotLog(SLOTLOG *log);
void SysMonitor_UpdateRecvSlotLog(SLOTLOG *log);
void SysMonitor_UpdateProtocolLog(PRTCLLOG *log);
void SysMonitor_UpdateSendSlotLog(const SLOTLOG *log);
void SysMonitor_UpdateRecvSlotLog(const SLOTLOG *log);
void SysMonitor_UpdateProtocolLog(const PRTCLLOG *log);
void SysMonitor_GetSendSlotLog(SLOTLOG *log);
void SysMonitor_GetRecvSlotLog(SLOTLOG *log);
void SysMonitor_GetProtocolLog(PRTCLLOG *log);
@@ -154,9 +162,8 @@ 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_UpdateHardwareStatus(const HWSTATE *state);
void SysMonitor_GetHardwareStatus(HWSTATE *state);
void SysMonitor_GetHardwareStatusRaw(uint8_t *buff);
void SysMonitor_GetSyslog(SYSLOG *log);
void SysMonitor_GetSyslogRaw(uint8_t *buff);
+60 -40
View File
@@ -51,25 +51,33 @@
#define WD_ST_RET 0x02
#define ST_RET_OK 0xAA
#define ST_RET_ERROR 0x55
// -- -- Signal processor voltage
#define WD_SP_VOLT 0x03
// -- -- Signal processor PS voltage
#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
#define WD_SP_TEMP 0x04
// -- -- Signal processor chip status
#define WD_SP_CS 0x05
// -- -- Signal processor antenna voltage
#define WD_ANT_VOLT 0x06
// -- -- Signal processor antenna temperature
#define WD_ANT_TEMP 0x07
#define WD_SP_TEMP 0x09
// -- -- Signal processor antenna voltage status
#define WD_ANT_VOLT 0x0A
// -- -- Signal processor antenna RF temperature
#define WD_ANT_RF_TEMP 0x0B
// -- -- Signal processor antenna PLL lock status
#define WD_ANT_PLL 0x08
#define WD_ANT_RF_PLL 0x0C
// -- -- Signal processor antenna MGC
#define WD_ANT_MGC_L 0x09
#define WD_ANT_MGC_H 0x0A
// -- -- Signal processor antenna status
#define WD_ANT_ST 0x0B
#define WD_ANT_MGC_0 0x0D
#define WD_ANT_MGC_1 0x0E
// -- -- Dummy must be 0x00
#define WD_ST_DUMMY 0x0C
#define WD_ST_DUMMY 0x0F
// Data Send Test Command
#define CMD_DATA_TEST_A 0xE2
@@ -281,6 +289,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
{
case CMD_SELF_TEST:
{
const HWSTATE *hwStatsPtr;
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
if (sysbusRsp == NULL) {
DBG_ERROR("Failed to allocate memory for SELF TEST Response!\n");
@@ -291,9 +300,29 @@ 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);
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;
}
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
// FIXME: run self-test and insert result
sysbusRsp->data[WD_ST_RET] = ST_RET_OK;
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
{
free(sysbusRsp);
@@ -349,14 +378,16 @@ 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)
if (data[WD_MODE_CMD] == MODE_CMD_HEAD
&& 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)
else if (data[WD_MODE_CMD] == MODE_CMD_MEMBER
&& L2_GetNodeType(linkInstPtr) != L2_NODE_MEMBER)
{
// member node config
linkConfig.myType = L2_NODE_MEMBER;
@@ -365,29 +396,29 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
}
else
{
// FIXME:
// 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)
{
// high power config
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_HIGH_POWER);
Linklayer_Start(linkInstPtr);
}
else if(data[WD_EN_CMD] == EN_CMD_ON_LOW_POWER)
{
// low power config
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_LOW_POWER);
Linklayer_Start(linkInstPtr);
}
else
{
// silence config
// FIXME: confirm
// TODO: better approach?
Linklayer_Halt(linkInstPtr);
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_SILENT);
@@ -399,9 +430,10 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
DBG_ERROR("Physical set pull time failed, with error code: %" PRId32 ".\n", Status);
}
Phy_SetupNextSlot(phyRef, PHY_TOR_RX, L1_10KBPS_10MS_FRAME, NULL);
break;
}
_nop_(); // for debug
Linklayer_Start(linkInstPtr);
Status = SUCCESS;
break;
}
@@ -414,12 +446,12 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
// TODO
case CMD_FLJ_SEND:
{
SysMonitor_UpdateSendPayloadFLJRaw(data + FLJ_DATA_OFFSET); // omit control info
SysMonitor_UpdateSendPayloadRaw(data + FLJ_DATA_OFFSET, PAYLOAD_LEN_FLJ_TX); // omit control info
break;
}
case CMD_LJ_SEND:
{
SysMonitor_UpdateSendPayloadLJRaw(data + LJ_DATA_OFFSET); // omit control info
SysMonitor_UpdateSendPayloadRaw(data + LJ_DATA_OFFSET, PAYLOAD_LEN_LJ_TX); // omit control info
break;
}
case CMD_FLJ_POLL:
@@ -440,7 +472,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_GetRecvPayloadFLJRaw(sysbusRsp->data + FLJ_DATA_OFFSET, &dataId); // omit control info
SysMonitor_GetRecvPayloadRaw(sysbusRsp->data + FLJ_DATA_OFFSET, &dataId, PAYLOAD_LEN_FLJ_RX); // omit control info
if (dataId == DATA_ID_NONE)
{
free(sysbusRsp);
@@ -476,7 +508,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_GetRecvPayloadLJRaw(sysbusRsp->data + LJ_DATA_OFFSET, &dataId); // omit control info
SysMonitor_GetRecvPayloadRaw(sysbusRsp->data + LJ_DATA_OFFSET, &dataId, PAYLOAD_LEN_LJ_RX); // omit control info
if (dataId == DATA_ID_NONE)
{
free(sysbusRsp);
@@ -562,18 +594,6 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
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.
-4
View File
@@ -47,10 +47,6 @@ typedef struct
int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config);
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_TxIntrHandler(SYSBUS *instPtr);
-1
View File
@@ -56,7 +56,6 @@ clist_new(void)
void clist_clear(clist_t *self)
{
uint32_t len = self->len;
clist_node_t *next;
clist_node_t *curr = self->head;