37 #include <uavcan_stm32/uavcan_stm32.hpp> 38 #include <drivers/device/device.h> 39 #include <uavcan/protocol/global_time_sync_slave.hpp> 40 #include <uavcan/protocol/file/BeginFirmwareUpdate.hpp> 41 #include <uavcan/node/timer.hpp> 51 #define NUM_ACTUATOR_CONTROL_GROUPS_UAVCAN 1 52 #define UAVCAN_DEVICE_PATH "/dev/uavcan/node" 55 #define UAVCAN_NUM_POLL_FDS (NUM_ACTUATOR_CONTROL_GROUPS_UAVCAN+2) 71 static constexpr
unsigned MemPoolSize = 2048;
84 static constexpr
unsigned RxQueueLenPerIface = 5;
90 static constexpr
unsigned StackSize = 2500;
93 typedef uavcan::Node<MemPoolSize> Node;
94 typedef uavcan_stm32::CanInitHelper<RxQueueLenPerIface> CanInitHelper;
95 typedef uavcan::protocol::file::BeginFirmwareUpdate BeginFirmwareUpdate;
97 UavcanNode(uavcan::ICanDriver &can_driver, uavcan::ISystemClock &system_clock);
101 virtual int ioctl(file *filp,
int cmd,
unsigned long arg);
103 static int start(uavcan::NodeID node_id, uint32_t bitrate);
105 Node &get_node() {
return _node; }
111 static UavcanNode *instance() {
return _instance; }
116 int32_t active_bitrate;
120 void fill_node_info();
121 int init(uavcan::NodeID node_id);
122 void node_spin_once();
124 int add_poll_fd(
int fd);
128 bool _task_should_exit =
false;
132 pthread_mutex_t _node_mutex;
133 uavcan::GlobalTimeSyncSlave _time_sync_slave;
135 pollfd _poll_fds[UAVCAN_NUM_POLL_FDS] = {};
136 unsigned _poll_fds_num = 0;
139 void (UavcanNode::*)(
const uavcan::ReceivedDataStructure<UavcanNode::BeginFirmwareUpdate::Request> &,
140 uavcan::ServiceResponseDataStructure<UavcanNode::BeginFirmwareUpdate::Response> &)>
141 BeginFirmwareUpdateCallBack;
143 uavcan::ServiceServer<BeginFirmwareUpdate, BeginFirmwareUpdateCallBack> _fw_update_listner;
144 void cb_beginfirmware_update(
const uavcan::ReceivedDataStructure<UavcanNode::BeginFirmwareUpdate::Request> &req,
145 uavcan::ServiceResponseDataStructure<UavcanNode::BeginFirmwareUpdate::Response> &rsp);
151 uavcan::TimerEventForwarder<void (*)(const uavcan::TimerEvent &)> _reset_timer;
Configuration flags used in code.
A UAVCAN node.
Definition: uavcan_main.hpp:80
Abstract class for any character device.
Definition: CDev.hpp:58