mirror of https://github.com/rusefi/bldc.git
910 lines
25 KiB
C
910 lines
25 KiB
C
/*
|
|
* UAVCAN data structure definition for libcanard.
|
|
*
|
|
* Autogenerated, do not edit.
|
|
*
|
|
* Source file: /home/benjamin/Nextcloud/Dokument/ARM/STM_Eclipse/BLDC_4_ChibiOS/libcanard/dsdl/definitions/vesc/20601.RTData.uavcan
|
|
*/
|
|
#include "vesc/RTData.h"
|
|
#include "canard.h"
|
|
|
|
#ifndef CANARD_INTERNAL_SATURATE
|
|
#define CANARD_INTERNAL_SATURATE(x, max) ( ((x) > max) ? max : ( (-(x) > max) ? (-max) : (x) ) );
|
|
#endif
|
|
|
|
#ifndef CANARD_INTERNAL_SATURATE_UNSIGNED
|
|
#define CANARD_INTERNAL_SATURATE_UNSIGNED(x, max) ( ((x) >= max) ? max : (x) );
|
|
#endif
|
|
|
|
#if defined(__GNUC__)
|
|
# define CANARD_MAYBE_UNUSED(x) x __attribute__((unused))
|
|
#else
|
|
# define CANARD_MAYBE_UNUSED(x) x
|
|
#endif
|
|
|
|
/**
|
|
* @brief vesc_RTData_encode_internal
|
|
* @param source : pointer to source data struct
|
|
* @param msg_buf: pointer to msg storage
|
|
* @param offset: bit offset to msg storage
|
|
* @param root_item: for detecting if TAO should be used
|
|
* @retval returns offset
|
|
*/
|
|
uint32_t vesc_RTData_encode_internal(vesc_RTData* source,
|
|
void* msg_buf,
|
|
uint32_t offset,
|
|
uint8_t CANARD_MAYBE_UNUSED(root_item),
|
|
bool tao_enabled)
|
|
{
|
|
(void)tao_enabled;
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
uint16_t tmp_float = 0;
|
|
#else
|
|
CANARD_USE_FLOAT16_CAST tmp_float = 0;
|
|
#endif
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->volt_in);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->volt_in;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->volt_d);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->volt_d;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->volt_q);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->volt_q;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->temp_mos_max);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->temp_mos_max;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->temp_mos_1);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->temp_mos_1;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->temp_mos_2);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->temp_mos_2;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->temp_mos_3);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->temp_mos_3;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->temp_motor_max);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->temp_motor_max;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->temp_motor_1);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->temp_motor_1;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->temp_motor_2);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->temp_motor_2;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->curr_motor);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->curr_motor;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->curr_in);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->curr_in;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->curr_d);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->curr_d;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->curr_q);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->curr_q;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->roll);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->roll;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->pitch);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->pitch;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->yaw);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->yaw;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->acc_x);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->acc_x;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->acc_y);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->acc_y;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->acc_z);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->acc_z;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->gyro_x);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->gyro_x;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->gyro_y);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->gyro_y;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->gyro_z);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->gyro_z;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->erpm);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->erpm;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->rpm);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->rpm;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->duty);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->duty;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->ah_used);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->ah_used;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->ah_charged);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->ah_charged;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->wh_used);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->wh_used;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->wh_charged);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->wh_charged;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->encoder_pos);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->encoder_pos;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->battery_level);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->battery_level;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
tmp_float = canardConvertNativeFloatToFloat16(source->battery_wh_tot);
|
|
#else
|
|
tmp_float = (CANARD_USE_FLOAT16_CAST)source->battery_wh_tot;
|
|
#endif
|
|
canardEncodeScalar(msg_buf, offset, 16, (void*)&tmp_float); // 32767
|
|
offset += 16;
|
|
canardEncodeScalar(msg_buf, offset, 8, (void*)&source->fault_code); // 255
|
|
offset += 8;
|
|
|
|
canardEncodeScalar(msg_buf, offset, 8, (void*)&source->vesc_id); // 255
|
|
offset += 8;
|
|
|
|
return offset;
|
|
}
|
|
|
|
/**
|
|
* @brief vesc_RTData_encode
|
|
* @param source : Pointer to source data struct
|
|
* @param msg_buf: Pointer to msg storage
|
|
* @retval returns message length as bytes
|
|
*/
|
|
uint32_t vesc_RTData_encode(vesc_RTData* source, void* msg_buf, bool tao_enabled)
|
|
{
|
|
uint32_t offset = 0;
|
|
|
|
offset = vesc_RTData_encode_internal(source, msg_buf, offset, 1, tao_enabled);
|
|
|
|
return (offset + 7 ) / 8;
|
|
}
|
|
|
|
/**
|
|
* @brief vesc_RTData_decode_internal
|
|
* @param transfer: Pointer to CanardRxTransfer transfer
|
|
* @param payload_len: Payload message length
|
|
* @param dest: Pointer to destination struct
|
|
* @param dyn_arr_buf: NULL or Pointer to memory storage to be used for dynamic arrays
|
|
* vesc_RTData dyn memory will point to dyn_arr_buf memory.
|
|
* NULL will ignore dynamic arrays decoding.
|
|
* @param offset: Call with 0, bit offset to msg storage
|
|
* @retval offset or ERROR value if < 0
|
|
*/
|
|
int32_t vesc_RTData_decode_internal(
|
|
const CanardRxTransfer* transfer,
|
|
uint16_t CANARD_MAYBE_UNUSED(payload_len),
|
|
vesc_RTData* dest,
|
|
uint8_t** CANARD_MAYBE_UNUSED(dyn_arr_buf),
|
|
int32_t offset,
|
|
bool tao_enabled)
|
|
{
|
|
(void)tao_enabled;
|
|
int32_t ret = 0;
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
uint16_t tmp_float = 0;
|
|
#else
|
|
CANARD_USE_FLOAT16_CAST tmp_float = 0;
|
|
#endif
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->volt_in = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->volt_in = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->volt_d = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->volt_d = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->volt_q = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->volt_q = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->temp_mos_max = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->temp_mos_max = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->temp_mos_1 = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->temp_mos_1 = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->temp_mos_2 = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->temp_mos_2 = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->temp_mos_3 = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->temp_mos_3 = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->temp_motor_max = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->temp_motor_max = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->temp_motor_1 = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->temp_motor_1 = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->temp_motor_2 = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->temp_motor_2 = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->curr_motor = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->curr_motor = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->curr_in = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->curr_in = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->curr_d = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->curr_d = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->curr_q = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->curr_q = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->roll = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->roll = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->pitch = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->pitch = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->yaw = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->yaw = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->acc_x = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->acc_x = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->acc_y = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->acc_y = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->acc_z = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->acc_z = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->gyro_x = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->gyro_x = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->gyro_y = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->gyro_y = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->gyro_z = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->gyro_z = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->erpm = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->erpm = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->rpm = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->rpm = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->duty = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->duty = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->ah_used = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->ah_used = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->ah_charged = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->ah_charged = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->wh_used = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->wh_used = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->wh_charged = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->wh_charged = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->encoder_pos = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->encoder_pos = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->battery_level = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->battery_level = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
// float16 special handling
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&tmp_float);
|
|
|
|
if (ret != 16)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
#ifndef CANARD_USE_FLOAT16_CAST
|
|
dest->battery_wh_tot = canardConvertFloat16ToNativeFloat(tmp_float);
|
|
#else
|
|
dest->battery_wh_tot = (float)tmp_float;
|
|
#endif
|
|
offset += 16;
|
|
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 8, false, (void*)&dest->fault_code);
|
|
if (ret != 8)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
offset += 8;
|
|
|
|
ret = canardDecodeScalar(transfer, (uint32_t)offset, 8, false, (void*)&dest->vesc_id);
|
|
if (ret != 8)
|
|
{
|
|
goto vesc_RTData_error_exit;
|
|
}
|
|
offset += 8;
|
|
return offset;
|
|
|
|
vesc_RTData_error_exit:
|
|
if (ret < 0)
|
|
{
|
|
return ret;
|
|
}
|
|
else
|
|
{
|
|
return -CANARD_ERROR_INTERNAL;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief vesc_RTData_decode
|
|
* @param transfer: Pointer to CanardRxTransfer transfer
|
|
* @param payload_len: Payload message length
|
|
* @param dest: Pointer to destination struct
|
|
* @param dyn_arr_buf: NULL or Pointer to memory storage to be used for dynamic arrays
|
|
* vesc_RTData dyn memory will point to dyn_arr_buf memory.
|
|
* NULL will ignore dynamic arrays decoding.
|
|
* @retval offset or ERROR value if < 0
|
|
*/
|
|
int32_t vesc_RTData_decode(const CanardRxTransfer* transfer,
|
|
uint16_t payload_len,
|
|
vesc_RTData* dest,
|
|
uint8_t** dyn_arr_buf,
|
|
bool tao_enabled)
|
|
{
|
|
const int32_t offset = 0;
|
|
int32_t ret = 0;
|
|
|
|
// Clear the destination struct
|
|
for (uint32_t c = 0; c < sizeof(vesc_RTData); c++)
|
|
{
|
|
((uint8_t*)dest)[c] = 0x00;
|
|
}
|
|
|
|
ret = vesc_RTData_decode_internal(transfer, payload_len, dest, dyn_arr_buf, offset, tao_enabled);
|
|
|
|
return ret;
|
|
}
|