/* This file is generated by BUSMASTER */ /* VERSION [1.1] */ /* BUSMASTER VERSION [1.7.1] */ /* PROTOCOL [CAN] */ /* Start BUSMASTER include header */ #include #include // modifizierte Version für BUSMASTER V3.1.0 22.01.2017 (c) by geier99 /* End BUSMASTER include header */ /* Start BUSMASTER global variable */ typedef enum canframe_type_en { CAN_STD =0 , CAN_EXT } canframtype_t; typedef struct filter_mask_st { unsigned int id; // 11/29 Bit- Message ID canframtype_t canframe; // true, for (29 Bit) Frame union // dieser Teil basiert noch auf dem alten Format { unsigned char data[8]; // Byte Data bei FD wären das 64 Bytes unsigned short int m_auwData[4]; // Word Data unsigned long int m_aulData[2]; // Long Data } m_sWhichBit; // Data access member } filter_mask_t; //################################# Filter MASK - Start Edit here ##################### const filter_mask_t filterMask[] = { // ID Flag Extende Datenbytes // wird mit der RX-Message verundet { 0x4A4, CAN_STD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00 } , { 0x278, CAN_STD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00 } , { 0x3C8, CAN_STD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00 } }; const filter_mask_t filterSet[] = { // ID Flag Extende Datenbytes // wird mit der RX-Message verodert, um ein Bit zu setzen { 0x4A4, CAN_STD, 0x03, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00 , 0x00 } , { 0x3C8, CAN_STD, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00 } , { 0xAABD, CAN_EXT, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0xAA } }; //#################################- End Edit here ##################### #define FILTER_MASK_SIZE (sizeof(filterMask)/sizeof(filter_mask_t)) #define FILTER_SET_SIZE (sizeof(filterSet)/sizeof(filter_mask_t)) /* End BUSMASTER global variable */ /* Start BUSMASTER Function Prototype */ GCC_EXTERN void GCC_EXPORT OnMsg_All(STCAN_MSG RxMsg); void Utils_doFillter(STCAN_MSG *rx); GCC_EXTERN void GCC_EXPORT OnBus_Connect(); /* End BUSMASTER Function Prototype */ /* Start BUSMASTER generated function - OnMsg_All */ void OnMsg_All(STCAN_MSG RxMsg) { /* TODO */ //STCAN_MSG sMsg; //Trace("Received: Kanal:%d ",RxMsg.m_ucChannel); // Achtung, funktioniert nur bei Channel1 und Channel2 RxMsg.cluster=3-RxMsg.cluster; Utils_doFillter(&RxMsg); // RX-Msg modifizieren SendMsg(RxMsg); //Trace ("Send: Kanal %d",RxMsg.m_ucChannel); }/* End BUSMASTER generated function - OnMsg_All */ /* Start BUSMASTER generated function - Utils_doFillter */ void Utils_doFillter(STCAN_MSG *rx) { unsigned char i,j; canframtype_t frameformat = (canframtype_t) rx->isExtended; // Frame Format von der aktuellen RX-Message if(!FILTER_MASK_SIZE && !FILTER_SET_SIZE) return; // Wenn keine Masken definiert sind, dann raus hier if (rx->isCanfd) return; // CAN-FD wird nicht unterstützt, deshalb 1:1 durchlassen for(i=0;iid) { // ID in der Tabelle gefunden? for (j=0;j<8;j++) { // ja, dann alle Bytes entsprechend der Tabelleneinträge maskieren rx->data[j] &= filterMask[i].m_sWhichBit.data[j]; } } } } // end for filtermasken for(i=0;iid) { // ID in der Tabelle gefunden? for (j=0;j<8;j++) { // ja, dann alle Datenbits entsprechend der Tabelleneinträge setzen rx->data[j] |= filterSet[i].m_sWhichBit.data[j]; } } } } // end for FilterSet }/* End BUSMASTER generated function - Utils_doFillter */ /* Start BUSMASTER generated function - OnBus_Connect */ void OnBus_Connect() { /* TODO */ Trace ("Attention: Only CAN Channels (cluster) CAN1 and CAN2 are supported for the gateway!"); Trace ("CAN-FD not supported!"); }/* End BUSMASTER generated function - OnBus_Connect */