I don’t know whether this is the right use of lib but the send function works:
int can_senden(int id, int len, int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7)
{
CAN.mailbox_set_id(1, id, false);
CAN.mailbox_set_datalen(1, len);
CAN.mailbox_set_databyte(1, 0, d0);
CAN.mailbox_set_databyte(1, 1, d1);
CAN.mailbox_set_databyte(1, 2, d2);
CAN.mailbox_set_databyte(1, 3, d3);
CAN.mailbox_set_databyte(1, 4, d4);
CAN.mailbox_set_databyte(1, 5, d5);
CAN.mailbox_set_databyte(1, 6, d6);
CAN.mailbox_set_databyte(1, 7, d7);
CAN.global_send_transfer_cmd(CAN_TCR_MB1);
return 0;
}
This is my setup code:
CAN.reset_all_mailbox();
//Rx-Setup
CAN.mailbox_set_mode(0, CAN_MB_RX_MODE);
CAN.mailbox_set_id(0, TEST1_CAN_TRANSFER_ID, false);
//Tx-Setup
CAN.mailbox_set_mode(1, CAN_MB_TX_MODE);
CAN.mailbox_set_priority(1, TEST1_CAN0_TX_PRIO);
CAN.mailbox_set_accept_mask(1, 0x1FFFFFFF, false);
can_senden(TEST1_CAN_TRANSFER_ID + 0x200, 7, 'A', 'R', 'D', 'U', 'I', 'N', 'O', 0);
CAN.enable_interrupt(CAN_IER_MB0);
And this is Code for incoming frame interpretation (only test structure, I will implement bitwise interpretation). How can I receive all incoming frames with every ID or ID from 100-200? I tried to set accept mask without success. It only works with ID set in mailbox_set_id.
if (CAN.rx_avail())
{
CAN.get_rx_buff(&inFrame);
Serial.print("CAN message received= ");
Serial.print(inFrame.data[0]);
Serial.print(inFrame.data[1]);
Serial.print(inFrame.data[2]);
Serial.print(inFrame.data[3]);
Serial.print(inFrame.data[4]);
Serial.print(inFrame.data[5]);
Serial.print(inFrame.data[6]);
Serial.println(inFrame.data[7]);
if (inFrame.data[0] == 0x11)
{
LED_on();
can_senden(TEST1_CAN_TRANSFER_ID + 0x200, 6, 'L', 'E', 'D', ' ', 'O', 'N', 0, 0);
}
if (inFrame.data[0] == 0x22)
{
LED_off();
can_senden(TEST1_CAN_TRANSFER_ID + 0x200, 7, 'L', 'E', 'D', ' ', 'O', 'F', 'F', 0);
}
}