diff --git a/RBcore/drv_interface.c b/RBcore/drv_interface.c index 7cb244f..52c2b91 100644 --- a/RBcore/drv_interface.c +++ b/RBcore/drv_interface.c @@ -118,12 +118,12 @@ int RS485_4_Send(char *_pBuffer, uint32_t _iSize) int FDCAN1_Send(char *_pBuffer, uint32_t _iSize) { - return CAN_TX_FIFOQ(g_ptFDCAN1, _pBuffer[0], &_pBuffer[1], _iSize); + return CAN_TX_FIFOQ(g_ptFDCAN1, _pBuffer[0], &_pBuffer[4], _iSize); } int FDCAN2_Send(char *_pBuffer, uint32_t _iSize) { - return CAN_TX_FIFOQ(g_ptFDCAN2, _pBuffer[0], &_pBuffer[1], _iSize); + return CAN_TX_FIFOQ(g_ptFDCAN2, _pBuffer[0], &_pBuffer[4], _iSize); } #ifndef CONFIG_UART_IT_IDLEDMA diff --git a/peripheral/com.c b/peripheral/com.c index 9cbb126..e9ed1ad 100644 --- a/peripheral/com.c +++ b/peripheral/com.c @@ -387,3 +387,34 @@ int rd_ComRead(TComCtrl *_ptComCtrl, char *_pBuffer, uint32_t _iSize) return 0; } +int rd_ComIDWrite(TComCtrl *_ptComCtrl, uint32_t _iFrameID, char *_pBuffer, uint32_t _iSize) +{ + uint32_t totalSize = sizeof(uint32_t) + _iSize; + + char sendBuf[totalSize]; + + sendBuf[0] = (char)( _iFrameID & 0xFF); + sendBuf[1] = (char)((_iFrameID >> 8) & 0xFF); + sendBuf[2] = (char)((_iFrameID >> 16) & 0xFF); + sendBuf[3] = (char)((_iFrameID >> 24) & 0xFF); + + RD_MEMCPY(&sendBuf[sizeof(uint32_t)], _pBuffer, _iSize); + + return rd_ComWrite(_ptComCtrl, sendBuf, _iSize); +} + +int rd_ComIDSend(TComCtrl *_ptComCtrl, uint32_t _iFrameID, char *_pBuffer, uint32_t _iSize) +{ + uint32_t totalSize = sizeof(uint32_t) + _iSize; + + char sendBuf[totalSize]; + + sendBuf[0] = (char)( _iFrameID & 0xFF); + sendBuf[1] = (char)((_iFrameID >> 8) & 0xFF); + sendBuf[2] = (char)((_iFrameID >> 16) & 0xFF); + sendBuf[3] = (char)((_iFrameID >> 24) & 0xFF); + + RD_MEMCPY(&sendBuf[sizeof(uint32_t)], _pBuffer, _iSize); + + return rd_ComSend(_ptComCtrl, sendBuf, _iSize); +} \ No newline at end of file diff --git a/peripheral/include/com.h b/peripheral/include/com.h index 4aa6aa9..bd1b230 100644 --- a/peripheral/include/com.h +++ b/peripheral/include/com.h @@ -119,6 +119,8 @@ void rd_ComSendProc(TComCtrl *_ptComCtrl); void rd_ComRecvProc(TComCtrl *_ptComCtrl, const char *_pBuffer, uint32_t _iSize); int rd_ComWrite(TComCtrl *_ptComCtrl, char *_pBuffer, uint32_t _iSize); int rd_ComRead(TComCtrl *_ptComCtrl, char *_pBuffer, uint32_t _iSize); +int rd_ComIDWrite(TComCtrl *_ptComCtrl, uint32_t _iFrameID, char *_pBuffer, uint32_t _iSize); +int rd_ComIDSend(TComCtrl *_ptComCtrl, uint32_t _iFrameID, char *_pBuffer, uint32_t _iSize); #ifdef __cplusplus #if __cplusplus