Skip to content

Commit 8982af3

Browse files
committed
uavcan: set up CAN filters
1 parent 91267cc commit 8982af3

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

modules/uavcan/uavcan.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,18 @@ static struct pubsub_topic_s* _uavcan_get_message_topic(struct uavcan_instance_s
213213
// append it
214214
LINKED_LIST_APPEND(struct uavcan_rx_list_item_s, instance->rx_list_head, rx_list_item);
215215

216+
// Set up CAN filters
217+
if (msg_descriptor->transfer_type == CanardTransferTypeBroadcast) {
218+
can_add_filter(instance->can_instance, 0x60FFFF80, 0x20000000 | ((uint32_t)msg_descriptor->default_data_type_id<<8));
219+
if (msg_descriptor->default_data_type_id <= 3) { // Message may be anonymous
220+
can_add_filter(instance->can_instance, 0x600003FF, 0x20000000 | ((uint32_t)msg_descriptor->default_data_type_id<<8));
221+
}
222+
} else if (msg_descriptor->transfer_type == CanardTransferTypeRequest) {
223+
can_add_filter(instance->can_instance, 0x20FF8080, 0x20008080 | ((uint32_t)msg_descriptor->default_data_type_id<<16));
224+
} else if (msg_descriptor->transfer_type == CanardTransferTypeResponse) {
225+
can_add_filter(instance->can_instance, 0x20FF8080, 0x20000080 | ((uint32_t)msg_descriptor->default_data_type_id<<16));
226+
}
227+
216228
chSysUnlock();
217229

218230
return &rx_list_item->topic;
@@ -497,7 +509,7 @@ static void uavcan_can_rx_handler(size_t msg_size, const void* msg, void* ctx) {
497509

498510
const struct can_rx_frame_s* frame = msg;
499511

500-
if (frame->origin == CAN_FRAME_ORIGIN_LOCAL) {
512+
if (CAN_RX_FRAME_ORIGIN(*frame) == CAN_FRAME_ORIGIN_LOCAL) {
501513
return;
502514
}
503515

0 commit comments

Comments
 (0)