feat(can): apply filters based on both filter ID and mask ID for standard or extended filters
parent
37c087aaed
commit
23dee00362
|
|
@ -237,15 +237,15 @@ void vCanFilterSaveVal(uint8_t ucIdx, uint32_t Filter, bool isExtended)
|
||||||
filterCount = ucIdx;
|
filterCount = ucIdx;
|
||||||
// Store filter value
|
// Store filter value
|
||||||
filterValues[filterCount] = Filter;
|
filterValues[filterCount] = Filter;
|
||||||
isExtendedID[maskCount++] = isExtended;
|
// isExtendedID[filterCount] = isExtended;
|
||||||
if(isExtended)
|
// if(isExtended)
|
||||||
{
|
// {
|
||||||
extendedFilter++;
|
// extendedFilter++;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
standardFilter++;
|
// standardFilter++;
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -254,8 +254,8 @@ void vCanFilterSaveVal(uint8_t ucIdx, uint32_t Filter, bool isExtended)
|
||||||
void vCanFilterReset() {
|
void vCanFilterReset() {
|
||||||
uint32_t i;
|
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
|
// Reset all standard ID filters
|
||||||
for (i = 0; i < MAX_FILTERS; i++) {
|
for (i = 0; i < MAX_FILTERS; i++) {
|
||||||
|
|
@ -273,16 +273,35 @@ void vCanFilterReset() {
|
||||||
DL_MCAN_addExtMsgIDFilter(CANFD0, i, &extFilterElement);
|
DL_MCAN_addExtMsgIDFilter(CANFD0, i, &extFilterElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-enable CAN after resetting filters
|
/* Set Extended ID Mask. */
|
||||||
xECU_CANInit(CANFD0,g_u16CanSpeed);
|
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
|
// Function to configure CAN filters
|
||||||
void vCanConfigFilter() {
|
void vCanConfigFilter() {
|
||||||
|
|
||||||
xECU_CanReInit(CANFD0,g_u16CanSpeed);
|
xECU_CanReInit(CANFD0,g_u16CanSpeed);
|
||||||
|
|
||||||
DL_MCAN_setOpMode(CANFD0, DL_MCAN_OPERATION_MODE_SW_INIT);
|
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.lse = extendedFilter; //0; // Set dynamically based on actual filters
|
||||||
gMCAN0MsgRAMConfigParamsFiltered.lss = standardFilter; //1; // Set dynamically based on actual filters
|
gMCAN0MsgRAMConfigParamsFiltered.lss = standardFilter; //1; // Set dynamically based on actual filters
|
||||||
DL_MCAN_config(CANFD0, (DL_MCAN_ConfigParams*) &gMCAN0ConfigParamsFiltered);
|
DL_MCAN_config(CANFD0, (DL_MCAN_ConfigParams*) &gMCAN0ConfigParamsFiltered);
|
||||||
|
|
@ -290,9 +309,8 @@ void vCanConfigFilter() {
|
||||||
|
|
||||||
uint8_t extendedFilterNumber = 0;
|
uint8_t extendedFilterNumber = 0;
|
||||||
uint8_t stadardFilterNumber = 0;
|
uint8_t stadardFilterNumber = 0;
|
||||||
for (int i = 0; i < maskCount; i++) {
|
|
||||||
// filterValues[0] = 0x3ff;
|
for (int i = 0; i <= maskCount; i++) {
|
||||||
// maskValues[0] = 0x400;
|
|
||||||
if (isExtendedID[i]) {
|
if (isExtendedID[i]) {
|
||||||
// Extended ID filter
|
// Extended ID filter
|
||||||
DL_MCAN_ExtMsgIDFilterElement extFilterElement;
|
DL_MCAN_ExtMsgIDFilterElement extFilterElement;
|
||||||
|
|
@ -300,7 +318,7 @@ void vCanConfigFilter() {
|
||||||
extFilterElement.efid2 = maskValues[i];
|
extFilterElement.efid2 = maskValues[i];
|
||||||
extFilterElement.efec = 001;
|
extFilterElement.efec = 001;
|
||||||
extFilterElement.eft = 10;
|
extFilterElement.eft = 10;
|
||||||
DL_MCAN_addExtMsgIDFilter(CANFD0, i, (DL_MCAN_StdMsgIDFilterElement *) &extFilterElement);
|
DL_MCAN_addExtMsgIDFilter(CANFD0, extendedFilterNumber, (DL_MCAN_StdMsgIDFilterElement *) &extFilterElement);
|
||||||
extendedFilterNumber++;
|
extendedFilterNumber++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -309,8 +327,6 @@ void vCanConfigFilter() {
|
||||||
DL_MCAN_StdMsgIDFilterElement stdFilterElement;
|
DL_MCAN_StdMsgIDFilterElement stdFilterElement;
|
||||||
stdFilterElement.sfid1 = filterValues[i];
|
stdFilterElement.sfid1 = filterValues[i];
|
||||||
stdFilterElement.sfid2 = maskValues[i];
|
stdFilterElement.sfid2 = maskValues[i];
|
||||||
// stdFilterElement.sfid1 = 0xc8;
|
|
||||||
// stdFilterElement.sfid2 = 0x7fe;
|
|
||||||
stdFilterElement.sfec = 001;
|
stdFilterElement.sfec = 001;
|
||||||
stdFilterElement.sft = 10;
|
stdFilterElement.sft = 10;
|
||||||
DL_MCAN_addStdMsgIDFilter(CANFD0, stadardFilterNumber,(DL_MCAN_StdMsgIDFilterElement *) &stdFilterElement);
|
DL_MCAN_addStdMsgIDFilter(CANFD0, stadardFilterNumber,(DL_MCAN_StdMsgIDFilterElement *) &stdFilterElement);
|
||||||
|
|
@ -326,7 +342,7 @@ void vCanConfigFilter() {
|
||||||
|
|
||||||
|
|
||||||
// Reset counters after applying filters
|
// Reset counters after applying filters
|
||||||
maskCount = 0;
|
maskCount = 1;
|
||||||
filterCount = 0;
|
filterCount = 0;
|
||||||
extendedFilterNumber = 0;
|
extendedFilterNumber = 0;
|
||||||
stadardFilterNumber = 0;
|
stadardFilterNumber = 0;
|
||||||
|
|
@ -371,6 +387,7 @@ void vRTE_UARTDataProcess(void)
|
||||||
vCanFilterSaveVal((pucBuf[PKT_HEADER+1] - 1), filterId, isExtended);
|
vCanFilterSaveVal((pucBuf[PKT_HEADER+1] - 1), filterId, isExtended);
|
||||||
if( pucBuf[PKT_HEADER+2] )//All filter received. Trigger Filter Settings
|
if( pucBuf[PKT_HEADER+2] )//All filter received. Trigger Filter Settings
|
||||||
{
|
{
|
||||||
|
vCanFilterReset();
|
||||||
vCanConfigFilter();
|
vCanConfigFilter();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue