8 Commits
8 changed files with 155 additions and 101 deletions
+3 -1
View File
@@ -360,7 +360,9 @@ void ScuTimer_IntrHandler(void *context)
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance)) if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
{ {
// Update log // Update log
Phy_UpdateHwSate(phyInstPtr); const HWSTATE *newHwState;
newHwState = Phy_RefreshHwSate(phyInstPtr);
SysMonitor_UpdateHardwareStatus(newHwState);
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance); XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
} }
else else
+3 -1
View File
@@ -361,7 +361,9 @@ void ScuTimer_IntrHandler(void *context)
if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance)) if (XScuTimer_IsExpired((XScuTimer *)xdesc->instance))
{ {
// Update log // Update log
Phy_UpdateHwSate(phyInstPtr); const HWSTATE *newHwState;
newHwState = Phy_RefreshHwSate(phyInstPtr);
SysMonitor_UpdateHardwareStatus(newHwState);
XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance); XScuTimer_ClearInterruptStatus((XScuTimer *)xdesc->instance);
} }
else else
@@ -1110,41 +1110,74 @@ 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 pointer to new hardware status
* FAILURE pattern length exceeds maximum length.
* *
******************************************************************************/ ******************************************************************************/
void Phy_UpdateHwSate(PHY_INST *instPtr) const HWSTATE* 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;
// -- 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) 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 // -- 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)
// FIXME: Chip status determine. ? INT8_MAX
instPtr->hwSate.chipSt = 0; : ((evalData < TEMPERATURE_MIN) ? INT8_MIN : (int8_t) evalData/TEMPERATURE_LSB);
// TODO: is OK?
instPtr->hwSate.isSpOk = true;
#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 != 0) ? 0x01 : 0x00;
instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_NIL_VOLT_MASK) ? 0x10 : 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 ***/ /*** Temperature and Lock Status ***/
rawData = PhyRead(instPtr, RF_STATUS); rawData = PhyRead(instPtr, RF_STATUS);
@@ -1165,9 +1198,20 @@ void Phy_UpdateHwSate(PHY_INST *instPtr)
// [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 & RF_MGC_CH1_MASK);
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH2_MASK) >> 4; instPtr->hwSate.antMgc0 |= (rawData & RF_MGC_CH2_MASK) >> 4;
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH3_MASK) >> 8; instPtr->hwSate.antMgc1 = (rawData & RF_MGC_CH3_MASK) >> 16;
instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH4_MASK) >> 12; instPtr->hwSate.antMgc1 |= (rawData & RF_MGC_CH4_MASK) >> 24;
SysMonitor_UpdateHardwareStatus(&(instPtr->hwSate));
// 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_Destroy(PHY_INST *instPtr);
void Phy_UpdateState(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_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
+8 -44
View File
@@ -92,7 +92,7 @@ void SysMonitor_Destroy(void)
} }
// @System Info // @System Info
void SysMonitor_UpdateSysinfo(SYSINFO *info) void SysMonitor_UpdateSysinfo(const SYSINFO *info)
{ {
uint8_t buffIndx; uint8_t buffIndx;
buffIndx = GetWritable(sysMonitorInst->sysInfoCtrl); buffIndx = GetWritable(sysMonitorInst->sysInfoCtrl);
@@ -102,7 +102,7 @@ void SysMonitor_UpdateSysinfo(SYSINFO *info)
sysMonitorInst->sysInfoCtrl.wBusy = BUFF_NONE; sysMonitorInst->sysInfoCtrl.wBusy = BUFF_NONE;
} }
void SysMonitor_UpdateSysinfoRaw(uint8_t *buff) void SysMonitor_UpdateSysinfoRaw(const uint8_t *buff)
{ {
ASSERT(sysMonitorInst != NULL); ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx; uint8_t buffIndx;
@@ -208,7 +208,7 @@ void SysMonitor_GetSysinfoRaw(uint8_t *buff)
/** /**
* Update send payload by raw data. * Update send payload by raw data.
*/ */
void SysMonitor_UpdateSendPayloadRaw(uint8_t *buff, size_t len) void SysMonitor_UpdateSendPayloadRaw(const uint8_t *buff, size_t len)
{ {
ASSERT(sysMonitorInst != NULL); ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx; uint8_t buffIndx;
@@ -245,7 +245,7 @@ void SysMonitor_GetSendPayloadRaw(uint8_t *buff, uint32_t *id, size_t len)
/** /**
* Update receive payload by raw data. * Update receive payload by raw data.
*/ */
void SysMonitor_UpdateRecvPayloadRaw(uint8_t *buff, size_t len) void SysMonitor_UpdateRecvPayloadRaw(const uint8_t *buff, size_t len)
{ {
ASSERT(sysMonitorInst != NULL); ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx; uint8_t buffIndx;
@@ -282,7 +282,7 @@ void SysMonitor_GetRecvPayloadRaw(uint8_t *buff, uint32_t *id, size_t len)
/** /**
* Log send slot information * Log send slot information
*/ */
void SysMonitor_UpdateSendSlotLog(SLOTLOG *log) void SysMonitor_UpdateSendSlotLog(const SLOTLOG *log)
{ {
ASSERT(sysMonitorInst != NULL); ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx; uint8_t buffIndx;
@@ -346,7 +346,7 @@ void SysMonitor_GetSendSlotLogRaw(uint8_t *buff)
/** /**
* Log receive slot information * Log receive slot information
*/ */
void SysMonitor_UpdateRecvSlotLog(SLOTLOG *log) void SysMonitor_UpdateRecvSlotLog(const SLOTLOG *log)
{ {
ASSERT(sysMonitorInst != NULL); ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx; uint8_t buffIndx;
@@ -410,7 +410,7 @@ void SysMonitor_GetRecvSlotLogRaw(uint8_t *buff)
/** /**
* Log protocol running status. * Log protocol running status.
*/ */
void SysMonitor_UpdateProtocolLog(PRTCLLOG *log) void SysMonitor_UpdateProtocolLog(const PRTCLLOG *log)
{ {
ASSERT(sysMonitorInst != NULL); ASSERT(sysMonitorInst != NULL);
uint8_t buffIndx; uint8_t buffIndx;
@@ -475,7 +475,7 @@ void SysMonitor_GetProtocolLogRaw(uint8_t *buff)
/** /**
* 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;
@@ -503,40 +503,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
/** /**
* Get the latest system running log. * Get the latest system running log.
@@ -561,6 +527,4 @@ void SysMonitor_GetSyslogRaw(uint8_t *buff)
SysMonitor_GetRecvSlotLogRaw(buff); SysMonitor_GetRecvSlotLogRaw(buff);
buff += SLOTLOG_PACK_LEN; buff += SLOTLOG_PACK_LEN;
SysMonitor_GetProtocolLogRaw(buff); SysMonitor_GetProtocolLogRaw(buff);
buff += PRTCLLOG_PACK_ELN;
SysMonitor_GetHardwareStatusRaw(buff);
} }
+27 -14
View File
@@ -13,6 +13,14 @@
#define DATA_ID_NONE UINT32_MAX #define DATA_ID_NONE UINT32_MAX
#define DATA_ID_TEST 0x02030203 #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 typedef struct
{ {
// FIXME: To Complete // FIXME: To Complete
@@ -99,15 +107,21 @@ typedef struct
{ {
// Hardware log // Hardware log
// -- Signal processor status // -- Signal processor status
uint16_t spVolt; uint8_t spPsVolt;
uint16_t spTemp; uint8_t spPsAuxVolt;
uint8_t chipSt; uint8_t spDdrVolt;
uint8_t spPlVolt;
uint8_t spPlAuxVolt;
uint8_t spBramVolt;
int8_t spTemp;
bool isSpOk;
// -- 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;
bool isAntOk;
} HWSTATE; } HWSTATE;
typedef struct typedef struct
@@ -128,19 +142,19 @@ typedef struct
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_UpdateSysinfoRaw(const uint8_t *buff);
void SysMonitor_GetSysinfo(SYSINFO *info); void SysMonitor_GetSysinfo(SYSINFO *info);
void SysMonitor_GetSysinfoRaw(uint8_t *buff); void SysMonitor_GetSysinfoRaw(uint8_t *buff);
void SysMonitor_UpdateSendPayloadRaw(uint8_t *buff, size_t len); void SysMonitor_UpdateSendPayloadRaw(const uint8_t *buff, size_t len);
void SysMonitor_UpdateRecvPayloadRaw(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_GetSendPayloadRaw(uint8_t *buff, uint32_t *id, size_t len);
void SysMonitor_GetRecvPayloadRaw(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_UpdateSendSlotLog(const SLOTLOG *log);
void SysMonitor_UpdateRecvSlotLog(SLOTLOG *log); void SysMonitor_UpdateRecvSlotLog(const SLOTLOG *log);
void SysMonitor_UpdateProtocolLog(PRTCLLOG *log); void SysMonitor_UpdateProtocolLog(const PRTCLLOG *log);
void SysMonitor_GetSendSlotLog(SLOTLOG *log); void SysMonitor_GetSendSlotLog(SLOTLOG *log);
void SysMonitor_GetRecvSlotLog(SLOTLOG *log); void SysMonitor_GetRecvSlotLog(SLOTLOG *log);
void SysMonitor_GetProtocolLog(PRTCLLOG *log); void SysMonitor_GetProtocolLog(PRTCLLOG *log);
@@ -148,9 +162,8 @@ void SysMonitor_GetSendSlotLogRaw(uint8_t *buff);
void SysMonitor_GetRecvSlotLogRaw(uint8_t *buff); void SysMonitor_GetRecvSlotLogRaw(uint8_t *buff);
void SysMonitor_GetProtocolLogRaw(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_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); void SysMonitor_GetSyslogRaw(uint8_t *buff);
+46 -17
View File
@@ -51,25 +51,33 @@
#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 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 // -- -- Signal processor temperature
#define WD_SP_TEMP 0x04 #define WD_SP_TEMP 0x09
// -- -- Signal processor chip status
#define WD_SP_CS 0x05 // -- -- Signal processor antenna voltage status
// -- -- Signal processor antenna voltage #define WD_ANT_VOLT 0x0A
#define WD_ANT_VOLT 0x06 // -- -- Signal processor antenna RF temperature
// -- -- Signal processor antenna temperature #define WD_ANT_RF_TEMP 0x0B
#define WD_ANT_TEMP 0x07
// -- -- Signal processor antenna PLL lock status // -- -- Signal processor antenna PLL lock status
#define WD_ANT_PLL 0x08 #define WD_ANT_RF_PLL 0x0C
// -- -- Signal processor antenna MGC // -- -- Signal processor antenna MGC
#define WD_ANT_MGC_L 0x09 #define WD_ANT_MGC_0 0x0D
#define WD_ANT_MGC_H 0x0A #define WD_ANT_MGC_1 0x0E
// -- -- Signal processor antenna status
#define WD_ANT_ST 0x0B
// -- -- Dummy must be 0x00 // -- -- Dummy must be 0x00
#define WD_ST_DUMMY 0x0C #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
@@ -281,6 +289,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
{ {
case CMD_SELF_TEST: case CMD_SELF_TEST:
{ {
const HWSTATE *hwStatsPtr;
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");
@@ -291,9 +300,29 @@ 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;
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) if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
{ {
free(sysbusRsp); free(sysbusRsp);