feat: Add UART3 functionality and parse specific IDs

stable
Rakshita 2025-03-11 17:52:24 +05:30
parent 2e4b44259a
commit 9d4bd991d5
4 changed files with 71 additions and 39 deletions

View File

@ -540,15 +540,16 @@ static IVEC_McalCommonErr_e __prv_McalUartInitInstance(IVEC_McalUartHandle_s* px
{ {
DL_UART_Main_reset(UART2); DL_UART_Main_reset(UART2);
DL_UART_Main_enablePower(UART2); DL_UART_Main_enablePower(UART2);
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM36, IOMUX_PINCM36_PF_UART3_TX); DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM32, IOMUX_PINCM32_PF_UART2_TX);
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM35, IOMUX_PINCM35_PF_UART3_RX); DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM33, IOMUX_PINCM33_PF_UART2_RX);
} }
else if (pxUartHandle->eUartPortNumber == IVEC_MCAL_UART_PORT_4) else if (pxUartHandle->eUartPortNumber == IVEC_MCAL_UART_PORT_4)
{ {
DL_UART_Main_reset(UART3); DL_UART_Main_reset(UART3);
DL_UART_Main_enablePower(UART3); DL_UART_Main_enablePower(UART3);
DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM32, IOMUX_PINCM32_PF_UART2_TX); DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM36, IOMUX_PINCM36_PF_UART3_TX);
DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM33, IOMUX_PINCM33_PF_UART2_RX); DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM35, IOMUX_PINCM35_PF_UART3_RX);
} }
UART_Regs* pxUartInstance = __prv_McalGetUartInstance(pxUartHandle->eUartPortNumber); UART_Regs* pxUartInstance = __prv_McalGetUartInstance(pxUartHandle->eUartPortNumber);

View File

