brisonus_qc_dsp_com/br_com_service.c
JingweiCui f8a6647b59 [update] 修复了br_com_process中的错误
使用了错误的buffer,导致无法正确处理接收到的消息数据。
2025-01-09 18:54:01 +08:00

59 lines
1.3 KiB
C

#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "br_com_service.h"
#include "br_modbus.h"
uint8_t RecvContent[PAYLOAD_MAX_LEN] = {0};
BrComStatus_t br_com_process(uint8_t * pucRecvBuffer, uint16_t usRecvBufferLen, uint8_t * pucSendBuffer, uint16_t * pusSendBufferLen)
{
BrComStatus_t status = BRCOMSTATUS_ERR;
uint8_t header[2] = {0};
uint16_t dataLen = 0;
uint8_t recvDataLen, resDataLen = 0;
uint8_t modbusResBuffer[256] = {0};
/* 提取HEADER */
header[0] = pucRecvBuffer[0];
header[1] = pucRecvBuffer[1];
if( header[0] != 0xAA && header[1] != 0xAA)
{
status = BRCOMSTATUS_HEADR_ERR;
return status;
}
dataLen = ((uint16_t)pucRecvBuffer[2] << 8) + pucRecvBuffer[3];
recvDataLen = dataLen & 0x00FF;
/* 提取长度 */
if( dataLen > 255 )
{
status = BRCOMSTATUS_LEN_ERR;
return status;
}
else
{
/* 提取内容 */
memcpy(RecvContent, pucRecvBuffer + 4, PAYLOAD_MAX_LEN-4);
if(modbus_process(RecvContent, recvDataLen, modbusResBuffer, &resDataLen) == MODBUS_STATUS_OK)
{
pucSendBuffer[0] = 0xFF;
pucSendBuffer[1] = 0xFF;
pucSendBuffer[3] = 0x00;
pucSendBuffer[4] = resDataLen;
memcpy(pucSendBuffer + 4, modbusResBuffer, resDataLen);
/* modbus协议处理 */
status = BRCOMSTATUS_OK;
return status;
}
}
return status;
}