update MPC

This commit is contained in:
Gatsby Van
2024-03-13 17:01:07 +08:00
parent c3e0c7a66a
commit f5aca7d5cf
+54 -79
View File
@@ -66,37 +66,6 @@
// -- -- Signal processor Bram voltage // -- -- Signal processor Bram voltage
#define WD_SP_FPGA_TEMP 0x08 #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 // Config load
#define CMD_CONFIG 0xE3 #define CMD_CONFIG 0xE3
// -- Request // -- Request
@@ -111,48 +80,6 @@
// -- Response // -- Response
// -- -- none 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 // Remote Test
#define RM_TEST_RESP_LEN 158 #define RM_TEST_RESP_LEN 158
// -- Request // -- Request
@@ -216,6 +143,52 @@ inline bool Mpc_IsRxBusy(MPC *instPtr)
return (!instPtr->isRxDone); 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 * @brief Apply system configuration
*/ */
@@ -224,7 +197,6 @@ static int32_t Mpc_SystemConfig(MPC *instPtr, uint8_t *msg)
PHY_INST *phyRef = linkInstPtr->config.phyInstPtr; PHY_INST *phyRef = linkInstPtr->config.phyInstPtr;
TMC_INST *tmcRef = linkInstPtr->config.tmcInstPtr; TMC_INST *tmcRef = linkInstPtr->config.tmcInstPtr;
bool reconfig = false; bool reconfig = false;
bool start = false;
if (msg[WD_MODE_CMD] == MODE_CMD_HEAD) 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 // high power config
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_POWER_FULL); Phy_AntConfigMode(phyRef, PHY_ANT_MODE_POWER_FULL);
start = true; instPtr->isEnable = true;
} }
else if(msg[WD_EN_CMD] == EN_CMD_ON_LOW_POWER) else if(msg[WD_EN_CMD] == EN_CMD_ON_LOW_POWER)
{ {
// low power config // low power config
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_POWER_LOW); Phy_AntConfigMode(phyRef, PHY_ANT_MODE_POWER_LOW);
start = true; instPtr->isEnable = true;
} }
else if(msg[WD_EN_CMD] == EN_CMD_SILENT) else if(msg[WD_EN_CMD] == EN_CMD_SILENT)
{ {
// silence config // silence config
// TODO: better approach? // TODO: better approach?
start = false; instPtr->isEnable = false;
Linklayer_Halt(linkInstPtr); Linklayer_Halt(linkInstPtr);
Phy_AntConfigMode(phyRef, PHY_ANT_MODE_STANDBY); Phy_AntConfigMode(phyRef, PHY_ANT_MODE_STANDBY);
TIME_WORD pullTime = {0, 0}; TIME_WORD pullTime = {0, 0};
@@ -288,7 +260,7 @@ static int32_t Mpc_SystemConfig(MPC *instPtr, uint8_t *msg)
{ {
Linklayer_Reconfig(linkInstPtr, &linkConfig); Linklayer_Reconfig(linkInstPtr, &linkConfig);
} }
if (start == true) if (instPtr->isEnable == true)
{ {
Linklayer_Start(linkInstPtr); 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"); DBG_ERROR("Failed to allocate memory for LJ REMOTE TEST Response!\n");
return ENOMEM; return ENOMEM;
} }
mpcRsp = malloc(sizeof(MPC_HW_FRAME));
msg = mpcRsp->data + FRAME_PAYLOAD_POFFSET; msg = mpcRsp->data + FRAME_PAYLOAD_POFFSET;
mpcRsp->len = RM_TEST_RESP_LEN; mpcRsp->len = RM_TEST_RESP_LEN;
if (L2_GetNodeType(linkInstPtr) == L2_NODE_HEAD) if (L2_GetNodeType(linkInstPtr) == L2_NODE_HEAD)
@@ -478,6 +449,10 @@ int32_t Mpc_HandleCmd(MPC *instPtr)
case CMD_CONFIG: case CMD_CONFIG:
{ {
Status = Mpc_SystemConfig(instPtr, reqMsg); Status = Mpc_SystemConfig(instPtr, reqMsg);
if (Status == SUCCESS)
{
Status = Mpc_GenSelfTestRsp(instPtr);
}
break; break;
} }
default: default: