feat(can): apply filters based on both filter ID and mask ID for standard or extended filters

stable
@rakshita4 2024-11-16 16:37:15 +05:30
parent 37c087aaed
commit 23dee00362
1 changed files with 37 additions and 20 deletions

View File

@ -237,15 +237,15 @@ void vCanFilterSaveVal(uint8_t ucIdx, uint32_t Filter, bool isExtended)
filterCount = ucIdx;
// Store filter value
filterValues[filterCount] = Filter;
isExtendedID[maskCount++] = isExtended;
if(isExtended)
{
extendedFilter++;
}
else
{
standardFilter++;
}
// isExtendedID[filterCount] = isExtended;
// if(isExtended)
// {
// extendedFilter++;
// }
// else
// {
// standardFilter++;
// }
}
@ -254,8 +254,8 @@ void vCanFilterSaveVal(uint8_t ucIdx, uint32_t Filter, bool isExtended)
void vCanFilterReset() {
uint32_t i;
// Disable CAN before reconfiguring filters
xECU_CANDeInit(CANFD0);
DL_MCAN_setOpMode(CANFD0, DL_MCAN_OPERATION_MODE_SW_INIT);
// Reset all standard ID filters
for (i = 0; i < MAX_FILTERS; i++) {
@ -273,16 +273,35 @@ void vCanFilterReset() {
DL_MCAN_addExtMsgIDFilter(CANFD0, i, &extFilterElement);
}
// Re-enable CAN after resetting filters
xECU_CANInit(CANFD0,g_u16CanSpeed);
/* Set Extended ID Mask. */
DL_MCAN_setExtIDAndMask(CANFD0, (0x1FFFFFFFU));
/* Take MCAN out of the SW initialization mode */
DL_MCAN_setOpMode(CANFD0, DL_MCAN_OPERATION_MODE_NORMAL);
}
// Function to configure CAN filters
void vCanConfigFilter() {
xECU_CanReInit(CANFD0,g_u16CanSpeed);
DL_MCAN_setOpMode(CANFD0, DL_MCAN_OPERATION_MODE_SW_INIT);
for (int i = 0; i <= maskCount; i++)
{
if((filterValues[i] > 0x7FF) || (maskValues[i] > 0x7FF))
{
isExtendedID[i] = 1;
extendedFilter++;
}
else
{
isExtendedID[i] = 0;
standardFilter++;
}
}
gMCAN0MsgRAMConfigParamsFiltered.lse = extendedFilter; //0; // Set dynamically based on actual filters
gMCAN0MsgRAMConfigParamsFiltered.lss = standardFilter; //1; // Set dynamically based on actual filters
DL_MCAN_config(CANFD0, (DL_MCAN_ConfigParams*) &gMCAN0ConfigParamsFiltered);
@ -290,9 +309,8 @@ void vCanConfigFilter() {
uint8_t extendedFilterNumber = 0;
uint8_t stadardFilterNumber = 0;
for (int i = 0; i < maskCount; i++) {
// filterValues[0] = 0x3ff;
// maskValues[0] = 0x400;
for (int i = 0; i <= maskCount; i++) {
if (isExtendedID[i]) {
// Extended ID filter
DL_MCAN_ExtMsgIDFilterElement extFilterElement;
@ -300,7 +318,7 @@ void vCanConfigFilter() {
extFilterElement.efid2 = maskValues[i];
extFilterElement.efec = 001;
extFilterElement.eft = 10;
DL_MCAN_addExtMsgIDFilter(CANFD0, i, (DL_MCAN_StdMsgIDFilterElement *) &extFilterElement);
DL_MCAN_addExtMsgIDFilter(CANFD0, extendedFilterNumber, (DL_MCAN_StdMsgIDFilterElement *) &extFilterElement);
extendedFilterNumber++;
}
@ -309,8 +327,6 @@ void vCanConfigFilter() {
DL_MCAN_StdMsgIDFilterElement stdFilterElement;
stdFilterElement.sfid1 = filterValues[i];
stdFilterElement.sfid2 = maskValues[i];
// stdFilterElement.sfid1 = 0xc8;
// stdFilterElement.sfid2 = 0x7fe;
stdFilterElement.sfec = 001;
stdFilterElement.sft = 10;
DL_MCAN_addStdMsgIDFilter(CANFD0, stadardFilterNumber,(DL_MCAN_StdMsgIDFilterElement *) &stdFilterElement);
@ -326,7 +342,7 @@ void vCanConfigFilter() {
// Reset counters after applying filters
maskCount = 0;
maskCount = 1;
filterCount = 0;
extendedFilterNumber = 0;
stadardFilterNumber = 0;
@ -371,6 +387,7 @@ void vRTE_UARTDataProcess(void)
vCanFilterSaveVal((pucBuf[PKT_HEADER+1] - 1), filterId, isExtended);
if( pucBuf[PKT_HEADER+2] )//All filter received. Trigger Filter Settings
{
vCanFilterReset();
vCanConfigFilter();
}
else