59 lines
1.3 KiB
C
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 payload[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(payload, pucRecvBuffer + 4, PAYLOAD_MAX_LEN);
|
|
if(modbus_process(pucRecvBuffer, 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;
|
|
}
|