32 #ifndef UAVCAN_ACTUATORS_USE_CURRENT
33 #define UAVCAN_ACTUATORS_USE_CURRENT TRUE
45 #ifdef SERVOS_UAVCAN1_NB
49 #ifdef SERVOS_UAVCAN2_NB
55 #define UAVCAN_EQUIPMENT_ESC_STATUS_ID 1034
56 #define UAVCAN_EQUIPMENT_ESC_STATUS_SIGNATURE (0xA9AF28AEA2FBB254ULL)
57 #define UAVCAN_EQUIPMENT_ESC_STATUS_MAX_SIZE ((110 + 7)/8)
60 #define UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_ID 1030
61 #define UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_SIGNATURE (0x217F5C87D7EC951DULL)
62 #define UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_MAX_SIZE ((285 + 7)/8)
68 #if PERIODIC_TELEMETRY
79 #ifdef SERVOS_UAVCAN1_NB
80 if (esc_idx >= max_id && esc_idx < max_id + SERVOS_UAVCAN1_NB) {
82 telem = uavcan1_telem;
84 max_id += SERVOS_UAVCAN1_NB;
86 #ifdef SERVOS_UAVCAN2_NB
87 if (esc_idx >= max_id && esc_idx < max_id + SERVOS_UAVCAN2_NB) {
89 telem = uavcan2_telem;
91 max_id += SERVOS_UAVCAN2_NB;
112 if (esc_idx >= max_id) {
128 #ifdef SERVOS_UAVCAN1_NB
129 if (iface == &uavcan1) {
130 telem = uavcan1_telem;
131 max_id = SERVOS_UAVCAN1_NB;
134 #ifdef SERVOS_UAVCAN2_NB
135 if (iface == &uavcan2) {
136 telem = uavcan2_telem;
137 max_id = SERVOS_UAVCAN2_NB;
141 canardDecodeScalar(
transfer, 105, 5,
false, (
void *)&esc_idx);
143 if (esc_idx > max_id || telem == NULL || max_id == 0) {
146 canardDecodeScalar(
transfer, 0, 32,
false, (
void *)&telem[esc_idx].
energy);
147 canardDecodeScalar(
transfer, 32, 16,
true, (
void *)&tmp_float);
148 telem[esc_idx].
voltage = canardConvertFloat16ToNativeFloat(tmp_float);
149 canardDecodeScalar(
transfer, 48, 16,
true, (
void *)&tmp_float);
150 telem[esc_idx].
current = canardConvertFloat16ToNativeFloat(tmp_float);
151 canardDecodeScalar(
transfer, 64, 16,
true, (
void *)&tmp_float);
152 telem[esc_idx].
temperature = canardConvertFloat16ToNativeFloat(tmp_float);
153 canardDecodeScalar(
transfer, 80, 18,
true, (
void *)&telem[esc_idx].
rpm);
155 #ifdef UAVCAN_ACTUATORS_USE_CURRENT
158 #ifdef SERVOS_UAVCAN1_NB
159 for (
uint8_t i = 0; i < SERVOS_UAVCAN1_NB; ++i) {
163 #ifdef SERVOS_UAVCAN2_NB
164 for (
uint8_t i = 0; i < SERVOS_UAVCAN2_NB; ++i) {
184 #if PERIODIC_TELEMETRY
204 for (
uint8_t i = 0; i < nb; i++) {
205 canardEncodeScalar(buffer,
offset, 14, (
void *)&values[i]);
211 CANARD_TRANSFER_PRIORITY_HIGH, buffer, (
offset + 7) / 8);
int16_t actuators_uavcan1_values[SERVOS_UAVCAN1_NB]
Stub file needed per uavcan interface because of generator.
int16_t actuators_uavcan2_values[SERVOS_UAVCAN2_NB]
Stub file needed per interface because of generator.
#define UAVCAN_EQUIPMENT_ESC_STATUS_ID
static void actuators_uavcan_send_esc(struct transport_tx *trans, struct link_device *dev)
void actuators_uavcan_init(struct uavcan_iface_t *iface)
Initialize an uavcan interface.
#define UAVCAN_EQUIPMENT_ESC_STATUS_SIGNATURE
void actuators_uavcan_commit(struct uavcan_iface_t *iface, int16_t *values, uint8_t nb)
Commit actuator values to the uavcan interface.
#define UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_SIGNATURE
static void actuators_uavcan_esc_status_cb(struct uavcan_iface_t *iface, CanardRxTransfer *transfer)
Whevener an ESC_STATUS message from the EQUIPMENT group is received.
static bool actuators_uavcan_initialized
#define UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_ID
static uavcan_event esc_status_ev
#define UAVCAN_EQUIPMENT_ESC_RAWCOMMAND_MAX_SIZE
Main uavcan event structure for registering/calling callbacks.
static const float offset[]
struct Electrical electrical
Interface for electrical status: supply voltage, current, battery status, etc.
float current
current in A
float vsupply
supply voltage in V
double rand_uniform(void)
uavcan interface structure
static const struct usb_device_descriptor dev
int8_t register_periodic_telemetry(struct periodic_telemetry *_pt, uint8_t _id, telemetry_cb _cb)
Register a telemetry callback function.
Periodic telemetry system header (includes downlink utility and generated code).
#define DefaultPeriodic
Set default periodic telemetry.
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.
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.
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
int int32_t
Typedef defining 32 bit int type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
short int16_t
Typedef defining 16 bit short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
int transfer(const Mat *from, const image_t *to)