// ------------------------------------------------------------- CAN_Frame CAN_K2X::read() { unsigned long int startMillis; CAN_Frame msg; msg.timeout = CAN_TIMEOUT_T3; startMillis = msg.timeout ? millis() : 0; while ( !available() ) { if ( !msg.timeout || (msg.timeout <= (millis() - startMillis)) ) { // early EXIT nothing here msg.valid = false; return msg; } yield(); } // get identifier and dlc msg.length = FLEXCAN_get_length(FLEXCAN0_MBn_CS(rxb)); msg.extended = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_IDE) ? 1 : 0; msg.id = (FLEXCAN0_MBn_ID(rxb) & FLEXCAN_MB_ID_EXT_MASK); if (!msg.extended) { msg.id >>= FLEXCAN_MB_ID_STD_BIT_NO; }
// ------------------------------------------------------------- int FlexCAN::read(CAN_message_t &msg) { unsigned long int startMillis; startMillis = msg.timeout? millis() : 0; while( !available() ) { if ( !msg.timeout || (msg.timeout<=(millis()-startMillis)) ) { // early EXIT nothing here return 0; } yield(); } // get identifier and dlc msg.len = FLEXCAN_get_length(FLEXCAN0_MBn_CS(rxb)); msg.ext = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_IDE)? 1:0; msg.id = (FLEXCAN0_MBn_ID(rxb) & FLEXCAN_MB_ID_EXT_MASK); if(!msg.ext) { msg.id >>= FLEXCAN_MB_ID_STD_BIT_NO; }