Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
uavcan_reporting.c
Go to the documentation of this file.
1#include "uavcan.h"
2#include "mcu_periph/can.h"
4#include "uavcan.protocol.NodeStatus.h"
5#include "uavcan.protocol.GetNodeInfo_req.h"
6#include "uavcan.protocol.GetNodeInfo_res.h"
8#include "generated/airframe.h"
9#include "uavcan_reporting.h"
11
12#define AC_CAN_NAME_PREFIX "org.pprz."
13
16
17char ac_can_name[50] = {0};
19
20static void node_info_cb(struct uavcan_iface_t *iface, CanardRxTransfer *transfer);
21static void node_status_cb(struct uavcan_iface_t *iface, CanardRxTransfer *transfer);
25
26
36
42 if(!uavcan_get_node_id_mapping(transfer->source_node_id)) {
43 request_node_info(iface, transfer->source_node_id);
44 }
45}
46
61
62
64 status->uptime_sec = (uint32_t)get_sys_time_float();
67 status->sub_mode = 0;
68 status->vendor_specific_status_code = 0;
69}
70
72 software_version->major = 6;
73 software_version->minor = 0;
74 software_version->optional_field_flags = 0;
75 software_version->vcs_commit = 0;
76 software_version->image_crc = 0;
77}
78
80 hardware_version->major = 2;
81 hardware_version->minor = 1;
82 memset(hardware_version->unique_id, 0, sizeof(hardware_version->unique_id));
83 hardware_version->certificate_of_authenticity.len = 0;
84}
85
86
87
88static void node_info_cb(struct uavcan_iface_t *iface, CanardRxTransfer *transfer __attribute__((unused))) {
90 get_uavcan_status(&msg.status);
91 get_uavcan_software_version(&msg.software_version);
92 get_uavcan_hardware_version(&msg.hardware_version);
93 uint8_t len = Min(sizeof(msg.name.data), ac_can_name_len);
94 strncpy((char*)msg.name.data, ac_can_name, len);
95 msg.name.len = len;
96
99
104 resp_transfer.inout_transfer_id = &transfer->transfer_id;
106 resp_transfer.payload = buffer;
107 resp_transfer.payload_len = total_size;
108
109 uavcan_response(iface, transfer->source_node_id, &resp_transfer);
110}
111
112
static uint8_t status
#define Min(x, y)
Definition esc_dshot.c:109
uint8_t msg[10]
Buffer used for general comunication over SPI (out buffer)
uint16_t foo
Definition main_demo5.c:58
Architecture independent timing functions.
static float get_sys_time_float(void)
Get the time in seconds since startup.
Definition sys_time.h:148
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.
Definition uavcan.c:313
void uavcan_response(struct uavcan_iface_t *iface, uint8_t destination_node_id, CanardTxTransfer *transfer)
Definition uavcan.c:332
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.
Definition uavcan.c:240
Main uavcan event structure for registering/calling callbacks.
Definition uavcan.h:74
uavcan interface structure
Definition uavcan.h:44
struct uavcan_node_mapping_t * uavcan_get_node_id_mapping(const uint8_t id)
void request_node_info(struct uavcan_iface_t *iface, uint8_t destination_node_id)
char ac_can_name[50]
static void node_info_cb(struct uavcan_iface_t *iface, CanardRxTransfer *transfer)
static uavcan_event node_info_ev
static void get_uavcan_hardware_version(struct uavcan_protocol_HardwareVersion *hardware_version)
void uavcan_init_reporting()
#define AC_CAN_NAME_PREFIX
static void get_uavcan_status(struct uavcan_protocol_NodeStatus *status)
void uavcan_reporting(void)
uint8_t ac_can_name_len
static void get_uavcan_software_version(struct uavcan_protocol_SoftwareVersion *software_version)
static void node_status_cb(struct uavcan_iface_t *iface, CanardRxTransfer *transfer)
request uniq_id of all nodes on the bus.
static uavcan_event node_status_ev
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
int transfer(const Mat *from, const image_t *to)