32#define UAVCAN_NODE_ID 100
35#ifndef UAVCAN_BAUDRATE
36#define UAVCAN_BAUDRATE 1000000
42#ifndef UAVCAN_CAN1_NODE_ID
43#define UAVCAN_CAN1_NODE_ID UAVCAN_NODE_ID
46#ifndef UAVCAN_CAN1_BAUDRATE
47#define UAVCAN_CAN1_BAUDRATE UAVCAN_BAUDRATE
61#ifndef UAVCAN_CAN2_NODE_ID
62#define UAVCAN_CAN2_NODE_ID UAVCAN_NODE_ID
65#ifndef UAVCAN_CAN2_BAUDRATE
66#define UAVCAN_CAN2_BAUDRATE UAVCAN_BAUDRATE
87 rx_frame.data_len =
rx_msg->len;
115 tx_msg.
len =
txf->data_len;
149 if (
transfer->data_type_id ==
ev->data_type_id) {
167 if (data_type_id ==
ev->data_type_id) {
195 iface->initialized =
true;
218 ev->data_type_id = data_type_id;
219 ev->data_type_signature = data_type_signature;
234 if (!
iface->initialized) {
return; }
238 data_type_id, &
iface->transfer_id,
int can_register_callback(can_rx_frame_callback_t callback, struct pprzaddr_can *src_addr, void *user_data)
Add a callback on received frames from an interface.
uint8_t data[SOCKETCAN_MAX_DLEN]
int can_transmit_frame(struct pprzcan_frame *txframe, struct pprzaddr_can *addr)
int pprz_mtx_unlock(pprz_mutex_t *mtx)
void pprz_bsem_init(pprz_bsem_t *bsem, bool taken)
int pprz_thread_create(pprz_thread_t *thread, size_t size, const char *name, uint8_t prio, void(*pf)(void *), void *arg)
Creates a new thread whose stack is dynamically allocated.
int pprz_mtx_init(pprz_mutex_t *mtx)
int pprz_mtx_lock(pprz_mutex_t *mtx)
void pprz_bsem_signal(pprz_bsem_t *bsem)
void pprz_bsem_wait(pprz_bsem_t *bsem)
void(* uavcan_callback)(struct uavcan_iface_t *iface, CanardRxTransfer *transfer)
Generic uavcan callback definition.
Main uavcan event structure for registering/calling callbacks.
struct pprzaddr_can can_net
uavcan interface structure
static void can_frame_cb(struct pprzcan_frame *rx_msg, UNUSED struct pprzaddr_can *src_addr, void *user_data)
void uavcan_init(void)
Initialize all uavcan interfaces.
static bool shouldAcceptTransfer(const CanardInstance *ins, uint64_t *out_data_type_signature, uint16_t data_type_id, CanardTransferType transfer_type, uint8_t source_node_id)
If we should accept this transfer.
static void uavcanInitIface(struct uavcan_iface_t *iface)
Initialize uavcan interface.
void uavcan_broadcast(struct uavcan_iface_t *iface, uint64_t data_type_signature, uint16_t data_type_id, uint8_t priority, const void *payload, uint16_t payload_len)
Broadcast an uavcan message to a specific interface.
static void uavcan_tx(void *p)
static uavcan_event * uavcan_event_hd
void uavcan_bind(uint16_t data_type_id, uint64_t data_type_signature, uavcan_event *ev, uavcan_callback cb)
Bind to a receiving message from uavcan.
static void onTransferReceived(CanardInstance *ins, CanardRxTransfer *transfer)
Whenever a valid and 'accepted' transfer is received.
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned long long uint64_t
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
int transfer(const Mat *from, const image_t *to)