Played around a bit and the solution is right here:
Code:
#include <FlexCAN.h>
unsigned long time=0;
byte stopper=0;
class ExampleClass : public CANListener
{
public:
void printFrame(CAN_message_t &frame, int mailbox);
void gotFrame(CAN_message_t &frame, int mailbox); //overrides the parent version so we can actually do something
};
void ExampleClass::printFrame(CAN_message_t &frame, int mailbox)
{
Serial.print(stopper);
Serial.print(" ID: ");
Serial.print(frame.id, HEX);
Serial.print(" Data: ");
for (int c = 0; c < frame.len; c++)
{
Serial.print(frame.buf[c], HEX);
Serial.write(' ');
}
Serial.write('\r');
Serial.write('\n');
}
void ExampleClass::gotFrame(CAN_message_t &frame, int mailbox)
{
printFrame(frame, mailbox);
}
ExampleClass exampleClass;
// -------------------------------------------------------------
void setup(void)
{
delay(1000);
Serial.println(F("Go"));
Can0.begin(500000);
Can0.attachObj(&exampleClass);
exampleClass.attachGeneralHandler();
}
// -------------------------------------------------------------
void loop(void)
{
if(millis()>2000 && stopper==0){exampleClass.detachGeneralHandler();Serial.println("stop");stopper++;} // works!
if(millis()>4000 && stopper==1){Can0.attachObj(&exampleClass);exampleClass.attachGeneralHandler();Serial.println("start");stopper++;}
}