fix: 修复数据读取逻辑,增加入队拷贝拷贝

This commit is contained in:
2025-06-23 16:04:01 +08:00
parent 58a909673a
commit 5679de641c
5 changed files with 73 additions and 33 deletions
+1 -1
View File
@@ -220,7 +220,7 @@ int32_t SetupInterruptSystem(struct irq_ctrl_desc *descPtr)
return Status; return Status;
} }
/* Initialize linklayer layer interrupt. */ /* Initialize linklayer layer interrupt. */
Status = irq_trigger_level_set(descPtr, PERIODIC_5MS_INTR_ID, IRQ_EDGE_RISING); Status = irq_trigger_level_set(descPtr, PERIODIC_5MS_INTR_ID, IRQ_EDGE_RISING);
if (Status != SUCCESS) if (Status != SUCCESS)
{ {
+58 -21
View File
@@ -196,16 +196,29 @@ static int32_t Service_Packing128K(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t
message->srcSpeedY = instPtr->sysInfo.vY; message->srcSpeedY = instPtr->sysInfo.vY;
message->srcSpeedZ = instPtr->sysInfo.vZ; message->srcSpeedZ = instPtr->sysInfo.vZ;
// TODO: Packing extra payload // Pack extra payload
if (type == L2_FRAME_SVC) if (type == L2_FRAME_SVC)
{ {
SYSMON_SVC_PAYLOAD sendPayload; // Packing extra payload
SYSMON_SVC_PAYLOAD *sendPayload;
SysMonitor_GetSendPayload(&sendPayload); SysMonitor_GetSendPayload(&sendPayload);
message->common.dst = sendPayload.nodeId; if(sendPayload == NULL)
message->dataId = sendPayload.dataId; {
message->dataLen = sendPayload.dataLen; message->common.dst = L2_NONE_ID;
memset(message->data, 0xAA, maxDataLen); message->dataId = DATA_ID_NONE;
memcpy(message->data, sendPayload.data, sendPayload.dataLen); message->dataLen = 0;
memset(message->data, 0xAA, maxDataLen);
}
else
{
message->common.dst = sendPayload->nodeId;
message->dataId = sendPayload->dataId;
message->dataLen = sendPayload->dataLen;
memset(message->data, 0xAA, maxDataLen);
memcpy(message->data, sendPayload->data, (sendPayload->dataLen > maxDataLen) ?
maxDataLen : sendPayload->dataLen);
free(sendPayload);
}
} }
else else
{ {
@@ -264,14 +277,26 @@ static int32_t Service_Packing512K(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t
message->srcSpeedY = instPtr->sysInfo.vY; message->srcSpeedY = instPtr->sysInfo.vY;
message->srcSpeedZ = instPtr->sysInfo.vZ; message->srcSpeedZ = instPtr->sysInfo.vZ;
// TODO: Packing extra payload // Pack extra payload
SYSMON_SVC_PAYLOAD sendPayload; SYSMON_SVC_PAYLOAD *sendPayload;
SysMonitor_GetSendPayload(&sendPayload); SysMonitor_GetSendPayload(&sendPayload);
message->common.dst = sendPayload.nodeId; if(sendPayload == NULL)
message->dataId = sendPayload.dataId; {
message->dataLen = sendPayload.dataLen; message->common.dst = L2_NONE_ID;
memset(message->data, 0xAA, maxDataLen); message->dataId = DATA_ID_NONE;
memcpy(message->data, sendPayload.data, sendPayload.dataLen); message->dataLen = 0;
memset(message->data, 0xAA, maxDataLen);
}
else
{
message->common.dst = sendPayload->nodeId;
message->dataId = sendPayload->dataId;
message->dataLen = sendPayload->dataLen;
memset(message->data, 0xAA, maxDataLen);
memcpy(message->data, sendPayload->data, (sendPayload->dataLen > maxDataLen) ?
maxDataLen : sendPayload->dataLen);
free(sendPayload);
}
// Append CRC // Append CRC
uint32_t crcVal; uint32_t crcVal;
@@ -322,14 +347,26 @@ static int32_t Service_Packing2M(L2_INST *instPtr, L2_FRAME_TYPE type, uint8_t d
message->srcSpeedY = instPtr->sysInfo.vY; message->srcSpeedY = instPtr->sysInfo.vY;
message->srcSpeedZ = instPtr->sysInfo.vZ; message->srcSpeedZ = instPtr->sysInfo.vZ;
// TODO: Packing extra payload // Packing extra payload
SYSMON_SVC_PAYLOAD sendPayload; SYSMON_SVC_PAYLOAD *sendPayload;
SysMonitor_GetSendPayload(&sendPayload); SysMonitor_GetSendPayload(&sendPayload);
message->common.dst = sendPayload.nodeId; if(sendPayload == NULL)
message->dataId = sendPayload.dataId; {
message->dataLen = sendPayload.dataLen; message->common.dst = L2_NONE_ID;
memset(message->data, 0xAA, maxDataLen); message->dataId = DATA_ID_NONE;
memcpy(message->data, sendPayload.data, sendPayload.dataLen); message->dataLen = 0;
memset(message->data, 0xAA, maxDataLen);
}
else
{
message->common.dst = sendPayload->nodeId;
message->dataId = sendPayload->dataId;
message->dataLen = sendPayload->dataLen;
memset(message->data, 0xAA, maxDataLen);
memcpy(message->data, sendPayload->data, (sendPayload->dataLen > maxDataLen) ?
maxDataLen : sendPayload->dataLen);
free(sendPayload);
}
// Append CRC // Append CRC
uint32_t crcVal; uint32_t crcVal;
+1 -1
View File
@@ -462,7 +462,7 @@ int32_t Phy_SetAntIndex(PHY_INST *instPtr, PHY_ANT_INDEX antIndex)
{ {
ASSERT(instPtr != NULL); ASSERT(instPtr != NULL);
if (antIndex < 0 || antIndex >= L1_ANT_NUM) if (antIndex < PHY_ANT_INDEX_NONE || antIndex > PHY_ANT_INDEX_3)
{ {
DBG_ERROR("Antenna index out of range: %" PRIu8 ". \n", antIndex); DBG_ERROR("Antenna index out of range: %" PRIu8 ". \n", antIndex);
return EPARAM; return EPARAM;
+12 -9
View File
@@ -195,9 +195,17 @@ int32_t SysMonitor_UpdateSendPayload(SYSMON_SVC_PAYLOAD *payload)
} }
// push message into send queue // push message into send queue
if (CircQueuePush(sysMonitorInst->sendQueue, (void *)payload) == false) SYSMON_SVC_PAYLOAD *payloadCopy = malloc(sizeof(SYSMON_SVC_PAYLOAD));
if (payloadCopy == NULL)
{
DBG_ERROR("Allocate memory for send payload failed.\n");
return ENOMEM;
}
memcpy(payloadCopy, payload, sizeof(SYSMON_SVC_PAYLOAD));
if (CircQueuePush(sysMonitorInst->sendQueue, (void *)payloadCopy) == false)
{ {
DBG_WARNING("SystemMonitor::SEND Queue overflowed!\n"); DBG_WARNING("SystemMonitor::SEND Queue overflowed!\n");
free(payloadCopy);
return EQUEUE; return EQUEUE;
} }
@@ -209,19 +217,14 @@ int32_t SysMonitor_UpdateSendPayload(SYSMON_SVC_PAYLOAD *payload)
* *
* @param payload * @param payload
*/ */
void SysMonitor_GetSendPayload(SYSMON_SVC_PAYLOAD *payload) void SysMonitor_GetSendPayload(SYSMON_SVC_PAYLOAD **payload)
{ {
ASSERT(sysMonitorInst != NULL); ASSERT(sysMonitorInst != NULL);
ASSERT(payload != NULL); ASSERT(payload != NULL);
if (CircQueuePop(sysMonitorInst->sendQueue, (void *)payload) == false) if (CircQueuePop(sysMonitorInst->sendQueue, (void **)payload) == false)
{ {
payload->dataId = DATA_ID_NONE; *payload = NULL;
payload->nodeId = 0;
payload->dataLen = 0;
// set payload to be 0xAA to balanced average signal power
memset(payload->data, 0xAA, PAYLOAD_LEN_MAX);
DBG_WARNING("SystemMonitor::Nothing to be sent.\n");
} }
} }
+1 -1
View File
@@ -243,7 +243,7 @@ void SysMonitor_UpdateSysinfo(const SYSINFO *info);
void SysMonitor_GetSysinfo(SYSINFO *info); void SysMonitor_GetSysinfo(SYSINFO *info);
int32_t SysMonitor_UpdateSendPayload(SYSMON_SVC_PAYLOAD *payload); int32_t SysMonitor_UpdateSendPayload(SYSMON_SVC_PAYLOAD *payload);
void SysMonitor_GetSendPayload(SYSMON_SVC_PAYLOAD *payload); void SysMonitor_GetSendPayload(SYSMON_SVC_PAYLOAD **payload);
int32_t SysMonitor_GenRecvRsp(SYSMON_SVC_PAYLOAD *payload); int32_t SysMonitor_GenRecvRsp(SYSMON_SVC_PAYLOAD *payload);
void SysMonitor_UpdateLinklayerLog(const LINKLOG *log); void SysMonitor_UpdateLinklayerLog(const LINKLOG *log);