From f5aca7d5cf53d25515e8a2ed1bdd5b26ed635de5 Mon Sep 17 00:00:00 2001 From: Gatsby Van Date: Wed, 13 Mar 2024 17:01:07 +0800 Subject: [PATCH] update MPC --- df_datalink_ge/src/mpc/mpc.c | 133 ++++++++++++++--------------------- 1 file changed, 54 insertions(+), 79 deletions(-) diff --git a/df_datalink_ge/src/mpc/mpc.c b/df_datalink_ge/src/mpc/mpc.c index 02c83a0..e77ce97 100644 --- a/df_datalink_ge/src/mpc/mpc.c +++ b/df_datalink_ge/src/mpc/mpc.c @@ -66,37 +66,6 @@ // -- -- Signal processor Bram voltage #define WD_SP_FPGA_TEMP 0x08 -// -- -- Signal processor antenna voltage status -#define WD_ANT_VOLT 0x09 - -// -- -- Signal processor antenna RF temperature -#define WD_ANT_RF_TEMP 0x0A -// -- -- Signal processor antenna PLL lock status -#define WD_ANT_RF_PLL 0x0B -// -- -- Signal processor antenna MGC -#define WD_ANT_MGC_0 0x0C -#define WD_ANT_MGC_1 0x0D -// -- -- Reserved -#define WD_ANT_RESERVE 0x0E - -// Data Send Test Command -#define CMD_DATA_TEST_A 0xE2 -// -- Request -#define DATA_TEST_REQ_A_LEN 68 -// -- -- 68 byte payload -// -- Response -#define DATA_TEST_RSP_A_LEN 68 -// -- -- 68 byte payload - -// Data Send Test Command -#define CMD_DATA_TEST_B 0xF2 -// -- Request -#define DATA_TEST_REQ_B_LEN 170 -// -- -- 170 byte payload -// -- Response -#define DATA_TEST_RSP_B_LEN 170 -// -- -- 170 byte payload - // Config load #define CMD_CONFIG 0xE3 // -- Request @@ -111,48 +80,6 @@ // -- Response // -- -- none response -// System info update -#define CMD_SYS_INFO 0x33 -#define SYS_INFO_OFFSET 2 -// -- Request -// -- -- 54 byte system info -// -- Response -// -- -- none response - -// Data Send Test Command -#define CMD_FLJ_SEND 0xE4 -#define FLJ_DATA_OFFSET 2 -// -- Request -// -- -- 78 byte payload -// -- Response -// -- -- none response - -// Data Send Test Command -#define CMD_LJ_SEND 0xF4 -#define LJ_DATA_OFFSET 2 -// -- Request -// -- -- 156 byte payload -// -- Response -// -- -- none response - -// FLJ Poll -#define CMD_FLJ_POLL 0xE5 -// -- Request -#define WD_FLJ_POLL 0x02 -#define FLJ_POLL_CODE 0x77 -// -- Response -#define FLJ_POLL_RESP_LEN 170 -// -- -- received 170 byte payload - -// LJ Poll -#define CMD_LJ_POLL 0xF5 -// -- Request -#define WD_LJ_POLL 0x02 -#define LJ_POLL_CODE 0x77 -// -- Response -#define LJ_POLL_RESP_LEN 68 -// -- -- received 68 byte payload - // Remote Test #define RM_TEST_RESP_LEN 158 // -- Request @@ -216,6 +143,52 @@ inline bool Mpc_IsRxBusy(MPC *instPtr) return (!instPtr->isRxDone); } +/** + * @brief Generate System Bus SelfTest response. + */ +static int32_t Mpc_GenSelfTestRsp(MPC *instPtr) +{ + ASSERT(instPtr != NULL); + MPC_HW_FRAME *mpcRsp; + uint8_t *msg; + if (instPtr->isEnable == false) + { + DBG_ERROR("System is not enabled!\n"); + return EIGNORE; + } + mpcRsp = malloc(sizeof(MPC_HW_FRAME)); + if (mpcRsp == NULL) { + DBG_ERROR("Failed to allocate memory for LJ REMOTE TEST Response!\n"); + return ENOMEM; + } + mpcRsp->len = ST_RSP_LEN; + msg = mpcRsp->data + FRAME_PAYLOAD_POFFSET; + + HWSTATE *hwStatsPtr = &(instPtr->hwState); + + msg[WD_CMD] = CMD_SELF_TEST; + msg[WD_PRD] = MY_PRD_ID; + SysMonitor_GetHardwareStatus(hwStatsPtr); + if (linkInstPtr->isEnable == false) + { + msg[WD_ST_RET] = (hwStatsPtr->isSpOk) ? ST_RET_OK : ST_RET_ERROR; + } + else + { + msg[WD_ST_RET] = (hwStatsPtr->isSpOk && hwStatsPtr->isAntOk) ? ST_RET_OK : ST_RET_ERROR; + } + // apply status and omit 2 bytes of overhead. + memcpy(msg + WD_SP_FPGA_VOLT, &(hwStatsPtr->spFpgaVolt), ST_RET_INFO_LEN); + + if (CircQueuePush(instPtr->txQueue, (void *)mpcRsp) == false) + { + free(mpcRsp); + DBG_ERROR("SystemBus::TX Queue overflowed!\n"); + return EQUEUE; + } + return SUCCESS; +} + /** * @brief Apply system configuration */ @@ -224,7 +197,6 @@ static int32_t Mpc_SystemConfig(MPC *instPtr, uint8_t *msg) PHY_INST *phyRef = linkInstPtr->config.phyInstPtr; TMC_INST *tmcRef = linkInstPtr->config.tmcInstPtr; bool reconfig = false; - bool start = false; if (msg[WD_MODE_CMD] == MODE_CMD_HEAD) { @@ -261,19 +233,19 @@ static int32_t Mpc_SystemConfig(MPC *instPtr, uint8_t *msg) { // high power config Phy_AntConfigMode(phyRef, PHY_ANT_MODE_POWER_FULL); - start = true; + instPtr->isEnable = true; } else if(msg[WD_EN_CMD] == EN_CMD_ON_LOW_POWER) { // low power config Phy_AntConfigMode(phyRef, PHY_ANT_MODE_POWER_LOW); - start = true; + instPtr->isEnable = true; } else if(msg[WD_EN_CMD] == EN_CMD_SILENT) { // silence config // TODO: better approach? - start = false; + instPtr->isEnable = false; Linklayer_Halt(linkInstPtr); Phy_AntConfigMode(phyRef, PHY_ANT_MODE_STANDBY); TIME_WORD pullTime = {0, 0}; @@ -288,7 +260,7 @@ static int32_t Mpc_SystemConfig(MPC *instPtr, uint8_t *msg) { Linklayer_Reconfig(linkInstPtr, &linkConfig); } - if (start == true) + if (instPtr->isEnable == true) { Linklayer_Start(linkInstPtr); } @@ -409,7 +381,6 @@ int32_t Mpc_PendRemoteTest(MPC *instPtr) DBG_ERROR("Failed to allocate memory for LJ REMOTE TEST Response!\n"); return ENOMEM; } - mpcRsp = malloc(sizeof(MPC_HW_FRAME)); msg = mpcRsp->data + FRAME_PAYLOAD_POFFSET; mpcRsp->len = RM_TEST_RESP_LEN; if (L2_GetNodeType(linkInstPtr) == L2_NODE_HEAD) @@ -478,6 +449,10 @@ int32_t Mpc_HandleCmd(MPC *instPtr) case CMD_CONFIG: { Status = Mpc_SystemConfig(instPtr, reqMsg); + if (Status == SUCCESS) + { + Status = Mpc_GenSelfTestRsp(instPtr); + } break; } default: