```
/**
封装基于RTU的PDU数据
@param const unsigned char devAddr 设备地址
@param const unsigned char* pData 数据
@param const nsigned char dataLen 数据长度
@param unsigned char* pOutPduData 封装报的PDU数据
@return pOutPduData中数据的长度
**/
unsigned char packMbRtuPduData(const unsigned char devAddr, const unsigned char* pData, const unsigned char dataLen, unsigned char* pOutPduData)
{
if (!pData || dataLen < 1 || dataLen > PDU_MAX_LEN || !pOutPduData) return 0;
memcpy(pOutPduData, &devAddr, 1);
memcpy(pOutPduData + 1, pData, dataLen);
return dataLen + 1;
}
/**
获取PDU数据的设备地址和功能码
@param const unsigned char* pPduData PDU数据
@param const unsigned char pduDataLen PDU数据长度
@param unsigned char* pOutAddr 输出设备地址
@param unsigned char* pOutFunC 输出功能码
@return 0成功,1失败
**/
unsigned char getDevAddrFunCodeFromResponseData(const unsigned char* pPduData, const unsigned char pduDataLen, unsigned char* pOutAddr, unsigned char* pOutFunC)
{
if (pPduData && pduDataLen > 0 && pOutAddr && pOutFunC){
*pOutAddr = pPduData[0];
*pOutFunC = pPduData[1];
return 0;
}
return 1;
}
```