Edit: Here is some relevant code from my Arduino IDE. I modified the object oriented can example from flexcan to print in my desired format.
#include <FlexCAN.h>
static CAN_message_t msg;
elapsedMicros sinceStart;
class CANHandler : public CANListener{
void printFrame(CAN_message_t &frame);
void gotFrame(CAN_message_t &frame, int mailbox); //overrides the parent version so we can actually do something
};
void CANHandler::printFrame(CAN_message_t &frame){
Serial.print("("); Serial.print(sinceStart / 1000.0 / 1000.0, 6);
Serial.print(") "); //cast to 6 decimals to make compatible with can-utils
Serial.print("can0 "); // to identify a CAN channel for can-utils
Serial.print(frame.id, HEX);
Serial.print("#");
for ( uint8_t i = 0; i < frame.len; i++ ) {
if(frame.buf[i] < 15){
Serial.print("0"); Serial.print(frame.buf[i], HEX);
} else {
Serial.print(frame.buf[i], HEX);
}
}
Serial.println();
}
void CANHandler::gotFrame(CAN_message_t &frame, int mailbox){
printFrame(frame);
}
CANHandler canHandler;
void setup() {
Serial.begin(115200);
Can0.begin(500000);
Can0.attachObj(&canHandler);
CanHandler.attachGeneralHandler();
}
void loop() {
//run until exit
}