#include #include #include #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; }