@ -147,12 +147,12 @@ void vRTE_MatlabInit(void)
} }
void vRTE_InitUartCcEcho(void) void vRTE_InitUartCc(void)
{ {
__gprv_UartCcHandle.u8Qbuffer = __gprv_u8CcUartDataBuffer; __gprv_UartCcHandle.u8Qbuffer = __gprv_u8CcUartDataBuffer;
__gprv_UartCcHandle.u16QbufSize = eteCAN_UART_Cc_BUFFER_MAX_SIZE_u32; __gprv_UartCcHandle.u16QbufSize = eteCAN_UART_Cc_BUFFER_MAX_SIZE_u32;
__gprv_UartCcHandle.eUartPortNumber = IVEC_ECU_UART_PORT4; __gprv_UartCcHandle.eUartPortNumber = IVEC_ECU_UART_PORT4;
__gprv_UartCcHandle.u32BaudRate = IVEC_ECU_UART_BAUD_1000000; __gprv_UartCcHandle.u32BaudRate = IVEC_ECU_UART_BAUD_230400;
xECU_UartInit(&__gprv_UartCcHandle); xECU_UartInit(&__gprv_UartCcHandle);
} }
@ -240,7 +240,7 @@ void vRTE_AppInit(void)
{ {
#if rteUART_PIN_SELECTION_u8 == 1 #if rteUART_PIN_SELECTION_u8 == 1
vRTE_MatlabInit(); vRTE_MatlabInit();
vRTE_InitUartCcEcho(); vRTE_InitUartCc();
#endif #endif
vRTE_InitUartCanEcho(); vRTE_InitUartCanEcho();
@ -478,8 +478,20 @@ void vCcUartRxToCanTx(IVEC_EcuCommonCanFrame_s* pxCanMsg)
{ {
if(pxCanMsg->u32CanId != 0x00) if(pxCanMsg->u32CanId != 0x00)
{ {
if(pxCanMsg->u32CanId == 0xabcdef)
{
pxCanMsg->u32CanId = g_u32CanId;
xECU_WriteDataOverCAN(&g_xCanHandle, &pxCanMsg->pucCanData[0], pxCanMsg->u32CanId, pxCanMsg->ucCanDlc, 0); xECU_WriteDataOverCAN(&g_xCanHandle, &pxCanMsg->pucCanData[0], pxCanMsg->u32CanId, pxCanMsg->ucCanDlc, 0);
} }
else if (pxCanMsg->u32CanId == 0x1cea6969)
{
iECU_UartInitiateTransmit(&g_xUartHandle, (uint32_t)pxCanMsg->u32CanId,(uint8_t*)&pxCanMsg->pucCanData[0],(uint8_t)pxCanMsg->ucCanDlc);
}
else
{
xECU_WriteDataOverCAN(&g_xCanHandle, &pxCanMsg->pucCanData[0], pxCanMsg->u32CanId, pxCanMsg->ucCanDlc, 0);
}
}
} }
void vRTE_CcUartRxProcess(void) void vRTE_CcUartRxProcess(void)
{ {
@ -689,7 +701,18 @@ void vRTE_ProcessCanData(void)
int l_i32RetSize = 0; int l_i32RetSize = 0;
uint8_t l_u8UartBuffer[30] = { 0 }; uint8_t l_u8UartBuffer[30] = { 0 };
int l_i32Status = -1; int l_i32Status = -1;
if(l_xCanBuff.u32UlId == g_u32CanId)
{
l_xCanBuff.u32UlId = 0xabcdef;
}
l_i32RetSize = u16CMPLX_vFrameEncode((uint32_t)l_xCanBuff.u32UlId, (uint8_t*)&l_xCanBuff.u8Data[0], (int32_t)l_xCanBuff.u8Length, l_u8UartBuffer, 30); l_i32RetSize = u16CMPLX_vFrameEncode((uint32_t)l_xCanBuff.u32UlId, (uint8_t*)&l_xCanBuff.u8Data[0], (int32_t)l_xCanBuff.u8Length, l_u8UartBuffer, 30);
// if(l_xCanBuff.u32UlId == g_u32CanId)
// {
// l_u8UartBuffer[4] = 0Xab;
// l_u8UartBuffer[5] = 0Xcd;
// l_u8UartBuffer[6] = 0Xef;
// l_u8UartBuffer[7] = 0X00;
// }
l_i32Status = IVEC_ECUUartWrite(&__gprv_UartCcHandle, l_u8UartBuffer, l_i32RetSize); l_i32Status = IVEC_ECUUartWrite(&__gprv_UartCcHandle, l_u8UartBuffer, l_i32RetSize);
// if(l_i32Status != 0) // if(l_i32Status != 0)
// { // {

View File

@ -5,6 +5,15 @@
#include "ivec_bsw_common.h" #include "ivec_bsw_common.h"
#include "stdint.h" #include "stdint.h"
#include "stdio.h" #include "stdio.h"
#define IVEC_VFRAME_MIN_LEN 14
#define IVEC_VFRAME_DLC 2
#define IVEC_VFRAME_DLC_LEN 2
#define IVEC_VFRAME_ID 4
#define IVEC_VFRAME_ID_LEN 4
#define IVEC_VFRAME_DATA_START 12
#define IVEC_VFRAME_SYNC_CHAR_0 0xb5
#define IVEC_VFRAME_SYNC_CHAR_1 0x63
int u16CMPLX_vFrameFind(uint8_t* pcBuffer, int i32Len, uint8_t** pcFrameStartPt, uint8_t** pcFrameEndPt); int u16CMPLX_vFrameFind(uint8_t* pcBuffer, int i32Len, uint8_t** pcFrameStartPt, uint8_t** pcFrameEndPt);
uint16_t u16CMPLX_vFrameDecode( const uint8_t* pInData, int i32InLen, uint8_t* pu8FrameData, int u8FrameBufLen ,int *pi32FrameDlc,uint32_t *pu32Id); uint16_t u16CMPLX_vFrameDecode( const uint8_t* pInData, int i32InLen, uint8_t* pu8FrameData, int u8FrameBufLen ,int *pi32FrameDlc,uint32_t *pu32Id);
uint16_t u16CMPLX_vFrameEncode(uint32_t u32Id, const uint8_t* pInData, int i32InLen, uint8_t* pu8FrameBuffer, int pu8FrameBufferLen); uint16_t u16CMPLX_vFrameEncode(uint32_t u32Id, const uint8_t* pInData, int i32InLen, uint8_t* pu8FrameBuffer, int pu8FrameBufferLen);

View File

@ -1,21 +1,13 @@
#include "ivec_cmplx_vFrame.h" #include "ivec_cmplx_vFrame.h"
#define IVEC_VFRAME_MIN_LEN 14
#define IVEC_VFRAME_DLC 2
#define IVEC_VFRAME_DLC_LEN 2
#define IVEC_VFRAME_ID 4
#define IVEC_VFRAME_ID_LEN 4
#define IVEC_VFRAME_DATA_START 12
#define IVEC_VFRAME_SYNC_CHAR_0 0xb5
#define IVEC_VFRAME_SYNC_CHAR_1 0x63
#define LOG_STRING "ivec-cmplx-vframe" #define LOG_STRING "ivec-cmplx-vframe"
static void __prv_CalculateChecksum(uint8_t* pkt, int len, uint8_t* ck) static void __prv_CalculateChecksum(uint8_t *pkt, int len, uint8_t *ck)
{ {
uint8_t mck_a = 0, mck_b = 0; uint8_t mck_a = 0, mck_b = 0;
/*Incremented to ignore Sync data*/ /*Incremented to ignore Sync data*/
for (int i = 2; i < len - 2; i++) { for (int i = 2; i < len - 2; i++)
{
mck_a += pkt[i]; mck_a += pkt[i];
mck_b += mck_a; mck_b += mck_a;
} }
@ -25,10 +17,9 @@ static void __prv_CalculateChecksum(uint8_t* pkt, int len, uint8_t* ck)
ck[1] = mck_b; ck[1] = mck_b;
} }
uint16_t u16CMPLX_vFrameEncode(uint32_t u32Id, const uint8_t *pInData, int i32InLen, uint8_t *pu8FrameBuffer, int pu8FrameBufferLen)
uint16_t u16CMPLX_vFrameEncode(uint32_t u32Id, const uint8_t* pInData, int i32InLen, uint8_t* pu8FrameBuffer, int pu8FrameBufferLen)
{ {
if (i32InLen > (pu8FrameBufferLen- IVEC_VFRAME_MIN_LEN) || pu8FrameBuffer==NULL) if (i32InLen > (pu8FrameBufferLen - IVEC_VFRAME_MIN_LEN) || pu8FrameBuffer == NULL)
return 0; return 0;
uint16_t u16Dlc = i32InLen; uint16_t u16Dlc = i32InLen;
pu8FrameBuffer[0] = IVEC_VFRAME_SYNC_CHAR_0; pu8FrameBuffer[0] = IVEC_VFRAME_SYNC_CHAR_0;
@ -48,47 +39,55 @@ uint16_t u16CMPLX_vFrameEncode(uint32_t u32Id, const uint8_t* pInData, int i32In
__prv_CalculateChecksum(pu8FrameBuffer, u16Dlc + IVEC_VFRAME_MIN_LEN, &pu8FrameBuffer[IVEC_VFRAME_MIN_LEN + u16Dlc - 2]); __prv_CalculateChecksum(pu8FrameBuffer, u16Dlc + IVEC_VFRAME_MIN_LEN, &pu8FrameBuffer[IVEC_VFRAME_MIN_LEN + u16Dlc - 2]);
return u16Dlc + IVEC_VFRAME_MIN_LEN; return u16Dlc + IVEC_VFRAME_MIN_LEN;
} }
uint16_t u16CMPLX_vFrameDecode( const uint8_t* pInData, int i32InLen, uint8_t* pu8FrameData, int i32FrameBufLen ,int *pi32FrameDlc,uint32_t *pu32Id) uint16_t u16CMPLX_vFrameDecode(const uint8_t *pInData, int i32InLen, uint8_t *pu8FrameData, int i32FrameBufLen, int *pi32FrameDlc, uint32_t *pu32Id)
{ {
if (pInData==NULL || i32InLen<IVEC_VFRAME_MIN_LEN ) if (pInData == NULL || i32InLen < IVEC_VFRAME_MIN_LEN)
return 0; return 0;
if(pu32Id) if (pu32Id)
memcpy(pu32Id,&pInData[IVEC_VFRAME_ID], IVEC_VFRAME_ID_LEN); memcpy(pu32Id, &pInData[IVEC_VFRAME_ID], IVEC_VFRAME_ID_LEN);
if (pu8FrameData && pi32FrameDlc && i32FrameBufLen>0) if (pu8FrameData && pi32FrameDlc && i32FrameBufLen > 0)
{ {
memcpy(pi32FrameDlc,&pInData[IVEC_VFRAME_DLC], IVEC_VFRAME_DLC_LEN); memcpy(pi32FrameDlc, &pInData[IVEC_VFRAME_DLC], IVEC_VFRAME_DLC_LEN);
if(*pi32FrameDlc<=i32FrameBufLen) if (*pi32FrameDlc <= i32FrameBufLen)
memcpy(pu8FrameData, &pInData[IVEC_VFRAME_DATA_START], *pi32FrameDlc); memcpy(pu8FrameData, &pInData[IVEC_VFRAME_DATA_START], *pi32FrameDlc);
} }
return 1; return 1;
} }
int u16CMPLX_vFrameFind(uint8_t* pcBuffer, int i32Len, uint8_t** pcFrameStartPt, uint8_t** pcFrameEndPt) int u16CMPLX_vFrameFind(uint8_t *pcBuffer, int i32Len, uint8_t **pcFrameStartPt, uint8_t **pcFrameEndPt)
{ {
IVEC_BSW_LOG(LOG_STRING, "Scanning Frame : 0x%x-%d", pcBuffer, i32Len); IVEC_BSW_LOG(LOG_STRING, "Scanning Frame : 0x%x-%d", pcBuffer, i32Len);
uint8_t* l_pcFrameStartPt = NULL; uint8_t *l_pcFrameStartPt = NULL;
uint8_t* l_pcFrameEndPt = NULL; uint8_t *l_pcFrameEndPt = NULL;
int l_i32Ret=0; int l_i32Ret = 0;
if (pcBuffer == NULL || i32Len <= 0) if (pcBuffer == NULL || i32Len <= 0)
goto exit; goto exit;
int i32Ijk = 0; int i32Ijk = 0;
for (; i32Ijk < i32Len; i32Ijk++) for (; i32Ijk < i32Len; i32Ijk++)
{ {
if (pcBuffer[i32Ijk] == IVEC_VFRAME_SYNC_CHAR_0 && (i32Ijk <= (i32Len - 2)) && (pcBuffer[i32Ijk + 1] == IVEC_VFRAME_SYNC_CHAR_1)) if (pcBuffer[i32Ijk] == IVEC_VFRAME_SYNC_CHAR_0)
{ {
l_pcFrameStartPt = &pcBuffer[i32Ijk]; l_pcFrameStartPt = &pcBuffer[i32Ijk];
// i32Ijk++;
break; break;
} }
} }
if (l_pcFrameStartPt == NULL)
goto exit;
int i32RemainingLen = i32Len - i32Ijk; int i32RemainingLen = i32Len - i32Ijk;
IVEC_BSW_LOG(LOG_STRING, "Remaining len: %d", i32RemainingLen); IVEC_BSW_LOG(LOG_STRING, "Remaining len: %d", i32RemainingLen);
if ((i32RemainingLen > 1) && (pcBuffer[i32Ijk+1] != IVEC_VFRAME_SYNC_CHAR_1))
{
l_pcFrameStartPt = NULL;
}
if (l_pcFrameStartPt == NULL || (i32RemainingLen < IVEC_VFRAME_MIN_LEN)) if (l_pcFrameStartPt == NULL || (i32RemainingLen < IVEC_VFRAME_MIN_LEN))
goto exit; goto exit;
uint16_t u16Dlc = 0; uint16_t u16Dlc = 0;
memcpy(&u16Dlc,l_pcFrameStartPt + IVEC_VFRAME_DLC,IVEC_VFRAME_DLC_LEN); memcpy(&u16Dlc, l_pcFrameStartPt + IVEC_VFRAME_DLC, IVEC_VFRAME_DLC_LEN);
IVEC_BSW_LOG(LOG_STRING, "DLC Found: %d", ucDlc); IVEC_BSW_LOG(LOG_STRING, "DLC Found: %d", u16Dlc);
if (i32RemainingLen < (u16Dlc + IVEC_VFRAME_MIN_LEN)) if (i32RemainingLen < (u16Dlc + IVEC_VFRAME_MIN_LEN))
goto exit; goto exit;
l_pcFrameEndPt = l_pcFrameStartPt + u16Dlc + IVEC_VFRAME_MIN_LEN - 1; l_pcFrameEndPt = l_pcFrameStartPt + u16Dlc + IVEC_VFRAME_MIN_LEN - 1;
@ -101,12 +100,12 @@ int u16CMPLX_vFrameFind(uint8_t* pcBuffer, int i32Len, uint8_t** pcFrameStartPt,
} }
l_pcFrameStartPt = l_pcFrameEndPt; l_pcFrameStartPt = l_pcFrameEndPt;
l_pcFrameEndPt = NULL; l_pcFrameEndPt = NULL;
l_i32Ret=2;//cksum failure l_i32Ret = 2; // cksum failure
exit: exit:
*pcFrameStartPt = l_pcFrameStartPt; *pcFrameStartPt = l_pcFrameStartPt;
*pcFrameEndPt = l_pcFrameEndPt; *pcFrameEndPt = l_pcFrameEndPt;
IVEC_BSW_LOG(LOG_STRING, "Frame :[0x%x-0x%x|0x%x-0x%x]",l_pcFrameStartPt,l_pcFrameEndPt, *pcFrameStartPt, *pcFrameEndPt); IVEC_BSW_LOG(LOG_STRING, "Frame :[0x%x-0x%x|0x%x-0x%x]", l_pcFrameStartPt, l_pcFrameEndPt, *pcFrameStartPt, *pcFrameEndPt);
if (l_pcFrameStartPt && l_pcFrameEndPt) if (l_pcFrameStartPt && l_pcFrameEndPt)
return 1; return 1;
return l_i32Ret; return l_i32Ret;