diff --git a/Core/Source/ivec_mcal_uart.c b/Core/Source/ivec_mcal_uart.c index f73cec6..a26305e 100644 --- a/Core/Source/ivec_mcal_uart.c +++ b/Core/Source/ivec_mcal_uart.c @@ -540,15 +540,16 @@ static IVEC_McalCommonErr_e __prv_McalUartInitInstance(IVEC_McalUartHandle_s* px { DL_UART_Main_reset(UART2); DL_UART_Main_enablePower(UART2); - DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM36, IOMUX_PINCM36_PF_UART3_TX); - DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM35, IOMUX_PINCM35_PF_UART3_RX); + DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM32, IOMUX_PINCM32_PF_UART2_TX); + DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM33, IOMUX_PINCM33_PF_UART2_RX); + } else if (pxUartHandle->eUartPortNumber == IVEC_MCAL_UART_PORT_4) { DL_UART_Main_reset(UART3); DL_UART_Main_enablePower(UART3); - DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM32, IOMUX_PINCM32_PF_UART2_TX); - DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM33, IOMUX_PINCM33_PF_UART2_RX); + DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM36, IOMUX_PINCM36_PF_UART3_TX); + DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM35, IOMUX_PINCM35_PF_UART3_RX); } UART_Regs* pxUartInstance = __prv_McalGetUartInstance(pxUartHandle->eUartPortNumber); diff --git a/ivec_RTE/src/ivec_rte.c b/ivec_RTE/src/ivec_rte.c index 7de9166..566a8bb 100644 --- a/ivec_RTE/src/ivec_rte.c +++ b/ivec_RTE/src/ivec_rte.c @@ -147,12 +147,12 @@ void vRTE_MatlabInit(void) } -void vRTE_InitUartCcEcho(void) +void vRTE_InitUartCc(void) { __gprv_UartCcHandle.u8Qbuffer = __gprv_u8CcUartDataBuffer; __gprv_UartCcHandle.u16QbufSize = eteCAN_UART_Cc_BUFFER_MAX_SIZE_u32; __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); } @@ -240,7 +240,7 @@ void vRTE_AppInit(void) { #if rteUART_PIN_SELECTION_u8 == 1 vRTE_MatlabInit(); - vRTE_InitUartCcEcho(); + vRTE_InitUartCc(); #endif vRTE_InitUartCanEcho(); @@ -478,7 +478,19 @@ void vCcUartRxToCanTx(IVEC_EcuCommonCanFrame_s* pxCanMsg) { if(pxCanMsg->u32CanId != 0x00) { - xECU_WriteDataOverCAN(&g_xCanHandle, &pxCanMsg->pucCanData[0], pxCanMsg->u32CanId, pxCanMsg->ucCanDlc, 0); + if(pxCanMsg->u32CanId == 0xabcdef) + { + pxCanMsg->u32CanId = g_u32CanId; + 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) @@ -689,7 +701,18 @@ void vRTE_ProcessCanData(void) int l_i32RetSize = 0; uint8_t l_u8UartBuffer[30] = { 0 }; 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); +// 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); // if(l_i32Status != 0) // { diff --git a/ivec_cmplx_vframe/inc/ivec_cmplx_vFrame.h b/ivec_cmplx_vframe/inc/ivec_cmplx_vFrame.h index 6bcf4d4..4158700 100644 --- a/ivec_cmplx_vframe/inc/ivec_cmplx_vFrame.h +++ b/ivec_cmplx_vframe/inc/ivec_cmplx_vFrame.h @@ -5,6 +5,15 @@ #include "ivec_bsw_common.h" #include "stdint.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); 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); diff --git a/ivec_cmplx_vframe/src/ivec_cmplx_vFrame.c b/ivec_cmplx_vframe/src/ivec_cmplx_vFrame.c index 87d5bd7..f841d3c 100644 --- a/ivec_cmplx_vframe/src/ivec_cmplx_vFrame.c +++ b/ivec_cmplx_vframe/src/ivec_cmplx_vFrame.c @@ -1,21 +1,13 @@ #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" -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; /*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_b += mck_a; } @@ -25,10 +17,9 @@ static void __prv_CalculateChecksum(uint8_t* pkt, int len, uint8_t* ck) 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; uint16_t u16Dlc = i32InLen; pu8FrameBuffer[0] = IVEC_VFRAME_SYNC_CHAR_0; @@ -46,49 +37,57 @@ uint16_t u16CMPLX_vFrameEncode(uint32_t u32Id, const uint8_t* pInData, int i32In } memcpy(&pu8FrameBuffer[IVEC_VFRAME_DLC], &u16Dlc, IVEC_VFRAME_DLC_LEN); __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 || i32InLen0) + if (pu8FrameData && pi32FrameDlc && i32FrameBufLen > 0) { - memcpy(pi32FrameDlc,&pInData[IVEC_VFRAME_DLC], IVEC_VFRAME_DLC_LEN); - if(*pi32FrameDlc<=i32FrameBufLen) + memcpy(pi32FrameDlc, &pInData[IVEC_VFRAME_DLC], IVEC_VFRAME_DLC_LEN); + if (*pi32FrameDlc <= i32FrameBufLen) memcpy(pu8FrameData, &pInData[IVEC_VFRAME_DATA_START], *pi32FrameDlc); } 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); - uint8_t* l_pcFrameStartPt = NULL; - uint8_t* l_pcFrameEndPt = NULL; - int l_i32Ret=0; + uint8_t *l_pcFrameStartPt = NULL; + uint8_t *l_pcFrameEndPt = NULL; + int l_i32Ret = 0; if (pcBuffer == NULL || i32Len <= 0) goto exit; int i32Ijk = 0; 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]; + // i32Ijk++; break; } } + if (l_pcFrameStartPt == NULL) + goto exit; int i32RemainingLen = i32Len - i32Ijk; 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)) goto exit; uint16_t u16Dlc = 0; - memcpy(&u16Dlc,l_pcFrameStartPt + IVEC_VFRAME_DLC,IVEC_VFRAME_DLC_LEN); - IVEC_BSW_LOG(LOG_STRING, "DLC Found: %d", ucDlc); + memcpy(&u16Dlc, l_pcFrameStartPt + IVEC_VFRAME_DLC, IVEC_VFRAME_DLC_LEN); + IVEC_BSW_LOG(LOG_STRING, "DLC Found: %d", u16Dlc); if (i32RemainingLen < (u16Dlc + IVEC_VFRAME_MIN_LEN)) goto exit; 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_pcFrameEndPt = NULL; - l_i32Ret=2;//cksum failure + l_i32Ret = 2; // cksum failure exit: *pcFrameStartPt = l_pcFrameStartPt; *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) return 1; return l_i32Ret;