diff --git a/FlexCAN_T4.h b/FlexCAN_T4.h index fd34059..606b896 100644 --- a/FlexCAN_T4.h +++ b/FlexCAN_T4.h @@ -328,7 +328,7 @@ class FlexCAN_T4_Base { virtual int write(const CANFD_message_t &msg) = 0; virtual int write(const CAN_message_t &msg) = 0; virtual bool isFD() = 0; - virtual uint8_t getFirstTxBoxSize(); + virtual uint8_t getFirstTxBoxSize() = 0; }; #if defined(__IMXRT1062__) diff --git a/FlexCAN_T4.tpp b/FlexCAN_T4.tpp index cf8691f..123d8bd 100644 --- a/FlexCAN_T4.tpp +++ b/FlexCAN_T4.tpp @@ -399,9 +399,9 @@ FCTP_FUNC void FCTP_OPT::writeIFLAG(uint64_t value) { FLEXCANb_IFLAG1(_bus) = value; } -FCTP_FUNC void FCTP_OPT::writeIFLAGBit(uint8_t mb_num) { - if ( mb_num < 32 ) FLEXCANb_IFLAG1(_bus) |= (1UL << mb_num); - else FLEXCANb_IFLAG2(_bus) |= (1UL << (mb_num - 32)); +FCTP_FUNC void FCTP_OPT::writeIFLAGBit(uint8_t mb_num) { // bugfix by bsundahl1 + if ( mb_num < 32 ) FLEXCANb_IFLAG1(_bus) = (1UL << mb_num); + else FLEXCANb_IFLAG2(_bus) = (1UL << (mb_num - 32)); } FCTP_FUNC void FCTP_OPT::writeIMASK(uint64_t value) { @@ -695,7 +695,7 @@ FCTP_FUNC bool FCTP_OPT::setMBUserFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, u FCTP_FUNC bool FCTP_OPT::setMBUserFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint32_t id2, uint32_t mask) { if ( mb_num < mailboxOffset() || mb_num >= FLEXCANb_MAXMB_SIZE(_bus) ) return 0; /* mailbox not available */ if ( (FLEXCAN_get_code(FLEXCANb_MBn_CS(_bus, mb_num)) >> 3) ) return 0; /* exit on TX mailbox */ - uint32_t new_mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD((((id1 | id2) ^ (id1 & id2)) ^ 0x7FF) & mask) : FLEXCAN_MB_ID_IDEXT((((id1 | id2) ^ (id1 & id2)) ^ 0x1FFFFFFF) & mask); + uint32_t new_mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD((((id1 | id2) ^ (id1 & id2)) ^ 0x7FF) & mask) : ((((id1 | id2) ^ (id1 & id2)) ^ 0x1FFFFFFF) & mask); setMBFilterProcessing(mb_num,id1,new_mask); filter_store(FLEXCAN_USERMASK, mb_num, 2, id1, id2, 0, 0, mask); return 1; @@ -704,7 +704,7 @@ FCTP_FUNC bool FCTP_OPT::setMBUserFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, u FCTP_FUNC bool FCTP_OPT::setMBUserFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint32_t id2, uint32_t id3, uint32_t mask) { if ( mb_num < mailboxOffset() || mb_num >= FLEXCANb_MAXMB_SIZE(_bus) ) return 0; /* mailbox not available */ if ( (FLEXCAN_get_code(FLEXCANb_MBn_CS(_bus, mb_num)) >> 3) ) return 0; /* exit on TX mailbox */ - uint32_t new_mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD((((id1 | id2 | id3) ^ (id1 & id2 & id3)) ^ 0x7FF) & mask) : FLEXCAN_MB_ID_IDEXT((((id1 | id2 | id3) ^ (id1 & id2 & id3)) ^ 0x1FFFFFFF) & mask); + uint32_t new_mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD((((id1 | id2 | id3) ^ (id1 & id2 & id3)) ^ 0x7FF) & mask) : ((((id1 | id2 | id3) ^ (id1 & id2 & id3)) ^ 0x1FFFFFFF) & mask); setMBFilterProcessing(mb_num,id1,new_mask); filter_store(FLEXCAN_USERMASK, mb_num, 3, id1, id2, id3, 0, mask); return 1; @@ -713,7 +713,7 @@ FCTP_FUNC bool FCTP_OPT::setMBUserFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, u FCTP_FUNC bool FCTP_OPT::setMBUserFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint32_t id2, uint32_t id3, uint32_t id4, uint32_t mask) { if ( mb_num < mailboxOffset() || mb_num >= FLEXCANb_MAXMB_SIZE(_bus) ) return 0; /* mailbox not available */ if ( (FLEXCAN_get_code(FLEXCANb_MBn_CS(_bus, mb_num)) >> 3) ) return 0; /* exit on TX mailbox */ - uint32_t new_mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD((((id1 | id2 | id3 | id4) ^ (id1 & id2 & id3 & id4)) ^ 0x7FF) & mask) : FLEXCAN_MB_ID_IDEXT((((id1 | id2 | id3 | id4) ^ (id1 & id2 & id3 & id4)) ^ 0x1FFFFFFF) & mask); + uint32_t new_mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD((((id1 | id2 | id3 | id4) ^ (id1 & id2 & id3 & id4)) ^ 0x7FF) & mask) : ((((id1 | id2 | id3 | id4) ^ (id1 & id2 & id3 & id4)) ^ 0x1FFFFFFF) & mask); setMBFilterProcessing(mb_num,id1,new_mask); filter_store(FLEXCAN_USERMASK, mb_num, 4, id1, id2, id3, id4, mask); return 1; @@ -816,7 +816,7 @@ FCTP_FUNC void FCTP_OPT::setMBFilterProcessing(FLEXCAN_MAILBOX mb_num, uint32_t bool frz_flag_negate = !(FLEXCANb_MCR(_bus) & FLEXCAN_MCR_FRZ_ACK); FLEXCAN_EnterFreezeMode(); FLEXCANb_RXIMR(_bus, mb_num) = calculated_mask | ((FLEXCANb_CTRL2(_bus) & FLEXCAN_CTRL2_EACEN) ? (1UL << 30) : 0); - FLEXCANb_MBn_ID(_bus, mb_num) = ((!(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE)) ? FLEXCAN_MB_ID_IDSTD(filter_id) : FLEXCAN_MB_ID_IDEXT(filter_id)); + FLEXCANb_MBn_ID(_bus, mb_num) = ((!(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE)) ? FLEXCAN_MB_ID_IDSTD(filter_id) : (filter_id & 0x1FFFFFFF)); if ( frz_flag_negate ) FLEXCAN_ExitFreezeMode(); } @@ -859,7 +859,7 @@ FCTP_FUNC bool FCTP_OPT::setMBManualFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1) { if ( mb_num < mailboxOffset() || mb_num >= FLEXCANb_MAXMB_SIZE(_bus) ) return 0; /* mailbox not available */ if ( (FLEXCAN_get_code(FLEXCANb_MBn_CS(_bus, mb_num)) >> 3) ) return 0; /* exit on TX mailbox */ - uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1) ^ (id1)) ^ 0x7FF) : FLEXCAN_MB_ID_IDEXT(((id1) ^ (id1)) ^ 0x1FFFFFFF); + uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1) ^ (id1)) ^ 0x7FF) : ((((id1) ^ (id1)) ^ 0x1FFFFFFF) & 0x1FFFFFFF); setMBFilterProcessing(mb_num,id1,mask); filter_store(FLEXCAN_MULTI, mb_num, 1, id1, 0, 0, 0, 0); return 1; @@ -868,7 +868,7 @@ FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1) { FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint32_t id2) { if ( mb_num < mailboxOffset() || mb_num >= FLEXCANb_MAXMB_SIZE(_bus) ) return 0; /* mailbox not available */ if ( (FLEXCAN_get_code(FLEXCANb_MBn_CS(_bus, mb_num)) >> 3) ) return 0; /* exit on TX mailbox */ - uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1 | id2) ^ (id1 & id2)) ^ 0x7FF) : FLEXCAN_MB_ID_IDEXT(((id1 | id2) ^ (id1 & id2)) ^ 0x1FFFFFFF); + uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1 | id2) ^ (id1 & id2)) ^ 0x7FF) : ((((id1 | id2) ^ (id1 & id2)) ^ 0x1FFFFFFF) & 0x1FFFFFFF); setMBFilterProcessing(mb_num,id1,mask); filter_store(FLEXCAN_MULTI, mb_num, 2, id1, id2, 0, 0, 0); return 1; @@ -877,7 +877,7 @@ FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint3 FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint32_t id2, uint32_t id3) { if ( mb_num < mailboxOffset() || mb_num >= FLEXCANb_MAXMB_SIZE(_bus) ) return 0; /* mailbox not available */ if ( (FLEXCAN_get_code(FLEXCANb_MBn_CS(_bus, mb_num)) >> 3) ) return 0; /* exit on TX mailbox */ - uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1 | id2 | id3) ^ (id1 & id2 & id3)) ^ 0x7FF) : FLEXCAN_MB_ID_IDEXT(((id1 | id2 | id3) ^ (id1 & id2 & id3)) ^ 0x1FFFFFFF); + uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1 | id2 | id3) ^ (id1 & id2 & id3)) ^ 0x7FF) : ((((id1 | id2 | id3) ^ (id1 & id2 & id3)) ^ 0x1FFFFFFF) & 0x1FFFFFFF); setMBFilterProcessing(mb_num,id1,mask); filter_store(FLEXCAN_MULTI, mb_num, 3, id1, id2, id3, 0, 0); return 1; @@ -886,7 +886,7 @@ FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint3 FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint32_t id2, uint32_t id3, uint32_t id4) { if ( mb_num < mailboxOffset() || mb_num >= FLEXCANb_MAXMB_SIZE(_bus) ) return 0; /* mailbox not available */ if ( (FLEXCAN_get_code(FLEXCANb_MBn_CS(_bus, mb_num)) >> 3) ) return 0; /* exit on TX mailbox */ - uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1 | id2 | id3 | id4) ^ (id1 & id2 & id3 & id4)) ^ 0x7FF) : FLEXCAN_MB_ID_IDEXT(((id1 | id2 | id3 | id4) ^ (id1 & id2 & id3 & id4)) ^ 0x1FFFFFFF); + uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1 | id2 | id3 | id4) ^ (id1 & id2 & id3 & id4)) ^ 0x7FF) : ((((id1 | id2 | id3 | id4) ^ (id1 & id2 & id3 & id4)) ^ 0x1FFFFFFF) & 0x1FFFFFFF); setMBFilterProcessing(mb_num,id1,mask); filter_store(FLEXCAN_MULTI, mb_num, 4, id1, id2, id3, id4, 0); return 1; @@ -895,7 +895,7 @@ FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint3 FCTP_FUNC bool FCTP_OPT::setMBFilter(FLEXCAN_MAILBOX mb_num, uint32_t id1, uint32_t id2, uint32_t id3, uint32_t id4, uint32_t id5) { if ( mb_num < mailboxOffset() || mb_num >= FLEXCANb_MAXMB_SIZE(_bus) ) return 0; /* mailbox not available */ if ( (FLEXCAN_get_code(FLEXCANb_MBn_CS(_bus, mb_num)) >> 3) ) return 0; /* exit on TX mailbox */ - uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1 | id2 | id3 | id4 | id5) ^ (id1 & id2 & id3 & id4 & id5)) ^ 0x7FF) : FLEXCAN_MB_ID_IDEXT(((id1 | id2 | id3 | id4 | id5) ^ (id1 & id2 & id3 & id4 & id5)) ^ 0x1FFFFFFF); + uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD(((id1 | id2 | id3 | id4 | id5) ^ (id1 & id2 & id3 & id4 & id5)) ^ 0x7FF) : ((((id1 | id2 | id3 | id4 | id5) ^ (id1 & id2 & id3 & id4 & id5)) ^ 0x1FFFFFFF) & 0x1FFFFFFF); setMBFilterProcessing(mb_num,id1,mask); filter_store(FLEXCAN_MULTI, mb_num, 5, id1, id2, id3, id4, id5); return 1; @@ -909,7 +909,7 @@ FCTP_FUNC bool FCTP_OPT::setMBFilterRange(FLEXCAN_MAILBOX mb_num, uint32_t id1, for ( uint32_t i = id1 + 1; i <= id2; i++ ) { stage1 |= i; stage2 &= i; } - uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD( (stage1 ^ stage2) ^ 0x1FFFFFFF ) : FLEXCAN_MB_ID_IDEXT( (stage1 ^ stage2) ^ 0x1FFFFFFF ); + uint32_t mask = ( !(FLEXCANb_MBn_CS(_bus, mb_num) & FLEXCAN_MB_CS_IDE) ) ? FLEXCAN_MB_ID_IDSTD( (stage1 ^ stage2) ^ 0x1FFFFFFF ) : (( (stage1 ^ stage2) ^ 0x1FFFFFFF ) & 0x1FFFFFFF); setMBFilterProcessing(mb_num,id1,mask); filter_store(FLEXCAN_RANGE, mb_num, 2, id1, id2, 0, 0, 0); return 1; diff --git a/examples/T32CAN_LINSLAVE_WAKE_ON_CAN/T32CAN_LINSLAVE_WAKE_ON_CAN.ino b/examples/T32CAN_LINSLAVE_WAKE_ON_CAN/T32CAN_LINSLAVE_WAKE_ON_CAN.ino new file mode 100644 index 0000000..d275740 --- /dev/null +++ b/examples/T32CAN_LINSLAVE_WAKE_ON_CAN/T32CAN_LINSLAVE_WAKE_ON_CAN.ino @@ -0,0 +1,45 @@ +#include +FlexCAN_T4 Can0; +volatile uint32_t can_activity = 0; +volatile uint32_t ign_output = 0; + +void setup() { + Serial.begin(115200); + pinMode(23, OUTPUT); // ENABLE LIN SLAVE OUTPUT + delay(1000); + + Can0.begin(); + Can0.setBaudRate(125000); + Can0.setMaxMB(16); + Can0.enableFIFO(); + Can0.enableFIFOInterrupt(); + Can0.onReceive(canSniff); + Can0.mailboxStatus(); +} + +void loop() { + if ( ign_output ) { + if ( millis() - can_activity > 10000 ) { + ign_output = 0; + Serial.println("BUS INACTIVE, IGN OUTPUT DISABLED"); + } + } + else digitalWrite(23, HIGH); // DISABLE IGN OUTPUT +} + +void canSniff(const CAN_message_t &msg) { + can_activity = millis(); + if ( ign_output == 0 ) Serial.println("BUS ACTIVE, IGN OUTPUT ENABLED"); + ign_output = 1; + digitalWrite(23, LOW); // ENABLE IGN OUTPUT + Serial.print("MB "); Serial.print(msg.mb); + Serial.print(" OVERRUN: "); Serial.print(msg.flags.overrun); + Serial.print(" LEN: "); Serial.print(msg.len); + Serial.print(" EXT: "); Serial.print(msg.flags.extended); + Serial.print(" TS: "); Serial.print(msg.timestamp); + Serial.print(" ID: "); Serial.print(msg.id, HEX); + Serial.print(" Buffer: "); + for ( uint8_t i = 0; i < msg.len; i++ ) { + Serial.print(msg.buf[i], HEX); Serial.print(" "); + } Serial.println(); +} diff --git a/keywords.txt b/keywords.txt new file mode 100644 index 0000000..6bd282b --- /dev/null +++ b/keywords.txt @@ -0,0 +1,248 @@ +FlexCAN KEYWORD1 +IFCT KEYWORD1 +IMCTFD KEYWORD1 +CANListener KEYWORD1 + +begin KEYWORD2 +setFilter KEYWORD2 +end KEYWORD2 +read KEYWORD2 +write KEYWORD2 +available KEYWORD2 + +enableFIFOInterrupt KEYWORD2 +disableFIFOInterrupt KEYWORD2 +enableFIFO KEYWORD2 +disableFIFO KEYWORD2 +setBaudRate KEYWORD2 +getBaudRate KEYWORD2 +autoBaud KEYWORD2 +connected KEYWORD2 +setMB KEYWORD2 +enableMBInterrupt KEYWORD2 +disableMBInterrupt KEYWORD2 +onReceive KEYWORD2 +mailboxStatus KEYWORD2 +pollFIFO KEYWORD2 +readMB KEYWORD2 +readFIFO KEYWORD2 +setTX KEYWORD2 +setRX KEYWORD2 +setMRP KEYWORD2 +setRRS KEYWORD2 +setMaxMB KEYWORD2 +setMBFilter KEYWORD2 +setMBFilterRange KEYWORD2 +enhanceFilter KEYWORD2 +events KEYWORD2 +setFIFOFilter KEYWORD2 +setFIFOFilterRange KEYWORD2 +setFIFOFilterTable KEYWORD2 +setRFFN KEYWORD2 +reset KEYWORD2 +intervalTimer KEYWORD2 +teensyThread KEYWORD2 +currentMasks KEYWORD2 +distribute KEYWORD2 +acceptedIDs KEYWORD2 +getNumRxBoxes KEYWORD2 +getNumMailBoxes KEYWORD2 +getLastTxBox KEYWORD2 +setMask KEYWORD2 +setNumTxBoxes KEYWORD2 +getFirstTxBox KEYWORD2 +getTxBoxCount KEYWORD2 +getFilter KEYWORD2 +setListenOnly KEYWORD2 +attachObj KEYWORD2 +detachObj KEYWORD2 +simulate KEYWORD2 +startStats KEYWORD2 +stopStats KEYWORD2 +clearStats KEYWORD2 +getStats KEYWORD2 +freeTxBuffer KEYWORD2 +rxBufferOverruns KEYWORD2 +setQueue KEYWORD2 +enableSPICRC KEYWORD2 +disableSPICRC KEYWORD2 +currentFilters KEYWORD2 +currentConfig KEYWORD2 +calculateRAM KEYWORD2 +configureTXQ KEYWORD2 +configureTEF KEYWORD2 +configureFIFO KEYWORD2 +abortTransmission KEYWORD2 +disableTimeStamping KEYWORD2 +enableTimeStamping KEYWORD2 +setOpMode KEYWORD2 +getOpMode KEYWORD2 +MB0 KEYWORD2 +MB1 KEYWORD2 +MB2 KEYWORD2 +MB3 KEYWORD2 +MB4 KEYWORD2 +MB5 KEYWORD2 +MB6 KEYWORD2 +MB7 KEYWORD2 +MB8 KEYWORD2 +MB9 KEYWORD2 +MB10 KEYWORD2 +MB11 KEYWORD2 +MB12 KEYWORD2 +MB13 KEYWORD2 +MB14 KEYWORD2 +MB15 KEYWORD2 +FIFO KEYWORD2 +FIFO1 KEYWORD2 +FIFO2 KEYWORD2 +FIFO3 KEYWORD2 +FIFO4 KEYWORD2 +FIFO5 KEYWORD2 +FIFO6 KEYWORD2 +FIFO7 KEYWORD2 +FIFO8 KEYWORD2 +FIFO9 KEYWORD2 +FIFO10 KEYWORD2 +FIFO11 KEYWORD2 +FIFO12 KEYWORD2 +FIFO13 KEYWORD2 +FIFO14 KEYWORD2 +FIFO15 KEYWORD2 +FIFO16 KEYWORD2 +FIFO17 KEYWORD2 +FIFO18 KEYWORD2 +FIFO19 KEYWORD2 +FIFO20 KEYWORD2 +FIFO21 KEYWORD2 +FIFO22 KEYWORD2 +FIFO23 KEYWORD2 +FIFO24 KEYWORD2 +FIFO25 KEYWORD2 +FIFO26 KEYWORD2 +FIFO27 KEYWORD2 +FIFO28 KEYWORD2 +FIFO29 KEYWORD2 +FIFO30 KEYWORD2 +FIFO31 KEYWORD2 +TEF KEYWORD2 +TXQ KEYWORD2 +FILTER_0 KEYWORD2 +FILTER_1 KEYWORD2 +FILTER_2 KEYWORD2 +FILTER_3 KEYWORD2 +FILTER_4 KEYWORD2 +FILTER_5 KEYWORD2 +FILTER_6 KEYWORD2 +FILTER_7 KEYWORD2 +FILTER_8 KEYWORD2 +FILTER_9 KEYWORD2 +FILTER_10 KEYWORD2 +FILTER_11 KEYWORD2 +FILTER_12 KEYWORD2 +FILTER_13 KEYWORD2 +FILTER_14 KEYWORD2 +FILTER_15 KEYWORD2 +FILTER_16 KEYWORD2 +FILTER_17 KEYWORD2 +FILTER_18 KEYWORD2 +FILTER_19 KEYWORD2 +FILTER_20 KEYWORD2 +FILTER_21 KEYWORD2 +FILTER_22 KEYWORD2 +FILTER_23 KEYWORD2 +FILTER_24 KEYWORD2 +FILTER_25 KEYWORD2 +FILTER_26 KEYWORD2 +FILTER_27 KEYWORD2 +FILTER_28 KEYWORD2 +FILTER_29 KEYWORD2 +FILTER_30 KEYWORD2 +FILTER_31 KEYWORD2 +TX_SEND KEYWORD2 +TX_QUEUE KEYWORD2 +CATCH_ALL KEYWORD2 +SID12 KEYWORD2 +NORMAL_FILTERING KEYWORD2 +FIFO_RX KEYWORD2 +FIFO_TX KEYWORD2 +TIMESTAMP_ON KEYWORD2 +TIMESTAMP_OFF KEYWORD2 +PLSIZE_0 KEYWORD2 +PLSIZE_1 KEYWORD2 +PLSIZE_2 KEYWORD2 +PLSIZE_3 KEYWORD2 +PLSIZE_4 KEYWORD2 +PLSIZE_5 KEYWORD2 +PLSIZE_6 KEYWORD2 +PLSIZE_7 KEYWORD2 +DEPTH_1 KEYWORD2 +DEPTH_2 KEYWORD2 +DEPTH_3 KEYWORD2 +DEPTH_4 KEYWORD2 +DEPTH_5 KEYWORD2 +DEPTH_6 KEYWORD2 +DEPTH_7 KEYWORD2 +DEPTH_8 KEYWORD2 +DEPTH_9 KEYWORD2 +DEPTH_10 KEYWORD2 +DEPTH_11 KEYWORD2 +DEPTH_12 KEYWORD2 +DEPTH_13 KEYWORD2 +DEPTH_14 KEYWORD2 +DEPTH_15 KEYWORD2 +DEPTH_16 KEYWORD2 +DEPTH_17 KEYWORD2 +DEPTH_18 KEYWORD2 +DEPTH_19 KEYWORD2 +DEPTH_20 KEYWORD2 +DEPTH_21 KEYWORD2 +DEPTH_22 KEYWORD2 +DEPTH_23 KEYWORD2 +DEPTH_24 KEYWORD2 +DEPTH_25 KEYWORD2 +DEPTH_26 KEYWORD2 +DEPTH_27 KEYWORD2 +DEPTH_28 KEYWORD2 +DEPTH_29 KEYWORD2 +DEPTH_30 KEYWORD2 +DEPTH_31 KEYWORD2 +DEPTH_32 KEYWORD2 +PRIORITY_0 KEYWORD2 +PRIORITY_1 KEYWORD2 +PRIORITY_2 KEYWORD2 +PRIORITY_3 KEYWORD2 +PRIORITY_4 KEYWORD2 +PRIORITY_5 KEYWORD2 +PRIORITY_6 KEYWORD2 +PRIORITY_7 KEYWORD2 +PRIORITY_8 KEYWORD2 +PRIORITY_9 KEYWORD2 +PRIORITY_10 KEYWORD2 +PRIORITY_11 KEYWORD2 +PRIORITY_12 KEYWORD2 +PRIORITY_13 KEYWORD2 +PRIORITY_14 KEYWORD2 +PRIORITY_15 KEYWORD2 +PRIORITY_16 KEYWORD2 +PRIORITY_17 KEYWORD2 +PRIORITY_18 KEYWORD2 +PRIORITY_19 KEYWORD2 +PRIORITY_20 KEYWORD2 +PRIORITY_21 KEYWORD2 +PRIORITY_22 KEYWORD2 +PRIORITY_23 KEYWORD2 +PRIORITY_24 KEYWORD2 +PRIORITY_25 KEYWORD2 +PRIORITY_26 KEYWORD2 +PRIORITY_27 KEYWORD2 +PRIORITY_28 KEYWORD2 +PRIORITY_29 KEYWORD2 +PRIORITY_30 KEYWORD2 +PRIORITY_31 KEYWORD2 + +CAN_message_t KEYWORD1 +CANFD_message_t KEYWORD1 +CAN_filter_t KEYWORD1 +CAN_stats_t KEYWORD1 +