30#include "uavcan.protocol.NodeStatus.h"
36#define UAVCAN_NODE_ID 100
39#ifndef UAVCAN_BAUDRATE
40#define UAVCAN_BAUDRATE 1000000
46#ifndef UAVCAN_CAN1_NODE_ID
47#define UAVCAN_CAN1_NODE_ID UAVCAN_NODE_ID
50#ifndef UAVCAN_CAN1_BAUDRATE
51#define UAVCAN_CAN1_BAUDRATE UAVCAN_BAUDRATE
63#ifndef UAVCAN_CAN2_NODE_ID
64#define UAVCAN_CAN2_NODE_ID UAVCAN_NODE_ID
67#ifndef UAVCAN_CAN2_BAUDRATE
68#define UAVCAN_CAN2_BAUDRATE UAVCAN_BAUDRATE
86 rx_frame.data_len =
rx_msg->len;
113 tx_msg.
len =
txf->data_len;
146 if (
transfer->data_type_id ==
ev->data_type_id) {
164 if (data_type_id ==
ev->data_type_id) {
174#if CANARD_ALLOCATE_SEM
205#if CANARD_ALLOCATE_SEM
208 iface->
canard.allocator.semaphore = &iface->allocator_bsem;
243 ev->data_type_id = data_type_id;
244 ev->data_type_signature = data_type_signature;
319 transfer.data_type_signature = data_type_signature;
320 transfer.data_type_id = data_type_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)
void sys_time_msleep(uint32_t ms)
Sleep.
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)
int kv_set(kv_store_t *kv, uint32_t key, const void *value)
Sets a value for a given key.
void * kv_get(const kv_store_t *kv, uint32_t key)
Retrieves the value associated with a given key.
void kv_init(kv_store_t *kv, size_t capacity, size_t esize, uint32_t *keys, void *values, uint8_t *used)
Initializes a key-value store.
Architecture independent timing functions.
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.
void uavcan_transfer(struct uavcan_iface_t *iface, CanardTxTransfer *transfer)
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_request(struct uavcan_iface_t *iface, uint8_t destination_node_id, CanardTxTransfer *transfer)
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)
Legacy function Broadcast an uavcan message to a specific interface.
static void uavcan_tx(void *p)
static uavcan_event * uavcan_event_hd
void uavcan_response(struct uavcan_iface_t *iface, uint8_t destination_node_id, CanardTxTransfer *transfer)
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.
static uint8_t * get_transfer_id(struct uavcan_iface_t *iface, uint8_t destination_node_id, CanardTxTransfer *transfer)
uint8_t transfer_ids_values[UAVCAN_TID_STORE_CAPACITY]
void(* uavcan_callback)(struct uavcan_iface_t *iface, CanardRxTransfer *transfer)
Generic uavcan callback definition.
uint32_t transfer_ids_keys[UAVCAN_TID_STORE_CAPACITY]
struct pprzaddr_can can_net
kv_store_t transfer_ids_store
#define UAVCAN_TID_STORE_CAPACITY
uint8_t transfer_ids_used[UAVCAN_TID_STORE_CAPACITY]
uint8_t canard_memory_pool[1024 *2]
Main uavcan event structure for registering/calling callbacks.
uavcan interface structure
void uavcan_allocator_init(void)
void uavcan_init_reporting()
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int 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)